Ma ktoś doświadczenie z emulatorem ATARI800 i działaniem kodu ze strony $D500? Coś dziwnego się dzieje.
Zrobiłem sobie carta (DCart) co udostępnia cześć banku na stronę $D5XX, tak, że mogę wykonać kod nawet gdy sam cart ma wyłączony bank. Bardzo wygodna sprawa, bo można zaszyć procedury, które są "niezniszczalne". W sensie, przełączanie banków, RAM/ROM nie rusza ich.
Zrobiłem sobie tester i na real ATARI wszystko śmiga zgodnie z planem.
No to chciałem emulator ATARI800 uzupełnić o taki cart. Dodawałem sobie już carty, więc nie jest to jakieś trudne. I niby wszystko jest OK. Jednak coś ATARI800 ma poknocone z D5XX.
Puszczam kod w monitorze. Idę krok po kroku. Jestem na stronie $06 i skaczę pod $D500. Na polecenie "D" Debuger ładnie pokazuje kod ukryty na stronie $D5. Robię jedną instrukcję, sprawdzam, drugą, sprawdzam. Wszystko OK. Robię trzecią i kod idzie w adres z czapy $5462. Jakim cudem? Nic tam niema. A pod $D500 wszystko jest OK.
Próbowałem założyć BREAKPOINTy na stronie $D5 ale też coś to nie działa. Jakby ktoś w emulatorze zrobił bypass dla tego zakresu i jest on traktowany jakoś wyjątkowo. Ale znaleźć to to nie wiem jak.
Upgrade dla ATARI800 (z nowym cartem) oraz tester poniżej. Tester jest prosty. Miga ramka, po naciśnięciu START, skacze do RAM i tam kod miga tłem, potem START i skacze do $D500 i mają migać znaki. Na real działa, na emu nie.
Widok z monitora
> g
0 21 A=A5 X=00 Y=94 S=FF P=N-*----C PC=064D: 4C 00 D5 JMP $D500
>
0 24 A=A5 X=00 Y=94 S=FF P=N-*----C PC=D500: A5 14 LDA $14 ;RTCLOK+2
> d d500
D500: A5 14 LDA $14 ;RTCLOK+2
D502: 8D C5 02 STA $02C5 ;COLOR1
D505: AD 1F D0 LDA $D01F ;CONSOL
D508: 29 01 AND #$01
D50A: D0 F4 BNE $D500
D50C: 4C 77 E4 JMP $E477 ;COLDSV
D50F: A5 14 LDA $14 ;RTCLOK+2
D511: 8D C8 02 STA $02C8 ;COLOR4
D514: AD 1F D0 LDA $D01F ;CONSOL
D517: 29 01 AND #$01
D519: D0 F4 BNE $D50F
D51B: A9 00 LDA #$00
D51D: 8D C8 02 STA $02C8 ;COLOR4
D520: AD 1F D0 LDA $D01F ;CONSOL
D523: 29 01 AND #$01
D525: F0 F9 BEQ $D520
D527: A2 4F LDX #$4F
D529: BD 35 B5 LDA $B535,X
D52C: 9D 00 06 STA $0600,X
D52F: CA DEX
D530: 10 F7 BPL $D529
D532: 4C 00 06 JMP $0600
D535: AC C6 02 LDY $02C6 ;COLOR2
D538: A9 40 LDA #$40
> g
0 26 A=A5 X=00 Y=94 S=FF P=N-*----C PC=D502: 8D C5 02 STA $02C5 ;COLOR1
> d d500
D500: A5 14 LDA $14 ;RTCLOK+2
D502: 8D C5 02 STA $02C5 ;COLOR1
D505: AD 1F D0 LDA $D01F ;CONSOL
D508: 29 01 AND #$01
D50A: D0 F4 BNE $D500
D50C: 4C 77 E4 JMP $E477 ;COLDSV
D50F: A5 14 LDA $14 ;RTCLOK+2
D511: 8D C8 02 STA $02C8 ;COLOR4
D514: AD 1F D0 LDA $D01F ;CONSOL
D517: 29 01 AND #$01
D519: D0 F4 BNE $D50F
D51B: A9 00 LDA #$00
D51D: 8D C8 02 STA $02C8 ;COLOR4
D520: AD 1F D0 LDA $D01F ;CONSOL
D523: 29 01 AND #$01
D525: F0 F9 BEQ $D520
D527: A2 4F LDX #$4F
D529: BD 35 B5 LDA $B535,X
D52C: 9D 00 06 STA $0600,X
D52F: CA DEX
D530: 10 F7 BPL $D529
D532: 4C 00 06 JMP $0600
D535: AC C6 02 LDY $02C6 ;COLOR2
D538: A9 40 LDA #$40
> g
0 29 A=A5 X=00 Y=94 S=FF P=N-*----C PC=5462: 00 BRK
> d
5462: 00 BRK
5463: 00 BRK
5464: 00 BRK
5465: 00 BRK
5466: 00 BRK
5467: 00 BRK
5468: 00 BRK
5469: 00 BRK
546A: 00 BRK
546B: 00 BRK
546C: 00 BRK
546D: 00 BRK
546E: 00 BRK
546F: 00 BRK
5470: 00 BRK
5471: 00 BRK
5472: 00 BRK
5473: 00 BRK
5474: 00 BRK
5475: 00 BRK
5476: 00 BRK
5477: 00 BRK
5478: 00 BRK
5479: 00 BRK
> d d500
D500: A5 14 LDA $14 ;RTCLOK+2
D502: 8D C5 02 STA $02C5 ;COLOR1
D505: AD 1F D0 LDA $D01F ;CONSOL
D508: 29 01 AND #$01
D50A: D0 F4 BNE $D500
D50C: 4C 77 E4 JMP $E477 ;COLDSV
D50F: A5 14 LDA $14 ;RTCLOK+2
D511: 8D C8 02 STA $02C8 ;COLOR4
D514: AD 1F D0 LDA $D01F ;CONSOL
D517: 29 01 AND #$01
D519: D0 F4 BNE $D50F
D51B: A9 00 LDA #$00
D51D: 8D C8 02 STA $02C8 ;COLOR4
D520: AD 1F D0 LDA $D01F ;CONSOL
D523: 29 01 AND #$01
D525: F0 F9 BEQ $D520
D527: A2 4F LDX #$4F
D529: BD 35 B5 LDA $B535,X
D52C: 9D 00 06 STA $0600,X
D52F: CA DEX
D530: 10 F7 BPL $D529
D532: 4C 00 06 JMP $0600
D535: AC C6 02 LDY $02C6 ;COLOR2
D538: A9 40 LDA #$40
>