summaryrefslogtreecommitdiff
path: root/home/vblank.asm
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-06-16 13:14:57 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-06-16 13:14:57 -0400
commitee84a2a0e4e1fee53feaa5a33c4b4eb5317dfcbc (patch)
tree8ac0cd71fc28d1c2e856e10a2b9f37007aec1552 /home/vblank.asm
parentcac0d5ade9fbff4453bd893e9bbcdfb9993ba35a (diff)
Rebuild HOME
Diffstat (limited to 'home/vblank.asm')
-rw-r--r--home/vblank.asm653
1 files changed, 380 insertions, 273 deletions
diff --git a/home/vblank.asm b/home/vblank.asm
index 9dc7c33c..9cf36f9a 100644
--- a/home/vblank.asm
+++ b/home/vblank.asm
@@ -1,277 +1,384 @@
VBlank::
- push af ; 150
- push bc ; 151
- push de ; 152
- push hl ; 153
- ld a, [hVBlank] ; 154
- and $7 ; 156
- ld e, a ; 158
- ld d, $0 ; 159
- ld hl, .blanks ; 15b
- add hl, de ; 15e
- add hl, de ; 15f
- ld a, [hli] ; 160
- ld h, [hl] ; 161
- ld l, a ; 162
- ld de, .return ; 163
- push de ; 166
- jp [hl] ; 167
+ push af
+ push bc
+ push de
+ push hl
+ ld a, [hVBlank]
+ and $7
+ ld e, a
+ ld d, $0
+ ld hl, .blanks
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .return
+ push de
+ jp [hl]
.return
- call Function1efa ; 168
- pop hl ; 16b
- pop de ; 16c
- pop bc ; 16d
- pop af ; 16e
- reti ; 16f
-; 170
+ call Function1efa
+ pop hl
+ pop de
+ pop bc
+ pop af
+ reti
.blanks
- dw Function180
- dw Function1f4
- dw Function2b0
- dw Function2c4
- dw Function255
- dw Function278
- dw Function180
- dw Function180
-
-Function180::
- ld hl, hVBlankCounter ; 180
- inc [hl] ; 183
- ld a, [rDIV] ; 184
- ld b, a ; 186
- ld a, [hRandomAdd] ; 187
- adc b ; 189
- ld [hRandomAdd], a ; 18a
- ld a, [rDIV] ; 18c
- ld b, a ; 18e
- ld a, [hRandomSub] ; 18f
- sbc b ; 191
- ld [hRandomSub], a ; 192
- ld a, [hROMBank] ; 194
- ld [$d155], a ; 196
- ld a, [hSCX] ; 199
- ld [rSCX], a ; 19b
- ld a, [hSCY] ; 19d
- ld [rSCY], a ; 19f
- ld a, [hWY] ; 1a1
- ld [rWY], a ; 1a3
- ld a, [hWX] ; 1a5
- ld [rWX], a ; 1a7
- call Function1458 ; 1a9
- jr c, Function1c2 ; 1ac
- call Functionbdf ; 1ae
- jr c, Function1c2 ; 1b1
- call Function14bb ; 1b3
- call Function15d0 ; 1b6
- call Function1579 ; 1b9
- call Function162b ; 1bc
- call Function1642 ; 1bf
-Function1c2::
- ld a, [hOAMUpdate] ; 1c2
- and a ; 1c4
- jr nz, Function1ca ; 1c5
- call hPushOAM ; 1c7
-Function1ca::
- xor a ; 1ca
- ld [$ceea], a ; 1cb
- ld a, [$cee8] ; 1ce
- and a ; 1d1
- jr z, Function1d8 ; 1d2
- dec a ; 1d4
- ld [$cee8], a ; 1d5
-Function1d8::
- ld a, [$cee9] ; 1d8
- and a ; 1db
- jr z, Function1e2 ; 1dc
- dec a ; 1de
- ld [$cee9], a ; 1df
-Function1e2::
- call Function8e6 ; 1e2
- ld a, BANK(Functione805c) ; 1e5
- rst Bankswitch ; 1e7
- call Functione805c ; 1e8
- ld a, [$d155] ; 1eb
- rst Bankswitch ; 1ee
- ld a, [$ff9a] ; 1ef
- ld [$ffe5], a ; 1f1
- ret ; 1f3
-; 1f4
-
-Function1f4::
- ld a, [hROMBank] ; 1f4
- ld [$d155], a ; 1f6
- ld a, [hSCX] ; 1f9
- ld [rSCX], a ; 1fb
- ld a, [hSCY] ; 1fd
- ld [rSCY], a ; 1ff
- call Function23e ; 201
- jr c, Function20f ; 204
- call Function14bb ; 206
- call Function15d0 ; 209
- call hPushOAM ; 20c
-Function20f::
- ld a, [hLCDCPointer] ; 20f
- or a ; 211
- jr z, Function219 ; 212
- ld c, a ; 214
- ld a, [$c700] ; 215
- ld [$ff00+c], a ; 218
-Function219::
- xor a ; 219
- ld [$ceea], a ; 21a
- ld a, [rIF] ; 21d
- ld b, a ; 21f
- xor a ; 220
- ld [rIF], a ; 221
- ld a, $2 ; 223
- ld [rIE], a ; 225
- ld a, b ; 227
- and $8 ; 228
- or $2 ; 22a
- ld [rIF], a ; 22c
- ei ; 22e
- ld a, BANK(Functione805c) ; 22f
- rst Bankswitch ; 231
- call Functione805c ; 232
- ld a, [$d155] ; 235
- rst Bankswitch ; 238
- ld a, $1f ; 239
- ld [rIE], a ; 23b
- ret ; 23d
-; 23e
-
-Function23e::
- ld a, [hCGB] ; 23e
- and a ; 240
- jp nz, Functionbe3 ; 241
- ld a, [$cf43] ; 244
- ld [rBGP], a ; 247
- ld a, [$cf44] ; 249
- ld [rOBP0], a ; 24c
- ld a, [$cf45] ; 24e
- ld [rOBP1], a ; 251
- and a ; 253
- ret ; 254
-; 255
-
-Function255::
- ld a, [hROMBank] ; 255
- ld [$d155], a ; 257
- call Function14bb ; 25a
- call Function15d0 ; 25d
- call hPushOAM ; 260
- call Function8e6 ; 263
- xor a ; 266
- ld [$ceea], a ; 267
- call Function1ebf ; 26a
- ld a, BANK(Functione805c) ; 26d
- rst Bankswitch ; 26f
- call Functione805c ; 270
- ld a, [$d155] ; 273
- rst Bankswitch ; 276
- ret ; 277
-; 278
-
-Function278::
- ld a, [hROMBank] ; 278
- ld [$d155], a ; 27a
- ld a, [hSCX] ; 27d
- ld [rSCX], a ; 27f
- call Functionbdf ; 281
- jr c, Function28c ; 284
- call Function14bb ; 286
- call Function15d0 ; 289
-Function28c::
- xor a ; 28c
- ld [$ceea], a ; 28d
- call Function8e6 ; 290
- xor a ; 293
- ld [rIF], a ; 294
- ld a, $2 ; 296
- ld [rIE], a ; 298
- ld [rIF], a ; 29a
- ei ; 29c
- ld a, BANK(Functione805c) ; 29d
- rst Bankswitch ; 29f
- call Functione805c ; 2a0
- ld a, [$d155] ; 2a3
- rst Bankswitch ; 2a6
- di ; 2a7
- xor a ; 2a8
- ld [rIF], a ; 2a9
- ld a, $1f ; 2ab
- ld [rIE], a ; 2ad
- ret ; 2af
-; 2b0
-
-Function2b0::
- ld a, [hROMBank] ; 2b0
- ld [$d155], a ; 2b2
- ld a, BANK(Functione805c) ; 2b5
- rst Bankswitch ; 2b7
- call Functione805c ; 2b8
- ld a, [$d155] ; 2bb
- rst Bankswitch ; 2be
- xor a ; 2bf
- ld [$ceea], a ; 2c0
- ret ; 2c3
-; 2c4
-
-Function2c4::
- ld a, [hVBlankCounter] ; 2c4
- inc a ; 2c6
- ld [hVBlankCounter], a ; 2c7
- ld a, [rDIV] ; 2c9
- ld b, a ; 2cb
- ld a, [hRandomAdd] ; 2cc
- adc b ; 2ce
- ld [hRandomAdd], a ; 2cf
- ld a, [rDIV] ; 2d1
- ld b, a ; 2d3
- ld a, [hRandomSub] ; 2d4
- sbc b ; 2d6
- ld [hRandomSub], a ; 2d7
- call Function8e6 ; 2d9
- ld a, [hROMBank] ; 2dc
- ld [$d155], a ; 2de
- ld a, [hSCX] ; 2e1
- ld [rSCX], a ; 2e3
- ld a, [hSCY] ; 2e5
- ld [rSCY], a ; 2e7
- ld a, [hWY] ; 2e9
- ld [rWY], a ; 2eb
- ld a, [hWX] ; 2ed
- ld [rWX], a ; 2ef
- call Function14bb ; 2f1
- call Function1458 ; 2f4
- call Function15d0 ; 2f7
- call Function1579 ; 2fa
- call Function162b ; 2fd
- call hPushOAM ; 300
- xor a ; 303
- ld [$ceea], a ; 304
- ld a, [$cee9] ; 307
- and a ; 30a
- jr z, Function311 ; 30b
- dec a ; 30d
- ld [$cee9], a ; 30e
-Function311::
- xor a ; 311
- ld [rIF], a ; 312
- ld a, $2 ; 314
- ld [rIE], a ; 316
- ld [rIF], a ; 318
- ei ; 31a
- ld a, BANK(Functione805c) ; 31b
- rst Bankswitch ; 31d
- call Functione805c ; 31e
- ld a, [$d155] ; 321
- rst Bankswitch ; 324
- di ; 325
- xor a ; 326
- ld [rIF], a ; 327
- ld a, $1f ; 329
- ld [rIE], a ; 32b
- ret ; 32d
-; 32e
+ dw VBlank0
+ dw VBlank1
+ dw VBlank2
+ dw VBlank3
+ dw VBlank4
+ dw VBlank5
+ dw VBlank0
+ dw VBlank0 ; just in case
+;180
+
+VBlank0:: ; 180
+; normal operation
+
+; rng
+; scx, scy, wy, wx
+; bg map buffer
+; palettes
+; dma transfer
+; bg map
+; tiles
+; oam
+; joypad
+; sound
+
+ ; inc frame counter
+ ld hl, hVBlankCounter
+ inc [hl]
+
+ ; advance random variables
+ ld a, [rDIV]
+ ld b, a
+ ld a, [hRandomAdd]
+ adc b
+ ld [hRandomAdd], a
+
+ ld a, [rDIV]
+ ld b, a
+ ld a, [hRandomSub]
+ sbc b
+ ld [hRandomSub], a
+
+ ld a, [hROMBank]
+ ld [wROMBankBackup], a
+
+ ld a, [hSCX]
+ ld [rSCX], a
+ ld a, [hSCY]
+ ld [rSCY], a
+ ld a, [hWY]
+ ld [rWY], a
+ ld a, [hWX]
+ ld [rWX], a
+
+ ; There's only time to call one of these in one vblank.
+ ; Calls are in order of priority.
+
+ call UpdateBGMapBuffer
+ jr c, .done
+ call UpdatePalsIfCGB
+ jr c, .done
+ call UpdateBGMap
+ call Serve2bppRequest
+
+ ; These have their own timing checks.
+
+ call Function1579
+ call Function162b
+ call Function1642
+
+.done
+
+ ld a, [hOAMUpdate]
+ and a
+ jr nz, .done_oam
+ call hPushOAM
+.done_oam
+
+
+ ; vblank-sensitive operations are done
+
+
+ xor a
+ ld [wVBlankOccurred], a
+
+ ld a, [wOverworldDelay]
+ and a
+ jr z, .ok
+ dec a
+ ld [wOverworldDelay], a
+.ok
+
+ ld a, [wTextDelayFrames]
+ and a
+ jr z, .ok2
+ dec a
+ ld [wTextDelayFrames], a
+.ok2
+
+ call Joypad
+ ld a, BANK(_UpdateSound)
+ rst Bankswitch
+ call _UpdateSound
+ ld a, [wROMBankBackup]
+ rst Bankswitch
+ ld a, [hSeconds]
+ ld [hSecondsBackup], a
+ ret
+
+VBlank1:: ; 1f4
+; scx, scy
+; palettes
+; bg map
+; tiles
+; oam
+; sound / lcd stat
+ ld a, [hROMBank]
+ ld [wROMBankBackup], a
+ ld a, [hSCX]
+ ld [rSCX], a
+ ld a, [hSCY]
+ ld [rSCY], a
+ call UpdatePals
+ jr c, .done
+
+ call UpdateBGMap
+ call Serve2bppRequest
+
+ call hPushOAM
+.done
+ ld a, [hLCDCPointer]
+ or a
+ jr z, .skip_lcd
+ ld c, a
+ ld a, [wc700]
+ ld [$ff00+c], a
+.skip_lcd
+ xor a
+ ld [wVBlankOccurred], a
+
+ ; get requested ints
+ ld a, [rIF]
+ ld b, a
+ ; discard requested ints
+ xor a
+ ld [rIF], a
+ ; enable lcd stat
+ ld a, %10 ; lcd stat
+ ld [rIE], a
+ ; rerequest serial int if applicable (still disabled)
+ ; request lcd stat
+ ld a, b
+ and %1000 ; serial
+ or %10 ; lcd stat
+ ld [rIF], a
+
+ ei
+ ld a, BANK(_UpdateSound)
+ rst Bankswitch
+ call _UpdateSound
+ ld a, [wROMBankBackup]
+ rst Bankswitch
+ ; enable ints
+ ld a, %11111
+ ld [rIE], a
+ ret
+
+UpdatePals:: ; 23e
+; update pals for either dmg or cgb
+ ld a, [hCGB]
+ and a
+ jp nz, UpdateCGBPals
+
+ ; update gb pals
+ ld a, [wBGP]
+ ld [rBGP], a
+ ld a, [wOBP0]
+ ld [rOBP0], a
+ ld a, [wOPB1]
+ ld [rOBP1], a
+ and a
+ ret
+
+VBlank4:: ; 255
+; bg map
+; tiles
+; oam
+; joypad
+; serial
+; sound
+
+ ld a, [hROMBank]
+ ld [wROMBankBackup], a
+
+ call UpdateBGMap
+ call Serve2bppRequest
+
+ call hPushOAM
+
+ call Joypad
+
+ xor a
+ ld [wVBlankOccurred], a
+
+ call AskSerial
+
+ ld a, BANK(_UpdateSound)
+ rst Bankswitch
+ call _UpdateSound
+
+ ld a, [wROMBankBackup]
+ rst Bankswitch
+ ret
+
+VBlank5:: ; 278
+; scx
+; palettes
+; bg map
+; tiles
+; joypad
+
+ ld a, [hROMBank]
+ ld [wROMBankBackup], a
+
+ ld a, [hSCX]
+ ld [rSCX], a
+
+ call UpdatePalsIfCGB
+ jr c, .done
+
+ call UpdateBGMap
+ call Serve2bppRequest
+.done
+
+ xor a
+ ld [wVBlankOccurred], a
+
+ call Joypad
+
+ xor a
+ ld [rIF], a
+ ld a, %10 ; lcd stat
+ ld [rIE], a
+ ; request lcd stat
+ ld [rIF], a
+
+ ei
+ ld a, BANK(_UpdateSound)
+ rst Bankswitch
+ call _UpdateSound
+ ld a, [wROMBankBackup]
+ rst Bankswitch
+ di
+
+ xor a
+ ld [rIF], a
+ ; enable ints
+ ld a, %11111
+ ld [rIE], a
+ ret
+
+VBlank2:: ; 2b0
+; sound only
+
+ ld a, [hROMBank]
+ ld [wROMBankBackup], a
+
+ ld a, BANK(_UpdateSound)
+ rst Bankswitch
+ call _UpdateSound
+
+ ld a, [wROMBankBackup]
+ rst Bankswitch
+
+ xor a
+ ld [wVBlankOccurred], a
+ ret
+
+VBlank3:: ; 2c4
+; scx, scy
+; palettes
+; bg map
+; tiles
+; oam
+; sound / lcd stat
+
+ ld a, [hVBlankCounter]
+ inc a
+ ld [hVBlankCounter], a
+
+ ld a, [rDIV]
+ ld b, a
+ ld a, [hRandomAdd]
+ adc b
+ ld [hRandomAdd], a
+
+ ld a, [rDIV]
+ ld b, a
+ ld a, [hRandomSub]
+ sbc b
+ ld [hRandomSub], a
+
+ call Joypad
+
+ ld a, [hROMBank]
+ ld [wROMBankBackup], a
+
+ ld a, [hSCX]
+ ld [rSCX], a
+ ld a, [hSCY]
+ ld [rSCY], a
+
+ ld a, [hWY]
+ ld [rWY], a
+ ld a, [hWX]
+ ld [rWX], a
+
+ call UpdateBGMap
+ call UpdateBGMapBuffer
+
+ call Serve2bppRequest
+
+ call Function1579
+ call Function162b
+
+ call hPushOAM
+
+ xor a
+ ld [wVBlankOccurred], a
+
+ ld a, [wTextDelayFrames]
+ and a
+ jr z, .okay
+ dec a
+ ld [wTextDelayFrames], a
+.okay
+
+ xor a
+ ld [rIF], a
+ ld a, %10 ; lcd stat
+ ld [rIE], a
+ ; request lcd stat
+ ld [rIF], a
+
+ ei
+ ld a, BANK(_UpdateSound)
+ rst Bankswitch
+ call _UpdateSound
+ ld a, [wROMBankBackup]
+ rst Bankswitch
+ di
+
+ xor a
+ ld [rIF], a
+ ; enable ints
+ ld a, %11111
+ ld [rIE], a
+ ret