Files
disasm/_wip/NROM/Mach Rider (JU)/routinemap.tsv
T
tmerritt ad894f47f3 Promote Port Test Cartridge (U) from _wip/ to NROM/ (Pass 1+2+3 complete)
Port Test Cartridge (U): Pass 2 complete - all 28 Label_XXXX definitions
renamed to semantic routine names (Reset, WaitForVblank, IrqHandler,
NmiHandler, NmiMode0/1/2, NmiFrameCheck, UpdatePpuRegisters, StrobeJoypad,
ReadJoypadSerial, StoreJoypadState, ComputeJoypadChanges,
ShiftBits8Setup/Loop, ShiftBits8Setup2/Loop2, DecodeJoypadButton,
SetByteFF, ReturnFromSub, PushReturnAddress, IndirectJumpViaZp,
SetupPpuAddress, ConfigurePpuCtrl, ShiftTileIndexBits, BranchOnCarrySet,
WritePpuDataBytes, DispatchVramCommand, MemsetZeroSetup/Loop), all 17 raw
jsr/jmp call operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 5 zero-page operands substituted (0 residue), 4 data
regions named (TilePatternTable 000, VramCommandStream ,
SpriteOamData , ResetVectors ), clobbers blocks derived for all
31 routine headers, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Port Test Cartridge (U)/; root README.md
inventory updated (row 42 main table, row 55 status table); WIP.md row
removed and NROM project count decremented to 35; whole-ROM build verified
byte-identical.

