diff options
-rw-r--r-- | battle/anim_commands.asm | 4 | ||||
-rw-r--r-- | engine/credits.asm | 6 | ||||
-rw-r--r-- | home/vblank.asm | 384 | ||||
-rw-r--r-- | hram.asm | 2 | ||||
-rw-r--r-- | main.asm | 74 |
5 files changed, 186 insertions, 284 deletions
diff --git a/battle/anim_commands.asm b/battle/anim_commands.asm index 6e5a931eb..f9c841274 100644 --- a/battle/anim_commands.asm +++ b/battle/anim_commands.asm @@ -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 diff --git a/engine/credits.asm b/engine/credits.asm index e2b820e68..7504898ca 100644 --- a/engine/credits.asm +++ b/engine/credits.asm @@ -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 diff --git a/home/vblank.asm b/home/vblank.asm index 54a99bc99..38dc02800 100644 --- a/home/vblank.asm +++ b/home/vblank.asm @@ -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 - - -; vblank-sensitive operations are done - -.vblankoccurred -; tell other fns vblank happened +.done_oam + + + ; 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 + 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 @@ 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 @@ -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 @@ -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 |