teraz będzie można pisać i mówić że takie a takie Atari XE/XL jest albo nie jest kompatybilne z Crownland :P
Crownland ładuje się pod takie adresy (korzysta z banku $C3):
$0600-$060B
INIT $0600 ; bank = $c3
$4000-$43E2
$4400-$4FFF
$5300-$5E31
$5E7C-$769B
INIT $0606 ; bank = $ff
$1600-$B05D
$B182-$B1BF
$B200-$B2BF
$B300-$B96C
RUN $B000
0600 LDA #$C3 ; 2cyc ; A9 C3
0602 STA $D301 ;PORTB ; 4cyc ; 8D 01 D3
0605 RTS ; 6cyc ; 60
0606 LDA #$FF ; 2cyc ; A9 FF
0608 STA $D301 ;PORTB ; 4cyc ; 8D 01 D3
060B RTS ; 6cyc ; 60
blok ładujący się od adresu $1600-$B05D sugeruje że potrzeba użyć jakiegoś loadera, który siedzi poniżej tego adresu
z tego co wspomniał Probe problem leży po stronie nielegali które użył, trudno mi w to uwierzyć w końcu każdy wie że nielegalne rozkazy CPU 6502 nie zadziałają na każdej atarce (na C64 to przejdzie, ale nie na XE/XL), czy też po stronie kodu który sam się napisał tyle że źle się napisał :O
Jak dla mnie to początek programu jest inny niż bywa to w zwyczaju:
B000 LDA $14 ;RTCLOK+2 ; 3cyc ; A5 14
B002 CMP $14 ;RTCLOK+2 ; 3cyc ; C5 14
B004 BNE $B002 ; 2cyc ; D0 FC
w ten sposób to na pewno synchronizacji z początkiem ramki nie będzie, zamiast BNE powinno byc BEQ
albo można tak
B006 SEI ; 2cyc ; 78
B007 LDA #$00 ; 2cyc ; A9 00
B009 STA $D40E ;NMIEN ; 4cyc ; 8D 0E D4
B00C LDA #$FE ; 2cyc ; A9 FE
B00E STA $D301 ;PORTB ; 4cyc ; 8D 01 D3
B011 LDX #$D1 ; 2cyc ; A2 D1
B013 LDY #$AF ; 2cyc ; A0 AF
B015 STX $FFFA ; 4cyc ; 8E FA FF
B018 STY $FFFB ; 4cyc ; 8C FB FF
B01B LDA #$C0 ; 2cyc ; A9 C0
B01D STA $D40E ;NMIEN ; 4cyc ; 8D 0E D4
tutaj standardowo, jest OK
B020 LDX #$00 ; 2cyc ; A2 00
B022 TXA ; 2cyc ; 8A
B023 STA $00,X ; 4cyc ; 95 00
B025 STA $0100,X ; 5cyc ; 9D 00 01
B028 INX ; 2cyc ; E8
B029 BNE $B023 ; 2cyc ; D0 F8
B02B DEX ; 2cyc ; CA
B02C TXS ; 2cyc ; 9A
tutaj odważna zabawa ze stosem, przerwania są już włączone, nie było dokładnej synchronizacji z początkiem ramki, tylko program wystartował od jakiegoś losowego momentu, może się zdarzyć że akurat zamaże adres powrotu z przerwania
sugerowałbym umieścić ten kod czyszczący strone zerową i stos (nie wiadomo po co) przed włączeniem przerwań