*=$8000
.byte 0
;
*= $FFFC
.word reset
.word 0
*= $F000
reset
sei
jmp wait
cld
ldx #$FF
txs ; initialize 6502 mode and stack ptr
inx
txa
cleario
sta $d000,x
sta $d200,x
sta $d300,x
sta $d400,x
dex
bne cleario
lda #3
sta $d20f ; set Pokey to active
ldx #$10
delay
dex
bne delay ; short delay for Pokey to start, probably not needed
ldx #<dlist
ldy #>dlist
stx $d402
sty $d403 ; setup DList pointer
lda #$22
sta $d400 ; DMA mode normal
lda #$f0
sta $d409 ; CHBase at $F000
lda #$a0
sta $d200
lda #$a1
sta $d202 ; set audf1 and audf2
lda #0
sta $d01a ; Colour border/background
lda #$82
sta $d018 ; Colour background
lda #$ca
sta $d017 ; PF1 colour
lda #$a8
sta $d201
sta $d203 ; set audc1 and audc2
wait
jmp wait ; loop forever
dlist
.byte $70,$70,$70,$70
.byte $42
.word screen1
.byte $42
.word screen1
.byte $41
.word dlist
screen1
.byte 0,1,2,3,4,5,6,7,8,9
.byte 10,11,12,13,14,15,16,17,18,19
.byte 0,1,2,3,4,5,6,7,8,9
.byte 10,11,12,13,14,15,16,17,18,19
And the 6809 translation is next. You'll notice that the ANTIC expects the addresses fed to it in little endian format. This means I have to get the pointer to the dlist code, put it in the D register, then swap the two bytes and store that into $D402. Also I've hard-coded the offsets in the dlist itself to be byte swapped. Gotta add byte swapping functions to the mamou assembler.
org $F000
reset
orcc #$50 mask interrupts
lds #$00FF stack pointer
* clear I/O
ClearIO
clrb
loop
ldx #$D000
clr b,x
ldx #$D200
clr b,x
ldx #$D300
clr b,x
ldx #$D400
clr b,x
decb
bne loop
* set POKEY active
lda #3
sta $D20F
* setup DList pointer
leax dlist,pcr
tfr x,d
exg a,b
std $D402
lda #$22
sta $D400 DMA mode normal
lda #$F0
sta $D409 CHBase at $F000
lda #$A0
sta $D200
lda #$A1
sta $D202 set audf1 and audf2
clra
sta $D10A ; color border/background
lda #$82
sta $D018 ; color background
lda #$CA
sta $D017 ;PF1 color
lda #$A8
sta $D201
sta $D203 ; set audc1 and audc2
wait jmp wait
fill $FF,$FF00-*
dlist
fcb $70,$70,$70,$70
fcb $42
* fdb screen1
fcb $0D,$FF
fcb $42
* fdb screen1
fcb $0D,$FF
fcb $41
* fdb dlist
fcb $00,$FF
screen1
fcb 0,1,2,3,4,5,6,7,8,9
fcb 10,11,12,13,14,15,16,17,18,19
fcb 0,1,2,3,4,5,6,7,8,9
fcb 10,11,12,13,14,15,16,17,18,19
fill $FF,$FFF0-*
fdb reset
fdb reset
fdb reset
fdb reset
fdb reset
fdb reset
fdb reset
fdb reset
No comments:
Post a Comment