diff options
author | Tauwasser <Tauwasser@tauwasser.eu> | 2018-06-12 23:02:30 +0200 |
---|---|---|
committer | Tauwasser <Tauwasser@tauwasser.eu> | 2018-06-12 23:04:14 +0200 |
commit | c7acfb34523c0fa10b4f002bce229a15b91e580f (patch) | |
tree | d6c2b854b7ccdf3968625c23e5094adf999b9b2e /home/overworld.asm | |
parent | b4596aafbece0cffc5482e93b5b43cfdc8d2daa8 (diff) |
home: disassemble more map/overworld functions
Signed-off-by: Tauwasser <Tauwasser@tauwasser.eu>
Diffstat (limited to 'home/overworld.asm')
-rw-r--r-- | home/overworld.asm | 135 |
1 files changed, 133 insertions, 2 deletions
diff --git a/home/overworld.asm b/home/overworld.asm index 8ea66ca..bd0cc4c 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -42,8 +42,139 @@ CheckStartmenuSelectHook: dec a ret -Function2c4a:: -; TODO +Function2c4a: ; 2c4a (0:2c4a) +; copy of Function2ba8 +.loop + call Function2c5a + and a + ld a, [$cb6e] + bit 5, a + ret z + bit 6, a + jr z, .loop + scf + ret + +Function2c5a: ; 2c5a (0:2c5a) + ldh a, [hROMBank] + push af + ld a, BANK(Function50b9) + call Bankswitch + call Function50b9 + call Function_18a0 + ld a, BANK(Functiond6e4) + call Bankswitch + call Functiond6e4 + ld a, BANK(_UpdateSprites) + call Bankswitch + call _UpdateSprites + call DelayFrame + call UpdateToolgear + ld hl, wToolgearFlags + set 2, [hl] + call DelayFrame + pop af + call Bankswitch + ret + +UpdateAndTransferToolgear: ; 2c8b (0:2c8b) + call DelayFrame + call UpdateToolgear + ld hl, wToolgearFlags + set 2, [hl] ; ; transfer toolgear to window + call DelayFrame + ret + +ScheduleNorthRowRedraw: ; 2c9a (0:2c9a) + coord hl, 0, 0 + call CopyToRedrawRowOrColumnSrcTiles + ld a, [wBGMapAnchor] + ldh [hRedrawRowOrColumnDest], a + ld a, [wBGMapAnchor + 1] + ldh [hRedrawRowOrColumnDest + 1], a + ld a, REDRAW_ROW + ldh [hRedrawRowOrColumnMode], a + ret + +ScheduleSouthRowRedraw: ; 2caf (0:2caf) + coord hl, 0, SCREEN_HEIGHT - 2 + call CopyToRedrawRowOrColumnSrcTiles + ld a, [wBGMapAnchor] + ld l, a + ld a, [wBGMapAnchor + 1] + ld h, a + ld bc, BG_MAP_WIDTH * (SCREEN_HEIGHT - 2) + add hl, bc + ; the following 4 lines wrap us from bottom to top if necessary + ld a, h + and HIGH(vBGMap1 - vBGMap0 - $01) + or HIGH(vBGMap0) + ldh [hRedrawRowOrColumnDest + 1], a + ld a, l + ldh [hRedrawRowOrColumnDest], a + ld a, REDRAW_ROW + ldh [hRedrawRowOrColumnMode], a + ret + +ScheduleEastColumnRedraw: ; 2cd0 (0:2cd0) + coord hl, SCREEN_WIDTH - 2, 0 + call ScheduleColumnRedrawHelper + ld a, [wBGMapAnchor] + ld c, a + and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits + ld b, a + ld a, c + add SCREEN_WIDTH + and BG_MAP_WIDTH - 1 ; mask lower address bits + or b + ldh [hRedrawRowOrColumnDest], a + ld a, [wBGMapAnchor + 1] + ldh [hRedrawRowOrColumnDest + 1], a + ld a, REDRAW_COL + ldh [hRedrawRowOrColumnMode], a + ret + +ScheduleWestColumnRedraw: ; 2cef (0:2cef) + coord hl, 0, 0 + call ScheduleColumnRedrawHelper + ld a, [wBGMapAnchor] + ldh [hRedrawRowOrColumnDest], a + ld a, [wBGMapAnchor + 1] + ldh [hRedrawRowOrColumnDest + 1], a + ld a, REDRAW_COL + ldh [hRedrawRowOrColumnMode], a + ret + +CopyToRedrawRowOrColumnSrcTiles: ; 2d04 (0:2d04) + ld de, wRedrawRowOrColumnSrcTiles + ld c, 2 * SCREEN_WIDTH +.loop + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop + ret + +ScheduleColumnRedrawHelper: ; 2d10 (0:2d10) + ld de, wRedrawRowOrColumnSrcTiles + ld c, SCREEN_HEIGHT +.loop + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld a, SCREEN_WIDTH - 1 + add l + ld l, a + jr nc, .noCarry + inc h +.noCarry + dec c + jr nz, .loop + ret if DEBUG SECTION "Install StartMenu Hook Function", ROM0[$35EC] |