This commit is contained in:
yenatch 2015-01-19 21:31:29 -08:00
parent 1aa28c7712
commit 3fe3cd1a46
5 changed files with 185 additions and 283 deletions

View File

@ -35,7 +35,7 @@ _PlayBattleAnim: ; cc0e4
ld c, 3
.asm_cc0ff
ld hl, $ff9e
ld hl, hVBlank
ld a, [hl]
push af
@ -43,7 +43,7 @@ _PlayBattleAnim: ; cc0e4
call Functioncc11c
pop af
ld [$ff9e], a
ld [hVBlank], a
ld a, $1
ld [hBGMapMode], a

View File

@ -188,10 +188,10 @@ Function109847:: ; 109847
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 @@ Function109847:: ; 109847
ld [hLCDStatCustom], a
ld [hBGMapAddress], a
pop af
ld [$ff9e], a
ld [hVBlank], a
pop af
ld [rSVBK], a
ret

View File

@ -12,27 +12,23 @@ VBlank:: ; 283
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
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 @@ VBlank:: ; 283
; 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 @@ VBlank0:: ; 2b1
; 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 @@ VBlank0:: ; 2b1
VBlank2:: ; 325
; sound only
; save bank
ld a, [hROMBank]
ld [$ff8a], a
; update sound
ld [hROMBankBackup], a
ld a, BANK(_UpdateSound)
rst Bankswitch ; bankswitch
call _UpdateSound
; restore bank
ld a, [$ff8a]
rst Bankswitch
; tell other fns vblank happened
call _UpdateSound
ld a, [hROMBankBackup]
rst Bankswitch
xor a
ld [VBlankOccurred], a
ret
@ -212,77 +178,60 @@ VBlank1:: ; 337
; 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 @@ VBlank1:: ; 337
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 @@ VBlank3:: ; 396
; 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 @@ VBlank4:: ; 3df
; 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 @@ VBlank5:: ; 400
; 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 @@ VBlank6:: ; 436
; 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

View File

@ -1,5 +1,6 @@
hPushOAM EQU $ff80
hROMBankBackup EQU $ff8a
hBuffer EQU $ff8b
hRTCDayHi EQU $ff8d
@ -15,6 +16,7 @@ hMinutes EQU $ff96
hSeconds EQU $ff98
hROMBank EQU $ff9d
hVBlank EQU $ff9e
hJoypadReleased EQU $ffa2
hJoypadPressed EQU $ffa3

View File

