diff options
author | pikalaxalt <PikalaxALT@gmail.com> | 2016-05-04 22:34:09 -0400 |
---|---|---|
committer | pikalaxalt <PikalaxALT@gmail.com> | 2016-05-04 22:34:09 -0400 |
commit | a613ed915c32d3befec54a98dae98e21649e19ce (patch) | |
tree | d483b11e73c07aec2782f57ca3765b3ed7eb2436 /misc | |
parent | 3713b71d9e3f3f1bc099d4704910cb9c1d172dcf (diff) |
HDMA transfer functions
Diffstat (limited to 'misc')
-rw-r--r-- | misc/crystal_misc.asm | 4 | ||||
-rwxr-xr-x | misc/gfx_41.asm | 212 | ||||
-rwxr-xr-x | misc/mobile_12.asm | 4 | ||||
-rw-r--r-- | misc/mobile_22.asm | 2 | ||||
-rw-r--r-- | misc/mobile_40.asm | 24 | ||||
-rw-r--r-- | misc/mobile_42.asm | 2 | ||||
-rw-r--r-- | misc/mobile_45.asm | 4 | ||||
-rw-r--r-- | misc/mobile_5f.asm | 4 | ||||
-rwxr-xr-x | misc/mobile_menu.asm | 8 |
9 files changed, 150 insertions, 114 deletions
diff --git a/misc/crystal_misc.asm b/misc/crystal_misc.asm index 8ff138869..296e59305 100644 --- a/misc/crystal_misc.asm +++ b/misc/crystal_misc.asm @@ -47,7 +47,7 @@ Function17a6a8: ; 17a6a8 (5e:66a8) call Function17aba0 callba Function106464 call Function17ac0c - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 call Function17abcf callba LoadOW_BGPal7 callba Function49420 @@ -169,7 +169,7 @@ Function17a78f: ; 17a78f (5e:678f) bit 7, [hl] res 7, [hl] jr nz, .asm_17a79f - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 ret .asm_17a79f diff --git a/misc/gfx_41.asm b/misc/gfx_41.asm index dc5110e2e..e7cde8faa 100755 --- a/misc/gfx_41.asm +++ b/misc/gfx_41.asm @@ -1,52 +1,52 @@ -Function104000:: ; 104000 +HDMATransferAttrMapAndTileMapToWRAMBank3:: ; 104000 ld hl, .Function jp CallInSafeGFXMode .Function: decoord 0, 0, AttrMap - ld hl, wBackupAttrMap + ld hl, wScratchAttrMap call CutAndPasteAttrMap decoord 0, 0 - ld hl, wDecompressScratch + ld hl, wScratchTileMap call CutAndPasteTilemap ld a, $0 ld [rVBK], a - ld hl, wDecompressScratch - call Function10419d + ld hl, wScratchTileMap + call HDMATransferToWRAMBank3 ld a, $1 ld [rVBK], a - ld hl, wBackupAttrMap - call Function10419d + ld hl, wScratchAttrMap + call HDMATransferToWRAMBank3 ret ; 10402d -Function10402d:: ; 10402d +HDMATransferTileMapToWRAMBank3:: ; 10402d ld hl, .Function jp CallInSafeGFXMode .Function: decoord 0, 0 - ld hl, wDecompressScratch + ld hl, wScratchTileMap call CutAndPasteTilemap ld a, $0 ld [rVBK], a - ld hl, wDecompressScratch - call Function10419d + ld hl, wScratchTileMap + call HDMATransferToWRAMBank3 ret ; 104047 -Function104047: ; 104047 +HDMATransferAttrMapToWRAMBank3: ; 104047 ld hl, .Function jp CallInSafeGFXMode .Function: decoord 0, 0, AttrMap - ld hl, wBackupAttrMap + ld hl, wScratchAttrMap call CutAndPasteAttrMap ld a, $1 ld [rVBK], a - ld hl, wBackupAttrMap - call Function10419d + ld hl, wScratchAttrMap + call HDMATransferToWRAMBank3 ret ; 104061 @@ -56,63 +56,67 @@ ReloadMapPart:: ; 104061 .Function: decoord 0, 0, AttrMap - ld hl, wBackupAttrMap + ld hl, wScratchAttrMap call CutAndPasteAttrMap decoord 0, 0 - ld hl, wDecompressScratch + ld hl, wScratchTileMap call CutAndPasteTilemap call DelayFrame + di ld a, [rVBK] push af ld a, $1 ld [rVBK], a - ld hl, wBackupAttrMap - call Function1041ad + ld hl, wScratchAttrMap + call HDMATransfer_Wait127Scanlines_toBGMap ld a, $0 ld [rVBK], a - ld hl, wDecompressScratch - call Function1041ad + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines_toBGMap pop af ld [rVBK], a ei + ret -Function104099: ; 104099 +Mobile_ReloadMapPart: ; 104099 ld hl, ReloadMapPart ; useless ld hl, .Function jp CallInSafeGFXMode .Function: decoord 0, 0, AttrMap - ld hl, wBackupAttrMap + ld hl, wScratchAttrMap call CutAndPasteAttrMap decoord 0, 0 - ld hl, wDecompressScratch + ld hl, wScratchTileMap call CutAndPasteTilemap call DelayFrame + di ld a, [rVBK] push af ld a, $1 ld [rVBK], a - ld hl, wBackupAttrMap - call Function1041c1 + ld hl, wScratchAttrMap + call HDMATransfer_NoDI ld a, $0 ld [rVBK], a - ld hl, wDecompressScratch - call Function1041c1 + ld hl, wScratchTileMap + call HDMATransfer_NoDI pop af ld [rVBK], a ei + ret ; 1040d4 -Function1040d4: ; 1040d4 - ld hl, .Function +; XXX + ld hl, .unreferenced_1040da jp CallInSafeGFXMode -.Function: +.unreferenced_1040da ld a, $1 ld [rVBK], a ld a, $3 @@ -132,31 +136,34 @@ Function1040d4: ; 1040d4 ret ; 1040fb -Function1040fb: ; 1040fb - ld hl, .Function +; XXX + ld hl, .unreferenced_104101 jp CallInSafeGFXMode -.Function: +.unreferenced_104101 ld a, $1 ld [rVBK], a ld a, $3 ld [rSVBK], a ld hl, w3_d800 - call Function10419d + call HDMATransferToWRAMBank3 ret ; 104110 -Function104110:: ; 104110 +OpenAndCloseMenu_HDMATransferTileMapAndAttrMap:: ; 104110 ; OpenText ld hl, .Function jp CallInSafeGFXMode .Function: + ; Transfer AttrMap and Tilemap to BGMap + ; Fill vBGAttrs with $00 + ; Fill vBGTiles with " " decoord 0, 0, AttrMap - ld hl, wBackupAttrMap + ld hl, wScratchAttrMap call CutAndPasteAttrMap decoord 0, 0 - ld hl, wDecompressScratch + ld hl, wScratchTileMap call CutAndPasteTilemap call DelayFrame @@ -165,38 +172,42 @@ Function104110:: ; 104110 push af ld a, $1 ld [rVBK], a - ld hl, wBackupAttrMap - call Function1041b7 + ld hl, wScratchAttrMap + call HDMATransfer_Wait123Scanlines_toBGMap ld a, $0 ld [rVBK], a - ld hl, wDecompressScratch - call Function1041b7 + ld hl, wScratchTileMap + call HDMATransfer_Wait123Scanlines_toBGMap pop af ld [rVBK], a ei ret ; 104148 -Function104148: ; 104148 (41:4148) +Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap: ; 104148 (41:4148) ld hl, .Function jp CallInSafeGFXMode .Function: + ; Transfer AttrMap and Tilemap to BGMap + ; Fill vBGAttrs with $00 + ; Fill vBGTiles with $ff decoord 0, 0, AttrMap - ld hl, wBackupAttrMap + ld hl, wScratchAttrMap call CutAndPasteAttrMap ld c, $ff decoord 0, 0 - ld hl, wDecompressScratch + ld hl, wScratchTileMap call CutAndPasteMap + ld a, $1 ld [rVBK], a - ld hl, wBackupAttrMap - call Function1041ad + ld hl, wScratchAttrMap + call HDMATransfer_Wait127Scanlines_toBGMap ld a, $0 ld [rVBK], a - ld hl, wDecompressScratch - call Function1041ad + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines_toBGMap ret ; 104177 @@ -233,8 +244,8 @@ CallInSafeGFXMode: ; 104177 ; 10419d -Function10419d: ; 10419d (41:419d) - call Function10424e +HDMATransferToWRAMBank3: ; 10419d (41:419d) + call _LoadHDMAParameters ld a, $23 ld [hDMATransfer], a @@ -246,60 +257,76 @@ WaitDMATransfer: ; 104a14 jr nz, .loop ret -Function1041ad: ; 1041ad (41:41ad) +HDMATransfer_Wait127Scanlines_toBGMap: ; 1041ad (41:41ad) +; HDMA transfer from hl to [hBGMapAddress] +; hBGMapAddress -> de +; 2 * SCREEN_HEIGHT -> c ld a, [hBGMapAddress + 1] ld d, a ld a, [hBGMapAddress] ld e, a - ld c, $24 - jr Function104209 + ld c, 2 * SCREEN_HEIGHT + jr HDMATransfer_Wait127Scanlines -Function1041b7: ; 1041b7 (41:41b7) +HDMATransfer_Wait123Scanlines_toBGMap: ; 1041b7 (41:41b7) +; HDMA transfer from hl to [hBGMapAddress] ; hBGMapAddress -> de -; $24 -> c +; 2 * SCREEN_HEIGHT -> c ; $7b --> b ld a, [hBGMapAddress + 1] ld d, a ld a, [hBGMapAddress] ld e, a - ld c, $24 - jr asm_104205 + ld c, 2 * SCREEN_HEIGHT + jr HDMATransfer_Wait123Scanlines ; 1041c1 (41:41c1) -Function1041c1: ; 1041c1 +HDMATransfer_NoDI: ; 1041c1 +; HDMA transfer from hl to [hBGMapAddress] +; [hBGMapAddress] --> de +; 2 * SCREEN_HEIGHT --> c ld a, [hBGMapAddress + 1] ld d, a ld a, [hBGMapAddress] ld e, a - ld c, $24 + ld c, 2 * SCREEN_HEIGHT + + ; [rHDMA1, rHDMA2] = hl & $fff0 ld a, h ld [rHDMA1], a ld a, l and $f0 ld [rHDMA2], a + ; [rHDMA3, rHDMA4] = de & $1ff0 ld a, d and $1f ld [rHDMA3], a ld a, e and $f0 ld [rHDMA4], a + ; b = c | %10000000 ld a, c dec c or $80 ld b, a + ; d = $7f - c + 1 ld a, $7f sub c ld d, a + ; while [rLY] >= d: pass .loop1 ld a, [rLY] cp d jr nc, .loop1 + ; while not [rSTAT] & 3: pass .loop2 ld a, [rSTAT] and $3 jr z, .loop2 + ; load the 5th byte of HDMA ld a, b ld [rHDMA5], a + ; wait until rLY advances (c + 1) times ld a, [rLY] inc c ld hl, rLY @@ -314,49 +341,58 @@ Function1041c1: ; 1041c1 ret ; 104205 -asm_104205: +HDMATransfer_Wait123Scanlines: ld b, $7b - jr asm_10420b + jr _continue_HDMATransfer -Function104209: -; LY magic +HDMATransfer_Wait127Scanlines: ld b, $7f -asm_10420b: +_continue_HDMATransfer: +; a lot of waiting around for hardware registers + ; [rHDMA1, rHDMA2] = hl & $fff0 ld a, h ld [rHDMA1], a ld a, l and $f0 ; high nybble ld [rHDMA2], a + ; [rHDMA3, rHDMA4] = de & $1ff0 ld a, d and $1f ; lower 5 bits ld [rHDMA3], a ld a, e and $f0 ; high nybble ld [rHDMA4], a + ; e = c | %10000000 ld a, c dec c - or $80 ; set 7, a + or $80 ld e, a + ; d = b - c + 1 ld a, b sub c ld d, a + ; while [rLY] >= d: pass .ly_loop ld a, [rLY] cp d jr nc, .ly_loop di + ; while [rSTAT] & 3: pass .rstat_loop_1 ld a, [rSTAT] and $3 jr nz, .rstat_loop_1 + ; while not [rSTAT] & 3: pass .rstat_loop_2 ld a, [rSTAT] and $3 jr z, .rstat_loop_2 + ; load the 5th byte of HDMA ld a, e ld [rHDMA5], a + ; wait until rLY advances (c + 1) times ld a, [rLY] inc c ld hl, rLY @@ -374,7 +410,7 @@ asm_10420b: ; 10424e -Function10424e: ; 10424e (41:424e) +_LoadHDMAParameters: ; 10424e (41:424e) ld a, h ld [rHDMA1], a ld a, l @@ -415,7 +451,7 @@ CutAndPasteMap: ; 104265 (41:4265) ; load the original value of c into hl 12 times ld a, [hMapObjectIndexBuffer] - ld b, 12 + ld b, BG_MAP_WIDTH - SCREEN_WIDTH .loop3 ld [hli], a dec b @@ -441,7 +477,7 @@ _Get2bpp:: ; 104284 push bc push hl - ; Copy c tiles of the 2bpp from b:de to wDecompressScratch + ; Copy c tiles of the 2bpp from b:de to wScratchTileMap ld a, b ; bank ld l, c ; number of tiles ld h, $0 @@ -452,7 +488,7 @@ endr ld c, l ld h, d ; address ld l, e - ld de, wDecompressScratch + ld de, wScratchTileMap call FarCopyBytes pop hl @@ -464,8 +500,8 @@ endr ld d, h ld e, l - ld hl, wDecompressScratch - call Function104209 + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines ; restore the previous bank pop af @@ -519,7 +555,7 @@ endr ld b, h ld h, d ld l, e - ld de, wDecompressScratch + ld de, wScratchTileMap call FarCopyBytesDouble_DoubleBankSwitch pop hl @@ -531,41 +567,41 @@ endr ld d, h ld e, l - ld hl, wDecompressScratch - call Function104209 + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines pop af ld [rSVBK], a ret ; 104303 -Function104303: ; 104303 - ld hl, Function104309 +HDMATransfer_OnlyTopFourRows: ; 104303 + ld hl, .Function jp CallInSafeGFXMode ; 104309 -Function104309: - ld hl, wDecompressScratch +.Function: + ld hl, wScratchTileMap decoord 0, 0 - call Function10433a - ld hl, wDecompressScratch + $80 + call .Copy + ld hl, wScratchTileMap + $80 decoord 0, 0, AttrMap - call Function10433a + call .Copy ld a, $1 ld [rVBK], a ld c, $8 - ld hl, wDecompressScratch + $80 + ld hl, wScratchTileMap + $80 debgcoord 0, 0, VBGMap1 - call Function104209 + call HDMATransfer_Wait127Scanlines ld a, $0 ld [rVBK], a ld c, $8 - ld hl, wDecompressScratch + ld hl, wScratchTileMap debgcoord 0, 0, VBGMap1 - call Function104209 + call HDMATransfer_Wait127Scanlines ret -Function10433a: ; 10433a (41:433a) +.Copy: ; 10433a (41:433a) ld b, 4 .outer_loop ld c, SCREEN_WIDTH @@ -576,7 +612,7 @@ Function10433a: ; 10433a (41:433a) dec c jr nz, .inner_loop ld a, l - add $20 - SCREEN_WIDTH + add BG_MAP_WIDTH - SCREEN_WIDTH ld l, a ld a, h adc $0 diff --git a/misc/mobile_12.asm b/misc/mobile_12.asm index dd0f63135..c02ae205f 100755 --- a/misc/mobile_12.asm +++ b/misc/mobile_12.asm @@ -359,7 +359,7 @@ Function48304: ; 48304 (12:4304) ld a, $29 .asm_4833f ld [wMenuScrollPosition], a - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap .asm_48348 call ScrollingMenu ld de, $629 @@ -385,7 +385,7 @@ Function48304: ; 48304 (12:4304) ld [wd003], a .asm_48377 call Function48187 - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap jp Function4840c Function48383: ; 48383 (12:4383) diff --git a/misc/mobile_22.asm b/misc/mobile_22.asm index 3e2a9f30e..b14f0208d 100644 --- a/misc/mobile_22.asm +++ b/misc/mobile_22.asm @@ -2201,7 +2201,7 @@ Function89d75: ; 89d75 (22:5d75) push hl call Function8923c call _hl_ - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap pop hl jr asm_89d90 diff --git a/misc/mobile_40.asm b/misc/mobile_40.asm index c2a6c20b9..bdd9cee6b 100644 --- a/misc/mobile_40.asm +++ b/misc/mobile_40.asm @@ -202,7 +202,7 @@ Function100144: ; 100144 ret z res 2, [hl] res 6, [hl] - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 ret ; 100163 @@ -445,12 +445,12 @@ Function100301: ; 100301 ; 100320 Function100320: ; 100320 - callba Function104099 + callba Mobile_ReloadMapPart ret ; 100327 Function100327: ; 100327 - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 ret ; 100327 @@ -1821,7 +1821,7 @@ Function100b45: ; 100b45 call Mobile_SetOverworldDelay callba MobileMenuJoypad push bc - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 call Function100e2d pop bc jr c, .asm_100b6b @@ -1882,7 +1882,7 @@ MobileMoveSelectionScreen: ; 100b9f call Mobile_SetOverworldDelay callba MobileMenuJoypad push bc - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 call Function100e2d pop bc jr c, .b_button @@ -2016,7 +2016,7 @@ Mobile_PartyMenuSelect: ; 100cb5 callba MobileMenuJoypad push bc callba PlaySpriteAnimations - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 call Function100dfd pop bc jr c, .done @@ -2070,7 +2070,7 @@ MobileBattleMonMenu: ; 100d22 callba MobileMenuJoypad push bc callba PlaySpriteAnimations - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 call Function100dfd pop bc jr c, .asm_100d54 @@ -3074,7 +3074,7 @@ Function1013c0: ; 1013c0 ; 1013d6 Function1013d6: ; 1013d6 - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 ret ; 1013dd @@ -5182,7 +5182,7 @@ Function10224b: ; 10224b .asm_10225e res 1, [hl] res 2, [hl] - callba Function104099 + callba Mobile_ReloadMapPart scf ret ; 10226a @@ -6809,7 +6809,7 @@ Function102d9a: ; 102d9a hlcoord 0, 0, AttrMap ld bc, SCREEN_WIDTH * SCREEN_HEIGHT call ByteFill - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 ret ; 102db7 @@ -7390,7 +7390,7 @@ Function103309: ; 103309 ld [wd1ee], a call Function1034be call UpdateSprites - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 ld a, $01 ld [wd1f0], a call Function10339a @@ -7404,7 +7404,7 @@ Function103362: ; 103362 call Function1033af call Function10339a call Function10342c - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 ld a, [Buffer2] bit 7, a jr z, .asm_103362 diff --git a/misc/mobile_42.asm b/misc/mobile_42.asm index af7953c76..d94afeaad 100644 --- a/misc/mobile_42.asm +++ b/misc/mobile_42.asm @@ -445,7 +445,7 @@ Function1082db: ; 1082db .loop callba PlaySpriteAnimations callba SetUpPokeAnim - callba Function10402d + callba HDMATransferTileMapToWRAMBank3 jr nc, .loop ret ; 1082f0 diff --git a/misc/mobile_45.asm b/misc/mobile_45.asm index 532a8c8cc..0b4bb7017 100644 --- a/misc/mobile_45.asm +++ b/misc/mobile_45.asm @@ -7380,7 +7380,7 @@ Function117a94: ; 0x117a94 call ClearBGPalettes call ClearSprites callba Function172e78 - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 ret ; 0x117ab4 @@ -7401,7 +7401,7 @@ Function117acd: ; 0x117acd bit 7, a jr nz, .asm_117ae2 call Function117ae9 - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 jr Function117acd .asm_117ae2 diff --git a/misc/mobile_5f.asm b/misc/mobile_5f.asm index 415ff7e38..905e84372 100644 --- a/misc/mobile_5f.asm +++ b/misc/mobile_5f.asm @@ -4647,7 +4647,7 @@ Function17f555: ; 17f555 ld a, [wc303] bit 7, a jr nz, .quit - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 jr .loop .quit @@ -4716,7 +4716,7 @@ Function17f5c3: ; 17f5c3 Function17f5d2: ; 17f5d2 call Function17f5e4 - callba Function104000 + callba HDMATransferAttrMapAndTileMapToWRAMBank3 call SetPalettes ld a, $1 ld [wc303], a diff --git a/misc/mobile_menu.asm b/misc/mobile_menu.asm index d9fd3dd34..75fc58f5f 100755 --- a/misc/mobile_menu.asm +++ b/misc/mobile_menu.asm @@ -280,7 +280,7 @@ Function4a149: ; 4a149 (12:6149) call ClearBox hlcoord 1, 14 call PlaceString - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap call SetPalettes call StaticMenuJoypad ld hl, wMenuCursorY @@ -403,7 +403,7 @@ Function4a28a: ; 4a28a (12:628a) hlcoord 14, 1 ld de, String_4a34b call PlaceString - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap call Function4a118 call ScrollingMenuJoypad push af @@ -432,7 +432,7 @@ Function4a28a: ; 4a28a (12:628a) ld b, 3 ld c, 4 call TextBox - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap ld hl, DeletePassword_YesNo_MenuDataHeader call LoadMenuDataHeader call VerticalMenu @@ -455,7 +455,7 @@ Function4a28a: ; 4a28a (12:628a) call ExitMenu .quit call Call_ExitMenu - callba Function104148 + callba Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap xor a ret ; 4a346 (12:6346) |