Wykrycie VBXE
From Atariki
| Wersja z dnia 19:28, 10 lip 2009 Tdc (Dyskusja | wkład) (int.) ← Previous diff |
Wersja z dnia 13:39, 11 wrz 2009 KMK (Dyskusja | wkład) (+ rdzeń 1.20) Next diff → |
||
| Linia 1: | Linia 1: | ||
| Procedura wykrycia rdzenia FX [[VBXE]] na stronie $D6 lub $D7. | Procedura wykrycia rdzenia FX [[VBXE]] na stronie $D6 lub $D7. | ||
| - | == Kod == | + | == Kod dla rdzeni 1.09 i starszych == |
| <pre> | <pre> | ||
| ; | ; | ||
| ; 2009 by KMK/DLT | ; 2009 by KMK/DLT | ||
| ; | ; | ||
| + | MEMAC_B_CTL = $4c | ||
| + | |||
| vbxe_detect | vbxe_detect | ||
| jsr ?try | jsr ?try | ||
| Linia 12: | Linia 14: | ||
| inc _vbxe_write+2 | inc _vbxe_write+2 | ||
| - | ?try ldx $3fff | + | ?try ldx $4000 |
| - | ldy #$4c | + | ldy #MEMAC_B_CTL |
| lda #$80 | lda #$80 | ||
| jsr _vbxe_write | jsr _vbxe_write | ||
| - | cpx $3fff | + | cpx $4000 |
| bne ?fnd | bne ?fnd | ||
| jsr ?clr | jsr ?clr | ||
| inx | inx | ||
| - | stx $3fff | + | stx $4000 |
| lda #$80 | lda #$80 | ||
| jsr _vbxe_write | jsr _vbxe_write | ||
| - | cpx $3fff | + | cpx $4000 |
| bne ?fnd | bne ?fnd | ||
| sec | sec | ||
| Linia 33: | Linia 35: | ||
| rts | rts | ||
| </pre> | </pre> | ||
| + | |||
| + | == Kod dla rdzenia 1.20 == | ||
| + | |||
| + | Dla rdzenia 1.20 kod jest identyczny z tym wyjątkiem, że należy przyjąć $5d jako wartość <code>MEMAC_B_CTL</code>. | ||
| == Sposób użycia == | == Sposób użycia == | ||
| - | Wywołanie <code>JSR VBXE_DETECT</code> 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: | + | Wywołanie <code>JSR VBXE_DETECT</code> wraca z ustawionym znacznikiem C, gdy VBXE nie wykryto lub ze skasowanym znacznikiem C, gdy wykryto. W tej ostatniej sytuacji pod adresem <code>_vbxe_write+2</code> (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. | * $xx40 - "magiczna" wartość $10, oznaczająca rdzeń FX, wersja 1. | ||
| Linia 45: | Linia 51: | ||
| == Działanie == | == Działanie == | ||
| - | Podprogram próbuje podłączyć bank 0 VRAM-u jako okno MEMAC A (pod $2000-$3FFF) i sprawdza, czy się coś zmieniło w odnośnym obszarze pamięci. | + | 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. |
| [[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] | ||
Wersja z dnia 13:39, 11 wrz 2009
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 (np. $08 = rewizja 08) lub $FF (rewizja 07 lub starsza)
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.
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.
