diff options
author | Tauwasser <Tauwasser@tauwasser.eu> | 2018-06-01 01:26:26 +0200 |
---|---|---|
committer | Tauwasser <Tauwasser@tauwasser.eu> | 2018-06-01 01:26:41 +0200 |
commit | 66e714913c3ed0bcb1c8d9ee9c004960b711a8ac (patch) | |
tree | c9c4d961883f220a29abca51826e863e7bc3a2bb /home/vblank.asm | |
parent | 513028a98e6225e39c53ea64e4f9c483b3abd55b (diff) |
home: disassemble vblank and associated functions
Signed-off-by: Tauwasser <Tauwasser@tauwasser.eu>
Diffstat (limited to 'home/vblank.asm')
-rw-r--r-- | home/vblank.asm | 271 |
1 files changed, 270 insertions, 1 deletions
diff --git a/home/vblank.asm b/home/vblank.asm index 334cef4..8d9fb25 100644 --- a/home/vblank.asm +++ b/home/vblank.asm @@ -28,4 +28,273 @@ VBlank:: ; 0150 reti .blanks - ; TODO + dw VBlank0 + dw VBlank1 + dw VBlank2 + dw VBlank3 + +VBlank0:: ; 175 (0:175) +; rng +; scx, scy, wy, wx +; bg map +; row/column redraw +; copy 2bpp +; copy 1bpp +; animate tileset +; copy far 2bpp +; enable oam sprites +; oam +; joypad +; sound / serial / lcd_stat + ldh a, [hVBlankCounter] + inc a + ldh [hVBlankCounter], a + bit 0, a + jr nz, .even_frame + ldh a, [hRTCRandom] + ld b, a + ldh a, [rLY] + adc b +.even_frame + ; advance random variables + ld b, a + ldh a, [hRandomAdd] + adc b + ldh [hRandomAdd], a + ld b, a + ldh a, [hRandomSub] + sbc b + ldh [hRandomSub], a + ldh a, [hRTCSeconds] + ldh [hRTCRandom], a + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wDisableVBlankWYUpdate] + and a + jr nz, .ok + ldh a, [hWY] + ldh [rWY], a + ldh a, [hWX] + ldh [rWX], a +.ok + call AutoBgMapTransfer + call RedrawRowOrColumn + call VBlankCopy + call VBlankCopyDouble + call AnimateTileset + call VBlankCopyFar + call EnableSprites + call hOAMDMA + xor a + ld [wVBlankOccurred], a + ld a, [wVBlankCounter] + and a + jr z, .skipDec + dec a + ld [wVBlankCounter], a +.skipDec + call Joypad + xor a + ldh [rIF], a + ld a, (1 << SERIAL | 1 << LCD_STAT) + ldh [rIE], a + ld a, (1 << LCD_STAT) + ldh [rIF], a + ei + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + di + xor a + ldh [rIF], a + ld a, (1 << JOYPAD | 1 << SERIAL | 1 << TIMER | 1 << LCD_STAT | 1 << VBLANK) + ldh [rIE], a + ret + +VBlank1:: ; 1f6 (0:1f6) +; Simple VBlank +; +; scx, scy +; dmg pals +; bg map +; copy 2bpp +; oam +; sound / lcd_stat +; no counters! + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wBGP] + ldh [rBGP], a + ld a, [wOBP0] + ldh [rOBP0], a + ld a, [wOBP1] + ldh [rOBP1], a + call AutoBgMapTransfer + call VBlankCopy + ld a, [wDisableVBlankOAMUpdate] + and a + jr nz, .skip_oam + call hOAMDMA +.skip_oam + xor a + ld [wVBlankOccurred], a + xor a + ldh [rIF], a + ld a, (1 << LCD_STAT) + ldh [rIE], a + ldh [rIF], a + ei + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + di + xor a + ldh [rIF], a + ld a, (1 << JOYPAD | 1 << SERIAL | 1 << TIMER | 1 << LCD_STAT | 1 << VBLANK) + ldh [rIE], a + ret + +VBlank2:: ; 241 (0:241) +; rng +; scx, scy, wy, wx +; joypad +; bg map +; row/column redraw +; copy 2bpp +; copy 1bpp +; copy far 2bpp +; oam +; sound + ldh a, [hVBlankCounter] + inc a + ldh [hVBlankCounter], a + bit 0, a + jr nz, .even_frame + ldh a, [rLY] +.even_frame + ; advance random variables + ld b, a + ldh a, [hRandomAdd] + adc b + ldh [hRandomAdd], a + ld b, a + ldh a, [hRandomSub] + sbc b + ldh [hRandomSub], a + call Joypad + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wDisableVBlankWYUpdate] + and a + jr nz, .ok + ldh a, [hWY] + ldh [rWY], a + ldh a, [hWX] + ldh [rWX], a +.ok + call AutoBgMapTransfer + call RedrawRowOrColumn + call VBlankCopy + call VBlankCopyDouble + call VBlankCopyFar + call hOAMDMA + xor a + ld [wVBlankOccurred], a + ld a, [wVBlankCounter] + and a + jr z, .skipDec + dec a + ld [wVBlankCounter], a +.skipDec + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + ret + +VBlank3:: ; 2a0 (0:2a0) +; rng +; joypad +; scx, scy, wy, wx +; bg map +; row/column redraw +; copy 2bpp +; copy 1bpp +; animate tileset +; copy far 2bpp +; enable oam sprites +; oam +; sound / lcd_stat + ldh a, [hVBlankCounter] + inc a + ldh [hVBlankCounter], a + bit 0, a + jr nz, .even_frame + ldh a, [rLY] +.even_frame + ld b, a + ldh a, [hRandomAdd] + adc b + ldh [hRandomAdd], a + ld b, a + ldh a, [hRandomSub] + sbc b + ldh [hRandomSub], a + call Joypad + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wDisableVBlankWYUpdate] + and a + jr nz, .ok + ldh a, [hWY] + ldh [rWY], a + ldh a, [hWX] + ldh [rWX], a +.ok + call AutoBgMapTransfer + call RedrawRowOrColumn + call VBlankCopy + call VBlankCopyDouble + call AnimateTileset + call VBlankCopyFar + call EnableSprites + call hOAMDMA + xor a + ld [wVBlankOccurred], a + ld a, [wVBlankCounter] + and a + jr z, .skipDec + dec a + ld [wVBlankCounter], a +.skipDec + xor a + ldh [rIF], a + ld a, (1 << LCD_STAT) + ldh [rIE], a + ldh [rIF], a + ei + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + di + xor a + ldh [rIF], a + ld a, (1 << JOYPAD | 1 << SERIAL | 1 << TIMER | 1 << LCD_STAT | 1 << VBLANK) + ldh [rIE], a + ret +; 0x317
\ No newline at end of file |