Files
2016-06-03 13:22:59 +10:00

144 lines
3.2 KiB
ArmAsm

include "includes.i"
xdef ShowSplash
xdef ReloadSplashScreen
xdef RestoreSplashMenuSection
xdef splash
xdef splashInvalid
xdef versionText
SPLASH_COLOR_DEPTH equ 5
SPLASH_SCREEN_WIDTH_BYTES equ 40
RestoreSplashMenuSection:
move.l backgroundOffscreen,a0
lea splash,a2
add.l #(134*40*5)+((320-96)/16),a2
WaitBlitter
move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6)
move.w #0,BLTCON1(a6)
move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word
move.w #0,BLTAMOD(a6) ;A modulo
move.w #(320-96)/8,BLTDMOD(a6) ;D modulo
move.l a0,BLTAPTH(a6) ;source graphic top left corner
move.l a2,BLTDPTH(a6) ;destination top left corner
move.w #((112*5)<<6)|(96/16),BLTSIZE(a6)
rts
ReloadSplashScreen:
cmp.w #0,splashInvalid
beq .skip
move.w #0,splashInvalid
move.l #endDiskSplash-diskSplash,d0
move.l #splash,a0
move.l #diskSplash,a1
jsr LoadDiskData
lea splash,a0
add.l #(134*40*5)+((320-96)/16),a0
WaitBlitter
move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6)
move.w #0,BLTCON1(a6)
move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word
move.w #(320-96)/8,BLTAMOD(a6) ;A modulo
move.w #0,BLTDMOD(a6) ;D modulo
move.l a0,BLTAPTH(a6) ;source graphic top left corner
move.l backgroundOffscreen,BLTDPTH(a6) ;destination top left corner
move.w #((112*5)<<6)|(96/16),BLTSIZE(a6)
.skip:
rts
ShowSplash:
lea CUSTOM,a6
;; set up playfield
move.w #(RASTER_Y_START<<8)|RASTER_X_START,DIWSTRT(a6)
move.w #((RASTER_Y_STOP-256)<<8)|(RASTER_X_STOP-256),DIWSTOP(a6)
move.w #(RASTER_X_START/2-SCREEN_RES),DDFSTRT(a6)
move.w #(RASTER_X_START/2-SCREEN_RES)+(8*((SCREEN_WIDTH/16)-1)),DDFSTOP(a6)
move.w #(SPLASH_COLOR_DEPTH<<12)|$200,BPLCON0(a6)
move.w #SPLASH_SCREEN_WIDTH_BYTES*SPLASH_COLOR_DEPTH-SPLASH_SCREEN_WIDTH_BYTES,BPL1MOD(a6)
move.w #SPLASH_SCREEN_WIDTH_BYTES*SPLASH_COLOR_DEPTH-SPLASH_SCREEN_WIDTH_BYTES,BPL2MOD(a6)
bsr ReloadSplashScreen
;; poke bitplane pointers
lea splash,a1
lea splashCopperListBplPtr(pc),a2
moveq #SPLASH_COLOR_DEPTH-1,d0
.bitplaneloop:
move.l a1,d1
move.w d1,2(a2)
swap d1
move.w d1,6(a2)
lea SPLASH_SCREEN_WIDTH_BYTES(a1),a1 ; bit plane data is interleaved
addq #8,a2
dbra d0,.bitplaneloop
;; install copper list, then enable dma
lea splashCopperList(pc),a0
move.l a0,COP1LC(a6)
jsr WaitVerticalBlank
;; set up default palette
include "out/splash-palette.s"
lea COLOR31(a6),a0
move.w #$f00,(a0)
jsr WaitVerticalBlank
move.w #(DMAF_BLITTER|DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a6)
move.w #(INTF_SETCLR|INTF_VERTB|INTF_INTEN),INTENA(a6)
RenderVersion
.wait:
jsr WaitVerticalBlank
jsr WaitForJoystick
rts
splashCopperList:
splashCopperListBplPtr:
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.w $ffdf,$fffe
dc.w $22df,$fffe
dc.w COLOR31,$ddd
dc.w $26df,$fffe
dc.w COLOR31,$ccc
dc.l $fffffffe
splashInvalid:
dc.w 1
align 4
versionText:
dc.b "TEST VERSION 1"
dc.b 0
align 4
section .bss
splash:
ds.b endDiskSplash-diskSplash
cnop 0,1024
section .noload
diskSplash:
incbin "out/splash.bin"
endDiskSplash:
cnop 0,512