AmigaExamples/022.photons_bootloader/photons_bootloader.s

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