Wykrycie VBXE

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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.

Personal tools