ref: 3fe3cd1a46be17dd3f94b605ff7385a55358dd74
parent: 1aa28c7712cb23401f8c8af30e78672588743d87
author: yenatch <yenatch@gmail.com>
date: Mon Jan 19 16:31:29 EST 2015
hVBlank
--- a/battle/anim_commands.asm
+++ b/battle/anim_commands.asm
@@ -35,7 +35,7 @@
ld c, 3
.asm_cc0ff
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
@@ -43,7 +43,7 @@
call Functioncc11c
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, $1
ld [hBGMapMode], a
--- a/engine/credits.asm
+++ b/engine/credits.asm
@@ -188,10 +188,10 @@
call GetCreditsPalette
call Function32f9
- ld a, [$ff9e]
+ ld a, [hVBlank]
push af
ld a, $5
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, $1
ld [$ffaa], a
xor a
@@ -215,7 +215,7 @@
ld [hLCDStatCustom], a
ld [hBGMapAddress], a
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
pop af
ld [rSVBK], a
ret
--- a/home/vblank.asm
+++ b/home/vblank.asm
@@ -12,14 +12,12 @@
push bc
push de
push hl
-
-; get vblank type
- ld a, [$ff9e]
- and $7
-
-; get fn pointer
+
+ ld a, [hVBlank]
+ and 7
+
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .VBlanks
add hl, de
add hl, de
@@ -26,13 +24,11 @@
ld a, [hli]
ld h, [hl]
ld l, a
-
-; down to business
+
call _hl_
-
-; since this is called once per frame
+
call GameTimer
-
+
pop hl
pop de
pop bc
@@ -41,14 +37,14 @@
; 2a1
.VBlanks ; 2a1
- dw VBlank0 ; 0
- dw VBlank1 ; 1
- dw VBlank2 ; 2
- dw VBlank3 ; 3
- dw VBlank4 ; 4
- dw VBlank5 ; 5
- dw VBlank6 ; 6
- dw VBlank0 ; 7
+ dw VBlank0
+ dw VBlank1
+ dw VBlank2
+ dw VBlank3
+ dw VBlank4
+ dw VBlank5
+ dw VBlank6
+ dw VBlank0 ; just in case
; 2b1
@@ -66,117 +62,91 @@
; joypad
; sound
-; inc frame counter
+ ; inc frame counter
ld hl, $ff9b
inc [hl]
-
-; advance rng
+
+ ; 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
-
-; save bank
- ld a, [hROMBank] ; current bank
- ld [$ff8a], a
-
-; scroll x
+
+ ld a, [hROMBank]
+ ld [hROMBankBackup], a
+
ld a, [hSCX]
ld [rSCX], a
-; scroll y
ld a, [hSCY]
ld [rSCY], a
-; window y
ld a, [hWY]
ld [rWY], a
-; window x + 7
ld a, [hWX]
ld [rWX], a
-
-; some time management is in order
-; only have time for one of these during vblank
-
-; bg map buffer has priority
+
+ ; There's only time to call one of these in one vblank.
+ ; Calls are in order of priority.
+
call UpdateBGMapBuffer
- jr c, .doneframeaction
-
-; then pals
+ jr c, .done
call UpdatePalsIfCGB
- jr c, .doneframeaction
-
-; dma transfer
+ jr c, .done
call DMATransfer
- jr c, .doneframeaction
-
-; bg map
+ jr c, .done
call UpdateBGMap
-
-; these have their own timing checks
+
+ ; These have their own timing checks.
+
call Serve2bppRequest
call Serve1bppRequest
call AnimateTileset
-
-.doneframeaction
-; oam update off?
+
+.done
+
ld a, [hOAMUpdate]
and a
- jr nz, .vblankoccurred
-
-; update oam by dma transfer
+ jr nz, .done_oam
call hPushOAM
-; @PushOAM:
-; ld a, Sprites >> 8
-; ld [rDMA], a
-; ld a, $28
-; .loop
-; dec a
-; jr nz, .loop
-; ret
+.done_oam
-; vblank-sensitive operations are done
-
-.vblankoccurred
-; tell other fns vblank happened
+ ; vblank-sensitive operations are done
+
xor a
ld [VBlankOccurred], a
-
-; dec OverworldDelay until 0
+
ld a, [OverworldDelay]
and a
- jr z, .textdelay
+ jr z, .ok
dec a
ld [OverworldDelay], a
-
-.textdelay
-; dec text delay counter until 0
+.ok
+
ld a, [TextDelayFrames]
and a
- jr z, .joypad
+ jr z, .ok2
dec a
ld [TextDelayFrames], a
-
-.joypad
+.ok2
+
call Joypad
-
-; update sound
+
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
- ld a, [$ff8a]
- rst Bankswitch ; restore bank
-
-;
+ ld a, [hROMBankBackup]
+ rst Bankswitch
+
ld a, [hSeconds]
ld [$ffe3], a
-
+
ret
; 325
@@ -184,20 +154,16 @@
VBlank2:: ; 325
; sound only
-; save bank
ld a, [hROMBank]
- ld [$ff8a], a
-
-; update sound
+ ld [hROMBankBackup], a
+
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
-
-; restore bank
- ld a, [$ff8a]
+
+ ld a, [hROMBankBackup]
rst Bankswitch
-
-; tell other fns vblank happened
+
xor a
ld [VBlankOccurred], a
ret
@@ -212,77 +178,60 @@
; oam
; sound / lcd stat
-; save bank
ld a, [hROMBank]
- ld [$ff8a], a
-
-; scroll x
+ ld [hROMBankBackup], a
+
ld a, [hSCX]
ld [rSCX], a
-
-; scroll y
ld a, [hSCY]
ld [rSCY], a
-
-; time-sensitive fns
+
call UpdatePals
- jr c, .vblankoccurred
-
-; these have their own timing checks
+ jr c, .done
+
call UpdateBGMap
call Serve2bppRequest@VBlank
-; update oam by dma transfer
+
call hPushOAM
-; @PushOAM:
-; ld a, Sprites >> 8
-; ld [rDMA], a
-; ld a, $28
-; .loop
-; dec a
-; jr nz, .loop
-; ret
-
-.vblankoccurred
-; tell other fns vblank happened
+.done
+
xor a
ld [VBlankOccurred], a
-
-; get requested ints
+
+ ; get requested ints
ld a, [rIF]
ld b, a
-; discard requested ints
+ ; discard requested ints
xor a
ld [rIF], a
-; enable lcd stat
+ ; enable lcd stat
ld a, %10 ; lcd stat
ld [rIE], a
-; rerequest serial int if applicable (still disabled)
-; request lcd stat
+ ; rerequest serial int if applicable (still disabled)
+ ; request lcd stat
ld a, b
and %1000 ; serial
or %10 ; lcd stat
ld [rIF], a
-
+
ei
-; update sound
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
-; restore bank
- ld a, [$ff8a]
+ ld a, [hROMBankBackup]
rst Bankswitch
di
-
-; get requested ints
+
+ ; get requested ints
ld a, [rIF]
ld b, a
-; discard requested ints
+ ; discard requested ints
xor a
ld [rIF], a
-; enable ints besides joypad
+ ; enable ints besides joypad
ld a, %1111 ; serial timer lcdstat vblank
ld [rIE], a
-; rerequest ints
+ ; rerequest ints
ld a, b
ld [rIF], a
ret
@@ -292,21 +241,18 @@
UpdatePals:: ; 37f
; update pals for either dmg or cgb
-; check cgb
ld a, [hCGB]
and a
jp nz, UpdateCGBPals
-
-; update gb pals
+
+ ; update gb pals
ld a, [$cfc7]
ld [rBGP], a
-
ld a, [$cfc8]
ld [rOBP0], a
-
ld a, [$cfc9]
ld [rOBP1], a
-
+
and a
ret
; 396
@@ -320,77 +266,58 @@
; oam
; sound / lcd stat
-; save bank
ld a, [hROMBank]
- ld [$ff8a], a
-
-; scroll x
+ ld [hROMBankBackup], a
+
ld a, [hSCX]
ld [rSCX], a
-; scroll y
ld a, [hSCY]
ld [rSCY], a
-
-; any pals to update?
+
ld a, [hCGBPalUpdate]
and a
call nz, ForceUpdateCGBPals
- jr c, .vblankoccurred
-; else
+ jr c, .done
+
call UpdateBGMap
call Serve2bppRequest@VBlank
-
-; update oam by dma transfer
+
call hPushOAM
-; @PushOAM:
-; ld a, Sprites >> 8
-; ld [rDMA], a
-; ld a, $28
-; .loop
-; dec a
-; jr nz, .loop
-; ret
-
-.vblankoccurred
-; tell other fns vblank happened
+.done
+
xor a
ld [VBlankOccurred], a
-
-; save int flag
+
ld a, [rIF]
push af
-; reset ints
xor a
ld [rIF], a
-; force lcdstat int during sound update
ld a, %10 ; lcd stat
ld [rIE], a
ld [rIF], a
-
+
ei
-; update sound
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
-; restore bank
- ld a, [$ff8a]
+ ld a, [hROMBankBackup]
rst Bankswitch
di
-
-; request lcdstat
+
+ ; request lcdstat
ld a, [rIF]
ld b, a
-; and any other ints
+ ; and any other ints
pop af
or b
ld b, a
-; reset ints
+ ; reset ints
xor a
ld [rIF], a
-; enable ints besides joypad
+ ; enable ints besides joypad
ld a, %1111 ; serial timer lcdstat vblank
ld [rIE], a
-; request ints
+ ; request ints
ld a, b
ld [rIF], a
ret
@@ -405,40 +332,26 @@
; serial
; sound
-; save bank
ld a, [hROMBank]
- ld [$ff8a], a
-
+ ld [hROMBankBackup], a
+
call UpdateBGMap
call Serve2bppRequest
-
-; update oam by dma transfer
+
call hPushOAM
-; @PushOAM:
-; ld a, Sprites >> 8
-; ld [rDMA], a
-; ld a, $28
-; .loop
-; dec a
-; jr nz, .loop
-; ret
-
-; update joypad
+
call Joypad
-
-; tell other fns vblank happened
+
xor a
ld [VBlankOccurred], a
-
-; handshake
+
call AskSerial
-
-; update sound
+
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
-; restore bank
- ld a, [$ff8a]
+
+ ld a, [hROMBankBackup]
rst Bankswitch
ret
; 400
@@ -452,52 +365,42 @@
; joypad
;
-; save bank
ld a, [hROMBank]
- ld [$ff8a], a
-
-; scroll x
+ ld [hROMBankBackup], a
+
ld a, [hSCX]
ld [rSCX], a
-
-; if we can update pals, skip this part
+
call UpdatePalsIfCGB
- jr c, .vblankoccurred
-
+ jr c, .done
+
call UpdateBGMap
call Serve2bppRequest
-
-.vblankoccurred
-; tell other fns vblank happened
+.done
+
xor a
ld [VBlankOccurred], a
-
-; joypad
+
call Joypad
-
-; discard requested ints
+
xor a
ld [rIF], a
-; enable lcd stat
ld a, %10 ; lcd stat
ld [rIE], a
-; request lcd stat
+ ; request lcd stat
ld [rIF], a
-
+
ei
-; update sound
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
-; restore bank
- ld a, [$ff8a]
+ ld a, [hROMBankBackup]
rst Bankswitch
di
-
-; discard requested ints
+
xor a
ld [rIF], a
-; enable ints besides joypad
+ ; enable ints besides joypad
ld a, %1111 ; serial timer lcdstat vblank
ld [rIE], a
ret
@@ -510,32 +413,29 @@
; dma transfer
; sound
-; save bank
ld a, [hROMBank]
- ld [$ff8a], a
-
-; inc frame counter
+ ld [hROMBankBackup], a
+
+ ; inc frame counter
ld hl, $ff9b
inc [hl]
-
+
call UpdateCGBPals
- jr c, .vblankoccurred
-
+ jr c, .done
+
call Serve2bppRequest
call Serve1bppRequest
call DMATransfer
-
-.vblankoccurred
-; tell other fns vblank happened
+.done
+
xor a
ld [VBlankOccurred], a
-
-; update sound
+
ld a, BANK(_UpdateSound)
- rst Bankswitch ; bankswitch
+ rst Bankswitch
call _UpdateSound
-; restore bank
- ld a, [$ff8a]
+
+ ld a, [hROMBankBackup]
rst Bankswitch
ret
; 45a
--- a/hram.asm
+++ b/hram.asm
@@ -1,5 +1,6 @@
hPushOAM EQU $ff80
+hROMBankBackup EQU $ff8a
hBuffer EQU $ff8b
hRTCDayHi EQU $ff8d
@@ -15,6 +16,7 @@
hSeconds EQU $ff98
hROMBank EQU $ff9d
+hVBlank EQU $ff9e
hJoypadReleased EQU $ffa2
hJoypadPressed EQU $ffa3
--- a/main.asm
+++ b/main.asm
@@ -36515,7 +36515,7 @@
xor a
ld [hld], a
ld [hl], a
- ld [$ff9e], a
+ ld [hVBlank], a
push de
hlcoord 0, 12
ld b, $4
@@ -39695,7 +39695,7 @@
ld c, $28
call DelayFrames
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
inc a
ld [InLinkBattle], a
ret
@@ -39744,7 +39744,7 @@
xor a
ld [hli], a
ld [hl], a
- ld [$ff9e], a
+ ld [hVBlank], a
ld [InLinkBattle], a
ret
; 29ce8
@@ -39860,12 +39860,12 @@
ld [hl], a
call WaitBGMap
ld a, $2
- ld [$ff9e], a
+ ld [hVBlank], a
call DelayFrame
call DelayFrame
call Function29e0c
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, [ScriptVar]
and a
ret nz
@@ -39882,7 +39882,7 @@
ld [hl], a
call WaitBGMap
ld a, $2
- ld [$ff9e], a
+ ld [hVBlank], a
call DelayFrame
call DelayFrame
call Function29e0c
@@ -39916,7 +39916,7 @@
.asm_29e08
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ret
; 29e0c
@@ -40019,7 +40019,7 @@
inc a
ld [InLinkBattle], a
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, $1
ld [ScriptVar], a
ret
@@ -40037,7 +40037,7 @@
callab Function28000
call Function2ee4
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ret
; 29ec4
@@ -40048,7 +40048,7 @@
callab Function28000
call Function2ee4
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ret
; 29ed9
@@ -40059,7 +40059,7 @@
callab Function28000
call Function2ee4
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ret
; 29eee
@@ -40096,7 +40096,7 @@
ld [$cf56], a
ld [$cf57], a
ld a, $2
- ld [$ff9e], a
+ ld [hVBlank], a
call DelayFrame
call DelayFrame
.asm_29f29
@@ -40114,7 +40114,7 @@
.asm_29f40
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, b
and $f
ret
@@ -64171,7 +64171,7 @@
ld a, $e4
call DmgToCgbBGPals
call DelayFrame
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $4
@@ -64196,7 +64196,7 @@
.asm_8449d
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call Function84411
xor a
ld [rIF], a
@@ -64237,7 +64237,7 @@
ld [rIF], a ; $ff00+$f
ld a, $9
ld [rIE], a ; $ff00+$ff
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $4
@@ -64279,7 +64279,7 @@
call Function84559
.asm_84545
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call Function84411
xor a
ld [rIF], a ; $ff00+$f
@@ -64307,7 +64307,7 @@
ld [rIF], a
ld a, $9
ld [rIE], a
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $4
@@ -64343,7 +64343,7 @@
.asm_845c0
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call Function84411
call Function30b4
xor a
@@ -64377,7 +64377,7 @@
ld [hBGMapMode], a
ld a, $13
call Function84419
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $4
@@ -64385,7 +64385,7 @@
ld [$cf65], a
call Function843f0
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call Function84411
call Function84735
xor a
@@ -64414,7 +64414,7 @@
callba Function1dc381
ld a, $10
call Function84419
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $4
@@ -64438,7 +64438,7 @@
.asm_84671
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call Function84411
call Function84735
xor a
@@ -64464,7 +64464,7 @@
ld [rIF], a
ld a, $9
ld [rIE], a
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $4
@@ -64492,7 +64492,7 @@
.asm_846e2
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call Function84411
xor a
ld [rIF], a
@@ -73282,7 +73282,7 @@
ld a, [rOBP1]
ld [$cfc9], a
call DelayFrame
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $1
@@ -73317,7 +73317,7 @@
ld a, $1
ld [rSVBK], a
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call DelayFrame
ret
; 8c26d
@@ -74572,7 +74572,7 @@
ld a, [hSCY]
push af
call Function8ccc9
- ld hl, $ff9e
+ ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $1
@@ -74595,7 +74595,7 @@
.asm_8cc6b
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
call WhiteBGMap
xor a
ld [hLCDStatCustom], a
@@ -96304,7 +96304,7 @@
ld [rSVBK], a
ld a, [$ffaa]
push af
- ld a, [$ff9e]
+ ld a, [hVBlank]
push af
call Functione4901
@@ -96337,7 +96337,7 @@
ld a, $90
ld [hWY], a
pop af
- ld [$ff9e], a
+ ld [hVBlank], a
pop af
ld [$ffaa], a
pop af
@@ -96347,7 +96347,7 @@
Functione4901: ; e4901
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, $1
ld [$ffaa], a
xor a
@@ -100510,7 +100510,7 @@
ld [$ffc9], a
ld [$ffe9], a
xor a
- ld [$ff9e], a
+ ld [hVBlank], a
call NormalSpeed
xor a
ld [rIF], a
@@ -101857,13 +101857,13 @@
Function1008e0: ; 1008e0
ld a, [hBGMapMode]
ld b, a
- ld a, [$ff9e]
+ ld a, [hVBlank]
ld c, a
push bc
xor a
ld [hBGMapMode], a
ld a, $3
- ld [$ff9e], a
+ ld [hVBlank], a
call Function100970
call Function100902
call Function100989
@@ -101870,7 +101870,7 @@
call DelayFrame
pop bc
ld a, c
- ld [$ff9e], a
+ ld [hVBlank], a
ld a, b
ld [hBGMapMode], a
ret
@@ -114136,7 +114136,7 @@
xor a
ld [$ffc9], a
ld [$ffe9], a
- ld [$ff9e], a
+ ld [hVBlank], a
call NormalSpeed
xor a
ld [rIF], a