Przyczyną jest - przypuszczam, bo kodu nie oglądałem, jeno śmieci w pamięci - adresowanie z przekroczeniem granicy 64k. Np. zapis adresów $00-$02 w ten sposób:
ldx #$fd
loop:
lda costam-$fd,x
sta $ff03,x
inx
bne loop
Przy X=$FD, rozkaz STA $FF03,X robi zapis pod $010000 zamiast pod $000000 - nawet w trybie emulacji. I im dłużej o tym myślę, tym bardziej mi to wygląda na błąd w procesorze - w trybie emulacji "tradycyjne" rozkazy nie powinny móc przekroczyć granicy 64k ze względu na zgodność wstecz, a tymczasem przekraczają.
Rozwiązaniem mogłoby być ograniczenie w trybie emulacji dostępności RAM-u powyżej pierwszych 64k (w tym trybie jego użyteczność i tak jest dyskusyjna); np. w ten sposób, żeby było tam "widać" to samo, co w pierwszych 64k. I to jest pewno owo "postawienie na głowie zarządzania pamięcią" w karcie :)
Może da się spaczować. A może autor się znajdzie i poprawi?