@Bober
Racja. I mało tego sam sobie to sprowokowałem. Cart startuje mi z A000-BFFF. Tam sobie ustawiam jakąś DL itp. I teraz robię następujący błąd. Ponieważ ATARI OS nie lubi jak się włącza i wyłącza carta. Po prostu traktuje to jako "wykryto cartridge" i chce robić reset. To ja robię taki trik:
lda #01
sta CRITIC
Takie coś załatwia, że podczas każdego VBLANK nie sprawdzana jest różnica między TRIG3 i GINTLK. Generalnie super sprawa, bo mam więcej wolnych cykli i szybciej się ładują dane z carta. I w ogóle mogę pstrykać na RD5...
ALE
CRITIC też wyłącza jakieś odświeżania rejestrów sprzętowych względem ich cieni. To też powoduje, że ANTIC ma coś tam nie ustawiane i jak przed CRITIC był na $Axxx i wczytywany XEX coś tam namiesza i robi śmietnik to ANTIC powoli wędruje w stronę $D5xx. Jak ją tylko dotknie to masakra. O tym czy doczłapie się do tego adresy decyduje jak długo to trwa i jaki śmietnik był. No i na małych XEX wszystko działało. Ale jak XEX był długi i jeszcze jak miał dużo tych bloków DOSowych FFFF to nagle cyk... i jakiś dziwny bank włączony. :/
Za diabła nie idzie tego wyłapać. W emu breakpointy na procka nic nie dają, bo tu ANTIC ładuje się na magistralę i chce czytać.
Natomiast okazuje się, że trzeba zrobić bardzo prosty trik
lda #$01
sta CRITIC
lda #$00
sta DMACTL
czyli dla aktywowanych operacji krytycznych czasowo, dla bezpieczeństwa wyłączyć ANTICa. Żeby nie trafił przez przypadek na odczyt D5XX gdzie standard maxflash szaleje.
I po operacjach czytania na carcie
lda TRIG3
sta GINTLK
lda #$00
sta CRITIC
I ładnie pojawia się obraz wtedy kiedy trzeba, nawet jak XEXy mają jakieś czołówki w czasie ładowania to wszystko śmiga. Wyłączenie CRITIC powoduje, że już VBLANK ładnie pilnuje ANTICa. A że TRIG3 i GINTLK jest identyczne to nie ma reakcji na pstrykanie cartem.
No taki niuans :)
Edit
@Fox
W ogóle przed wczytywaniem XEXa wyłączyłem DMA. Ale niektóre gry po kilku blokach włączają sobie czołówkę. Potem ja czytając dalej znowu włączam CRITIC i za random-czas klapa.