diff options
author | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-16 23:04:56 -0400 |
---|---|---|
committer | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-16 23:04:56 -0400 |
commit | ccdc79e109ce073be9d340a7ae58243b4c164513 (patch) | |
tree | c322b1e2e784a765cfd68a5b2185459a8ef01b48 | |
parent | 08fdc6d07ccbc8d1d36a02e45eecf435e84e8654 (diff) |
home/video.asm
-rw-r--r-- | home.asm | 16 | ||||
-rw-r--r-- | home/text.asm | 32 | ||||
-rw-r--r-- | home/vblank.asm | 10 | ||||
-rw-r--r-- | home/video.asm | 258 | ||||
-rw-r--r-- | wram.asm | 8 |
5 files changed, 77 insertions, 247 deletions
@@ -23,21 +23,7 @@ INCLUDE "home/decompress.asm" INCLUDE "home/palettes.asm" INCLUDE "home/copy.asm" INCLUDE "home/text.asm" - -UpdateBGMapBuffer:: - dr $1458, $14bb - -UpdateBGMap:: - dr $14bb, $1579 - -Function1579:: - dr $1579, $15d0 - -Serve2bppRequest:: - dr $15d0, $162b - -Function162b:: - dr $162b, $1642 +INCLUDE "home/video.asm" Function1642:: dr $1642, $196f diff --git a/home/text.asm b/home/text.asm index 8be33fd9..6ed9f4ab 100644 --- a/home/text.asm +++ b/home/text.asm @@ -11,7 +11,7 @@ TEXTBOX_INNERY EQU TEXTBOX_Y + 2 TEXTBOX_PAL EQU 7 ClearBox:: ; ebd (0:0ebd) - ld a, $7f + ld a, " " FillBoxWithByte:: ld de, SCREEN_WIDTH .row @@ -30,7 +30,7 @@ FillBoxWithByte:: ClearTileMap:: ld hl, wTileMap - ld a, $7f + ld a, " " ld bc, SCREEN_WIDTH * SCREEN_HEIGHT call ByteFill ld a, [rLCDC] @@ -39,7 +39,7 @@ ClearTileMap:: jp WaitBGMap FillScreenWithTextboxPal:: - ld a, $7 + ld a, TEXTBOX_PAL hlcoord 0, 0, wAttrMap ld bc, SCREEN_WIDTH * SCREEN_HEIGHT call ByteFill @@ -120,9 +120,9 @@ TextBoxPalette ret SpeechTextBox:: ; f45 (0:0f45) - hlcoord 0, 12 - ld b, $4 - ld c, $12 + hlcoord TEXTBOX_X, TEXTBOX_Y + ld b, TEXTBOX_INNERH + ld c, TEXTBOX_INNERW jp TextBox TestText:: @@ -137,7 +137,7 @@ RadioTerminator:: ; 1052 PrintText:: call SetUpTextBox - bccoord 1, 14 + bccoord TEXTBOX_INNERX, TEXTBOX_INNERY call PlaceHLTextAtBC ret @@ -399,7 +399,7 @@ HalfLineChar:: ; 1176 (0:1176) LineChar:: ; 117f (0:117f) pop hl - hlcoord 1, 16 + hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2 push hl jp NextChar @@ -412,13 +412,13 @@ Paragraph:: ; 1187 (0:1187) .asm_1192 call Text_WaitBGMap call ButtonSound - hlcoord 1, 14 - lb bc, 3, 18 + hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + lb bc, TEXTBOX_INNERH - 1, TEXTBOX_INNERW call ClearBox call UnloadBlinkingCursor ld c, 20 call DelayFrames - hlcoord 1, 14 + hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY pop de jp NextChar @@ -439,7 +439,7 @@ Char4C:: ; 11c8 (0:11c8) push de call TextScroll call TextScroll - hlcoord 1, 16 + hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2 pop de jp NextChar @@ -497,13 +497,13 @@ NullChar:: ; 120c (0:120c) done TextScroll:: ; 121d (0:121d) - hlcoord 0, 14 - decoord 0, 13 + hlcoord TEXTBOX_X, TEXTBOX_INNERY + decoord TEXTBOX_X, TEXTBOX_INNERY - 1 ld bc, 3 * SCREEN_WIDTH call CopyBytes - hlcoord 1, 16 + hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2 ld a, " " - ld bc, 18 + ld bc, TEXTBOX_INNERW call ByteFill ld c, 5 call DelayFrames diff --git a/home/vblank.asm b/home/vblank.asm index 9cf36f9a..c0216ac2 100644 --- a/home/vblank.asm +++ b/home/vblank.asm @@ -86,12 +86,12 @@ VBlank0:: ; 180 call UpdatePalsIfCGB jr c, .done call UpdateBGMap - call Serve2bppRequest ; These have their own timing checks. - call Function1579 - call Function162b + call Serve2bppRequest + call Serve1bppRequest + call AnimateTileset call Function1642 .done @@ -346,8 +346,8 @@ VBlank3:: ; 2c4 call Serve2bppRequest - call Function1579 - call Function162b + call Serve1bppRequest + call AnimateTileset call hPushOAM diff --git a/home/video.asm b/home/video.asm index 85de6a1e..201ae7fc 100644 --- a/home/video.asm +++ b/home/video.asm @@ -1,71 +1,29 @@ -; Functions dealing with VRAM. - -DMATransfer:: ; 15d8 -; Return carry if the transfer is completed. - - ld a, [hDMATransfer] - and a - ret z - -; Start transfer - ld [rHDMA5], a - -; Execution is halted until the transfer is complete. - - xor a - ld [hDMATransfer], a - scf - ret -; 15e3 - - -UpdateBGMapBuffer:: ; 15e3 -; Copy [hFFDE] 16x8 tiles from BGMapBuffer -; to bg map addresses in BGMapBufferPtrs. - -; [hFFDE] must be even since this is done in pairs. - -; Return carry on success. - +UpdateBGMapBuffer:: ; 1458 (0:1458) ld a, [hBGMapUpdate] and a ret z - ld a, [rVBK] - push af ld [hSPBuffer], sp - ld hl, BGMapBufferPtrs + ld hl, wBGMapBufferPtrs ld sp, hl -; We can now pop the addresses of affected spots on the BG Map - - ld hl, BGMapPalBuffer - ld de, BGMapBuffer - + ld hl, wBGMapPalBuffer + ld de, wBGMapBuffer .next -; Copy a pair of 16x8 blocks (one 16x16 block) - rept 2 -; Get our BG Map address pop bc - -; Palettes - ld a, 1 + ld a, $1 ld [rVBK], a - ld a, [hli] ld [bc], a inc c ld a, [hli] ld [bc], a dec c - -; Tiles - ld a, 0 + ld a, $0 ld [rVBK], a - ld a, [de] inc de ld [bc], a @@ -75,7 +33,6 @@ rept 2 ld [bc], a endr -; We've done 2 16x8 blocks ld a, [hFFDE] dec a dec a @@ -83,34 +40,24 @@ endr jr nz, .next - ld a, [hSPBuffer] ld l, a ld a, [hSPBuffer + 1] ld h, a ld sp, hl - pop af - ld [rVBK], a - xor a ld [hBGMapUpdate], a scf ret -; 163a - - -WaitTop:: ; 163a -; Wait until the top third of the BG Map is being updated. +WaitTop:: ld a, [hBGMapMode] and a ret z - ld a, [hBGMapThird] and a jr z, .done - call DelayFrame jr WaitTop @@ -118,23 +65,17 @@ WaitTop:: ; 163a xor a ld [hBGMapMode], a ret -; 164c - - -UpdateBGMap:: ; 164c -; Update the BG Map, in thirds, from TileMap and AttrMap. +UpdateBGMap:: ; 14bb (0:14bb) ld a, [hBGMapMode] and a ret z -; BG Map 0 - dec a ; 1 + dec a jr z, .Tiles - dec a ; 2 + dec a jr z, .Attr -; BG Map 1 dec a ld a, [hBGMapAddress] @@ -145,15 +86,15 @@ UpdateBGMap:: ; 164c xor a ld [hBGMapAddress], a - ld a, VBGMap1 >> 8 + ld a, $9c ld [hBGMapAddress + 1], a ld a, [hBGMapMode] push af - cp 3 + cp $3 call z, .Tiles pop af - cp 4 + cp $4 call z, .Attr pop hl @@ -163,39 +104,28 @@ UpdateBGMap:: ; 164c ld [hBGMapAddress + 1], a ret - .Attr - ld a, 1 + ld a, $1 ld [rVBK], a - hlcoord 0, 0, AttrMap + hlcoord 0, 0, wAttrMap call .update - - ld a, 0 + ld a, $0 ld [rVBK], a ret - .Tiles hlcoord 0, 0 - - .update ld [hSPBuffer], sp - -; Which third? + ld a, [hBGMapThird] - and a ; 0 + and a jr z, .top - dec a ; 1 + dec a jr z, .middle - ; 2 - THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 - - -.bottom ld de, 2 * THIRD_HEIGHT * SCREEN_WIDTH add hl, de ld sp, hl @@ -203,16 +133,14 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 ld a, [hBGMapAddress + 1] ld h, a ld a, [hBGMapAddress] - ld l, a + ld l, a ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH add hl, de -; Next time: top third xor a jr .start - .middle ld de, THIRD_HEIGHT * SCREEN_WIDTH add hl, de @@ -226,11 +154,9 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 ld de, THIRD_HEIGHT * BG_MAP_WIDTH add hl, de -; Next time: bottom third - ld a, 2 + ld a, $2 jr .start - .top ld sp, hl @@ -239,23 +165,16 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 ld a, [hBGMapAddress] ld l, a -; Next time: middle third - ld a, 1 - + ld a, $1 .start -; Which third to update next time ld [hBGMapThird], a - -; Rows of tiles in a third ld a, SCREEN_HEIGHT / 3 ; Discrepancy between TileMap and BGMap ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1) - - + .row -; Copy a row of 20 tiles rept SCREEN_WIDTH / 2 - 1 pop de ld [hl], e @@ -272,56 +191,38 @@ endr dec a jr nz, .row - ld a, [hSPBuffer] ld l, a ld a, [hSPBuffer + 1] ld h, a ld sp, hl ret -; 170a - -Serve1bppRequest:: ; 170a -; Only call during the first fifth of VBlank - - ld a, [Requested1bpp] +Serve1bppRequest:: ; 1579 (0:1579) + ld a, [wRequested1bpp] and a ret z -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 146 - ret nc - -; Copy [Requested1bpp] 1bpp tiles from [Requested1bppSource] to [Requested1bppDest] - ld [hSPBuffer], sp -; Source - ld hl, Requested1bppSource + ld hl, wRequested1bppSource ld a, [hli] ld h, [hl] ld l, a ld sp, hl - -; Destination - ld hl, Requested1bppDest + + ld hl, wRequested1bppDest ld a, [hli] ld h, [hl] ld l, a - -; # tiles to copy - ld a, [Requested1bpp] + + ld a, [wRequested1bpp] ld b, a xor a - ld [Requested1bpp], a + ld [wRequested1bpp], a .next - rept 3 pop de ld [hl], e @@ -346,13 +247,12 @@ endr dec b jr nz, .next - ld a, l - ld [Requested1bppDest], a + ld [wRequested1bppDest], a ld a, h - ld [Requested1bppDest + 1], a + ld [wRequested1bppDest + 1], a - ld [Requested1bppSource], sp + ld [wRequested1bppSource], sp ld a, [hSPBuffer] ld l, a @@ -360,58 +260,26 @@ endr ld h, a ld sp, hl ret -; 1769 - - -Serve2bppRequest:: ; 1769 -; Only call during the first fifth of VBlank - - ld a, [Requested2bpp] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 146 - ret nc - jr _Serve2bppRequest - - -Serve2bppRequest@VBlank:: ; 1778 - ld a, [Requested2bpp] +Serve2bppRequest:: ; 15d0 (0:15d0) + ld a, [wRequested2bpp] and a ret z - -_Serve2bppRequest:: ; 177d -; Copy [Requested2bpp] 2bpp tiles from [Requested2bppSource] to [Requested2bppDest] - ld [hSPBuffer], sp - -; Source - ld hl, Requested2bppSource + ld hl, wRequested2bppSource ld a, [hli] ld h, [hl] ld l, a ld sp, hl - -; Destination - ld hl, Requested2bppDest + ld hl, wRequested2bppDest ld a, [hli] ld h, [hl] ld l, a - -; # tiles to copy - ld a, [Requested2bpp] + ld a, [wRequested2bpp] ld b, a - xor a - ld [Requested2bpp], a - + ld [wRequested2bpp], a .next - rept 7 pop de ld [hl], e @@ -428,13 +296,12 @@ endr dec b jr nz, .next - ld a, l - ld [Requested2bppDest], a + ld [wRequested2bppDest], a ld a, h - ld [Requested2bppDest + 1], a + ld [wRequested2bppDest + 1], a - ld [Requested2bppSource], sp + ld [wRequested2bppSource], sp ld a, [hSPBuffer] ld l, a @@ -442,45 +309,20 @@ endr ld h, a ld sp, hl ret -; 17d3 - - -AnimateTileset:: ; 17d3 -; Only call during the first fifth of VBlank +AnimateTileset:: ; 162b (0:162b) ld a, [hMapAnims] and a ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 151 - ret nc - ld a, [hROMBank] push af - ld a, BANK(_AnimateTileset) + ld a, $3f rst Bankswitch - - ld a, [rSVBK] - push af - ld a, 1 - ld [rSVBK], a - - ld a, [rVBK] - push af - ld a, 0 - ld [rVBK], a - - call _AnimateTileset - - pop af - ld [rVBK], a - pop af - ld [rSVBK], a + call $4003 pop af rst Bankswitch ret -; 17ff + ret + ld hl, rLCDC + set 1, [hl] + ret @@ -1839,7 +1839,9 @@ wcc1c:: ds 1 ; cc1c wcc1d:: ds 1 ; cc1d wcc1e:: ds 1 ; cc1e wcc1f:: ds 1 ; cc1f -wcc20:: ds 1 ; cc20 + +SECTION "Video", WRAM0 +wBGMapBuffer:: ds 1 ; cc20 wcc21:: ds 1 ; cc21 wcc22:: ds 1 ; cc22 wcc23:: ds 1 ; cc23 @@ -1879,7 +1881,7 @@ wcc44:: ds 1 ; cc44 wcc45:: ds 1 ; cc45 wcc46:: ds 1 ; cc46 wcc47:: ds 1 ; cc47 -wcc48:: ds 1 ; cc48 +wBGMapPalBuffer:: ds 1 ; cc48 wcc49:: ds 1 ; cc49 wcc4a:: ds 1 ; cc4a wcc4b:: ds 1 ; cc4b @@ -1919,7 +1921,7 @@ wcc6c:: ds 1 ; cc6c wcc6d:: ds 1 ; cc6d wcc6e:: ds 1 ; cc6e wcc6f:: ds 1 ; cc6f -wcc70:: ds 1 ; cc70 +wBGMapBufferPtrs:: ds 1 ; cc70 wcc71:: ds 1 ; cc71 wcc72:: ds 1 ; cc72 wcc73:: ds 1 ; cc73 |