diff options
Diffstat (limited to 'engine/vblank.asm')
-rw-r--r-- | engine/vblank.asm | 541 |
1 files changed, 0 insertions, 541 deletions
diff --git a/engine/vblank.asm b/engine/vblank.asm deleted file mode 100644 index 71114964e..000000000 --- a/engine/vblank.asm +++ /dev/null @@ -1,541 +0,0 @@ -; VBlank is the interrupt responsible for updating VRAM. - -; In Pokemon Crystal, VBlank has been hijacked to act as the -; main loop. After time-sensitive graphics operations have been -; performed, joypad input and sound functions are executed. - -; This prevents the display and audio output from lagging. - - -VBlank: ; 283 - push af - push bc - push de - push hl - -; get vblank type - ld a, [$ff9e] - and $7 - -; get fn pointer - ld e, a - 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 - pop af - reti -; 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 -; 2b1 - - -VBlank0: ; 2b1 -; normal operation - -; rng -; scx, scy, wy, wx -; bg map buffer -; palettes -; dma transfer -; bg map -; tiles -; oam -; joypad -; sound - -; inc frame counter - ld hl, $ff9b - inc [hl] - -; advance rng - 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, [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 - call UpdateBGMapBuffer - jr c, .doneframeaction - -; then pals - call UpdatePalsIfCGB - jr c, .doneframeaction - -; dma transfer - call DMATransfer - jr c, .doneframeaction - -; bg map - call UpdateBGMap - -; these have their own timing checks - call Serve2bppRequest - call Serve1bppRequest - call AnimateTileset - -.doneframeaction -; oam update off? - ld a, [hOAMUpdate] - and a - jr nz, .vblankoccurred - -; 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 - - -; vblank-sensitive operations are done - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; dec OverworldDelay until 0 - ld a, [OverworldDelay] - and a - jr z, .textdelay - dec a - ld [OverworldDelay], a - -.textdelay -; dec text delay counter until 0 - ld a, [TextDelayFrames] - and a - jr z, .joypad - dec a - ld [TextDelayFrames], a - -.joypad - call Joypad - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound - ld a, [$ff8a] - rst Bankswitch ; restore bank - -; - ld a, [hSeconds] - ld [$ffe3], a - - ret -; 325 - - -VBlank2: ; 325 -; sound only - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound - -; restore bank - ld a, [$ff8a] - rst Bankswitch - -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - ret -; 337 - - -VBlank1: ; 337 -; scx, scy -; palettes -; bg map -; tiles -; oam -; sound / lcd stat - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - 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 - 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 - xor a - ld [VBlankOccurred], 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 -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; get requested ints - ld a, [rIF] - ld b, a -; discard requested ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a -; rerequest ints - ld a, b - ld [rIF], a - ret -; 37f - - -UpdatePals: ; 37f -; update pals for either dmg or cgb - -; check cgb - ld a, [hCGB] - and a - jp nz, UpdateCGBPals - -; 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 - - -VBlank3: ; 396 -; scx, scy -; palettes -; bg map -; tiles -; oam -; sound / lcd stat - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - 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 - 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 - 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 - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; request lcdstat - ld a, [rIF] - ld b, a -; and any other ints - pop af - or b - ld b, a -; reset ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a -; request ints - ld a, b - ld [rIF], a - ret -; 3df - - -VBlank4: ; 3df -; bg map -; tiles -; oam -; joypad -; serial -; sound - -; save bank - ld a, [hROMBank] - ld [$ff8a], 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 - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - ret -; 400 - - -VBlank5: ; 400 -; scx -; palettes -; bg map -; tiles -; joypad -; - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a - -; if we can update pals, skip this part - call UpdatePalsIfCGB - jr c, .vblankoccurred - - call UpdateBGMap - call Serve2bppRequest - -.vblankoccurred -; tell other fns vblank happened - 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 - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; discard requested ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a - ret -; 436 - - -VBlank6: ; 436 -; palettes -; tiles -; dma transfer -; sound - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; inc frame counter - ld hl, $ff9b - inc [hl] - - call UpdateCGBPals - jr c, .vblankoccurred - - call Serve2bppRequest - call Serve1bppRequest - call DMATransfer - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - ret -; 45a |