Files
Binx/src/home/header.asm

112 lines
1.8 KiB
NASM
Raw Normal View History

2018-10-19 00:45:50 +02:00
NB_ROM_BANKS = 2
SECTION "Header", ROM0[$100]
EntryPoint::
ld b, $60
jr LogoFade
dbr 0, $150 - $104
; Header ends here
LogoFade:
xor a
ldh [rAUDENA], a
.fadeLogo
ld c, 7 ; Number of frames between each logo fade step
.logoWait
ld a, [rLY]
cp a, SCRN_Y
jr nc, .logoWait
.waitVBlank
ld a, [rLY]
cp a, SCRN_Y
jr c, .waitVBlank
dec c
jr nz, .logoWait
; Shift all colors (fading the logo progressively)
ld a, b
rra
rra
and $FC ; Ensures a proper rotation and sets Z for final check
ldh [rBGP], a
ld b, a
jr nz, .fadeLogo ; End if the palette is fully blank (flag set from `and $FC`)
; xor a
ldh [rDIV], a
Reset::
di
ld sp, wStackBottom
xor a
ldh [rAUDENA], a
.waitVBlank
ld a, [rLY]
cp SCRN_Y
jr c, .waitVBlank
xor a
ldh [rLCDC], a
; Perform some init
; xor a
ldh [rAUDENA], a
; Init HRAM
; Also clears IE, but we're gonna overwrite it just after
ld c, LOW(hClearStart)
.clearHRAM
xor a
ld [$ff00+c], a
inc c
jr nz, .clearHRAM
; Copy OAM DMA routine
ld hl, OAMDMA
lb bc, OAMDMAEnd - OAMDMA, LOW(hOAMDMA)
.copyOAMDMA
ld a, [hli]
ld [$ff00+c], a
inc c
dec b
jr nz, .copyOAMDMA
ld a, LOW(hScanlineFXBuffer1)
ldh [hWhichScanlineBuffer], a
ld a, $FF
ldh [hScanlineFXBuffer1], a
ld a, STATF_LYC
ldh [rSTAT], a
ld a, LCDCF_ON | LCDCF_BGON
ldh [hLCDC], a
ldh [rLCDC], a
ld a, IEF_VBLANK | IEF_LCDC
ldh [rIE], a
xor a
ei ; Delayed until the next instruction: perfectly safe!
ldh [rIF], a
; Init code goes here
SECTION "OAM DMA routine", ROM0
OAMDMA:
ldh [rDMA], a
ld a, $28
.wait
dec a
jr nz, .wait
ret
OAMDMAEnd: