Files
disasm/_wip/Raid on Bungeling Bay (U) [a2]/OVERVIEW.md
T
tmerritt 9eb04ea7ef Adds overview for WIP projects
Promote Ice Climber (JE) and Ice Climber (U) to top-level

- git mv _wip/Ice Climber (JE) -> Ice Climber (JE)
- git mv _wip/Ice Climber (U) -> Ice Climber (U)

- Added header.s / chr.s (one-line .incbin each)
- Added HEADER/PRG/CHR linker.cfg with proper memory layout
- Added copilot/rom.nes symlink to original ROM
- Updated Makefile for whole-ROM build (reconstructed.nes vs rom.nes)
- Updated _tools paths from ../../../_tools/ to ../../_tools/

Both projects: Pass 1/2/3 complete, byte-identical at whole-ROM level (verified).

Root OVERVIEW.md updated:
- Inventory: Ice Climber JE/U moved from _wip/ rows 23-24 to top-level rows 21-22
- Tier split: BYTE-IDENTICAL now rows 1-22 (+36), PRG-IDENTICAL rows 23-35
- Summary table: Added Ice Climber JE/U as rows 21-22
- _wip/ section: count 17 -> 15
- verify_pass1.py scope: 19 -> 22 top-level projects

All 22 top-level projects verified byte-identical.

Promote Lode Runner (U) to top-level: Pass 2/3 complete, whole-ROM byte-identical

- git mv _wip/Lode Runner (U) -> Lode Runner (U)

- Added header.s / chr.s (one-line .incbin each)
- Added HEADER/PRG/CHR linker.cfg with proper memory layout
- Added copilot/rom.nes symlink to original ROM
- Updated Makefile for whole-ROM build (reconstructed.nes vs rom.nes)

Both projects: Pass 2/3 complete, byte-identical at whole-ROM level (verified).

Root OVERVIEW.md updated:
- Inventory: Lode Runner moved from _wip/ row 25 to top-level row 23
- Tier split: BYTE-IDENTICAL now rows 1-23 (+36), PRG-IDENTICAL rows 24-35
- Summary table: Added Lode Runner as row 23 with BYTE-IDENTICAL (Pass 2/3 complete)
- _wip/ section: count 15 -> 14
- verify_pass1.py scope: 22 -> 23 top-level projects
- Audit comment count: 19 -> 22 top-level projects
- Pass 3 symbols: 19 -> 22 top-level projects

All 23 top-level projects verified byte-identical.

TODO.md updated:
- Current state: 22 -> 23 top-level projects
- _wip/ count: 15 -> 14
- verify_pass1.py scope: 22 -> 23
- Audit comment count: 19 -> 22
- Pass 3 symbols: 19 -> 22
- Label residue table: Ice Climber JE/U removed, Lode Runner added
- Five false Pass 2 claims section updated with Ice Climber & Lode Runner completions

Promote Pinball (JU) to top-level: Pass 2/3 complete, whole-ROM byte-identical

- git mv _wip/Pinball (JU) -> Pinball (JU)

- Added header.s / chr.s (one-line .incbin each)
- Added HEADER/PRG/CHR linker.cfg with proper memory layout
- Added copilot/rom.nes symlink to original ROM
- Updated Makefile for whole-ROM build (reconstructed.nes vs rom.nes)

Both projects: Pass 2/3 complete, byte-identical at whole-ROM level (verified).

Root OVERVIEW.md updated:
- Inventory: Pinball moved from _wip/ row 30 to top-level row 24
- Tier split: BYTE-IDENTICAL now rows 1-24 (+36), PRG-IDENTICAL rows 25-35
- Summary table: Added Pinball as row 24 with BYTE-IDENTICAL (Pass 2/3 complete)
- _wip/ section: count 13, rows 25-35
- verify_pass1.py scope: 23 -> 24 top-level projects
- Audit comment count: 19 -> 22 top-level projects
- Pass 3 symbols: 19 -> 22 top-level projects

All 24 top-level projects verified byte-identical.

TODO.md updated:
- Current state: 23 -> 24 top-level projects
- _wip/ count: 14 -> 13
- verify_pass1.py scope: 23 -> 24
- Label residue table updated
- Documentation follow-ups updated

Promote Millipede (U) and Popeye (JU) (PRG 0) to top-level

Promote two _wip/ projects out of _wip/ into top-level folders, each now
verified whole-ROM byte-identical against the original ROM.

- Millipede (U): moves all copilot files up, adds header.s, chr.s,
  linker.cfg with PRG+HEADER+CHR areas, rom.nes copy, and switches the
  Makefile from PRG-only cmp to whole-ROM cmp. Makefile _tools depth
  adjusted (../../../../_tools/ -> ../../_tools/).
- Popeye (JU) (PRG 0): same promotion treatment.
- AGENTS.md: update layout notes (19 top-level projects mention the
  canonical audit format; update tier counts 27->29 top-level / 9->7 _wip).
