61 lines
925 B
NASM
61 lines
925 B
NASM
IF !DEF(INTERRUPTS_ASM)
|
|
DEF INTERRUPTS_ASM EQU 1
|
|
|
|
|
|
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
|
|
|
|
|
|
ENDC
|