diff options
author | xCrystal <rgr.crystal@gmail.com> | 2018-07-17 13:57:07 +0200 |
---|---|---|
committer | xCrystal <rgr.crystal@gmail.com> | 2018-07-17 13:57:07 +0200 |
commit | 80a5aa82a0ab5b786ceaf1edb2e05375fa89d7c4 (patch) | |
tree | 45c0f52d30b1f08c20047a3d2d75a4c0412b6ee1 /src | |
parent | 291ff5bebffdbe39281732d443043b244bf1ffb0 (diff) |
Finish disassembling home.asm
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/bank01.asm | 6 | ||||
-rw-r--r-- | src/engine/home.asm | 290 | ||||
-rw-r--r-- | src/wram.asm | 56 |
3 files changed, 336 insertions, 16 deletions
diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm index 09e6efd..9ca9c10 100644 --- a/src/engine/bank01.asm +++ b/src/engine/bank01.asm @@ -345,7 +345,7 @@ DuelMainInterface: ; 426d (1:426d) jp z, $6911 ; DUELIST_TYPE_AI_OPP xor a - ld [wVBlankCtr], a + ld [wVBlankCounter], a ld [wcbf9], a ldtx hl, DuelistIsThinkingText call DrawWideTextBox_PrintTextNoDelay @@ -3903,7 +3903,7 @@ AIMakeDecision: ; 67be (1:67be) jr nz, .skip_delay .delay_loop call DoFrame - ld a, [wVBlankCtr] + ld a, [wVBlankCounter] cp $3c jr c, .delay_loop @@ -3920,7 +3920,7 @@ AIMakeDecision: ; 67be (1:67be) ld a, [wcbf9] or a ret nz - ld [wVBlankCtr], a + ld [wVBlankCounter], a ldtx hl, DuelistIsThinkingText call DrawWideTextBox_PrintTextNoDelay or a diff --git a/src/engine/home.asm b/src/engine/home.asm index ddace8f..948d810 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -99,7 +99,7 @@ VBlankHandler: ; 019b (0:019b) ei call wVBlankFunctionTrampoline call FlushPalettes - ld hl, wVBlankCtr + ld hl, wVBlankCounter inc [hl] ld hl, wReentrancyFlag res 0, [hl] @@ -193,7 +193,7 @@ SetupTimer: ; 0241 (0:0241) ld [rTMA], a ld a, TAC_16384_HZ ld [rTAC], a - ld a, $7 + ld a, TAC_16384_HZ | 1 << TAC_ON ld [rTAC], a ret @@ -210,15 +210,15 @@ WaitForVBlank: ; 0264 (0:0264) push hl ld a, [wLCDC] bit LCDC_ON, a - jr z, .asm_275 - ld hl, wVBlankCtr + jr z, .lcd_off + ld hl, wVBlankCounter ld a, [hl] -.asm_270 +.wait_vblank halt nop cp [hl] - jr z, .asm_270 -.asm_275 + jr z, .wait_vblank +.lcd_off pop hl ret @@ -11285,7 +11285,120 @@ Func_3cb4: ; 3cb4 (0:3cb4) ret ; 0x3cc4 - INCROM $3cc4, $3d72 +; refresh sprites? +Func_3cc4: ; 3cc4 (0:3cc4) + ldh a, [hBankROM] + push af + ld a, [wd5d6] + call BankswitchHome + ld a, [wd5d1] + cp $f0 + ld a, $00 + jr c, .asm_3cd7 + dec a +.asm_3cd7 + ld [wd5d4], a + ld a, [wd5d2] + cp $f0 + ld a, $00 + jr c, .asm_3ce4 + dec a +.asm_3ce4 + ld [wd5d5], a + ld a, [hli] + or a + jp z, .done + ld c, a +.asm_3ced + push bc + push hl + ld b, $00 + bit 7, [hl] + jr z, .asm_3cf6 + dec b +.asm_3cf6 + ld a, [wd5d0] + bit 6, a + jr z, .asm_3d10 + ld a, [hl] + add $08 + ld c, a + ld a, $00 + adc b + ld b, a + ld a, [wd5d2] + sub c + ld e, a + ld a, [wd5d5] + sbc b + jr .asm_3d19 +.asm_3d10 + ld a, [wd5d2] + add [hl] + ld e, a + ld a, [wd5d5] + adc b +.asm_3d19 + or a + jr nz, .asm_3d64 + inc hl + ld b, $00 + bit 7, [hl] + jr z, .asm_3d24 + dec b +.asm_3d24 + ld a, [wd5d0] + bit 5, a + jr z, .asm_3d3e + ld a, [hl] + add $08 + ld c, a + ld a, $00 + adc b + ld b, a + ld a, [wd5d1] + sub c + ld d, a + ld a, [wd5d4] + sbc b + jr .asm_3d47 +.asm_3d3e + ld a, [wd5d1] + add [hl] + ld d, a + ld a, [wd5d4] + adc b +.asm_3d47 + or a + jr nz, .asm_3d64 + inc hl + ld a, [wd5d3] + add [hl] + ld c, a + inc hl + ld a, [wd5d0] + add [hl] + and $17 + ld b, a + ld a, [wd5d0] + xor [hl] + and $e0 + or b + ld b, a + inc hl + call SetOneObjectAttributes +.asm_3d64 + pop hl + ld bc, $4 + add hl, bc + pop bc + dec c + jr nz, .asm_3ced +.done + pop af + call BankswitchHome + ret +; 0x3d72 Func_3d72: ; 3d72 (0:3d72) ldh a, [hBankROM] @@ -11430,7 +11543,166 @@ Func_3e2a: ; 3e2a (0:3e2a) jr Func_3e17 ; 0x3e31 - INCROM $3e31, $3f5a +Func_3e31: ; 3e31 (0:3e31) + ldh a, [hBankROM] + push af + call Func_3cb4 + ld a, $20 + call BankswitchHome + call $44d8 + pop af + call BankswitchHome + ret +; 0x3e44 + +; something window scroll +Func_3e44: ; 3e44 (0:3e44) + push af + push hl + push bc + push de + ld hl, wd657 + bit 0, [hl] + jr nz, .done + set 0, [hl] + ld b, $00 + ld hl, wd658 + ld c, [hl] + inc [hl] + ld hl, wd64b + add hl, bc + ld a, [hl] + ldh [rWX], a + ld hl, rLCDC + cp $a7 + jr c, .disable_sprites + set 1, [hl] ; enable sprites + jr .asm_3e6c +.disable_sprites + res 1, [hl] ; disable sprites +.asm_3e6c + ld hl, wd651 + add hl, bc + ld a, [hl] + cp $8f + jr c, .asm_3e9a + ld a, [wd665] + or a + jr z, .asm_3e93 + ld hl, wd659 + ld de, wd64b + ld bc, $6 + call CopyDataHLtoDE + ld hl, wd65f + ld de, wd651 + ld bc, $6 + call CopyDataHLtoDE +.asm_3e93 + xor a + ld [wd665], a + ld [wd658], a +.asm_3e9a + ldh [rLYC], a + ld hl, wd657 + res 0, [hl] +.done + pop de + pop bc + pop hl + pop af + ret +; 0x3ea6 + +; apply background scroll for lines 0 to 96 using the values at BGScrollData +; skip if wApplyBGScroll is non-0 +ApplyBackgroundScroll: ; 3ea6 (0:3ea6) + push af + push hl + call DisableInt_LYCoincidence + ld hl, rSTAT + res 2, [hl] ; reset coincidence flag + ei + ld hl, wApplyBGScroll + ld a, [hl] + or a + jr nz, .done + inc [hl] + push bc + push de + xor a + ld [wNextScrollLY], a +.ly_loop + ld a, [wNextScrollLY] + ld b, a +.wait_ly + ldh a, [rLY] + cp $60 + jr nc, .ly_over_0x60 + cp b ; already hit LY=b? + jr c, .wait_ly + call GetNextBackgroundScroll + ld hl, rSTAT +.wait_hblank_or_vblank + bit 1, [hl] + jr nz, .wait_hblank_or_vblank + ldh [rSCX], a + ldh a, [rLY] + inc a + ld [wNextScrollLY], a + jr .ly_loop +.ly_over_0x60 + xor a + ldh [rSCX], a + ld a, $00 + ldh [rLYC], a + call GetNextBackgroundScroll + ldh [hSCX], a + pop de + pop bc + xor a + ld [wApplyBGScroll], a + call EnableInt_LYCoincidence +.done + pop hl + pop af + ret +; 0x3ef8 + +BGScrollData: ; 3ef8 (0:3ef8) + db 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3 + db 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0 + db 0, -1, -1, -1, -2, -2, -2, -3, -3, -3, -4, -4, -4, -4, -4, -4 + db -5, -4, -4, -4, -4, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1 +; 3f38 + +; x = BGScrollData[(wVBlankCounter + a) & $3f] +; return, in register a, x rotated right [wBGScrollMod]-1 times (max 3 times) +GetNextBackgroundScroll: ; 3f38 (0:3f38) + ld hl, wVBlankCounter + add [hl] + and $3f + ld c, a + ld b, $00 + ld hl, BGScrollData + add hl, bc + ld a, [wBGScrollMod] + ld c, a + ld a, [hl] + dec c + jr z, .done + dec c + jr z, .halve + dec c + jr z, .quarter +; effectively zero + sra a +.quarter + sra a +.halve + sra a +.done + ret +; 0x3f5a EnableInt_LYCoincidence: ; 3f5a (0:3f5a) push hl diff --git a/src/wram.asm b/src/wram.asm index 992f157..9f8acc7 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -404,7 +404,7 @@ wTileMapFill:: ; cab6 wIE:: ; cab7 ds $1 -wVBlankCtr:: ; cab8 +wVBlankCounter:: ; cab8 ds $1 ds $1 @@ -1849,12 +1849,26 @@ wSpriteAnimBuffer:: ; d4d0 sprite_anim_struct wSprite15 sprite_anim_struct wSprite16 - ds $3 +wd5d0:: ; d5d0 + ds $1 + +wd5d1:: ; d5d1 + ds $1 + +wd5d2:: ; d5d2 + ds $1 wd5d3:: ; d5d3 ds $1 - ds $3 +wd5d4:: ; d5d4 + ds $1 + +wd5d5:: ; d5d5 + ds $1 + +wd5d6:: ; d5d6 + ds $1 wd5d7:: ; d5d7 ds $1 @@ -1904,7 +1918,41 @@ wd635:: ; d635 wd636:: ; d635 ds $1 - ds $32 + ds $14 + +; wd64b to wd665 used by Func_3e44 +wd64b:: ; d64b + ds $6 + +wd651:: ; d651 + ds $6 + +wd657:: ; d657 + ds $1 + +wd658:: ; d658 + ds $1 + +wd659:: ; d659 + ds $6 + +wd65f:: ; d65f + ds $6 + +wd665:: ; d665 + ds $1 + +; used by GetNextBackgroundScroll +wBGScrollMod:: ; d666 + ds $1 + +; used by ApplyBackgroundScroll +wApplyBGScroll:: ; d667 + ds $1 + +; used by ApplyBackgroundScroll +wNextScrollLY:: ; d668 + ds $1 ; which BoosterPack_* corresponds to the booster pack that the player is opening wBoosterPackID:: ; d669 |