Pass 1 verification for Balloon Fight / DK Jr, and fix DK 3 branch-target bug

Balloon Fight (JU) - verified complete (in 7d7d78d).
Donkey Kong Jr. (JU) - no source changes needed. Full byte-accounting audit of
prg.s: all 16,384 PRG bytes emitted exactly once (6,199 instructions + 3,889
.byte + 16 .word), every emitted value equals the ROM byte, zero audit-comment
mismatches, zero duplicate addresses, no .incbin remains. The complete-opcode
tracer reaches 6,135 instructions / 12,358 code bytes, all of which are already
in the file; the file carries 121 further code bytes the tracer does not find,
reached through the DeferredTaskHandlerTable dispatch at $BFFE.

Donkey Kong 3 (JUE) - real bug fix. The project was recorded as BYTE-IDENTICAL
but had never built byte-identical: its committed reconstructed.nes also
differed from rom.nes. The bne at CPU $C14C (PRG $014C) is annotated 'D0 12'
(target $C160) but assembled as 'D0 0D', because it referenced
StoreSelectedPlayerAndScreenFlags ($C15B) instead of the routine actually at
$C160. Retargeted to ClearAudioSetGameMode, which is also the semantically
correct destination for a 'mode != $01' test. cmp now passes.

Root OVERVIEW.md: added a Pass 1 methodology section recording both Pass 1
limitations (documented-opcodes-only, and no runtime dispatch) with the measured
per-project impact, and flagged Joypad Test Cartridge as the one project still
carrying the truncated Pass 1.

All 15 top-level projects verified byte-identical.
This commit is contained in:
tmerritt committed 2026-10-16 20:42:21 -04:00
1 parent 7d7d78dcda
commit e9caa8cb36
4 files changed
+39 -10

No files matched your search

+1 -1
View File
@@ -364,7 +364,7 @@ DispatchGameModePhase:
cmp #$20 ; PRG $0146 | CPU $C146 | C9 20
bne CheckGameModeZero ; PRG $0148 | CPU $C148 | D0 1D
cpx #$01 ; PRG $014A | CPU $C14A | E0 01
bne StoreSelectedPlayerAndScreenFlags ; PRG $014C | CPU $C14C | D0 12
bne ClearAudioSetGameMode ; PRG $014C | CPU $C14C | D0 12
lda StartInputLatch ; PRG $014E | CPU $C14E | A5 37
bne ClampScreenSelectionPositionMin ; PRG $0150 | CPU $C150 | D0 21
ldy SelectedPlayerAndScreenFlags ; PRG $0152 | CPU $C152 | A4 38
@@ -650,10 +650,10 @@ al 00C1C9 .FillNametableTileBytes
al 00C1A9 .ClearNametable2000WithTile24
al 00C1AD .FillNametableAndClearAttributes
al 00C17D .ConvertPlayerSlotToOamOffset
al 00C160 .ClearAudioSetGameMode
al 00C16F .UpdateZp_37_C16F
al 00C173 .ClampScreenSelectionPositionMin
al 00C15B .StoreSelectedPlayerAndScreenFlags
al 00C173 .ClampScreenSelectionPositionMin
al 00C160 .ClearAudioSetGameMode
al 00C167 .CheckGameModeZero
al 00C18D .DispatchScreenState
al 00C13A .ClearActorFlagsLoop
Binary file not shown.