@ -36515,7 +36515,7 @@ Function283b2: ; 283b2
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 @@ Function29c7b: ; 29c7b
ld c, $28
call DelayFrames
xor a
ld [$ff9e], a
ld [hVBlank], a
inc a
ld [InLinkBattle], a
ret
@ -39744,7 +39744,7 @@ Function29c92: ; 29c92
xor a
ld [hli], a
ld [hl], a
ld [$ff9e], a
ld [hVBlank], a
ld [InLinkBattle], a
ret
; 29ce8
@ -39860,12 +39860,12 @@ Function29d92: ; 29d92
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 @@ Function29dba: ; 29dba
ld [hl], a
call WaitBGMap
ld a, $2
ld [$ff9e], a
ld [hVBlank], a
call DelayFrame
call DelayFrame
call Function29e0c
@ -39916,7 +39916,7 @@ Function29dba: ; 29dba
.asm_29e08
xor a
ld [$ff9e], a
ld [hVBlank], a
ret
; 29e0c
@ -40019,7 +40019,7 @@ Function29e82: ; 29e82
inc a
ld [InLinkBattle], a
xor a
ld [$ff9e], a
ld [hVBlank], a
ld a, $1
ld [ScriptVar], a
ret
@ -40037,7 +40037,7 @@ Function29eaf: ; 29eaf
callab Function28000
call Function2ee4
xor a
ld [$ff9e], a
ld [hVBlank], a
ret
; 29ec4
@ -40048,7 +40048,7 @@ Function29ec4: ; 29ec4
callab Function28000
call Function2ee4
xor a
ld [$ff9e], a
ld [hVBlank], a
ret
; 29ed9
@ -40059,7 +40059,7 @@ Function29ed9: ; 29ed9
callab Function28000
call Function2ee4
xor a
ld [$ff9e], a
ld [hVBlank], a
ret
; 29eee
@ -40096,7 +40096,7 @@ Function29f17: ; 29f17
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 @@ Function29f17: ; 29f17
.asm_29f40
xor a
ld [$ff9e], a
ld [hVBlank], a
ld a, b
and $f
ret
@ -64171,7 +64171,7 @@ Function8442c: ; 8442c
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 @@ Function8442c: ; 8442c
.asm_8449d
pop af
ld [$ff9e], a
ld [hVBlank], a
call Function84411
xor a
ld [rIF], a
@ -64237,7 +64237,7 @@ Function844bc: ; 844bc (21:44bc)
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 @@ Function844bc: ; 844bc (21:44bc)
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 @@ Function84560: ; 84560
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 @@ Function84560: ; 84560
.asm_845c0
pop af
ld [$ff9e], a
ld [hVBlank], a
call Function84411
call Function30b4
xor a
@ -64377,7 +64377,7 @@ Function845db: ; 845db
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 @@ Function845db: ; 845db
ld [$cf65], a
call Function843f0
pop af
ld [$ff9e], a
ld [hVBlank], a
call Function84411
call Function84735
xor a
@ -64414,7 +64414,7 @@ Function8461a: ; 8461a
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 @@ Function8461a: ; 8461a
.asm_84671
pop af
ld [$ff9e], a
ld [hVBlank], a
call Function84411
call Function84735
xor a
@ -64464,7 +64464,7 @@ Function84688: ; 84688
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 @@ Function84688: ; 84688
.asm_846e2
pop af
ld [$ff9e], a
ld [hVBlank], a
call Function84411
xor a
ld [rIF], a
@ -73282,7 +73282,7 @@ Function8c20f: ; 8c20f
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 @@ Function8c20f: ; 8c20f
ld a, $1
ld [rSVBK], a
pop af
ld [$ff9e], a
ld [hVBlank], a
call DelayFrame
ret
; 8c26d
@ -74572,7 +74572,7 @@ Function8cc04: ; 8cc04
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 @@ Function8cc04: ; 8cc04
.asm_8cc6b
pop af
ld [$ff9e], a
ld [hVBlank], a
call WhiteBGMap
xor a
ld [hLCDStatCustom], a
@ -96304,7 +96304,7 @@ Functione48ac: ; e48ac
ld [rSVBK], a
ld a, [$ffaa]
push af
ld a, [$ff9e]
ld a, [hVBlank]
push af
call Functione4901
@ -96337,7 +96337,7 @@ Functione48bc: ; e48bc
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 @@ Functione48bc: ; e48bc
Functione4901: ; e4901
xor a
ld [$ff9e], a
ld [hVBlank], a
ld a, $1
ld [$ffaa], a
xor a
@ -100510,7 +100510,7 @@ Function1000a4: ; 1000a4
ld [$ffc9], a
ld [$ffe9], a
xor a
ld [$ff9e], a
ld [hVBlank], a
call NormalSpeed
xor a
ld [rIF], a
@ -101857,20 +101857,20 @@ Function1008a6: ; 1008a6
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
call DelayFrame
pop bc
ld a, c
ld [$ff9e], a
ld [hVBlank], a
ld a, b
ld [hBGMapMode], a
ret
@ -114136,7 +114136,7 @@ Function118452: ; 118452
xor a
ld [$ffc9], a
ld [$ffe9], a
ld [$ff9e], a
ld [hVBlank], a
call NormalSpeed
xor a
ld [rIF], a