1 Ostatnio edytowany przez Gienek (2023-04-30 16:29:46)

Utknąłem na takiej zagadce. Zrobiłem sobie procedurkę co kopiuje ROM do RAM. Wszystko cacy.
Chciałem uodpornić kod, na wypadek programowego skoku do RESET ($C290).
Procedura RESET w początkowej fazie (według Zientary) skacze do $C4DA (IOPORTINI)
i tam jest taki kod

     LDA #$00
     TAX
     STA PBCTL
NEXT STA GTIA,X
     STA ANTIC,X
     STA POKEY,X
     CPX #$01
     BEQ BYPASS
     STA PIA,X
BYPASS INX
    BNE NEXT

jest "CPX #$01" i Zientara napisał, że "W pierwszej fazie procedury zerowane są wszystkie rejestry układów GTIA, ANTIC i POKEY oraz rejestry układu PIA z wyjątkiem PORTB". Co ma sens.

Tymczasem pod emulatorem ATARI800 gdy X jest równe 5 pakowane jest ZERO do $D305 (co to w ogóle za rejestr jest?) i emulator włącza mi ROM no i z "podkładki" lipa.

ATARI800 źle to robi? W prawdziwym ATARI jest jakiś mirroring co 4 bajty? Ale wtedy CPX #$01 nie chroni przed odłączeniem ROMu, a przecież w praktyce chroni. Czy jest mirroring rejestrów ale sam PORTB jest chroniony a ATARI800 robi to źle?

2 Ostatnio edytowany przez mono (2023-04-30 17:19:29)

Zapisy $00 idą kolejno do:
$D303 PBCTL - kierunek
$D300 PORTA - wszystkie wejścia
$D301 PORTB - omijamy bo $00 kiedy linie są wyjściowe odłączyłoby ROM
$D302 PACTL - kierunek
$D303 PBCTL - kierunek
$D304 PORTA dummy - wszystkie wejścia
$D305 PORTB dummy - wszystkie wejścia czyli na wszystkich liniach PB są 1 - czyli jakby w PORTB było zapisane $FF
$D306 PACTL dummy - kierunek
$D307 PBCTL dummy - kierunek
...
Szczerze powiedziawszy to nie wiem po co ten CPX jest, bo zapis $00 do PBCTL przed pętlą już powoduje zabezpieczenie stanów linii PB. Pewnie kolejna niekonsekwencja w XL OS.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

mono napisał/a:

Szczerze powiedziawszy to nie wiem po co ten CPX jest, bo zapis $00 do PBCTL przed pętlą już powoduje zabezpieczenie stanów linii PB. Pewnie kolejna niekonsekwencja w XL OS.

No, w Rapidus OS-ie tego CPX-a nie ma i system działa :)

KMK
? HEX$(6670358)

4

Kumam. Ma to sens, ustawienie portu jako wejście podciąga piny do wysokiego stanu. Może to jakieś zaszłości historyczne, albo inżynier od PCB nie dogadał się z programistą.

Emulator powinien ROM zblokować już po wpisie do kierunku, więc jakiś zgrzyt jest.

Tak czy siak CPX jest nie potrzebny. :)