summaryrefslogtreecommitdiff
path: root/home/vblank.asm
diff options
context:
space:
mode:
authorTauwasser <Tauwasser@tauwasser.eu>2018-06-01 01:26:26 +0200
committerTauwasser <Tauwasser@tauwasser.eu>2018-06-01 01:26:41 +0200
commit66e714913c3ed0bcb1c8d9ee9c004960b711a8ac (patch)
treec9c4d961883f220a29abca51826e863e7bc3a2bb /home/vblank.asm
parent513028a98e6225e39c53ea64e4f9c483b3abd55b (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.asm271
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