diff options
Diffstat (limited to 'src/engine')
-rwxr-xr-x | src/engine/bank1.asm | 251 | ||||
-rwxr-xr-x | src/engine/bank1c.asm | 314 | ||||
-rwxr-xr-x | src/engine/bank2.asm | 791 | ||||
-rwxr-xr-x | src/engine/bank20.asm | 133 | ||||
-rwxr-xr-x | src/engine/bank3.asm | 1457 | ||||
-rwxr-xr-x | src/engine/bank4.asm | 1147 | ||||
-rwxr-xr-x | src/engine/bank6.asm | 175 | ||||
-rwxr-xr-x | src/engine/bank7.asm | 314 | ||||
-rwxr-xr-x | src/engine/home.asm | 4851 |
9 files changed, 9433 insertions, 0 deletions
diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm new file mode 100755 index 0000000..c29a4c4 --- /dev/null +++ b/src/engine/bank1.asm @@ -0,0 +1,251 @@ +Func_4000: ; 4000 (1:4000) + di + ld sp, $e000 + call ResetSerial + call EnableInt_VBlank + call EnableInt_Timer + call EnableExtRAM + ld a, [$a006] + ld [$ce47], a + ld a, [$a009] + ld [$ccf2], a + call DisableExtRAM + ld a, $1 + ld [$cd0d], a + ei + farcall Func_1a6cc + ld a, [$ff90] + cp $3 + jr z, .asm_4035 + farcall Func_126d1 + jr Func_4000 +.asm_4035 + call Func_405a + call Func_04a2 + ld hl, $00a2 + call Func_2af0 + jr c, .asm_404d + call EnableExtRAM + xor a + ld [$a000], a + call DisableExtRAM +.asm_404d + jp Reset + +Func_4050: ; 4050 (1:4050) + farcall Func_1996e + ld a, $1 + ld [$cd0d], a + ret + +Func_405a: ; 405a (1:405a) +INCBIN "baserom.gbc",$405a,$406f - $405a + +Func_406f: ; 406f (1:406f) +INCBIN "baserom.gbc",$406f,$409f - $406f + +; this function begins the duel after the opponent's +; graphics, name and deck have been introduced +Duel_Start: ; 409f (1:409f) + ld a, $c2 + ld [$ff97], a + ld a, $0 + ld [$c2f1], a + ld a, [$cc19] + ld [wOpponentDeck], a + call $6793 + call Func_1c72 + call Duel_LoadDecks + call Func_1c72 + jr .asm_40ca + + ld a, MUSIC_DUELTHEME1 + ld [wDuelTheme], a + ld hl, $cc16 + xor a + ld [hli], a + ld [hl], a + ld [wIsPracticeDuel], a + +.asm_40ca + ld hl, [sp+$0] + ld a, l + ld [$cbe5], a + ld a, h + ld [$cbe6], a + xor a + ld [$cbc6], a + call $420b + ld a, [$cc18] + ld [$cc08], a + call $70aa + ld a, [wDuelTheme] + call PlaySong + call $4b60 + ret c + +; the loop returns here after every turn switch +.mainDuelLoop + xor a + ld [$cbc6], a + call $35e6 + call $54c8 + call $4225 + call $0f58 + ld a, [$cc07] + or a + jr nz, .asm_4136 + call $35fa + call $6baf + call $3b31 + call $0f58 + ld a, [$cc07] + or a + jr nz, .asm_4136 + ld hl, $cc06 + inc [hl] + ld a, [$cc09] + cp $80 + jr z, .asm_4126 +.asm_4121 + call Func_1c72 + jr .mainDuelLoop + +.asm_4126 + ld a, [wIsPracticeDuel] + or a + jr z, .asm_4121 + ld a, [hl] + cp $f + jr c, .asm_4121 + xor a + ld [$d0c3], a + ret + +.asm_4136 + call $5990 + call Func_04a2 + ld a, $3 + call $2167 + ld hl, $0076 + call Func_2aab + call Func_04a2 + ld a, [$ff97] + push af + ld a, $c2 + ld [$ff97], a + call $4a97 + call $4ad6 + pop af + ld [$ff97], a + call $3b21 + ld a, [$cc07] + cp $1 + jr z, .asm_4171 + cp $2 + jr z, .asm_4184 + ld a, $5f + ld c, $1a + ld hl, $0077 + jr .asm_4196 + +.asm_4171 + ld a, [$ff97] + cp $c2 + jr nz, .asm_418a +.asm_4177 + xor a + ld [$d0c3], a + ld a, $5d + ld c, $18 + ld hl, $0078 + jr .asm_4196 + +.asm_4184 + ld a, [$ff97] + cp $c2 + jr nz, .asm_4177 + +.asm_418a + ld a, $1 + ld [$d0c3], a + ld a, $5e + ld c, $19 + ld hl, $0079 + +.asm_4196 + call $3b6a + ld a, c + call PlaySong + ld a, $c3 + ld [$ff97], a + call Func_2a59 + call EnableLCD +.asm_41a7 + call Func_053f + call Func_378a + or a + jr nz, .asm_41a7 + ld a, [$cc07] + cp $3 + jr z, .asm_41c8 + call Func_39fc + call $2aae + call $3b31 + call ResetSerial + ld a, $c2 + ld [$ff97], a + ret + +.asm_41c8 + call $2aae + call $3b31 + ld a, [wDuelTheme] + call PlaySong + ld hl, $007a + call Func_2aab + ld a, $1 + ld [$cc08], a + call $70aa + ld a, [$cc09] + cp $1 + jr z, .asm_41f3 + ld a, $c2 + ld [$ff97], a + call $4b60 + jp $40ee + +.asm_41f3 + call $0f58 + ld h, $c2 + ld a, [wSerialOp] + cp $29 + jr z, .asm_4201 + ld h, $c3 + +.asm_4201 + ld a, h + ld [$ff97], a + call $4b60 + jp nc, $40ee + ret +; 0x420b + +INCBIN "baserom.gbc",$420b,$5aeb - $420b + +Func_5aeb: ; 5aeb (1:5aeb) +INCBIN "baserom.gbc",$5aeb,$6785 - $5aeb + +Func_6785: ; 6785 (1:6785) +INCBIN "baserom.gbc",$6785,$7354 - $6785 + +BuildVersion: ; 7354 (1:7354) + db "VER 12/20 09:36",TX_END + +INCBIN "baserom.gbc",$7364,$7571 - $7364 + +Func_7571: ; 7571 (1:7571) +INCBIN "baserom.gbc",$7571,$758f - $7571 + +Func_758f: ; 758f (1:758f) +INCBIN "baserom.gbc",$758f,$8000 - $758f diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm new file mode 100755 index 0000000..e11aaef --- /dev/null +++ b/src/engine/bank1c.asm @@ -0,0 +1,314 @@ +Func_70000: ; 70000 (1c:4000) + ld a, [$cab4] + cp $1 + ret nz + ld b, $1 + ld a, $22 + farcall Func_ca6c + or a + jr z, .asm_70013 + ld b, $2 +.asm_70013 + ld a, b + call Func_70044 + ret + +Func_70018: ; 70018 (1c:4018) + ld a, [$cab4] + cp $1 + ret nz + ld a, $0 + call Func_70044 + ret +; 0x70024 + +INCBIN "baserom.gbc",$70024,$70044 - $70024 + +Func_70044: ; 70044 (1c:4044) + push hl + push bc + add a + ld c, a + add a + add c + ld c, a + ld b, $0 + ld hl, Unknown_70057 + add hl, bc + call Func_70082 + pop bc + pop hl + ret + +Unknown_70057: ; 70057 (1c:4057) +INCBIN "baserom.gbc",$70057,$70082 - $70057 + +Func_70082: ; 70082 (1c:4082) + ld a, [$cab4] + cp $1 + ret nz + push hl + push bc + ld a, [hli] + push hl + ld h, [hl] + ld l, a + call Func_700a3 + pop hl + inc hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld h, [hl] + ld l, a + call Func_700fe + call Func_701c0 + pop bc + pop hl + ret + +Func_700a3: ; 700a3 (1c:40a3) + push hl + push bc + push de + push hl + call Func_70136 + pop hl + push hl + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $8800 + call Func_701e9 + call Func_701fe + ld hl, SGB_700de + call Func_70177 + pop hl + ld de, $0002 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] + or [hl] + jr z, .asm_700da + call Func_70136 + dec hl + ld de, $8800 + call Func_701e9 + ld hl, SGB_700ee + call Func_70177 +.asm_700da + pop de + pop bc + pop hl + ret + +; CHR_TRN: tiles $00-$7F, BG (border) tiles (from SNES $000-$FFF) +SGB_700de: ; 700de (1c:40de) +INCBIN "baserom.gbc",$700de,$700ee - $700de + +; CHR_TRN: tiles $80-$FF, BG (border) tiles (from SNES $000-$FFF) +SGB_700ee: ; 700ee (1c:40ee) +INCBIN "baserom.gbc",$700ee,$700fe - $700ee + +Func_700fe: ; 700fe (1c:40fe) + push hl + push bc + push de + push hl + push de + push hl + call Func_70136 + pop hl + ld de, $8800 + call Func_701e9 + pop hl + ld de, $9000 + call Func_701e9 + call Func_701fe + pop hl + call Func_70214 + ld hl, SGB_70126 + call Func_70177 + pop de + pop bc + pop hl + ret + +; PCT_TRN: read tile map & palette data into VRAM (from SNES $000-$87F) +SGB_70126: ; 70126 (1c:4126) +INCBIN "baserom.gbc",$70126,$70136 - $70126 + +Func_70136: ; 70136 (1c:4136) + push hl + push bc + push de + ld a, [$ff92] + ld [$d41d], a + ld a, [$ff93] + ld [$d41e], a + ld a, [$cabc] + ld [$d41f], a + ld a, [$cabb] + ld [$d420], a + di + ld hl, SGB_MASK_EN_ON_701a0 + call SendSGB + call DisableLCD + ld a, [$cabb] + and $41 + or $1 + ld [$cabb], a + ld a, $e4 + ld [rBGP], a + call Func_040c + xor a + ld [hSCX], a + ld [rSCX], a + ld [hSCY], a + ld [rSCY], a + pop de + pop bc + pop hl + ret + +Func_70177: ; 70177 (1c:4177) + push hl + push bc + push de + push hl + call EnableLCD + pop hl + call SendSGB + ld a, [$d41d] + ld [hSCX], a + ld a, [$d41e] + ld [hSCY], a + ld a, [$d41f] + call Func_040c + ld a, [$d420] + ld [$cabb], a + call DisableLCD + ei + pop de + pop bc + pop hl + ret + +; MASK_EN on +SGB_MASK_EN_ON_701a0: ; 701a0 (1c:41a0) +INCBIN "baserom.gbc",$701a0,$701b0 - $701a0 + +; MASK_EN off +SGB_MASK_EN_OFF_701b0: ; 701b0 (1c:41b0) +INCBIN "baserom.gbc",$701b0,$701c0 - $701b0 + +Func_701c0: ; 701c0 (1c:41c0) + push hl + push bc + call DisableLCD + xor a + ld c, $10 + ld hl, $9000 +.asm_701cb + ld [hli], a + dec c + jr nz, .asm_701cb + ld a, [$cab6] + push af + xor a + ld [$cab6], a + call Func_04a2 + pop af + ld [$cab6], a + di + ld hl, SGB_MASK_EN_OFF_701b0 + call SendSGB + ei + pop bc + pop hl + ret + +Func_701e9: ; 701e9 (1c:41e9) + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + or c + ret z + push de + push bc + ld e, l + ld d, h + ld b, $c0 + call Func_08bf + pop bc + pop de + call Func_08de + ret + +Func_701fe: ; 701fe (1c:41fe) + ld hl, $9800 + ld de, $000c + ld a, $80 + ld c, $d +.asm_70208 + ld b, $14 +.asm_7020a + ld [hli], a + inc a + dec b + jr nz, .asm_7020a + add hl, de + dec c + jr nz, .asm_70208 + ret + +Func_70214: ; 70214 (1c:4214) + ld a, l + cp $dc + ret nz + ld a, h + cp $49 + ret nz + ld hl, Unknown_7024a + ld a, $10 + farcall Func_ca6c + ld c, $8 +.asm_70227 + push bc + push hl + push af + bit 7, a + jr z, .asm_7023e + ld c, $9 +.asm_70230 + push bc + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + pop bc + dec c + jr nz, .asm_70230 +.asm_7023e + pop af + rlca + pop hl + ld bc, $0024 + add hl, bc + pop bc + dec c + jr nz, .asm_70227 + ret + +Unknown_7024a: ; 7024a (1c:424a) +INCBIN "baserom.gbc",$7024a,$74000 - $7024a diff --git a/src/engine/bank2.asm b/src/engine/bank2.asm new file mode 100755 index 0000000..1c82b47 --- /dev/null +++ b/src/engine/bank2.asm @@ -0,0 +1,791 @@ +INCBIN "baserom.gbc",$8000,$8cd4 - $8000 + +Func_8cd4: ; 8cd4 (2:4cd4) + push bc + call EnableExtRAM + ld b, $3c +.asm_8cda + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_8cda + xor a + ld [hl], a + call DisableExtRAM + pop bc + ret +; 0x8ce7 + +INCBIN "baserom.gbc",$8ce7,$8cf9 - $8ce7 + +Func_8cf9: ; 8cf9 (2:4cf9) + call EnableExtRAM + xor a + ld hl, $b703 + ld [hli], a + inc a + ld [hli], a + ld [hli], a + ld [hl], a + ld [$b701], a + call DisableExtRAM +Func_8d0b: ; 8d0b (2:4d0b) + ld hl, Unknown_8d15 + ld de, $9380 + call Func_92ad + ret + +Unknown_8d15: ; 8d15 (2:4d15) +INCBIN "baserom.gbc",$8d15,$8d56 - $8d15 + +Func_8d56: ; 8d56 (2:4d56) + xor a + ld [$cab6], a + call Func_04a2 + call Func_099c + ld a, $1 + ld [$cac0], a + call Func_2119 + call Func_20b0 + call Func_8d0b + bank1call Func_5aeb + ld de, $3cbf + call Func_2275 + ret +; 0x8d78 + +INCBIN "baserom.gbc",$8d78,$8d9d - $8d78 + +Func_8d9d: ; 8d9d (2:4d9d) + ld de, $cfd1 + ld b, $7 +.asm_8da2 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_8da2 + ret + +Unknown_8da9: ; 8da9 (2:4da9) +INCBIN "baserom.gbc",$8da9,$8db0 - $8da9 + +Func_8db0: ; 8db0 (2:4db0) + ld hl, Unknown_8da9 + call Func_8d9d + ld a, $ff + call Func_9168 + xor a + +Func_8dbc: ; 8dbc (2:4dbc) + ld hl, Unknown_8de2 + call Func_2636 + ld hl, $0224 + call Func_2a59 +.asm_8dc8 + call Func_053f + jr c, Func_8dbc + call Func_8dea + jr c, Func_8dbc + call Func_264b + jr nc, .asm_8dc8 + ld a, [$ffb1] + cp $ff + ret z + ld [$ceb1], a + jp Func_8e42 + +Unknown_8de2: ; 8de2 (2:4de2) +INCBIN "baserom.gbc",$8de2,$8dea - $8de2 + +Func_8dea: ; 8dea (2:4dea) + ld a, [hButtonsPressed2] + and $8 + ret z + ld a, [$cd10] + ld [$ceb1], a + call Func_8ff2 + jp nc, Func_8e05 + ld a, $ff + call Func_90fb + call Func_8fe8 + scf + ret + +Func_8e05: ; 8e05 (2:4e05) + ld a, $1 + call Func_90fb + call Func_9048 + push hl + call Func_9038 + pop de + call Func_8e1f + ld a, $ff + call Func_9168 + ld a, [$ceb1] + scf + ret + +Func_8e1f: ; 8e1f (2:4e1f) + push de + ld de, $cfb9 + call Func_92b4 + pop de + ld hl, $cf17 + call Func_8cd4 + ld a, $9 + ld hl, $cebb + call Func_9843 + ld a, $3c + ld [$cecc], a + ld hl, $cebb + ld [hl], a + call Func_9e41 + ret + +Func_8e42: ; 8e42 (2:4e42) + call Func_2a9e + ld hl, Unknown_9027 + call Func_2c08 + call Func_905a +.asm_8e4e + call Func_053f + call Func_9065 + jp nc, .asm_8e4e + cp $ff + jr nz, .asm_8e64 + call Func_90d8 + ld a, [$ceb1] + jp Func_8dbc +.asm_8e64 + ld a, [$ceaf] + or a + jp nz, Func_8f8a + ld a, [$ceb0] + or a + jp nz, .asm_8ecf + call Func_9048 + ld e, l + ld d, h + ld hl, $cf17 + call Func_8cd4 + ld a, $14 + ld hl, $cfb9 + call Func_9843 + ld de, $cfb9 + call Func_9038 + call Func_92b4 + call Func_9345 + jr nc, .asm_8ec4 + call EnableExtRAM + ld hl, $cf17 + call Func_910a + call Func_9048 + call Func_9152 + ld e, l + ld d, h + ld hl, $cf17 + ld b, $3c +.asm_8ea9 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_8ea9 + call Func_9038 + ld d, h + ld e, l + ld hl, $cfb9 + call Func_92ad + call Func_9038 + ld a, [hl] + call DisableExtRAM + or a + jr z, .asm_8edb +.asm_8ec4 + ld a, $ff + call Func_9168 + ld a, [$ceb1] + jp Func_8dbc +.asm_8ecf + call Func_8ff2 + jp nc, .asm_8edb + call Func_8fe8 + jp Func_8dbc +.asm_8edb + ld a, $14 + ld hl, $cfb9 + call Func_9843 + ld de, $cfb9 + call Func_9038 + call Func_92b4 + call Func_8f05 + call Func_9038 + ld d, h + ld e, l + ld hl, $cfb9 + call Func_92b4 + ld a, $ff + call Func_9168 + ld a, [$ceb1] + jp Func_8dbc + +Func_8f05: ; 8f05 (2:4f05) + ld a, [$ceb1] + or a + jr nz, .asm_8f10 + ld hl, Unknown_a763 + jr .asm_8f23 +.asm_8f10 + dec a + jr nz, .asm_8f18 + ld hl, Unknown_a76c + jr .asm_8f23 +.asm_8f18 + dec a + jr nz, .asm_8f20 + ld hl, Unknown_a775 + jr .asm_8f23 +.asm_8f20 + ld hl, Unknown_a77e +.asm_8f23 + ld a, $14 + ld bc, $0401 + ld de, $cfb9 + farcall Func_1ad89 + ld a, [$cfb9] + or a + ret nz + call Func_8f38 + ret + +Func_8f38: ; 8f38 (2:4f38) + ld hl, $b701 + call EnableExtRAM + ld a, [hli] + ld h, [hl] + call DisableExtRAM + ld l, a + ld de, $c590 + call Func_0663 + ld hl, $cfb9 + ld [hl], $6 + inc hl + ld [hl], $44 + inc hl + ld [hl], $65 + inc hl + ld [hl], $63 + inc hl + ld [hl], $6b + inc hl + ld [hl], $20 + inc hl + ld de, $c592 + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hli], a + xor a + ld [hl], a + ld hl, $b701 + call EnableExtRAM + ld e, [hl] + inc hl + ld d, [hl] + ld a, $3 + cp d + jr nz, .asm_8f82 + ld a, $e7 + cp e + jr nz, .asm_8f82 + ld de, $0000 +.asm_8f82 + inc de + ld [hl], d + dec hl + ld [hl], e + call DisableExtRAM + ret + +Func_8f8a: ; 8f8a (2:4f8a) + ld a, [$ceb0] + or a + jp nz, Func_9026 + call Func_8ff2 + jp nc, Func_8f9d + call Func_8fe8 + jp Func_8dbc + +Func_8f9d: ; 8f9d (2:4f9d) + call EnableExtRAM + ld a, [$b700] + call DisableExtRAM + ld h, $3 + ld l, a + call Func_0879 + ld e, l + inc e + ld d, $2 + xor a + ld hl, $0000 + ld bc, $0202 + call Func_1f5f + ld a, [$ceb1] + call EnableExtRAM + ld [$b700], a + call DisableExtRAM + call Func_9326 + call Func_9038 + call EnableExtRAM + call Func_9253 + call DisableExtRAM + xor a + ld [$ce3f], a + ld [$ce40], a + ld hl, $022a + call Func_2aab + ld a, [$ceb1] + jp Func_8dbc + +Func_8fe8: ; 8fe8 (2:4fe8) + ld hl, $022f + call Func_2aab + ld a, [$ceb1] + ret + +Func_8ff2: ; 8ff2 (2:4ff2) + ld a, [$ceb1] + ld hl, $ceb2 + ld b, $0 + ld c, a + add hl, bc + ld a, [hl] + or a + ret nz + scf + ret +; 0x9001 + +INCBIN "baserom.gbc",$9001,$9026 - $9001 + +Func_9026: ; 9026 (2:5026) + ret + +Unknown_9027: ; 9027 (2:5027) +INCBIN "baserom.gbc",$9027,$9038 - $9027 + +Func_9038: ; 9038 (2:5038) + ld a, [$ceb1] + ld h, a + ld l, $54 + call Func_0879 + push de + ld de, $a200 + add hl, de + pop de + ret + +Func_9048: ; 9048 (2:5048) + push af + ld a, [$ceb1] + ld h, a + ld l, $54 + call Func_0879 + push de + ld de, $a218 + add hl, de + pop de + pop af + ret + +Func_905a: ; 905a (2:505a) + xor a + ld [$ceaf], a + ld [$ceb0], a + ld [$cea3], a + ret + +Func_9065: ; 9065 (2:5065) + xor a + ld [$cfe3], a + ld a, [$ceaf] + ld d, a + ld a, [$ceb0] + ld e, a + ld a, [hButtonsPressed2] + or a + jr z, .asm_90a6 + bit 5, a + jr nz, .asm_907e + bit 4, a + jr z, .asm_9084 +.asm_907e + ld a, d + xor $1 + ld d, a + jr .asm_9090 +.asm_9084 + bit 6, a + jr nz, .asm_908c + bit 7, a + jr z, .asm_90a6 +.asm_908c + ld a, e + xor $1 + ld e, a +.asm_9090 + ld a, $1 + ld [$cfe3], a + push de + call Func_90d8 + pop de + ld a, d + ld [$ceaf], a + ld a, e + ld [$ceb0], a + xor a + ld [$cea3], a +.asm_90a6 + ld a, [$ff91] + and $3 + jr z, .asm_90c1 + and $1 + jr nz, .asm_90b7 + ld a, $ff + call Func_90fb + scf + ret +.asm_90b7 + call Func_90f7 + ld a, $1 + call Func_90fb + scf + ret +.asm_90c1 + ld a, [$cfe3] + or a + jr z, .asm_90ca + call Func_3796 +.asm_90ca + ld hl, $cea3 + ld a, [hl] + inc [hl] + and $f + ret nz + ld a, $f + bit 4, [hl] + jr z, asm_90da +Func_90d8: ; 90d8 (2:50d8) + ld a, $0 +asm_90da + ld e, a + ld a, $a + ld l, a + ld a, [$ceaf] + ld h, a + call Func_0879 + ld a, l + add $1 + ld b, a + ld a, [$ceb0] + sla a + add $e + ld c, a + ld a, e + call Func_06c3 + or a + ret + +Func_90f7: ; 90f7 (2:50f7) + ld a, $f + jr asm_90da + +Func_90fb: ; 90fb (2:50fb) + push af + inc a + jr z, .asm_9103 + ld a, $2 + jr .asm_9105 +.asm_9103 + ld a, $3 +.asm_9105 + call Func_3796 + pop af + ret + +Func_910a: ; 910a (2:510a) + push hl + ld b, $0 + ld d, $3c +.asm_910f + ld a, [hli] + or a + jr z, .asm_911e + ld c, a + push hl + ld hl, $a100 + add hl, bc + dec [hl] + pop hl + dec d + jr nz, .asm_910f +.asm_911e + pop hl + ret +; 0x9120 + +INCBIN "baserom.gbc",$9120,$9152 - $9120 + +Func_9152: ; 9152 (2:5152) + push hl + ld b, $0 + ld d, $3c +.asm_9157 + ld a, [hli] + or a + jr z, .asm_9166 + ld c, a + push hl + ld hl, $a100 + add hl, bc + inc [hl] + pop hl + dec d + jr nz, .asm_9157 +.asm_9166 + pop hl + ret + +Func_9168: ; 9168 (2:5168) + ;ld [$ffb5], a + db $ea, $b5, $ff + call Func_8d56 + ld de, $0000 + ld bc, $1404 + call Func_1e7c + ld de, $0003 + ld bc, $1404 + call Func_1e7c + ld de, $0006 + ld bc, $1404 + call Func_1e7c + ld de, $0009 + ld bc, $1404 + call Func_1e7c + ld hl, Unknown_9242 + call Func_2c08 + ld a, $4 + ld hl, $ceb2 + call Func_9843 + ;ld a, [$ffb5] + db $fa, $b5, $ff + bit 0, a + jr z, .asm_91b0 + ld hl, $a200 + ld de, $0602 + call Func_926e +.asm_91b0 + ld hl, $a218 + call Func_9314 + jr c, .asm_91bd + ld a, $1 + ld [$ceb2], a +.asm_91bd + ;ld a, [$ffb5] + db $fa, $b5, $ff + bit 1, a + jr z, .asm_91cd + ld hl, $a254 + ld de, $0605 + call Func_926e +.asm_91cd + ld hl, $a26c + call Func_9314 + jr c, .asm_91da + ld a, $1 + ld [$ceb3], a +.asm_91da + ;ld a, [$ffb5] + db $fa, $b5, $ff + bit 2, a + jr z, .asm_91ea + ld hl, $a2a8 + ld de, $0608 + call Func_926e +.asm_91ea + ld hl, $a2c0 + call Func_9314 + jr c, .asm_91f7 + ld a, $1 + ld [$ceb4], a +.asm_91f7 + ;ld a, [$ffb5] + db $fa, $b5, $ff + bit 3, a + jr z, .asm_9207 + ld hl, $a2fc + ld de, $060b + call Func_926e +.asm_9207 + ld hl, $a314 + call Func_9314 + jr c, .asm_9214 + ld a, $1 + ld [$ceb5], a +.asm_9214 + call EnableExtRAM + ld a, [$b700] + ld c, a + ld b, $0 + ld d, $2 +.asm_921f + ld hl, $ceb2 + add hl, bc + ld a, [hl] + or a + jr nz, .asm_9234 + inc c + ld a, $4 + cp c + jr nz, .asm_921f + ld c, $0 + dec d + jr z, .asm_9234 + jr .asm_921f +.asm_9234 + ld a, c + ld [$b700], a + call DisableExtRAM + call Func_9326 + call EnableLCD + ret + +Unknown_9242: ; 9242 (2:5242) +INCBIN "baserom.gbc",$9242,$9253 - $9242 + +Func_9253: ; 9253 (2:5253) + ld de, $c590 + call Func_92ad + ld hl, $c590 + call Func_23c1 + ld b, $0 + ld hl, $c590 + add hl, bc + ld d, h + ld e, l + ld hl, Unknown_92a7 + call Func_92ad + ret + +Func_926e: ; 926e (2:526e) + push hl + call Func_9314 + pop hl + jr c, .asm_929c + push de + ld de, $c590 + call Func_92b4 + ld hl, $c590 + call Func_23c1 + ld b, $0 + ld hl, $c590 + add hl, bc + ld d, h + ld e, l + ld hl, Unknown_92a7 + call Func_92ad + pop de + ld hl, $c590 + call Func_22ae + call Func_21c5 + or a + ret +.asm_929c + call Func_22ae + ld hl, $0223 + call Func_2c29 + scf + ret + +Unknown_92a7: ; 92a7 (2:52a7) +INCBIN "baserom.gbc",$92a7,$92ad - $92a7 + +Func_92ad: ; 92ad (2:52ad) + ld a, [hli] + ld [de], a + or a + ret z + inc de + jr Func_92ad + +Func_92b4: ; 92b4 (2:52b4) + call EnableExtRAM + call Func_92ad + call DisableExtRAM + ret +; 0x92be + +INCBIN "baserom.gbc",$92be,$9314 - $92be + +Func_9314: ; 9314 (2:5314) + ld bc, $0018 + add hl, bc + call EnableExtRAM + ld a, [hl] + call DisableExtRAM + or a + jr nz, .asm_9324 + scf + ret +.asm_9324 + or a + ret + +Func_9326: ; 9326 (2:5326) + call EnableExtRAM + ld a, [$b700] + call DisableExtRAM + ld h, $3 + ld l, a + call Func_0879 + ld e, l + inc e + ld d, $2 + ld a, $38 + ld hl, $0102 + ld bc, $0202 + call Func_1f5f + ret + +Func_9345: ; 9345 (2:5345) +INCBIN "baserom.gbc",$9345,$9843 - $9345 + +Func_9843: ; 9843 (2:5843) +INCBIN "baserom.gbc",$9843,$9e41 - $9843 + +Func_9e41: ; 9e41 (2:5e41) +INCBIN "baserom.gbc",$9e41,$a288 - $9e41 + +Func_a288: ; a288 (2:6288) +INCBIN "baserom.gbc",$a288,$a763 - $a288 + +Unknown_a763: ; a763 (2:6763) +INCBIN "baserom.gbc",$a763,$a76c - $a763 + +Unknown_a76c: ; a76c (2:676c) +INCBIN "baserom.gbc",$a76c,$a775 - $a76c + +Unknown_a775: ; a775 (2:6775) +INCBIN "baserom.gbc",$a775,$a77e - $a775 + +Unknown_a77e: ; a77e (2:677e) +INCBIN "baserom.gbc",$a77e,$b177 - $a77e + +Func_b177: ; b177 (2:7177) +INCBIN "baserom.gbc",$b177,$c000 - $b177 diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm new file mode 100755 index 0000000..11ca29a --- /dev/null +++ b/src/engine/bank20.asm @@ -0,0 +1,133 @@ +Func_80000: ; 80000 (20:4000) +INCBIN "baserom.gbc",$80000,$80028 - $80000 + +Func_80028: ; 80028 (20:4028) +INCBIN "baserom.gbc",$80028,$8020f - $80028 + +Func_8020f: ; 8020f (20:420f) + push bc + push af + ld bc, MapDataPointers + ld h, $0 + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + pop af + ld l, a + ld h, $0 + sla l + rl h + sla l + rl h + add hl, bc + pop bc + ret + +Func_80229: ; 80229 (20:4229) + ld a, [hli] + ld [$d4c4], a + ld a, [hli] + ld [$d4c5], a + ld a, [hli] + add $20 + ld [$d4c6], a + ret +; 0x80238 + +INCBIN "baserom.gbc",$80238,$8025b - $80238 + +Func_8025b: ; 8025b (20:425b) + push hl + ld l, $4 + call Func_8020f + call Func_80229 + ld a, [hl] + push af + ld [$d4c8], a + ld a, $10 + ld [$d4c7], a + call Func_80274 + pop af + pop hl + ret + +Func_80274: ; 80274 (20:4274) + call Func_8029f + jr asm_8027c + +Func_80279: ; 80279 (20:4279) + call Func_802bb +asm_8027c + push hl + push bc + push de + ld a, [$d4c8] + ld b, a + ld a, [$d4c7] + ld c, a + ld hl, $d4c2 + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $d4c4 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + call Func_395a + call BankswitchVRAM_0 + pop de + pop bc + pop hl + ret + +Func_8029f: ; 8029f (20:429f) + ld a, [$d4ca] + swap a + push af + and $f0 + ld [$d4c2], a + pop af + and $f + add $80 + ld [$d4c3], a + ld a, [$d4cb] + and $1 + call BankswitchVRAM + ret + +Func_802bb: ; 802bb (20:42bb) + ld a, [$d4ca] + push af + xor $80 + ld [$d4ca], a + call Func_8029f + ld a, [$d4c3] + add $8 + ld [$d4c3], a + pop af + ld [$d4ca], a + ret +; 0x802d4 + +INCBIN "baserom.gbc",$802d4,$80418 - $802d4 + +Func_80418: ; 80418 (20:4418) +INCBIN "baserom.gbc",$80418,$80480 - $80418 + +Func_80480: ; 80480 (20:4480) +INCBIN "baserom.gbc",$80480,$804d8 - $80480 + +Func_804d8: ; 804d8 (20:44d8) +INCBIN "baserom.gbc",$804d8,$80b7a - $804d8 + +Func_80b7a: ; 80b7a (20:4b7a) +INCBIN "baserom.gbc",$80b7a,$80e5a - $80b7a + +Unknown_80e5a: ; 80e5a (20:4e5a) +INCBIN "baserom.gbc",$80e5a,$80e5d - $80e5a + +MapDataPointers: ; 80e5d (20:4e5d) +INCBIN "baserom.gbc",$80e5d,$84000 - $80e5d diff --git a/src/engine/bank3.asm b/src/engine/bank3.asm new file mode 100755 index 0000000..38a56cd --- /dev/null +++ b/src/engine/bank3.asm @@ -0,0 +1,1457 @@ +LoadMap: ; c000 (3:4000) + call DisableLCD + call EnableExtRAM + bank1call Func_6785 + call DisableExtRAM + ld a, $0 + ld [$d0b5], a + xor a + ld [$d10f], a + ld [$d110], a + ld [$d113], a + farcall Func_10a9b + call Func_c1a4 + call Func_099c + xor a + ld [$cab6], a + call Func_2119 + call Set_OBJ_8x8 + xor a + ld [$cd08], a + xor a + ld [$d291], a +.asm_c037 + farcall Func_10ab4 + call Func_c1a4 + call Func_c241 + call Func_04a2 + call Func_3ca0 + ld a, $c2 + ld [$ff97], a + farcall Func_1c440 + ld a, [$d0bb] + ld [wCurMap], a + ld a, [$d0bc] + ld [wPlayerXCoord], a + ld a, [$d0bd] + ld [wPlayerYCoord], a + call Func_c36a + call Func_c184 + call Func_c49c + farcall Func_80000 + call Func_c4b9 + call Func_c943 + call Func_c158 + farcall Func_80480 + call Func_c199 + xor a + ld [$d0b4], a + ld [$d0c1], a + call Func_39fc + farcall Func_10af9 + call Func_c141 + call Func_c17a +.asm_c092 + call Func_3c48 + call Func_c491 + call Func_c0ce + ld hl, $d0b4 + ld a, [hl] + and $d0 + jr z, .asm_c092 + call Func_3c48 + ld hl, $d0b4 + ld a, [hl] + bit 4, [hl] + jr z, .asm_c0b6 + ld a, $c + call Func_3796 + jp .asm_c037 +.asm_c0b6 + farcall Func_10ab4 + call Func_c1a0 + ld a, [$d113] + or a + jr z, .asm_c0ca + call Func_c280 + farcall Duel_Init +.asm_c0ca + call Func_c280 + ret + +Func_c0ce: ; c0ce (3:40ce) + ld a, [$d0bf] + res 7, a + rlca + add PointerTable_c0e0 & $ff + ld l, a + ld a, PointerTable_c0e0 >> $8 + adc $0 + ld h, a + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +PointerTable_c0e0: ; c0e0 (3:40e0) + dw Func_c0e8 + dw Func_c0ed + dw Func_c0f1 + dw Func_c10a + +Func_c0e8: ; c0e8 (3:40e8) + farcall Func_10e55 + ret + +Func_c0ed: ; c0ed (3:40ed) + call Func_c510 + ret + +Func_c0f1: ; c0f1 (3:40f1) + ld a, [$d3b6] + ld [$d3aa], a + farcall Func_1c768 + ld a, c + ld [$d0c6], a + ld a, b + ld [$d0c7], a + ld a, $3 + ld [$d0bf], a + jr Func_c10a + +Func_c10a: ; c10a (3:410a) + ld hl, $d0c6 + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Func_c111: ; c111 (3:4111) + ld a, [$d0c1] + bit 0, a + call nz, Func_c135 + ld a, [$d0c1] + bit 1, a + jr z, .asm_c12a + ld a, [$d3b6] + ld [$d3aa], a + farcall Func_1c5e9 +.asm_c12a + xor a + ld [$d0c1], a + ld a, [$d0c0] + ld [$d0bf], a + ret + +Func_c135: ; c135 (3:4135) + push hl + farcall Func_80028 + ld hl, $d0c1 + res 0, [hl] + pop hl + ret + +Func_c141: ; c141 (3:4141) + ld hl, $d0c2 + ld a, [hl] + or a + ret z + push af + xor a + ld [hl], a + pop af + dec a + ld hl, PointerTable_c152 + jp JumpToFunctionInTable + +PointerTable_c152: ; c152 (3:4152) + dw Func_c9bc + dw Func_fc2b + dw Func_fcad + +Func_c158: ; c158 (3:4158) + ld a, [$d0c2] + cp $1 + ret nz + ld a, [$d0c4] + ld [$d3ab], a + call Func_39c3 + jr c, .asm_c179 + ld a, [$d3aa] + ld l, $4 + call Func_39ad + ld a, [$d0c5] + ld [hl], a + farcall Func_1c58e +.asm_c179 + ret + +Func_c17a: ; c17a (3:417a) + ld a, [$d0bf] + cp $3 + ret z + call Func_c9b8 + ret + +Func_c184: ; c184 (3:4184) + push bc + ld c, $1 + ld a, [wCurMap] + cp OVERWORLD_MAP + jr nz, .asm_c190 + ld c, $0 +.asm_c190 + ld a, c + ld [$d0bf], a + ld [$d0c0], a + pop bc + ret + +Func_c199: ; c199 (3:4199) + ld hl, Func_380e + call Func_3bd2 + ret + +Func_c1a0: ; c1a0 (3:41a0) + call Func_3bdb + ret + +Func_c1a4: ; c1a4 (3:41a4) + xor a + call Func_040c + xor a + call Set_OBP0 + xor a + call Set_OBP1 + ret + +Func_c1b1: ; c1b1 (3:41b1) + ld a, $c + ld [$d32e], a + ld a, $0 + ld [$d0bb], a + ld a, $c + ld [$d0bc], a + ld a, $c + ld [$d0bd], a + ld a, $2 + ld [$d0be], a + call Func_c9cb + call Func_c9dd + farcall Func_80b7a + farcall Func_1c82e + farcall Func_131b3 + xor a + ld [wCounter + 0], a + ld [wCounter + 1], a + ld [wCounter + 2], a + ld [wCounter + 3], a + ld [wCounter + 4], a + ret + +Func_c1ed: ; c1ed (3:41ed) + call Func_c9cb + farcall Func_11416 + call Func_c9dd + ret + +Func_c1f8: ; c1f8 (3:41f8) + xor a + ld [$d0b8], a + ld [$d0b9], a + ld [$d0ba], a + ld [$d11b], a + ld [$d0c2], a + ld [$d111], a + ld [$d112], a + ld [$d3b8], a + call EnableExtRAM + ld a, [$a007] + ld [$d421], a + ld a, [$a006] + ld [$ce47], a + call DisableExtRAM + farcall Func_10756 + ret + +Func_c228: ; c228 (3:4228) + ld a, [wCurMap] + ld [$d0bb], a + ld a, [wPlayerXCoord] + ld [$d0bc], a + ld a, [wPlayerYCoord] + ld [$d0bd], a + ld a, [$d334] + ld [$d0be], a + ret + +Func_c241: ; c241 (3:4241) + push hl + push bc + push de + ld de, $307f + call Func_2275 + call Func_c258 + pop de + pop bc + pop hl + ret + +Func_c251: ; c251 (3:4251) + ld a, [$ffb0] + push af + ld a, $1 + jr asm_c25d + +Func_c258: ; c258 (3:4258) + ld a, [$ffb0] + push af + ld a, $2 +asm_c25d + ld [$ffb0], a + push hl + call Func_c268 + pop hl + pop af + ld [$ffb0], a + ret + +Func_c268: ; c268 (3:4268) + ld hl, Unknown_c27c +.asm_c26b + push hl + ld a, [hli] + ld h, [hl] + ld l, a + or h + jr z, .asm_c27a + call Func_2c29 + pop hl + inc hl + inc hl + jr .asm_c26b +.asm_c27a + pop hl + ret + +Unknown_c27c: ; c27c (3:427c) +INCBIN "baserom.gbc",$c27c,$c280 - $c27c + +Func_c280: ; c280 (3:4280) + call Func_c228 + call Func_3ca0 + call Func_099c + ld hl, $cac0 + inc [hl] + call EnableLCD + call Func_3c48 + call DisableLCD + farcall Func_12871 + ret + +Func_c29b: ; c29b (3:429b) + push hl + ld hl, $d0c1 + or [hl] + ld [hl], a + pop hl + ret + +Func_c2a3: ; c2a3 (3:42a3) + push hl + push bc + push de + call Func_c335 + farcall Func_10ab4 + ld a, $80 + call Func_c29b + ld de, $307f + call Func_2275 + farcall Func_12ba7 + call Func_3ca0 + call Func_099c + ld a, $1 + ld [$cac0], a + call EnableLCD + call Func_3c48 + call DisableLCD + pop de + pop bc + pop hl + ret +; 0xc2d4 + +INCBIN "baserom.gbc",$c2d4,$c2db - $c2d4 + +Func_c2db: ; c2db (3:42db) + push hl + push bc + push de + call DisableLCD + call Set_OBJ_8x8 + call Func_3ca0 + farcall Func_12bcd + ld a, $c2 + ld [$ff97], a + call Func_c241 + call Func_04a2 + ld a, [$d111] + push af + farcall Func_80000 + pop af + ld [$d111], a + ld hl, $d0c1 + res 0, [hl] + call Func_c34e + farcall Func_12c5e + farcall Func_1c6f8 + ld hl, $d0c1 + res 7, [hl] + ld hl, $d10f + ld a, [hli] + or [hl] + jr z, .asm_c323 + ld a, [hld] + ld l, [hl] + ld h, a + call Func_3c45 +.asm_c323 + farcall Func_10af9 + pop de + pop bc + pop hl + ret + +Func_c32b: ; c32b (3:432b) + ld a, l + ld [$d10f], a + ld a, h + ld [$d110], a + jr Func_c2db + +Func_c335: ; c335 (3:4335) + ld a, [$cabd] + ld [$d10c], a + ld a, [$cabe] + ld [$d10d], a + ld hl, $cb30 + ld de, $d0cc + ld bc, $0040 + call CopyData_SaveRegisters + ret + +Func_c34e: ; c34e (3:434e) + ld a, [$d10c] + ld [$cabd], a + ld a, [$d10d] + ld [$cabe], a + ld hl, $d0cc + ld de, $cb30 + ld bc, $0040 + call CopyData_SaveRegisters + call Func_0404 + ret + +Func_c36a: ; c36a (3:436a) + xor a + ld [$d323], a + ld a, [wCurMap] + cp POKEMON_DOME_ENTRANCE + jr nz, .asm_c379 + xor a + ld [$d324], a +.asm_c379 + ret +; 0xc37a + +INCBIN "baserom.gbc",$c37a,$c41c - $c37a + +Func_c41c: ; c41c (3:441c) + ld a, [$d332] + sub $40 + ld [$d235], a + ld a, [$d333] + sub $40 + ld [$d236], a + call Func_c430 + ret + +Func_c430: ; c430 (3:4430) + push bc + ld a, [$d237] + sla a + sla a + sla a + ld b, a + ld a, [$d235] + cp $b1 + jr c, .asm_c445 + xor a + jr .asm_c449 +.asm_c445 + cp b + jr c, .asm_c449 + ld a, b +.asm_c449 + ld [$d235], a + ld a, [$d238] + sla a + sla a + sla a + ld b, a + ld a, [$d236] + cp $b9 + jr c, .asm_c460 + xor a + jr .asm_c464 +.asm_c460 + cp b + jr c, .asm_c464 + ld a, b +.asm_c464 + ld [$d236], a + pop bc + ret + +Func_c469: ; c469 (3:4469) + ld a, [$d235] + add $4 + and $f8 + rrca + rrca + rrca + ld [$d233], a + ld a, [$d236] + add $4 + and $f8 + rrca + rrca + rrca + ld [$d234], a + ret + +Func_c484: ; c484 (3:4484) + ld a, [$d235] + ld [$d0b6], a + ld a, [$d236] + ld [$d0b7], a + ret + +Func_c491: ; c491 (3:4491) + ld a, [$d0b6] + ld [$ff92], a + ld a, [$d0b7] + ld [$ff93], a + ret + +Func_c49c: ; c49c (3:449c) + ld a, [wPlayerXCoord] + and $1f + ld [wPlayerXCoord], a + rlca + rlca + rlca + ld [$d332], a + ld a, [wPlayerYCoord] + and $1f + ld [wPlayerYCoord], a + rlca + rlca + rlca + ld [$d333], a + ret + +Func_c4b9: ; c4b9 (3:44b9) + xor a + ld [$d4ca], a + ld [$d4cb], a + ld a, $1d + farcall Func_80418 + ld b, $0 + ld a, [$cab4] + cp $2 + jr nz, .asm_c4d1 + ld b, $1e +.asm_c4d1 + ld a, b + ld [$d337], a + ld a, $0 + farcall Func_1299f + ld a, [$d4cf] + ld [$d336], a + ld b, $2 + ld a, [wCurMap] + cp OVERWORLD_MAP + jr z, .asm_c4ee + ld a, [$d0be] + ld b, a +.asm_c4ee + ld a, b + ld [$d334], a + call Func_c5e9 + ld a, [wCurMap] + cp OVERWORLD_MAP + call nz, Func_c6f7 + xor a + ld [$d335], a + ld [$d338], a + ld a, [wCurMap] + cp OVERWORLD_MAP + jr nz, .asm_c50f + farcall Func_10fde +.asm_c50f + ret + +Func_c510: ; c510 (3:4510) + ld a, [$d336] + ld [$d4cf], a + ld a, [$d335] + bit 4, a + ret nz + bit 0, a + call z, Func_c5ac + ld a, [$d335] + or a + jr z, .asm_c535 + bit 0, a + call nz, Func_c66c + ld a, [$d335] + bit 1, a + call nz, Func_c6dc + ret +.asm_c535 + ld a, [$ff91] + and $8 + call nz, Func_c74d + ret +; 0xc53d + +INCBIN "baserom.gbc",$c53d,$c554 - $c53d + +Func_c554: ; c554 (3:4554) + ld a, [$d336] + ld [$d4cf], a + ld a, [wCurMap] + cp OVERWORLD_MAP + jr nz, .asm_c566 + farcall Func_10e28 + ret +.asm_c566 + push hl + push bc + push de + call Func_c58b + ld a, [$d235] + ld d, a + ld a, [$d236] + ld e, a + ld c, $2 + call Func_3dbf + ld a, [$d332] + sub d + add $8 + ld [hli], a + ld a, [$d333] + sub e + add $10 + ld [hli], a + pop de + pop bc + pop hl + ret + +Func_c58b: ; c58b (3:458b) + push hl + ld a, [wPlayerXCoord] + ld b, a + ld a, [wPlayerYCoord] + ld c, a + call Func_3927 + and $10 + push af + ld c, $f + call Func_3dbf + pop af + ld a, [hl] + jr z, .asm_c5a7 + or $80 + jr .asm_c5a9 +.asm_c5a7 + and $7f +.asm_c5a9 + ld [hl], a + pop hl + ret + +Func_c5ac: ; c5ac (3:45ac) + ld a, [$ff90] + and $f0 + jr z, .asm_c5bf + call Func_c5cb + call Func_c5fe + ld a, [$d335] + and $1 + jr nz, .asm_c5ca +.asm_c5bf + ld a, [$ff91] + and $1 + jr z, .asm_c5ca + call Func_c71e + jr .asm_c5ca +.asm_c5ca + ret + +Func_c5cb: ; c5cb (3:45cb) + call Func_c5d5 + ld [$d334], a + call Func_c5e9 + ret + +Func_c5d5: ; c5d5 (3:45d5) + push hl + ld hl, Unknown_c5e5 + or a + jr z, .asm_c5e2 +.asm_c5dc + rlca + jr c, .asm_c5e2 + inc hl + jr .asm_c5dc +.asm_c5e2 + ld a, [hl] + pop hl + ret + +Unknown_c5e5: ; c5e5 (3:45e5) + db $02,$00,$03,$01 + +Func_c5e9: ; c5e9 (3:45e9) + push bc + ld a, [$d336] + ld [$d4cf], a + ld a, [$d337] + ld b, a + ld a, [$d334] + add b + farcall Func_12ab5 + pop bc + ret + +Func_c5fe: ; c5fe (3:45fe) + push bc + call Func_c653 + call Func_c619 + pop bc + ret +; 0xc607 + +INCBIN "baserom.gbc",$c607,$c619 - $c607 + +Func_c619: ; c619 (3:4619) + push hl + push bc + ld a, b + cp $1f + jr nc, .asm_c650 + ld a, c + cp $1f + jr nc, .asm_c650 + call Func_3927 + and $c0 + jr nz, .asm_c650 + ld a, b + ld [wPlayerXCoord], a + ld a, c + ld [wPlayerYCoord], a + ld a, [$d335] + or $1 + ld [$d335], a + ld a, $10 + ld [$d338], a + ld c, $f + call Func_3dbf + set 2, [hl] + ld c, $e + call Func_3dbf + ld a, $4 + ld [hl], a +.asm_c650 + pop bc + pop hl + ret + +Func_c653: ; c653 (3:4653) + ld a, [$d334] + rlca + ld c, a + ld b, $0 + push hl + ld hl, Unknown_3973 + add hl, bc + ld a, [wPlayerXCoord] + add [hl] + ld b, a + inc hl + ld a, [wPlayerYCoord] + add [hl] + ld c, a + pop hl + ret + +Func_c66c: ; c66c (3:466c) + push hl + push bc + ld c, $1 + ld a, [$ff90] + bit 1, a + jr z, .asm_c67e + ld a, [$d338] + cp $2 + jr c, .asm_c67e + inc c +.asm_c67e + ld a, [$d334] + call Func_c694 + pop bc + pop hl + ret +; 0xc687 + +INCBIN "baserom.gbc",$c687,$c694 - $c687 + +Func_c694: ; c694 (3:4694) + push hl + push bc + push bc + rlca + ld c, a + ld b, $0 + ld hl, Unknown_396b + add hl, bc + pop bc +.asm_c6a0 + push hl + ld a, [hli] + or a + call nz, Func_c6cc + ld a, [hli] + or a + call nz, Func_c6d4 + pop hl + ld a, [$d338] + dec a + ld [$d338], a + jr z, .asm_c6b8 + dec c + jr nz, .asm_c6a0 +.asm_c6b8 + ld a, [$d338] + or a + jr nz, .asm_c6c3 + ld hl, $d335 + set 1, [hl] +.asm_c6c3 + call Func_c41c + call Func_c469 + pop bc + pop hl + ret + +Func_c6cc: ; c6cc (3:46cc) + push hl + ld hl, $d332 + add [hl] + ld [hl], a + pop hl + ret + +Func_c6d4: ; c6d4 (3:46d4) + push hl + ld hl, $d333 + add [hl] + ld [hl], a + pop hl + ret + +Func_c6dc: ; c6dc (3:46dc) + push hl + ld hl, $d335 + res 0, [hl] + res 1, [hl] + call Func_c6f7 + call Func_3997 + call Func_c70d + ld a, [$d0bf] + cp $1 + call z, Func_c9c0 + pop hl + ret + +Func_c6f7: ; c6f7 (3:46f7) + ld a, [$d336] + ld [$d4cf], a + ld c, $f + call Func_3dbf + res 2, [hl] + ld c, $e + call Func_3dbf + ld a, $ff + ld [hl], a + ret + +Func_c70d: ; c70d (3:470d) + push hl + ld hl, $d0bb + ld a, [wCurMap] + cp [hl] + jr z, .asm_c71c + ld hl, $d0b4 + set 4, [hl] +.asm_c71c + pop hl + ret + +Func_c71e: ; c71e (3:471e) + ld a, $ff + ld [$d3b6], a + call Func_c653 + call Func_3927 + and $40 + jr z, .asm_c73d + farcall Func_1c72e + jr c, .asm_c73d + ld a, [$d3aa] + ld [$d3b6], a + ld a, $2 + jr .asm_c748 +.asm_c73d + call Func_3a5e + jr nc, .asm_c746 + ld a, $3 + jr .asm_c748 +.asm_c746 + or a + ret +.asm_c748 + ld [$d0bf], a + scf + ret + +Func_c74d: ; c74d (3:474d) + push hl + push bc + push de + call MainMenu_c75a + call Func_c111 + pop de + pop bc + pop hl + ret + +MainMenu_c75a: ; c75a (3:475a) + call Func_379b + ld a, MUSIC_PAUSEMENU + call PlaySong + call Func_c797 +.asm_c765 + ld a, $1 + call Func_c29b +.asm_c76a + call Func_3c48 + call Func_264b + jr nc, .asm_c76a + ld a, e + ld [$d0b8], a + ld a, [$ffb1] + cp e + jr nz, .asm_c793 + cp $5 + jr z, .asm_c793 + call Func_c2a3 + ld a, [$d0b8] + ld hl, PointerTable_c7a2 + call JumpToFunctionInTable + ld hl, Func_c797 + call Func_c32b + jr .asm_c765 +.asm_c793 + call Func_37a0 + ret + +Func_c797: ; c797 (3:4797) + ld a, [$d0b8] + ld hl, Unknown_cd98 + farcall Func_111e9 + ret + +PointerTable_c7a2: ; c7a2 (3:47a2) + dw Func_c7ae + dw Func_c7b3 + dw Func_c7b8 + dw Func_c7cc + dw Func_c7e0 + dw Func_c7e5 + +Func_c7ae: ; c7ae (3:47ae) + farcall Func_10059 + ret + +Func_c7b3: ; c7b3 (3:47b3) + farcall Func_100a2 + ret + +Func_c7b8: ; c7b8 (3:47b8) + xor a + ld [$ff92], a + ld [$ff93], a + call Set_OBJ_8x16 + farcall Func_1288c + farcall Func_8db0 + call Set_OBJ_8x8 + ret + +Func_c7cc: ; c7cc (3:47cc) + xor a + ld [$ff92], a + ld [$ff93], a + call Set_OBJ_8x16 + farcall Func_1288c + farcall Func_a288 + call Set_OBJ_8x8 + ret + +Func_c7e0: ; c7e0 (3:47e0) + farcall Func_10548 + ret + +Func_c7e5: ; c7e5 (3:47e5) + farcall Func_103d2 + ret + +PC_c7ea: ; c7ea (3:47ea) + ld a, MUSIC_PCMAINMENU + call PlaySong + call Func_c241 + call $4915 + call Func_3c48 + ld hl, $0352 + call $2c73 + call $484e +.asm_c801 + ld a, $1 + call Func_c29b +.asm_c806 + call Func_3c48 + call Func_264b + jr nc, .asm_c806 + ld a, e + ld [$d0b9], a + ld a, [$ffb1] + cp e + jr nz, .asm_c82f + cp $4 + jr z, .asm_c82f + call Func_c2a3 + ld a, [$d0b9] + ld hl, $4846 + call JumpToFunctionInTable + ld hl, $484e + call Func_c32b + jr .asm_c801 +.asm_c82f + call Func_c135 + call Func_3c48 + ld hl, $0353 + call $4891 + call Func_c111 + xor a + ld [$d112], a + call Func_39fc + ret +; 0xc846 + +INCBIN "baserom.gbc",$c846,$c935 - $c846 + +Func_c935: ; c935 (3:4935) + push hl + ld hl, $d0c6 + ld [hl], c + inc hl + ld [hl], b + ld a, $3 + ld [$d0bf], a + pop hl + ret + +Func_c943: ; c943 (3:4943) + push hl + push bc + push de + ld l, $0 + call Func_3abd + jr nc, .asm_c98f +.asm_c94d + ld a, l + ld [$d4c4], a + ld a, h + ld [$d4c5], a + ld a, $4 + ld [$d4c6], a + ld de, $d3ab + ld bc, $0006 + call Func_3bf5 + ld a, [$d3ab] + or a + jr z, .asm_c98f + push hl + ld a, [$d3af] + ld l, a + ld a, [$d3b0] + ld h, a + or l + jr z, .asm_c97a + call Func_3c45 + jr nc, .asm_c988 +.asm_c97a + ld a, [$d3ab] + farcall Func_11857 + call Func_c998 + farcall Func_1c485 +.asm_c988 + pop hl + ld bc, $0006 + add hl, bc + jr .asm_c94d +.asm_c98f + ld l, $2 + call Func_c9c2 + pop de + pop bc + pop hl + ret + +Func_c998: ; c998 (3:4998) + ld a, [$d3ab] + cp $22 + ret nz + ld a, [$d3d0] + or a + ret z + ld b, $4 + ld a, [$cab4] + cp $2 + jr nz, .asm_c9ae + ld b, $e +.asm_c9ae + ld a, b + ld [$d3b1], a + ld a, $0 + ld [$d3b2], a + ret + +Func_c9b8: ; c9b8 (3:49b8) + ld l, $8 + jr Func_c9c2 + +Func_c9bc: ; c9bc (3:49bc) + ld l, $a + jr Func_c9c2 + +Func_c9c0: ; c9c0 (3:49c0) + ld l, $c + +Func_c9c2: ; c9c2 (3:49c2) + call Func_3abd + ret nc + jp [hl] + +Func_c9c7: ; c9c7 (3:49c7) + ld l, $e + jr Func_c9c2 + +Func_c9cb: ; c9cb (3:49cb) + push hl + push bc + ld hl, $d3d2 + ld bc, $0040 +.asm_c9d3 + xor a + ld [hli], a + dec bc + ld a, b + or c + jr nz, .asm_c9d3 + pop bc + pop hl + ret + +Func_c9dd: ; c9dd (3:49dd) + xor a + ld [$d411], a + call Func_c9e8 + call Func_ca0e + ret + +Func_c9e8: ; c9e8 (3:49e8) + ld c, $0 + call Func_ca69 + db $13 + cp $2 + jr c, .asm_ca04 +.asm_c9f2 + call Func_089b + and $3 + ld c, a + ld b, $0 + ld hl, Unknown_ca0a + add hl, bc + ld a, [$d0bb] + cp [hl] + jr z, .asm_c9f2 +.asm_ca04 + ld a, c + call Func_ca8f + db $34 + ret + +Unknown_ca0a: ; ca0a (3:4a04) +INCBIN "baserom.gbc",$ca0a,$ca0e - $ca0a + +Func_ca0e: ; ca0e (3:4a0e) + ld a, [$d32e] + cp $b + jr z, .asm_ca68 + call Func_ca69 + db $22 + or a + jr nz, .asm_ca4a + call Func_ca69 + db $40 + cp $7 + jr z, .asm_ca68 + or a + jr z, .asm_ca33 + cp $2 + jr z, .asm_ca62 + ld c, $1 + call Func_ca8f + db $40 + jr .asm_ca62 +.asm_ca33 + call Func_ca69 + db $3f + cp $7 + jr z, .asm_ca68 + or a + jr z, .asm_ca68 + cp $2 + jr z, .asm_ca68 + ld c, $1 + call Func_ca8f + db $3f + jr .asm_ca68 +.asm_ca4a + call Func_089b + ld c, $1 + and $3 + or a + jr z, .asm_ca56 + ld c, $0 +.asm_ca56 + call Func_ca8f + db $41 + jr .asm_ca5c +.asm_ca5c + ld c, $7 + call Func_ca8f + db $40 +.asm_ca62 + ld c, $7 + call Func_ca8f + db $3f +.asm_ca68 + ret + +Func_ca69: ; ca69 (3:4a69) + call Func_cab3 +Func_ca6c: ; ca6c (3:4a6c) + push hl + push bc + call Func_cb1d + ld c, [hl] + ld a, [$d3d1] +.asm_ca75 + bit 0, a + jr nz, .asm_ca7f + srl a + srl c + jr .asm_ca75 +.asm_ca7f + and c + pop bc + pop hl + or a + ret +; 0xca84 + +INCBIN "baserom.gbc",$ca84,$ca8f - $ca84 + +Func_ca8f: ; ca8f (3:4a8f) + call Func_cab3 + push hl + push bc + call Func_cb1d + ld a, [$d3d1] +.asm_ca9a + bit 0, a + jr nz, .asm_caa4 + srl a + sla c + jr .asm_ca9a +.asm_caa4 + ld a, [$d3d1] + and c + ld c, a + ld a, [$d3d1] + cpl + and [hl] + or c + ld [hl], a + pop bc + pop hl + ret + +Func_cab3: ; cab3 (3:4ab3) + push hl + ld hl, [sp+$4] + push bc + ld c, [hl] + inc hl + ld b, [hl] + ld a, [bc] + inc bc + ld [hl], b + dec hl + ld [hl], c + pop bc + pop hl + ret +; 0xcac2 + +INCBIN "baserom.gbc",$cac2,$cb1d - $cac2 + +Func_cb1d: ; cb1d (3:4b1d) + push bc + ld c, a + ld b, $0 + sla c + rl b + ld hl, Unknown_cb37 + add hl, bc + ld a, [hli] + ld c, a + ld a, [hl] + ld [$d3d1], a + ld b, $0 + ld hl, $d3d2 + add hl, bc + pop bc + ret + +Unknown_cb37: ; cb37 (3:4b37) +INCBIN "baserom.gbc",$cb37,$cc42 - $cb37 + +RST20: ; cc42 (3:4c42) + pop hl + ld a, l + ld [$d413], a + ld a, h + ld [$d414], a + xor a + ld [$d412], a +.asm_cc4f + call Func_3aed + ld a, [$d412] + or a + jr z, .asm_cc4f + ld hl, $d413 + ld a, [hli] + ld c, a + ld b, [hl] + push bc + ret +; 0xcc60 + +INCBIN "baserom.gbc",$cc60,$cd98 - $cc60 + +Unknown_cd98: ; cd98 (3:4d98) +INCBIN "baserom.gbc",$cd98,$d336 - $cd98 + +DeckMachine_d336: ; d336 (3:5336) + push bc + call Func_c2a3 + call Func_379b + ld a, MUSIC_DECKMACHINE + call PlaySong + call Func_04a2 + xor a + ld [$ff92], a + ld [$ff93], a + farcall Func_1288c + call EnableLCD + pop bc + ld a, c + or a + jr z, .asm_d360 + dec a + ld [$d0a9], a + farcallx $2, $7a04 + jr .asm_d364 +.asm_d360 + farcallx $2, $719d +.asm_d364 + call Func_37a0 + call $42d4 + jp $4c64 +; 0xd36d + +INCBIN "baserom.gbc",$d36d,$fc2b - $d36d + +Func_fc2b: ; fc2b (3:7c2b) + ld a, [$d0c3] + cp $2 + jr c, .asm_fc34 + ld a, $2 +.asm_fc34 + rlca + ld c, a + ld b, $0 + ld hl, PointerTable_fc4c + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + ld a, $b0 + ld [$d0c8], a + ld a, $3 + ld [$d0c9], a + jp Func_c935 + +PointerTable_fc4c: ; fc4c (3:7c4c) + dw Unknown_fc64 + dw Unknown_fc68 + dw Unknown_fc60 + +INCBIN "baserom.gbc",$fc52,$fc60 - $fc52 + +Unknown_fc60: ; fc60 (3:7c60) +INCBIN "baserom.gbc",$fc60,$fc64 - $fc60 + +Unknown_fc64: ; fc64 (3:7c64) +INCBIN "baserom.gbc",$fc64,$fc68 - $fc64 + +Unknown_fc68: ; fc68 (3:7c68) +INCBIN "baserom.gbc",$fc68,$fcad - $fc68 + +Func_fcad: ; fcad (3:7cad) +INCBIN "baserom.gbc",$fcad,$10000 - $fcad diff --git a/src/engine/bank4.asm b/src/engine/bank4.asm new file mode 100755 index 0000000..f144aa6 --- /dev/null +++ b/src/engine/bank4.asm @@ -0,0 +1,1147 @@ +INCBIN "baserom.gbc",$10000,$10059 - $10000 + +Func_10059: ; 10059 (4:4059) +INCBIN "baserom.gbc",$10059,$100a2 - $10059 + +Func_100a2: ; 100a2 (4:40a2) +INCBIN "baserom.gbc",$100a2,$1029e - $100a2 + +Medal_1029e: ; 1029e (4:429e) + sub $8 + ld c, a + ld [$d115], a + ld a, [$d291] + push af + push bc + call Func_379b + ld a, MUSIC_STOP + call PlaySong + farcall Func_70000 + call DisableLCD + call $4000 + ld a, $fa + ld [$d114], a + call $410c + pop bc + ld a, c + add a + ld c, a + ld b, $0 + ld hl, Unknown_1030b + add hl, bc + ld a, [hli] + ld [$ce3f], a + ld a, [hl] + ld [$ce40], a + call $4031 + ld a, MUSIC_MEDAL + call PlaySong + ld a, $ff + ld [$d116], a +.asm_102e2 + call Func_3c48 + ld a, [$d116] + inc a + ld [$d116], a + and $f + jr nz, .asm_102e2 + call $4197 + ld a, [$d116] + cp $e0 + jr nz, .asm_102e2 + ld hl, $038b + call $2c73 + call $3c96 + call Func_37a0 + pop af + ld [$d291], a + ret + +Unknown_1030b: ; 1030b (4:430b) +INCBIN "baserom.gbc",$1030b,$1031b - $1030b + +BoosterPack_1031b: ; 1031b (4:431b) + ld c, a + ld a, [$d291] + push af + push bc + call DisableLCD + call $4000 + xor a + ld [$ccf3], a + pop bc + push bc + ld b, $0 + ld hl, $43a5 + add hl, bc + ld a, [hl] + ld c, a + add a + add a + ld c, a + ld hl, $43c2 + add hl, bc + ld a, [hli] + push hl + ld bc, $0600 + call $70ca + pop hl + ld a, [hli] + ld [$ce43], a + xor a + ld [$ce44], a + ld a, [hli] + ld [$ce3f], a + ld a, [hl] + ld [$ce40], a + call $4031 + call Func_379b + ld a, MUSIC_BOOSTERPACK + call PlaySong + pop bc + ld a, c + farcallx $7, $61c4 + ld hl, $0387 + ld a, [$d117] + cp $1 + jr nz, .asm_10373 + ld hl, $0388 +.asm_10373 + call $2c73 + call $3c96 + call Func_37a0 + ld hl, $0389 + call $2c73 + call DisableLCD + call Func_1288c + call Func_099c + ld a, $1 + ld [$cac0], a + ld a, $4 + ld [$ccf3], a + farcallx $1, $7599 + farcall Func_c1a4 + call Func_3c48 + pop af + ld [$d291], a + ret +; 0x103a5 + +INCBIN "baserom.gbc",$103a5,$103d2 - $103a5 + +Func_103d2: ; 103d2 (4:43d2) +INCBIN "baserom.gbc",$103d2,$103d3 - $103d2 + +Duel_Init: ; 103d3 (4:43d3) + ld a, [$d291] + push af + call DisableLCD + call $4000 + ld a, $4 + ld [$ccf3], a + ld de, $000c + ld bc, $1406 + call Func_1e7c ; LoadTextBoxBorder + ld a, [$cc19] + add a + add a + ld c, a + ld b, $0 + ld hl, $445b + add hl, bc + ld a, [hli] + ld [$ce3f], a + ld a, [hli] + ld [$ce40], a + push hl + ld a, [$cc16] + ld [$ce41], a + ld a, [$cc17] + ld [$ce42], a + ld hl, $4451 + call $51b3 ; LoadDuelistName + pop hl + ld a, [hli] + ld [$ce3f], a + ld c, a + ld a, [hli] + ld [$ce40], a + or c + jr z, .asm_10425 + ld hl, $4456 + call $51b3 ; LoadDeckName + +.asm_10425 + ld bc, $0703 + ld a, [$cc15] + call Func_3e2a ; LoadDuelistPortrait + ld a, [wMatchStartTheme] + call PlaySong + call $4031 + call Func_3c48 + ld bc, $2f1d + ld de, $1211 + call Func_2a1a + call $2a00 ; wait for the user to press a or b + call $3c96 + call Func_10ab4 ; fade out + pop af + ld [$d291], a + ret +; 0x10451 + +INCBIN "baserom.gbc",$10451,$10548 - $10451 + +Func_10548: ; 10548 (4:4548) +INCBIN "baserom.gbc",$10548,$10756 - $10548 + +Func_10756: ; 10756 (4:4756) +INCBIN "baserom.gbc",$10756,$10a9b - $10756 + +Func_10a9b: ; 10a9b (4:4a9b) +INCBIN "baserom.gbc",$10a9b,$10ab4 - $10a9b + +Func_10ab4: ; 10ab4 (4:4ab4) +INCBIN "baserom.gbc",$10ab4,$10af9 - $10ab4 + +Func_10af9: ; 10af9 (4:4af9) +INCBIN "baserom.gbc",$10af9,$10e28 - $10af9 + +Func_10e28: ; 10e28 (4:4e28) +INCBIN "baserom.gbc",$10e28,$10e55 - $10e28 + +Func_10e55: ; 10e55 (4:4e55) + ld a, [$d336] + ld [$d4cf], a + ld a, [$d33e] + or a + jr nz, .asm_10e65 + call Func_10e71 + ret +.asm_10e65 + cp $2 + jr z, .asm_10e6d + call Func_11060 + ret +.asm_10e6d + call LoadOverworldMapSelection + ret + +Func_10e71: ; 10e71 (4:4e71) + ld a, [$ff91] + and $f0 + jr z, .asm_10e83 + farcall Func_c5d5 + ld [$d334], a + call Func_10e97 + jr .asm_10e96 +.asm_10e83 + ld a, [$ff91] + and $1 + jr z, .asm_10e96 + ld a, $2 + call Func_3796 + call Func_11016 + call Func_11024 + jr .asm_10e96 +.asm_10e96 + ret + +Func_10e97: ; 10e97 (4:4e97) + push hl + pop hl + ld a, [$d32e] + rlca + rlca + ld c, a + ld a, [$d334] + add c + ld c, a + ld b, $0 + ld hl, Unknown_10ebc + add hl, bc + ld a, [hl] + or a + jr z, .asm_10eb9 + ld [$d32e], a + call Func_10f2e + ld a, $1 + call Func_3796 +.asm_10eb9 + pop bc + pop hl + ret + +Unknown_10ebc: ; 10ebc (4:4ebc) +INCBIN "baserom.gbc",$10ebc,$10efd - $10ebc + +Func_10efd: ; 10efd (4:4efd) + push hl + push de + rlca + ld e, a + ld d, $0 + ld hl, Unknown_10f14 + add hl, de + pop de + ld a, [hli] + add $8 + add d + ld d, a + ld a, [hl] + add $10 + add e + ld e, a + pop hl + ret + +Unknown_10f14: ; 10f14 (4:4f14) +INCBIN "baserom.gbc",$10f14,$10f2e - $10f14 + +Func_10f2e: ; 10f2e (4:4f2e) + push hl + push de + ld de, $0101 + call Func_22ae + call Func_10f4a + rlca + ld e, a + ld d, $0 + ld hl, Unknown_397b + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call Func_2c29 + pop de + pop hl + ret + +Func_10f4a: ; 10f4a (4:4f4a) + push bc + ld a, [$d32e] + cp $2 + jr nz, .asm_10f5f + ld c, a + ld a, $1e + farcall Func_ca6c + or a + ld a, c + jr nz, .asm_10f5f + ld a, $d +.asm_10f5f + pop bc + ret + +LoadOverworldMapSelection: ; 10f61 (4:4f61) + push hl + push bc + ld a, [$d32e] + rlca + rlca + ld c, a + ld b, $0 + ld hl, OverworldMapIndexes + add hl, bc + ld a, [hli] + ld [$d0bb], a + ld a, [hli] + ld [$d0bc], a + ld a, [hli] + ld [$d0bd], a + ld a, $0 + ld [$d0be], a + ld hl, $d0b4 + set 4, [hl] + pop bc + pop hl + ret + +INCLUDE "data/overworld_indexes.asm" + +Func_10fbc: ; 10fbc (4:4fbc) + ld a, $25 + farcall Func_1299f + ld c, $2 + call Func_3dbf + ld a, $80 + ld [hli], a + ld a, $10 + ld [hl], a + ld b, $34 + ld a, [$cab4] + cp $2 + jr nz, .asm_10fd8 + ld b, $37 +.asm_10fd8 + ld a, b + farcall Func_12ab5 + ret + +Func_10fde: ; 10fde (4:4fde) + ld a, [$d32e] + ld [$d33d], a + xor a + ld [$d33e], a + ld a, $25 + call Func_1299f + ld a, [$d4cf] + ld [$d33b], a + ld b, $35 + ld a, [$cab4] + cp $2 + jr nz, .asm_10ffe + ld b, $38 +.asm_10ffe + ld a, b + ld [$d33c], a + call Func_12ab5 + ld a, $3e + farcall Func_ca6c + or a + jr nz, .asm_11015 + ld c, $f + call Func_3dbf + set 7, [hl] +.asm_11015 + ret + +Func_11016: ; 11016 (4:5016) + ld a, [$d33b] + ld [$d4cf], a + ld a, [$d33c] + inc a + call Func_12ab5 + ret + +Func_11024: ; 11024 (4:5024) + ld a, $57 + call Func_3796 + ld a, [$d336] + ld [$d4cf], a + ld c, $f + call Func_3dbf + set 2, [hl] + ld hl, Unknown_1229f + ld a, [$d33d] + dec a + add a + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$d32e] + dec a + add a + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld [$d33f], a + ld a, [hl] + ld [$d340], a + ld a, $1 + ld [$d33e], a + xor a + ld [$d341], a + ret + +Func_11060: ; 11060 (4:5060) + ld a, [$d336] + ld [$d4cf], a + ld a, [$d341] + or a + jp nz, Func_11184 + ld a, [$d33f] + ld l, a + ld a, [$d340] + ld h, a + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + and b + cp $ff + jr z, .asm_110a0 + ld a, c + or b + jr nz, .asm_11094 + ld a, [$d33d] + ld e, a + ld a, [$d32e] + cp e + jr z, .asm_110a0 + ld de, $0000 + call Func_10efd + ld b, d + ld c, e +.asm_11094 + ld a, l + ld [$d33f], a + ld a, h + ld [$d340], a + call Func_110a6 + ret +.asm_110a0 + ld a, $2 + ld [$d33e], a + ret + +Func_110a6: ; 110a6 (4:50a6) + push hl + push bc + ld c, $2 + call Func_3dbf + pop bc + ld a, b + sub [hl] + ld [$d343], a + ld a, $0 + sbc $0 + ld [$d344], a + inc hl + ld a, c + sub [hl] + ld [$d345], a + ld a, $0 + sbc $0 + ld [$d346], a + ld a, [$d343] + ld b, a + ld a, [$d344] + bit 7, a + jr z, .asm_110d8 + ld a, [$d343] + cpl + inc a + ld b, a +.asm_110d8 + ld a, [$d345] + ld c, a + ld a, [$d346] + bit 7, a + jr z, .asm_110e9 + ld a, [$d345] + cpl + inc a + ld c, a +.asm_110e9 + ld a, b + cp c + jr c, .asm_110f2 + call Func_11102 + jr .asm_110f5 +.asm_110f2 + call Func_1113e +.asm_110f5 + xor a + ld [$d347], a + ld [$d348], a + farcall Func_c5e9 + pop hl + ret + +Func_11102: ; 11102 (4:5102) + ld a, b + ld [$d341], a + ld e, a + ld d, $0 + ld hl, $d343 + xor a + ld [hli], a + bit 7, [hl] + jr z, .asm_11115 + dec a + jr .asm_11116 +.asm_11115 + inc a +.asm_11116 + ld [hl], a + ld b, c + ld c, $0 + call Func_3c5a + ld a, [$d346] + bit 7, a + jr z, .asm_11127 + call Func_11179 +.asm_11127 + ld a, c + ld [$d345], a + ld a, b + ld [$d346], a + ld hl, $d344 + ld a, $1 + bit 7, [hl] + jr z, .asm_1113a + ld a, $3 +.asm_1113a + ld [$d334], a + ret + +Func_1113e: ; 1113e (4:513e) + ld a, c + ld [$d341], a + ld e, a + ld d, $0 + ld hl, $d345 + xor a + ld [hli], a + bit 7, [hl] + jr z, .asm_11151 + dec a + jr .asm_11152 +.asm_11151 + inc a +.asm_11152 + ld [hl], a + ld c, $0 + call Func_3c5a + ld a, [$d344] + bit 7, a + jr z, .asm_11162 + call Func_11179 +.asm_11162 + ld a, c + ld [$d343], a + ld a, b + ld [$d344], a + ld hl, $d346 + ld a, $2 + bit 7, [hl] + jr z, .asm_11175 + ld a, $0 +.asm_11175 + ld [$d334], a + ret + +Func_11179: ; 11179 (4:5179) + ld a, c + cpl + add $1 + ld c, a + ld a, b + cpl + adc $0 + ld b, a + ret + +Func_11184: ; 11184 (4:5184) + ld a, [$d347] + ld d, a + ld a, [$d348] + ld e, a + ld c, $2 + call Func_3dbf + ld a, [$d343] + add d + ld d, a + ld a, [$d344] + adc [hl] + ld [hl], a + inc hl + ld a, [$d345] + add e + ld e, a + ld a, [$d346] + adc [hl] + ld [hl], a + ld a, d + ld [$d347], a + ld a, e + ld [$d348], a + ld hl, $d341 + dec [hl] + ret +; 0x111b3 + +INCBIN "baserom.gbc",$111b3,$111e9 - $111b3 + +Func_111e9: ; 111e9 (4:51e9) +INCBIN "baserom.gbc",$111e9,$1124d - $111e9 + +Func_1124d: ; 1124d (4:524d) +INCBIN "baserom.gbc",$1124d,$11320 - $1124d + +Func_11320: ; 11320 (4:5320) +INCBIN "baserom.gbc",$11320,$11416 - $11320 + +Func_11416: ; 11416 (4:5416) +INCBIN "baserom.gbc",$11416,$11430 - $11416 + +Func_11430: ; 11430 (4:5430) +INCBIN "baserom.gbc",$11430,$1162a - $11430 + +INCLUDE "data/map_scripts.asm" + +INCBIN "baserom.gbc",$1184a,$11857 - $1184a + +Func_11857: ; 11857 (4:5857) +INCBIN "baserom.gbc",$11857,$1217b - $11857 + +Unknown_1217b: ; 1217b (4:617b) +INCBIN "baserom.gbc",$1217b,$1229f - $1217b + +Unknown_1229f: ; 1229f (4:629f) +INCBIN "baserom.gbc",$1229f,$126d1 - $1229f + +Func_126d1: ; 126d1 (4:66d1) + call Func_099c + ld hl, $cac0 + inc [hl] + farcall Func_70018 + ld a, $ff + ld [$d627], a +.asm_126e1 + ld a, $c2 + ld [$ff97], a + farcall Func_c1f8 + farcall Func_1d078 + ld a, [$d628] + ld hl, PointerTable_126fc + call JumpToFunctionInTable + jr c, .asm_126e1 + jr Func_126d1 + + scf + ret + +PointerTable_126fc + dw CardPop_12768 + dw Func_12741 + dw Func_12704 + dw Func_1277e + +Func_12704: ; 12704 (4:6704) + farcall Func_c1b1 + call Func_128a9 + farcall Func_1996e + call EnableExtRAM + ld a, [$a007] + ld [$d421], a + ld a, [$a006] + ld [$ce47], a + call DisableExtRAM + ld a, MUSIC_STOP + call PlaySong + farcall Func_70000 + ld a, $9 + ld [$d111], a + call Func_39fc + farcall Func_1d306 + ld a, $0 + ld [$d0b5], a + farcallx $03, Func_383d + or a + ret + +Func_12741: ; 12741 (4:6741) + ld a, MUSIC_STOP + call PlaySong + call Func_11320 + jr nc, Func_12704 + farcall Func_c1ed + farcall Func_70000 + call EnableExtRAM + xor a + ld [$ba44], a + call DisableExtRAM + ld a, $0 + ld [$d0b5], a + farcallx $03, Func_383d + or a + ret + +CardPop_12768: ; 12768 (4:6768) + ld a, MUSIC_CARDPOP + call PlaySong + bank1call Func_7571 + farcall Func_c1a4 + call Func_3c48 + ld a, MUSIC_STOP + call PlaySong + scf + ret + +Func_1277e: ; 1277e (4:677e) + ld a, MUSIC_STOP + call PlaySong + farcall Func_c9cb + farcallx $04, Func_3a40 + farcall Func_70000 + ld a, $5 + ld [$d0b5], a + farcallx $03, Func_383d + or a + ret +; 0x1279a + +INCBIN "baserom.gbc",$1279a,$12871 - $1279a + +Func_12871: ; 12871 (4:6871) +INCBIN "baserom.gbc",$12871,$1288c - $12871 + +Func_1288c: ; 1288c (4:688c) +INCBIN "baserom.gbc",$1288c,$128a9 - $1288c + +Func_128a9: ; 128a9 (4:68a9) +INCBIN "baserom.gbc",$128a9,$1296e - $128a9 + +Func_1296e: ; 1296e (4:696e) +INCBIN "baserom.gbc",$1296e,$1299f - $1296e + +Func_1299f: ; 1299f (4:699f) + push af + ld a, [$d5d7] + or a + jr z, .asm_129a8 + pop af + ret +.asm_129a8 + pop af + push bc + push hl + call Func_12c05 + ld [$d5d3], a + xor a + ld [$d4cf], a + call Func_3db7 + ld bc, $0010 +.asm_129bb + ld a, [hl] + or a + jr z, .asm_129cf + add hl, bc + ld a, [$d4cf] + inc a + ld [$d4cf], a + cp $10 + jr nz, .asm_129bb + rst $38 + scf + jr .asm_129d6 +.asm_129cf + ld a, $1 + ld [hl], a + call Func_129d9 + or a +.asm_129d6 + pop hl + pop bc + ret + +Func_129d9: ; 129d9 (4:69d9) + push hl + push bc + push hl + inc hl + ld c, $f + xor a +.asm_129e0 + ld [hli], a + dec c + jr nz, .asm_129e0 + pop hl + ld bc, $0004 + add hl, bc + ld a, [$d5d3] + ld [hli], a + ld a, $ff + ld [hl], a + ld bc, $0009 + add hl, bc + ld a, $ff + ld [hl], a + pop bc + pop hl + ret +; 0x129fa + +INCBIN "baserom.gbc",$129fa,$12a21 - $129fa + +Func_12a21: ; 12a21 (4:6a21) +INCBIN "baserom.gbc",$12a21,$12ab5 - $12a21 + +Func_12ab5: ; 12ab5 (4:6ab5) + push hl + push af + ld c, $5 + call Func_3dbf + pop af + cp [hl] + pop hl + ret z + push hl + call Func_12ae2 + call Func_12b13 + pop hl + ret +; 0x12ac9 + +INCBIN "baserom.gbc",$12ac9,$12ae2 - $12ac9 + +Func_12ae2: ; 12ae2 (4:6ae2) + push bc + push af + call Func_3db7 + pop af + push hl + ld bc, $0005 + add hl, bc + ld [hli], a + push hl + ld l, $6 + farcall Func_8020f + farcall Func_80229 + pop hl + ld a, [$d4c6] + ld [hli], a + ld a, [$d4c4] + ld [hli], a + ld c, a + ld a, [$d4c5] + ld [hli], a + ld b, a + ld a, $3 + add c + ld [hli], a + ld a, $0 + adc b + ld [hli], a + pop hl + pop bc + ret + +Func_12b13: ; 12b13 (4:6b13) + push bc + push de + push hl +.asm_12b16 + push hl + ld bc, $0006 + add hl, bc + ld a, [hli] + ld [$d4c6], a + inc hl + inc hl + ld a, [hl] + ld [$d4c4], a + add $4 + ld [hli], a + ld a, [hl] + ld [$d4c5], a + adc $0 + ld [hl], a + ld de, $d23e + ld bc, $0004 + call Func_3bf5 + pop hl + ld de, $d23e + ld a, [de] + call Func_12b6a + inc de + ld a, [de] + call Func_12b89 + jr c, .asm_12b16 + inc de + ld bc, $0002 + add hl, bc + push hl + ld bc, $000d + add hl, bc + ld b, [hl] + pop hl + ld a, [de] + bit 0, b + jr z, .asm_12b5a + cpl + inc a +.asm_12b5a + add [hl] + ld [hli], a + inc de + ld a, [de] + bit 1, b + jr z, .asm_12b64 + cpl + inc a +.asm_12b64 + add [hl] + ld [hl], a + pop hl + pop de + pop bc + ret + +Func_12b6a: ; 12b6a (4:6b6a) + ld [$d4ca], a + push hl + push bc + push de + push hl + ld bc, $0006 + add hl, bc + ld a, [hli] + ld [$d4c6], a + ld a, [hli] + ld [$d4c4], a + ld a, [hli] + ld [$d4c5], a + pop hl + call Func_3d72 + pop de + pop bc + pop hl + ret + +Func_12b89: ; 12b89 (4:6b89) + push hl + push bc + ld bc, $000e + add hl, bc + ld [hl], a + or a + jr nz, .asm_12ba4 + ld bc, $fff9 + add hl, bc + ld a, [hli] + add $3 + ld c, a + ld a, [hli] + adc $0 + ld b, a + ld a, c + ld [hli], a + ld a, b + ld [hl], a + scf +.asm_12ba4 + pop bc + pop hl + ret + +Func_12ba7: ; 12ba7 (4:6ba7) +INCBIN "baserom.gbc",$12ba7,$12bcd - $12ba7 + +Func_12bcd: ; 12bcd (4:6bcd) +INCBIN "baserom.gbc",$12bcd,$12c05 - $12bcd + +Func_12c05: ; 12c05 (4:6c05) + push hl + push bc + push de + ld b, a + ld d, $0 + ld a, [$d618] + ld c, a + ld hl, $d5d8 + or a + jr z, .asm_12c22 +.asm_12c15 + inc hl + ld a, [hl] + cp b + jr z, .asm_12c3a + inc hl + ld a, [hli] + add [hl] + ld d, a + inc hl + dec c + jr nz, .asm_12c15 +.asm_12c22 + ld a, [$d618] + cp $10 + jr nc, .asm_12c48 + inc a + ld [$d618], a + inc hl + push hl + ld a, b + ld [hli], a + call Func_12c4f + push af + ld a, d + ld [hli], a + pop af + ld [hl], a + pop hl +.asm_12c3a + dec hl + inc [hl] + inc hl + inc hl + ld a, [hli] + add [hl] + cp $81 + jr nc, .asm_12c48 + ld a, d + or a + jr .asm_12c4b +.asm_12c48 + rst $38 + xor a + scf +.asm_12c4b + pop de + pop bc + pop hl + ret + +Func_12c4f: ; 12c4f (4:6c4f) + push af + xor a + ld [$d4cb], a + ld a, d + ld [$d4ca], a + pop af + farcall Func_8025b + ret + +Func_12c5e: ; 12c5e (4:6c5e) +INCBIN "baserom.gbc",$12c5e,$12c7f - $12c5e + +Func_12c7f: ; 12c7f (4:6c7f) +INCBIN "baserom.gbc",$12c7f,$131b3 - $12c7f + +Func_131b3: ; 131b3 (4:71b3) +INCBIN "baserom.gbc",$131b3,$131d3 - $131b3 + +Func_131d3: ; 131d3 (4:71d3) +INCBIN "baserom.gbc",$131d3,$1344d - $131d3 + +Func_1344d: ; 1344d (4:744d) + call Func_379b + ld a, MUSIC_MEDAL + call PlaySong + ld hl, $07e6 + call $2c73 + call $3c96 + call Func_37a0 + ret +; 0x13462 + +INCBIN "baserom.gbc",$13462,$13485 - $13462 + +Func_13485: ; 13485 (4:7485) + call EnableExtRAM + ld a, [$ba68] + or a + ret z + ld a, [$ba56] + ld [$ce43], a + ld a, [$ba57] + ld [$ce44], a + call DisableExtRAM + call Func_379b + ld a, MUSIC_MEDAL + call PlaySong + ld hl, $07e8 + call $2c73 + call $3c96 + call Func_37a0 + ret +; 0x134b1 + +INCBIN "baserom.gbc",$134b1,$14000 - $134b1 diff --git a/src/engine/bank6.asm b/src/engine/bank6.asm new file mode 100755 index 0000000..7535b3f --- /dev/null +++ b/src/engine/bank6.asm @@ -0,0 +1,175 @@ +INCBIN "baserom.gbc",$18000,$1996e - $18000 + +Func_1996e: ; 1996e (6:596e) + call EnableExtRAM + ld a, $c2 + ld [$ff97], a + ld hl, $a100 + ld bc, $1607 +.asm_1997b + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_1997b + ld a, $5 + ld hl, $a350 + call Func_199e0 + ld a, $7 + ld hl, $a3a4 + call Func_199e0 + ld a, $9 + ld hl, $a3f8 + call Func_199e0 + call EnableExtRAM + ld hl, $a100 + ld a, $80 +.asm_199a2 + ld [hl], a + inc l + jr nz, .asm_199a2 + ld hl, $bc00 + xor a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, $bb00 + ld c, $10 +.asm_199b2 + ld [hl], $0 + ld de, $0010 + add hl, de + dec c + jr nz, .asm_199b2 + ld a, $2 + ld [$a003], a + ld a, $2 + ld [$a006], a + ld [$ce47], a + xor a + ld [$a007], a + ld [$a009], a + ld [$a004], a + ld [$a005], a + ld [$a00a], a + farcall Func_8cf9 + call DisableExtRAM + ret + +Func_199e0: ; 199e0 (6:59e0) + push de + push bc + push hl + call LoadDeck + jr c, .asm_19a0e + call Func_19a12 + pop hl + call EnableExtRAM + push hl + ld de, $c590 +.asm_199f3 + ld a, [de] + inc de + ld [hli], a + or a + jr nz, .asm_199f3 + pop hl + push hl + ld de, $0018 + add hl, de + ld de, $c400 + ld c, $3c +.asm_19a04 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_19a04 + call DisableExtRAM + or a +.asm_19a0e + pop hl + pop bc + pop de + ret + +Func_19a12: ; 19a12 (6:5a12) + ld hl, $cce9 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $c590 + call Func_2e89 + ret +; 0x19a1f + +INCBIN "baserom.gbc",$19a1f,$1a61f - $19a1f + +Func_1a61f: ; 1a61f (6:661f) + push af + ld de, $389f + call Func_2275 + pop af + or a + jr nz, .asm_1a640 + ld a, $40 + call $663b + ld a, $5f + call $663b + ld a, $76 + call $663b + ld a, $c1 + ld hl, $0191 + jr .asm_1a660 +.asm_1a640 + ld hl, $018f + cp $1e + jr z, .asm_1a660 + cp $43 + jr z, .asm_1a660 + ld hl, $0192 + cp $64 + jr z, .asm_1a660 + ld hl, $0193 + cp $65 + jr z, .asm_1a660 + cp $66 + jr z, .asm_1a660 + ld hl, $0190 +.asm_1a660 + push hl + ld e, a + ld d, $0 + call $2f10 + call Func_379b + ld a, MUSIC_MEDAL + call PlaySong + ld hl, $cc27 + ld a, [hli] + ld h, [hl] + ld l, a + bank1call $2ebb + ld a, $c2 + ld [$ff97], a + pop hl + bank1call $5e5f +.asm_1a680 + call Func_378a + or a + jr nz, .asm_1a680 + call Func_37a0 + bank1call $5773 + ret +; 0x1a68d + +INCBIN "baserom.gbc",$1a68d,$1a6cc - $1a68d + +Func_1a6cc: ; 1a6cc (6:66cc) + ret +; 0x1a6cd + +INCBIN "baserom.gbc",$1a6cd,$1ad89 - $1a6cd + +Func_1ad89: ; 1ad89 (6:6d89) +INCBIN "baserom.gbc",$1ad89,$1c000 - $1ad89 diff --git a/src/engine/bank7.asm b/src/engine/bank7.asm new file mode 100755 index 0000000..7622b0d --- /dev/null +++ b/src/engine/bank7.asm @@ -0,0 +1,314 @@ +INCBIN "baserom.gbc",$1c000,$1c056 - $1c000 + +Func_1c056: ; 1c056 (7:4056) + push hl + push bc + push de + ld a, [wCurMap] + add a + ld c, a + ld b, $0 + ld hl, WarpDataPointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld bc, $0005 + ld a, [wPlayerXCoord] + ld d, a + ld a, [wPlayerYCoord] + ld e, a +.asm_1c072 + ld a, [hli] + or [hl] + jr z, .asm_1c095 + ld a, [hld] + cp e + jr nz, .asm_1c07e + ld a, [hl] + cp d + jr z, .asm_1c081 +.asm_1c07e + add hl, bc + jr .asm_1c072 +.asm_1c081 + inc hl + inc hl + ld a, [hli] + ld [$d0bb], a + ld a, [hli] + ld [$d0bc], a + ld a, [hli] + ld [$d0bd], a + ld a, [$d334] + ld [$d0be], a +.asm_1c095 + pop de + pop bc + pop hl + ret + +INCLUDE "data/warp_data.asm" + +Func_1c33b: ; 1c33b (7:433b) + push hl + push bc + push de + ld a, [wCurMap] + add a + ld c, a + add a + add c + ld c, a + ld b, $0 + ld hl, MapSongs + add hl, bc + ld a, [hli] + ld [$d131], a + ld a, [hli] + ld c, a + ld a, [hli] + ld [$d28f], a + ld a, [hli] + ld [$d132], a + ld a, [hli] + ld [$d290], a + ld a, [hli] + ld [$d111], a + ld a, [$cab4] + cp $2 + jr nz, .asm_1c370 + ld a, c + or a + jr z, .asm_1c370 + ld [$d131], a +.asm_1c370 + pop de + pop bc + pop hl + ret + +INCLUDE "data/map_songs.asm" + +Func_1c440: ; 1c440 (7:4440) +INCBIN "baserom.gbc",$1c440,$1c485 - $1c440 + +Func_1c485: ; 1c485 (7:4485) +INCBIN "baserom.gbc",$1c485,$1c58e - $1c485 + +Func_1c58e: ; 1c58e (7:458e) +INCBIN "baserom.gbc",$1c58e,$1c5e9 - $1c58e + +Func_1c5e9: ; 1c5e9 (7:45e9) +INCBIN "baserom.gbc",$1c5e9,$1c610 - $1c5e9 + +Func_1c610: ; 1c610 (7:4610) +INCBIN "baserom.gbc",$1c610,$1c6f8 - $1c610 + +Func_1c6f8: ; 1c6f8 (7:46f8) +INCBIN "baserom.gbc",$1c6f8,$1c72e - $1c6f8 + +Func_1c72e: ; 1c72e (7:472e) +INCBIN "baserom.gbc",$1c72e,$1c768 - $1c72e + +Func_1c768: ; 1c768 (7:4768) +INCBIN "baserom.gbc",$1c768,$1c82e - $1c768 + +Func_1c82e: ; 1c82e (7:482e) +INCBIN "baserom.gbc",$1c82e,$1d078 - $1c82e + +Func_1d078: ; 1d078 (7:5078) + ld a, [$d627] + or a + jr z, .asm_1d0c7 +.asm_1d07e + ld a, MUSIC_STOP + call PlaySong + call Func_3ca0 + call $5335 + call $53ce + xor a + ld [$d635], a + ld a, $3c + ld [$d626], a +.asm_1d095 + call Func_3c48 + call Func_089b + call $5614 + ld hl, $d635 + inc [hl] + call Func_378a + or a + jr nz, .asm_1d0ae + farcall Func_10ab4 + jr .asm_1d07e +.asm_1d0ae + ld hl, $d626 + ld a, [hl] + or a + jr z, .asm_1d0b8 + dec [hl] + jr .asm_1d095 +.asm_1d0b8 + ld a, [$ff91] + and $9 + jr z, .asm_1d095 + ld a, $2 + call Func_3796 + farcall Func_10ab4 + +.asm_1d0c7 + call $50fa + call $511c + ld a, [$d628] + cp $2 + jr nz, .asm_1d0db + call $5289 + jr c, Func_1d078 + jr .asm_1d0e7 +.asm_1d0db + ld a, [$d628] + cp $1 + jr nz, .asm_1d0e7 + call $52b8 + jr c, Func_1d078 +.asm_1d0e7 + ld a, [$d628] + cp $0 + jr nz, .asm_1d0f3 + call $52dd + jr c, Func_1d078 +.asm_1d0f3 + call Func_3bdb + call Func_3ca0 + ret +; 0x1d0fa + +INCBIN "baserom.gbc",$1d0fa,$1d11c - $1d0fa + +Func_1d11c: ; 1d11c (7:511c) + ld a, MUSIC_PCMAINMENU + call PlaySong + call DisableLCD + farcallx $4, $4000 + ld de, $308f + call Func_2275 + call Func_3ca0 + xor a + ld [$cd08], a + call $51e1 + call $517f + ld a, $ff + ld [$d626], a + ld a, [$d627] + cp $4 + jr c, .asm_1d14f + ld a, [$d624] + or a + jr z, .asm_1d14f + ld a, $1 +.asm_1d14f + ld hl, $d636 + farcall Func_111e9 + farcallx $4, $4031 +.asm_1d15a + call Func_3c48 + call Func_089b + call Func_264b + push af + call $51e9 + pop af + jr nc, .asm_1d15a + ld a, [$ffb1] + cp e + jr nz, .asm_1d15a + ld [$d627], a + ld a, [$d624] + or a + jr nz, .asm_1d17a + inc e + inc e +.asm_1d17a + ld a, e + ld [$d628], a + ret +; 0x1d17f + +INCBIN "baserom.gbc",$1d17f,$1d306 - $1d17f + +Func_1d306: ; 1d306 (7:5306) +INCBIN "baserom.gbc",$1d306,$1d386 - $1d306 + +Titlescreen_1d386: ; 1d386 (7:5386) + call Func_378a + or a + jr nz, .asm_1d39f + call DisableLCD + ld a, MUSIC_TITLESCREEN + call PlaySong + ld bc, $0000 + ld a, $0 + call Func_3df3 + call Func_1d59c +.asm_1d39f + call Func_3ca0 + call Func_1d3a9 + call EnableLCD + ret + +Func_1d3a9: ; 1d3a9 (7:53a9) +INCBIN "baserom.gbc",$1d3a9,$1d42e - $1d3a9 + +Func_1d42e: ; 1d42e (7:542e) +INCBIN "baserom.gbc",$1d42e,$1d519 - $1d42e + +Titlescreen_1d519: ; 1d519 (7:5519) + ld a, MUSIC_TITLESCREEN + call PlaySong + call Func_1d42e + scf + ret +; 0x1d523 + +INCBIN "baserom.gbc",$1d523,$1d59c - $1d523 + +Func_1d59c: ; 1d59c (7:559c) +INCBIN "baserom.gbc",$1d59c,$1d6ad - $1d59c + +Credits_1d6ad: ; 1d6ad (7:56ad) + ld a, MUSIC_STOP + call PlaySong + call $5705 + call $4858 + xor a + ld [$d324], a + ld a, MUSIC_CREDITS + call PlaySong + farcallx $4, $4031 + call $57fc +.asm_1d6c8 + call Func_3c48 + call $5765 + call $580b + ld a, [$d633] + cp $ff + jr nz, .asm_1d6c8 + call $3c96 + ld a, $8 + farcallx $4, $6863 + ld a, MUSIC_STOP + call PlaySong + farcall Func_10ab4 + call $3ca4 + call $02d4 + call $5758 + call EnableLCD + call Func_3c48 + call DisableLCD + ld hl, $cabb + set 1, [hl] + call Func_3bdb + ret +; 0x1d705 + +INCBIN "baserom.gbc",$1d705,$20000 - $1d705 diff --git a/src/engine/home.asm b/src/engine/home.asm new file mode 100755 index 0000000..dd06781 --- /dev/null +++ b/src/engine/home.asm @@ -0,0 +1,4851 @@ +GLOBAL GrassEnergyCardGfx +GLOBAL TextOffsets + +; rst vectors +SECTION "rst00",ROM0[0] + ret +SECTION "rst08",ROM0[8] + ret +SECTION "rst10",ROM0[$10] + ret +SECTION "rst18",ROM0[$18] + jp RST18 +SECTION "rst20",ROM0[$20] + jp RST20 +SECTION "rst28",ROM0[$28] + jp RST28 +SECTION "rst30",ROM0[$30] + ret +SECTION "rst38",ROM0[$38] + ret + +; interrupts +SECTION "vblank",ROM0[$40] + jp VBlankHandler +SECTION "lcdc",ROM0[$48] + call $cacd + reti +SECTION "timer",ROM0[$50] + jp TimerHandler +SECTION "serial",ROM0[$58] + jp SerialHandler +SECTION "joypad",ROM0[$60] + reti + +SECTION "romheader",ROM0[$100] + nop + jp Start + +SECTION "start",ROM0[$150] +Start: ; 0150 (0:0150) + di + ld sp, $fffe + push af + xor a + ld [rIF], a + ld [rIE], a + call ZeroRAM + ld a, $1 + call BankswitchHome + xor a + call BankswitchRAM + call BankswitchVRAM_0 + call DisableLCD + pop af + ld [wInitialA], a + call DetectConsole + ld a, $20 + ld [wTileMapFill], a + call SetupVRAM + call SetupLCD + call SetupPalettes + call SetupSound_T + call SetupTimer + call ResetSerial + call CopyDMAFunction + call SetupExtRAM + ld a, BANK(Func_4000) + call BankswitchHome + ld sp, $e000 + jp Func_4000 + +VBlankHandler: ; 019b (0:019b) + push af + push bc + push de + push hl + ld a, [hBankROM] + push af + ld hl, wReentrancyFlag + bit 0, [hl] + jr nz, .done + set 0, [hl] + ld a, [wVBlankOAMCopyToggle] + or a + jr z, .no_oam_copy + call hDMAFunction ; DMA-copy $ca00-$ca9f to OAM memory + xor a + ld [wVBlankOAMCopyToggle], a +.no_oam_copy + ; flush scaling/windowing parameters + ld a, [hSCX] + ld [rSCX], a + ld a, [hSCY] + ld [rSCY], a + ld a, [hWX] + ld [rWX], a + ld a, [hWY] + ld [rWY], a + ; flush LCDC + ld a, [wLCDC] + ld [rLCDC], a + ei + call $cad0 + call FlushPalettes + ld hl, wVBlankCtr + inc [hl] + ld hl, wReentrancyFlag + res 0, [hl] +.done + pop af + call BankswitchHome + pop hl + pop de + pop bc + pop af + reti + +TimerHandler: ; 01e6 (0:01e6) + push af + push hl + push de + push bc + ei + call SerialTimerHandler + ; only trigger every fourth interrupt ≈ 60.24 Hz + ld hl, wCounterCtr + ld a, [hl] + inc [hl] + and $3 + jr nz, .done + ; increment the 60-60-60-255-255 counter + call IncrementCounter + ; check in-timer flag + ld hl, wReentrancyFlag + bit 1, [hl] + jr nz, .done + set 1, [hl] + ld a, [hBankROM] + push af + ld a, BANK(SoundTimerHandler_Ext) + call BankswitchHome + call SoundTimerHandler_Ext + pop af + call BankswitchHome + ; clear in-timer flag + ld hl, wReentrancyFlag + res 1, [hl] +.done + pop bc + pop de + pop hl + pop af + reti + +; increment timer counter by a tick +IncrementCounter: ; 021c (0:021c) + ld a, [wCounterEnable] + or a + ret z + ld hl, wCounter + inc [hl] + ld a, [hl] + cp 60 + ret c + ld [hl], $0 + inc hl + inc [hl] + ld a, [hl] + cp 60 + ret c + ld [hl], $0 + inc hl + inc [hl] + ld a, [hl] + cp 60 + ret c + ld [hl], $0 + inc hl + inc [hl] + ret nz + inc hl + inc [hl] + ret + +; setup timer to 16384/68 ≈ 240.94 Hz +SetupTimer: ; 0241 (0:0241) + ld b, $100 - 68 + ; ld b, $bc + call CheckForCGB + jr c, .asm_250 + ld a, [rKEY1] + and $80 + jr z, .asm_250 + ld b, $100 - 2*68 +.asm_250 + ld a, b + ld [rTMA], a + ld a, rTAC_16384_HZ + ld [rTAC], a + ld a, $7 + ld [rTAC], a + ret + +; carry flag: 0 if CGB +CheckForCGB: ; 025c (0:025c) + ld a, [wConsole] + cp CONSOLE_CGB + ret z + scf + ret + +; wait for vblank +WaitForVBlank: ; 0264 (0:0264) + push hl + ld a, [wLCDC] + bit 7, a + jr z, .asm_275 + ld hl, wVBlankCtr + ld a, [hl] +.asm_270 + halt + cp [hl] + jr z, .asm_270 +.asm_275 + pop hl + ret + +; turn LCD on +EnableLCD: ; 0277 (0:0277) + ld a, [wLCDC] ; + bit 7, a ; + ret nz ; assert that LCD is off + or $80 ; + ld [wLCDC], a ; + ld [rLCDC], a ; turn LCD on + ld a, $c0 + ld [wFlushPaletteFlags], a + ret + +; wait for vblank, then turn LCD off +DisableLCD: ; 028a (0:028a) + ld a, [rLCDC] ; + bit 7, a ; + ret z ; assert that LCD is on + ld a, [rIE] + ld [wIE], a + res 0, a ; + ld [rIE], a ; disable vblank interrupt +.asm_298 + ld a, [rLY] ; + cp $91 ; + jr nz, .asm_298 ; wait for vblank + ld a, [rLCDC] ; + and $7f ; + ld [rLCDC], a ; + ld a, [wLCDC] ; + and $7f ; + ld [wLCDC], a ; turn LCD off + xor a + ld [rBGP], a + ld [rOBP0], a + ld [rOBP1], a + ld a, [wIE] + ld [rIE], a + ret + +; set OBJ size: 8x8 +Set_OBJ_8x8: ; 02b9 (0:02b9) + ld a, [wLCDC] + and $fb + ld [wLCDC], a + ret + +; set OBJ size: 8x16 +Set_OBJ_8x16: ; 02c2 (0:02c2) + ld a, [wLCDC] + or $4 + ld [wLCDC], a + ret + +; set Window Display on +Set_WD_on: ; 02cb (0:02cb) + ld a, [wLCDC] + or $20 + ld [wLCDC], a + ret + +; set Window Display off +Set_WD_off: ; 02d4 (0:02d4) + ld a, [wLCDC] + and $df + ld [wLCDC], a + ret + +EnableInt_Timer: ; 02dd (0:02dd) + ld a, [rIE] + or $4 + ld [rIE], a + ret + +EnableInt_VBlank: ; 02e4 (0:02e4) + ld a, [rIE] + or $1 + ld [rIE], a + ret + +EnableInt_HBlank: ; 02eb (0:02eb) + ld a, [rSTAT] + or $8 + ld [rSTAT], a + xor a + ld [rIF], a + ld a, [rIE] + or $2 + ld [rIE], a + ret + +DisableInt_HBlank: ; 02fb (0:02fb) + ld a, [rSTAT] + and $f7 + ld [rSTAT], a + xor a + ld [rIF], a + ld a, [rIE] + and $fd + ld [rIE], a + ret + +SetupLCD: ; 030b (0:030b) + xor a + ld [rSCY], a + ld [rSCX], a + ld [rWY], a + ld [rWX], a + ld [$cab0], a + ld [$cab1], a + ld [$cab2], a + ld [hSCX], a + ld [hSCY], a + ld [hWX], a + ld [hWY], a + xor a + ld [wReentrancyFlag], a + ld a, $c3 ; $c3 = jp nn + ld [$cacd], a + ld [wVBlankFunctionTrampoline], a + ld hl, wVBlankFunctionTrampoline + 1 + ld [hl], NopF & $ff ; + inc hl ; load `jp NopF` + ld [hl], NopF >> $8 ; + ld a, $47 + ld [wLCDC], a + ld a, $1 + ld [MBC3LatchClock], a + ld a, $a + ld [MBC3SRamEnable], a +NopF: ; 0348 (0:0348) + ret + +DetectConsole: ; 0349 (0:0349) + ld b, CONSOLE_CGB + cp GBC + jr z, .asm_35b + call DetectSGB + ld b, CONSOLE_DMG + jr nc, .asm_35b + call InitSGB + ld b, CONSOLE_SGB +.asm_35b + ld a, b + ld [wConsole], a + cp CONSOLE_CGB + ret nz + ld a, CONSOLE_SGB + ld [rSVBK], a + call Func_07e7 + ret + +; initialize the palettes (both monochrome and color) +SetupPalettes: ; 036a (0:036a) + ld hl, wBGP + ld a, $e4 + ld [rBGP], a + ld [hli], a + ld [rOBP0], a + ld [rOBP1], a + ld [hli], a + ld [hl], a + xor a + ld [wFlushPaletteFlags], a + ld a, [wConsole] + cp CONSOLE_CGB + ret nz + ld de, wBufPalette + ld c, $10 +.asm_387 + ld hl, InitialPalette + ld b, $8 +.asm_38c + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_38c + dec c + jr nz, .asm_387 + call FlushBothCGBPalettes + ret + +InitialPalette: ; 0399 (0:0399) + RGB 28,28,24 + RGB 21,21,16 + RGB 10,10,08 + RGB 00,00,00 + +SetupVRAM: ; 03a1 (0:03a1) + call FillTileMap + call CheckForCGB + jr c, .asm_3b2 + call BankswitchVRAM_1 + call .asm_3b2 + call BankswitchVRAM_0 +.asm_3b2 + ld hl, $8000 + ld bc, $1800 +.asm_3b8 + xor a + ld [hli], a + dec bc + ld a, b + or c + jr nz, .asm_3b8 + ret + +; fill VARM tile map banks with [wTileMapFill] +FillTileMap: ; 03c0 (0:03c0) + call BankswitchVRAM_0 + ld hl, $9800 + ld bc, $0400 +.asm_3c9 + ld a, [wTileMapFill] + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_3c9 + ld a, [wConsole] + cp CONSOLE_CGB + ret nz + call BankswitchVRAM_1 + ld hl, $9800 + ld bc, $0400 +.asm_3e1 + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_3e1 + call BankswitchVRAM_0 + ret + +; zero work RAM & stack area ($C000-$EFFF, $FF80-$FF7F) +ZeroRAM: ; 03ec (0:03ec) + ld hl, $c000 + ld bc, $2000 +.asm_3f2 + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_3f2 + ld c, $80 + ld b, $70 + xor a +.asm_3fe + ld [$ff00+c], a + inc c + dec b + jr nz, .asm_3fe + ret + +Func_0404: ; 0404 (0:0404) + ld a, $c0 + jr asm_411 + +Func_0408: ; 0408 (0:0408) + or $80 + jr asm_411 + +Func_040c: ; 040c (0:040c) + ld [wBGP], a +asm_40f + ld a, $80 +asm_411 + ld [wFlushPaletteFlags], a + ld a, [wLCDC] + rla + ret c + push hl + push de + push bc + call FlushPalettes + pop bc + pop de + pop hl + ret + +Set_OBP0: ; 0423 (0:0423) + ld [wOBP0], a + jr asm_40f + +Set_OBP1: ; 0428 (0:0428) + ld [wOBP1], a + jr asm_40f + +; flushes non-CGB palettes from [wBGP], [wOBP0], [wOBP1] as well as CGB +; palettes from [wBufPalette..wBufPalette+$1f] (BG palette) and +; [wBufPalette+$20..wBufPalette+$3f] (sprite palette). +; only flushes if [wFlushPaletteFlags] is nonzero, and only flushes sprite +; palette if bit6 of that location is set. +FlushPalettes: ; 042d (0:042d) + ld a, [wFlushPaletteFlags] + or a + ret z + ; flush grayscale (non-CGB) palettes + ld hl, wBGP + ld a, [hli] + ld [rBGP], a + ld a, [hli] + ld [rOBP0], a + ld a, [hl] + ld [rOBP1], a + ld a, [wConsole] + cp CONSOLE_CGB + jr z, flushPaletteCGB +flushPaletteDone + xor a + ld [wFlushPaletteFlags], a + ret +flushPaletteCGB + ; flush BG palette (BGP) + ; if bit6 of [wFlushPaletteFlags] is set, flush OBP too + ld a, [wFlushPaletteFlags] + bit 6, a + jr nz, FlushBothCGBPalettes + ld b, $8 + call CopyPalette + jr flushPaletteDone + +FlushBothCGBPalettes: ; 0458 (0:0458) + xor a + ld b, $40 + ; flush BGP $00-$1f + call CopyPalette + ld a, $8 + ld b, $40 + ; flush OBP $00-$1f + call CopyPalette + jr flushPaletteDone + +CopyPalette: ; 0467 (0:0467) + add a + add a + add a + ld e, a + ld d, $0 + ld hl, $caf0 + add hl, de + ld c, $68 + bit 6, a + jr z, .asm_479 + ld c, $6a +.asm_479 + and $bf + ld e, a +.asm_47c + ld a, e + ld [$ff00+c], a + inc c +.asm_47f + ld a, [rSTAT] + and $2 + jr nz, .asm_47f + ld a, [hl] + ld [$ff00+c], a + ld a, [$ff00+c] + cp [hl] + jr nz, .asm_47f + inc hl + dec c + inc e + dec b + jr nz, .asm_47c + ret + +Func_0492: ; 0492 (0:0492) + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + call Func_04cf + jr .asm_49d +.asm_49b + ld [de], a + inc de +.asm_49d + ld a, [hli] + or a + jr nz, .asm_49b + ret + +Func_04a2: ; 04a2 (0:04a2) + call DisableLCD + call FillTileMap + xor a + ld [$cac2], a + ld a, [wConsole] + cp CONSOLE_SGB + ret nz + call EnableLCD ; + ld hl, SGB_04bf ; send SGB data + call SendSGB ; + call DisableLCD ; + ret + +SGB_04bf: ; 04bf (0:04bf) +INCBIN "baserom.gbc",$04bf,$04cf - $04bf + +Func_04cf: ; 04cf (0:04cf) + ld l, c + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld c, b + ld b, $98 + add hl, bc + ld e, l + ld d, h + ret + +; read joypad +ReadJoypad: ; 04de (0:04de) + ld a, $20 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + cpl + and $f + swap a + ld b, a + ld a, $10 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + cpl + and $f + or b + ld c, a ; joypad data + cpl + ld b, a + ld a, [hButtonsHeld] + xor c + and b + ld [hButtonsReleased], a + ld a, [hButtonsHeld] + xor c + and c + ld b, a + ld [hButtonsPressed], a + ld a, [hButtonsHeld] + and $f + cp $f + jr nz, asm_522 ; handle reset + call ResetSerial +Reset: ; 051b (0:051b) + ld a, [wInitialA] + di + jp Start +asm_522 + ld a, c + ld [hButtonsHeld], a + ld a, $30 + ld [rJOYP], a + ret + +; clear joypad hmem data +ClearJoypad: ; 052a (0:052a) + push hl + ld hl, hDPadRepeat + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + pop hl + ret + +Func_0536: ; 0536 (0:0536) +.loop + push af + call Func_053f + pop af + dec a + jr nz, .loop + ret + +Func_053f: ; 053f (0:053f) + push af + push hl + push de + push bc + ld hl, $cad3 + call CallIndirect + call WaitForVBlank + call ReadJoypad + call HandleDPadRepeat + ld a, [$cad5] + or a + jr z, .asm_56d + ld a, [hButtonsPressed] + and $4 + jr z, .asm_56d +.asm_55e + call WaitForVBlank + call ReadJoypad + call HandleDPadRepeat + ld a, [hButtonsPressed] + and $4 + jr z, .asm_55e +.asm_56d + pop bc + pop de + pop hl + pop af + ret + +; handle D-pad repeatcounter +HandleDPadRepeat: ; 0572 (0:0572) + ld a, [hButtonsHeld] + ld [hButtonsPressed2], a + and $f0 + jr z, .asm_58c + ld hl, hDPadRepeat + ld a, [hButtonsPressed] + and $f0 + jr z, .asm_586 + ld [hl], 24 + ret +.asm_586 + dec [hl] + jr nz, .asm_58c + ld [hl], 6 + ret +.asm_58c + ld a, [hButtonsPressed] + and $f + ld [hButtonsPressed2], a + ret + +CopyDMAFunction: ; 0593 (0:0593) + ld c, $83 + ld b, JumpToFunctionInTable - DMA + ld hl, DMA +.asm_59a + ld a, [hli] + ld [$ff00+c], a + inc c + dec b + jr nz, .asm_59a + ret + +; CopyDMAFunction copies this function to $ff83 +DMA: ; 05a1 (0:05a1) + ld a, $ca + ld [rDMA], a + ld a, $28 +.asm_5a7 + dec a + jr nz, .asm_5a7 + ret + +; jumps to index a in pointer table hl +JumpToFunctionInTable: ; 05ab (0:05ab) + add a + add l + ld l, a + ld a, $0 + adc h + ld h, a + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +; call function at [hl] if non-NULL +CallIndirect: ; 05b6 (0:05b6) + push af + ld a, [hli] + or [hl] + jr nz, .asm_5bd + pop af + ret +.asm_5bd + ld a, [hld] + ld l, [hl] + ld h, a + pop af + ; fallthrough +CallF: ; 05c1 (0:05c1) + jp [hl] +; 0x5c2 + +INCBIN "baserom.gbc",$05c2,$0663 - $05c2 + +Func_0663: ; 0663 (0:0663) + push bc + ld bc, $d8f0 + call Func_0686 + ld bc, $fc18 + call Func_0686 + ld bc, $ff9c + call Func_0686 + ld bc, $fff6 + call Func_0686 + ld bc, $ffff + call Func_0686 + xor a + ld [de], a + pop bc + ret + +Func_0686: ; 0686 (0:0686) + ld a, $2f +.asm_688 + inc a + add hl, bc + jr c, .asm_688 + ld [de], a + inc de + ld a, l + sub c + ld l, a + ld a, h + sbc b + ld h, a + ret +; 0x695 + +INCBIN "baserom.gbc",$0695,$06c3 - $0695 + +Func_06c3: ; 06c3 (0:06c3) + push af + ld a, [wLCDC] + rla + jr c, .asm_6d8 + pop af + push hl + push de + push bc + push af + call Func_04cf + pop af + ld [de], a + pop bc + pop de + pop hl + ret +.asm_6d8 + pop af + push hl + push de + push bc + ld hl, $cac1 + push hl + ld [hl], a + call Func_04cf + pop hl + ld b, $1 + call MemcpyHLDE_hblank + pop bc + pop de + pop hl + ret +; 0x6ee + +INCBIN "baserom.gbc",$06ee,$0709 - $06ee + +Func_0709: ; 0709 (0:0709) + jp MemcpyHLDE_hblank + +CopyGfxData: ; 070c (0:070c) + ld a, [wLCDC] + rla + jr nc, .asm_726 +.asm_712 + push bc + push hl + push de + ld b, c + call Func_0709 + ld b, $0 + pop hl + add hl, bc + ld e, l + ld d, h + pop hl + add hl, bc + pop bc + dec b + jr nz, .asm_712 + ret +.asm_726 + push bc +.asm_727 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_727 + pop bc + dec b + jr nz, .asm_726 + ret + +CopyData_SaveRegisters: ; 0732 (0:0732) + push hl + push de + push bc + call CopyData + pop bc + pop de + pop hl + ret + +; copies bc bytes from hl to de +CopyData: ; 073c (0:073c) + ld a, [hli] + ld [de], a + inc de + dec bc + ld a, c + or b + jr nz, CopyData + ret + +; switch to rombank (A + top2 of h shifted down), +; set top2 of H to 01, +; return old rombank id on top-of-stack +BankpushHome: ; 0745 (0:0745) + push hl + push bc + push af + push de + ld e, l + ld d, h + ld hl, [sp+$9] + ld b, [hl] + dec hl + ld c, [hl] + dec hl + ld [hl], b + dec hl + ld [hl], c + ld hl, [sp+$9] + ld a, [hBankROM] + ld [hld], a + ld [hl], $0 + ld a, d + rlca + rlca + and $3 + ld b, a + res 7, d + set 6, d + ld l, e + ld h, d + pop de + pop af + add b + call BankswitchHome + pop bc + ret +; 0x76f + +INCBIN "baserom.gbc",$076f,$078e - $076f + +; restore rombank from top-of-stack +BankpopHome: ; 078e (0:078e) + push hl + push de + ld hl, [sp+$7] + ld a, [hld] + call BankswitchHome + dec hl + ld d, [hl] + dec hl + ld e, [hl] + inc hl + inc hl + ld [hl], e + inc hl + ld [hl], d + pop de + pop hl + pop af + ret + +; switch ROM bank +BankswitchHome: ; 07a3 (0:07a3) + ld [hBankROM], a + ld [MBC3RomBank], a + ret + +; switch RAM bank +BankswitchRAM: ; 07a9 (0:07a9) + push af + ld [hBankRAM], a + ld [MBC3SRamBank], a + ld a, $a + ld [MBC3SRamEnable], a + pop af + ret + +; enable external RAM +EnableExtRAM: ; 07b6 (0:07b6) + push af + ld a, $a + ld [MBC3SRamEnable], a + pop af + ret + +; disable external RAM +DisableExtRAM: ; 07be (0:07be) + push af + xor a + ld [MBC3SRamEnable], a + pop af + ret + +; set current dest VRAM bank to 0 +BankswitchVRAM_0: ; 07c5 (0:07c5) + push af + xor a + ld [hBankVRAM], a + ld [rVBK], a + pop af + ret + +; set current dest VRAM bank to 1 +BankswitchVRAM_1: ; 07cd (0:07cd) + push af + ld a, $1 + ld [hBankVRAM], a + ld [rVBK], a + pop af + ret + +; set current dest VRAM bank +; a: value to write +BankswitchVRAM: ; 07d6 (0:07d6) + ld [hBankVRAM], a + ld [rVBK], a + ret +; 0x7db + +INCBIN "baserom.gbc",$07db,$07e7 - $07db + +Func_07e7: ; 07e7 (0:07e7) + call CheckForCGB + ret c + ld hl, rKEY1 + bit 7, [hl] + ret nz + ld a, [rIE] + push af + xor a + ld [rIE], a + set 0, [hl] + xor a + ld [rIF], a + ld [rIE], a + ld a, $30 + ld [rJOYP], a + stop + call SetupTimer + pop af + ld [rIE], a + ret + +SetupExtRAM: ; 080b (0:080b) + xor a + call BankswitchRAM + ld hl, $a000 + ld bc, $1000 +.asm_815 + ld a, [hli] + cp $41 + jr nz, .asm_82f + ld a, [hli] + cp $93 + jr nz, .asm_82f + dec bc + ld a, c + or b + jr nz, .asm_815 + call Func_084d + scf + call Func_4050 + call DisableExtRAM + ret +.asm_82f + ld hl, $a000 + ld a, [hli] + cp $4 + jr nz, .asm_842 + ld a, [hli] + cp $21 + jr nz, .asm_842 + ld a, [hl] + cp $5 + jr nz, .asm_842 + ret +.asm_842 + call Func_084d + or a + call Func_4050 + call DisableExtRAM + ret + +Func_084d: ; 084d (0:084d) + ld a, $3 +.asm_84f + call ClearExtRAMBank + dec a + cp $ff + jr nz, .asm_84f + ld hl, $a000 + ld [hl], $4 + inc hl + ld [hl], $21 + inc hl + ld [hl], $5 + ret + +ClearExtRAMBank: ; 0863 (0:0863) + push af + call BankswitchRAM + call EnableExtRAM + ld hl, $a000 + ld bc, $2000 +.asm_870 + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_870 + pop af + ret + +Func_0879: ; 0879 (0:0879) + push de + ld a, h + ld e, l + ld d, $0 + ld l, d + ld h, d + jr .asm_887 +.asm_882 + add hl, de +.asm_883 + sla e + rl d +.asm_887 + srl a + jr c, .asm_882 + jr nz, .asm_883 + pop de + ret +; 0x88f + +INCBIN "baserom.gbc",$088f,$089b - $088f + +Func_089b: ; 089b (0:089b) + push hl + push de + ld hl, $caca + ld a, [hli] + ld d, [hl] + inc hl + ld e, a + ld a, d + rlca + rlca + xor e + rra + push af + ld a, d + xor e + ld d, a + ld a, [hl] + xor e + ld e, a + pop af + rl e + rl d + ld a, d + xor e + inc [hl] + dec hl + ld [hl], d + dec hl + ld [hl], e + pop de + pop hl + ret + +Func_08bf: ; 08bf (0:08bf) + ld hl, $cad6 + ld [hl], e + inc hl + ld [hl], d + ld hl, $cad8 + ld [hl], $1 + inc hl + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], b + inc hl + ld [hli], a + ld [hl], $ef + ld h, b + ld l, $0 + xor a +.asm_8d9 + ld [hl], a + inc l + jr nz, .asm_8d9 + ret + +Func_08de: ; 08de (0:08de) + push hl + push de +.asm_8e0 + push bc + call Func_08ef + ld [de], a + inc de + pop bc + dec bc + ld a, c + or b + jr nz, .asm_8e0 + pop de + pop hl + ret + +Func_08ef: ; 08ef (0:08ef) + ld hl, $cadc + ld a, [hl] + or a + jr z, .asm_902 + dec [hl] + inc hl +.asm_8f8 + ld b, [hl] + inc hl + ld c, [hl] + inc [hl] + inc hl + ld a, [bc] + ld c, [hl] + inc [hl] + ld [bc], a + ret +.asm_902 + ld hl, $cad6 + ld c, [hl] + inc hl + ld b, [hl] + inc hl + dec [hl] + inc hl + jr nz, .asm_914 + dec hl + ld [hl], $8 + inc hl + ld a, [bc] + inc bc + ld [hl], a +.asm_914 + rl [hl] + ld a, [bc] + inc bc + jr nc, .asm_92a + ld hl, $cad6 + ld [hl], c + inc hl + ld [hl], b + ld hl, $cadd + ld b, [hl] + inc hl + inc hl + ld c, [hl] + inc [hl] + ld [bc], a + ret +.asm_92a + ld [$cade], a + ld hl, $cada + bit 0, [hl] + jr nz, .asm_94a + set 0, [hl] + inc hl + ld a, [bc] + inc bc + ld [hli], a + swap a +.asm_93c + and $f + inc a + ld [hli], a + push hl + ld hl, $cad6 + ld [hl], c + inc hl + ld [hl], b + pop hl + jr .asm_8f8 +.asm_94a + res 0, [hl] + inc hl + ld a, [hli] + jr .asm_93c +; 0x950 + +INCBIN "baserom.gbc",$0950,$099c - $0950 + +Func_099c: ; 099c (0:099c) + xor a + ld [$cab5], a + ld hl, $ca00 + ld c, $28 + xor a +.asm_9a6 + ld [hli], a + ld [hli], a + inc hl + inc hl + dec c + jr nz, .asm_9a6 + ret + +; this function affects the stack so that it returns +; to the pointer following the rst call +; similar to rst 28, except this always loads bank 1 +RST18: ; 09ae (0:09ae) + push hl + push hl + push hl + push hl + push de + push af + ld hl, [sp+$d] + ld d, [hl] + dec hl + ld e, [hl] + dec hl + ld [hl], $0 + dec hl + ld a, [hBankROM] + ld [hld], a + ld [hl], $9 + dec hl + ld [hl], $dc + dec hl + inc de + ld a, [de] + ld [hld], a + dec de + ld a, [de] + ld [hl], a + ld a, $1 + ; fallthrough +Func_09ce: ; 09ce (0:09ce) + call BankswitchHome + ld hl, [sp+$d] + inc de + inc de + ld [hl], d + dec hl + ld [hl], e + pop af + pop de + pop hl + ret +; 0x9dc + +INCBIN "baserom.gbc",$09dc,$09e9 - $09dc + +; this function affects the stack so that it returns +; to the three byte pointer following the rst call +RST28: ; 09e9 (0:09e9) + push hl + push hl + push hl + push hl + push de + push af + ld hl, [sp+$d] + ld d, [hl] + dec hl + ld e, [hl] + dec hl + ld [hl], $0 + dec hl + ld a, [hBankROM] + ld [hld], a + ld [hl], $9 + dec hl + ld [hl], $dc + dec hl + inc de + inc de + ld a, [de] + ld [hld], a + dec de + ld a, [de] + ld [hl], a + dec de + ld a, [de] + inc de + jr Func_09ce + +; setup SNES memory $810-$867 and palette +InitSGB: ; 0a0d (0:0a0d) + ld hl, SGB_0ad0 + call SendSGB + ld hl, SGB_0a50 + call SendSGB + ld hl, SGB_0a60 + call SendSGB + ld hl, SGB_0a70 + call SendSGB + ld hl, SGB_0a80 + call SendSGB + ld hl, SGB_0a90 + call SendSGB + ld hl, SGB_0aa0 + call SendSGB + ld hl, SGB_0ab0 + call SendSGB + ld hl, SGB_0ac0 + call SendSGB + ld hl, SGB_0af0 + call SendSGB + ld hl, SGB_0ae0 + call SendSGB + ret + +SGB_0a50: ; 0a50 (0:0a50) +INCBIN "baserom.gbc",$0a50,$0a60 - $0a50 + +SGB_0a60: ; 0a60 (0:0a60) +INCBIN "baserom.gbc",$0a60,$0a70 - $0a60 + +SGB_0a70: ; 0a70 (0:0a70) +INCBIN "baserom.gbc",$0a70,$0a80 - $0a70 + +SGB_0a80: ; 0a80 (0:0a80) +INCBIN "baserom.gbc",$0a80,$0a90 - $0a80 + +SGB_0a90: ; 0a90 (0:0a90) +INCBIN "baserom.gbc",$0a90,$0aa0 - $0a90 + +SGB_0aa0: ; 0aa0 (0:0aa0) +INCBIN "baserom.gbc",$0aa0,$0ab0 - $0aa0 + +SGB_0ab0: ; 0ab0 (0:0ab0) +INCBIN "baserom.gbc",$0ab0,$0ac0 - $0ab0 + +SGB_0ac0: ; 0ac0 (0:0ac0) +INCBIN "baserom.gbc",$0ac0,$0ad0 - $0ac0 + +SGB_0ad0: ; 0ad0 (0:0ad0) +INCBIN "baserom.gbc",$0ad0,$0ae0 - $0ad0 + +SGB_0ae0: ; 0ae0 (0:0ae0) +INCBIN "baserom.gbc",$0ae0,$0af0 - $0ae0 + +SGB_0af0: ; 0af0 (0:0af0) +INCBIN "baserom.gbc",$0af0,$0b20 - $0af0 + +; send SGB command +SendSGB: ; 0b20 (0:0b20) + ld a, [hl] + and $7 + ret z + ld b, a + ld c, $0 +.asm_b27 + push bc + ld a, $0 + ld [$ff00+c], a + ld a, $30 + ld [$ff00+c], a + ld b, $10 +.asm_b30 + ld e, $8 + ld a, [hli] + ld d, a +.asm_b34 + bit 0, d + ld a, $10 + jr nz, .asm_b3c + ld a, $20 +.asm_b3c + ld [$ff00+c], a + ld a, $30 + ld [$ff00+c], a + rr d + dec e + jr nz, .asm_b34 + dec b + jr nz, .asm_b30 + ld a, $20 + ld [$ff00+c], a + ld a, $30 + ld [$ff00+c], a + pop bc + dec b + jr nz, .asm_b27 + ld bc, 4 + call Wait + ret + +DetectSGB: ; 0b59 (0:0b59) + ld bc, 60 + call Wait + ld hl, SGB_MASK_EN_ON_0bbb + call SendSGB + ld a, [rJOYP] + and $3 + cp $3 + jr nz, .asm_ba3 + ld a, $20 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, $30 + ld [rJOYP], a + ld a, $10 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, $30 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + and $3 + cp $3 + jr nz, .asm_ba3 + ld hl, SGB_MASK_EN_OFF_0bab + call SendSGB + or a + ret +.asm_ba3 + ld hl, SGB_MASK_EN_OFF_0bab + call SendSGB + scf + ret + +SGB_MASK_EN_OFF_0bab: ; 0bab (0:0bab) +INCBIN "baserom.gbc",$0bab,$0bbb - $0bab + +SGB_MASK_EN_ON_0bbb: ; 0bbb (0:0bbb) +INCBIN "baserom.gbc",$0bbb,$0c08 - $0bbb + +; loops 63000 * bc cycles (~15 * bc ms) +Wait: ; 0c08 (0:0c08) + ld de, 1750 +.loop + nop + nop + nop + dec de + ld a, d + or e + jr nz, .loop + dec bc + ld a, b + or c + jr nz, Wait + ret + +; memcpy(DE, HL, B), but only during hblank +MemcpyHLDE_hblank: ; 0c19 (0:0c19) + push bc +.loop + ei + di + ld a, [rSTAT] ; + and $3 ; + jr nz, .loop ; assert hblank + ld a, [hl] + ld [de], a + ld a, [rSTAT] ; + and $3 ; + jr nz, .loop ; assert still in hblank + ei + inc hl + inc de + dec b + jr nz, .loop + pop bc + ret + +; memcpy(HL, DE, B), but only during hblank +MemcpyDEHL_hblank: ; 0c32 (0:0c32) + push bc +.asm_c33 + ei + di + ld a, [rSTAT] + and $3 + jr nz, .asm_c33 + ld a, [de] + ld [hl], a + ld a, [rSTAT] + and $3 + jr nz, .asm_c33 + ei + inc hl + inc de + dec c + jr nz, .asm_c33 + pop bc + ret +; 0xc4b + +INCBIN "baserom.gbc",$0c4b,$0c91 - $0c4b + +; called at roughly 240Hz by TimerHandler +SerialTimerHandler: ; 0c91 (0:0c91) + ld a, [wSerialOp] + cp $29 + jr z, .begin_transfer + cp $12 + jr z, .check_for_timeout + ret +.begin_transfer + ld a, [rSC] ; + add a ; make sure that no serial transfer is active + ret c ; + ld a, $1 + ld [rSC], a ; use internal clock + ld a, $81 + ld [rSC], a ; use internal clock, set transfer start flag + ret +.check_for_timeout + ; sets bit7 of [wSerialFlags] if the serial interrupt hasn't triggered + ; within four timer interrupts (60Hz) + ld a, [wSerialCounter] + ld hl, wSerialCounter2 + cp [hl] + ld [hl], a + ld hl, wSerialTimeoutCounter + jr nz, .clear_counter + inc [hl] + ld a, [hl] + cp $4 + ret c + ld hl, wSerialFlags + set 7, [hl] + ret +.clear_counter + ld [hl], $0 + ret +; 0xcc5 + +INCBIN "baserom.gbc",$0cc5,$0d26 - $0cc5 + +SerialHandler: ; 0d26 (0:0d26) + push af + push hl + push de + push bc + ld a, [$ce63] ; + or a ; + jr z, .asm_d35 ; if [$ce63] nonzero: + call Func_3189 ; ? + jr .done ; return +.asm_d35 + ld a, [wSerialOp] ; + or a ; + jr z, .asm_d55 ; skip ahead if [$cb74] zero + ; send/receive a byte + ld a, [rSB] + call SerialHandleRecv + call SerialHandleSend ; returns byte to actually send + push af +.wait_for_completion + ld a, [rSC] + add a + jr c, .wait_for_completion + pop af + ; end send/receive + ld [rSB], a ; prepare sending byte (from Func_0dc8?) + ld a, [wSerialOp] + cp $29 + jr z, .done ; if [$cb74] != $29, use external clock + jr .asm_d6a ; and prepare for next byte. either way, return +.asm_d55 + ld a, $1 + ld [wSerialRecvCounter], a + ld a, [rSB] + ld [wSerialRecvBuf], a + ld a, $ac + ld [rSB], a + ld a, [wSerialRecvBuf] + cp $12 ; if [$cba5] != $12, use external clock + jr z, .done ; and prepare for next byte. either way, return +.asm_d6a + ld a, $80 ; + ld [rSC], a ; transfer start, use external clock +.done + ld hl, wSerialCounter + inc [hl] + pop bc + pop de + pop hl + pop af + reti + +; handles a byte read from serial transfer by decoding it and storing it into +; the receive buffer +SerialHandleRecv: ; 0d77 (0:0d77) + ld hl, wSerialLastReadCA + ld e, [hl] + dec e + jr z, .last_was_ca + cp $ac + ret z ; return if read_data == $ac + cp $ca + jr z, .read_ca + or a + jr z, .read_00_or_ff + cp $ff + jr nz, .read_data +.read_00_or_ff + ld hl, wSerialFlags + set 6, [hl] + ret +.read_ca + inc [hl] ; inc [wSerialLastReadCA] + ret +.last_was_ca + ; if last byte read was $ca, flip all bits of data received + ld [hl], $0 + cpl + jr .handle_byte +.read_data + ; flip top2 bits of data received + xor $c0 +.handle_byte + push af + ld a, [wSerialRecvIndex] + ld e, a + ld a, [$cba3] + dec a + and $1f + cp e + jr z, .set_flag_and_return + ld d, $0 + ; store into receive buffer + ld hl, wSerialRecvBuf + add hl, de + pop af + ld [hl], a + ; increment buffer index (mod 32) + ld a, e + inc a + and $1f + ld [$cba4], a + ; increment received bytes counter & clear flags + ld hl, wSerialRecvCounter + inc [hl] + xor a + ld [wSerialFlags], a + ret +.set_flag_and_return + pop af + ld hl, wSerialFlags + set 0, [hl] + ret + +; prepares a byte to send over serial transfer, either from the send-save byte +; slot or the send buffer +SerialHandleSend: ; 0dc8 (0:0dc8) + ld hl, wSerialSendSave + ld a, [hl] + or a + jr nz, .send_saved + ld hl, wSerialSendBufToggle + ld a, [hl] + or a + jr nz, .send_buf + ; no more data--send $ac to indicate this + ld a, $ac + ret +.send_saved + ld a, [hl] + ld [hl], $0 + ret +.send_buf + ; grab byte to send from send buffer, increment buffer index + ; and decrement to-send length + dec [hl] + ld a, [wSerialSendBufIndex] + ld e, a + ld d, $0 + ld hl, wSerialSendBuf + add hl, de + inc a + and $1f + ld [wSerialSendBufIndex], a + ld a, [hl] + ; flip top2 bits of sent data + xor $c0 + cp $ac + jr z, .send_escaped + cp $ca + jr z, .send_escaped + cp $ff + jr z, .send_escaped + or a + jr z, .send_escaped + ret +.send_escaped + ; escape tricky data by prefixing it with $ca and flipping all bits + ; instead of just top2 + xor $c0 + cpl + ld [wSerialSendSave], a + ld a, $ca + ret + +; store data in sendbuf for sending? +Func_0e0a: ; 0e0a (0:0e0a) + push hl + push de + push bc + push af +.asm_e0e + ld a, [$cb80] + ld e, a + ld a, [wSerialSendBufIndex] + dec a + and $1f + cp e + jr z, .asm_e0e + ld d, $0 + ld a, e + inc a + and $1f + ld [$cb80], a + ld hl, wSerialSendBuf + add hl, de + pop af + ld [hl], a + ld hl, wSerialSendBufToggle + inc [hl] + pop bc + pop de + pop hl + ret + +; sets carry if [wSerialRecvCounter] nonzero +Func_0e32: ; 0e32 (0:0e32) + ld a, [wSerialRecvCounter] + or a + ret z + scf + ret + +Func_0e39: ; 0e39 (0:0e39) + push hl + ld hl, wSerialRecvCounter + ld a, [hl] + or a + jr nz, .asm_e49 + pop hl + ld a, [wSerialFlags] + or a + ret nz + scf + ret +.asm_e49 + push de + dec [hl] + ld a, [$cba3] + ld e, a + ld d, $0 + ld hl, wSerialRecvBuf + add hl, de + ld a, [hl] + push af + ld a, e + inc a + and $1f + ld [$cba3], a + pop af + pop de + pop hl + or a + ret + +Func_0e63: ; 0e63 (0:0e63) + ld b, c +.asm_e64 + ld a, b + sub c + jr c, .asm_e6c + cp $1f + jr nc, .asm_e75 +.asm_e6c + inc c + dec c + jr z, .asm_e75 + ld a, [hli] + call $0e0a + dec c +.asm_e75 + inc b + dec b + jr z, .asm_e81 + call $0e39 + jr c, .asm_e81 + ld [de], a + inc de + dec b +.asm_e81 + ld a, [wSerialFlags] + or a + jr nz, .asm_e8c + ld a, c + or b + jr nz, .asm_e64 + ret +.asm_e8c + scf + ret + +; go into slave mode (external clock) for serial transfer? +Func_0e8e: ; 0e8e (0:0e8e) + call ClearSerialData + ld a, $12 + ld [rSB], a ; send $12 + ld a, $80 + ld [rSC], a ; use external clock, set transfer start flag + ld a, [rIF] + and $f7 + ld [rIF], a ; clear serial interrupt flag + ld a, [rIE] + or $8 ; enable serial interrupt + ld [rIE], a + ret + +ResetSerial: ; 0ea6 (0:0ea6) + ld a, [rIE] + and $f7 + ld [rIE], a + xor a + ld [rSB], a + ld [rSC], a + ; fallthrough +ClearSerialData: ; 0eb1 (0:0eb1) + ld hl, wSerialOp + ld bc, $0051 +.loop + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .loop + ret +; 0xebf + +INCBIN "baserom.gbc",$0ebf,$1072 - $0ebf + +; copies the deck pointed to by de to $c400 or $c480 +CopyDeckData: ; 1072 (0:1072) + ld hl, $c400 + ld a, [$ff97] + cp $c2 + jr z, .asm_107e + ld hl, $c480 +.asm_107e + ; start by putting a terminator at the end of the deck + push hl + ld bc, 59 + add hl, bc + ld [hl], $0 + pop hl + push hl +.nextCard + ld a, [de] + inc de + ld b, a + or a + jr z, .done + ld a, [de] + inc de + ld c, a +.cardQuantityLoop + ld [hl], c + inc hl + dec b + jr nz, .cardQuantityLoop + jr .nextCard +.done + ld hl, $cce9 + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + pop hl + ld bc, 59 + add hl, bc + ld a, [hl] + or a + ret nz + rst $38 + scf + ret +; 0x10aa + +INCBIN "baserom.gbc",$10aa,$160b - $10aa + +Func_160b: ; 160b (0:160b) + ld l, a + ld a, [$ff97] + ld h, a + ld a, [hl] + ret + +Func_1611: ; 1611 (0:1611) + ld l, a + ld a, [$ff97] + ld h, $c3 + cp $c2 + jr z, .asm_161c + ld h, $c2 + +.asm_161c + ld a, [hl] + ret +; 0x161e + +INCBIN "baserom.gbc",$161e,$1c72 - $161e + +Func_1c72: ; 1c72 (0:1c72) + push af + push hl + call Func_1611 + ld a, h + ld [$ff97], a + pop hl + pop af + ret + +Func_1c7d: ; 1c7d (0:1c7d) + call EnableExtRAM + ld hl, $a010 +asm_1c83 + ld a, [hli] + ld [de], a + inc de + or a + jr nz, asm_1c83 + dec de + call DisableExtRAM + ret + +Func_1c8e: ; 1c8e (0:1c8e) + ld hl, $cc16 + ld a, [hli] + or [hl] + jr z, .asm_1c9b + ld a, [hld] + ld l, [hl] + ld h, a + jp Func_2e89 +.asm_1c9b + ld hl, $c500 + ld a, [hl] + or a + jr z, .asm_1ca4 + jr asm_1c83 +.asm_1ca4 + ld hl, $0092 + jp Func_2e89 +; 0x1caa + +INCBIN "baserom.gbc",$1caa,$1dca - $1caa + +; memcpy(HL, DE, C) +Memcpy: ; 1dca (0:1dca) + ld a, [$cabb] ; + bit 7, a ; + jr nz, .asm_1dd8 ; assert that LCD is on +.asm_1dd1 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_1dd1 + ret +.asm_1dd8 + jp MemcpyDEHL_hblank + +Func_1ddb: ; 1ddb (0:1ddb) + ld l, e + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld a, l + add d + ld l, a + ld a, h + adc $98 + ld h, a + ret + +Func_1deb: ; 1deb (0:1deb) + push af + ld a, [$ff92] + rra + rra + rra + and $1f + add d + ld d, a + ld a, [$ff93] + rra + rra + rra + and $1f + add e + ld e, a + pop af + ret +; 0x1e00 + +INCBIN "baserom.gbc",$1e00,$1e7c - $1e00 + +Func_1e7c: ; 1e7c (0:1e7c) + ld a, [wConsole] + cp CONSOLE_CGB + jr z, asm_1ec9 + cp CONSOLE_SGB + jp z, Func_1f0f +Func_1e88: ; 1e88 (0:1e88) + call Func_1ddb + ld a, $1c + ld de, $1819 + call Func_1ea5 + dec c + dec c +.asm_1e95 + ld a, $0 + ld de, $1e1f + call Func_1ea5 + dec c + jr nz, .asm_1e95 + ld a, $1d + ld de, $1a1b +Func_1ea5: ; 1ea5 (0:1ea5) + add sp, $e0 + push hl + push bc + ld hl, [sp+$4] + dec b + dec b + push hl + ld [hl], d + inc hl +.asm_1eb0 + ld [hli], a + dec b + jr nz, .asm_1eb0 + ld [hl], e + pop de + pop bc + pop hl + push hl + push bc + ld c, b + ld b, $0 + call Memcpy + pop bc + pop de + ld hl, $0020 + add hl, de + add sp, $20 + ret +asm_1ec9 + call Func_1ddb + ld a, $1c + ld de, $1819 + call Func_1efb + dec c + dec c +.asm_1ed6 + ld a, $0 + ld de, $1e1f + push hl + call Func_1ea5 + pop hl + call BankswitchVRAM_1 + ld a, [$ccf3] + ld e, a + ld d, a + xor a + call Func_1ea5 + call BankswitchVRAM_0 + dec c + jr nz, .asm_1ed6 + ld a, $1d + ld de, $1a1b + call Func_1efb + ret + +Func_1efb: ; 1efb (0:1efb) + push hl + call Func_1ea5 + pop hl + call BankswitchVRAM_1 + ld a, [$ccf3] + ld e, a + ld d, a + call Func_1ea5 + call BankswitchVRAM_0 + ret + +Func_1f0f: ; 1f0f (0:1f0f) + push bc + push de + call Func_1e88 + pop de + pop bc + ld a, [$ccf3] + or a + ret z + push bc + push de + ld hl, $cae0 + ld de, Unknown_1f4f + ld c, $10 +.asm_1f25 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_1f25 + pop de + pop bc + ld hl, $cae4 + ld [hl], d + inc hl + ld [hl], e + inc hl + ld a, d + add b + dec a + ld [hli], a + ld a, e + add c + dec a + ld [hli], a + ld a, [$ccf3] + and $80 + jr z, .asm_1f48 + ld a, $2 + ld [$cae2], a +.asm_1f48 + ld hl, $cae0 + call SendSGB + ret + +Unknown_1f4f: ; 1f4f (0:1f4f) +INCBIN "baserom.gbc",$1f4f,$1f5f - $1f4f + +Func_1f5f: ; 1f5f (0:1f5f) + push de + push af + push hl + add sp, $e0 + call Func_1ddb +.asm_1f67 + push hl + push bc + ld hl, [sp+$25] + ld d, [hl] + ld hl, [sp+$27] + ld a, [hl] + ld hl, [sp+$4] + push hl +.asm_1f72 + ld [hli], a + add d + dec b + jr nz, .asm_1f72 + pop de + pop bc + pop hl + push hl + push bc + ld c, b + ld b, $0 + call Memcpy + ld hl, [sp+$24] + ld a, [hl] + ld hl, [sp+$27] + add [hl] + ld [hl], a + pop bc + pop de + ld hl, $0020 + add hl, de + dec c + jr nz, .asm_1f67 + add sp, $24 + pop de + ret +; 0x1f96 + +INCBIN "baserom.gbc",$1f96,$20b0 - $1f96 + +Func_20b0: ; 20b0 (0:20b0) + ld hl, $2fe8 + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .asm_20bd + ld hl, $37f8 +.asm_20bd + ld de, $8d00 + ld b, $30 + jr asm_2121 + +Func_20c4: ; 20c4 (0:20c4) + ld hl, $3028 + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .asm_20d1 + ld hl, $3838 +.asm_20d1 + ld de, $8d40 + ld b, $c + jr asm_2121 + +Func_20d8: ; 20d8 (0:20d8) + ld b, $10 + jr asm_20de + +Func_20dc: ; 20dc (0:20dc) + ld b, $24 +asm_20de + ld hl, $32e8 + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .asm_20eb + ld hl, $3af8 +.asm_20eb + ld de, $8d00 + jr asm_2121 + +Func_20f0: ; 20f0 (0:20f0) + ld hl, $4008 + ld de, $8a00 + ld b, $d + call asm_2121 + ld hl, $3528 + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .asm_2108 + ld hl, $3d38 +.asm_2108 + ld de, $8d00 + ld b, $30 + jr asm_2121 + +Func_210f: ; 210f (0:210f) + ld hl, $40d8 + ld de, $9300 + ld b, $8 + jr asm_2121 + +Func_2119: ; 2119 (0:2119) + ld hl, DuelGraphics - Fonts + ld de, $9000 ; destination + ld b, $38 ; number of tiles +asm_2121 + ld a, BANK(Fonts) + call BankpushHome + ld c, $10 + call CopyGfxData + call BankpopHome + ret +; 0x212f + +INCBIN "baserom.gbc",$212f,$21c5 - $212f + +Func_21c5: ; 21c5 (0:21c5) + push de + push bc + call Func_2298 + jr .asm_21e8 +.asm_21cc + cp $5 + jr c, .asm_21d9 + cp $10 + jr nc, .asm_21d9 + call Func_21f2 + jr .asm_21e8 +.asm_21d9 + ld e, a + ld d, [hl] + call Func_2546 + jr nc, .asm_21e1 + inc hl +.asm_21e1 + call Func_22ca + xor a + call Func_21f2 +.asm_21e8 + ld a, [hli] + or a + jr nz, .asm_21cc + call Func_230f + pop bc + pop de + ret + +Func_21f2: ; 21f2 (0:21f2) + or a + jr z, .asm_2241 + cp $e + jr z, .asm_2221 + cp $f + jr z, .asm_2221 + cp $a + jr z, .asm_224d + cp $5 + jr z, .asm_2225 + cp $6 + jr z, .asm_220f + cp $7 + jr z, .asm_2215 + scf + ret +.asm_220f + ld a, $1 + ld [$cd0a], a + ret +.asm_2215 + call Func_230f + xor a + ld [$cd0a], a + ld a, $f + ld [$ffaf], a + ret +.asm_2221 + ld [$ffaf], a + xor a + ret +.asm_2225 + ld a, [$cd0a] + push af + ld a, $1 + ld [$cd0a], a + call Func_230f + pop af + ld [$cd0a], a + ld a, [$ffb0] + or a + jr nz, .asm_2240 + ld a, [hl] + push hl + call Func_22f2 + pop hl +.asm_2240 + inc hl +.asm_2241 + ld a, [$ffae] + or a + ret z + ld b, a + ld a, [$ffac] + cp b + jr z, .asm_224d + xor a + ret +.asm_224d + call Func_230f + ld a, [$cd08] + or a + call z, .asm_2257 +.asm_2257 + xor a + ld [$ffac], a + ld a, [$ffad] + add $20 + ld b, a + ld a, [$ffaa] + and $e0 + add b + ld [$ffaa], a + ld a, [$ffab] + adc $0 + ld [$ffab], a + ld a, [$cd09] + inc a + ld [$cd09], a + xor a + ret + +Func_2275: ; 2275 (0:2275) + ld a, d + dec a + ld [$cd04], a + ld a, e + ld [$ffa8], a + call Func_2298 + xor a + ld [$ffb0], a + ld [$ffa9], a + ld a, $88 + ld [$cd06], a + ld a, $80 + ld [$cd07], a + ld hl, $c600 +.asm_2292 + xor a + ld [hl], a + inc l + jr nz, .asm_2292 + ret + +Func_2298: ; 2298 (0:2298) + xor a + ld [$cd0a], a + ld [$ffac], a + ld [$cd0b], a + ld a, $f + ld [$ffaf], a + ret + +Func_22a6: ; 22a6 (0:22a6) + push af + call Func_22ae + pop af + ld [$ffae], a + ret + +Func_22ae: ; 22ae (0:22ae) + push hl + ld a, d + ld [$ffad], a + xor a + ld [$ffae], a + ld [$cd09], a + call Func_1ddb + ld a, l + ld [$ffaa], a + ld a, h + ld [$ffab], a + call Func_2298 + xor a + ld [$cd0b], a + pop hl + ret + +Func_22ca: ; 22ca (0:22ca) + push hl + push de + push bc + ld a, [$ffb0] + and $1 + jr nz, .asm_22ed + call Func_2325 + jr c, .asm_22de + or a + jr nz, .asm_22e9 + call Func_24ac +.asm_22de + ld a, [$ffb0] + and $2 + jr nz, .asm_22e9 + ld a, [$ffa9] + call Func_22f2 +.asm_22e9 + pop bc + pop de + pop hl + ret +.asm_22ed + call Func_235e + jr .asm_22e9 + +Func_22f2: ; 22f2 (0:22f2) + ld [$cd05], a + ld hl, $ffaa + ld e, [hl] + inc hl + ld d, [hl] + inc de + ld [hl], d + dec hl + ld [hl], e + dec de + ld l, e + ld h, d + ld de, $cd05 + ld c, $1 + call Memcpy + ld hl, $ffac + inc [hl] + ret + +Func_230f: ; 230f (0:230f) + ld a, [$cd0a] + or a + ret z + ld a, [$cd0b] + or a + ret z + push hl + push de + push bc + ld e, $20 + call Func_22ca + pop bc + pop de + pop hl + ret + +Func_2325: ; 2325 (0:2325) + call Func_235e + ret c + or a + ret nz + ld a, [$ffa8] + ld hl, $cd04 + cp [hl] + jr nz, .asm_2345 + ld a, [$ffa9] + ld h, $c8 +.asm_2337 + ld l, a + ld a, [hl] + or a + jr nz, .asm_2337 + ld h, $c9 + ld c, [hl] + ld b, $c8 + xor a + ld [bc], a + jr .asm_234a +.asm_2345 + inc [hl] + jr nz, .asm_2349 + inc [hl] +.asm_2349 + ld l, [hl] +.asm_234a + ld a, [$ffa9] + ld c, a + ld b, $c9 + ld a, l + ld [$ffa9], a + ld [bc], a + ld h, $c8 + ld [hl], c + ld h, $c6 + ld [hl], e + inc h + ld [hl], d + ld b, l + xor a + ret + +; search linked-list for letters e/d (regisers), if found hoist the result to +; head of list and return it. carry flag denotes success. +Func_235e: ; 235e (0:235e) + ld a, [$cd0a] ; + or a ; + jr z, .asm_2376 ; if [$cd0a] nonzero: + call Uppercase ; uppercase e + ld a, [$cd0b] + ld d, a + or a + jr nz, .asm_2376 ; if [$cd0b] is zero: + ld a, e ; + ld [$cd0b], a ; [$cd0b] ← e + ld a, $1 ; + or a ; return a = 1 + ret +.asm_2376 + xor a + ld [$cd0b], a ; [$cd0b] ← 0 + ld a, [$ffa9] + ld l, a ; l ← [$ffa9]; index to to linked-list head +.asm_237d + ld h, $c6 ; + ld a, [hl] ; a ← key1[l] ; + or a ; + ret z ; if NULL, return a = 0 ; + cp e ; loop for e/d key in + jr nz, .asm_238a ; ; linked list + inc h ; ; + ld a, [hl] ; if key1[l] == e and ; + cp d ; key2[l] == d: ; + jr z, .asm_238f ; break ; +.asm_238a ; + ld h, $c8 ; ; + ld l, [hl] ; l ← next[l] ; + jr .asm_237d +.asm_238f + ld a, [$ffa9] + cp l + jr z, .asm_23af ; assert at least one iteration + ld c, a + ld b, $c9 + ld a, l + ld [bc], a ; prev[i0] ← i + ld [$ffa9], a ; [$ffa9] ← i (update linked-list head) + ld h, $c9 + ld b, [hl] + ld [hl], $0 ; prev[i] ← 0 + ld h, $c8 + ld a, c + ld c, [hl] + ld [hl], a ; next[i] ← i0 + ld l, b + ld [hl], c ; next[prev[i]] ← next[i] + ld h, $c9 + inc c + dec c + jr z, .asm_23af ; if next[i] != NULL: + ld l, c ; l ← next[i] + ld [hl], b ; prev[next[i]] ← prev[i] +.asm_23af + scf ; set carry to indicate success + ret ; (return new linked-list head in a) + +; uppercases e if [wUppercaseFlag] is nonzero +Uppercase: ; 23b1 (0:23b1) + ld a, [wUppercaseFlag] + or a + ret z + ld a, e + cp $60 + ret c + cp $7b + ret nc + sub $20 + ld e, a + ret + +Func_23c1: ; 23c1 (0:23c1) + ld a, [hl] + cp $6 + jr nz, .asm_23cf + call Func_23d3 + inc b + srl b + xor a + sub b + ret +.asm_23cf + xor a + ld [$cd0a], a +Func_23d3: ; 23d3 (0:23d3) + push hl + push de + ld bc, $0000 +.asm_23d8 + ld a, [hli] + or a + jr z, .asm_23f8 + inc c + cp $5 + jr c, .asm_23ec + cp $10 + jr nc, .asm_23ec + cp $5 + jr nz, .asm_23d8 + inc b + jr .asm_23f4 +.asm_23ec + ld e, a + ld d, [hl] + inc b + call Func_2546 + jr nc, .asm_23d8 +.asm_23f4 + inc c + inc hl + jr .asm_23d8 +.asm_23f8 + xor a + sub b + pop de + pop hl + ret +; 0x23fd + +INCBIN "baserom.gbc",$23fd,$245d - $23fd + +Func_245d: ; 245d (0:245d) + push de + push bc + ld de, $caa0 + push de + ld bc, $d8f0 + call Func_2499 + ld bc, $fc18 + call Func_2499 + ld bc, $ff9c + call Func_2499 + ld bc, $fff6 + call Func_2499 + ld bc, $ffff + call Func_2499 + xor a + ld [de], a + pop hl + ld e, $5 +.asm_2486 + inc hl + ld a, [hl] + cp $20 + jr nz, .asm_2495 + ld [hl], $0 + inc hl + dec e + jr nz, .asm_2486 + dec hl + ld [hl], $20 +.asm_2495 + dec hl + pop bc + pop de + ret + +Func_2499: ; 2499 (0:2499) + ld a, $5 + ld [de], a + inc de + ld a, $1f +.asm_249f + inc a + add hl, bc + jr c, .asm_249f + ld [de], a + inc de + ld a, l + sub c + ld l, a + ld a, h + sbc b + ld h, a + ret + +Func_24ac: ; 24ac (0:24ac) + push hl + push de + push bc + ld a, [$cd0a] + or a + jr nz, .asm_24bf + call Func_2510 + call Memcpy +.asm_24bb + pop bc + pop de + pop hl + ret +.asm_24bf + call Func_24ca + call Func_2518 + call Memcpy + jr .asm_24bb + +Func_24ca: ; 24ca (0:24ca) + push bc + ld a, [hBankROM] + push af + ld a, BANK(VWF) + call BankswitchHome + push de + ld a, e + ld de, $ccf4 + call Func_24fa + pop de + ld a, d + ld de, $ccf5 + call Func_24fa + ld hl, $ccf4 + ld b, $8 +.asm_24e8 + ld a, [hli] + swap a + or [hl] + dec hl + ld [hli], a + ld [hli], a + dec b + jr nz, .asm_24e8 + call BankpopHome + pop bc + ld de, $ccf4 + ret + +Func_24fa: ; 24fa (0:24fa) + sub $20 + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld bc, VWF + add hl, bc + ld b, $8 +.asm_2508 + ld a, [hli] + ld [de], a + inc de + inc de + dec b + jr nz, .asm_2508 + ret + +Func_2510: ; 2510 (0:2510) + push bc + call Func_256d + call Func_252e + pop bc +Func_2518: ; 2518 (0:2518) + ld hl, $cd07 + ld a, b + xor [hl] + ld h, $0 + ld l, a + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld a, [$cd06] + ld b, a + ld c, $0 + add hl, bc + ld c, $10 + ret + +Func_252e: ; 252e (0:252e) + ld a, $1d + call BankpushHome + ld de, $ccf4 + push de + ld c, $8 +.asm_2539 + ld a, [hli] + ld [de], a + inc de + ld [de], a + inc de + dec c + jr nz, .asm_2539 + pop de + call BankpopHome + ret + +Func_2546: ; 2546 (0:2546) + ld a, [$cd0a] + or a + jr nz, .asm_255f + ld a, e + cp $10 + jr c, .asm_2561 + cp $60 + jr nc, .asm_2565 + ld a, [$ffaf] + cp $f + jr nz, .asm_2565 + ld d, $f + or a + ret +.asm_255f + or a + ret +.asm_2561 + cp $5 + jr c, .asm_2569 +.asm_2565 + ld d, $0 + or a + ret +.asm_2569 + ld e, d + ld d, a + scf + ret + +Func_256d: ; 256d (0:256d) + ld bc, $0280 + ld a, d + cp $e + jr z, .asm_2580 + cp $f + jr nz, .asm_2582 + ld bc, $0000 + ld a, e + sub $10 + ld e, a +.asm_2580 + ld d, $0 +.asm_2582 + ld l, e + ld h, d + add hl, hl + add hl, hl + add hl, hl + add hl, bc + ret +; 0x2589 + +INCBIN "baserom.gbc",$2589,$2636 - $2589 + +Func_2636: ; 2636 (0:2636) + ld [$cd10], a + ld [$ffb1], a + ld de, $cd11 + ld b, $8 +.asm_2640 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_2640 + xor a + ld [$cd0f], a + ret + +Func_264b: ; 264b (0:264b) + xor a + ld [$cd99], a + ld a, [hButtonsPressed2] + or a + jr z, .asm_2685 + ld b, a + ld a, [$cd14] + ld c, a + ld a, [$cd10] + bit 6, b + jr z, .asm_266b + dec a + bit 7, a + jr z, .asm_2674 + ld a, [$cd14] + dec a + jr .asm_2674 +.asm_266b + bit 7, b + jr z, .asm_2685 + inc a + cp c + jr c, .asm_2674 + xor a +.asm_2674 + push af + ld a, $1 + ld [$cd99], a + call Func_26e9 + pop af + ld [$cd10], a + xor a + ld [$cd0f], a +.asm_2685 + ld a, [$cd10] + ld [$ffb1], a + ld hl, $cd17 + ld a, [hli] + or [hl] + jr z, .asm_26a9 + ld a, [hld] + ld l, [hl] + ld h, a + ld a, [$ffb1] + call CallF + jr nc, asm_26d1 +.asm_269b + call Func_270b + call Func_26c0 + ld a, [$cd10] + ld e, a + ld a, [$ffb1] + scf + ret +.asm_26a9 + ld a, [hButtonsPressed] + and $3 + jr z, asm_26d1 + and $1 + jr nz, .asm_269b + ld a, [$cd10] + ld e, a + ld a, $ff + ld [$ffb1], a + call Func_26c0 + scf + ret + +Func_26c0: ; 26c0 (0:26c0) + push af + ld a, [$ffb1] + inc a + jr z, .asm_26ca + ld a, $2 + jr .asm_26cc +.asm_26ca + ld a, $3 +.asm_26cc + call Func_3796 + pop af + ret +asm_26d1 + ld a, [$cd99] + or a + jr z, Func_26da + call Func_3796 + +Func_26da: ; 26da (0:26da) + ld hl, $cd0f + ld a, [hl] + inc [hl] + and $f + ret nz + ld a, [$cd15] + bit 4, [hl] + jr z, asm_26ec +Func_26e9: ; 26e9 (0:26e9) + ld a, [$cd16] +asm_26ec + ld c, a + ld a, [$cd13] + ld l, a + ld a, [$cd10] + ld h, a + call Func_0879 + ld a, l + ld hl, $cd11 + ld d, [hl] + inc hl + add [hl] + ld e, a + call Func_1deb + ld a, c + ld c, e + ld b, d + call Func_06c3 + or a + ret + +Func_270b: ; 270b (0:270b) + ld a, [$cd15] + jr asm_26ec +; 0x2710 + +INCBIN "baserom.gbc",$2710,$2a1a - $2710 + +Func_2a1a: ; 2a1a (0:2a1a) + xor a + ld hl, $cd10 + ld [hli], a + ld [hl], d + inc hl + ld [hl], e + inc hl + ld [hl], $0 + inc hl + ld [hl], $1 + inc hl + ld [hl], b + inc hl + ld [hl], c + ld [$cd0f], a + ret +; 0x2a30 + +INCBIN "baserom.gbc",$2a30,$2a3e - $2a30 + +Func_2a3e: ; 2a3e (0:2a3e) + push hl + call Func_2a6f + ld a, $b + ld de, $010e + call Func_1deb + call Func_22a6 + pop hl + ld a, l + or h + jp nz, Func_2e76 + ld hl, $c590 + jp Func_21c5 + +Func_2a59: ; 2a59 (0:2a59) + push hl + call Func_2a9e + ld a, $13 + ld de, $010e + call Func_1deb + call Func_22a6 + call EnableLCD + pop hl + jp Func_2e41 + +Func_2a6f: ; 2a6f (0:2a6f) + ld de, $000c + ld bc, $0c06 + call Func_1deb + call Func_1e7c + ret +; 0x2a7c + +INCBIN "baserom.gbc",$2a7c,$2a9e - $2a7c + +Func_2a9e: ; 2a9e (0:2a9e) + ld de, $000c + ld bc, $1406 + call Func_1deb + call Func_1e7c + ret + +Func_2aab: ; 2aab (0:2aab) + call Func_2a59 + xor a + ld hl, Unknown_2ac8 + call Func_2636 + call EnableLCD +.asm_2ab8 + call Func_053f + call Func_26da + ld a, [hButtonsPressed] + and $3 + jr z, .asm_2ab8 + call Func_26e9 + ret + +Unknown_2ac8: ; 2ac8 (0:2ac8) +INCBIN "baserom.gbc",$2ac8,$2af0 - $2ac8 + +Func_2af0: ; 2af0 (0:2af0) + call Func_2a59 + ld de, $0710 + call Func_2b66 + ld de, $0610 + jr .asm_2b0a + call Func_2a3e + ld de, $0310 + call Func_2b66 + ld de, $0210 +.asm_2b0a + ld a, d + ld [$cd98], a + ld bc, $0f00 + call Func_2a1a + ld a, [$cd9a] + ld [$cd10], a + call EnableLCD + jr .asm_2b39 +.asm_2b1f + call Func_053f + call Func_26da + ld a, [hButtonsPressed] + bit 0, a + jr nz, .asm_2b50 + ld a, [hButtonsPressed2] + and $30 + jr z, .asm_2b1f + ld a, $1 + call Func_3796 + call Func_26e9 +.asm_2b39 + ld a, [$cd98] + ld c, a + ld hl, $cd10 + ld a, [hl] + xor $1 + ld [hl], a + add a + add a + add c + ld [$cd11], a + xor a + ld [$cd0f], a + jr .asm_2b1f +.asm_2b50 + ld a, [$cd10] + ld [$ffb1], a + or a + jr nz, .asm_2b5c + ld [$cd9a], a + ret +.asm_2b5c + xor a + ld [$cd9a], a + ld a, $1 + ld [$ffb1], a + scf + ret + +Func_2b66: ; 2b66 (0:2b66) + call Func_1deb + ld hl, $002f + call Func_2c1b + ret +; 0x2b70 + +INCBIN "baserom.gbc",$2b70,$2b78 - $2b70 + +Duel_LoadDecks: ; 2b78 (0:2b78) + xor a + ld [wIsPracticeDuel], a + ld a, [wOpponentDeck] + cp SAMS_NORMAL_DECK - 2 + jr z, .normalSamDuel + or a ; cp SAMS_PRACTICE_DECK - 2 + jr nz, .notPracticeDuel + +; only practice duels will display help messages, but +; any duel with Sam will force the PRACTICE_PLAYER_DECK +;.practiceSamDuel + inc a + ld [wIsPracticeDuel], a + +.normalSamDuel + xor a + ld [wOpponentDeck], a + call Func_1c72 + ld a, PRACTICE_PLAYER_DECK + call LoadDeck + call Func_1c72 + ld hl, $caca + ld a, $57 + ld [hli], a + ld [hli], a + ld [hl], a + xor a + +.notPracticeDuel + inc a + inc a + call LoadDeck + ld a, [wOpponentDeck] + cp NUMBER_OF_DECKS + jr c, .validDeck + ld a, PRACTICE_PLAYER_DECK - 2 + ld [wOpponentDeck], a + +.validDeck + ld a, $f1 + call Func_160b + ld a, [wOpponentDeck] + or $80 + ld [hl], a + ret +; 0x2bbf + +INCBIN "baserom.gbc",$2bbf,$2c08 - $2bbf + +Func_2c08: ; 2c08 (0:2c08) + ld d, [hl] + inc hl + bit 7, d + ret nz + ld e, [hl] + inc hl + call Func_22ae + push hl + call Func_2c23 + pop hl + inc hl + inc hl + jr Func_2c08 + +Func_2c1b: ; 2c1b (0:2c1b) + call Func_22ae + jr Func_2c29 + +Func_2c20: ; 2c20 (0:2c20) + call Func_22ae +Func_2c23: ; 2c23 (0:2c23) + ld a, [hli] + or [hl] + ret z + ld a, [hld] + ld l, [hl] + ld h, a +Func_2c29: ; 2c29 (0:2c29) + ld a, [hBankROM] + push af + call ReadTextOffset + call Func_21c5 + pop af + call BankswitchHome + ret +; 0x2c37 + +INCBIN "baserom.gbc",$2c37,$2cc8 - $2c37 + +Func_2cc8: ; 2cc8 (0:2cc8) + xor a + ld [$ce48], a + ld [$ce49], a + ld [$ce4a], a + ld a, $f + ;ld [$ffaf], a + db $ea, $af, $ff +Func_2cd7: ; 2cd7 (0:2cd7) + push hl + call Func_2d06 + pop bc + ;ld a, [$ffaf] + db $fa, $af, $ff + ld [hli], a + ld a, [$cd0a] + ld [hli], a + ld a, [hBankROM] + ld [hli], a + ld [hl], c + inc hl + ld [hl], b + ret + +Func_2ceb: ; 2ceb (0:2ceb) + call Func_2cd7 + ld hl, $ce48 + inc [hl] + ret + +Func_2cf3: ; 2cf3 (0:2cf3) + call Func_2d06 + ld a, [hli] + ;ld [$ffaf], a + db $ea, $af, $ff + ld a, [hli] + ld [$cd0a], a + ld a, [hli] + call BankswitchHome + ld a, [hli] + ld h, [hl] + ld l, a + ret + +Func_2d06: ; 2d06 (0:2d06) + ld a, [$ce48] + ld e, a + add a + add a + add e + ld e, a + ld d, $0 + ld hl, $ce2b + add hl, de + ret +; 0x2d15 + +INCBIN "baserom.gbc",$2d15,$2d43 - $2d15 + +Func_2d43: ; 2d43 (0:2d43) + call Func_2cf3 + ld a, [hli] + or a + jr z, .asm_2d79 + cp $5 + jr c, .asm_2d65 + cp $10 + jr nc, .asm_2d65 + call Func_21f2 + jr nc, .asm_2d74 + cp $9 + jr z, .asm_2dc8 + cp $b + jr z, .asm_2d8a + cp $c + jr z, .asm_2db3 + jr .asm_2d74 +.asm_2d65 + ld e, a + ld d, [hl] + call Func_2546 + jr nc, .asm_2d6d + inc hl +.asm_2d6d + call Func_22ca + xor a + call Func_21f2 +.asm_2d74 + call Func_2cd7 + or a + ret +.asm_2d79 + ld a, [$ce48] + or a + jr z, .asm_2d85 + dec a + ld [$ce48], a + jr Func_2d43 +.asm_2d85 + call Func_230f + scf + ret +.asm_2d8a + call Func_2ceb + ld a, $f + ;ld [$ffaf], a + db $ea, $af, $ff + xor a + ld [$cd0a], a + ld de, $ce3f + ld hl, $ce49 + call Func_2de0 + ld a, l + or h + jr z, .asm_2dab + call ReadTextOffset + call Func_2cd7 + jr Func_2d43 +.asm_2dab + ld hl, $c590 + call Func_2cd7 + jr Func_2d43 +.asm_2db3 + call Func_2ceb + ld de, $ce43 + ld hl, $ce4a + call Func_2de0 + call Func_2e12 + call Func_2cd7 + jp Func_2d43 +.asm_2dc8 + call Func_2ceb + call Func_2e2c + ld a, [$caa0] + cp $6 + jr z, .asm_2dda + ld a, $7 + call Func_21f2 +.asm_2dda + call Func_2cd7 + jp Func_2d43 + +Func_2de0: ; 2de0 (0:2de0) + push de + ld a, [hl] + inc [hl] + add a + ld e, a + ld d, $0 + pop hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +; uses the two byte text id in hl to read the three byte text offset +; loads the correct bank for the specific text and returns the pointer in hl +ReadTextOffset: ; 2ded (0:2ded) + push de + ld e, l + ld d, h + add hl, hl + add hl, de + set 6, h ; hl = (hl * 3) + $4000 + ld a, BANK(TextOffsets) + call BankswitchHome + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hl] + ld h, d + rl h + rla + rl h + rla + add BANK(TextOffsets) + call BankswitchHome + res 7, d + set 6, d ; $4000 ≤ de ≤ $7fff + ld l, e + ld h, d + pop de + ret + +Func_2e12: ; 2e12 (0:2e12) + ld a, [$cd0a] + or a + jp z, Func_245d + ld de, $caa0 + push de + call Func_0663 + pop hl + ld c, $4 +.asm_2e23 + ld a, [hl] + cp $30 + ret nz + inc hl + dec c + jr nz, .asm_2e23 + ret + +Func_2e2c: ; 2e2c (0:2e2c) + ld de, $caa0 + push de + ld a, [$ff97] + cp $c3 + jp z, .asm_2e3c + call Func_1c7d + pop hl + ret +.asm_2e3c + call Func_1c8e + pop hl + ret + +Func_2e41: ; 2e41 (0:2e41) + ld a, l + or h + jr z, .asm_2e53 + ld a, [hBankROM] + push af + call ReadTextOffset + call .asm_2e56 + pop af + call BankswitchHome + ret +.asm_2e53 + ld hl, $c590 +.asm_2e56 + call Func_2cc8 +.asm_2e59 + ld a, [$ff90] + ld b, a + ld a, [$ce47] + inc a + cp $3 + jr nc, .asm_2e6d + bit 1, b + jr nz, .asm_2e70 + jr .asm_2e6d +.asm_2e6a + call Func_053f +.asm_2e6d + dec a + jr nz, .asm_2e6a +.asm_2e70 + call Func_2d43 + jr nc, .asm_2e59 + ret + +Func_2e76: ; 2e76 (0:2e76) + ld a, [hBankROM] + push af + call ReadTextOffset + call Func_2cc8 +.asm_2e7f + call Func_2d43 + jr nc, .asm_2e7f + pop af + call BankswitchHome + ret + +Func_2e89: ; 2e89 (0:2e89) + ld a, l + or h + jr z, .asm_2e9f + ld a, [hBankROM] + push af + call ReadTextOffset +.asm_2e93 + ld a, [hli] + ld [de], a + inc de + or a + jr nz, .asm_2e93 + pop af + call BankswitchHome + dec de + ret +.asm_2e9f + ld a, [$ff97] + cp $c3 + jp z, Func_1c8e + jp Func_1c7d +; 0x2ea9 + +INCBIN "baserom.gbc",$2ea9,$2fa0 - $2ea9 + +LoadCardGfx: ; 2fa0 (0:2fa0) + ld a, [hBankROM] + push af + push hl + srl h + srl h + srl h + ld a, BANK(GrassEnergyCardGfx) + add h + call BankswitchHome + pop hl + add hl, hl + add hl, hl + add hl, hl + res 7, h + set 6, h + call CopyGfxData + ld b, $8 ; length of palette + ld de, $ce23 +.copyCardPalette + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .copyCardPalette + pop af + call BankswitchHome + ret +; 0x2fcb + +INCBIN "baserom.gbc",$2fcb,$302c - $2fcb + +; loads the deck id in a from DeckPointers +; sets carry flag if an invalid deck id is used +LoadDeck: ; 302c (0:302c) + push hl + ld l, a + ld h, $0 + ld a, [hBankROM] + push af + ld a, BANK(DeckPointers) + call BankswitchHome + add hl, hl + ld de, DeckPointers + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, d + or e + jr z, .nullPointer + call CopyDeckData + pop af + call BankswitchHome + pop hl + or a + ret +.nullPointer + pop af + call BankswitchHome + pop hl + scf + ret +; 0x3055 + +Func_3055: ; 3055 (0:3055) + push hl + ld hl, $ccb9 + add [hl] + ld [hli], a + ld a, $0 + adc [hl] + ld [hl], a + pop hl + ret + +Func_3061: ; 3061 (0:3061) + push de + push hl + ld e, a + ld hl, $ccb9 + ld a, [hl] + sub e + ld [hli], a + ld a, [hl] + sbc $0 + ld [hl], a + pop hl + pop de + ret + +Func_3071: ; 3071 (0:3071) + push hl + ld hl, $ce4e + ld [hl], e + inc hl + ld [hl], d + rst $18 + xor l + ld [hl], c + pop hl + ret + +Func_307d: ; 307d (0:307d) + push hl + ld hl, $ce4e + ld [hl], e + inc hl + ld [hl], d + ld a, $1 + rst $18 + xor l + ld [hl], c + ld hl, $cac2 + ld [hl], $0 + pop hl + ret + +Func_3090: ; 3090 (0:3090) + ld a, d + cp b + ret nz + ld a, e + cp c + ret + +Func_3096: ; 3096 (0:3096) + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $4000 + pop af + call BankswitchHome + ret + +Func_30a6: ; 30a6 (0:30a6) + ld a, [hBankROM] + push af + ld a, $6 + call BankswitchHome + ld a, $1 + ld [$ce60], a + call $40d5 + pop bc + ld a, b + call BankswitchHome + ret + +Func_30bc: ; 30bc (0:30bc) + ld a, h + ld [$ce50], a + ld a, l + ld [$ce51], a + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $4211 + call Func_2a9e + pop af + call BankswitchHome + ret + +Func_30d7: ; 30d7 (0:30d7) + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $433c + pop af + call BankswitchHome + ret + +Func_30e7: ; 30e7 (0:30e7) + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $4764 + ld b, a + pop af + call BankswitchHome + ld a, b + ret + +Func_30f9: ; 30f9 (0:30f9) + ld b, a + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $4932 + pop af + call BankswitchHome + ret + +Func_310a: ; 310a (0:310a) + ld [$ce59], a + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $4aaa + pop af + call BankswitchHome + ret + +Func_311d: ; 311d (0:311d) + ld a, [hBankROM] + push af + ld a, $2 + call BankswitchHome + call $4b85 + pop af + call BankswitchHome + ret + +Func_312d: ; 312d (0:312d) ; serial transfer-related + push hl + ld hl, $ce64 + ld a, $88 + ld [hli], a ; [$ce64] ← $88 + ld a, $33 + ld [hli], a ; [$ce65] ← $33 + ld [hl], d ; [$ce66] ← d + inc hl + ld [hl], e ; [$ce67] ← e + inc hl + ld [hl], c ; [$ce68] ← c + inc hl + ld [hl], b ; [$ce69] ← b + inc hl + pop de + ld [hl], e ; [$ce6a] ← l + inc hl + ld [hl], d ; [$ce6b] ← h + inc hl + ld de, $ff45 + ld [hl], e ; [$ce6c] ← $45 + inc hl + ld [hl], d ; [$ce6d] ← $ff + ld hl, $ce70 + ld [hl], $64 ; [$ce70] ← $64 + inc hl + ld [hl], $ce ; [$ce71] ← $ce + call Func_0e8e + ld a, $1 + ld [$ce63], a ; [$ce63] ← 1 + call Func_31fc +.asm_315d + call Func_053f + ld a, [$ce63] + or a + jr nz, .asm_315d + call ResetSerial + ld bc, $05dc +.asm_316c + dec bc + ld a, b + or c + jr nz, .asm_316c + ld a, [$ce6e] + cp $81 + jr nz, .asm_3182 + ld a, [$ce6f] + ld l, a + and $f1 + ld a, l + ret z + scf + ret +.asm_3182 + ld a, $ff + ld [$ce6f], a + scf + ret + +Func_3189: ; 3189 (0:3189) + ld hl, PointerTable_3190 + dec a + jp JumpToFunctionInTable + +PointerTable_3190: ; 3190 (0:3190) + dw Func_31a8 + dw Func_31a8 + dw Func_31a8 + dw Func_31a8 + dw Func_31a8 + dw Func_31b0 + dw Func_31ca + dw Func_31dd + dw Func_31e5 + dw Func_31ef + dw Func_31ea + dw Func_31f2 + +Func_31a8: ; 31a8 (0:31a8) + call Func_31fc +Func_31ab: ; 31ab (0:31ab) + ld hl, $ce63 + inc [hl] + ret + +Func_31b0: ; 31b0 (0:31b0) + call Func_31ab + ld hl, $ce68 + ld a, [hli] + or [hl] + jr nz, .asm_31bf + call Func_31ab + jr Func_31dd +.asm_31bf + ld hl, $ce6a + ld de, $ce70 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + +Func_31ca: ; 31ca (0:31ca) + call Func_31fc + ld hl, $ce68 + ld a, [hl] + dec [hl] + or a + jr nz, .asm_31d8 + inc hl + dec [hl] + dec hl +.asm_31d8 + ld a, [hli] + or [hl] + jr z, Func_31ab + ret + +Func_31dd: ; 31dd (0:31dd) + ld a, [$ce6c] +Func_31e0: ; 31e0 (0:31e0) + call Func_3212 + jr Func_31ab + +Func_31e5: ; 31e5 (0:31e5) + ld a, [$ce6d] + jr Func_31e0 + +Func_31ea: ; 31ea (0:31ea) + ld a, [rSB] + ld [$ce6e], a +Func_31ef: ; 31ef (0:31ef) + xor a + jr Func_31e0 + +Func_31f2: ; 31f2 (0:31f2) + ld a, [rSB] + ld [$ce6f], a + xor a + ld [$ce63], a + ret + +Func_31fc: ; 31fc (0:31fc) + ld hl, $ce70 + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + inc de + ld [hl], d + dec hl + ld [hl], e + ld e, a + ld hl, $ce6c + add [hl] + ld [hli], a + ld a, $0 + adc [hl] + ld [hl], a + ld a, e + ; fallthrough +Func_3212: ; 3212 (0:3212) + ld [rSB], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret +; 0x321d + +INCBIN "baserom.gbc",$321d,$377f - $321d + +SetupSound_T: ; 377f (0:377f) + farcall SetupSound_Ext + ret + +Func_3784: ; 3784 (0:3784) + xor a +PlaySong: ; 3785 (0:3785) + farcall Func_f4006 + ret + +Func_378a: ; 378a (0:378a) + farcall Func_f400f + ret + +Func_378f: ; 378f (0:378f) + farcall Func_f4012 + ret + +Func_3794: ; 3794 (0:3794) + ld a, $04 +Func_3796: ; 3796 (0:3796) + farcall Func_f4009 + ret + +Func_379b: ; 379b (0:379b) + farcall Func_f401b + ret + +Func_37a0: ; 37a0 (0:37a0) + farcall Func_f401e + ret +; 0x37a5 + +INCBIN "baserom.gbc",$37a5,$380e - $37a5 + +Func_380e: ; 380e (0:380e) + ld a, [$d0c1] + bit 7, a + ret nz + ld a, [hBankROM] + push af + ld a, BANK(Func_c484) + call BankswitchHome + call Func_c484 + call Func_c554 + ld a, BANK(Func_1c610) + call BankswitchHome + call Func_1c610 + call Func_3cb4 + ld a, BANK(Func_804d8) + call BankswitchHome + call Func_804d8 + call Func_089b + pop af + call BankswitchHome + ret + +Func_383d: ; 383d (0:383d) + ld a, $1 + ld [wCounterEnable], a + ld a, [hBankROM] + push af +.asm_3845 + call Func_3855 + jr nc, .asm_3850 + farcall LoadMap + jr .asm_3845 +.asm_3850 + pop af + call BankswitchHome + ret + +Func_3855: ; 3855 (0:3855) + ld a, [$d0b5] + cp $7 + jr c, .asm_385e + ld a, $6 +.asm_385e + ld hl, PointerTable_3864 + jp JumpToFunctionInTable + +PointerTable_3864: ; 3864 (0:3864) + dw Func_3874 + dw Func_38c0 + dw Func_38a3 + dw Func_3876 + dw Credits_3911 + dw Func_38fb + dw Func_38db + dw Func_3874 + +Func_3874: ; 3874 (0:3874) + scf + ret + +Func_3876: ; 3876 (0:3876) + ld a, [hBankROM] + push af + call Func_379b + ld a, MUSIC_CARDPOP + call PlaySong + ld a, $3 + ld [$d0c2], a + ld a, [$d10e] + or $10 + ld [$d10e], a + farcall Func_b177 + ld a, [$d10e] + and $ef + ld [$d10e], a + call Func_37a0 + pop af + call BankswitchHome + scf + ret + +Func_38a3: ; 38a3 (0:38a3) + ld a, $2 + ld [$d0c2], a + xor a + ld [$d112], a + ld a, $ff + ld [$d0c3], a + ld a, $2 + ld [$cc1a], a + ld a, MUSIC_CARDPOP + call PlaySong + bank1call Func_758f + scf + ret + +Func_38c0: ; 38c0 (0:38c0) + ld a, $1 + ld [$d0c2], a + xor a + ld [$d112], a + call EnableExtRAM + xor a + ld [$ba44], a + call DisableExtRAM + call Func_3a3b + bank1call Duel_Start + scf + ret + +Func_38db: ; 38db (0:38db) + ld a, $6 + ld [$d111], a + call Func_39fc + call EnableExtRAM + xor a + ld [$ba44], a + call DisableExtRAM +asm_38ed + farcall Func_131d3 + ld a, $9 + ld [$d111], a + call Func_39fc + scf + ret + +Func_38fb: ; 38fb (0:38fb) + xor a + ld [$d112], a + bank1call Func_406f + call EnableExtRAM + ld a, [$ba44] + call DisableExtRAM + cp $ff + jr z, asm_38ed + scf + ret + +Credits_3911: ; 3911 (0:3911) + farcall Credits_1d6ad + or a + ret +; 0x3917 + +INCBIN "baserom.gbc",$3917,$3927 - $3917 + +Func_3927: ; 3927 (0:3927) + push hl + call Func_3946 + ld a, [hl] + pop hl + ret +; 0x392e + +INCBIN "baserom.gbc",$392e,$3946 - $392e + +Func_3946: ; 3946 (0:3946) + push bc + srl b + srl c + swap c + ld a, c + and $f0 + or b + ld c, a + ld b, $0 + ld hl, $d133 + add hl, bc + pop bc + ret + +Func_395a: ; 395a (0:395a) + ld a, [hBankROM] + push af + ld a, [$d4c6] + call BankswitchHome + call CopyGfxData + pop af + call BankswitchHome + ret + +Unknown_396b: ; 396b (0:396b) +INCBIN "baserom.gbc",$396b,$3973 - $396b + +Unknown_3973: ; 3973 (0:3973) +INCBIN "baserom.gbc",$3973,$397b - $3973 + +Unknown_397b: ; 397b (0:397b) +INCBIN "baserom.gbc",$397b,$3997 - $397b + +Func_3997: ; 3997 (0:3997) + ld a, [hBankROM] + push af + ld a, BANK(Func_1c056) + call BankswitchHome + call Func_1c056 + pop af + call BankswitchHome + ret +; 0x39a7 + +INCBIN "baserom.gbc",$39a7,$39ad - $39a7 + +Func_39ad: ; 39ad (0:39ad) + push bc + cp $8 + jr c, .asm_39b4 + rst $38 + xor a +.asm_39b4 + add a + add a + ld h, a + add a + add h + add l + ld l, a + ld h, $0 + ld bc, $d34a + add hl, bc + pop bc + ret + +Func_39c3: ; 39c3 (0:39c3) + push hl + push bc + push de + xor a + ld [$d3aa], a + ld b, a + ld c, $8 + ld de, $000c + ld hl, $d34a + ld a, [$d3ab] +.asm_39d6 + cp [hl] + jr z, .asm_39e1 + add hl, de + inc b + dec c + jr nz, .asm_39d6 + scf + jr z, .asm_39e6 +.asm_39e1 + ld a, b + ld [$d3aa], a + or a +.asm_39e6 + pop de + pop bc + pop hl + ret +; 0x39ea + +INCBIN "baserom.gbc",$39ea,$39fc - $39ea + +Func_39fc: ; 39fc (0:39fc) + push hl + push bc + call Func_378a + or a + push af + call Func_3a1f + ld c, a + pop af + jr z, .asm_3a11 + ld a, c + ld hl, $d112 + cp [hl] + jr z, .asm_3a1c +.asm_3a11 + ld a, c + cp $1f + jr nc, .asm_3a1c + ld [$d112], a + call PlaySong +.asm_3a1c + pop bc + pop hl + ret + +Func_3a1f: ; 3a1f (0:3a1f) + ld a, [$d3b8] + or a + jr z, .asm_3a37 + ld a, [$d32e] + cp $2 + jr z, .asm_3a37 + cp $b + jr z, .asm_3a37 + cp $c + jr z, .asm_3a37 + ld a, MUSIC_RONALD + ret +.asm_3a37 + ld a, [$d111] + ret + +Func_3a3b: ; 3a3b (0:3a3b) + farcall Func_1124d + ret + +Func_3a40: ; 3a40 (0:3a40) + farcall Func_11430 + ret +; 0x3a45 + +INCBIN "baserom.gbc",$3a45,$3a5e - $3a45 + +Func_3a5e: ; 3a5e (0:3a5e) + ld a, [hBankROM] + push af + ld l, $4 + call Func_3abd + jr nc, .asm_3ab3 + ld a, BANK(Func_c653) + call BankswitchHome + call Func_c653 + ld a, $4 + call BankswitchHome + ld a, [$d334] + ld d, a +.asm_3a79 + ld a, [hli] + bit 7, a + jr nz, .asm_3ab3 + push bc + push hl + cp d + jr nz, .asm_3aab + ld a, [hli] + cp b + jr nz, .asm_3aab + ld a, [hli] + cp c + jr nz, .asm_3aab + ld a, [hli] + ld [$d0c6], a + ld a, [hli] + ld [$d0c7], a + ld a, [hli] + ld [$d0ca], a + ld a, [hli] + ld [$d0cb], a + ld a, [hli] + ld [$d0c8], a + ld a, [hli] + ld [$d0c9], a + pop hl + pop bc + pop af + call BankswitchHome + scf + ret +.asm_3aab + pop hl + ld bc, $0008 + add hl, bc + pop bc + jr .asm_3a79 +.asm_3ab3 + pop af + call BankswitchHome + ld l, $6 + call $49c2 + ret + +Func_3abd: ; 3abd (0:3abd) + push bc + push hl + ld a, [wCurMap] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld bc, MapScripts + add hl, bc + pop bc + ld b, $0 + add hl, bc + ld a, [hBankROM] + push af + ld a, BANK(MapScripts) + call BankswitchHome + ld a, [hli] + ld h, [hl] + ld l, a + pop af + call BankswitchHome + ld a, l + or h + jr nz, .asm_3ae5 + scf +.asm_3ae5 + ccf + pop bc + ret +; 0x3ae8 + +INCBIN "baserom.gbc",$3ae8,$3aed - $3ae8 + +Func_3aed: ; 3aed (0:3aed) + ld hl, $d413 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] + ld c, [hl] + inc hl + ld b, [hl] + push bc + rlca + ld c, a + ld b, $0 + ld hl, Unknown_1217b + add hl, bc + ld a, [hBankROM] + push af + ld a, BANK(Unknown_1217b) + call BankswitchHome + ld a, [hli] + ld h, [hl] + ld l, a + pop af + call BankswitchHome + pop bc + jp [hl] +; 0x3b11 + +INCBIN "baserom.gbc",$3b11,$3bd2 - $3b11 + +Func_3bd2: ; 3bd2 (0:3bd2) + ld a, l + ld [$cad3], a + ld a, h + ld [$cad4], a + ret + +Func_3bdb: ; 3bdb (0:3bdb) + push hl + ld hl, $0000 + call Func_3bd2 + pop hl + ret +; 0x3be4 + +INCBIN "baserom.gbc",$3be4,$3bf5 - $3be4 + +Func_3bf5: ; 3bf5 (0:3bf5) + ld a, [hBankROM] + push af + push hl + ld a, [$d4c6] + call BankswitchHome + ld a, [$d4c4] + ld l, a + ld a, [$d4c5] + ld h, a + call CopyData_SaveRegisters + pop hl + pop af + call BankswitchHome + ret +; 0x3c10 + +INCBIN "baserom.gbc",$3c10,$3c45 - $3c10 + +Func_3c45: ; 3c45 (0:3c45) + jp [hl] +; 0x3c46 + +INCBIN "baserom.gbc",$3c46,$3c48 - $3c46 + +Func_3c48: ; 3c48 (0:3c48) + push af + ld a, [rLCDC] + bit 7, a + jr z, .asm_3c58 + push bc + push de + push hl + call Func_053f + pop hl + pop de + pop bc +.asm_3c58 + pop af + ret + +Func_3c5a: ; 3c5a (0:3c5a) + ld hl, $0000 + rl c + rl b + ld a, $10 +.asm_3c63 + ld [$ffb6], a + rl l + rl h + push hl + ld a, l + sub e + ld l, a + ld a, h + sbc d + ccf + jr nc, .asm_3c78 + ld h, a + add sp, $2 + scf + jr .asm_3c79 +.asm_3c78 + pop hl +.asm_3c79 + rl c + rl b + ld a, [$ffb6] + dec a + jr nz, .asm_3c63 + ret +; 0x3c83 + +INCBIN "baserom.gbc",$3c83,$3ca0 - $3c83 + +Func_3ca0: ; 3ca0 (0:3ca0) + xor a + ld [$d5d7], a + ld a, [hBankROM] + push af + ld a, BANK(Func_1296e) + call BankswitchHome + call Func_1296e + pop af + call BankswitchHome + ret + +Func_3cb4: ; 3cb4 (0:3cb4) + ld a, [hBankROM] + push af + ld a, BANK(Func_12a21) + call BankswitchHome + call Func_12a21 + pop af + call BankswitchHome + ret +; 0x3cc4 + +INCBIN "baserom.gbc",$3cc4,$3d72 - $3cc4 + +Func_3d72: ; 3d72 (0:3d72) + ld a, [hBankROM] + push af + push hl + push hl + ld a, [$d4ca] + cp $ff + jr nz, .asm_3d84 + ld de, Unknown_80e5a + xor a + jr .asm_3da1 +.asm_3d84 + ld a, [$d4c4] + ld l, a + ld a, [$d4c5] + ld h, a + ld a, [$d4c6] + call BankswitchHome + ld a, [hli] + push af + ld a, [$d4ca] + rlca + ld e, [hl] + add e + ld e, a + inc hl + ld a, [hl] + adc $0 + ld d, a + pop af +.asm_3da1 + add BANK(Unknown_80e5a) + pop hl + ld bc, $000b + add hl, bc + ld [hli], a + call BankswitchHome + ld a, [de] + ld [hli], a + inc de + ld a, [de] + ld [hl], a + pop hl + pop af + call BankswitchHome + ret + +Func_3db7: ; 3db7 (0:3db7) + push bc + ld c, $0 + call Func_3dbf + pop bc + ret + +Func_3dbf: ; 3dbf (0:3dbf) + ld a, [$d4cf] + cp $10 + jr c, .asm_3dc9 + rst $38 + ld a, $f +.asm_3dc9 + push bc + swap a + push af + and $f + ld b, a + pop af + and $f0 + or c + ld c, a + ld hl, $d4d0 + add hl, bc + pop bc + ret +; 0x3ddb + +INCBIN "baserom.gbc",$3ddb,$3df3 - $3ddb + +Func_3df3: ; 3df3 (0:3df3) + push af + ld a, [hBankROM] + push af + push hl + ld a, BANK(Func_12c7f) + call BankswitchHome + ld hl, [sp+$5] + ld a, [hl] + call Func_12c7f + call Func_0404 + pop hl + pop af + call BankswitchHome + pop af + ld a, [$d61b] + ret +; 0x3e10 + +INCBIN "baserom.gbc",$3e10,$3e17 - $3e10 + +Func_3e17: ; 3e17 (0:3e17) + ld [$d131], a + ld a, [hBankROM] + push af + ld a, $4 + call BankswitchHome + call $6fc6 + pop af + call BankswitchHome + ret + +Func_3e2a: ; 3e2a (0:3e2a) + ld [$d61e], a + ld a, $63 + jr Func_3e17 +; 0x3e31 + +INCBIN "baserom.gbc",$3e31,$3fe0 - $3e31 + +; jumps to 3f:hl +Bankswitch3dTo3f:: ; 3fe0 (0:3fe0) + push af + ld a, $3f + ld [hBankROM], a + ld [MBC3RomBank], a + pop af + ld bc, Bankswitch3d + push bc + jp [hl] + +Bankswitch3d: ; 3fe0 (0:3fe0) + ld a, $3d + ld [hBankROM], a + ld [MBC3RomBank], a + ret + +rept $a +db $ff +endr |