90 lines
1.5 KiB
ArmAsm
90 lines
1.5 KiB
ArmAsm
include "includes.i"
|
|
|
|
xref InstallColorPalette
|
|
xref PokeBitplanePointers
|
|
xref copperList
|
|
xref copperListAlternate
|
|
|
|
Entry:
|
|
lea CUSTOM,a6
|
|
jsr Init
|
|
|
|
.mainLoop:
|
|
jsr WaitVerticalBlank
|
|
|
|
if INTERLACE==1
|
|
btst #VPOSRLOFBIT,VPOSR(a6)
|
|
beq.s .lof
|
|
lea copperListAlternate(pc),a0
|
|
move.l a0,COP1LC(a6)
|
|
bra .done
|
|
.lof:
|
|
lea copperList(pc),a0
|
|
move.l a0,COP1LC(a6)
|
|
.done
|
|
endif ; INTERLACE==1
|
|
bra .mainLoop
|
|
|
|
|
|
PokeBitplanePointers: ; d0 = frame offset in bytes, a0 = BPLP copper list address
|
|
movem.l d0-a6,-(sp)
|
|
lea bitplanes(pc),a1
|
|
add.l d0,a1 ; Offset for odd/even frames
|
|
moveq #SCREEN_BIT_DEPTH-1,d0
|
|
.bitplaneloop:
|
|
move.l a1,d1
|
|
move.w d1,2(a0)
|
|
swap d1
|
|
move.w d1,6(a0)
|
|
lea SCREEN_WIDTH_BYTES(a1),a1
|
|
addq #8,a0
|
|
dbra d0,.bitplaneloop
|
|
movem.l (sp)+,d0-a6
|
|
rts
|
|
|
|
|
|
InstallColorPalette:
|
|
include "out/image-palette.s"
|
|
rts
|
|
|
|
if INTERLACE==1
|
|
copperListAlternate:
|
|
;; bitplane pointers must be first else poking addresses will be incorrect
|
|
dc.w BPL1PTL,0
|
|
dc.w BPL1PTH,0
|
|
dc.w BPL2PTL,0
|
|
dc.w BPL2PTH,0
|
|
dc.w BPL3PTL,0
|
|
dc.w BPL3PTH,0
|
|
dc.w BPL4PTL,0
|
|
dc.w BPL4PTH,0
|
|
dc.w BPL5PTL,0
|
|
dc.w BPL5PTH,0
|
|
dc.w BPL6PTL,0
|
|
dc.w BPL6PTH,0
|
|
dc.l $fffffffe
|
|
endif; INTERLACE==1
|
|
|
|
copperList:
|
|
;; bitplane pointers must be first else poking addresses will be incorrect
|
|
dc.w BPL1PTL,0
|
|
dc.w BPL1PTH,0
|
|
dc.w BPL2PTL,0
|
|
dc.w BPL2PTH,0
|
|
dc.w BPL3PTL,0
|
|
dc.w BPL3PTH,0
|
|
dc.w BPL4PTL,0
|
|
dc.w BPL4PTH,0
|
|
dc.w BPL5PTL,0
|
|
dc.w BPL5PTH,0
|
|
dc.w BPL6PTL,0
|
|
dc.w BPL6PTH,0
|
|
|
|
dc.l $fffffffe
|
|
|
|
bitplanes:
|
|
if HAM_MODE==1
|
|
incbin "out/image-ham.bin"
|
|
else
|
|
incbin "out/image.bin"
|
|
endif |