55 lines
868 B
NASM
55 lines
868 B
NASM
|
SECTION "Interrupt Initialization Functions", ROM0
|
||
|
InitializeLCDCInterrupt::
|
||
|
ld a, STATF_LYC
|
||
|
ldh [rSTAT], a
|
||
|
ld a, 6
|
||
|
ldh [rLYC], a
|
||
|
ld a, 0
|
||
|
ldh [rSCY], a
|
||
|
ld a, IEF_STAT
|
||
|
ldh [rIE], a
|
||
|
xor a, a
|
||
|
ldh [rIF], a
|
||
|
ei
|
||
|
ret
|
||
|
|
||
|
|
||
|
SECTION "LCDC Interrupt", ROM0[$0048]
|
||
|
LCDCInterrupt:
|
||
|
push af
|
||
|
push hl
|
||
|
|
||
|
ld hl, rSTAT
|
||
|
LCDCInterrupt_WaitUntilNotBusy:
|
||
|
bit STATB_BUSY, [hl]
|
||
|
jr nz, LCDCInterrupt_WaitUntilNotBusy
|
||
|
|
||
|
; Increment SCY
|
||
|
ldh a, [rSCY]
|
||
|
inc a
|
||
|
ldh [rSCY], a
|
||
|
|
||
|
; Increment LYC by 7
|
||
|
ldh a, [rLYC]
|
||
|
add a, 7
|
||
|
ldh [rLYC], a
|
||
|
|
||
|
; Check our interrupt counter
|
||
|
ld a, [wLCDCCtr]
|
||
|
cp 21
|
||
|
jp nz, LCDCInterrupt_End
|
||
|
ld a, 255
|
||
|
ld [wLCDCCtr], a
|
||
|
ld a, 6
|
||
|
ldh [rLYC], a
|
||
|
ld a, 0
|
||
|
ldh [rSCY], a
|
||
|
|
||
|
LCDCInterrupt_End:
|
||
|
inc a
|
||
|
ld [wLCDCCtr], a
|
||
|
pop hl
|
||
|
pop af
|
||
|
reti
|
||
|
|