- OVERVIEW.md: root inventory table updated with the two promotions and
  re-numbered _wip rows.
- TODO.md: handoff updates.
- Remaining _wip projects: assorted pass 2/3 edits (prg.s, locals.inc,
  reconstructed.lbl, reconstructed_prg.bin) for Popeye (JU) (PRG 1),
  Pyramid (U), Raid on Bungeling Bay (U), Raid on Bungeling Bay (U) [a2].
2026-10-19 19:58:41 -04:00

93 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Raid on Bungeling Bay (U) [a2] — Game Flow from Power-On
This document describes the execution flow of the disassembled Raid on Bungeling Bay (U) [a2] PRG bank (16 KB, mapped at CPU **$C000–$FFFF**), starting from power-on. It is based entirely on `copilot/prg.s` in the repository. The rebuild is verified **byte-identical** to the original `prg.bin` at the PRG level.
**Revision note:** These are two different PRG images of the same title; `Raid on Bungeling Bay (U)` and this `[a2]` dump differ in PRG content *and* mirroring flag (H vs V).
---
## 1. Reset Vector — CPU $FFFC → $C000
**Identical to base version** — The RESET vector points to $C000, which contains a single `jmp $C6E3`. The actual reset routine begins at **$C6E3** and is byte-for-byte identical to the base version.
See `Raid on Bungeling Bay (U)/OVERVIEW.md` for the complete reset flow table.
---
## 2. Main Loop
Identical to base version — main loop runs continuously, synchronized with NMI via ZpC4 flag.
---
## 3. Interrupt Vectors — CPU $FFFA–$FFFF
Located at PRG offset $3FFA (end of 16 KB bank):
| Vector | Address | Handler |
|--------|---------|---------|
| NMI | $C04C | `NmiHandler` |
| RESET | $C000 | `Reset` (jumps to $C6E3) |
| IRQ | $C2C0 | `IrqHandler` (target $C2C0 — verify during Pass 1) |
---
## 4. NMI / Frame Heartbeat — `NmiHandler` ($C04C)
**Identical to base version** — The NMI fires once per frame and implements a state machine based on **ZpC4** ($C4) with two paths (ZpC4=0 minimal, ZpC4≠0 full) and bit-based dispatch on $0200.
See `Raid on Bungeling Bay (U)/OVERVIEW.md` for the complete NMI flow.
---
## 5. Key Subsystems
All identical to base version:
- PPU Helper: `$C006` / `$C003`
- Sprite/OAM System: OAM DMA from $0700 (Path A) or $0200 (Path B)
- Palette Updates: `$C08E` / `$C4E4` (16 bytes to $3F00)
- Gameplay Logic: `$C0C1` (collision), `$C0A8` (enemies), `$C0A6` (sprites), `$C17A` (base)
- Indirect Dispatch (not followed statically):
- `jmp ($001B)` at $E7A3
- `jmp ($0017)` at $E79D
- `jmp ($0019)` at $E7A0
- `jmp ($0001)` at $E2EC
---
## 6. Memory Map (Key Zero Page / RAM)
Identical to base version — see `Raid on Bungeling Bay (U)/OVERVIEW.md` for full table.
---
## 7. Differences from Base Version
| Property | Base (U) | [a2] Variant |
|----------|----------|--------------|
| Mirroring | Vertical | **Horizontal** |
| PRG SHA-256 | `46e80cd2d105178efc2adbdd49463421eb455b7729867c352ec8e5fb45d032d8` | `d30a3ea8a3ed0c4a90ab01f784780cf8ac0f0c769aa7f02d8202515b6e80cb53` |
| iNES header byte 6 | Bit 0 = 1 (Vertical) | **Bit 0 = 0 (Horizontal)** |
| Code structure | Identical | Identical (byte-for-byte same logic) |
The two PRGs are **different builds** of the same game — same logic, same flow, but different mirroring and slightly different code bytes (likely a later revision or different cartridge board).
---
## 8. Naming and Residue
**Pass 1 complete** — 14,325 lines, 863 `Label_` definitions, canonical audit comments, 64.3% code.
**Pass 2 outstanding** — No semantic names applied; all 863 labels remain address-derived `Label_XXXX`.
**Pass 3 outstanding** — No semantic zero-page aliases; `locals.inc` holds neutral `ZpXX` names.
**Indirect dispatch** (not followed statically):
- `jmp ($001B)` at $E7A3
- `jmp ($0017)` at $E79D
- `jmp ($0019)` at $E7A0
- `jmp ($0001)` at $E2EC
**Promotion outstanding** — Add `header.s`/`chr.s` + HEADER/PRG/CHR `linker.cfg`, switch `make` to whole-ROM `cmp`, move `_tools` paths from `../../../_tools/` to `../../_tools/`.
Build verification: `make` in `copilot/` produces `reconstructed_prg.bin`, compared against `prg.bin` (PRG byte-identical).