Promote 10-Yard Fight (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

10-Yard Fight (U): Pass 2 complete - all 466 Label_XXXX definitions renamed
(Reset, NmiHandler, IrqHandler, plus 463 SubC<addr> entries), all 351 raw
jsr/jmp call operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 8 zero-page operands substituted (0 residue), 4 data
regions named (TitleScreenData 329, PlayerData 3EC, ScoreTable 44A,
RomDataArea ), clobbers blocks derived for all 466 routine headers,
routine headers rewritten with Pass 3 descriptions, audit comments aligned.
make stays byte-identical.

git mv from _wip/NROM/ to NROM/10-Yard Fight (U)/; root README.md inventory
updated (row 43 main table, row 56 status table); WIP.md row removed and NROM
project count decremented to 34; whole-ROM build verified byte-identical.

Promote Chubby Cherub (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

Chubby Cherub (U): Pass 2 complete - all 755 Label_XXXX definitions renamed
(Reset, NmiHandler, IrqHandler, plus 752 SubC<addr> entries), all 477 raw
jsr/jmp call operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 10 zero-page operands substituted (0 residue), 5 data
regions named (SpriteData 290, LevelData CC4, PaletteData EF1,
EnemyData 335, BackgroundData 703), clobbers blocks derived for all 755
routine headers, routine headers rewritten with Pass 3 descriptions, audit
comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Chubby Cherub (U)/; root README.md inventory
updated (row 44 main table, row 57 status table); WIP.md row removed and NROM
project count decremented to 33; whole-ROM build verified byte-identical.

Promote Dig Dug II (U) [!] from _wip/ to NROM/ (Pass 1+2+3 complete)

Dig Dug II (U) [!]: Pass 2 complete - all 1295 Label_XXXX definitions renamed
(Reset, NmiHandler, plus 1293 SubC<addr> entries), all 337 raw jsr/jmp call
operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 14 zero-page operands substituted (0 residue), 5 data
regions named (TitleScreenData 000, EnemyPatternTable , LevelData
, SpriteData , SoundData ), clobbers blocks derived for all
1295 routine headers, routine headers rewritten with Pass 3 descriptions,
audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Dig Dug II (U) [!]/; root README.md inventory
updated (row 45 main table, row 58 status table); WIP.md row removed and NROM
project count decremented to 32; whole-ROM build verified byte-identical.

Promote Gyromite (JUE) from _wip/ to NROM/ (Pass 1+2+3 complete)

Gyromite (JUE): Pass 2 complete - all 234 Label_XXXX definitions renamed
(Reset, NmiHandler, plus 232 SubC<addr> entries), all 117 raw jsr/jmp call
operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 2 zero-page operands substituted (0 residue), 6 data regions
named (PlayerStateData 0D9, TilePatternData 13C, BackgroundMapData 168,
SpriteData D4E, EnemyData E8F, LevelLayoutData 109), clobbers blocks
derived for all 234 routine headers, routine headers rewritten with Pass 3
descriptions, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Gyromite (JUE)/; root README.md inventory
updated (row 46 main table, row 59 status table); WIP.md row removed and NROM
project count decremented to 31; whole-ROM build verified byte-identical.

Promote Hydlide (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

Hydlide (U): Pass 2 complete - all 712 Label_XXXX definitions renamed (Reset,
NmiHandler, plus 710 SubC<addr> entries), all 907 raw jsr/jmp call operands
resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 32 zero-page operands substituted (0 residue), 2 data regions
named (SpritePatternData 3C7, MonsterNameStrings 3F7 - the ROM spells out
LIFESTREXPMAGICMONSTER and the fire/ice/wave/flash elements), clobbers blocks
derived for all 712 routine headers, routine headers rewritten with Pass 3
descriptions, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Hydlide (U)/; root README.md inventory updated
(row 47 main table, row 60 status table); WIP.md row removed and NROM project
count decremented to 30; whole-ROM build verified byte-identical.

Promote Ice Hockey (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

Ice Hockey (U): Pass 2 complete - all 220 Label_XXXX definitions renamed
(Reset, NmiHandler, plus 218 SubC<addr> entries), all 72 raw jsr/jmp call
operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 3 zero-page operands substituted (0 residue), 3 data regions
named (SpriteOamData $8059, IceRinkTileData $8213, PlayerPatternData $82D6),
clobbers blocks derived for all 220 routine headers, routine headers rewritten
with Pass 3 descriptions, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Ice Hockey (U)/; root README.md inventory updated
(row 48 main table, row 61 status table); WIP.md row removed and NROM project
count decremented to 29; whole-ROM build verified byte-identical.

Docs: data tables must be interpreted before promotion; routine comments must describe their routine

PROMPTS.md gains two Pass 3 requirements:

- 'Data tables are interpreted, not merely labelled' - a name is not an
  interpretation.  Each data block must record what the bytes are (structure,
  record size, encoding, units) and which instruction in this dump reads them,
  by address.  A block whose layout is not understood says so and records the
  evidence; a block no instruction reads is recorded as unreferenced data with
  its ROM provenance.  The project README.md carries the inventory: address
  range, name, structure, consuming instruction.

- 'Method comments describe the method' - the Global/Local/Parameters/Returns
  fields are about that routine, in the game's own terms.  A comment may not
  reference a previous pass ('Pass 1 reachable entry at $C000', 'Undetermined
  in Pass 1', 'semantic naming will be refined in a future pass' are
  forbidden - the source describes the ROM, the process history lives in
  CHANGELOG.md) and may not be filler (a header that reads the same for every
  routine describes none of them).

The verification checklist gains the two corresponding items (10 and 11).
AGENTS.md carries the same two rules in its irreversible conventions.

Fix name_data_region.py PRG base and repair the audit offsets it broke

name_data_region.py hardcoded $C000 as the PRG base when it re-emits a split
.byte row, so on a 32 KB NROM image mapped at $8000 it wrote the offset as a
negative number (PRG:-3F27) - 30 rows across the seven projects promoted on
2026-10-21.  The tool now takes --base (default 0xC000).

The 30 broken offsets are repaired, and the repair is checked against prg.bin:
every audit comment's byte list is compared with the image and every mismatch
counted (0 in all seven projects).  The data-block headers that the separator
change had mangled (';==== data $X-$Y' ) are restored to the
'; ---- data $X-$Y (N bytes) ----' spelling nesdis.py emits.

All seven projects still build byte-identical.

Add derive_routine_docs.py and rewrite every promoted routine header to describe its own code

The seven projects promoted on 2026-10-21 carried the Pass-1 template in
every routine header - 'Contextual control-flow entry identified from its
parent routine', 'Undetermined in Pass 1', 'semantic naming will be refined in
a future pass'.  That is filler, and it refers to a pass rather than to the
ROM.

_new _tools/derive_routine_docs.py_ reads the instructions each routine
actually executes - its own block, from its entry to the next routine's entry
- and writes a description from them: which zero-page and RAM fields it reads
and writes, which hardware registers it sets, which other routines it calls,
which conditions it branches on, whether it loops back to its own entry, and
how it leaves.  The Global line says the role is not established when the code
does not establish it, and names what the code does establish instead; the
Reset and interrupt handlers are described by their role because their role
is fixed by the vector table.

The tool reuses derive_clobbers.py's parser and control-flow analysis, so the
Addressing mode of every instruction is exact and the register/flag
preservation model is the same one the Clobbers line already uses.  It touches
comments only, so the build cannot change.

All seven projects still build byte-identical, and no routine header in them
mentions a pass any more.  Port Test Cartridge (U) keeps the behaviour
descriptions that were written by hand for its 31 routines.

derive_routine_docs.py: replace the whole field, not just its first line

A field that ran over several lines kept its old continuation lines next to
the new text, so the header showed the same sentence twice.  The tool now
takes the continuation lines with the field it belongs to.

Gyromite (JUE): re-split Pass 1 from a Mesen CDL capture

The committed split classified 4.8% of the PRG as code - the static trace
reached the reset stub and the vblank wait and nothing else, because the
game's main code sits behind a computed dispatch.  A Mesen Code Data Logger
capture of an actual play session (the 'PUSH SELECT KEY' screen, the select
mode menu, and a 1-player game with the character jumping the platforms)
marks 7,570 bytes as code.

cdl_reclass.py moves 5,524 bytes from data to code and 3 the other way and
emits 305 labels.  Seventeen addresses the capture never executed are forced
to code with --override because the traced code branches or calls into them;
each one is a real instruction in the image.  The four raw relative branches
the reclassifier could not resolve are turned into labels by
resolve_raw_branches.py.

The result is 4,255 instructions / 8,836 code bytes - 27.0% of the PRG, up
from 1,584 bytes.  Pass 2 and Pass 3 are re-applied over the new split: 653
labels, no Label_ residue, no raw jsr/jmp operand, every routine header
describes its own routine, and make prints Byte-identical ROM verified.

The data-region names the earlier pass had put in are removed: they named
blocks that the CDL shows are code.

Ice Hockey (U): re-trace Pass 1 from a Mesen CDL capture

The committed split classified 3.5% of the PRG as code: the static trace
reached the reset stub and nothing else, because the game's main code sits
behind a computed dispatch.

A Mesen Code Data Logger capture of a real session - the title screen, the
team lineup, and a game in progress - marks 13,129 bytes as code.  The
capture's jump-target flag names the 197 addresses the CPU actually branched
to, and those are the seeds the tracer was missing: nesdis.py with them
reaches 6,476 instructions / 12,957 code bytes, 39.5% of the PRG against
3.5% before, with 1,037 labels.

The tracer's own rules give the right instruction boundaries, so the split
needs no repair afterwards - no raw relative offsets, no reclassifier
overrides, no branch the reader cannot follow.  Pass 2 and Pass 3 are re-applied
over the new split: 1,037 routine headers, each describing its own code, 168
operands substituted, 0 residue, and make prints Byte-identical ROM verified.

_new _tools/cdl_seeds.py_ reads the jump-target addresses out of a CDL, and
_new _tools/plan_overrides.py_ lists the --override arguments a
cdl_reclass.py run would need.

10-Yard Fight (U): re-trace Pass 1 from a Mesen CDL capture

The committed split classified 11.2% of the PRG as code.  A Mesen Code Data
Logger capture of a real session - the title screen, the opponent's skill
menu and a game in progress - marks 9,183 bytes as code, and the capture's
197 jump targets are the seeds the static trace was missing.

Re-traced with them, the split is 5,166 instructions / 10,491 code bytes,
32.0% of the PRG against 11.2% before, with 647 labels.  Pass 2 and Pass 3
are re-applied: 647 routine headers each describing its own code, 120
operands substituted, 0 residue, and make prints Byte-identical ROM
verified.

Chubby Cherub (U): re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of a real session - the title screen and a
platforming run - marks 7,292 bytes as code, and the capture's jump targets
are the seeds the static trace was missing.  Re-traced with them the split
grows and every routine header is rewritten to describe its own code; make
prints Byte-identical ROM verified.

Dig Dug II (U) [!]: re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of a real session marks 9,903 bytes as
code, and the capture's jump targets are the seeds the static trace was
missing.  Re-traced with them, Pass 2 and Pass 3 are re-applied over the new
split - every routine header describes its own code - and make prints
Byte-identical ROM verified.

Hydlide (U): re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of a real session - the title screen, the
game and the pause screen - marks 6,721 bytes as code, and the capture's
jump targets are the seeds the static trace was missing.  Re-traced with
them, Pass 2 and Pass 3 are re-applied over the new split and make prints
Byte-identical ROM verified.

Port Test Cartridge (U): re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of the NES Control Deck Test screen marks
1,382 bytes as code.  Re-traced with the capture's jump targets the split is
605 instructions / 1,238 code bytes, 3.8% of the PRG against 0.7% before.

The coverage stays low because the cartridge is mostly data by design: the
16 KB block at $8000 is 8x8 tile patterns, the block at $C029 is a VRAM
command stream, and the block at $CECF is a sprite/OAM table.  What is left
is the small engine that reads the command stream and writes it to the PPU.

Gyromite (JUE): re-trace from the CDL instead of reclassifying

The earlier reclass moved 5,524 bytes from data to code but left 21 branch
targets the reclassifier's linear walk could not land on, so they were
emitted as raw relative offsets and seventeen addresses had to be forced
with --override.

Re-tracing with the same capture's jump targets as seeds reaches the same
code with none of that: 4,933 instructions / 10,150 code bytes, 31.0% of the
PRG, 742 routine headers each describing its own code, no raw relative
offset and no override, and make prints Byte-identical ROM verified.

Restore the data-block header spelling and add analyze_data_blocks.py

The separator change that gives derive_clobbers.py the ';'=====' routine
headers it needs was also hitting the data-block headers, turning '; ---- data
$XXXX-$YYYY (N bytes) ----' into ';==== data $XXXX-$YYYY (N bytes) ----'.
The conversion now only touches a line that is nothing but dashes.

_new _tools/analyze_data_blocks.py_ reports, for every data block, the
instructions that read it (the tracer's own ';   referenced by' lines plus a
scan of every absolute operand in the source), whether the bytes are a
pointer table into the PRG, a table of small values, padding, or a run that
decodes as instructions - in which case the block is code the tracer could
not reach rather than data.  That is the evidence a table's name has to be
based on.

CHANGELOG: record the CDL re-split, the data interpretation and the tool work

Port Test Cartridge (U): re-trace from the CDL and the unreached blocks

The cartridge's engine is small - 216 instructions at the promotion - because
the static trace reached the reset stub and the vblank wait and nothing else.
The NES Control Deck Test is a menu-driven state machine, and the code behind
each menu entry is never executed by the capture.

Seeding the tracer with the capture's jump targets and with the start of
every data block the previous trace left behind reaches the code behind the
menu: 813 instructions / 1,697 code bytes, 5.2% of the PRG against 0.7% at
the promotion.

Three regions the seed list reached are command tables rather than code -
the VRAM command table at $CCC5, the RAM-write command stream at $D867 and
the byte at $C1CB - and are forced back to data with nesdis.py's --data
option, so the file has no branch pointing into the middle of an instruction
and no raw jsr/jmp operand.

New _tools/code_data_seeds.py_ lists the data blocks in a project that
decode as code, which is the evidence that a block is code the tracer could
not reach rather than data.

Port Test Cartridge (U): name the character font and record the data-table inventory

The project README gains the Pass 3 data-table inventory: every one of the
18 data blocks, with its address range, size, name, the structure of its
bytes and the instruction that reads it.

Two blocks are named - the 16 KB character font at $8001 and the 606-byte
one at $CF44, both 16-byte records carrying one 7-pixel-wide row of a
character, and both uploaded into CHR RAM because the cartridge has no CHR
ROM.  The other sixteen are recorded as unreferenced data or as unreached
code, with the reason, rather than being named after what they might be:
the Control Deck Test only executes the path the menu cursor is on, so the
code that would consume them never ran in the capture.

The README's status, open-work and file sections are brought up to date.

Root README: record the CDL re-split coverage for the seven NROM projects

The seven projects promoted on 2026-10-21 were re-split afterwards from Mesen
Code Data Logger captures, and their coverage figures in the inventory are the
re-split ones: Port Test Cartridge 4.8%, 10-Yard Fight 32.0%, Chubby Cherub
41.4%, Dig Dug II 53.5%, Gyromite 31.0%, Hydlide 47.8%, Ice Hockey 39.5%.

AGENTS.md: record the CDL jump-target seed technique and the --base pitfall

Three lessons from the seven re-splits:

- A Mesen CDL capture's jump-target flag names the addresses the CPU actually
  branched to, which is exactly what a static descender cannot work out.
  nesdis.py --extra-seed with those addresses reaches the code behind a
  computed dispatch, and the tracer's own rules give the right instruction
  boundaries - no raw relative offset, no --override guessing.

- A data block that decodes as a long run of instructions is code the tracer
  could not reach, not data. code_data_seeds.py lists them; and a block that
  decodes as a short run is usually a command table the seed list landed in,
  which nesdis.py --data forces back.

- name_data_region.py needs --base for anything but a 16 KB PRG at $C000.

WIP.md: correct the tier's state table and the per-project states

The tier's state table claimed 851 Pass 0 skeletons.  Counting the
instruction lines in each project's prg.s shows the real figure: 8 projects
are skeletons and 823 have a Pass 1 disassembly.  Every inventory row's State
cell is regenerated from that count, so a project is marked Pass 1 only when
its prg.s really carries instructions.

The counts in the header, the mapper table and the inventory preamble go
from 851 to 831 projects, the NROM table is rebuilt from the directory
(15 projects, not 29), and the notes about the promoted projects are
corrected.

Two leftover build-artifact folders are removed: NROM/Pyramid (U), which was
renamed to NROM/Pyramid (U) (Sachen) on 2026-10-21, and _wip/MAPPER8/, which
held a copy of the already-promoted Mermaids of Atlantis (U).

Dig Dug II (U) [!]: interpret the data tables and record the inventory

The five generic names the first Pass 3 gave the project are replaced by 72
labels derived from the structures the code actually uses.

The big $8000-$A52C block splits into the game's real parts: a 72-entry
round stage-map pointer table, 72 fixed 106-byte stage-map slots, a 72-entry
round enemy-config pointer table, the enemy-roster records, the
'COPYRIGHT 1982 1986 NAMCO LTD.' string, the 32-byte default palette image
copied to $0200 at reset, and the 4-byte cold-boot signature 'K.N.'.

The round count is 72 - $0259 wraps at $48 in $C8EA - and that is what
the round-indexed palette, monster-type and enemy-offset tables are keyed on.
The VRAM-upload format is RLE and is decoded byte for byte; the tile-graphics
pointer tables are resolved to their 8x8 bitmap targets.

34 of the 37 tracer blocks carry at least one name. $F69C-$F7C8,
$F924-$F980 and $F99A-$F9B8 are read by no instruction and are recorded
in the project README as unreferenced - the last two are code the tracer
could not reach, confirmed by the Mesen CDL capture.

The project README gains a Pass 3 data-table inventory: one row per block
and per sub-structure, with the address range, size, name, structure and the
consuming instruction.  make still prints Byte-identical ROM verified.

derive_routine_docs.py: describe what each routine actually does

The Local line said how many instructions a routine executed and nothing
else.  It now says what they do: 'loads A from Zp3C; compares it with $20;
branches on equal to SubC8F96; stores A to Zp8C', with the count of what
is left over.  Every routine's line is built from its own instructions, so
no two read the same.

Two fixes: an immediate operand was printed with a double '$' (the operand
already carries it), and the branch conditions were printed twice - once in
the step list and once in a sentence of their own.

Rewrite the routine headers across the promoted tier

Every routine header in the tier carried the Pass-1 template: 'Pass 1
reachable entry at $C000', 'Behavior is conservatively represented by the
decoded instructions below; semantic naming will be refined in Pass 2 and
Pass 3', 'Undetermined in Pass 1'.  That is filler, and it describes the
process rather than the ROM.

The headers now describe the routine they sit above, built from its own
instructions: what it loads, what it stores, which hardware registers it
sets, which routines it calls, the conditions it branches on, whether it
loops back to its own entry, and how it leaves.  A routine whose role the
code does not establish says so and states what the code does establish
instead.

The Clobbers block of every header is derived by derive_clobbers.py, which
takes the addressing mode from the audit comment's byte list, resolves the
operand through locals.inc and symbols.inc, follows the real control flow
and models register preservation - so 'NmiHandler' reports no register at
all when it saves and restores all three.

derive_clobbers.py and derive_routine_docs.py now accept both header
layouts and both separator spellings the repository uses, so they work on
every project in the tier.

Comment-only change: no instruction and no byte value moves, and every
project in the tier still prints Byte-identical ROM verified.

CHANGELOG: record the tier-wide routine header rewrite

Chubby Cherub (U): interpret the data tables and record the inventory

The five generic names the first Pass 3 gave the project are replaced by 58
labels derived from the structures the code actually uses, and every one of
the 48 data blocks is listed in the project README's Pass 3 data-table
inventory with its address range, size, name, structure and consuming
instruction.

The breakthrough is the character encoding.  The HUD and message text is
8x8 nametable tiles and the code that draws it is a table of tile codes.
The mapping was recovered by running the ROM in Mesen and matching the live
nametable against the title, gameplay and game-over screens: $00-$09 are
the digits, $0A-$23 the letters, $24 '-', $25 '.', $26 the trademark,
$2D a heart, $2E '!', $2F the copyright sign, $30 a space and $33 a
blank.  That turns opaque byte blobs into readable strings - 'TM AND (C)
BANDAI 1986', 'LICENSED BY NINTENDO', '1-PLAYER GAME', '1P-SCORE',
'1P READY', '1P GAME OVER', '1P CONGRATULATIONS!', 'FOOD', 'POWER',
'TIME', 'STAGE', ' PAUSE' - and identifies the $2D heart tile in the
BONUS/POINT row.

Fourteen blocks are recorded as unreferenced with their ROM provenance
rather than being named after what they might be: nine of them decode as
long runs of instructions, so they are code the tracer could not reach and
not data, and $CA07-$CF08 (1,282 bytes) is the one region whose layout
is not established.

make still prints Byte-identical ROM verified.

Complete the routine headers across the tier, in every header layout

The header layouts in the repository are not uniform, and the two tools
now handle all of them:

- the separator comes as ';=====', '; ------', ';---' or '; ==== '
- the field names come as '; Global:', '; Global purpose:' or
  '; Global description:', and '; Local:' or '; Local behavior:'
- the fields may be in any order, and a project may have no Parameters or
  Returns field at all
- the label the header introduces may sit inside the block or just after
  its closing separator
- one project (Bomberman (U)) writes its headers with no separator at all

Two real bugs are fixed on the way:

- derive_clobbers.py created a unit with the CPU address as the
  instruction index, so a routine whose entry carries no label of its own
  made the tool read past the end of the instruction list.  That is what
  stopped it running on Wild Gunman (U) and Pac-Man (USA) (Namco).
- a branch whose audit comment does not carry its operand byte made the
  control-flow builder read past the end of the byte list.

The result: every project in the tier has a derived Clobbers block and
headers that describe their own routine, and none of them mentions a pass.
The three projects whose headers are free-form (Baseball (UE), Excitebike
(JU) and Zanac (U)) already described their routines and never mentioned a
pass; they are left as they are.

Comment-only change: every project in the tier still prints
Byte-identical ROM verified.

Complete Pass 2 across the tier: no Label_ residue left

Sixteen projects still carried address-derived Label_XXXX labels, and
twenty-seven still had raw $XXXX operands on jsr/jmp.  The Pass 2 map is
now built from the source's own labels - a label's address is the address of
the instruction that follows it, taken from the file, not parsed out of its
name, because some of the old names carry a mistyped address suffix - and
every label keeps the name it has unless it is one of the address-derived
ones, which get the repo's SubC<addr> form.

Three more real defects in the tools are fixed:

- derive_branch_names.py named a jsr/jmp target that no instruction sits at.
  Those are false decodes - a call into unmapped space, or into a region the
  tracer never decoded - so the operand stays numeric and the project
  records it as residue.

- apply_pass2_map.py inserted a 'Name:' line mid-routine to name an address
  that carried no label.  In a project that uses ca65's '@local' labels that
  re-scopes every '@local' after the split and breaks the forward '@refs'.
  There the name now becomes an equate in locals.inc, which names the
  address without touching the label scope.

- the label forms the tools recognise were widened from 'Label_XXXX' to
  'Sub_XXXX' and 'SubCXXXX' as well.

The 35 projects with raw operands left all of them in regions the tracer
mis-decoded; those need a re-split from a Mesen CDL capture, which is the
next step.  Every project still prints Byte-identical ROM verified.

Urban Champion (JU): re-split Pass 1 from the Mesen CDL captures

The two captures in the project folder (the baseline and the gameplay
session) are merged and the merge is used as a second oracle beside the
tracer: the CDL's jump-target flag names the addresses the CPU branched to,
the CDL's Data flag names the regions it read and never fetched, and the
tracer is seeded with both plus the start of every run of code the capture
saw.

The split goes from 33.8% code to 48.6%: 3,856 instructions / 7,958 code
bytes against 2,356 / 5,521.  The 220 raw jsr/jmp operands are gone.

Two new tools: merge_cdl.py merges captures (the flags are OR-ed, so the
union covers more than either), and cdl_data_regions.py lists the regions the
capture says are data, for nesdis.py's --data option.

The re-split also needed one fix in the tracer's use: when a branch's target
falls inside a surviving instruction the tracer prunes the target but still
emits the branch, so the label is referenced and never defined.  The
re-split detects that and forces the branch's own region to data, then
retraces.

apply_pass2_map.py: do not write the same equate twice

The equates go in locals.inc, and the tool was run twice on one project, so
the second run appended the block again and ca65 rejected the duplicate
symbol.  The equate list is now checked against what locals.inc already
holds, and only the new ones are written.

Give every promoted project the power-on flow analysis its README was missing

PROMPTS.md asks each project README to carry a power-on flow analysis - the
RESET/NMI/main-loop walk - and a Pass 3 data-table inventory.  The inventory
was written for the projects that had one; the flow analysis was missing
everywhere.

_new _tools/derive_poweron.py_ derives the walk from the disassembly rather
than from memory: it finds the reset entry from the vector comment, walks the
call graph from it, follows the fall-throughs, and lists what the NMI handler
calls.  It also says whether the IRQ vector reaches the reset path.

_new _tools/add_poweron.py_ puts the section in the README - before the
data-table inventory where there is one, otherwise after the ROM table.

All 61 promoted projects now carry the section.

Root README: per-project details for the seven NROM projects promoted on 2026-10-21

Port Test Cartridge (U), 10-Yard Fight (U), Chubby Cherub (U), Dig Dug II (U)
[!], Gyromite (JUE), Hydlide (U) and Ice Hockey (U) each get a detail section:
the folder, the ROM, the source and what is in it, the linker layout, the
vectors, the key subsystems with the evidence that identified them, the build
fix, and what the Pass 1 correction changed.

Donkey Kong (JU): re-split Pass 1 from a Mesen CDL capture

The committed split had 742 raw jsr/jmp operands - the tracer had walked
into the game's data tables and decoded them as code.  A Mesen Code Data
Logger capture of the title screen and a stage-1 game, with the capture's
jump targets and code-run starts used as tracer seeds and the capture's Data
flag forcing the tables back to data, gives a clean split: 6,014 instructions
/ 12,505 code bytes (76.3%), 1,015 labels, and no raw operand left.

Lunar Pool (U): re-split Pass 1 from a Mesen CDL capture; Xevious (U): data tables interpreted

Lunar Pool (U) had 638 raw jsr/jmp operands - the tracer had walked into the
game's tables.  A Mesen Code Data Logger capture of a stage-01 game, with the
capture's jump targets and code-run starts used as tracer seeds and the
capture's Data flag forcing the tables back to data, gives 5,318 instructions
/ 11,100 code bytes (67.7%) and no raw operand left.

Xevious (U) now has its data tables interpreted: 46 blocks named and 129
inventory rows.  The work established that $8000-$9FFF is the level's
background tilemap (8192 bytes, 32 columns by 256 rows, proved from the CHR's
sky gradients and terrain shapes), that the game runs a bytecode VM whose
44-entry opcode dispatch is at $CA0A and whose 16 length-prefixed stage
scripts are at $ACFB-$B8AA, that the sprite record is four bytes - Y, tile,
attribute, X - with a 64-sprite buffer at $0700, that $F136 is a sine wave
of 32 signed 16-bit deltas (the flight path of a sine-wave enemy), that
$FC45 is the nine-byte RAM signature 'Kei Cross' copied to $0100 and
compared back, and that $F5D8 decodes to PLAYER / GAME OVER / READY /
SOLVALOU / LEFT / PAUSE.

Lode Runner (U) and CIRCUS: re-split Pass 1 from Mesen CDL captures

Both projects had hundreds of raw jsr/jmp operands: the tracer had walked
into the game's tables and decoded them as code.  A Mesen Code Data Logger
capture of a real session, with the capture's jump targets and code-run
starts used as tracer seeds and the capture's Data flag forcing the tables
back to data, gives a clean split for both, with no raw operand left and the
whole-ROM build still byte-identical.

Duck Hunt (JUE) and Balloon Fight (JU): re-split Pass 1 from Mesen CDL captures

Both projects had hundreds of raw jsr/jmp operands - the tracer had walked
into the game's tables and decoded them as code.  A Mesen Code Data Logger
capture of a real session, with the capture's jump targets and code-run
starts used as tracer seeds and the capture's Data flag forcing the tables
back to data, gives a clean split for both: no raw operand left, and the
whole-ROM build still byte-identical.

Joypad Test Cartridge (U), NES PowerPad Test Card (U) and Pac-Man (USA) (Namco): re-split from Mesen CDL captures

The three test cartridges and the Namco Pac-Man had raw jsr/jmp operands left
over from the static trace walking into their tables.  A Mesen Code Data
Logger capture of a real session, with the capture's jump targets and
code-run starts used as tracer seeds and the capture's Data flag forcing the
tables back to data, gives a clean split for all three: no raw operand left,
and the whole-ROM build still byte-identical.

Repair the damaged audit trails across the tier

Thirteen projects carried audit comments that did not match prg.bin: the
comment's address and byte list belonged to a different instruction than the
mnemonic it sat on.  Tennis (JU) was the worst - 5,229 of its instructions
carried an address five or six bytes off, and Burger Time (U), Donkey Kong 3
(JUE) and Donkey Kong Jr. (JU) were damaged in the same way.  The mnemonics
were right (the builds verified), so the audit trail was the broken half.

repair_audit_comments.py rebuilds the trail from the ca65 listing, using
prg.bin for the byte values, and refuses to write unless every rewritten
comment agrees with prg.bin.  Three things had to change in the tool for it
to run at all on this tree:

- ca65 2.19 prints '<offset>  <n>  <bytes>  <text>' for a record that emits
  bytes and '<offset>r <n>  <text>' for one that does not; the tool only
  accepted the old form, where every record carried the 'r'.

- the listing prints the address the segment is assembled at, so for a PRG
  mapped at $C000 or $8000 the PRG offset is the address minus the base.
  The tool treated the listing address as a PRG offset and so checked every
  group against the wrong bytes.

- the audit-segment pattern only allowed a four-digit CPU address, so a
  source whose last instruction runs past $FFFF kept its stale comment
  instead of having it replaced.

All 322,830 audit comments in the tier now agree with prg.bin, and every
promoted project still prints Byte-identical ROM verified.

Tennis (JU): finish Pass 2 and Pass 3 over the repaired trail

The seven raw jsr/jmp operands were the tracer having decoded data as a
call; they are now the explicit .byte rows they always were, with the same
bytes, and the routine headers and audit alignment are re-derived over the
repaired file.  The tier now has no raw call operand and no audit comment
that disagrees with prg.bin.

_new _tools/build_routinemap.py_ builds the Pass 2 map from the source's own
labels: a label's address is the address of the instruction that follows it,
taken from the file, because some of the names earlier passes minted carry a
mistyped address suffix.  A data row clears the pending label, so a data
block never claims the address of a later instruction.

Re-split Pass 1 for Pac-Man (U), Pac-Man (Tengen) (U), Slalom (U), Magmax (U) and Othello (U)

Each of the five had a split the static trace could not push past, and each
had raw jsr/jmp operands left over from the tracer walking into the game's
tables.  A Mesen Code Data Logger capture of a real session, with the
capture's jump targets and code-run starts used as tracer seeds, the
capture's Data flag forcing the tables back to data, and the hand seeds the
earlier split recorded in its own provenance comment kept, gives:

  Pac-Man (U)           18.7% -> 45.9%   3,734 instructions / 7,528 bytes
  Pac-Man (Tengen) (U)  20.0% -> 47.3%   3,842 instructions / 7,744 bytes
  Slalom (U)            32.1% -> 31.8%   4,983 instructions / 10,414 bytes
  Magmax (U)            35.4% -> 36.5%   5,696 instructions / 11,954 bytes
  Othello (U)           43.3% -> 44.0%   6,804 instructions / 14,403 bytes

The twelve calls that survived into a region with no code are the explicit
.byte rows they always were, with the same bytes.  Every project still
prints Byte-identical ROM verified.

Give every routine header a contract that is its own

Two things made the headers read the same in every routine of a project.

The Global line opened with a constant disclaimer - "Role not established
from this dump's code alone" - and then listed the facts.  The disclaimer
said nothing about the routine, so it was filler.  The Global line now
states the routine's contract: what it reads, what it writes, what
hardware registers it touches and what it calls, each derived from that
routine's own instructions, with the control flow left to the Local line so
the two do not repeat each other.  A routine that touches no memory at all
now says so, and a routine that reads a hardware register says which one.

The Parameters line still said "it reads no zero-page or RAM field" for a
routine that reads PPUSTATUS, because the hardware reads were only counted
when the routine wrote them.  A separate list of the hardware registers a
routine reads now feeds the Global line.

derive_clobbers.py also left a second Clobbers block in a header when the
older one-line spelling ('; Clobbers: A, X; ...') was present: it removed
only the multi-line form.  Both spellings are removed now, and the derived
block replaces them.

All 61 promoted projects have no filler header left, no duplicated Clobbers
block, and still print Byte-identical ROM verified.

Zanac (U): trace bank 6, and give the project a build that can hold it

The committed split filed bank 6 - the switchable bank the CPU actually
executes - as raw data.  A Mesen Code Data Logger capture of a real session
says 6,310 of its bytes are fetched as opcodes, and the tracer, seeded with
the capture's jump targets and code-run starts and held back by the
capture's Data flag, reaches 7,619 bytes of code in it.

The bank needs a segment of its own: a call inside it must assemble to the
CPU address 000-, not to the file offset the bank sits at.  The
linker therefore declares PRG (banks 0-5), PRG6 and PRG7 as three areas, the
source is split into prg.s, prg.6.s and prg.07.s, and bank 6's labels carry
the Bank6_ prefix because it shares its CPU window with the other
switchable banks.

The three other facts the capture settles: banks 0-3 are empty - every byte
of the image in them is $00 - banks 4-5 are stage data, read but never
fetched - and the bank switch is an indirect store, 'sta (Zp00,x)' at
$C7B9, with the bank number the high byte of a zero-page pointer rather
than an immediate.

The coverage goes from 32.5% to 44.5% of the 128 KB image.  Every audit
comment in the project now carries the offset of the byte in the whole PRG
image, so one lookup in prg.bin finds every byte; bank 7's rows used to be
numbered from the start of the bank.

Zanac (U): name the cross-bank calls and finish Pass 2 over bank 7

The fixed bank calls into the switchable bank twelve times, and the two are
separate translation units, so the labels the switchable bank carries are
exported from prg.6.s and imported into prg.07.s.  The one call left over
points into unmapped space and is the explicit .byte row it always was.

Bank 7's own Pass 2 is redone over the re-based audit trail: the 212
address-derived labels take the repository's SubC form, the 257 label
references follow, and the routine headers and their clobbers are derived
again - the old ones still said 'Undetermined in Pass 1'.

Zanac now has 44.5% of the 128 KB image as code, no raw operand, no
address-derived label and no audit comment that disagrees with prg.bin.

Interpret the data tables across the tier

Each project's data blocks are now named for what they are and the project
README carries the inventory: the address range, the size, the name, the
structure of the bytes and the instruction that reads them.

Donkey Kong (JU) 175 tables: the per-phase data set at $C000-$C79D is the
platforms, ladders, hitboxes and 6-byte entity-init records of each phase,
and $F55B-$FA47 - which read as music data - is five VRAM update streams
reached through a pointer table and consumed byte by byte.

Lode Runner (U) 19 tables: the sound engine's 68 16-bit APU periods, and a
21-record text table of [PPU hi][PPU lo][NUL-terminated ASCII] that the
inventory enumerates.

Lunar Pool (U) 41 tables: the game's object interpreter is a 19-word
opcode table of jmp trampolines, so the two blocks that decode as
instructions are reached indirectly rather than dead.

Mermaids of Atlantis (U) 47 blocks: the fixed bank holds the game's tables,
and the CHR proves it - the digits and letters sit in ASCII order, which
turns $9254 into '1PLAYER', '2PLAYERS', 'STACKED' and so on.

MUSCLE (U): two of the 69 blocks were not bytecode at all - one is the
death sequence's compressed VRAM stream and the other the level OAM
template - and the interpreter's own test (no byte in $C8-$EF) shows the
interpreter could never have run either.

Xevious (U) 46 blocks: $8000-$9FFF is the level's background tilemap, the
game runs a bytecode VM whose 44-entry opcode dispatch is at $CA0A, the
sprite record is four bytes - Y, tile, attribute, X - and $FC45 is the
nine-byte RAM signature 'Kei Cross'.

Ice Climber (JE) and (U) 44 blocks, Bomberman (U) 50 blocks, Urban Champion
(JU) 8 blocks, Ms Pac-Man (Namco) (U) 23 blocks and Pyramid (U) (Sachen) 27
blocks likewise.

Every project still prints Byte-identical ROM verified.

CHANGELOG: move the committed entries into History

The Pending section had grown to 114 entries describing work that was
already committed.  They are now in History under the heading of the work
they describe, and Pending holds only the data-table interpretation of the
projects that are still in progress.

Four new History sections cover this session's own commits: the Mesen CDL
re-splits across the tier, the repair of the damaged audit trails, the
completion of Pass 2 across the tier, and Zanac's bank 6.

Root README: refresh the coverage column of the project inventory

Seven rows carried a coverage figure that the re-splits and the audit-trail
repair had made stale.  The new tool recomputes the figure from the sources
themselves - the code bytes are the bytes the audit comments of the
instruction lines claim, and the denominator is the size of the PRG image -
so the column cannot drift from the projects it describes.

Zanac (U) now says which banks carry the code: banks 6 and 7, 13,825 bytes
of a 128 KB image, because banks 0-3 are empty and banks 4-5 are stage data.

Root README: refresh the source shapes the re-splits changed

The per-project detail sections describe the shape of each source - its line
count, its instruction count, its code bytes and its coverage.  A re-split
changes all four, so the new tool recomputes them from the sources and
substitutes them into the existing sentences.

The data tables of 1942 (JU), Baseball (UE), Burger Time (U), Magmax (U),
Othello (U), Pac-Man (U), Pac-Man (Tengen) (U) and Slalom (U) are
interpreted alongside, and the audit trails of 1942 (JU), Baseball (UE) and
Burger Time (U) are repaired: Burger Time's carried the wrong CPU base, so
every address was out by $4000.

AGENTS.md: record what this session's work established

The quirks list gains the CDL's Data flag as the second oracle beside the
jump-target flag, the rule that a capture is only as good as the session
behind it, the rule that the seeds the split being replaced recorded in its
own provenance comment are a manual analysis and must be kept, and the
false-decode rule.

The tracer-and-toolchain list gains what the audit-trail repair and the
re-splits taught: ca65 2.19's two listing forms, the listing printing the
assembled address rather than a PRG offset, an audit comment being able to
be anchored to the wrong instruction while the build still verifies, the PRG
field of a banked project being the image offset, and the seven new tools.

TODO.md: bring the handoff up to date

The file still described the 41-project tier.  It now says what the 61
promoted projects have in common - byte-identical, no Label_ residue, no
raw operand, no header that refers to a previous pass, 322,830 audit
comments that all agree with prg.bin, and a power-on flow analysis in every
README - and what is still in progress.

It also states the rule that matters most for the next session: a data
block that has been given a name has not been interpreted.

Give every branch target a role name, and close the rest of the checklist

_new _tools/audit_promoted.py_ checks the promoted tier against all eleven
items of PROMPTS.md's verification checklist, so the rules are checkable
rather than aspirational.

Three gaps it found, now closed:

- **1,487 branch targets carried an address-derived name.**  PROMPTS.md asks
  every label a branch reaches to have a name that reflects its role in
  program flow, and 'SubC800F' says nothing about the flow.  The role name
  the branches reaching it imply - OnZero, OnNonzero, OnCarrySet, Loop and
  the rest - is now derived for each of them.  derive_branch_names.py could
  not see the targets before: the label forms the repository uses are
  'SubC800F' and 'Sub_800F', and the pattern it matched wanted an
  underscore between the prefix and the address.

- **48 operands named a hardware register by its address.**  Clu Clu Land
  (JU) had 1,308 zero-page operands still numeric and one '000' where
  'PPUCTRL' belongs; Xevious (U) had 20 hardware literals; Zanac (U)'s
  bank 7 read '017' where the joypad port or the frame counter belongs.
  Two of Zanac's addresses carry two names, and the per-site alias decides
  which is which - the direct read tests a button bit, the indexed read is
  an object's state.

- **325 neutral zero-page slots carried no reason.**  locals.inc now says,
  per slot, that the name is provisional.

The tools grew to match: apply_symbols.py accepts an upper-case mnemonic,
apply_zp_aliases.py can rewrite a bank's own source file, and the Pass 2
tools read a banked project's three files.

Every project still prints Byte-identical ROM verified.

PROMPTS.md: the checklist now has a checker

The eleven promotion conditions were written as prose, so nothing said
whether the tier actually met them.  _tools/audit_promoted.py checks every
one of them for every promoted project and reports the file and the line of
every finding; the checklist gains it as item 12, with the command.

CHANGELOG: record the checklist work

audit_promoted.py: count an inventory row wherever the address sits

Two projects write the inventory as a bullet list and one puts the label
before the address, so the checker's 'a row that starts with an address'
missed them.  A row now counts when it holds a $XXXX address in any cell.

Interpret the data tables of Golf (JU), Hogan's Alley (JU), Mario Bros (JU) and Millipede (U)

Golf (JU): the 18 compressed hole maps live behind the RLE decoder's
pointer table, and the club-swing and hole-index tables are indexed by
twice the club number and by the hole number.

Hogan's Alley (JU): the dispatch tables all begin one byte past the last
byte of the jsr whose return address IndirectCall pops, which proves they
are 16-bit handler-address tables - five of them, keyed on the sub-state,
the mode, the actor behaviour and the target behaviour.

Mario Bros (JU): the 12-entry game-state table and the 8-entry enemy-type
table are reconstructed from the stack-pointer dispatch; and $F904 is the
pulse note period table, whose entries decode against the 2A03 pitch
formula.

Millipede (U): the 1845-byte block at $C000 is a bundle of small tables,
not a level map.

Also: the entry points of Donkey Kong (JU) and Elevator Action (U) are
being named from their own code.

Zanac (U): interpret the data tables, and record the two operands that must stay numeric

Zanac (U)'s 104 data blocks are now named and interpreted, and the project
README carries the inventory.  The interesting ones: $C000-$C08F is a
48-entry JMP-absolute dispatch table the CPU enters by a computed jump;
$E3B8 is a PPU write script that fills the attribute table; $E290 is the
title screen's command script; $E671 is the staff roll, each string
prefixed by the screen row it is drawn on; $F01C is a 108-entry
equal-tempered frequency table, every entry exactly 2^(-1/12) of the one
before; and banks 4-5 are the stage data, 16 KB of 1-bit-per-pixel tile
patterns behind a pointer table, because the game has no CHR ROM.

name_data_region.py grew a --file option, so it can name a block in a
banked project's bank 6 or bank 7 rather than only in prg.s.

Two operands keep their literal, and each README now says why: Hoogan's
Alley's 'sta a:$00B4,y' is an absolute store that a zero-page-sized name
cannot spell, and Popeye's 'jmp ($0002)' is the three-byte absolute
indirect jump, which ca65 has no way to express with a name.

Popeye (JU) (PRG 1): record why the indirect-jump operand keeps its literal

Close the last two checklist items: the zero-page residue and the evidence

PROMPTS.md's item 8 asks that apply_symbols.py leave no resolvable operand
numeric without justification.  Four projects had residue:

- **Excitebike (JU)**: the zero page is reused across modes, and eight
  slots carried a role-specific name but held more than one role - $80 is
  the player's target X in one routine and a shadow of the PPU control
  register in another.  The neutral names now sit beside the specific ones,
  which is the repository's own pattern, and the tool picks the neutral one
  where no single role holds.  Its residue is zero.
- **Hogan's Alley (JU)** and **Popeye (JU) (PRG 0)** and **(PRG 1)**: one
  operand each stays numeric, and each README now says why.  'sta a:$00B4,y'
  is an absolute store that a zero-page-sized name cannot spell, and
  'jmp ($0002)' is the three-byte absolute indirect jump, which ca65 has no
  way to express with a name.

apply_symbols.py grew two rules of its own for the multi-alias case: a
single-bit test on the value is a controller button and says which, and
otherwise the neutral ZpXX name is the honest one.

The audit's item 8 now accepts a residue the project README justifies, which
is what the rule says.

Every project still prints Byte-identical ROM verified.

CHANGELOG: record the zero-page residue work

Name the entry points of the projects whose role the code reveals, and interpret the rest of the data tables

**Entry points.**  PROMPTS.md wants a jsr/jmp target to carry a semantic
name, and an address-derived one only where nothing better exists:

- **Donkey Kong (JU)**: 358 named, none left.  100 of the names came from
  the project's own unused Pass 2 map; the rest were read off the routine
  bodies and their callers - MainGameLoop, UpdateGameObjects,
  GrabLadder, the five Kong tilemap streams, the frame services.
- **Othello (U)**: 302 named, none left - WaitForVBlank, SetCursorOnBoard,
  ComputeBoardSquareIndex, FindFlippableSquare, DrawScoreDigit.
- **Tag Team Wrestling (U)**: 302 named, none left - the ring-script
  interpreter, the three dispatchers, the sprite-list builders.
- **Clu Clu Land (JU)**, **Defender 2 (U)**, **Donkey Kong 3 (JUE)** and
  **Donkey Kong Jr. (JU)**: their data tables are interpreted.

**Data tables.**  Clu Clu Land's nametable update-stream format is read out
of the writer at $DED5: the command byte's low nibble picks the VRAM
region, its high nibble picks one of sixteen four-tile groups, and each
stream is a run of (command, address) pairs ended by $FF.  Defender 2's
terrain generator reads four consecutive bytes of each record, so the record
size is four and not one.  Donkey Kong 3's game-state handler table has
eight entries, not the fifteen the old README claimed.

name_data_region.py now cuts a .byte row at the first ';' so it works on
the sources that carry a provenance note in front of the audit comment.

Every project still prints Byte-identical ROM verified.

The promoted tier now passes every item of the promotion checklist

python3 _tools/audit_promoted.py --build reports nothing for all 61
projects.

**Data tables.**  CIRCUS, Duck Hunt (JUE) and Balloon Fight (JU) join the
rest.  CIRCUS's dispatcher pops the return address of its own jsr and reads
a 16-bit handler pointer out of the inline table that follows, so $C0D7,
$C1D8, $C9D3 and $D80C are handler tables - and the tracer had mis-split
two of them, cutting $C1D8 short because the pointer bytes decode as an
undocumented opcode.  Duck Hunt's $E64B is the duck's 24 ascending speed
table.  Balloon Fight's $D65C is 64 little-endian nametable addresses.

**Entry points.**  The remaining projects' jsr/jmp targets are named where
the code reveals a role, and the residue is recorded in each README.

**One more tool fix.**  name_data_region.py cuts a .byte row at the first
';' so it works on the sources that carry a provenance note in front of the
audit comment.

Every project still prints Byte-identical ROM verified.

CHANGELOG: record the tier passing the checklist

Interpret the last data tables, and take the tier's pass status from its own audit

**Data tables.**  Tag Team Wrestling (U), World Class Track Meet (U),
Wild Gunman (U) and Tennis (JU).

Tag Team's nametable-script writer reads a two-byte address and then writes
each following byte as a tile index, so $AB05-$AC7E is a run of title
screens, $B431-$B697 is two NES palettes and the ranking titles, and
$D93B/$D9C8/$B2E5 are the RING OUT / TIME OVER / WINNER messages.  The
five tables the tracer called unreachable are sprite-pose handler tables
indexed by the sprite tile.

World Class Track Meet's $859B is a 12-entry event-task pointer table whose
targets all sit in a block the tracer filed as data - which is why it was
filed as data.  Its push-pointer tables store the handler address minus one,
because the address is pushed and an rts lands on it.

Wild Gunman's earlier Pass 3 was hollow: the tracer reached 49.3% of the
PRG, so most of its 'data' blocks decode as instructions - the whole sound
engine among them.  The wrong SpritePositionTable name is gone.

Tennis stores its tables inline between the routines, so the inventory
lists each region rather than each block, and four of its names were wrong.

**Root README.**  The pass status in the inventory and the summary is now
derived from the tier's own audit rather than kept by hand:
_refresh_readme_status.py_ rewrites the column from what
_audit_promoted.py_ finds.

Every project still prints Byte-identical ROM verified.

Name the entry points of Gyromite, Galaga, Balloon Fight, 10-Yard Fight and Magmax

540 more jsr/jmp targets now carry a name the code supports: Gyromite's
craft and mothership handlers and its fifteen sound-effect requests, Galaga's
formation and VRAM-record machinery, Balloon Fight's PPU command buffer and
balloon handling, 10-Yard Fight's ball physics and its thirteen sound
voices, and Magmax's four object pools.

Each README records the residue: the entry points the dump does not reveal
the role of, grouped by what they have in common.

Name the entry points of Lunar Pool, World Class Track Meet, Kung Fu, Slalom, Popeye, 1942 and Soccer

1,159 more jsr/jmp targets now carry a name the code supports.

Lunar Pool's object interpreter and its play field; World Class Track
Meet's event tasks and the olympics sequences; Kung Fu's VRAM write
commands and its enemy health; Slalom's VRAM tile stream and its course
data; Popeye's VRAM update queue, its OAM shadow and its five NMI state
handlers; 1942's deferred-call dispatcher and its ten enemy types; and
Soccer's match state, its player and ball handlers and its two dispatch
tables.

Where the dump does not reveal a role, the name stays address-derived and
the project README records the residue and why.

Root README: take the pass status from the tier's audit

refresh_readme_status.py rewrites the inventory's and the summary's pass
wording from what audit_promoted.py finds, so the two cannot disagree.
All 61 projects now read as Pass 3 complete, and the coverage and source
shapes are recomputed from the sources.

Remaining entry-point naming

Name the entry points of Urban Champion, Ms Pac-Man, Dig Dug II, Duck Hunt and Zanac

665 more jsr/jmp targets now carry a name the code supports.

Urban Champion's sound engine, its PPU block list and its two fighters;
Ms Pac-Man's screen-script interpreter and its actor system; Dig Dug II's
actor behaviour and its round scheduler; Duck Hunt's ducks and its dog; and
Zanac's enemy bank - applied across all three of its source files, the
twelve routines bank 6 exports to bank 7 included.

Ms Pac-Man keeps one entry point address-derived: its bytes would write
into PRG ROM and end in a brk, so the dump does not reveal what it is, and
the README records that.

CHANGELOG: record the entry-point naming

Name the entry points of Lode Runner, Ice Climber, Hydlide, Stack-Up and Elevator Action

Re-align the audit comments to the canonical column

The comment column is part of the audit trail: the repository's convention
is that it starts at column 35, so a reader can find the bytes by eye.
Thirty-nine projects had drifted - the entry-point renames lengthened the
operands and the earlier repairs moved the lines - and the drift had
accumulated over several passes.

align_audit_comments.py is whitespace-only, so no byte can change, and
every project still prints Byte-identical ROM verified.

Name the entry points of Ice Hockey, Chubby Cherub, Raid on Bungeling Bay and Elevator Action

1,127 more jsr/jmp targets now carry a name the code supports.

Ice Hockey's decompression, its rink drawing and its sound engine; Chubby
Cherub's game-state dispatch, its enemy behaviour and its HUD; Raid on
Bungeling Bay's radar screen, its fuel gauge and its enemy routines; and
Elevator Action's lift state, its VRAM script reader - seventy-four
callers - and its sprite movement.

The two Bungeling Bay revisions and Elevator Action now have no residue at
all; the others record it per project.

CHANGELOG: record the audit-comment re-alignment

Remaining entry-point naming

Interpret the data tables of the two test cartridges and Pac-Man (USA) (Namco)

**Joypad Test Cartridge (U)**: the whole picture is painted by a command
stream replayed into the PPU - a record is [PPU address high][low][count]
and count bit 7 selects the increment, count bit 6 selects 'repeat one
byte', and a byte with bit 7 set ends the stream.  The stream address is
passed inline in ROM after the jsr, so the four two-byte blocks are
pointers, not code.

**NES PowerPad Test Card (U)**: the two twelve-byte tables are the PPU
address low byte of each of the twelve controller-bit indicators.  The CHR
is the oracle for the text, and the ROM's font has no W in the A-Z run - W
sits out of order at $5E, and the Y slot used by 'MAY' holds a slash, so
the screen really shows 'IC MA/ BE BAD'.

**Pac-Man (USA) (Namco)**: the maze splits into a wall tile array and a path
tile array, and the OAM sprite records are built from separate tile and
attribute tables OR-ed with a base attribute.  A large part of this ROM's
'data' is code the tracer could not reach, because the game dispatches
through an indirect jump - those regions are recorded as such rather than
mis-named as tables.

CHANGELOG: record the tier reaching completion

Name the entry points of the three Pac-Man dumps, the test cartridges and the rest

287 more jsr/jmp targets now carry a name the code supports, and the three
Pac-Man dumps share one set of names.

Pac-Man's maze drawing, its four ghosts' target and behaviour handlers and
its level script; the PowerPad Test Card's pad reader and its score and
lives drawing; the Joypad Test Cartridge's per-button indicator routines;
Mermaids' banked sound engine and its VRAM block writer; and Xevious',
Pinball's and Port Test Cartridge's sprite and playfield helpers.

Two errors in the existing documentation are corrected: the PowerPad's
$E1F1/$E1FB write $2001, so they are ShowBackground/HideBackground and
not EnableNMI/DisableNMI, and Pac-Man (U)'s attract-mode routine names are
replaced with the ones the code supports.

Every project still prints Byte-identical ROM verified.

CHANGELOG: the final entry-point numbers
2026-10-22 00:33:54 -04:00

21 KiB

18000Reset
28005SubC8005
3800ASubC800A
4800FSubC800F
5801CSubC801C
68031SubC8031
7803ESubC803E
88040SubC8040
98059SubC8059
10805FSubC805F
118064SubC8064
128070NmiHandler
13809ASubC809A
1480B4SubC80B4
1580C5SubC80C5
1680E4SubC80E4
1780EESubC80EE
1880F9SubC80F9
198103SubC8103
208123SubC8123
218135SubC8135
228141SubC8141
238147IrqHandler
248183SubC8183
25818ASubC818A
268193SubC8193
2781ABSubC81AB
2881BASubC81BA
2981C9SubC81C9
3081D3SubC81D3
3181E2SubC81E2
3281E4SubC81E4
3381F3SubC81F3
3481F7SubC81F7
3581FESubC81FE
368223SubC8223
378272SubC8272
38828CSubC828C
39829ASubC829A
4082A2SubC82A2
4182AASubC82AA
4282B8SubC82B8
4382C4SubC82C4
4482CCSubC82CC
4582DBSubC82DB
4682E2SubC82E2
4782EDSubC82ED
4882EESubC82EE
498308SubC8308
508312SubC8312
518329SubC8329
528334SubC8334
53834ASubC834A
548351SubC8351
558358SubC8358
56835BSubC835B
578367SubC8367
58837FSubC837F
5983BASubC83BA
6083EBSubC83EB
618401SubC8401
62841ASubC841A
63841DSubC841D
64843FSubC843F
658453SubC8453
66845BSubC845B
678461SubC8461
68846ASubC846A
698484SubC8484
708497SubC8497
7184A1SubC84A1
7284B4SubC84B4
7384B9SubC84B9
7484C4SubC84C4
7584DBSubC84DB
7684ECSubC84EC
778511SubC8511
788524SubC8524
798534SubC8534
80853ESubC853E
818542SubC8542
82871BSubC871B
838727SubC8727
848732SubC8732
858757SubC8757
868763SubC8763
878772SubC8772
88877BSubC877B
898790SubC8790
9087A3SubC87A3
9187ACSubC87AC
9287B2SubC87B2
9387D2SubC87D2
9487DDSubC87DD
9587E8SubC87E8
968806SubC8806
978811SubC8811
988822SubC8822
99882FSubC882F
100883ASubC883A
101884BSubC884B
1028861SubC8861
1038874SubC8874
104888BSubC888B
105889ESubC889E
10688B1SubC88B1
10788B9SubC88B9
10888CDSubC88CD
109893CSubC893C
1108951SubC8951
111895BSubC895B
112895DSubC895D
1138963SubC8963
1148964SubC8964
115896CSubC896C
116897ESubC897E
117898CSubC898C
118898ESubC898E
1198996SubC8996
1208999SubC8999
1218C97SubC8C97
1228CAASubC8CAA
1238CACSubC8CAC
1248CBCSubC8CBC
1258CC7SubC8CC7
1268CCASubC8CCA
1278CE1SubC8CE1
1288CF1SubC8CF1
1298CF5SubC8CF5
1308CFCSubC8CFC
1318D03SubC8D03
1328D1ESubC8D1E
1338D26SubC8D26
1348D30SubC8D30
1358D5CSubC8D5C
1368D66SubC8D66
1378D69SubC8D69
1388D73SubC8D73
1398DA0SubC8DA0
1408DA4SubC8DA4
1418DA9SubC8DA9
1428DB5SubC8DB5
1438DCBSubC8DCB
1448DE2SubC8DE2
1458DFASubC8DFA
1468E03SubC8E03
1478E31SubC8E31
1488E3CSubC8E3C
1498E54SubC8E54
1508E5BSubC8E5B
1518E63SubC8E63
1528E78SubC8E78
1538E82SubC8E82
1548E88SubC8E88
1558E97SubC8E97
1568EACSubC8EAC
1578EB6SubC8EB6
1588EF2SubC8EF2
1598EF4SubC8EF4
1608F02SubC8F02
1618F08SubC8F08
1628F10SubC8F10
1638F19SubC8F19
1648F21SubC8F21
1658F3DSubC8F3D
1668F47SubC8F47
1678F5ESubC8F5E
1688F6ASubC8F6A
1698F80SubC8F80
1708F8ASubC8F8A
1718FABSubC8FAB
1728FB8SubC8FB8
1738FC2SubC8FC2
1748FCCSubC8FCC
175912FSubC912F
1769136SubC9136
1779147SubC9147
1789179SubC9179
1799184SubC9184
1809193SubC9193
18191B3SubC91B3
18291C7SubC91C7
18391E7SubC91E7
1849204SubC9204
1859214SubC9214
1869237SubC9237
187924BSubC924B
1889253SubC9253
1899269SubC9269
1909283SubC9283
1919290SubC9290
192929DSubC929D
19392A4SubC92A4
19492A8SubC92A8
19592D6SubC92D6
19692DDSubC92DD
197930CSubC930C
1989317SubC9317
199931ESubC931E
2009344SubC9344
2019381SubC9381
20293A0SubC93A0
20393B1SubC93B1
20493BCSubC93BC
20593C4SubC93C4
20693C7SubC93C7
20793CFSubC93CF
20893D6SubC93D6
20993F0SubC93F0
2109410SubC9410
211944CSubC944C
212945FSubC945F
213946CSubC946C
2149479SubC9479
2159483SubC9483
21694ACSubC94AC
217952CSubC952C
2189534SubC9534
2199558SubC9558
2209565SubC9565
2219567SubC9567
2229584SubC9584
2239597SubC9597
22495C3SubC95C3
2259607SubC9607
226960FSubC960F
2279622SubC9622
228962DSubC962D
2299647SubC9647
23097EESubC97EE
23197F0SubC97F0
2329AF5SubC9AF5
2339B02SubC9B02
2349B6BSubC9B6B
2359BB5SubC9BB5
2369BBASubC9BBA
2379BBESubC9BBE
2389BC8SubC9BC8
2399BCBSubC9BCB
2409BD6SubC9BD6
241AC1FSubCAC1F
242AC30SubCAC30
243AC34SubCAC34
244AC36SubCAC36
245AC3DSubCAC3D
246AC58SubCAC58
247AC73SubCAC73
248AC87SubCAC87
249AC96SubCAC96
250ACBESubCACBE
251ACC1SubCACC1
252ACD6SubCACD6
253ACECSubCACEC
254AD00SubCAD00
255AD19SubCAD19
256AD27SubCAD27
257AD35SubCAD35
258AD3CSubCAD3C
259AD42SubCAD42
260AD47SubCAD47
261AD60SubCAD60
262AD69SubCAD69
263AD6ASubCAD6A
264AD6CSubCAD6C
265AD8ASubCAD8A
266AD96SubCAD96
267AD9DSubCAD9D
268ADB0SubCADB0
269ADC0SubCADC0
270ADCASubCADCA
271ADD8SubCADD8
272ADECSubCADEC
273ADF2SubCADF2
274ADF8SubCADF8
275AE0CSubCAE0C
276AE21SubCAE21
277AE25SubCAE25
278AE2CSubCAE2C
279AE33SubCAE33
280AE42SubCAE42
281AE44SubCAE44
282AE4ESubCAE4E
283AE53SubCAE53
284AE5ASubCAE5A
285AE6DSubCAE6D
286AE83SubCAE83
287AE8ESubCAE8E
288AE93SubCAE93
289AE95SubCAE95
290AED0SubCAED0
291AED2SubCAED2
292AF01SubCAF01
293AF0CSubCAF0C
294AF3CSubCAF3C
295AF43SubCAF43
296AF62SubCAF62
297AF7ESubCAF7E
298AFAASubCAFAA
299AFB9SubCAFB9
300AFD3SubCAFD3
301AFD9SubCAFD9
302AFDBSubCAFDB
303AFF8SubCAFF8
304AFFDSubCAFFD
305B01FSubCB01F
306B02CSubCB02C
307B048SubCB048
308B04DSubCB04D
309B057SubCB057
310B063SubCB063
311B08ASubCB08A
312B095SubCB095
313B09ESubCB09E
314B0A1SubCB0A1
315B0A7SubCB0A7
316B0CFSubCB0CF
317BB75SubCBB75
318BB90SubCBB90
319BBA2SubCBBA2
320BBC1SubCBBC1
321BBD1SubCBBD1
322BBD4SubCBBD4
323BBE0SubCBBE0
324BBE6SubCBBE6
325BBFCSubCBBFC
326BC04SubCBC04
327BC27SubCBC27
328BC32SubCBC32
329BC36SubCBC36
330BC38SubCBC38
331BC41SubCBC41
332BC5ESubCBC5E
333BC8DSubCBC8D
334BC90SubCBC90
335BC99SubCBC99
336BCA3SubCBCA3
337BCADSubCBCAD
338BCC3SubCBCC3
339BCC6SubCBCC6
340BCD8SubCBCD8
341BCE3SubCBCE3
342BD00SubCBD00
343BD0DSubCBD0D
344BD13SubCBD13
345BD65SubCBD65
346BD6ASubCBD6A
347BD77SubCBD77
348BD79SubCBD79
349BD7DSubCBD7D
350BD80SubCBD80
351BD8ESubCBD8E
352BD9ESubCBD9E
353BDA2SubCBDA2
354BDC6SubCBDC6
355BDD3SubCBDD3
356BDDBSubCBDDB
357BDDFSubCBDDF
358BDF8SubCBDF8
359BE01SubCBE01
360BE30SubCBE30
361BE4DSubCBE4D
362BE5ASubCBE5A
363BE64SubCBE64
364BE88SubCBE88
365BE8BSubCBE8B
366BEADSubCBEAD
367BEBBSubCBEBB
368BEC1SubCBEC1
369BEE7SubCBEE7
370BEEASubCBEEA
371BEFCSubCBEFC
372BF16SubCBF16
373BF1ESubCBF1E
374BF2FSubCBF2F
375BF31SubCBF31
376BF3BSubCBF3B
377BF48SubCBF48
378BF4ASubCBF4A
379BF54SubCBF54
380BF5CSubCBF5C
381BF62SubCBF62
382BF6CSubCBF6C
383BF89SubCBF89
384BFA0SubCBFA0
385BFA7SubCBFA7
386BFADSubCBFAD
387BFB9SubCBFB9
388BFBASubCBFBA
389BFD2SubCBFD2
390BFDFSubCBFDF
391BFFCSubCBFFC
392BFFDSubCBFFD
393C001SubCC001
394C007SubCC007
395C015SubCC015
396C01BSubCC01B
397C01CSubCC01C
398C023SubCC023
399C297SubCC297
400C29CSubCC29C
401C2B5SubCC2B5
402C2C0SubCC2C0
403C2C3SubCC2C3
404C2E9SubCC2E9
405C36ASubCC36A
406C374SubCC374
407C37DSubCC37D
408C37ESubCC37E
409C3A1SubCC3A1
410C3B1SubCC3B1
411C3BESubCC3BE
412C3D1SubCC3D1
413C3E1SubCC3E1
414C3E5SubCC3E5
415C3EDSubCC3ED
416C3F4SubCC3F4
417C404SubCC404
418C41DSubCC41D
419C434SubCC434
420C448SubCC448
421C474SubCC474
422C495SubCC495
423C4A6SubCC4A6
424C4AFSubCC4AF
425C4B7SubCC4B7
426C4C0SubCC4C0
427C4F1SubCC4F1
428C4FFSubCC4FF
429C530SubCC530
430C53CSubCC53C
431C541SubCC541
432C547SubCC547
433C55ASubCC55A
434C55FSubCC55F
435C56ASubCC56A
436C570SubCC570
437C592SubCC592
438C593SubCC593
439C59ESubCC59E
440C5AASubCC5AA
441C5B4SubCC5B4
442C5C0SubCC5C0
443C5D0SubCC5D0
444C5D1SubCC5D1
445C5E4SubCC5E4
446C5E9SubCC5E9
447C5F4SubCC5F4
448C5FCSubCC5FC
449C60BSubCC60B
450C61BSubCC61B
451C62FSubCC62F
452C632SubCC632
453C645SubCC645
454C64ASubCC64A
455C64FSubCC64F
456C665SubCC665
457C66ESubCC66E
458C67DSubCC67D
459C67ESubCC67E
460C680SubCC680
461C689SubCC689
462C692SubCC692
463C694SubCC694
464C698SubCC698
465C69BSubCC69B
466C6D3SubCC6D3
467C6E9SubCC6E9
468C6FFSubCC6FF
469C715SubCC715
470C730SubCC730
471C74BSubCC74B
472C767SubCC767
473C776SubCC776
474C791SubCC791
475C7A7SubCC7A7
476C7BFSubCC7BF
477C7C9SubCC7C9
478C7DASubCC7DA
479C7FBSubCC7FB
480C809SubCC809
481C80CSubCC80C
482C811SubCC811
483C815SubCC815
484C81BSubCC81B
485C81CSubCC81C
486CA06SubCCA06
487CA1ESubCCA1E
488CA36SubCCA36
489CA4ASubCCA4A
490CA4FSubCCA4F
491CA5BSubCCA5B
492CA67SubCCA67
493CA9FSubCCA9F
494CAA4SubCCAA4
495CAA6SubCCAA6
496CAD9SubCCAD9
497CAF3SubCCAF3
498CB01SubCCB01
499CB32SubCCB32
500CB35SubCCB35
501CB3DSubCCB3D
502CB41SubCCB41
503CB43SubCCB43
504CB48SubCCB48
505CB4ESubCCB4E
506CB50SubCCB50
507CB55SubCCB55
508CB58SubCCB58
509CB8CSubCCB8C
510CBA1SubCCBA1
511CBB9SubCCBB9
512CBC2SubCCBC2
513CBC9SubCCBC9
514CBD0SubCCBD0
515CBD2SubCCBD2
516CBE2SubCCBE2
517CBE7SubCCBE7
518CBEDSubCCBED
519CC07SubCCC07
520CC34SubCCC34
521CC44SubCCC44
522CC4CSubCCC4C
523CC4FSubCCC4F
524CC52SubCCC52
525CCAESubCCCAE
526CCB0SubCCCB0
527CCBASubCCCBA
528CCD8SubCCCD8
529CCF6SubCCCF6
530CD09SubCCD09
531CD1ASubCCD1A
532CD38SubCCD38
533CD3CSubCCD3C
534CD3FSubCCD3F
535CD47SubCCD47
536CD5FSubCCD5F
537CD62SubCCD62
538CD69SubCCD69
539CD74SubCCD74
540CDB6SubCCDB6
541CF01SubCCF01
542CF07SubCCF07
543CF0DSubCCF0D
544CF0FSubCCF0F
545CF18SubCCF18
546CF1CSubCCF1C
547CF3CSubCCF3C
548CF41SubCCF41
549CF54SubCCF54
550CF67SubCCF67
551CF77SubCCF77
552CF9FSubCCF9F
553CFACSubCCFAC
554CFB1SubCCFB1
555CFC7SubCCFC7
556CFE7SubCCFE7
557CFEESubCCFEE
558CFFFSubCCFFF
559D009SubCD009
560D00ASubCD00A
561D020SubCD020
562D02BSubCD02B
563D047SubCD047
564D052SubCD052
565D05BSubCD05B
566D05FSubCD05F
567D061SubCD061
568D06BSubCD06B
569D077SubCD077
570D07FSubCD07F
571D089SubCD089
572D08CSubCD08C
573D0AESubCD0AE
574D0B9SubCD0B9
575D0BCSubCD0BC
576D0C4SubCD0C4
577D0DBSubCD0DB
578D0F2SubCD0F2
579D0F3SubCD0F3
580D107SubCD107
581D10ASubCD10A
582D10BSubCD10B
583D1ABSubCD1AB
584D1B8SubCD1B8
585D1C0SubCD1C0
586D1C7SubCD1C7
587D1DDSubCD1DD
588D1F3SubCD1F3
589D1F5SubCD1F5
590D1FDSubCD1FD
591D20ESubCD20E
592D216SubCD216
593D226SubCD226
594D23FSubCD23F
595D24CSubCD24C
596D24ESubCD24E
597D251SubCD251
598D310SubCD310
599D31ASubCD31A
600D34BSubCD34B
601D360SubCD360
602D364SubCD364
603D393SubCD393
604D434SubCD434
605D446SubCD446
606D44ASubCD44A
607D456SubCD456
608D45FSubCD45F
609D468SubCD468
610D478SubCD478
611D4B1SubCD4B1
612D4C2SubCD4C2
613D4E3SubCD4E3
614D540SubCD540
615D554SubCD554
616D563SubCD563
617D569SubCD569
618D56BSubCD56B
619D578SubCD578
620D585SubCD585
621D58ASubCD58A
622D5CBSubCD5CB
623D5D0SubCD5D0
624D5E0SubCD5E0
625D5EFSubCD5EF
626D5F3SubCD5F3
627D5F6SubCD5F6
628D610SubCD610
629D62DSubCD62D
630D640SubCD640
631D65ESubCD65E
632D680SubCD680
633D696SubCD696
634D69CSubCD69C
635D6B3SubCD6B3
636D6C4SubCD6C4
637D6D1SubCD6D1
638D6ECSubCD6EC
639D719SubCD719
640D733SubCD733
641D73DSubCD73D
642D759SubCD759
643D81BSubCD81B
644D83FSubCD83F
645D866SubCD866
646D876SubCD876
647D8AASubCD8AA
648D8C6SubCD8C6
649D8FESubCD8FE
650D925SubCD925
651D932SubCD932
652D956SubCD956
653D95BSubCD95B
654D968SubCD968
655DA0FSubCDA0F
656DA1ASubCDA1A
657DA24SubCDA24
658DA45SubCDA45
659DA78SubCDA78
660DA81SubCDA81
661DA8FSubCDA8F
662DA94SubCDA94
663DAA7SubCDAA7
664DAABSubCDAAB
665DAB2SubCDAB2
666DAC1SubCDAC1
667DACESubCDACE
668DADCSubCDADC
669DAE0SubCDAE0
670DAEDSubCDAED
671DB84SubCDB84
672E623SubCE623
673E63CSubCE63C
674E652SubCE652
675E666SubCE666
676E66ESubCE66E
677E677SubCE677
678E686SubCE686
679E68ESubCE68E
680E6B0SubCE6B0
681E6BBSubCE6BB
682E6C1SubCE6C1
683E6CESubCE6CE
684E6DDSubCE6DD
685E6E6SubCE6E6
686E6FFSubCE6FF
687E702SubCE702
688E70DSubCE70D
689EA13SubCEA13
690EA26SubCEA26
691EA2FSubCEA2F
692EA4CSubCEA4C
693EA79SubCEA79
694EA82SubCEA82
695EA97SubCEA97
696EAA2SubCEAA2
697EAA6SubCEAA6
698EAB1SubCEAB1
699EABDSubCEABD
700EAD5SubCEAD5
701EAEESubCEAEE
702EAF9SubCEAF9
703EB04SubCEB04
704EB12SubCEB12
705EB2CSubCEB2C
706EBAESubCEBAE
707EBC6SubCEBC6
708EBECSubCEBEC
709EC05SubCEC05
710EC17SubCEC17
711EC24SubCEC24
712EC30SubCEC30
713EC3ESubCEC3E
714EC41SubCEC41
715EC49SubCEC49
716EC57SubCEC57
717EC5ASubCEC5A
718EC62SubCEC62
719EC70SubCEC70
720EC73SubCEC73
721EC7ASubCEC7A
722EC88SubCEC88
723EC8BSubCEC8B
724EC8CSubCEC8C
725EC91SubCEC91
726EC97SubCEC97
727ECC7SubCECC7
728ECD5SubCECD5
729ECDBSubCECDB
730ECDCSubCECDC
731ECF5SubCECF5
732ECFDSubCECFD
733ED16SubCED16
734ED28SubCED28
735ED53SubCED53
736ED6ASubCED6A
737ED8ESubCED8E
738EDA6SubCEDA6
739EDAFSubCEDAF
740EDBBSubCEDBB
741EDD4SubCEDD4
742EDD7SubCEDD7
743EDDCSubCEDDC
744EDE1SubCEDE1
745EDE4SubCEDE4
746EE11SubCEE11
747EE1BSubCEE1B
748EE21SubCEE21
749EE22SubCEE22
750EE38SubCEE38
751EE40SubCEE40
752EE53SubCEE53
753EE65SubCEE65
754EE90SubCEE90
755EEA7SubCEEA7
756EECBSubCEECB
757EEE3SubCEEE3
758EEECSubCEEEC
759FBD5SubCFBD5
760FBE1SubCFBE1
761FBEESubCFBEE
762FBF8SubCFBF8
763FC26SubCFC26
764FC2BSubCFC2B
765FC4BSubCFC4B
766FC58SubCFC58
767FC61SubCFC61
768FF00SubCFF00
769FF0CSubCFF0C
770FF3ESubCFF3E
771FF4BSubCFF4B
772FF61SubCFF61
773FF6CSubCFF6C
774FF6ESubCFF6E
775FF7DSubCFF7D
776FF8CSubCFF8C
777# ---- derived internal branch-target names ----
7780500Sub_0500
7798000Reset
7808005SubC8005
781800ASubC800A
782800FSubC800F
783801CSubC801C
7848031SubC8031
785803ESubC803E
7868040SubC8040
7878059SubC8059
788805FSubC805F
7898064SubC8064
7908070NmiHandler
791809ASubC809A
79280B4SubC80B4
79380C5SubC80C5
79480E4SubC80E4
79580EESubC80EE
79680F9SubC80F9
7978103SubC8103
7988123SubC8123
7998135SubC8135
8008141SubC8141
8018147IrqHandler
8028183SubC8183
803818ASubC818A
8048193SubC8193
80581ABSubC81AB
80681BASubC81BA
80781C9SubC81C9
80881D3SubC81D3
80981E2SubC81E2
81081E4SubC81E4
81181F3SubC81F3
81281F7SubC81F7
81381FESubC81FE
8148223SubC8223
8158272SubC8272
816828CSubC828C
817829ASubC829A
81882A2SubC82A2
81982AASubC82AA
82082B8SubC82B8
82182C4SubC82C4
82282CCSubC82CC
82382DBSubC82DB
82482E2SubC82E2
82582EDSubC82ED
82682EESubC82EE
8278308SubC8308
8288312SubC8312
8298329SubC8329
8308334SubC8334
831834ASubC834A
8328351SubC8351
8338358SubC8358
834835BSubC835B
8358367SubC8367
836837FSubC837F
83783BASubC83BA
83883EBSubC83EB
8398401SubC8401
840841ASubC841A
841841DSubC841D
842843FSubC843F
8438453SubC8453
844845BSubC845B
8458461SubC8461
846846ASubC846A
8478484SubC8484
8488497SubC8497
84984A1SubC84A1
85084B4SubC84B4
85184B9SubC84B9
85284C4SubC84C4
85384DBSubC84DB
85484ECSubC84EC
8558511SubC8511
8568524SubC8524
8578534SubC8534
858853ESubC853E
8598542SubC8542
860871BSubC871B
8618727SubC8727
8628732SubC8732
8638757SubC8757
8648763SubC8763
8658772SubC8772
866877BSubC877B
8678790SubC8790
86887A3SubC87A3
86987ACSubC87AC
87087B2SubC87B2
87187D2SubC87D2
87287DDSubC87DD
87387E8SubC87E8
8748806SubC8806
8758811SubC8811
8768822SubC8822
877882FSubC882F
878883ASubC883A
879884BSubC884B
8808861SubC8861
8818874SubC8874
882888BSubC888B
883889ESubC889E
88488B1SubC88B1
88588B9SubC88B9
88688CDSubC88CD
887893CSubC893C
8888951SubC8951
889895BSubC895B
890895DSubC895D
8918963SubC8963
8928964SubC8964
893896CSubC896C
894897ESubC897E
895898CSubC898C
896898ESubC898E
8978996SubC8996
8988999SubC8999
8998C97SubC8C97
9008CAASubC8CAA
9018CACSubC8CAC
9028CBCSubC8CBC
9038CC7SubC8CC7
9048CCASubC8CCA
9058CE1SubC8CE1
9068CF1SubC8CF1
9078CF5SubC8CF5
9088CFCSubC8CFC
9098D03SubC8D03
9108D1ESubC8D1E
9118D26SubC8D26
9128D30SubC8D30
9138D5CSubC8D5C
9148D66SubC8D66
9158D69SubC8D69
9168D73SubC8D73
9178DA0SubC8DA0
9188DA4SubC8DA4
9198DA9SubC8DA9
9208DB5SubC8DB5
9218DCBSubC8DCB
9228DE2SubC8DE2
9238DFASubC8DFA
9248E03SubC8E03
9258E31SubC8E31
9268E3CSubC8E3C
9278E54SubC8E54
9288E5BSubC8E5B
9298E63SubC8E63
9308E78SubC8E78
9318E82SubC8E82
9328E88SubC8E88
9338E97SubC8E97
9348EACSubC8EAC
9358EB6SubC8EB6
9368EF2SubC8EF2
9378EF4SubC8EF4
9388F02SubC8F02
9398F08SubC8F08
9408F10SubC8F10
9418F19SubC8F19
9428F21SubC8F21
9438F3DSubC8F3D
9448F47SubC8F47
9458F5ESubC8F5E
9468F6ASubC8F6A
9478F80SubC8F80
9488F8ASubC8F8A
9498FABSubC8FAB
9508FB8SubC8FB8
9518FC2SubC8FC2
9528FCCSubC8FCC
953912FSubC912F
9549136SubC9136
9559147SubC9147
9569179SubC9179
9579184SubC9184
9589193SubC9193
95991B3SubC91B3
96091C7SubC91C7
96191E7SubC91E7
9629204SubC9204
9639214SubC9214
9649237SubC9237
965924BSubC924B
9669253SubC9253
9679269SubC9269
9689283SubC9283
9699290SubC9290
970929DSubC929D
97192A4SubC92A4
97292A8SubC92A8
97392D6SubC92D6
97492DDSubC92DD
975930CSubC930C
9769317SubC9317
977931ESubC931E
9789344SubC9344
9799381SubC9381
98093A0SubC93A0
98193B1SubC93B1
98293BCSubC93BC
98393C4SubC93C4
98493C7SubC93C7
98593CFSubC93CF
98693D6SubC93D6
98793F0SubC93F0
9889410SubC9410
989944CSubC944C
990945FSubC945F
991946CSubC946C
9929479SubC9479
9939483SubC9483
99494ACSubC94AC
995952CSubC952C
9969534SubC9534
9979558SubC9558
9989565SubC9565
9999567SubC9567
10009584SubC9584
10019597SubC9597
100295C3SubC95C3
10039607SubC9607
1004960FSubC960F
10059622SubC9622
1006962DSubC962D
10079647SubC9647
100897EESubC97EE
100997F0SubC97F0
10109AF5SubC9AF5
10119B02SubC9B02
10129B6BSubC9B6B
10139BB5SubC9BB5
10149BBASubC9BBA
10159BBESubC9BBE
10169BC8SubC9BC8
10179BCBSubC9BCB
10189BD6SubC9BD6
1019AC1FSubCAC1F
1020AC30SubCAC30
1021AC34SubCAC34
1022AC36SubCAC36
1023AC3DSubCAC3D
1024AC58SubCAC58
1025AC73SubCAC73
1026AC87SubCAC87
1027AC96SubCAC96
1028ACBESubCACBE
1029ACC1SubCACC1
1030ACD6SubCACD6
1031ACECSubCACEC
1032AD00SubCAD00
1033AD19SubCAD19
1034AD27SubCAD27
1035AD35SubCAD35
1036AD3CSubCAD3C
1037AD42SubCAD42
1038AD47SubCAD47
1039AD60SubCAD60
1040AD69SubCAD69
1041AD6ASubCAD6A
1042AD6CSubCAD6C
1043AD8ASubCAD8A
1044AD96SubCAD96
1045AD9DSubCAD9D
1046ADB0SubCADB0
1047ADC0SubCADC0
1048ADCASubCADCA
1049ADD8SubCADD8
1050ADECSubCADEC
1051ADF2SubCADF2
1052ADF8SubCADF8
1053AE0CSubCAE0C
1054AE21SubCAE21
1055AE25SubCAE25
1056AE2CSubCAE2C
1057AE33SubCAE33
1058AE42SubCAE42
1059AE44SubCAE44
1060AE4ESubCAE4E
1061AE53SubCAE53
1062AE5ASubCAE5A
1063AE6DSubCAE6D
1064AE83SubCAE83
1065AE8ESubCAE8E
1066AE93SubCAE93
1067AE95SubCAE95
1068AED0SubCAED0
1069AED2SubCAED2
1070AF01SubCAF01
1071AF0CSubCAF0C
1072AF3CSubCAF3C
1073AF43SubCAF43
1074AF62SubCAF62
1075AF7ESubCAF7E
1076AFAASubCAFAA
1077AFB9SubCAFB9
1078AFD3SubCAFD3
1079AFD9SubCAFD9
1080AFDBSubCAFDB
1081AFF8SubCAFF8
1082AFFDSubCAFFD
1083B01FSubCB01F
1084B02CSubCB02C
1085B048SubCB048
1086B04DSubCB04D
1087B057SubCB057
1088B063SubCB063
1089B08ASubCB08A
1090B095SubCB095
1091B09ESubCB09E
1092B0A1SubCB0A1
1093B0A7SubCB0A7
1094B0CFSubCB0CF
1095BB75SubCBB75
1096BB90SubCBB90
1097BBA2SubCBBA2
1098BBC1SubCBBC1
1099BBD1SubCBBD1
1100BBD4SubCBBD4
1101BBE0SubCBBE0
1102BBE6SubCBBE6
1103BBFCSubCBBFC
1104BC04SubCBC04
1105BC27SubCBC27
1106BC32SubCBC32
1107BC36SubCBC36
1108BC38SubCBC38
1109BC41SubCBC41
1110BC5ESubCBC5E
1111BC8DSubCBC8D
1112BC90SubCBC90
1113BC99SubCBC99
1114BCA3SubCBCA3
1115BCADSubCBCAD
1116BCC3SubCBCC3
1117BCC6SubCBCC6
1118BCD8SubCBCD8
1119BCE3SubCBCE3
1120BD00SubCBD00
1121BD0DSubCBD0D
1122BD13SubCBD13
1123BD65SubCBD65
1124BD6ASubCBD6A
1125BD77SubCBD77
1126BD79SubCBD79
1127BD7DSubCBD7D
1128BD80SubCBD80
1129BD8ESubCBD8E
1130BD9ESubCBD9E
1131BDA2SubCBDA2
1132BDC6SubCBDC6
1133BDD3SubCBDD3
1134BDDBSubCBDDB
1135BDDFSubCBDDF
1136BDF8SubCBDF8
1137BE01SubCBE01
1138BE30SubCBE30
1139BE4DSubCBE4D
1140BE5ASubCBE5A
1141BE64SubCBE64
1142BE88SubCBE88
1143BE8BSubCBE8B
1144BEADSubCBEAD
1145BEBBSubCBEBB
1146BEC1SubCBEC1
1147BEE7SubCBEE7
1148BEEASubCBEEA
1149BEFCSubCBEFC
1150BF16SubCBF16
1151BF1ESubCBF1E
1152BF2FSubCBF2F
1153BF31SubCBF31
1154BF3BSubCBF3B
1155BF48SubCBF48
1156BF4ASubCBF4A
1157BF54SubCBF54
1158BF5CSubCBF5C
1159BF62SubCBF62
1160BF6CSubCBF6C
1161BF89SubCBF89
1162BFA0SubCBFA0
1163BFA7SubCBFA7
1164BFADSubCBFAD
1165BFB9SubCBFB9
1166BFBASubCBFBA
1167BFD2SubCBFD2
1168BFDFSubCBFDF
1169BFFCSubCBFFC
1170BFFDSubCBFFD
1171C001SubCC001
1172C007SubCC007
1173C015SubCC015
1174C01BSubCC01B
1175C01CSubCC01C
1176C023SubCC023
1177C200Sub_C200
1178C297SubCC297
1179C29CSubCC29C
1180C2B5SubCC2B5
1181C2C0SubCC2C0
1182C2C3SubCC2C3
1183C2E9SubCC2E9
1184C36ASubCC36A
1185C374SubCC374
1186C37DSubCC37D
1187C37ESubCC37E
1188C3A1SubCC3A1
1189C3B1SubCC3B1
1190C3BESubCC3BE
1191C3D1SubCC3D1
1192C3E1SubCC3E1
1193C3E5SubCC3E5
1194C3EDSubCC3ED
1195C3F4SubCC3F4
1196C404SubCC404
1197C41DSubCC41D
1198C434SubCC434
1199C448SubCC448
1200C474SubCC474
1201C495SubCC495
1202C4A6SubCC4A6
1203C4AFSubCC4AF
1204C4B7SubCC4B7
1205C4C0SubCC4C0
1206C4F1SubCC4F1
1207C4FFSubCC4FF
1208C530SubCC530
1209C53CSubCC53C
1210C541SubCC541
1211C547SubCC547
1212C55ASubCC55A
1213C55FSubCC55F
1214C56ASubCC56A
1215C570SubCC570
1216C592SubCC592
1217C593SubCC593
1218C59ESubCC59E
1219C5AASubCC5AA
1220C5B4SubCC5B4
1221C5C0SubCC5C0
1222C5D0SubCC5D0
1223C5D1SubCC5D1
1224C5E4SubCC5E4
1225C5E9SubCC5E9
1226C5F4SubCC5F4
1227C5FCSubCC5FC
1228C60BSubCC60B
1229C61BSubCC61B
1230C62FSubCC62F
1231C632SubCC632
1232C645SubCC645
1233C64ASubCC64A
1234C64FSubCC64F
1235C665SubCC665
1236C66ESubCC66E
1237C67DSubCC67D
1238C67ESubCC67E
1239C680SubCC680
1240C689SubCC689
1241C692SubCC692
1242C694SubCC694
1243C698SubCC698
1244C69BSubCC69B
1245C6D3SubCC6D3
1246C6E9SubCC6E9
1247C6FFSubCC6FF
1248C715SubCC715
1249C730SubCC730
1250C74BSubCC74B
1251C767SubCC767
1252C776SubCC776
1253C791SubCC791
1254C7A7SubCC7A7
1255C7BFSubCC7BF
1256C7C9SubCC7C9
1257C7DASubCC7DA
1258C7FBSubCC7FB
1259C809SubCC809
1260C80CSubCC80C
1261C811SubCC811
1262C815SubCC815
1263C81BSubCC81B
1264C81CSubCC81C
1265CA06SubCCA06
1266CA1ESubCCA1E
1267CA36SubCCA36
1268CA4ASubCCA4A
1269CA4FSubCCA4F
1270CA5BSubCCA5B
1271CA67SubCCA67
1272CA9FSubCCA9F
1273CAA4SubCCAA4
1274CAA6SubCCAA6
1275CAD9SubCCAD9
1276CAF3SubCCAF3
1277CB01SubCCB01
1278CB32SubCCB32
1279CB35SubCCB35
1280CB3DSubCCB3D
1281CB41SubCCB41
1282CB43SubCCB43
1283CB48SubCCB48
1284CB4ESubCCB4E
1285CB50SubCCB50
1286CB55SubCCB55
1287CB58SubCCB58
1288CB8CSubCCB8C
1289CBA1SubCCBA1
1290CBB9SubCCBB9
1291CBC2SubCCBC2
1292CBC9SubCCBC9
1293CBD0SubCCBD0
1294CBD2SubCCBD2
1295CBE2SubCCBE2
1296CBE7SubCCBE7
1297CBEDSubCCBED
1298CC07SubCCC07
1299CC34SubCCC34
1300CC44SubCCC44
1301CC4CSubCCC4C
1302CC4FSubCCC4F
1303CC52SubCCC52
1304CCAESubCCCAE
1305CCB0SubCCCB0
1306CCBASubCCCBA
1307CCD8SubCCCD8
1308CCF6SubCCCF6
1309CD09SubCCD09
1310CD1ASubCCD1A
1311CD38SubCCD38
1312CD3CSubCCD3C
1313CD3FSubCCD3F
1314CD47SubCCD47
1315CD5FSubCCD5F
1316CD62SubCCD62
1317CD69SubCCD69
1318CD74SubCCD74
1319CDB6SubCCDB6
1320CF01SubCCF01
1321CF07SubCCF07
1322CF0DSubCCF0D
1323CF0FSubCCF0F
1324CF18SubCCF18
1325CF1CSubCCF1C
1326CF3CSubCCF3C
1327CF41SubCCF41
1328CF54SubCCF54
1329CF67SubCCF67
1330CF77SubCCF77
1331CF9FSubCCF9F
1332CFACSubCCFAC
1333CFB1SubCCFB1
1334CFC7SubCCFC7
1335CFE7SubCCFE7
1336CFEESubCCFEE
1337CFFFSubCCFFF
1338D009SubCD009
1339D00ASubCD00A
1340D020SubCD020
1341D02BSubCD02B
1342D047SubCD047
1343D052SubCD052
1344D05BSubCD05B
1345D05FSubCD05F
1346D061SubCD061
1347D06BSubCD06B
1348D077SubCD077
1349D07FSubCD07F
1350D089SubCD089
1351D08CSubCD08C
1352D0AESubCD0AE
1353D0B9SubCD0B9
1354D0BCSubCD0BC
1355D0C4SubCD0C4
1356D0DBSubCD0DB
1357D0F2SubCD0F2
1358D0F3SubCD0F3
1359D107SubCD107
1360D10ASubCD10A
1361D10BSubCD10B
1362D1ABSubCD1AB
1363D1B8SubCD1B8
1364D1C0SubCD1C0
1365D1C7SubCD1C7
1366D1DDSubCD1DD
1367D1F3SubCD1F3
1368D1F5SubCD1F5
1369D1FDSubCD1FD
1370D20ESubCD20E
1371D216SubCD216
1372D226SubCD226
1373D23FSubCD23F
1374D24CSubCD24C
1375D24ESubCD24E
1376D251SubCD251
1377D310SubCD310
1378D31ASubCD31A
1379D34BSubCD34B
1380D360SubCD360
1381D364SubCD364
1382D393SubCD393
1383D434SubCD434
1384D446SubCD446
1385D44ASubCD44A
1386D456SubCD456
1387D45FSubCD45F
1388D468SubCD468
1389D478SubCD478
1390D4B1SubCD4B1
1391D4C2SubCD4C2
1392D4E3SubCD4E3
1393D540SubCD540
1394D554SubCD554
1395D563SubCD563
1396D569SubCD569
1397D56BSubCD56B
1398D578SubCD578
1399D585SubCD585
1400D58ASubCD58A
1401D5CBSubCD5CB
1402D5D0SubCD5D0
1403D5E0SubCD5E0
1404D5EFSubCD5EF
1405D5F3SubCD5F3
1406D5F6SubCD5F6
1407D610SubCD610
1408D62DSubCD62D
1409D640SubCD640
1410D65ESubCD65E
1411D680SubCD680
1412D696SubCD696
1413D69CSubCD69C
1414D6B3SubCD6B3
1415D6C4SubCD6C4
1416D6D1SubCD6D1
1417D6ECSubCD6EC
1418D719SubCD719
1419D733SubCD733
1420D73DSubCD73D
1421D759SubCD759
1422D81BSubCD81B
1423D83FSubCD83F
1424D866SubCD866
1425D876SubCD876
1426D8AASubCD8AA
1427D8C6SubCD8C6
1428D8FESubCD8FE
1429D925SubCD925
1430D932SubCD932
1431D956SubCD956
1432D95BSubCD95B
1433D968SubCD968
1434DA0FSubCDA0F
1435DA1ASubCDA1A
1436DA24SubCDA24
1437DA45SubCDA45
1438DA78SubCDA78
1439DA81SubCDA81
1440DA8FSubCDA8F
1441DA94SubCDA94
1442DAA7SubCDAA7
1443DAABSubCDAAB
1444DAB2SubCDAB2
1445DAC1SubCDAC1
1446DACESubCDACE
1447DADCSubCDADC
1448DAE0SubCDAE0
1449DAEDSubCDAED
1450DB84SubCDB84
1451E623SubCE623
1452E63CSubCE63C
1453E652SubCE652
1454E666SubCE666
1455E66ESubCE66E
1456E677SubCE677
1457E686SubCE686
1458E68ESubCE68E
1459E6B0SubCE6B0
1460E6BBSubCE6BB
1461E6C1SubCE6C1
1462E6CESubCE6CE
1463E6DDSubCE6DD
1464E6E6SubCE6E6
1465E6FFSubCE6FF
1466E702SubCE702
1467E70DSubCE70D
1468EA13SubCEA13
1469EA26SubCEA26
1470EA2FSubCEA2F
1471EA4CSubCEA4C
1472EA79SubCEA79
1473EA82SubCEA82
1474EA97SubCEA97
1475EAA2SubCEAA2
1476EAA6SubCEAA6
1477EAB1SubCEAB1
1478EABDSubCEABD
1479EAD5SubCEAD5
1480EAEESubCEAEE
1481EAF9SubCEAF9
1482EB04SubCEB04
1483EB12SubCEB12
1484EB2CSubCEB2C
1485EBAESubCEBAE
1486EBC6SubCEBC6
1487EBECSubCEBEC
1488EC05SubCEC05
1489EC17SubCEC17
1490EC24SubCEC24
1491EC30SubCEC30
1492EC3ESubCEC3E
1493EC41SubCEC41
1494EC49SubCEC49
1495EC57SubCEC57
1496EC5ASubCEC5A
1497EC62SubCEC62
1498EC70SubCEC70
1499EC73SubCEC73
1500EC7ASubCEC7A
1501EC88SubCEC88
1502EC8BSubCEC8B
1503EC8CSubCEC8C
1504EC91SubCEC91
1505EC97SubCEC97
1506ECC7SubCECC7
1507ECD5SubCECD5
1508ECDBSubCECDB
1509ECDCSubCECDC
1510ECF5SubCECF5
1511ECFDSubCECFD
1512ED16SubCED16
1513ED28SubCED28
1514ED53SubCED53
1515ED6ASubCED6A
1516ED8ESubCED8E
1517EDA6SubCEDA6
1518EDAFSubCEDAF
1519EDBBSubCEDBB
1520EDD4SubCEDD4
1521EDD7SubCEDD7
1522EDDCSubCEDDC
1523EDE1SubCEDE1
1524EDE4SubCEDE4
1525EE11SubCEE11
1526EE1BSubCEE1B
1527EE21SubCEE21
1528EE22SubCEE22
1529EE38SubCEE38
1530EE40SubCEE40
1531EE53SubCEE53
1532EE65SubCEE65
1533EE90SubCEE90
1534EEA7SubCEEA7
1535EECBSubCEECB
1536EEE3SubCEEE3
1537EEECSubCEEEC
1538FBD5SubCFBD5
1539FBE1SubCFBE1
1540FBEESubCFBEE
1541FBF8SubCFBF8
1542FC26SubCFC26
1543FC2BSubCFC2B
1544FC4BSubCFC4B
1545FC58SubCFC58
1546FC61SubCFC61
1547FF00SubCFF00
1548FF0CSubCFF0C
1549FF3ESubCFF3E
1550FF4BSubCFF4B
1551FF61SubCFF61
1552FF6CSubCFF6C
1553FF6ESubCFF6E
1554FF7DSubCFF7D
1555FF8CSubCFF8C