summaryrefslogtreecommitdiff
path: root/engine/home.asm
diff options
context:
space:
mode:
authorDaniel Harding <corrnondacqb@yahoo.com>2015-03-19 00:19:59 -0400
committerDaniel Harding <corrnondacqb@yahoo.com>2015-03-19 00:19:59 -0400
commitae198f05566310d64d201bc8e5b9b54f90c27b7b (patch)
treed5fe4e6cde4cfa6d37e1a9f04ee267c384b73f42 /engine/home.asm
parent3c75edba47b89066383a4dae07d225cbc1cbff77 (diff)
parentd41ad62f5bf43c98d05c593d5c64a5a42b7c0cee (diff)
Merge pull request #6 from stag019/srcrgbgfx
Move source code into "src/". Update Makefile/scan_includes.
Diffstat (limited to 'engine/home.asm')
-rwxr-xr-xengine/home.asm4851
1 files changed, 0 insertions, 4851 deletions
diff --git a/engine/home.asm b/engine/home.asm
deleted file mode 100755
index dd06781..0000000
--- a/engine/home.asm
+++ /dev/null
@@ -1,4851 +0,0 @@
-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