Wykrycie VBXE: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Tdc (dyskusja | edycje)
int.
+ rdzeń 1.20
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 11 wrz 2009, 15:39

Procedura wykrycia rdzenia FX VBXE na stronie $D6 lub $D7.

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.