Wykrycie VBXE
From Atariki
Procedura wykrycia rdzenia FX VBXE na stronie $D6 lub $D7.
Spis treści |
Kod dla rdzeni 1.09 i starszych
;
; 2009 by KMK/DLT
;
MEMAC_B_CTL = $4c
vbxe_detect
jsr ?try
bcc ?clr
inc _vbxe_write+2
?try ldx $4000
ldy #MEMAC_B_CTL
lda #$80
jsr _vbxe_write
cpx $4000
bne ?fnd
jsr ?clr
inx
stx $4000
lda #$80
jsr _vbxe_write
cpx $4000
bne ?fnd
sec
.byte $24
?fnd clc
?clr lda #$00
_vbxe_write
sta $d600,y
rts
Kod dla rdzenia 1.20
Dla rdzenia 1.20 kod jest identyczny z tym wyjątkiem, że należy przyjąć $5d jako wartość MEMAC_B_CTL.
Sposób użycia
Wywołanie JSR VBXE_DETECT wraca z ustawionym znacznikiem C, gdy VBXE nie wykryto lub ze skasowanym znacznikiem C, gdy wykryto. W tej ostatniej sytuacji pod adresem _vbxe_write+2 (1 bajt) jest numer strony, na której zdekodowana jest karta, a pod adresem $xx40 i $xx41 (gdzie "xx" to odpowiedni nr strony, tj. D6 lub D7) znajduje się kolejno:
- $xx40 - "magiczna" wartość $10, oznaczająca rdzeń FX, wersja 1.
- $xx41 - numer rewizji rdzenia
Przyjmuje się, że twórcy rdzeni niezgodnych z FX v.1.0 zadbają o dobranie innej i unikalnej wartości magicznej, co pozwoli na łatwą identyfikację rdzeni i uniknięcie problemów z kompatybilnością oprogramowania.
Procedurę w powyższej postaci można wywołać tylko raz.
Numer rewizji rdzenia
Numer rewizji rdzenia FX ($xx41) ma następującą strukturę:
- bit 7 = 1, emulacja rozszerzenia RAMBO.
- bit 6-4, główny numer rewizji zapisany w kodzie BCD (cyfry od 0 do 9).
- bit 3-0, pomocniczy numer rewizji zapisany w kodzie BCD, jak wyżej
Różnica w pomocniczym numerze rewizji oznacza zmiany kompatybilne (np. poprawki błędów). Zmiana głównego numeru rewizji oznacza, że rdzeń jest niezgodny z poprzednimi.
Ten schemat obowiązuje od wersji rdzenia 1.21. Rdzeń 1.20 nie ma znacznika RAMBO. Rdzenie wcześniejsze od 1.20 mogą być niekompatybilne ze sobą mimo tego samego głównego numeru rewizji (tzn. 0 - rdzeń FX 1.10 nie istnieje). Rdzenie wcześniejsze niż 1.08 w ogóle nie mają numeru rewizji rdzenia, pod tym adresem odczyta się $FF.
Działanie
Podprogram próbuje podłączyć bank 0 VRAM-u jako (charakterystyczne dla rdzenia FX) okno MEMAC B (pod $4000-$7FFF) i sprawdza, czy się coś zmieniło w odnośnym obszarze pamięci.
