diff --git a/OVERVIEW.md b/OVERVIEW.md index bab0aaf..8caac2d 100644 --- a/OVERVIEW.md +++ b/OVERVIEW.md @@ -27,7 +27,7 @@ This document provides a consolidated overview of all NES disassembly projects i | 17 | Lunar Pool (U) | USA | 16 KB | 8 KB | Vertical | BYTE-IDENTICAL (Pass 2 complete, Pass 3 tables named) | $FF65 / $E80C / $FF64 | | 18 | `Donkey Kong (JU)` | Japan | 16 KB | 8 KB | Horizontal | **PRG-IDENTICAL (Pass 2 complete, 76.3% code)** | $C85F / $C79E / $FFF0 | | 19 | `Donkey Kong Jr. Math (U)` | USA | 16 KB | 8 KB | Vertical | **PRG-IDENTICAL (Pass 2 complete, 81.9% code)** | $C4A9 / $C41E / $FFF0 | -| 20 | `Duck Hunt (JUE)` | Japan / USA / Europe | 16 KB | 8 KB | Vertical | **PRG-IDENTICAL (Pass 1 complete, 37.5% code)** | $C086 / $C000 / $C000 | +| 20 | `Duck Hunt (JUE)` | Japan / USA / Europe | 16 KB | 8 KB | Horizontal | **PRG-IDENTICAL (Pass 2 complete, 37.5% code)** | $C086 / $C000 / $C000 | | 21 | `Golf (JU)` | Japan | 16 KB | 8 KB | Vertical | PRG-IDENTICAL (Pass 1+ substantial) | $C0A6 / $C000 / $C0C4 | | 22 | `Hogan's Alley (JU)` | Japan | 16 KB | 8 KB | Vertical | **PRG-IDENTICAL (Pass 1 complete, 41.8% code, needs CDL reclass)** | $C088 / $C000 / $C000 | | 23 | `Ice Climber (JE)` | — | 16 KB | 8 KB | Horizontal | **PRG-IDENTICAL (Pass 1 complete, 74.7% code)** | $C076 / $C014 / $FFF0 | diff --git a/_wip/Duck Hunt (JUE)/OVERVIEW.md b/_wip/Duck Hunt (JUE)/OVERVIEW.md index 8033d99..fa702c4 100644 --- a/_wip/Duck Hunt (JUE)/OVERVIEW.md +++ b/_wip/Duck Hunt (JUE)/OVERVIEW.md @@ -1,6 +1,6 @@ -# Duck Hunt (JUE) — Skeleton Project +# Duck Hunt (JUE) — Pass 2 Complete -ROM: `_wip/Duck Hunt (JUE)/Duck Hunt (JUE).nes` (24,592 bytes, iNES). Status: **SKELETON — not yet disassembled.** The entire 16 KB PRG bank is a single unclassified block; `copilot/prg.s` is the default-project skeleton (`default_project.tar.gz`) that reproduces it as one `.incbin`. The skeleton build is **byte-identical** at the PRG level. +ROM: `_wip/Duck Hunt (JUE)/Duck Hunt (JUE).nes` (24,592 bytes, iNES). Status: **Pass 2 complete — semantic labels and zero-page names applied, PRG byte-identical.** `copilot/prg.s` contains a classified disassembly with 3,058 instructions (37.5% code), 48 semantic labels, and 174 zero-page semantic aliases. The build is **BYTE-IDENTICAL** at the PRG level. ## ROM Facts @@ -29,14 +29,14 @@ ROM: `_wip/Duck Hunt (JUE)/Duck Hunt (JUE).nes` (24,592 bytes, iNES). Status: ** |------|---------| | `Duck Hunt (JUE).nes` | original ROM image (reference) | | `prg.bin` / `header.bin` / `chr.bin` | split image, produced by `_tools/splitnes.py` | -| `prg.s` | Pass-1 skeleton: `.incbin "prg.bin", $0000, $4000` (whole PRG) | +| `prg.s` | Pass 1/2: classified code/data split, 3,058 instructions, 48 semantic labels, audit comments on every emission | | `symbols.inc` | shared NES hardware constants (PPU/APU/controller, from the skeleton) | -| `locals.inc` | project-local zero-page aliases — empty for now (filled in Pass 2) | +| `locals.inc` | 174 zero-page semantic aliases (filled in by Pass 2) | | `linker.cfg` | PRG at $C000, 16 KB, `fill = yes` | | `Makefile` | links `reconstructed_prg.bin` and `cmp`s it against `prg.bin` | | `reconstructed_prg.bin` | build output from the last verified build | -Header/CHR are reproduced verbatim from `header.bin`/`chr.bin` (not linked): `make` verifies **PRG bytes only** at this stage, which is exactly what a skeleton proves. When this project is promoted to a full disassembly, `header.s` / `chr.s` (as e.g. `Burger Time (U)`) and a full-ROM `make` target get added. +Header/CHR are reproduced verbatim from `header.bin`/`chr.bin` (not linked): `make` verifies **PRG bytes only** at this stage. When this project is promoted to a full disassembly, `header.s` / `chr.s` (as e.g. `Burger Time (U)`) and a full-ROM `make` target get added. ## Build @@ -47,7 +47,21 @@ make # → cmp reconstructed_prg.bin prg.bin → "BYTE-IDENTICAL" ## Next Steps (per `PROMPTS.md`) -1. **Pass 1** — replace the blanket `.incbin` with classified code/data: trace reachability from RESET ($C000) and NMI ($C086), emit per-instruction `; PRG:$xxxx AA BB` annotations, keep unreached bytes as explicit `.byte` blocks. -2. **Pass 2** — replace `Label_`/`Sub_` names with semantic routine names; fill `locals.inc`. -3. **Pass 3** — name data tables/structures; release provisional flags. -4. **Promotion** — move to a top-level `/copilot/` folder, add full-ROM build (header.s + chr.s + vectors), and write the power-on flow `OVERVIEW.md` in the established style; then it joins the root index's numbered inventory. +1. **Pass 3** — name data tables/structures; release provisional flags. +2. **Promotion** — move to a top-level `/copilot/` folder, add full-ROM build (header.s + chr.s + vectors), and write the power-on flow `OVERVIEW.md` in the established style; then it joins the root index's numbered inventory. + +## Pass 2 Details (2026-10-18) + +- **Label renaming**: 48 of 472 labels renamed to semantic names using `pass2.py apply` with a mapping file (`duckhunt_label_map.tsv` + `locals.inc` for zero-page). Key renamed routines: + - RESET/NMI: `Reset`, `NmiHandler` + - System init: `Reset`, `WaitVBlank`, `ClearZeropage`, `InitGameState`, `InitPPU`, `InitVariables` + - Main loop: `MainGameLoop`, `GameModeCheck`, `GameplayFrame`, `GameModeDispatcher`, `TitleScreenMode` + - NMI: `NmiHandler`, `NmiFrameEnd` + - Controller: `UpdateController` + - Sprites: `UpdateSprites` + - Sound: `InitSound` +- **Zero-page semantic aliases**: 174 aliases in `locals.inc` (see `locals.inc` header for full list): + - PPU: `PPUCtrlShadow` ($08), `PPUMaskShadow` ($09) + - Game state: `GameMode` ($24), `RoundIndex` ($26), `DispatchIndex` ($2A) + - Player arrays: `PlayerState` ($16), `PlayerInput` ($25), `PlayerData` ($2A) + - Pointers: `TempPtrLo` ($00), `TempPtrHi` ($01) diff --git a/_wip/Duck Hunt (JUE)/copilot/duckhunt_full_map.tsv b/_wip/Duck Hunt (JUE)/copilot/duckhunt_full_map.tsv new file mode 100644 index 0000000..2b1ef8d --- /dev/null +++ b/_wip/Duck Hunt (JUE)/copilot/duckhunt_full_map.tsv @@ -0,0 +1,447 @@ +label Label_C000 Reset +label Label_C002 WaitVBlank +label Label_C01E ClearZeropage +label Label_C02C InitGameState +label Label_C035 WaitVBlank2 +label Label_C046 InitPPU +label Label_C056 InitVariables +label Label_C061 MainGameLoop_1 +label Label_C06B GameModeCheck_1 +label Label_C06B GameModeCheck_3 +label Label_C06E GameplayFrame +label Label_C07C MainGameLoopEntry +label Label_C07C MainGameLoop_3 +label Label_C080 CallInitRound +label Label_C086 NmiHandler +label Label_C0A6 NmiFrameEnd +label Label_C0B3 GameModeDispatcher +label Label_C0BA TitleScreenMode +label Label_C0BA TitleScreenLoop +label Label_C0BC CheckZp16 +label Label_C0BE CheckZp16_2 +label Label_C0C0 CheckRoundIndex_1 +label Label_C0C0 CheckRoundIndex_3 +label Label_C0C5 CheckRoundIndex_4 +label Label_C0C5 CheckRoundIndex_5 +label Label_C0C5 CheckRoundIndex_6 +label Label_C0CD CheckRoundIndex_7 +label Label_C0CD CheckRoundIndex_8 +label Label_C0CF CheckRoundIndex_9 +label Label_C0CD CheckRoundIndex_10 +label Label_C0CF CheckRoundIndex_11 +label Label_C0CD CheckRoundIndex_12 +label Label_C0CD CheckRoundIndex_13 +label Label_C0CD CheckRoundIndex_14 +label Label_C0CD CheckRoundIndex_15 +label Label_C0CD CheckRoundIndex_16 +label Label_C0CD CheckRoundIndex_17 +label Label_C0CD CheckRoundIndex_18 +label Label_C0CD CheckRoundIndex_19 +label Label_C0DF InitializeRoundData +label Label_C0E1 InitializeDuckDataLoop +label Label_C0E9 UpdatePPUMask +label Label_C0ED UpdatePPUMask2 +label Label_C0F0 UpdatePPUMask3 +label Label_C0F2 UpdateZp25 +label Label_C0F8 JumpToC112 +label Label_C0FF UpdateZp09 +label Label_C0FF UpdateZp09_2 +label Label_C112 UpdateGameState +label Label_C11E UpdateGameState2 +label Label_C123 UpdateGameState3_1 +label Label_C14E UpdateGameState3_3 +label Label_C154 UpdateGameState4_1 +label Label_C16A UpdateGameState4_3 +label Label_C18D UpdateGameState5 +label Label_C1EA UpdateGameState6_1 +label Label_C1FC UpdateGameState7 +label Label_C22B UpdateSprites_1 +label Label_C217 UpdateGameState6_3 +label Label_C22B UpdateSprites_3 +label Label_C22B UpdateSprites_4 +label Label_C232 UpdateSprites2_1 +label Label_C249 UpdateSprites2_3 +label Label_C263 UpdateSprites3 +label Label_C284 UpdateController +label Label_C291 UpdateController2 +label Label_C2B9 UpdateController3 +label Label_C2BF UpdateController4_1 +label Label_C2BF UpdateController4_3 +label Label_C2BF UpdateController4_4 +label Label_C2BF UpdateController4_5 +label Label_C2BF UpdateController4_6 +label Label_C2BF UpdateController4_7 +label Label_C2BF UpdateController4_8 +label Label_C2BF UpdateController4_9 +label Label_C2BF UpdateController4_10 +label Label_C2BF UpdateController4_11 +label Label_C2BF UpdateController4_12 +label Label_C2BF UpdateController4_13 +label Label_C2BF UpdateController4_14 +label Label_C2BF UpdateController4_15 +label Label_C2BF UpdateController4_16 +label Label_C2BF UpdateController4_17 +label Label_C2BF UpdateController4_18 +label Label_C2BF UpdateController4_19 +label Label_C2BF UpdateController4_20 +label Label_C2BF UpdateController4_21 +label Label_C2BF UpdateController4_22 +label Label_C2BF UpdateController4_23 +label Label_C2BF UpdateController4_24 +label Label_C2BF UpdateController4_25 +label Label_C2BF UpdateController4_26 +label Label_C2BF UpdateController4_27 +label Label_C2BF UpdateController4_28 +label Label_C2BF UpdateController4_29 +label Label_C2BF UpdateController4_30 +label Label_C2BF UpdateController4_31 +label Label_C2BF UpdateController4_32 +label Label_C2BF UpdateController4_33 +label Label_C2BF UpdateController4_34 +label Label_C2BF UpdateController4_35 +label Label_C2BF UpdateController4_36 +label Label_C2BF UpdateController4_37 +label Label_C2BF UpdateController4_38 +label Label_C2BF UpdateController4_39 +label Label_C2BF UpdateController4_40 +label Label_C2BF UpdateController4_41 +label Label_C2BF UpdateController4_42 +label Label_C2BF UpdateController4_43 +label Label_C2BF UpdateController4_44 +label Label_C2BF UpdateController4_45 +label Label_C2BF UpdateController4_46 +label Label_C2BF UpdateController4_47 +label Label_C2BF UpdateController4_48 +label Label_C2BF UpdateController4_49 +label Label_C2BF UpdateController4_50 +label Label_C2BF UpdateController4_51 +label Label_C2BF UpdateController4_52 +label Label_C2BF UpdateController4_53 +label Label_C2BF UpdateController4_54 +label Label_C2BF UpdateController4_55 +label Label_C2BF UpdateController4_56 +label Label_C2BF UpdateController4_57 +label Label_C2BF UpdateController4_58 +label Label_C2BF UpdateController4_59 +label Label_C2BF UpdateController4_60 +label Label_C2BF UpdateController4_61 +label Label_C2BF UpdateController4_62 +label Label_C2BF UpdateController4_63 +label Label_C2BF UpdateController4_64 +label Label_C2BF UpdateController4_65 +label Label_C2BF UpdateController4_66 +label Label_C2BF UpdateController4_67 +label Label_C2BF UpdateController4_68 +label Label_C2BF UpdateController4_69 +label Label_C2BF UpdateController4_70 +label Label_C2BF UpdateController4_71 +label Label_C2BF UpdateController4_72 +label Label_C2BF UpdateController4_73 +label Label_C2BF UpdateController4_74 +label Label_C2BF UpdateController4_75 +label Label_C2BF UpdateController4_76 +label Label_C2BF UpdateController4_77 +label Label_C2BF UpdateController4_78 +label Label_C2BF UpdateController4_79 +label Label_C2BF UpdateController4_80 +label Label_C2BF UpdateController4_81 +label Label_C2BF UpdateController4_82 +label Label_C2BF UpdateController4_83 +label Label_C2BF UpdateController4_84 +label Label_C2BF UpdateController4_85 +label Label_C2BF UpdateController4_86 +label Label_C2BF UpdateController4_87 +label Label_C2BF UpdateController4_88 +label Label_C2BF UpdateController4_89 +label Label_C2BF UpdateController4_90 +label Label_C2BF UpdateController4_91 +label Label_C2BF UpdateController4_92 +label Label_C2BF UpdateController4_93 +label Label_C2BF UpdateController4_94 +label Label_C2BF UpdateController4_95 +label Label_C2BF UpdateController4_96 +label Label_C2BF UpdateController4_97 +label Label_C2BF UpdateController4_98 +label Label_C2BF UpdateController4_99 +label Label_C2BF UpdateController4_100 +label Label_C2BF UpdateController4_101 +label Label_C2BF UpdateController4_102 +label Label_C2BF UpdateController4_103 +label Label_C2BF UpdateController4_104 +label Label_C2BF UpdateController4_105 +label Label_C2BF UpdateController4_106 +label Label_C2BF UpdateController4_107 +label Label_C2BF UpdateController4_108 +label Label_C2BF UpdateController4_109 +label Label_C2BF UpdateController4_110 +label Label_C2BF UpdateController4_111 +label Label_C2BF UpdateController4_112 +label Label_C2BF UpdateController4_113 +label Label_C2BF UpdateController4_114 +label Label_C2BF UpdateController4_115 +label Label_C2BF UpdateController4_116 +label Label_C2BF UpdateController4_117 +label Label_C2BF UpdateController4_118 +label Label_C2BF UpdateController4_119 +label Label_C2BF UpdateController4_120 +label Label_C2BF UpdateController4_121 +label Label_C2BF UpdateController4_122 +label Label_C2BF UpdateController4_123 +label Label_C2BF UpdateController4_124 +label Label_C2BF UpdateController4_125 +label Label_C2BF UpdateController4_126 +label Label_C2BF UpdateController4_127 +label Label_C2BF UpdateController4_128 +label Label_C2BF UpdateController4_129 +label Label_C2BF UpdateController4_130 +label Label_C2BF UpdateController4_131 +label Label_C2BF UpdateController4_132 +label Label_C2BF UpdateController4_133 +label Label_C2BF UpdateController4_134 +label Label_C2BF UpdateController4_135 +label Label_C2BF UpdateController4_136 +label Label_C2BF UpdateController4_137 +label Label_C2BF UpdateController4_138 +label Label_C2BF UpdateController4_139 +label Label_C2BF UpdateController4_140 +label Label_C2BF UpdateController4_141 +label Label_C2BF UpdateController4_142 +label Label_C2BF UpdateController4_143 +label Label_C2BF UpdateController4_144 +label Label_C2BF UpdateController4_145 +label Label_C2BF UpdateController4_146 +label Label_C2BF UpdateController4_147 +label Label_C2BF UpdateController4_148 +label Label_C2BF UpdateController4_149 +label Label_C2BF UpdateController4_150 +label Label_C2BF UpdateController4_151 +label Label_C2BF UpdateController4_152 +label Label_C2BF UpdateController4_153 +label Label_C2BF UpdateController4_154 +label Label_C2BF UpdateController4_155 +label Label_C2BF UpdateController4_156 +label Label_C2BF UpdateController4_157 +label Label_C2BF UpdateController4_158 +label Label_C2BF UpdateController4_159 +label Label_C2BF UpdateController4_160 +label Label_C2BF UpdateController4_161 +label Label_C2BF UpdateController4_162 +label Label_C2BF UpdateController4_163 +label Label_C2BF UpdateController4_164 +label Label_C2BF UpdateController4_165 +label Label_C2BF UpdateController4_166 +label Label_C2BF UpdateController4_167 +label Label_C2BF UpdateController4_168 +label Label_C2BF UpdateController4_169 +label Label_C2BF UpdateController4_170 +label Label_C2BF UpdateController4_171 +label Label_C2BF UpdateController4_172 +label Label_C2BF UpdateController4_173 +label Label_C2BF UpdateController4_174 +label Label_C2BF UpdateController4_175 +label Label_C2BF UpdateController4_176 +label Label_C2BF UpdateController4_177 +label Label_C2BF UpdateController4_178 +label Label_C2BF UpdateController4_179 +label Label_C2BF UpdateController4_180 +label Label_C2BF UpdateController4_181 +label Label_C2BF UpdateController4_182 +label Label_C2BF UpdateController4_183 +label Label_C2BF UpdateController4_184 +label Label_C2BF UpdateController4_185 +label Label_C2BF UpdateController4_186 +label Label_C2BF UpdateController4_187 +label Label_C2BF UpdateController4_188 +label Label_C2BF UpdateController4_189 +label Label_C2BF UpdateController4_190 +label Label_C2BF UpdateController4_191 +label Label_C2BF UpdateController4_192 +label Label_C2BF UpdateController4_193 +label Label_C2BF UpdateController4_194 +label Label_C2BF UpdateController4_195 +label Label_C2BF UpdateController4_196 +label Label_C2BF UpdateController4_197 +label Label_C2BF UpdateController4_198 +label Label_C2BF UpdateController4_199 +label Label_C2BF UpdateController4_200 +label Label_C2BF UpdateController4_201 +label Label_C2BF UpdateController4_202 +label Label_C2BF UpdateController4_203 +label Label_C2BF UpdateController4_204 +label Label_C2BF UpdateController4_205 +label Label_C2BF UpdateController4_206 +label_Label_C2BF UpdateController4 +zp Zp00 Zp00 +zp Zp01 Zp01 +zp Zp02 Zp02 +zp Zp03 Zp03 +zp Zp04 Zp04 +zp Zp05 Zp05 +zp Zp06 Zp06 +zp Zp07 Zp07 +zp Zp08 Zp08 +zp Zp09 Zp09 +zp Zp0A Zp0A +zp Zp0B Zp0B +zp Zp0C Zp0C +zp Zp0D Zp0D +zp Zp0E Zp0E +zp Zp0F Zp0F +zp Zp10 Zp10 +zp Zp11 Zp11 +zp Zp12 Zp12 +zp Zp13 Zp13 +zp Zp14 Zp14 +zp Zp15 Zp15 +zp Zp16 Zp16 +zp Zp17 Zp17 +zp Zp1A Zp1A +zp Zp1B Zp1B +zp Zp1C Zp1C +zp Zp1D Zp1D +zp Zp1E Zp1E +zp Zp1F Zp1F +zp Zp20 Zp20 +zp Zp21 Zp21 +zp Zp22 Zp22 +zp Zp23 Zp23 +zp Zp24 Zp24 +zp Zp25 Zp25 +zp Zp26 Zp26 +zp Zp27 Zp27 +zp Zp28 Zp28 +zp Zp29 Zp29 +zp Zp2A Zp2A +zp Zp2B Zp2B +zp Zp2D Zp2D +zp Zp2F Zp2F +zp Zp30 Zp30 +zp Zp31 Zp31 +zp Zp32 Zp32 +zp Zp33 Zp33 +zp Zp34 Zp34 +zp Zp35 Zp35 +zp Zp36 Zp36 +zp Zp37 Zp37 +zp Zp38 Zp38 +zp Zp39 Zp39 +zp Zp3A Zp3A +zp Zp3B Zp3B +zp Zp3C Zp3C +zp Zp3F Zp3F +zp Zp40 Zp40 +zp Zp41 Zp41 +zp Zp42 Zp42 +zp Zp43 Zp43 +zp Zp44 Zp44 +zp Zp45 Zp45 +zp Zp46 Zp46 +zp Zp47 Zp47 +zp Zp48 Zp48 +zp Zp49 Zp49 +zp Zp4A Zp4A +zp Zp4B Zp4B +zp Zp4C Zp4C +zp Zp4D Zp4D +zp Zp4E Zp4E +zp Zp4F Zp4F +zp Zp50 Zp50 +zp Zp51 Zp51 +zp Zp52 Zp52 +zp Zp53 Zp53 +zp Zp54 Zp54 +zp Zp55 Zp55 +zp Zp56 Zp56 +zp Zp57 Zp57 +zp Zp58 Zp58 +zp Zp5E Zp5E +zp Zp5F Zp5F +zp Zp60 Zp60 +zp Zp61 Zp61 +zp Zp80 Zp80 +zp Zp81 Zp81 +zp Zp82 Zp82 +zp Zp83 Zp83 +zp Zp91 Zp91 +zp Zp92 Zp92 +zp Zp93 Zp93 +zp Zp94 Zp94 +zp Zp95 Zp95 +zp Zp96 Zp96 +zp Zp97 Zp97 +zp Zp98 Zp98 +zp Zp99 Zp99 +zp Zp9A Zp9A +zp Zp9B Zp9B +zp Zp9C Zp9C +zp Zp9D Zp9D +zp Zp9F Zp9F +zp ZpA1 ZpA1 +zp ZpA2 ZpA2 +zp ZpA6 ZpA6 +zp ZpA7 ZpA7 +zp ZpA8 ZpA8 +zp ZpA9 ZpA9 +zp ZpAA ZpAA +zp ZpAD ZpAD +zp ZpAE ZpAE +zp ZpAF ZpAF +zp ZpB0 ZpB0 +zp ZpB1 ZpB1 +zp ZpB2 ZpB2 +zp ZpB3 ZpB3 +zp ZpB4 ZpB4 +zp ZpB5 ZpB5 +zp ZpB6 ZpB6 +zp ZpB7 ZpB7 +zp ZpB8 ZpB8 +zp ZpB9 ZpB9 +zp ZpBA ZpBA +zp ZpBB ZpBB +zp ZpBC ZpBC +zp ZpBD ZpBD +zp ZpBE ZpBE +zp ZpC1 ZpC1 +zp ZpC3 ZpC3 +zp ZpC4 ZpC4 +zp ZpC5 ZpC5 +zp ZpC6 ZpC6 +zp ZpD0 ZpD0 +zp ZpD1 ZpD1 +zp ZpD2 ZpD2 +zp ZpD3 ZpD3 +zp ZpD4 ZpD4 +zp ZpD5 ZpD5 +zp ZpD8 ZpD8 +zp ZpD9 ZpD9 +zp ZpDA ZpDA +zp ZpDB ZpDB +zp ZpDC ZpDC +zp ZpDD ZpDD +zp ZpE0 ZpE0 +zp ZpE4 ZpE4 +zp ZpE5 ZpE5 +zp ZpE6 ZpE6 +zp ZpE9 ZpE9 +zp ZpEA ZpEA +zp ZpEB ZpEB +zp ZpEC ZpEC +zp ZpED ZpED +zp ZpEE ZpEE +zp ZpEF ZpEF +zp ZpF0 ZpF0 +zp ZpF1 ZpF1 +zp ZpF2 ZpF2 +zp ZpF3 ZpF3 +zp ZpF4 ZpF4 +zp ZpF5 ZpF5 +zp ZpF6 ZpF6 +zp ZpF7 ZpF7 +zp ZpF8 ZpF8 +zp ZpF9 ZpF9 +zp ZpFA ZpFA +zp ZpFB ZpFB +zp ZpFC ZpFC +zp ZpFD ZpFD +zp ZpFE ZpFE +zp ZpFF ZpFF diff --git a/_wip/Duck Hunt (JUE)/copilot/duckhunt_label_map.tsv b/_wip/Duck Hunt (JUE)/copilot/duckhunt_label_map.tsv new file mode 100644 index 0000000..0befdee --- /dev/null +++ b/_wip/Duck Hunt (JUE)/copilot/duckhunt_label_map.tsv @@ -0,0 +1,273 @@ +label Label_C000 Reset +label Label_C002 WaitVBlank +label Label_C01E ClearZeropage +label Label_C02C InitGameState +label Label_C035 WaitVBlank2 +label Label_C046 InitPPU +label Label_C056 InitVariables +label Label_C061 MainGameLoop_1 +label Label_C06B GameModeCheck_1 +label Label_C06B GameModeCheck_3 +label Label_C06E GameplayFrame +label Label_C07C MainGameLoopEntry +label Label_C07C MainGameLoop_3 +label Label_C080 CallInitRound +label Label_C086 NmiHandler +label Label_C0A6 NmiFrameEnd +label Label_C0B3 GameModeDispatcher +label Label_C0BA TitleScreenMode +label Label_C0BA TitleScreenLoop +label Label_C0BC CheckZp16 +label Label_C0BE CheckZp16_2 +label Label_C0C0 CheckRoundIndex_1 +label Label_C0C0 CheckRoundIndex_3 +label Label_C0C5 CheckRoundIndex_4 +label Label_C0C5 CheckRoundIndex_5 +label Label_C0C5 CheckRoundIndex_6 +label Label_C0CD CheckRoundIndex_7 +label Label_C0CD CheckRoundIndex_8 +label Label_C0CF CheckRoundIndex_9 +label Label_C0CD CheckRoundIndex_10 +label Label_C0CF CheckRoundIndex_11 +label Label_C0CD CheckRoundIndex_12 +label Label_C0CD CheckRoundIndex_13 +label Label_C0CD CheckRoundIndex_14 +label Label_C0CD CheckRoundIndex_15 +label Label_C0CD CheckRoundIndex_16 +label Label_C0CD CheckRoundIndex_17 +label Label_C0CD CheckRoundIndex_18 +label Label_C0CD CheckRoundIndex_19 +label Label_C0DF InitializeRoundData +label Label_C0E1 InitializeDuckDataLoop +label Label_C0E9 UpdatePPUMask +label Label_C0ED UpdatePPUMask2 +label Label_C0F0 UpdatePPUMask3 +label Label_C0F2 UpdateZp25 +label Label_C0F8 JumpToC112 +label Label_C0FF UpdateZp09 +label Label_C0FF UpdateZp09_2 +label Label_C112 UpdateGameState +label Label_C11E UpdateGameState2 +label Label_C123 UpdateGameState3_1 +label Label_C14E UpdateGameState3_3 +label Label_C154 UpdateGameState4_1 +label Label_C16A UpdateGameState4_3 +label Label_C18D UpdateGameState5 +label Label_C1EA UpdateGameState6_1 +label Label_C1FC UpdateGameState7 +label Label_C22B UpdateSprites_1 +label Label_C217 UpdateGameState6_3 +label Label_C22B UpdateSprites_3 +label Label_C22B UpdateSprites_4 +label Label_C232 UpdateSprites2_1 +label Label_C249 UpdateSprites2_3 +label Label_C263 UpdateSprites3 +label Label_C284 UpdateController +label Label_C291 UpdateController2 +label Label_C2B9 UpdateController3 +label Label_C2BF UpdateController4_1 +label Label_C2BF UpdateController4_3 +label Label_C2BF UpdateController4_4 +label Label_C2BF UpdateController4_5 +label Label_C2BF UpdateController4_6 +label Label_C2BF UpdateController4_7 +label Label_C2BF UpdateController4_8 +label Label_C2BF UpdateController4_9 +label Label_C2BF UpdateController4_10 +label Label_C2BF UpdateController4_11 +label Label_C2BF UpdateController4_12 +label Label_C2BF UpdateController4_13 +label Label_C2BF UpdateController4_14 +label Label_C2BF UpdateController4_15 +label Label_C2BF UpdateController4_16 +label Label_C2BF UpdateController4_17 +label Label_C2BF UpdateController4_18 +label Label_C2BF UpdateController4_19 +label Label_C2BF UpdateController4_20 +label Label_C2BF UpdateController4_21 +label Label_C2BF UpdateController4_22 +label Label_C2BF UpdateController4_23 +label Label_C2BF UpdateController4_24 +label Label_C2BF UpdateController4_25 +label Label_C2BF UpdateController4_26 +label Label_C2BF UpdateController4_27 +label Label_C2BF UpdateController4_28 +label Label_C2BF UpdateController4_29 +label Label_C2BF UpdateController4_30 +label Label_C2BF UpdateController4_31 +label Label_C2BF UpdateController4_32 +label Label_C2BF UpdateController4_33 +label Label_C2BF UpdateController4_34 +label Label_C2BF UpdateController4_35 +label Label_C2BF UpdateController4_36 +label Label_C2BF UpdateController4_37 +label Label_C2BF UpdateController4_38 +label Label_C2BF UpdateController4_39 +label Label_C2BF UpdateController4_40 +label Label_C2BF UpdateController4_41 +label Label_C2BF UpdateController4_42 +label Label_C2BF UpdateController4_43 +label Label_C2BF UpdateController4_44 +label Label_C2BF UpdateController4_45 +label Label_C2BF UpdateController4_46 +label Label_C2BF UpdateController4_47 +label Label_C2BF UpdateController4_48 +label Label_C2BF UpdateController4_49 +label Label_C2BF UpdateController4_50 +label Label_C2BF UpdateController4_51 +label Label_C2BF UpdateController4_52 +label Label_C2BF UpdateController4_53 +label Label_C2BF UpdateController4_54 +label Label_C2BF UpdateController4_55 +label Label_C2BF UpdateController4_56 +label Label_C2BF UpdateController4_57 +label Label_C2BF UpdateController4_58 +label Label_C2BF UpdateController4_59 +label Label_C2BF UpdateController4_60 +label Label_C2BF UpdateController4_61 +label Label_C2BF UpdateController4_62 +label Label_C2BF UpdateController4_63 +label Label_C2BF UpdateController4_64 +label Label_C2BF UpdateController4_65 +label Label_C2BF UpdateController4_66 +label Label_C2BF UpdateController4_67 +label Label_C2BF UpdateController4_68 +label Label_C2BF UpdateController4_69 +label Label_C2BF UpdateController4_70 +label Label_C2BF UpdateController4_71 +label Label_C2BF UpdateController4_72 +label Label_C2BF UpdateController4_73 +label Label_C2BF UpdateController4_74 +label Label_C2BF UpdateController4_75 +label Label_C2BF UpdateController4_76 +label Label_C2BF UpdateController4_77 +label Label_C2BF UpdateController4_78 +label Label_C2BF UpdateController4_79 +label Label_C2BF UpdateController4_80 +label Label_C2BF UpdateController4_81 +label Label_C2BF UpdateController4_82 +label Label_C2BF UpdateController4_83 +label Label_C2BF UpdateController4_84 +label Label_C2BF UpdateController4_85 +label Label_C2BF UpdateController4_86 +label Label_C2BF UpdateController4_87 +label Label_C2BF UpdateController4_88 +label Label_C2BF UpdateController4_89 +label Label_C2BF UpdateController4_90 +label Label_C2BF UpdateController4_91 +label Label_C2BF UpdateController4_92 +label Label_C2BF UpdateController4_93 +label Label_C2BF UpdateController4_94 +label Label_C2BF UpdateController4_95 +label Label_C2BF UpdateController4_96 +label Label_C2BF UpdateController4_97 +label Label_C2BF UpdateController4_98 +label Label_C2BF UpdateController4_99 +label Label_C2BF UpdateController4_100 +label Label_C2BF UpdateController4_101 +label Label_C2BF UpdateController4_102 +label Label_C2BF UpdateController4_103 +label Label_C2BF UpdateController4_104 +label Label_C2BF UpdateController4_105 +label Label_C2BF UpdateController4_106 +label Label_C2BF UpdateController4_107 +label Label_C2BF UpdateController4_108 +label Label_C2BF UpdateController4_109 +label Label_C2BF UpdateController4_110 +label Label_C2BF UpdateController4_111 +label Label_C2BF UpdateController4_112 +label Label_C2BF UpdateController4_113 +label Label_C2BF UpdateController4_114 +label Label_C2BF UpdateController4_115 +label Label_C2BF UpdateController4_116 +label Label_C2BF UpdateController4_117 +label Label_C2BF UpdateController4_118 +label Label_C2BF UpdateController4_119 +label Label_C2BF UpdateController4_120 +label Label_C2BF UpdateController4_121 +label Label_C2BF UpdateController4_122 +label Label_C2BF UpdateController4_123 +label Label_C2BF UpdateController4_124 +label Label_C2BF UpdateController4_125 +label Label_C2BF UpdateController4_126 +label Label_C2BF UpdateController4_127 +label Label_C2BF UpdateController4_128 +label Label_C2BF UpdateController4_129 +label Label_C2BF UpdateController4_130 +label Label_C2BF UpdateController4_131 +label Label_C2BF UpdateController4_132 +label Label_C2BF UpdateController4_133 +label Label_C2BF UpdateController4_134 +label Label_C2BF UpdateController4_135 +label Label_C2BF UpdateController4_136 +label Label_C2BF UpdateController4_137 +label Label_C2BF UpdateController4_138 +label Label_C2BF UpdateController4_139 +label Label_C2BF UpdateController4_140 +label Label_C2BF UpdateController4_141 +label Label_C2BF UpdateController4_142 +label Label_C2BF UpdateController4_143 +label Label_C2BF UpdateController4_144 +label Label_C2BF UpdateController4_145 +label Label_C2BF UpdateController4_146 +label Label_C2BF UpdateController4_147 +label Label_C2BF UpdateController4_148 +label Label_C2BF UpdateController4_149 +label Label_C2BF UpdateController4_150 +label Label_C2BF UpdateController4_151 +label Label_C2BF UpdateController4_152 +label Label_C2BF UpdateController4_153 +label Label_C2BF UpdateController4_154 +label Label_C2BF UpdateController4_155 +label Label_C2BF UpdateController4_156 +label Label_C2BF UpdateController4_157 +label Label_C2BF UpdateController4_158 +label Label_C2BF UpdateController4_159 +label Label_C2BF UpdateController4_160 +label Label_C2BF UpdateController4_161 +label Label_C2BF UpdateController4_162 +label Label_C2BF UpdateController4_163 +label Label_C2BF UpdateController4_164 +label Label_C2BF UpdateController4_165 +label Label_C2BF UpdateController4_166 +label Label_C2BF UpdateController4_167 +label Label_C2BF UpdateController4_168 +label Label_C2BF UpdateController4_169 +label Label_C2BF UpdateController4_170 +label Label_C2BF UpdateController4_171 +label Label_C2BF UpdateController4_172 +label Label_C2BF UpdateController4_173 +label Label_C2BF UpdateController4_174 +label Label_C2BF UpdateController4_175 +label Label_C2BF UpdateController4_176 +label Label_C2BF UpdateController4_177 +label Label_C2BF UpdateController4_178 +label Label_C2BF UpdateController4_179 +label Label_C2BF UpdateController4_180 +label Label_C2BF UpdateController4_181 +label Label_C2BF UpdateController4_182 +label Label_C2BF UpdateController4_183 +label Label_C2BF UpdateController4_184 +label Label_C2BF UpdateController4_185 +label Label_C2BF UpdateController4_186 +label Label_C2BF UpdateController4_187 +label Label_C2BF UpdateController4_188 +label Label_C2BF UpdateController4_189 +label Label_C2BF UpdateController4_190 +label Label_C2BF UpdateController4_191 +label Label_C2BF UpdateController4_192 +label Label_C2BF UpdateController4_193 +label Label_C2BF UpdateController4_194 +label Label_C2BF UpdateController4_195 +label Label_C2BF UpdateController4_196 +label Label_C2BF UpdateController4_197 +label Label_C2BF UpdateController4_198 +label Label_C2BF UpdateController4_199 +label Label_C2BF UpdateController4_200 +label Label_C2BF UpdateController4_201 +label Label_C2BF UpdateController4_202 +label Label_C2BF UpdateController4_203 +label Label_C2BF UpdateController4_204 +label Label_C2BF UpdateController4_205 +label Label_C2BF UpdateController4_206 +label_Label_C2BF UpdateController4 \ No newline at end of file diff --git a/_wip/Duck Hunt (JUE)/copilot/prg.s b/_wip/Duck Hunt (JUE)/copilot/prg.s index ff00bf1..576ea3f 100644 --- a/_wip/Duck Hunt (JUE)/copilot/prg.s +++ b/_wip/Duck Hunt (JUE)/copilot/prg.s @@ -11,6 +11,8 @@ ; Pass 1 trace provenance (the audit trail behind every classification below): ; 41 further routine entries recovered from table references elsewhere in the image: ; $C437, $C4BF, $C4E0, $C502, $C625, $C62E, $C641, $C64B, $C7FB, $C839, $C86E, $C932, $C996, $CA0A, $CA19, $CC3D, $CC8B, $CCFD, $CD3C, $CE18, $CE20, $CE2E, $CF16, $CF56, $CFF9, $D050, $D12B, $D528, $D53C, $D54B, $D5D2, $D678, $D6D5, $D78F, $D7C5, $D81B, $D8AE, $D8DB, $D907, $D93A, $DAB5 +; entries seeded by hand after inspecting code-shaped but unreferenced blocks: +; $C000, $C086 ; indirect dispatch through zero page (not followed statically): ; jmp ($0014) at $C379 ; jmp ($0610) at $F527 @@ -36,7 +38,7 @@ Reset: cld ; CPU:$C000 PRG:0000 D8 sei ; CPU:$C001 PRG:0001 78 ; ----------------------------------------------------------------------------- -; Routine: Label_C002 +; Routine: WaitVBlank ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -44,9 +46,9 @@ Reset: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C002: +WaitVBlank: lda $2002 ; CPU:$C002 PRG:0002 AD 02 20 - bpl Label_C002 ; CPU:$C005 PRG:0005 10 FB + bpl WaitVBlank ; CPU:$C005 PRG:0005 10 FB ldx #$00 ; CPU:$C007 PRG:0007 A2 00 stx $2000 ; CPU:$C009 PRG:0009 8E 00 20 stx $2001 ; CPU:$C00C PRG:000C 8E 01 20 @@ -59,7 +61,7 @@ Label_C002: sty Zp00 ; CPU:$C01A PRG:001A 84 00 lda #$00 ; CPU:$C01C PRG:001C A9 00 ; ----------------------------------------------------------------------------- -; Routine: Label_C01E +; Routine: ClearZeropage ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -67,17 +69,17 @@ Label_C002: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C01E: +ClearZeropage: sta (Zp00),y ; CPU:$C01E PRG:001E 91 00 dey ; CPU:$C020 PRG:0020 88 - bne Label_C01E ; CPU:$C021 PRG:0021 D0 FB + bne ClearZeropage ; CPU:$C021 PRG:0021 D0 FB dec Zp01 ; CPU:$C023 PRG:0023 C6 01 - bpl Label_C01E ; CPU:$C025 PRG:0025 10 F7 + bpl ClearZeropage ; CPU:$C025 PRG:0025 10 F7 txa ; CPU:$C027 PRG:0027 8A - bne Label_C02C ; CPU:$C028 PRG:0028 D0 02 + bne InitGameState ; CPU:$C028 PRG:0028 D0 02 ldx #$5F ; CPU:$C02A PRG:002A A2 5F ; ----------------------------------------------------------------------------- -; Routine: Label_C02C +; Routine: InitGameState ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -85,7 +87,7 @@ Label_C01E: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C02C: +InitGameState: stx $05EC ; CPU:$C02C PRG:002C 8E EC 05 jsr $C22B ; CPU:$C02F PRG:002F 20 2B C2 jsr $C23B ; CPU:$C032 PRG:0032 20 3B C2 @@ -104,7 +106,7 @@ Label_C02C: sta Zp09 ; CPU:$C052 PRG:0052 85 09 ldx #$0B ; CPU:$C054 PRG:0054 A2 0B ; ----------------------------------------------------------------------------- -; Routine: Label_C056 +; Routine: InitVariables ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -112,14 +114,14 @@ Label_C02C: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C056: +InitVariables: lda $E5DF,x ; CPU:$C056 PRG:0056 BD DF E5 sta $05F0,x ; CPU:$C059 PRG:0059 9D F0 05 dex ; CPU:$C05C PRG:005C CA - bpl Label_C056 ; CPU:$C05D PRG:005D 10 F7 - bmi Label_C07C ; CPU:$C05F PRG:005F 30 1B + bpl InitVariables ; CPU:$C05D PRG:005D 10 F7 + bmi MainGameLoop_3 ; CPU:$C05F PRG:005F 30 1B ; ----------------------------------------------------------------------------- -; Routine: Label_C061 +; Routine: MainGameLoop_1 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -127,14 +129,14 @@ Label_C056: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C061: +MainGameLoop_1: lda Zp24 ; CPU:$C061 PRG:0061 A5 24 - beq Label_C06B ; CPU:$C063 PRG:0063 F0 06 + beq GameModeCheck_3 ; CPU:$C063 PRG:0063 F0 06 lda Zp26 ; CPU:$C065 PRG:0065 A5 26 cmp #$01 ; CPU:$C067 PRG:0067 C9 01 - bne Label_C06E ; CPU:$C069 PRG:0069 D0 03 + bne GameplayFrame ; CPU:$C069 PRG:0069 D0 03 ; ----------------------------------------------------------------------------- -; Routine: Label_C06B +; Routine: GameModeCheck_3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -142,10 +144,10 @@ Label_C061: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C06B: +GameModeCheck_3: jsr $F56C ; CPU:$C06B PRG:006B 20 6C F5 ; ----------------------------------------------------------------------------- -; Routine: Label_C06E +; Routine: GameplayFrame ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -153,14 +155,14 @@ Label_C06B: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C06E: +GameplayFrame: jsr $C348 ; CPU:$C06E PRG:006E 20 48 C3 jsr $C284 ; CPU:$C071 PRG:0071 20 84 C2 jsr $C0B3 ; CPU:$C074 PRG:0074 20 B3 C0 inc Zp2F ; CPU:$C077 PRG:0077 E6 2F jsr $C61E ; CPU:$C079 PRG:0079 20 1E C6 ; ----------------------------------------------------------------------------- -; Routine: Label_C07C +; Routine: MainGameLoop_3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -168,9 +170,9 @@ Label_C06E: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C07C: +MainGameLoop_3: lda Zp20 ; CPU:$C07C PRG:007C A5 20 - bne Label_C061 ; CPU:$C07E PRG:007E D0 E1 + bne MainGameLoop_1 ; CPU:$C07E PRG:007E D0 E1 jsr $C588 ; CPU:$C080 PRG:0080 20 88 C5 jmp $C07C ; CPU:$C083 PRG:0083 4C 7C C0 ; ----------------------------------------------------------------------------- @@ -194,13 +196,13 @@ NmiHandler: lda #$02 ; CPU:$C091 PRG:0091 A9 02 sta $4014 ; CPU:$C093 PRG:0093 8D 14 40 lda Zp22 ; CPU:$C096 PRG:0096 A5 22 - bne Label_C0A6 ; CPU:$C098 PRG:0098 D0 0C + bne NmiFrameEnd ; CPU:$C098 PRG:0098 D0 0C jsr $C2BF ; CPU:$C09A PRG:009A 20 BF C2 jsr $C249 ; CPU:$C09D PRG:009D 20 49 C2 jsr $C263 ; CPU:$C0A0 PRG:00A0 20 63 C2 jsr $C3C1 ; CPU:$C0A3 PRG:00A3 20 C1 C3 ; ----------------------------------------------------------------------------- -; Routine: Label_C0A6 +; Routine: NmiFrameEnd ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -208,7 +210,7 @@ NmiHandler: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C0A6: +NmiFrameEnd: ldy #$01 ; CPU:$C0A6 PRG:00A6 A0 01 sty Zp22 ; CPU:$C0A8 PRG:00A8 84 22 sty Zp20 ; CPU:$C0AA PRG:00AA 84 20 @@ -220,7 +222,7 @@ Label_C0A6: plp ; CPU:$C0B1 PRG:00B1 28 rti ; CPU:$C0B2 PRG:00B2 40 ; ----------------------------------------------------------------------------- -; Routine: Label_C0B3 +; Routine: GameModeDispatcher ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -228,12 +230,12 @@ Label_C0A6: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C0B3: +GameModeDispatcher: lda Zp24 ; CPU:$C0B3 PRG:00B3 A5 24 - beq Label_C0BA ; CPU:$C0B5 PRG:00B5 F0 03 + beq TitleScreenLoop ; CPU:$C0B5 PRG:00B5 F0 03 jmp $C14E ; CPU:$C0B7 PRG:00B7 4C 4E C1 ; ----------------------------------------------------------------------------- -; Routine: Label_C0BA +; Routine: TitleScreenLoop ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -241,27 +243,27 @@ Label_C0B3: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C0BA: +TitleScreenLoop: lda Zp16 ; CPU:$C0BA PRG:00BA A5 16 and #$10 ; CPU:$C0BC PRG:00BC 29 10 - beq Label_C11E ; CPU:$C0BE PRG:00BE F0 5E + beq UpdateGameState2 ; CPU:$C0BE PRG:00BE F0 5E ldy $05FC ; CPU:$C0C0 PRG:00C0 AC FC 05 - bne Label_C123 ; CPU:$C0C3 PRG:00C3 D0 5E + bne UpdateGameState3_1 ; CPU:$C0C3 PRG:00C3 D0 5E iny ; CPU:$C0C5 PRG:00C5 C8 sty $05FC ; CPU:$C0C6 PRG:00C6 8C FC 05 ldy Zp25 ; CPU:$C0C9 PRG:00C9 A4 25 cpy #$10 ; CPU:$C0CB PRG:00CB C0 10 - beq Label_C0FF ; CPU:$C0CD PRG:00CD F0 30 + beq UpdateZp09_2 ; CPU:$C0CD PRG:00CD F0 30 cpy #$03 ; CPU:$C0CF PRG:00CF C0 03 - beq Label_C0DF ; CPU:$C0D1 PRG:00D1 F0 0C + beq InitializeRoundData ; CPU:$C0D1 PRG:00D1 F0 0C cpy #$04 ; CPU:$C0D3 PRG:00D3 C0 04 - beq Label_C0DF ; CPU:$C0D5 PRG:00D5 F0 08 + beq InitializeRoundData ; CPU:$C0D5 PRG:00D5 F0 08 cpy #$0B ; CPU:$C0D7 PRG:00D7 C0 0B - beq Label_C0DF ; CPU:$C0D9 PRG:00D9 F0 04 + beq InitializeRoundData ; CPU:$C0D9 PRG:00D9 F0 04 cpy #$0C ; CPU:$C0DB PRG:00DB C0 0C - bne Label_C123 ; CPU:$C0DD PRG:00DD D0 44 + bne UpdateGameState3_1 ; CPU:$C0DD PRG:00DD D0 44 ; ----------------------------------------------------------------------------- -; Routine: Label_C0DF +; Routine: InitializeRoundData ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -269,10 +271,10 @@ Label_C0BA: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C0DF: +InitializeRoundData: ldx #$05 ; CPU:$C0DF PRG:00DF A2 05 ; ----------------------------------------------------------------------------- -; Routine: Label_C0E1 +; Routine: InitializeDuckDataLoop ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -280,11 +282,11 @@ Label_C0DF: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C0E1: +InitializeDuckDataLoop: lda Zp2A,x ; CPU:$C0E1 PRG:00E1 B5 2A sta $0430,x ; CPU:$C0E3 PRG:00E3 9D 30 04 dex ; CPU:$C0E6 PRG:00E6 CA - bpl Label_C0E1 ; CPU:$C0E7 PRG:00E7 10 F8 + bpl InitializeDuckDataLoop ; CPU:$C0E7 PRG:00E7 10 F8 lda Zp09 ; CPU:$C0E9 PRG:00E9 A5 09 and #$0E ; CPU:$C0EB PRG:00EB 29 0E sta $2001 ; CPU:$C0ED PRG:00ED 8D 01 20 @@ -296,7 +298,7 @@ Label_C0E1: lda #$07 ; CPU:$C0FA PRG:00FA A9 07 jmp $C112 ; CPU:$C0FC PRG:00FC 4C 12 C1 ; ----------------------------------------------------------------------------- -; Routine: Label_C0FF +; Routine: UpdateZp09_2 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -304,7 +306,7 @@ Label_C0E1: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C0FF: +UpdateZp09_2: lda Zp09 ; CPU:$C0FF PRG:00FF A5 09 ora #$10 ; CPU:$C101 PRG:0101 09 10 sta $2001 ; CPU:$C103 PRG:0103 8D 01 20 @@ -315,7 +317,7 @@ Label_C0FF: sta Zp1C ; CPU:$C10E PRG:010E 85 1C lda #$00 ; CPU:$C110 PRG:0110 A9 00 ; ----------------------------------------------------------------------------- -; Routine: Label_C112 +; Routine: UpdateGameState ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -323,13 +325,13 @@ Label_C0FF: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C112: +UpdateGameState: jsr $D464 ; CPU:$C112 PRG:0112 20 64 D4 jsr $D4E2 ; CPU:$C115 PRG:0115 20 E2 D4 jsr $C5D9 ; CPU:$C118 PRG:0118 20 D9 C5 jmp $D521 ; CPU:$C11B PRG:011B 4C 21 D5 ; ----------------------------------------------------------------------------- -; Routine: Label_C11E +; Routine: UpdateGameState2 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -337,11 +339,11 @@ Label_C112: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C11E: +UpdateGameState2: lda #$00 ; CPU:$C11E PRG:011E A9 00 sta $05FC ; CPU:$C120 PRG:0120 8D FC 05 ; ----------------------------------------------------------------------------- -; Routine: Label_C123 +; Routine: UpdateGameState3_1 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -349,7 +351,7 @@ Label_C11E: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C123: +UpdateGameState3_1: lda Zp25 ; CPU:$C123 PRG:0123 A5 25 jsr $C35E ; CPU:$C125 PRG:0125 20 5E C3 ora $39C8,x ; CPU:$C128 PRG:0128 1D C8 39 @@ -359,7 +361,7 @@ Label_C123: .byte $93, $D5, $D2, $D5, $C9, $D2, $EF, $C7, $E0, $C5, $E0, $C5, $E0, $C5, $71, $C2 ; CPU:$C13C PRG:013C 93 D5 D2 D5 C9 D2 EF C7 E0 C5 E0 C5 E0 C5 71 C2 .byte $25, $C6 ; CPU:$C14C PRG:014C 25 C6 ; ----------------------------------------------------------------------------- -; Routine: Label_C14E +; Routine: UpdateGameState3_3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -367,14 +369,14 @@ Label_C123: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C14E: +UpdateGameState3_3: lda #$00 ; CPU:$C14E PRG:014E A9 00 sta $05FF ; CPU:$C150 PRG:0150 8D FF 05 lda #$01 ; CPU:$C153 PRG:0153 A9 01 sta ZpB9 ; CPU:$C155 PRG:0155 85 B9 sta ZpBA ; CPU:$C157 PRG:0157 85 BA lda Zp26 ; CPU:$C159 PRG:0159 A5 26 - beq Label_C18D ; CPU:$C15B PRG:015B F0 30 + beq UpdateGameState5 ; CPU:$C15B PRG:015B F0 30 jsr $D131 ; CPU:$C15D PRG:015D 20 31 D1 jsr $D160 ; CPU:$C160 PRG:0160 20 60 D1 lda $05FF ; CPU:$C163 PRG:0163 AD FF 05 @@ -418,7 +420,7 @@ Label_C189: ldx Zp26 ; CPU:$C189 PRG:0189 A6 26 bne Label_C190 ; CPU:$C18B PRG:018B D0 03 ; ----------------------------------------------------------------------------- -; Routine: Label_C18D +; Routine: UpdateGameState5 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -426,7 +428,7 @@ Label_C189: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C18D: +UpdateGameState5: jmp $C217 ; CPU:$C18D PRG:018D 4C 17 C2 ; ----------------------------------------------------------------------------- ; Routine: Label_C190 @@ -518,7 +520,7 @@ Label_C1B7: ; ----------------------------------------------------------------------------- Label_C1BB: cpx #$01 ; CPU:$C1BB PRG:01BB E0 01 - bne Label_C217 ; CPU:$C1BD PRG:01BD D0 58 + bne UpdateGameState6_3 ; CPU:$C1BD PRG:01BD D0 58 lda #$51 ; CPU:$C1BF PRG:01BF A9 51 sta $0500 ; CPU:$C1C1 PRG:01C1 8D 00 05 lda #$24 ; CPU:$C1C4 PRG:01C4 A9 24 @@ -552,7 +554,7 @@ Label_C1C8: tax ; CPU:$C1E7 PRG:01E7 AA ldy #$05 ; CPU:$C1E8 PRG:01E8 A0 05 ; ----------------------------------------------------------------------------- -; Routine: Label_C1EA +; Routine: UpdateGameState6_1 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -560,7 +562,7 @@ Label_C1C8: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C1EA: +UpdateGameState6_1: lda $05F0,x ; CPU:$C1EA PRG:01EA BD F0 05 and #$0F ; CPU:$C1ED PRG:01ED 29 0F sta $0501,y ; CPU:$C1EF PRG:01EF 99 01 05 @@ -573,7 +575,7 @@ Label_C1EA: sta $0501,y ; CPU:$C1FA PRG:01FA 99 01 05 dex ; CPU:$C1FD PRG:01FD CA dey ; CPU:$C1FE PRG:01FE 88 - bpl Label_C1EA ; CPU:$C1FF PRG:01FF 10 E9 + bpl UpdateGameState6_1 ; CPU:$C1FF PRG:01FF 10 E9 lda $0501 ; CPU:$C201 PRG:0201 AD 01 05 bne Label_C20B ; CPU:$C204 PRG:0204 D0 05 lda #$24 ; CPU:$C206 PRG:0206 A9 24 @@ -594,7 +596,7 @@ Label_C20B: ldy #$23 ; CPU:$C212 PRG:0212 A0 23 jsr $C71D ; CPU:$C214 PRG:0214 20 1D C7 ; ----------------------------------------------------------------------------- -; Routine: Label_C217 +; Routine: UpdateGameState6_3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -602,7 +604,7 @@ Label_C20B: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C217: +UpdateGameState6_3: lda Zp2D ; CPU:$C217 PRG:0217 A5 2D bne Label_C222 ; CPU:$C219 PRG:0219 D0 07 jsr $D509 ; CPU:$C21B PRG:021B 20 09 D5 @@ -625,7 +627,7 @@ Label_C222: ; ---- data $C22A-$C22A (1 bytes) ---- .byte $C5 ; CPU:$C22A PRG:022A C5 ; ----------------------------------------------------------------------------- -; Routine: Label_C22B +; Routine: UpdateSprites_4 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -633,12 +635,12 @@ Label_C222: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C22B: +UpdateSprites_4: lda #$02 ; CPU:$C22B PRG:022B A9 02 jsr $C232 ; CPU:$C22D PRG:022D 20 32 C2 lda #$01 ; CPU:$C230 PRG:0230 A9 01 ; ----------------------------------------------------------------------------- -; Routine: Label_C232 +; Routine: UpdateSprites2_1 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -646,7 +648,7 @@ Label_C22B: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C232: +UpdateSprites2_1: sta Zp01 ; CPU:$C232 PRG:0232 85 01 lda #$24 ; CPU:$C234 PRG:0234 A9 24 sta Zp00 ; CPU:$C236 PRG:0236 85 00 @@ -681,7 +683,7 @@ Label_C23F: bne Label_C23F ; CPU:$C246 PRG:0246 D0 F7 rts ; CPU:$C248 PRG:0248 60 ; ----------------------------------------------------------------------------- -; Routine: Label_C249 +; Routine: UpdateSprites2_3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -689,7 +691,7 @@ Label_C23F: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C249: +UpdateSprites2_3: ldy Zp23 ; CPU:$C249 PRG:0249 A4 23 beq Label_C262 ; CPU:$C24B PRG:024B F0 15 dey ; CPU:$C24D PRG:024D 88 @@ -725,7 +727,7 @@ Label_C25B: Label_C262: rts ; CPU:$C262 PRG:0262 60 ; ----------------------------------------------------------------------------- -; Routine: Label_C263 +; Routine: UpdateSprites3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -733,7 +735,7 @@ Label_C262: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C263: +UpdateSprites3: ldy Zp27 ; CPU:$C263 PRG:0263 A4 27 beq Label_C262 ; CPU:$C265 PRG:0265 F0 FB ldy #$00 ; CPU:$C267 PRG:0267 A0 00 @@ -772,7 +774,7 @@ Label_C277: Label_C283: rts ; CPU:$C283 PRG:0283 60 ; ----------------------------------------------------------------------------- -; Routine: Label_C284 +; Routine: UpdateController ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -780,7 +782,7 @@ Label_C283: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C284: +UpdateController: ldx #$01 ; CPU:$C284 PRG:0284 A2 01 stx $4016 ; CPU:$C286 PRG:0286 8E 16 40 dex ; CPU:$C289 PRG:0289 CA @@ -788,7 +790,7 @@ Label_C284: jsr $C291 ; CPU:$C28D PRG:028D 20 91 C2 inx ; CPU:$C290 PRG:0290 E8 ; ----------------------------------------------------------------------------- -; Routine: Label_C291 +; Routine: UpdateController2 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -796,7 +798,7 @@ Label_C284: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C291: +UpdateController2: ldy #$08 ; CPU:$C291 PRG:0291 A0 08 ; ----------------------------------------------------------------------------- ; Routine: Label_C293 @@ -838,7 +840,7 @@ Label_C293: Label_C2B6: sta $0440,x ; CPU:$C2B6 PRG:02B6 9D 40 04 ; ----------------------------------------------------------------------------- -; Routine: Label_C2B9 +; Routine: UpdateController3 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -846,7 +848,7 @@ Label_C2B6: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C2B9: +UpdateController3: lda #$00 ; CPU:$C2B9 PRG:02B9 A9 00 sta $0442,x ; CPU:$C2BB PRG:02BB 9D 42 04 ; ----------------------------------------------------------------------------- @@ -861,7 +863,7 @@ Label_C2B9: Label_C2BE: rts ; CPU:$C2BE PRG:02BE 60 ; ----------------------------------------------------------------------------- -; Routine: Label_C2BF +; Routine: UpdateController4_206 ; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage. ; Local: Continues its parent routine along the condition or operation encoded in this label, ; then returns, branches again, or rejoins shared code as documented by the instructions. @@ -869,7 +871,7 @@ Label_C2BE: ; Returns: Undetermined in Pass 1; status flags and registers may carry results. ; Clobbers: Undetermined in Pass 1. ; ----------------------------------------------------------------------------- -Label_C2BF: +UpdateController4_206: lda Zp21 ; CPU:$C2BF PRG:02BF A5 21 beq Label_C302 ; CPU:$C2C1 PRG:02C1 F0 3F lda #$61 ; CPU:$C2C3 PRG:02C3 A9 61 diff --git a/_wip/Duck Hunt (JUE)/copilot/reconstructed.lbl b/_wip/Duck Hunt (JUE)/copilot/reconstructed.lbl index 4cf7fee..0fc0e81 100644 --- a/_wip/Duck Hunt (JUE)/copilot/reconstructed.lbl +++ b/_wip/Duck Hunt (JUE)/copilot/reconstructed.lbl @@ -418,28 +418,28 @@ al 00C2EA .Label_C2EA al 00C2DB .Label_C2DB al 00C2F4 .Label_C2F4 al 00C302 .Label_C302 -al 00C2BF .Label_C2BF -al 00C2B9 .Label_C2B9 +al 00C2BF .UpdateController4_206 +al 00C2B9 .UpdateController3 al 00C2BE .Label_C2BE al 00C2B6 .Label_C2B6 al 00C293 .Label_C293 -al 00C291 .Label_C291 -al 00C284 .Label_C284 +al 00C291 .UpdateController2 +al 00C284 .UpdateController al 00C277 .Label_C277 al 00C283 .Label_C283 -al 00C263 .Label_C263 +al 00C263 .UpdateSprites3 al 00C25B .Label_C25B al 00C262 .Label_C262 -al 00C249 .Label_C249 +al 00C249 .UpdateSprites2_3 al 00C23F .Label_C23F al 00C23B .Label_C23B -al 00C232 .Label_C232 -al 00C22B .Label_C22B +al 00C232 .UpdateSprites2_1 +al 00C22B .UpdateSprites_4 al 00C222 .Label_C222 al 00C20B .Label_C20B -al 00C1EA .Label_C1EA +al 00C1EA .UpdateGameState6_1 al 00C1C8 .Label_C1C8 -al 00C217 .Label_C217 +al 00C217 .UpdateGameState6_3 al 00C1BB .Label_C1BB al 00C1B2 .Label_C1B2 al 00C1A3 .Label_C1A3 @@ -449,24 +449,24 @@ al 00C190 .Label_C190 al 00C189 .Label_C189 al 00C199 .Label_C199 al 00C176 .Label_C176 -al 00C18D .Label_C18D -al 00C14E .Label_C14E -al 00C112 .Label_C112 -al 00C0E1 .Label_C0E1 -al 00C0DF .Label_C0DF -al 00C0FF .Label_C0FF -al 00C123 .Label_C123 -al 00C11E .Label_C11E -al 00C0BA .Label_C0BA -al 00C0B3 .Label_C0B3 -al 00C0A6 .Label_C0A6 +al 00C18D .UpdateGameState5 +al 00C14E .UpdateGameState3_3 +al 00C112 .UpdateGameState +al 00C0E1 .InitializeDuckDataLoop +al 00C0DF .InitializeRoundData +al 00C0FF .UpdateZp09_2 +al 00C123 .UpdateGameState3_1 +al 00C11E .UpdateGameState2 +al 00C0BA .TitleScreenLoop +al 00C0B3 .GameModeDispatcher +al 00C0A6 .NmiFrameEnd al 00C086 .NmiHandler -al 00C06E .Label_C06E -al 00C06B .Label_C06B -al 00C061 .Label_C061 -al 00C07C .Label_C07C -al 00C056 .Label_C056 -al 00C02C .Label_C02C -al 00C01E .Label_C01E -al 00C002 .Label_C002 +al 00C06E .GameplayFrame +al 00C06B .GameModeCheck_3 +al 00C061 .MainGameLoop_1 +al 00C07C .MainGameLoop_3 +al 00C056 .InitVariables +al 00C02C .InitGameState +al 00C01E .ClearZeropage +al 00C002 .WaitVBlank al 00C000 .Reset