summaryrefslogtreecommitdiff
path: root/engine/menus/debug.asm
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-23 02:08:02 -0400
committerentrpntr <entrpntr@gmail.com>2020-05-23 02:08:02 -0400
commitec7271ec261ba5162764eabe4ef94f2f4a7fdf1b (patch)
treee03e2e1c110626d9b757c24bdf5e116a11e091b6 /engine/menus/debug.asm
parent3a50abc46a294ee670beddff327e7f6cf21bb61c (diff)
Add engine/menus/debug.asm.
Diffstat (limited to 'engine/menus/debug.asm')
-rw-r--r--engine/menus/debug.asm1430
1 files changed, 1430 insertions, 0 deletions
diff --git a/engine/menus/debug.asm b/engine/menus/debug.asm
new file mode 100644
index 00000000..cd494d41
--- /dev/null
+++ b/engine/menus/debug.asm
@@ -0,0 +1,1430 @@
+ const_def $6a
+ const DEBUGTEST_TICKS_1 ; $6a
+ const DEBUGTEST_TICKS_2 ; $6b
+ const DEBUGTEST_WHITE ; $6c
+ const DEBUGTEST_LIGHT ; $6d
+ const DEBUGTEST_DARK ; $6e
+ const DEBUGTEST_BLACK ; $6f
+ const DEBUGTEST_0 ; $70
+ const DEBUGTEST_1 ; $71
+ const DEBUGTEST_2 ; $72
+ const DEBUGTEST_3 ; $73
+ const DEBUGTEST_4 ; $74
+ const DEBUGTEST_5 ; $75
+ const DEBUGTEST_6 ; $76
+ const DEBUGTEST_7 ; $77
+ const DEBUGTEST_8 ; $78
+ const DEBUGTEST_9 ; $79
+ const DEBUGTEST_A ; $7a
+ const DEBUGTEST_B ; $7b
+ const DEBUGTEST_C ; $7c
+ const DEBUGTEST_D ; $7d
+ const DEBUGTEST_E ; $7e
+ const DEBUGTEST_F ; $7f
+
+ColorTest:
+; A debug menu to test monster and trainer palettes at runtime.
+
+ ldh a, [hCGB]
+ and a
+ jr nz, .asm_fd2d2
+ ldh a, [hSGB]
+ and a
+ ret z
+
+.asm_fd2d2
+ ldh a, [hInMenu]
+ push af
+ ld a, $1
+ ldh [hInMenu], a
+ call DisableLCD
+ call Functionfd365
+ call Functionfd399
+ call Functionfd3c4
+ call Functionfd311
+ call EnableLCD
+ ld de, MUSIC_NONE
+ call PlayMusic
+ xor a
+ ld [wJumptableIndex], a
+ ld [wce66], a
+ ld [wceee], a
+.asm_fd2fb
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .asm_fd30d
+ call Functionfd487
+ call Functionfd967
+ call DelayFrame
+ jr .asm_fd2fb
+
+.asm_fd30d
+ pop af
+ ldh [hInMenu], a
+ ret
+
+Functionfd311:
+ ld a, [wceed]
+ and a
+ jr nz, Functionfd32e
+ ld hl, PokemonPalettes
+
+Functionfd31a:
+ ld de, wOverworldMapBlocks
+ ld c, NUM_POKEMON + 1
+.asm_fd31f
+ push bc
+ push hl
+ call Functionfd345
+ pop hl
+ ld bc, 8
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .asm_fd31f
+ ret
+
+Functionfd32e:
+ ld hl, TrainerPalettes
+ ld de, wOverworldMapBlocks
+ ld c, NUM_TRAINER_CLASSES
+.asm_fd336
+ push bc
+ push hl
+ call Functionfd345
+ pop hl
+ ld bc, 4
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .asm_fd336
+ ret
+
+Functionfd345:
+ ld a, BANK(PokemonPalettes) ; aka BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ inc hl
+ ld a, BANK(PokemonPalettes) ; aka BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ inc hl
+ ld a, BANK(PokemonPalettes) ; aka BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ inc hl
+ ld a, BANK(PokemonPalettes) ; aka BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ ret
+
+Functionfd365:
+ ld a, $1
+ ldh [rVBK], a
+ ld hl, vTiles0
+ ld bc, sScratch - vTiles0
+ xor a
+ call ByteFill
+ ld a, $0
+ ldh [rVBK], a
+ ld hl, vTiles0
+ ld bc, sScratch - vTiles0
+ xor a
+ call ByteFill
+ hlcoord 0, 0, wAttrmap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ call ClearSprites
+ ret
+
+Functionfd399:
+ ld hl, DebugColorTestGFX
+ ld de, vTiles2 tile DEBUGTEST_TICKS_1
+ ld bc, 22 tiles
+ call CopyBytes
+ ld hl, DebugUpArrowGFX
+ ld de, vTiles0
+ ld bc, 1 tiles
+ call CopyBytes
+ call LoadStandardFont
+ ld hl, vTiles1
+ lb bc, 8, 0
+.asm_fd3ba
+ ld a, [hl]
+ xor $ff
+ ld [hli], a
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_fd3ba
+ ret
+
+Functionfd3c4:
+ ldh a, [hCGB]
+ and a
+ ret z
+ ld hl, Palette_DebugBG
+ ld de, wBGPals2
+ ld bc, 16 palettes
+ call CopyBytes
+ ld a, 1 << rBGPI_AUTO_INCREMENT
+ ldh [rBGPI], a
+ ld hl, Palette_DebugBG
+ ld c, 8 palettes
+ xor a
+.asm_fd3de
+ ldh [rBGPD], a
+ dec c
+ jr nz, .asm_fd3de
+ ld a, 1 << rOBPI_AUTO_INCREMENT
+ ldh [rOBPI], a
+ ld hl, Palette_DebugOB
+ ld c, 8 palettes
+.asm_fd3ec
+ ld a, [hli]
+ ldh [rOBPD], a
+ dec c
+ jr nz, .asm_fd3ec
+ ld a, $94
+ ld [wc508], a
+ ld a, $52
+ ld [wc508 + 1], a
+ ld a, $4a
+ ld [wc508 + 2], a
+ ld a, $29
+ ld [wc508 + 3], a
+ ret
+
+Palette_DebugBG:
+INCLUDE "gfx/debug/bg.pal"
+
+Palette_DebugOB:
+INCLUDE "gfx/debug/ob.pal"
+
+Functionfd487:
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ cp $4
+ jr nc, .asm_fd49e
+ ld hl, hJoyLast
+ ld a, [hl]
+ and SELECT
+ jr nz, .asm_fd4ad
+ ld a, [hl]
+ and START
+ jr nz, .asm_fd4be
+
+.asm_fd49e
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_fd4e2
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.asm_fd4ad
+ call Functionfd8d3
+ call Functionfd4d6
+ ld e, a
+ ld a, [wce66]
+ inc a
+ cp e
+ jr c, .asm_fd4cd
+ xor a
+ jr .asm_fd4cd
+
+.asm_fd4be
+ call Functionfd8d3
+ ld a, [wce66]
+ dec a
+ cp $ff
+ jr nz, .asm_fd4cd
+ call Functionfd4d6
+ dec a
+
+.asm_fd4cd
+ ld [wce66], a
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+
+Functionfd4d6:
+; Looping back around the pic set.
+ ld a, [wceed]
+ and a
+ jr nz, .asm_fd4df
+ ld a, NUM_POKEMON ; CELEBI
+ ret
+
+.asm_fd4df
+ ld a, NUM_TRAINER_CLASSES - 1 ; MYSTICALMAN
+ ret
+
+Jumptable_fd4e2:
+ dw Functionfd4ee
+ dw Functionfd62b
+ dw Functionfd646
+ dw Functionfd6cb
+ dw Functionfd797
+ dw Functionfd7b8
+
+Functionfd4ee:
+ xor a
+ ldh [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, DEBUGTEST_BLACK
+ call ByteFill
+ hlcoord 1, 3
+ lb bc, 7, 18
+ ld a, DEBUGTEST_WHITE
+ call Bank3f_FillBoxWithByte
+ hlcoord 11, 0
+ lb bc, 2, 3
+ ld a, DEBUGTEST_LIGHT
+ call Bank3f_FillBoxWithByte
+ hlcoord 16, 0
+ lb bc, 2, 3
+ ld a, DEBUGTEST_DARK
+ call Bank3f_FillBoxWithByte
+ call Functionfd5d3
+ call Functionfd607
+ ld a, [wce66]
+ inc a
+ ld [wCurPartySpecies], a
+ ld [wDeciramBuffer], a
+ hlcoord 0, 1
+ ld de, wDeciramBuffer
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+ call PrintNum
+ ld a, [wceed]
+ and a
+ jr nz, .asm_fd58d
+ ld a, $1
+ ld [wUnownLetter], a
+ call GetPokemonName
+ hlcoord 4, 1
+ call PlaceString
+ xor a
+ ld [wBoxAlignment], a
+ hlcoord 2, 3
+ call _PrepMonFrontpic
+ ld de, vTiles2 tile $31
+ predef GetMonBackpic
+ ld a, $31
+ ldh [hGraphicStartTile], a
+ hlcoord 12, 4
+ lb bc, 6, 6
+ predef PlaceGraphic
+ ld a, [wceee]
+ and a
+ jr z, .asm_fd579
+ ld de, String_fd5c2
+ jr .asm_fd57c
+
+.asm_fd579
+ ld de, String_fd5c7
+
+.asm_fd57c
+ hlcoord 7, 17
+ call PlaceString
+ hlcoord 0, 17
+ ld de, String_fd5cc
+ call PlaceString
+ jr .asm_fd5bc
+
+.asm_fd58d
+ ld a, [wDeciramBuffer]
+ ld [wTrainerClass], a
+ callfar GetTrainerAttributes
+ ld de, wStringBuffer1
+ hlcoord 4, 1
+ call PlaceString
+ ld de, vTiles2
+ callfar GetTrainerPic
+ xor a
+ ld [wTempEnemyMonSpecies], a
+ ldh [hGraphicStartTile], a
+ hlcoord 2, 3
+ lb bc, 7, 7
+ predef PlaceGraphic
+
+.asm_fd5bc
+ ld a, $1
+ ld [wJumptableIndex], a
+ ret
+
+String_fd5c2: db "レア", DEBUGTEST_BLACK, DEBUGTEST_BLACK, "@" ; rare (shiny)
+String_fd5c7: db "ノーマル@" ; normal
+String_fd5cc: db DEBUGTEST_A, "きりかえ▶@" ; (A) switches
+
+Functionfd5d3:
+ decoord 0, 11, wAttrmap
+ hlcoord 2, 11
+ ld a, $1
+ call Functionfd5f1
+ decoord 0, 13, wAttrmap
+ hlcoord 2, 13
+ ld a, $2
+ call Functionfd5f1
+ decoord 0, 15, wAttrmap
+ hlcoord 2, 15
+ ld a, $3
+
+Functionfd5f1:
+ push af
+ ld a, DEBUGTEST_TICKS_1
+ ld [hli], a
+ ld bc, $f
+ ld a, DEBUGTEST_TICKS_2
+ call ByteFill
+ ld l, e
+ ld h, d
+ pop af
+ ld bc, $28
+ call ByteFill
+ ret
+
+Functionfd607:
+ ld a, [wce66]
+ inc a
+ ld l, a
+ ld h, $0
+ add hl, hl
+ add hl, hl
+ ld de, wOverworldMapBlocks
+ add hl, de
+ ld de, wc508
+ ld bc, 4
+ call CopyBytes
+ xor a
+ ld [wce64], a
+ ld [wce65], a
+ ld de, wc508
+ call Functionfd8ae
+ ret
+
+Functionfd62b:
+ ldh a, [hCGB]
+ and a
+ jr z, .asm_fd63d
+ ld a, $2
+ ldh [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+
+.asm_fd63d
+ call WaitBGMap
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+
+Functionfd646:
+ ldh a, [hCGB]
+ and a
+ jr z, .asm_fd672
+ ld hl, wBGPals2
+ ld de, wc508
+ ld c, $1
+ call Functionfd8ec
+ hlcoord 10, 2
+ ld de, wc508
+ call Functionfd6b0
+ hlcoord 15, 2
+ ld de, wc508 + 2
+ call Functionfd6b0
+ ld a, $1
+ ldh [hCGBPalUpdate], a
+ ld a, $3
+ ld [wJumptableIndex], a
+ ret
+
+.asm_fd672
+ ld hl, wSGBPals
+ ld a, 1
+ ld [hli], a
+ ld a, LOW(PALRGB_WHITE)
+ ld [hli], a
+ ld a, HIGH(PALRGB_WHITE)
+ ld [hli], a
+ ld a, [wc508]
+ ld [hli], a
+ ld a, [wc508 + 1]
+ ld [hli], a
+ ld a, [wc508 + 2]
+ ld [hli], a
+ ld a, [wc508 + 3]
+ ld [hli], a
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld hl, wSGBPals
+ call Functionfd915
+ hlcoord 10, 2
+ ld de, wc508
+ call Functionfd6b0
+ hlcoord 15, 2
+ ld de, wc508 + 2
+ call Functionfd6b0
+ ld a, $3
+ ld [wJumptableIndex], a
+ ret
+
+Functionfd6b0:
+ inc hl
+ inc hl
+ inc hl
+ ld a, [de]
+ call Functionfd6c5
+ ld a, [de]
+ swap a
+ call Functionfd6c5
+ inc de
+ ld a, [de]
+ call Functionfd6c5
+ ld a, [de]
+ swap a
+
+Functionfd6c5:
+ and $f
+ add DEBUGTEST_0
+ ld [hld], a
+ ret
+
+Functionfd6cb:
+ ldh a, [hJoyLast]
+ and B_BUTTON
+ jr nz, .asm_fd6e8
+ ldh a, [hJoyLast]
+ and A_BUTTON
+ jr nz, .asm_fd6ee
+ ld a, [wce64]
+ and $3
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_fd70b
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.asm_fd6e8
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+
+.asm_fd6ee
+ ld a, [wceed]
+ and a
+ ret nz
+ ld a, [wceee]
+ xor $4
+ ld [wceee], a
+ ld c, a
+ ld b, 0
+ ld hl, PokemonPalettes
+ add hl, bc
+ call Functionfd31a
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+
+Jumptable_fd70b:
+ dw Functionfd713
+ dw Functionfd73d
+ dw Functionfd74f
+ dw Functionfd761
+
+Functionfd713:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Functionfd792
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .asm_fd726
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .asm_fd731
+ ret
+
+.asm_fd726
+ xor a
+ ld [wce65], a
+ ld de, wc508
+ call Functionfd8ae
+ ret
+
+.asm_fd731
+ ld a, $1
+ ld [wce65], a
+ ld de, wc508 + 2
+ call Functionfd8ae
+ ret
+
+Functionfd73d:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Functionfd792
+ ld a, [hl]
+ and D_UP
+ jr nz, Functionfd78d
+ ld hl, wc508 + 10
+ jr Functionfd76c
+
+Functionfd74f:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Functionfd792
+ ld a, [hl]
+ and D_UP
+ jr nz, Functionfd78d
+ ld hl, wc508 + 11
+ jr Functionfd76c
+
+Functionfd761:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, Functionfd78d
+ ld hl, wc508 + 12
+
+Functionfd76c:
+ ldh a, [hJoyLast]
+ and D_RIGHT
+ jr nz, Functionfd779
+ ldh a, [hJoyLast]
+ and D_LEFT
+ jr nz, Functionfd780
+ ret
+
+Functionfd779:
+ ld a, [hl]
+ cp $1f
+ ret nc
+ inc [hl]
+ jr Functionfd784
+
+Functionfd780:
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+
+Functionfd784:
+ call Functionfd870
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+
+Functionfd78d:
+ ld hl, wce64
+ dec [hl]
+ ret
+
+Functionfd792:
+ ld hl, wce64
+ inc [hl]
+ ret
+
+Functionfd797:
+ hlcoord 0, 10
+ ld bc, $a0
+ ld a, DEBUGTEST_BLACK
+ call ByteFill
+ hlcoord 2, 12
+ ld de, String_fd9d6
+ call PlaceString
+ xor a
+ ld [wceef], a
+ call Functionfd7fd
+ ld a, $5
+ ld [wJumptableIndex], a
+ ret
+
+Functionfd7b8:
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .asm_fd7b8
+ call Functionfd7d0
+ ret
+
+.asm_fd7b8
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+
+Functionfd7ca:
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+Functionfd7d0:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_fd7de
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_fd7eb
+ ret
+
+.asm_fd7de
+ ld a, [wceef]
+ cp $38
+ jr z, .asm_fd7e8
+ inc a
+ jr .asm_fd7f6
+
+.asm_fd7e8
+ xor a
+ jr .asm_fd7f6
+
+.asm_fd7eb
+ ld a, [wceef]
+ and a
+ jr z, .asm_fd7f4
+ dec a
+ jr .asm_fd7f6
+
+.asm_fd7f4
+ ld a, $38
+
+.asm_fd7f6
+ ld [wceef], a
+ call Functionfd7fd
+ ret
+
+Functionfd7fd:
+ hlcoord 10, 11
+ call Functionfd867
+ hlcoord 10, 12
+ call Functionfd867
+ hlcoord 10, 13
+ call Functionfd867
+ hlcoord 10, 14
+ call Functionfd867
+ ld a, [wceef]
+ inc a
+ ld [wTempTMHM], a
+ predef GetTMHMMove
+ ld a, [wTempTMHM]
+ ld [wPutativeTMHMMove], a
+ call GetMoveName
+ hlcoord 10, 12
+ call PlaceString
+ ld a, [wceef]
+ call Functionfd85e
+ ld [wCurItem], a
+ predef CanLearnTMHMMove
+ ld a, c
+ and a
+ ld de, String_fd84f
+ jr nz, .asm_fd848
+ ld de, String_fd856
+
+.asm_fd848
+ hlcoord 10, 14
+ call PlaceString
+ ret
+
+String_fd84f: db "おぼえられる@" ; can be taught
+String_fd856: db "おぼえられない@" ; cannot be taught
+
+Functionfd85e:
+ cp $32
+ jr c, .asm_fd864
+ inc a
+ inc a
+
+.asm_fd864
+ add $bf
+ ret
+
+Functionfd867:
+ ld bc, 10
+ ld a, DEBUGTEST_BLACK
+ call ByteFill
+ ret
+
+Functionfd870:
+ ld a, [wc508 + 10]
+ and $1f
+ ld e, a
+ ld a, [wc508 + 11]
+ and $7
+ sla a
+ swap a
+ or e
+ ld e, a
+ ld a, [wc508 + 11]
+ and $18
+ sla a
+ swap a
+ ld d, a
+ ld a, [wc508 + 12]
+ and $1f
+ sla a
+ sla a
+ or d
+ ld d, a
+ ld a, [wce65]
+ and a
+ jr z, .asm_fd8a5
+ ld a, e
+ ld [wc508 + 2], a
+ ld a, d
+ ld [wc508 + 3], a
+ ret
+
+.asm_fd8a5
+ ld a, e
+ ld [wc508], a
+ ld a, d
+ ld [wc508 + 1], a
+ ret
+
+Functionfd8ae:
+ ld a, [de]
+ and $1f
+ ld [wc508 + 10], a
+ ld a, [de]
+ and $e0
+ swap a
+ srl a
+ ld b, a
+ inc de
+ ld a, [de]
+ and $3
+ swap a
+ srl a
+ or b
+ ld [wc508 + 11], a
+ ld a, [de]
+ and $7c
+ srl a
+ srl a
+ ld [wc508 + 12], a
+ ret
+
+Functionfd8d3:
+ ld a, [wce66]
+ inc a
+ ld l, a
+ ld h, $0
+ add hl, hl
+ add hl, hl
+ ld de, wOverworldMapBlocks
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, wc508
+ ld bc, 4
+ call CopyBytes
+ ret
+
+Functionfd8ec:
+.asm_fd8ec
+ ld a, LOW(PALRGB_WHITE)
+ ld [hli], a
+ ld a, HIGH(PALRGB_WHITE)
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ xor a
+ ld [hli], a
+ ld [hli], a
+ dec c
+ jr nz, .asm_fd8ec
+ ret
+
+Bank3f_FillBoxWithByte:
+; For some reason, we have another copy of FillBoxWithByte here
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+
+Functionfd915:
+ ld a, [wd8ba]
+ push af
+ set 7, a
+ ld [wd8ba], a
+ call Functionfd926
+ pop af
+ ld [wd8ba], a
+ ret
+
+Functionfd926:
+ ld a, [hl]
+ and $7
+ ret z
+ ld b, a
+.asm_fd92b
+ push bc
+ xor a
+ ldh [rJOYP], a
+ ld a, $30
+ ldh [rJOYP], a
+ ld b, $10
+.asm_fd935
+ ld e, $8
+ ld a, [hli]
+ ld d, a
+.asm_fd939
+ bit 0, d
+ ld a, $10
+ jr nz, .asm_fd941
+ ld a, $20
+
+.asm_fd941
+ ldh [rJOYP], a
+ ld a, $30
+ ldh [rJOYP], a
+ rr d
+ dec e
+ jr nz, .asm_fd939
+ dec b
+ jr nz, .asm_fd935
+ ld a, $20
+ ldh [rJOYP], a
+ ld a, $30
+ ldh [rJOYP], a
+ ld de, 7000
+.asm_fd95a
+ nop
+ nop
+ nop
+ dec de
+ ld a, d
+ or e
+ jr nz, .asm_fd95a
+ pop bc
+ dec b
+ jr nz, .asm_fd92b
+ ret
+
+Functionfd967:
+ ld a, DEBUGTEST_BLACK
+ hlcoord 10, 0
+ ld [hl], a
+ hlcoord 15, 0
+ ld [hl], a
+ hlcoord 1, 11
+ ld [hl], a
+ hlcoord 1, 13
+ ld [hl], a
+ hlcoord 1, 15
+ ld [hl], a
+ ld a, [wJumptableIndex]
+ cp $3
+ jr nz, .asm_fd9d2
+ ld a, [wce64]
+ and a
+ jr z, .asm_fd996
+ dec a
+ hlcoord 1, 11
+ ld bc, 2 * SCREEN_WIDTH
+ call AddNTimes
+ ld [hl], $ed
+
+.asm_fd996
+ ld a, [wce65]
+ and a
+ jr z, .asm_fd9a1
+ hlcoord 15, 0
+ jr .asm_fd9a4
+
+.asm_fd9a1
+ hlcoord 10, 0
+
+.asm_fd9a4
+ ld [hl], $ed
+ ld b, $70
+ ld c, $5
+ ld hl, wVirtualOAM
+ ld de, wc508 + 10
+ call .asm_fd9c0
+ ld de, wc508 + 11
+ call .asm_fd9c0
+ ld de, wc508 + 12
+ call .asm_fd9c0
+ ret
+
+.asm_fd9c0
+ ld a, b
+ ld [hli], a ; y
+ ld a, [de]
+ add a
+ add a
+ add 3 * TILE_WIDTH
+ ld [hli], a ; x
+ xor a
+ ld [hli], a ; tile id
+ ld a, c
+ ld [hli], a ; attributes
+ ld a, 2 * TILE_WIDTH
+ add b
+ ld b, a
+ inc c
+ ret
+
+.asm_fd9d2
+ call ClearSprites
+ ret
+
+String_fd9d6:
+ db "おわりますか?" ; Are you finished?
+ next "はい<DOT><DOT><DOT>", DEBUGTEST_A ; YES...(A)
+ next "いいえ<DOT><DOT>", DEBUGTEST_B ; NO..(B)
+ db "@"
+
+DebugUpArrowGFX:
+INCBIN "gfx/debug/up_arrow.2bpp"
+
+DebugColorTestGFX:
+INCBIN "gfx/debug/color_test.2bpp"
+
+TilesetColorTest:
+ ret
+ xor a
+ ld [wJumptableIndex], a
+ ld [wce64], a
+ ld [wce65], a
+ ld [wce66], a
+ ldh [hMapAnims], a
+ call ClearSprites
+ call OverworldTextModeSwitch
+ call WaitBGMap2
+ xor a
+ ldh [hBGMapMode], a
+ ld de, DebugColorTestGFX
+ ld hl, vTiles2 tile DEBUGTEST_TICKS_1
+ lb bc, BANK(DebugColorTestGFX), 22
+ call Request2bpp
+ ld de, DebugUpArrowGFX
+ ld hl, vTiles1
+ lb bc, BANK(DebugUpArrowGFX), 1
+ call Request2bpp
+ ld a, HIGH(vBGMap1)
+ ldh [hBGMapAddress + 1], a
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, DEBUGTEST_BLACK
+ call ByteFill
+ hlcoord 0, 0, wAttrmap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $7
+ call ByteFill
+ ld de, $15
+ ld a, DEBUGTEST_WHITE
+ call Functionfdbdb
+ ld de, $1a
+ ld a, DEBUGTEST_LIGHT
+ call Functionfdbdb
+ ld de, $1f
+ ld a, DEBUGTEST_DARK
+ call Functionfdbdb
+ ld de, $24
+ ld a, DEBUGTEST_BLACK
+ call Functionfdbdb
+ call Functionfdbfd
+ call Functionfdc18
+ call WaitBGMap2
+ ld [wJumptableIndex], a
+ ld a, $40
+ ldh [hWY], a
+ ret
+
+Functionfdbdb:
+ hlcoord 0, 0
+ call Functionfdbe7
+
+Functionfdbe1:
+ ld a, [wce64]
+ hlcoord 0, 0, wAttrmap
+
+Functionfdbe7:
+ add hl, de
+rept 4
+ ld [hli], a
+endr
+ ld bc, $10
+ add hl, bc
+rept 4
+ ld [hli], a
+endr
+ ld bc, $10
+ add hl, bc
+rept 4
+ ld [hli], a
+endr
+ ret
+
+Functionfdbfd:
+ hlcoord 2, 4
+ call Functionfdc0c
+ hlcoord 2, 6
+ call Functionfdc0c
+ hlcoord 2, 8
+
+Functionfdc0c:
+ ld a, DEBUGTEST_TICKS_1
+ ld [hli], a
+ ld bc, $10 - 1
+ ld a, DEBUGTEST_TICKS_2
+ call ByteFill
+ ret
+
+Functionfdc18:
+ ld a, [wce64]
+ ld l, a
+ ld h, $0
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld de, wBGPals1
+ add hl, de
+ ld de, wc508
+ ld bc, 8
+ call CopyBytes
+ ld de, wc508
+ call Functionfd8ae
+ ret
+
+Functionfdc35:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and SELECT
+ jr nz, .loop7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .asm_fdc8e
+ call Functionfdcdb
+ ret
+
+.loop7
+ ld hl, wce64
+ ld a, [hl]
+ inc a
+ and $7
+ cp $7
+ jr nz, .asm_fdc52
+ xor a
+
+.asm_fdc52
+ ld [hl], a
+ ld de, $15
+ call Functionfdbe1
+ ld de, $1a
+ call Functionfdbe1
+ ld de, $1f
+ call Functionfdbe1
+ ld de, $24
+ call Functionfdbe1
+ ld hl, wBGPals2
+ ld a, [wce64]
+ ld bc, 1 palettes
+ call AddNTimes
+ ld de, wc508
+ ld bc, 1 palettes
+ call CopyBytes
+ ld a, $2
+ ldh [hBGMapMode], a
+ ld c, 3
+ call DelayFrames
+ ld a, $1
+ ldh [hBGMapMode], a
+ ret
+
+.asm_fdc8e
+ call ClearSprites
+ ldh a, [hWY]
+ xor $d0
+ ldh [hWY], a
+ ret
+
+Functionfdc98:
+ ld hl, wBGPals2
+ ld a, [wce64]
+ ld bc, 1 palettes
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld hl, wc508
+ ld bc, 1 palettes
+ call CopyBytes
+ hlcoord 1, 0
+ ld de, wc508
+ call Functionfd6b0
+ hlcoord 6, 0
+ ld de, wc508 + 2
+ call Functionfd6b0
+ hlcoord 11, 0
+ ld de, wc508 + 4
+ call Functionfd6b0
+ hlcoord 16, 0
+ ld de, wc508 + 6
+ call Functionfd6b0
+ ld a, $1
+ ldh [hCGBPalUpdate], a
+ call DelayFrame
+ ret
+
+Functionfdcdb:
+ ld a, [wce65]
+ and 3
+ ld e, a
+ ld d, 0
+ ld hl, .dw
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.dw
+ dw Functionfdcf4
+ dw Functionfdd24
+ dw Functionfdd36
+ dw Functionfdd48
+
+Functionfdcf4:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Functionfdd77
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .asm_fdd07
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .asm_fdd0d
+ ret
+
+.asm_fdd07
+ ld a, [wce66]
+ dec a
+ jr .asm_fdd11
+
+.asm_fdd0d
+ ld a, [wce66]
+ inc a
+
+.asm_fdd11
+ and $3
+ ld [wce66], a
+ ld e, a
+ ld d, $0
+ ld hl, wc508
+ add hl, de
+ add hl, de
+ ld e, l
+ ld d, h
+ call Functionfd8ae
+ ret
+
+Functionfdd24:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Functionfdd77
+ ld a, [hl]
+ and D_UP
+ jr nz, Functionfdd72
+ ld hl, wc508 + 10
+ jr Functionfdd53
+
+Functionfdd36:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Functionfdd77
+ ld a, [hl]
+ and D_UP
+ jr nz, Functionfdd72
+ ld hl, wc508 + 11
+ jr Functionfdd53
+
+Functionfdd48:
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, Functionfdd72
+ ld hl, wc508 + 12
+
+Functionfdd53:
+ ldh a, [hJoyLast]
+ and D_RIGHT
+ jr nz, .asm_fdd60
+ ldh a, [hJoyLast]
+ and D_LEFT
+ jr nz, .asm_fdd67
+ ret
+
+.asm_fdd60
+ ld a, [hl]
+ cp $1f
+ ret nc
+ inc [hl]
+ jr .asm_fdd6b
+
+.asm_fdd67
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+
+.asm_fdd6b
+ call Functionfdd7c
+ call Functionfdc98
+ ret
+
+Functionfdd72:
+ ld hl, wce65
+ dec [hl]
+ ret
+
+Functionfdd77:
+ ld hl, wce65
+ inc [hl]
+ ret
+
+Functionfdd7c:
+ ld a, [wc508 + 10]
+ and $1f
+ ld e, a
+ ld a, [wc508 + 11]
+ and $7
+ sla a
+ swap a
+ or e
+ ld e, a
+ ld a, [wc508 + 11]
+ and $18
+ sla a
+ swap a
+ ld d, a
+ ld a, [wc508 + 12]
+ and $1f
+ sla a
+ sla a
+ or d
+ ld d, a
+ ld a, [wce66]
+ ld c, a
+ ld b, $0
+ ld hl, wc508
+ add hl, bc
+ add hl, bc
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+ ret
+
+Functionfddb1:
+ ld a, DEBUGTEST_BLACK
+ hlcoord 0, 4
+ ld [hl], a
+ hlcoord 0, 6
+ ld [hl], a
+ hlcoord 0, 8
+ ld [hl], a
+ hlcoord 0, 2
+ ld [hl], a
+ hlcoord 5, 2
+ ld [hl], a
+ hlcoord 10, 2
+ ld [hl], a
+ hlcoord 15, 2
+ ld [hl], a
+ ld a, [wce65]
+ and a
+ jr z, .asm_fdde1
+ dec a
+ hlcoord 0, 4
+ ld bc, 2 * SCREEN_WIDTH
+ call AddNTimes
+ ld [hl], $ed
+
+.asm_fdde1
+ ld a, [wce66]
+ hlcoord 0, 2
+ ld bc, $5
+ call AddNTimes
+ ld [hl], $ed
+ ld b, $78
+ ld hl, wVirtualOAM
+ ld de, wc508 + 10
+ call .asm_fde07
+ ld de, wc508 + 11
+ call .asm_fde07
+ ld de, wc508 + 12
+ call .asm_fde07
+ ret
+
+.asm_fde07
+ ld a, b
+ ld [hli], a
+ ld a, [de]
+ add a
+ add a
+ add 3 * TILE_WIDTH
+ ld [hli], a
+ ld a, 16 * TILE_WIDTH
+ ld [hli], a
+ ld a, $5
+ ld [hli], a
+ ld a, 2 * TILE_WIDTH
+ add b
+ ld b, a
+ inc c
+ ret
+
+; unused
+ call ClearSprites
+ ret
+
+; unused
+ ret