Promotes Lunar Pool
This commit is contained in:
1 parent
837007843d
commit
62866563ba
53 files changed
+115746
-4100
No files matched your search
@@ -1,6 +1,27 @@
|
||||
# Golf (JU) — Skeleton Project
|
||||
# Golf (JU)
|
||||
|
||||
ROM: `_wip/Golf (JU)/Golf (JU).nes` (24,592 bytes, iNES). Status: **SKELETON — not yet disassembled.** The entire 16 KB PRG bank is a single unclassified block; `copilot/prg.s` is the default-project skeleton (`default_project.tar.gz`) that reproduces it as one `.incbin`. The skeleton build is **byte-identical** at the PRG level.
|
||||
ROM: `_wip/Golf (JU)/Golf (JU).nes` (24,592 bytes, iNES). Status: **Pass 1 complete, Pass 2 substantial, Pass 3 started — PAUSED.** PRG build is **byte-identical**.
|
||||
|
||||
**Pass 1 (code/data split) — complete.** Reachable code traced from RESET ($C000) and NMI ($C0A6); all 4,063 reachable instructions are explicit source. NMI callbacks ($C5A0=`GameplayInputNmiCallback`, $C6C8, $CFAA, $DAA2; continuations $CFC3/$D03E/$D08A) and controller/attract paths ($DAA2, $C0C7=`InitializeRuntimeState`) are in source. All remaining `.incbin` spans have zero code entry points and are confirmed data.
|
||||
|
||||
**Pass 2 (label naming) — substantial.** Startup/NMI/PPU/controller/course-decode routines named (batches 1–3 per `PASS2_PLAN.md`). All 112 subroutine-entry `Label_` labels renamed to `SubC<addr>` (108) or semantic names (4: `WaitForFramePreservingY`, `SpriteOffsetForController`, `SetPpuScrollAndMask`, `MultiplyABy32`); 349 internal branch-target `Label_` labels remain intentionally.
|
||||
|
||||
**Pass 3 (data tables) — started, PAUSED.** Conversions completed:
|
||||
- Interrupt vectors at $FFFA–$FFFF → `.word NmiHandler`/`Reset`/`IrqLoop`
|
||||
- Course-stream split pointer table at $E6C3/$E6D5 (18 entries) → `CourseLayoutPointerLo`/`CourseLayoutPointerHi`
|
||||
- Bit-mask table $D6F4–$D6FB → `BitMaskTable` ($80 40 20 10 08 04 02 01)
|
||||
- PPU write table $FD0A–$FD11 → `PpuTableFd0a`
|
||||
- Score adjust table $D988–$D9B0 → `D988ScoreAdjustTable`
|
||||
- PPU value table $FF85–$FF9F → `FF85PpuValueTable`
|
||||
- Sprite/object tables (`sprite_object_tables.inc`) and gameplay PPU palette ($E1B8–$E1D7) already emitted as structured source.
|
||||
|
||||
**Paused:** Remaining `.incbin` spans are largely Iwata's compressed level data ($E6E7–$F905, ~4.6 KB) and opaque lookup tables ($C786–$C84C, $CD85–$CE63, $D304–$D3B6, $D563–$D659, $D823–$D8EC, $DC59–$DD77, $E1D8–$E281, $E3DE–$E3FB, $E588–$E6AF, $FBBF–$FC23). Without runtime tracing / a code/data log to confirm consumers and structure, converting these risks guessy rewrites. Per repo convention, they remain as `.incbin` with address comments.
|
||||
|
||||
Remaining `.incbin` spans ($C71E–$C720, $C786–$C84C, $CD85–$CE63, $D304–$D3B6, $D563–$D659, $D823–$D8EC, $DC59–$DD77, $E1D8–$E281, $E3DE–$E3FB, $E588–$E6AF, $E6E7–$F905, $FBBF–$FC23) remain as data per the no-guessy-rewrites convention; convert only when a consumer is identified.
|
||||
|
||||
**Next Pass 3 candidates:** when runtime tracing tools are available, remaining structured tables (course-stream data, opaque lookup spans) can be converted where structure is confirmed.
|
||||
|
||||
**Promotion:** not yet — `_wip` tier (PRG-only compare). Promotion requires full-ROM build (`header.s`/`chr.s` + vectors) and root inventory entry.
|
||||
|
||||
|
||||
## ROM Facts
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
# Pass 1 compressed and packed-data parser audit
|
||||
|
||||
## Summary
|
||||
|
||||
Four distinct packed-data consumers are confirmed. Only one is a general
|
||||
run-length decoder. The others are pointer-selected sprite/object lists or
|
||||
cell-code interpreters.
|
||||
|
||||
## 1. `$CBEA`: pointer-selected OAM sprite-list parser
|
||||
|
||||
Inputs:
|
||||
|
||||
- `$15` selects a sprite-list variant.
|
||||
- `$16 == 4` selects the pointer tables at `$CC3E/$CC44`; other values select
|
||||
`$CC24/$CC31`.
|
||||
- `$33` is added to the generated OAM X coordinate.
|
||||
- X is the destination OAM-shadow offset.
|
||||
|
||||
Format:
|
||||
|
||||
- One source byte per sprite.
|
||||
- `$FF` terminates the list early.
|
||||
- A hard limit of `$15` (21) source entries prevents runaway parsing.
|
||||
- The source byte is both the CHR tile index and the index into coordinate
|
||||
tables `$CC4A` and `$CC5F`.
|
||||
|
||||
Output record at `$0200,X`:
|
||||
|
||||
- byte 0: `$88 + table_CC5F[tile]` (Y)
|
||||
- byte 1: source byte (tile)
|
||||
- byte 2: `$00` (attributes)
|
||||
- byte 3: `$33 + table_CC4A[tile]` (X)
|
||||
|
||||
This is a compact sprite-layout parser, not RLE compression.
|
||||
|
||||
## 2. `$DD78-$DE39`: primary course-map RLE decoder
|
||||
|
||||
Pointer selection:
|
||||
|
||||
- `$2B` is the zero-based hole index.
|
||||
- `$E6C3,Y` and `$E6D5,Y` form the source pointer in `$04/$05`.
|
||||
- Destination begins at `$0300` through `$06/$07`.
|
||||
|
||||
Header:
|
||||
|
||||
- First three source bytes are copied to `$19-$1B`.
|
||||
- Source pointer then advances by three bytes.
|
||||
|
||||
Commands:
|
||||
|
||||
- `$FF`: end primary stream.
|
||||
- `$00-$0F`: emit header byte 0, `(low_nibble + 1)` times.
|
||||
- `$10-$1F`: emit header byte 1, `(low_nibble + 1)` times.
|
||||
- `$20-$2F`: emit header byte 2, `(low_nibble + 1)` times.
|
||||
- `$A0-$AF`: emit `(low_nibble + 1)` values cycling through `$AB-$AD` using
|
||||
state byte `$8D`.
|
||||
- `$30-$9F` and `$B0-$FE`: emit the command byte literally.
|
||||
|
||||
Output is divided into 16-byte units. After each unit, `$04/$05` advances by
|
||||
`$1C` consumed source bytes and `$06/$07` advances by `$10` destination bytes.
|
||||
|
||||
### Hole 2 / Hole 3 length correction
|
||||
|
||||
The decoder does not enforce a 480-byte limit. RAM `$0300-$04FF` is cleared
|
||||
before decoding, providing a 512-byte destination area. Therefore the measured
|
||||
outputs are valid:
|
||||
|
||||
- Hole 2: 482 bytes
|
||||
- Hole 3: 483 bytes
|
||||
- Other currently measured streams: 480 bytes
|
||||
|
||||
The earlier 480-byte expectation came from the common case of 30 16-byte
|
||||
units, not from a decoder bound. Both longer streams remain within the 512-byte
|
||||
course buffer and do not indicate malformed pointers or an incorrect opcode
|
||||
model.
|
||||
|
||||
## 3. `$DE3B-$DE5D`: optional auxiliary block parser
|
||||
|
||||
After the primary `$FF`, the decoder advances the source pointer past the
|
||||
primary stream and examines the next byte.
|
||||
|
||||
- `$55` is a sentinel meaning the optional block is absent.
|
||||
- Otherwise, records are copied in four-byte groups from the source into
|
||||
`$0104+`.
|
||||
- X begins at `$04` and increases by four per record.
|
||||
- After each group, `$D4F2` advances the corresponding destination/object
|
||||
bookkeeping.
|
||||
- Parsing ends when X reaches `$44`, allowing at most 16 four-byte groups.
|
||||
- `$04/$05` is then advanced by the number of consumed source bytes.
|
||||
|
||||
This is a bounded fixed-record block, not a terminator-scanned RLE stream.
|
||||
|
||||
## 4. `$DE5E-$DF52`: per-hole OAM/object package parser
|
||||
|
||||
The parser begins at the source position following the optional auxiliary
|
||||
block.
|
||||
|
||||
### Fixed setup record
|
||||
|
||||
The first bytes initialize OAM-shadow entries beginning at `$0298` and setup
|
||||
fields `$65-$66`, `$57`, `$1A-$1B`. Tables at `$E37D-$E3DE` expand one compact
|
||||
source selector into multiple sprite records.
|
||||
|
||||
### Variable object list
|
||||
|
||||
At `$DF03`, each object record begins with:
|
||||
|
||||
- byte 0: object/shape selector, or `$FF` terminator
|
||||
- byte 1: X/base-position adjustment
|
||||
- byte 2: Y/base-position adjustment
|
||||
|
||||
The selector indexes span tables at `$E283/$E284`, then source tables at
|
||||
`$E2EB`, `$E2A2`, and `$E334`. One compact three-byte object record expands to
|
||||
one or more four-byte OAM entries.
|
||||
|
||||
- `$FF` terminates the variable object list.
|
||||
- Values at or above table position `$2B` select OAM attribute `$42`; lower
|
||||
positions select `$02` through the intentional overlapping-instruction idiom
|
||||
at `$DF3A/$DF3B`.
|
||||
- The parser resumes at the next source record using `$1C` as the consumed-byte
|
||||
offset.
|
||||
|
||||
This is a table-expanded object/sprite list, not a byte-run compressor.
|
||||
|
||||
## 5. `$D72D-$D7FF`: course-cell code interpreter
|
||||
|
||||
This routine reads one byte through `($19),Y` from the generated course map. It
|
||||
is not a stream decompressor. It interprets cell codes for collision or terrain
|
||||
response:
|
||||
|
||||
- `$EF` and `$FD` are special sentinels.
|
||||
- Other values index the property table at `$D80D`.
|
||||
- Property values `$10`, `$20`, `$40`, and `$FF` select distinct collision or
|
||||
response paths.
|
||||
- Fine X/Y bits are converted into a bit mask and tested against the selected
|
||||
property byte.
|
||||
|
||||
The `$FF` comparison at `$D74D` belongs to this cell-property dispatch and must
|
||||
not be mistaken for a compressed-stream terminator.
|
||||
|
||||
## Parser-boundary conclusions
|
||||
|
||||
- `$CBEA` sprite layouts are bounded by `$FF` or 21 entries.
|
||||
- Primary hole streams are bounded by their first `$FF` and decode into a
|
||||
512-byte RAM area, not a fixed 480-byte area.
|
||||
- Optional auxiliary blocks are bounded by `$55` or 16 four-byte groups.
|
||||
- Per-hole object lists are bounded by a secondary `$FF` and expand through
|
||||
fixed lookup tables.
|
||||
- `$D72D` is a map-cell interpreter, not another compressed-data parser.
|
||||
|
||||
No remaining `$FF` comparison in reachable code has been found that represents
|
||||
an unclassified compressed-stream parser.
|
||||
@@ -1,5 +1,5 @@
|
||||
all: reconstructed_prg.bin verify
|
||||
prg.o: prg.s symbols.inc prg.bin
|
||||
prg.o: prg.s symbols.inc locals.inc course_streams.inc sprite_object_tables.inc prg.bin
|
||||
ca65 -g -o $@ prg.s
|
||||
reconstructed_prg.bin: prg.o linker.cfg
|
||||
ld65 -C linker.cfg -m reconstructed.map -Ln reconstructed.lbl -o $@ prg.o
|
||||
|
||||
File renamed without changes.
@@ -0,0 +1,109 @@
|
||||
# Pass 1 NMI callback audit
|
||||
|
||||
## Dispatcher
|
||||
|
||||
The hardware NMI vector enters `$C0A6`. The fixed prologue saves A/X/Y, performs
|
||||
OAM DMA from page `$02`, then executes `JMP ($0002)`. Every installed callback
|
||||
must therefore finish through the common epilogue at `$C0B8` or deliberately
|
||||
reset/restart the program.
|
||||
|
||||
`$C888` is the generic installer:
|
||||
|
||||
- Y -> `$0002` (callback low byte)
|
||||
- X -> `$0003` (callback high byte)
|
||||
- PPU NMI remains enabled through the shadow value at `$00`
|
||||
|
||||
## Confirmed callback installations
|
||||
|
||||
### `$C6C8` installed at `$C0EC`
|
||||
|
||||
Caller loads Y=`$C8`, X=`$C6`, then calls `$C888`.
|
||||
|
||||
Role: early/main gameplay display callback. It updates OAM entries at
|
||||
`$0214-$0217` and `$0284-$0287`, advances animation counters `$8E/$8F`, and
|
||||
terminates with `JMP $C0B8`.
|
||||
|
||||
### `$CFAA` installed at `$CF5C`
|
||||
|
||||
Caller loads Y=`$AA`, X=`$CF`, then calls `$C888`.
|
||||
|
||||
Role: gameplay sequencing callback. It decrements/increments `$32`, updates OAM
|
||||
coordinates, and changes the callback vector to one of the following mid-routine
|
||||
continuations as state thresholds are crossed:
|
||||
|
||||
- `$CFC3`
|
||||
- `$D03E`
|
||||
- `$D08A`
|
||||
|
||||
The routine ultimately reaches the gameplay display tail at `$C6C8`, which exits
|
||||
through `$C0B8`.
|
||||
|
||||
### `$DAA2` installed at `$DA27`
|
||||
|
||||
Caller loads Y=`$A2`, X=`$DA`, then calls `$C888`.
|
||||
|
||||
Role: title/menu/attract controller callback. It polls controller port `$4016`,
|
||||
updates `$09/$0A/$0D`, writes one OAM cursor entry at `$0200-$0203`, and either:
|
||||
|
||||
- jumps to `$C0B8` for the normal NMI epilogue,
|
||||
- restarts title/game initialization through `$DA2F/$DA4C`, or
|
||||
- restarts the initial state through `$C0C7`.
|
||||
|
||||
Important correction: `$DB0D` (`78 88 98`) is used as OAM Y-position data for
|
||||
`$0200`, not as an NMI callback-low-byte table. Consequently `$BA78/$BA88/$BA98`
|
||||
are not callbacks.
|
||||
|
||||
### `$C5A0` installed at `$FC8E`
|
||||
|
||||
Caller loads Y=`$A0`, X=`$C5`, then calls `$C888`.
|
||||
|
||||
Role: active gameplay controller/animation callback. It serially reads `$4016`,
|
||||
updates input-derived state `$2E/$30`, angle/selection fields `$17/$44/$45`, OAM
|
||||
entries, and then enters `$C6C8` before returning through `$C0B8`.
|
||||
|
||||
## Direct callback-vector transitions
|
||||
|
||||
The following direct writes to `$02/$03` are confirmed executable and are part
|
||||
of the `$CFAA-$D121` callback state machine:
|
||||
|
||||
- `$CFB6/$CFBA`: install `$CFC3`
|
||||
- `$CFDA/$CFDE`: install `$D03E`
|
||||
- `$D006/$D00A`: install `$D03E`
|
||||
- `$D02B/$D02F`: install `$D08A`
|
||||
- `$D05E/$D062`: install `$D08A`
|
||||
- `$D07A/$D07E`: install `$D08A`
|
||||
|
||||
These are mid-routine continuation entries, not independent top-level systems.
|
||||
They share state in `$17/$1D/$1E/$1F/$32/$34/$35` and converge on `$C6C8`.
|
||||
|
||||
## Confirmed callback set
|
||||
|
||||
Top-level callback installations:
|
||||
|
||||
- `$C5A0`
|
||||
- `$C6C8`
|
||||
- `$CFAA`
|
||||
- `$DAA2`
|
||||
|
||||
Dynamic continuation callbacks:
|
||||
|
||||
- `$CFC3`
|
||||
- `$D03E`
|
||||
- `$D08A`
|
||||
|
||||
Common normal exit:
|
||||
|
||||
- `$C0B8`
|
||||
|
||||
No other verified executable write to `$0002/$0003` has been found. Apparent
|
||||
writes inside compressed hole packages are data and are excluded.
|
||||
|
||||
## Source conversion
|
||||
|
||||
The previously retained callback spans are now emitted as annotated instructions:
|
||||
|
||||
- `$C5A0-$C71D`: gameplay input/display callback chain
|
||||
- `$CFAA-$D123`: gameplay sequence callback and dynamic continuation entries
|
||||
|
||||
The three bytes at `$C71E-$C720` remain data because execution at `$C71B` jumps
|
||||
directly to the NMI epilogue and cannot fall through into them.
|
||||
@@ -0,0 +1,44 @@
|
||||
# Pass 1 overlap-entry audit
|
||||
|
||||
The 19 held-back decoded entries reduce to nine intentional overlapping-instruction
|
||||
idioms plus one non-entry byte (`$D9DA`). These are valid 6502 size/speed tricks,
|
||||
not ambiguous code/data boundaries.
|
||||
|
||||
## General idiom
|
||||
|
||||
`BIT absolute` consumes the following two bytes without changing A. Entering one
|
||||
byte later interprets the low/high operand bytes as a useful instruction stream.
|
||||
This permits conditional constant selection without a branch around the second
|
||||
load. Because ca65 cannot emit two overlapping instruction streams linearly,
|
||||
Pass 1 preserves each byte sequence in a localized `.incbin` span and documents
|
||||
all valid entry points.
|
||||
|
||||
## Resolutions
|
||||
|
||||
- `$C198`: `BIT $00A9`; alternate entry `$C199`: `LDA #$00` from branch `$C194`.
|
||||
Both entries valid. `$C198` is fall-through constant-selection path.
|
||||
- `$D424`: `BIT $40A9`; alternate entry `$D425`: `LDA #$40` from `$D49B`.
|
||||
Both entries valid.
|
||||
- `$D9D8`: `BIT $0838`; alternate entry `$D9D9`: `SEC` from `$FE28`.
|
||||
`$D9DA` (`PHP`) has no caller and is only the third byte of the BIT operand;
|
||||
it is not an independent entry point.
|
||||
- `$D9F9`: `BIT $FFA9`; alternate entry `$D9FA`: `LDA #$FF` from `$D9F4`.
|
||||
Both entries valid.
|
||||
- `$DF3A`: `BIT $02A9`; alternate entry `$DF3B`: `LDA #$02` from `$DF36`.
|
||||
Both entries valid.
|
||||
- `$FB24`: `BIT $B8A9`; alternate entry `$FB25`: `LDA #$B8` from `$FAE4/$FBAB`.
|
||||
Both entries valid and implement the already traced terrain fallback selection.
|
||||
- `$FB83`: `BIT $FFA9`; alternate entry `$FB84`: `LDA #$FF` from `$FB5C`.
|
||||
Both entries valid.
|
||||
- `$FC6B`: `BIT $18`; alternate entry `$FC6C`: `CLC` from `$FC68`.
|
||||
Both entries valid. The BIT path preserves carry set by the preceding `SEC`;
|
||||
the alternate path explicitly clears carry before return.
|
||||
- `$FF00`: `BIT $00A9`; alternate entry `$FF01`: `LDA #$00` from `$FEFC`.
|
||||
Both entries valid.
|
||||
|
||||
## Pass 1 source treatment
|
||||
|
||||
All nine physical byte sequences remain localized `.incbin` spans in `prg.s`.
|
||||
Named entry constants may point into these spans, but the overlapping bytes must
|
||||
not be emitted twice. Pass 2 may replace each span with explicit `.byte` values
|
||||
and entry aliases while retaining the dual interpretation in comments.
|
||||
@@ -0,0 +1,59 @@
|
||||
# Golf (JU) Pass 1 status
|
||||
|
||||
## Confirmed
|
||||
|
||||
- 16 KiB NROM PRG, CPU window $C000-$FFFF mirrored at $8000-$BFFF.
|
||||
- Vectors: NMI $C0A6, RESET $C000, IRQ $C0C4.
|
||||
- Dynamic NMI vector in RAM $0002/$0003, installed through $C888.
|
||||
- Direct recursive trace currently closes over 136 direct JSR/JMP targets.
|
||||
- 4,063 instructions / 8,441 PRG bytes reached by the current direct trace.
|
||||
- $DB0D (`78 88 98`) is an OAM cursor Y-position table used by $DAA2; it is not an NMI callback table.
|
||||
- $E6C3/$E6D5 is the split 18-entry primary course-stream pointer table.
|
||||
- Primary course streams and first $FF terminators are bounded in
|
||||
course_streams.inc.
|
||||
- $FA35-$FC23 contains course-grid normalization, connectivity-to-CHR lookup,
|
||||
and associated tables.
|
||||
- $FC98 uploads an 84-byte 12x7 course panel from $009C-$00EF to PPU $2222.
|
||||
|
||||
## Still required before declaring Pass 1 complete
|
||||
|
||||
1. **NMI callback set audited — DONE.** All four top-level callbacks ($C5A0=`GameplayInputNmiCallback`, $C6C8, $CFAA, $DAA2) and the three dynamic continuations ($CFC3, $D03E, $D08A) are emitted as annotated instruction source; none sit inside an `.incbin` span. See `NMI_CALLBACK_AUDIT.md`.
|
||||
2. **Compressed/packed-data parsers audited; parser-adjacent tables converted to source — DONE.** Primary course-stream split pointer table at $E6C3/$E6D5 (18 entries) is explicit `.byte` source (`CourseLayoutPointerLo`/`CourseLayoutPointerHi`, resolving to `course_streams.inc` stream labels). Bit-mask table $D6F4–$D6FB (`BitMaskTable`) and PPU write table $FD0A–$FD11 (`PpuTableFd0a`) converted to explicit `.byte` source; both confirmed consumed via indexed loads in `SubCD6FC` ($D6D3/$D7EF) and at $FCFD respectively. Parser formats documented in `COMPRESSED_PARSER_AUDIT.md`.
|
||||
3. **Controller-input and attract-mode return-to-title paths audited — DONE.** Title/menu/attract controller callback $DAA2 and title init $C0C7 (`InitializeRuntimeState`) are emitted as instruction source; return-to-title paths flow through $DA2F/$DA4C/$C0C7 per `NMI_CALLBACK_AUDIT.md`.
|
||||
4. **Classify all remaining gaps as code, structured data, or localized incbin — DONE.** Every `.incbin` span has zero code entry points (no JSR/JMP/branch target falls inside) and is confirmed data; the only indirect jump is the dynamic NMI vector at $C0B5.
|
||||
5. Emit remaining documented instruction source with CPU address and byte comments — DONE (all 4,063 reachable instructions are explicit source).
|
||||
6. Obtain/build ca65 and verify reconstructed_prg.bin is byte-identical — DONE.
|
||||
|
||||
**Pass 1 complete.**
|
||||
|
||||
## Overlap-entry audit
|
||||
|
||||
The 19 held-back decodes are resolved. They represent nine deliberate overlapping
|
||||
6502 instruction idioms; `$D9DA` is not independently reachable. See
|
||||
`OVERLAP_AUDIT.md`. They remain localized `.incbin` spans because a linear ca65
|
||||
instruction stream cannot encode both interpretations simultaneously.
|
||||
|
||||
## Sprite and object table audit
|
||||
|
||||
The sprite-layout tables at `$CC15+` and object expansion tables at
|
||||
`$E283-$E3DD` have been structurally classified. See
|
||||
`SPRITE_OBJECT_TABLE_AUDIT.md`. These ranges are confirmed data and must be
|
||||
excluded from future executable tracing.
|
||||
|
||||
## Audited data emitted as ca65 source
|
||||
|
||||
The following formerly retained data spans are now explicit `.byte` source with
|
||||
address and expected-byte comments:
|
||||
|
||||
- `$CC15-$CD84`: sprite layout remap, pointer tables, coordinate tables, and lists
|
||||
- `$E1B8-$E1D7`: gameplay PPU palette
|
||||
- `$E282-$E3DD`: variable and fixed object expansion tables
|
||||
|
||||
Only the unaudited tails of the original enclosing spans remain as `.incbin`.
|
||||
|
||||
## NES hardware symbols implemented
|
||||
|
||||
All decoded instruction operands now use the reusable names from `symbols.inc`
|
||||
for PPU, OAM DMA, APU, and controller registers. Expected-byte comments retain
|
||||
the original numeric encoding. Structured `.byte` data and `.incbin` offsets are
|
||||
unchanged.
|
||||
@@ -0,0 +1,59 @@
|
||||
# Golf (JU) Pass 2 naming plan and progress
|
||||
|
||||
Pass 1 baseline: ca65/ld65 build verified byte-identical.
|
||||
|
||||
## Batch 1: startup, interrupt, PPU helpers, title/menu backbone
|
||||
|
||||
- Rename high-confidence startup and interrupt-local labels.
|
||||
- Name NMI vector fields and PPU shadow values in `locals.inc`.
|
||||
- Name the title/menu selection and input-latch fields where usage is proven.
|
||||
- Name the menu cursor Y-position table at `$DB0D`.
|
||||
- Keep uncertain gameplay temporaries numerical.
|
||||
|
||||
## Later batches
|
||||
|
||||
1. Controller polling and shot-selection state.
|
||||
2. Gameplay NMI sequence fields and callbacks.
|
||||
3. Course decompressor fields and package tables.
|
||||
4. Golfer sprite-layout routines and states.
|
||||
5. Course object expansion and collision routines.
|
||||
6. Terrain-grid generator and course overview.
|
||||
7. Audio engine and command tables.
|
||||
|
||||
Every batch must complete `make clean && make` with `BYTE-IDENTICAL` before the
|
||||
next naming batch is accepted.
|
||||
|
||||
## Batch 2 completed: controller and shot-selection callback
|
||||
|
||||
Named the controller serial scan, repeat latch, club-selection index, aim index,
|
||||
aim direction, animation counters, major callback phases, and OAM-update loops
|
||||
within `$C5A0-$C71D`.
|
||||
|
||||
## Batch 3 completed: gameplay sequence NMI chain
|
||||
|
||||
Named the sequence position, three bounds, phase and completion fields, dynamic
|
||||
NMI continuations, position/frame selection loops, and threshold tables in
|
||||
`$CF87-$D13D`.
|
||||
|
||||
### Batch 3 correction
|
||||
|
||||
The branch at `$D09C` must target the trampoline at `$D0A6`, not the frame
|
||||
selector at `$D0A9`. The target is now `JumpToSelectSequenceFrame`, preserving
|
||||
the original displacement `$08` and byte sequence `90 08`.
|
||||
|
||||
## Subroutine-entry Label_ cleanup (Pass 2 residue)
|
||||
|
||||
All 112 `Label_` definitions that are JSR/JMP subroutine entry points have been
|
||||
renamed:
|
||||
|
||||
- 4 with established semantics: `WaitForFramePreservingY` ($C881),
|
||||
`SpriteOffsetForController` ($C894), `SetPpuScrollAndMask` ($C89D),
|
||||
`MultiplyABy32` ($C8BB).
|
||||
- 108 as address-based `SubC<addr>` names where behaviour is not yet
|
||||
established (e.g. `SubC84D`, `SubC89A`, `SubCE64`).
|
||||
|
||||
The remaining 349 `Label_` definitions are internal branch targets within
|
||||
routines; per repo convention these do not need semantic names for the call
|
||||
graph to be readable and are intentionally left as `Label_`.
|
||||
|
||||
Build verified `BYTE-IDENTICAL` after the rename.
|
||||
@@ -0,0 +1,201 @@
|
||||
# Pass 1 sprite and object table audit
|
||||
|
||||
## Scope
|
||||
|
||||
This audit covers tables consumed by `ParseSpriteLayout` at `$CBEA` and the
|
||||
per-hole object expansion path at `$DE5E-$DF52`. All addresses are CPU addresses
|
||||
in the fixed `$C000-$FFFF` PRG view.
|
||||
|
||||
## A. Sprite-layout subsystem at `$CC15-$CCA6`
|
||||
|
||||
### `$CC15-$CC23`: sprite-layout selection map
|
||||
|
||||
15 bytes. The caller indexes this table with a selection/state value and obtains
|
||||
one of five logical layout groups (`$00-$04`). This is an index-remap table, not
|
||||
sprite data.
|
||||
|
||||
### `$CC24-$CC30`: standard layout pointer-low table
|
||||
|
||||
13 bytes:
|
||||
|
||||
`74 89 9E B3 C8 DD C8 B3 F2 07 1C 31 46`
|
||||
|
||||
These are low bytes of layout-list addresses. The matching high-byte table at
|
||||
`$CC31-$CC3D` is predominantly `$CC`, with `$CD` used when a list crosses into
|
||||
the next page.
|
||||
|
||||
Resolved standard pointers:
|
||||
|
||||
- `$CC74`
|
||||
- `$CC89`
|
||||
- `$CC9E`
|
||||
- `$CCB3`
|
||||
- `$CCC8`
|
||||
- `$CCDD`
|
||||
- `$CCC8`
|
||||
- `$CCB3`
|
||||
- `$CCF2`
|
||||
- `$CD07`
|
||||
- `$CD1C`
|
||||
- `$CD31`
|
||||
- `$CD46`
|
||||
|
||||
Repeated pointers are intentional mirroring of animation/layout states.
|
||||
|
||||
### `$CC31-$CC3D`: standard layout pointer-high table
|
||||
|
||||
13 bytes paired one-for-one with `$CC24-$CC30`.
|
||||
|
||||
### `$CC3E-$CC43`: alternate layout pointer-low table
|
||||
|
||||
6 bytes:
|
||||
|
||||
`5B 70 9E 70 5B 74`
|
||||
|
||||
### `$CC44-$CC49`: alternate layout pointer-high table
|
||||
|
||||
6 bytes paired with `$CC3E-$CC43`.
|
||||
|
||||
Resolved alternate pointers:
|
||||
|
||||
- `$CD5B`
|
||||
- `$CD70`
|
||||
- `$CC9E`
|
||||
- `$CD70`
|
||||
- `$CD5B`
|
||||
- `$CC74`
|
||||
|
||||
This table shares existing lists instead of duplicating them.
|
||||
|
||||
### `$CC4A-$CC5E`: sprite X-offset table
|
||||
|
||||
21 signed/unsigned screen offsets indexed by the tile/list byte. Values repeat
|
||||
`$00,$08,$10` patterns, matching three-column sprite construction.
|
||||
|
||||
### `$CC5F-$CC73`: sprite Y-offset table
|
||||
|
||||
21 offsets indexed by the same tile/list byte. Values progress by eight pixels
|
||||
from `$00` to `$30`, producing row-aligned sprite positions.
|
||||
|
||||
### `$CC74-$CD5A`: terminated sprite-index lists
|
||||
|
||||
The pointer tables select variable-length byte lists in this range. Each byte is
|
||||
both:
|
||||
|
||||
- the OAM tile value, and
|
||||
- an index into `$CC4A` and `$CC5F` for X/Y placement.
|
||||
|
||||
Each list terminates with `$FF`; the parser also has a hard 21-entry limit.
|
||||
The lists share suffixes and are deliberately referenced more than once.
|
||||
|
||||
### `$CD5B-$CD84` and later alternate lists
|
||||
|
||||
The alternate pointer table reaches `$CD5B` and `$CD70`. These are additional
|
||||
terminated tile-index lists using the same coordinate tables and OAM expansion
|
||||
format. Bytes beyond the last referenced terminator require separate consumer
|
||||
analysis before being named as part of this family.
|
||||
|
||||
## B. Hole-object expansion tables at `$E283-$E3DE`
|
||||
|
||||
### `$E283-$E2A1`: object span-end table
|
||||
|
||||
31 monotonically increasing values:
|
||||
|
||||
`03 07 09 0B 0E 10 12 14 16 19 1B 1E 20 23 25 27 29 2B 2E 31 34 38 3A 3C 3E 40 43 45 47 49`
|
||||
|
||||
The parser loads the selected value into `$1D` as the exclusive end index for a
|
||||
shape. The corresponding start index comes from the preceding entry at
|
||||
`$E282,Y`, making `$E282/$E283` a compact prefix-boundary pair.
|
||||
|
||||
### `$E2A2-$E2EA`: object CHR-tile sequence table
|
||||
|
||||
73 bytes. For each expanded OAM sprite, the parser reads one tile value from
|
||||
this table. Values are concentrated in `$E0-$F2`, matching the object/sprite CHR
|
||||
region.
|
||||
|
||||
### `$E2EB-$E333`: object X-offset table
|
||||
|
||||
73 bytes paired with `$E2A2-$E2EA`. Values are mostly `$00`, `$08`, and `$10`,
|
||||
with a few compact adjustments. The parser adds each value to the record's base
|
||||
X byte.
|
||||
|
||||
### `$E334-$E37C`: object Y-offset table
|
||||
|
||||
73 bytes paired with the tile and X-offset tables. The parser adds each value
|
||||
to the record's base Y byte.
|
||||
|
||||
Together these three 73-byte arrays form a structure-of-arrays representation:
|
||||
|
||||
- tile[index]
|
||||
- x_offset[index]
|
||||
- y_offset[index]
|
||||
|
||||
The span-end table maps an object selector to a contiguous slice of these
|
||||
parallel arrays.
|
||||
|
||||
### `$E37D-$E383`: fixed setup span boundaries
|
||||
|
||||
Seven bytes:
|
||||
|
||||
`00 03 06 0B 10 17 1E`
|
||||
|
||||
The fixed setup parser uses a selector-derived range from the first two tables
|
||||
around `$E37D/$E37E`. These values are prefix boundaries for larger fixed
|
||||
sprite groups.
|
||||
|
||||
### `$E384-$E3A1`: fixed setup X-offset table
|
||||
|
||||
30 bytes. Values are chiefly `$00`, `$04`, and `$08`, defining compact sprite
|
||||
clusters around a base position.
|
||||
|
||||
### `$E3A2-$E3BF`: fixed setup tile table
|
||||
|
||||
30 bytes. Values are concentrated in `$F5-$FC`, identifying a separate CHR
|
||||
family from the variable object table.
|
||||
|
||||
### `$E3C0-$E3DD`: fixed setup attribute table
|
||||
|
||||
30 bytes. Values are primarily `$02` and `$42`, with `$82` and `$C2` variants.
|
||||
The high bits encode OAM flipping while the low bits select palette 2.
|
||||
|
||||
The fixed setup arrays are parallel and are consumed together when constructing
|
||||
OAM entries beginning near `$0298`.
|
||||
|
||||
### `$E3DE+`: following data
|
||||
|
||||
`$E3DE` begins another sequence (`08 08 00 ...`) not indexed by either audited
|
||||
object expansion loop. It remains a separate table until its consumer is
|
||||
identified.
|
||||
|
||||
## C. Per-hole object record format
|
||||
|
||||
After the fixed setup portion, `ParseHoleObjectList` consumes three-byte records:
|
||||
|
||||
- byte 0: object selector, or `$FF` terminator
|
||||
- byte 1: base X adjustment
|
||||
- byte 2: base Y adjustment
|
||||
|
||||
Selector `n` obtains a slice:
|
||||
|
||||
- start = span boundary `n`
|
||||
- end = span boundary `n + 1`
|
||||
|
||||
Each slice element expands to one OAM entry using the tile/X/Y parallel arrays.
|
||||
Selectors whose expanded table index reaches `$2B` use OAM attribute `$42`;
|
||||
earlier entries use `$02`.
|
||||
|
||||
## D. Classification conclusions
|
||||
|
||||
Confirmed structured data:
|
||||
|
||||
- `$CC15-$CC23`: layout-group remap
|
||||
- `$CC24-$CC49`: split pointer tables
|
||||
- `$CC4A-$CC73`: paired coordinate tables
|
||||
- `$CC74` onward: `$FF`-terminated sprite-index lists
|
||||
- `$E283-$E2A1`: object span boundaries
|
||||
- `$E2A2-$E37C`: three parallel 73-byte object expansion arrays
|
||||
- `$E37D-$E3DD`: fixed setup boundaries and three parallel 30-byte arrays
|
||||
|
||||
No executable entry point exists inside these audited table ranges. Any legal
|
||||
6502 opcode sequence found inside them is data and must be excluded from recursive
|
||||
code tracing.
|
||||
Binary file not shown.
@@ -0,0 +1,38 @@
|
||||
; Golf (JU) - Pass 1 compressed primary course-stream bounds.
|
||||
; End labels are exclusive and include the primary $FF terminator.
|
||||
CourseLayoutStream01 = $E6E7
|
||||
CourseLayoutStream01_End = $E7A5
|
||||
CourseLayoutStream02 = $EAAF
|
||||
CourseLayoutStream02_End = $EB7B
|
||||
CourseLayoutStream03 = $F2E8
|
||||
CourseLayoutStream03_End = $F3A5
|
||||
CourseLayoutStream04 = $F4BC
|
||||
CourseLayoutStream04_End = $F5B5
|
||||
CourseLayoutStream05 = $E991
|
||||
CourseLayoutStream05_End = $EA7B
|
||||
CourseLayoutStream06 = $EEF3
|
||||
CourseLayoutStream06_End = $EFAF
|
||||
CourseLayoutStream07 = $F0C5
|
||||
CourseLayoutStream07_End = $F1B9
|
||||
CourseLayoutStream08 = $F7BC
|
||||
CourseLayoutStream08_End = $F8D5
|
||||
CourseLayoutStream09 = $F6BA
|
||||
CourseLayoutStream09_End = $F78E
|
||||
CourseLayoutStream10 = $EFE3
|
||||
CourseLayoutStream10_End = $F0B0
|
||||
CourseLayoutStream11 = $EDEC
|
||||
CourseLayoutStream11_End = $EECB
|
||||
CourseLayoutStream12 = $ED09
|
||||
CourseLayoutStream12_End = $EDDA
|
||||
CourseLayoutStream13 = $E7BA
|
||||
CourseLayoutStream13_End = $E89E
|
||||
CourseLayoutStream14 = $E8CF
|
||||
CourseLayoutStream14_End = $E982
|
||||
CourseLayoutStream15 = $F3D3
|
||||
CourseLayoutStream15_End = $F48E
|
||||
CourseLayoutStream16 = $EBAC
|
||||
CourseLayoutStream16_End = $ECD8
|
||||
CourseLayoutStream17 = $F5C7
|
||||
CourseLayoutStream17_End = $F6A8
|
||||
CourseLayoutStream18 = $F1EA
|
||||
CourseLayoutStream18_End = $F2B4
|
||||
@@ -1,2 +1,47 @@
|
||||
; Golf (JU) zero-page aliases (declared during Pass 2).
|
||||
; These intentionally conservative names will be refined in Passes 2 and 3.
|
||||
; =============================================================================
|
||||
; Golf (JU) application-specific RAM aliases
|
||||
; =============================================================================
|
||||
; Pass 2 names are introduced only where usage is established. RAM reused by
|
||||
; unrelated subsystems remains numeric until the owning routines are audited.
|
||||
|
||||
; PPU/NMI infrastructure
|
||||
ppu_ctrl_shadow = $00
|
||||
ppu_mask_shadow = $01
|
||||
nmi_vector_lo = $02
|
||||
nmi_vector_hi = $03
|
||||
source_pointer_lo = $04
|
||||
source_pointer_hi = $05
|
||||
destination_pointer_lo = $06
|
||||
destination_pointer_hi = $07
|
||||
nmi_complete_flag = $08
|
||||
|
||||
; Title/menu state
|
||||
title_input_mode = $09
|
||||
menu_input_latch = $0A
|
||||
menu_selection = $0D
|
||||
current_hole_index = $2B
|
||||
|
||||
; Course overview/grid generation
|
||||
grid_inner_index = $6F
|
||||
grid_group_index = $70
|
||||
|
||||
; Gameplay controller and shot-selection callback ($C5A0-$C71D)
|
||||
active_controller_index = $7A ; 0 selects JOY1, 1 selects JOY2
|
||||
primary_action_pressed = $2E ; first serial controller bit, normalized to 0/1
|
||||
directional_input_index = $30 ; serial direction position, $FF when none found
|
||||
directional_repeat_latch = $18 ; prevents immediate repeated club changes
|
||||
club_selection_index = $17 ; wraps through $00-$0D
|
||||
aim_angle_index = $44 ; low-nibble aim/angle phase
|
||||
aim_adjust_direction = $45 ; zero/increment vs nonzero/decrement direction
|
||||
animation_tick_counter = $8E
|
||||
animation_frame_index = $8F
|
||||
|
||||
; Gameplay sequence callback chain ($CF87-$D123)
|
||||
sequence_position = $32 ; mirrored into OAM Y fields $027B/$027F
|
||||
sequence_phase = $34 ; selects forward vs return frame tables
|
||||
sequence_return_complete = $35 ; set when the return bound is reached
|
||||
sequence_lower_bound = $1E ; lower endpoint used by the decrementing phase
|
||||
sequence_upper_bound = $1D ; upper endpoint used by the incrementing phase
|
||||
sequence_return_bound = $1F ; endpoint used by the return phase
|
||||
sequence_frame_index = $15 ; layout/frame selector passed to sprite refresh
|
||||
sequence_frame_limit = $20 ; cap applied to one forward frame-table result
|
||||
@@ -0,0 +1,2 @@
|
||||
; Golf (JU) zero-page aliases (declared during Pass 2).
|
||||
; These intentionally conservative names will be refined in Passes 2 and 3.
|
||||
@@ -0,0 +1,26 @@
|
||||
; =============================================================================
|
||||
; Golf (JU) application-specific RAM aliases
|
||||
; =============================================================================
|
||||
; Pass 2 names are introduced only where usage is established. RAM reused by
|
||||
; unrelated subsystems remains numeric until the owning routines are audited.
|
||||
|
||||
; PPU/NMI infrastructure
|
||||
ppu_ctrl_shadow = $00
|
||||
ppu_mask_shadow = $01
|
||||
nmi_vector_lo = $02
|
||||
nmi_vector_hi = $03
|
||||
source_pointer_lo = $04
|
||||
source_pointer_hi = $05
|
||||
destination_pointer_lo = $06
|
||||
destination_pointer_hi = $07
|
||||
nmi_complete_flag = $08
|
||||
|
||||
; Title/menu state
|
||||
title_input_mode = $09
|
||||
menu_input_latch = $0A
|
||||
menu_selection = $0D
|
||||
current_hole_index = $2B
|
||||
|
||||
; Course overview/grid generation
|
||||
grid_inner_index = $6F
|
||||
grid_group_index = $70
|
||||
@@ -0,0 +1,37 @@
|
||||
; =============================================================================
|
||||
; Golf (JU) application-specific RAM aliases
|
||||
; =============================================================================
|
||||
; Pass 2 names are introduced only where usage is established. RAM reused by
|
||||
; unrelated subsystems remains numeric until the owning routines are audited.
|
||||
|
||||
; PPU/NMI infrastructure
|
||||
ppu_ctrl_shadow = $00
|
||||
ppu_mask_shadow = $01
|
||||
nmi_vector_lo = $02
|
||||
nmi_vector_hi = $03
|
||||
source_pointer_lo = $04
|
||||
source_pointer_hi = $05
|
||||
destination_pointer_lo = $06
|
||||
destination_pointer_hi = $07
|
||||
nmi_complete_flag = $08
|
||||
|
||||
; Title/menu state
|
||||
title_input_mode = $09
|
||||
menu_input_latch = $0A
|
||||
menu_selection = $0D
|
||||
current_hole_index = $2B
|
||||
|
||||
; Course overview/grid generation
|
||||
grid_inner_index = $6F
|
||||
grid_group_index = $70
|
||||
|
||||
; Gameplay controller and shot-selection callback ($C5A0-$C71D)
|
||||
active_controller_index = $7A ; 0 selects JOY1, 1 selects JOY2
|
||||
primary_action_pressed = $2E ; first serial controller bit, normalized to 0/1
|
||||
directional_input_index = $30 ; serial direction position, $FF when none found
|
||||
directional_repeat_latch = $18 ; prevents immediate repeated club changes
|
||||
club_selection_index = $17 ; wraps through $00-$0D
|
||||
aim_angle_index = $44 ; low-nibble aim/angle phase
|
||||
aim_adjust_direction = $45 ; zero/increment vs nonzero/decrement direction
|
||||
animation_tick_counter = $8E
|
||||
animation_frame_index = $8F
|
||||
@@ -0,0 +1,37 @@
|
||||
; =============================================================================
|
||||
; Golf (JU) application-specific RAM aliases
|
||||
; =============================================================================
|
||||
; Pass 2 names are introduced only where usage is established. RAM reused by
|
||||
; unrelated subsystems remains numeric until the owning routines are audited.
|
||||
|
||||
; PPU/NMI infrastructure
|
||||
ppu_ctrl_shadow = $00
|
||||
ppu_mask_shadow = $01
|
||||
nmi_vector_lo = $02
|
||||
nmi_vector_hi = $03
|
||||
source_pointer_lo = $04
|
||||
source_pointer_hi = $05
|
||||
destination_pointer_lo = $06
|
||||
destination_pointer_hi = $07
|
||||
nmi_complete_flag = $08
|
||||
|
||||
; Title/menu state
|
||||
title_input_mode = $09
|
||||
menu_input_latch = $0A
|
||||
menu_selection = $0D
|
||||
current_hole_index = $2B
|
||||
|
||||
; Course overview/grid generation
|
||||
grid_inner_index = $6F
|
||||
grid_group_index = $70
|
||||
|
||||
; Gameplay controller and shot-selection callback ($C5A0-$C71D)
|
||||
active_controller_index = $7A ; 0 selects JOY1, 1 selects JOY2
|
||||
primary_action_pressed = $2E ; first serial controller bit, normalized to 0/1
|
||||
directional_input_index = $30 ; serial direction position, $FF when none found
|
||||
directional_repeat_latch = $18 ; prevents immediate repeated club changes
|
||||
club_selection_index = $17 ; wraps through $00-$0D
|
||||
aim_angle_index = $44 ; low-nibble aim/angle phase
|
||||
aim_adjust_direction = $45 ; zero/increment vs nonzero/decrement direction
|
||||
animation_tick_counter = $8E
|
||||
animation_frame_index = $8F
|
||||
+13538
-5
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,576 @@
|
||||
al 00FF85 .FF85PpuValueTable
|
||||
al 00FF82 .Label_FF82
|
||||
al 00FF76 .Label_FF76
|
||||
al 00FF6C .Label_FF6C
|
||||
al 00FF68 .Label_FF68
|
||||
al 00FF58 .Label_FF58
|
||||
al 00FF4C .Label_FF4C
|
||||
al 00FF42 .Label_FF42
|
||||
al 00FF3E .Label_FF3E
|
||||
al 00FF00 .Label_FF00
|
||||
al 00FF01 .Label_FF01
|
||||
al 00FEFA .Label_FEFA
|
||||
al 00FEF2 .Label_FEF2
|
||||
al 00FEEA .Label_FEEA
|
||||
al 00FEE2 .Label_FEE2
|
||||
al 00FF03 .Label_FF03
|
||||
al 00FEDA .Label_FEDA
|
||||
al 00FECB .Label_FECB
|
||||
al 00FEB2 .SubCFEB2
|
||||
al 00FEAB .Label_FEAB
|
||||
al 00FE97 .SubCFE97
|
||||
al 00FEB5 .SubCFEB5
|
||||
al 00FE8E .Label_FE8E
|
||||
al 00FE48 .Label_FE48
|
||||
al 00FE44 .Label_FE44
|
||||
al 00FE3E .SubCFE3E
|
||||
al 00FE35 .Label_FE35
|
||||
al 00FDF7 .Label_FDF7
|
||||
al 00FDED .Label_FDED
|
||||
al 00FDE7 .Label_FDE7
|
||||
al 00FE61 .SubCFE61
|
||||
al 00FE50 .SubCFE50
|
||||
al 00FD81 .Label_FD81
|
||||
al 00FD70 .Label_FD70
|
||||
al 00FD69 .Label_FD69
|
||||
al 00FD5E .Label_FD5E
|
||||
al 00FD24 .Label_FD24
|
||||
al 00FD0A .PpuTableFd0a
|
||||
al 00FCFD .Label_FCFD
|
||||
al 00FCDB .Label_FCDB
|
||||
al 00FCCE .Label_FCCE
|
||||
al 00FCB7 .Label_FCB7
|
||||
al 00FCA8 .Label_FCA8
|
||||
al 00FC7D .Label_FC7D
|
||||
al 00FC6B .Label_FC6B
|
||||
al 00FC6C .Label_FC6C
|
||||
al 00FC64 .Label_FC64
|
||||
al 00FC5A .Label_FC5A
|
||||
al 00FC3F .Label_FC3F
|
||||
al 00FC43 .Label_FC43
|
||||
al 00FBBE .Label_FBBE
|
||||
al 00FBB2 .NormalizeStateEntry
|
||||
al 00FBA3 .Label_FBA3
|
||||
al 00FB83 .Label_FB83
|
||||
al 00FB62 .Label_FB62
|
||||
al 00FB84 .Label_FB84
|
||||
al 00FB48 .Label_FB48
|
||||
al 00FB3D .Label_FB3D
|
||||
al 00FB3B .Label_FB3B
|
||||
al 00FB30 .Label_FB30
|
||||
al 00FB24 .Label_FB24
|
||||
al 00FB27 .Label_FB27
|
||||
al 00FB0D .Label_FB0D
|
||||
al 00FAFB .Label_FAFB
|
||||
al 00FAFF .Label_FAFF
|
||||
al 00FBA4 .StoreSpecialGridCoordinate
|
||||
al 00FAED .Label_FAED
|
||||
al 00FB25 .SubCFB25
|
||||
al 00FAE2 .Label_FAE2
|
||||
al 00FACA .Label_FACA
|
||||
al 00FABB .Label_FABB
|
||||
al 00FAAF .Label_FAAF
|
||||
al 00FC66 .CompareObjectState
|
||||
al 00FAA1 .Label_FAA1
|
||||
al 00FA90 .SubCFA90
|
||||
al 00FA8C .SubCFA8C
|
||||
al 00FA88 .Label_FA88
|
||||
al 00FA78 .Label_FA78
|
||||
al 00FBAE .NormalizeStatePair
|
||||
al 00FA80 .Label_FA80
|
||||
al 00FA3D .Label_FA3D
|
||||
al 00FA39 .Label_FA39
|
||||
al 00FA35 .NormalizeCourseGrid
|
||||
al 00FC6E .GetGridObjectIndex
|
||||
al 00FA1A .Label_FA1A
|
||||
al 00FA14 .Label_FA14
|
||||
al 00FA0E .Label_FA0E
|
||||
al 00FA08 .Label_FA08
|
||||
al 00FA18 .Label_FA18
|
||||
al 00F9DF .Label_F9DF
|
||||
al 00F9D4 .Label_F9D4
|
||||
al 00F9B2 .Label_F9B2
|
||||
al 00F9AB .Label_F9AB
|
||||
al 00F9A2 .Label_F9A2
|
||||
al 00F99E .SubCF99E
|
||||
al 00F99D .Label_F99D
|
||||
al 00F99B .Label_F99B
|
||||
al 00F983 .SubCF983
|
||||
al 00F982 .Label_F982
|
||||
al 00F953 .SubCF953
|
||||
al 00F94B .Label_F94B
|
||||
al 00F93F .Label_F93F
|
||||
al 00F93B .Label_F93B
|
||||
al 00F929 .Label_F929
|
||||
al 00F918 .Label_F918
|
||||
al 00E6D5 .CourseLayoutPointerHi
|
||||
al 00E6C3 .CourseLayoutPointerLo
|
||||
al 00E585 .SubCE585
|
||||
al 00E576 .Label_E576
|
||||
al 00E559 .SubCE559
|
||||
al 00E54A .Label_E54A
|
||||
al 00E52C .Label_E52C
|
||||
al 00E4CB .Label_E4CB
|
||||
al 00E4D4 .Label_E4D4
|
||||
al 00E4B5 .Label_E4B5
|
||||
al 00E4DF .Label_E4DF
|
||||
al 00E4A1 .Label_E4A1
|
||||
al 00E48D .SubCE48D
|
||||
al 00E48B .SubCE48B
|
||||
al 00E46E .Label_E46E
|
||||
al 00E45A .Label_E45A
|
||||
al 00E458 .Label_E458
|
||||
al 00E447 .Label_E447
|
||||
al 00E437 .Label_E437
|
||||
al 00E3C0 .FixedObjectAttributeTable
|
||||
al 00E3A2 .FixedObjectTileTable
|
||||
al 00E384 .FixedObjectXOffsets
|
||||
al 00E37D .FixedObjectSpanBounds
|
||||
al 00E334 .ObjectYOffsetTable
|
||||
al 00E2EB .ObjectXOffsetTable
|
||||
al 00E2A2 .ObjectTileTable
|
||||
al 00E283 .ObjectSpanEnds
|
||||
al 00E282 .ObjectSpanStartZero
|
||||
al 00E1B8 .GameplayPpuPalette
|
||||
al 00E1B5 .Label_E1B5
|
||||
al 00E18B .Label_E18B
|
||||
al 00E16C .Label_E16C
|
||||
al 00E16A .Label_E16A
|
||||
al 00E156 .Label_E156
|
||||
al 00E141 .Label_E141
|
||||
al 00E121 .Label_E121
|
||||
al 00E0ED .Label_E0ED
|
||||
al 00E0D8 .Label_E0D8
|
||||
al 00E0CD .SubCE0CD
|
||||
al 00E0CA .Label_E0CA
|
||||
al 00E0BE .SubCE0BE
|
||||
al 00E0A4 .Label_E0A4
|
||||
al 00E0B5 .Label_E0B5
|
||||
al 00E0A0 .Label_E0A0
|
||||
al 00E07C .SubCE07C
|
||||
al 00E079 .Label_E079
|
||||
al 00E06D .Label_E06D
|
||||
al 00E052 .Label_E052
|
||||
al 00E045 .Label_E045
|
||||
al 00E043 .Label_E043
|
||||
al 00E1A1 .SubCE1A1
|
||||
al 00DFF5 .Label_DFF5
|
||||
al 00DFF1 .Label_DFF1
|
||||
al 00DFD9 .Label_DFD9
|
||||
al 00DFCD .Label_DFCD
|
||||
al 00DFAE .Label_DFAE
|
||||
al 00DF9B .SubCDF9B
|
||||
al 00DF91 .Label_DF91
|
||||
al 00DF6C .Label_DF6C
|
||||
al 00DFB8 .SubCDFB8
|
||||
al 00DF3A .Label_DF3A
|
||||
al 00DF3B .Label_DF3B
|
||||
al 00DF23 .Label_DF23
|
||||
al 00DF54 .Label_DF54
|
||||
al 00DF03 .ParseHoleObjectList
|
||||
al 00DEA5 .Label_DEA5
|
||||
al 00DE4B .Label_DE4B
|
||||
al 00DE5E .ParseHoleObjectPackage
|
||||
al 00DE30 .Label_DE30
|
||||
al 00DE14 .Label_DE14
|
||||
al 00DE03 .Label_DE03
|
||||
al 00DDF7 .Label_DDF7
|
||||
al 00DE0E .Label_DE0E
|
||||
al 00DE1A .SubCDE1A
|
||||
al 00DDE7 .Label_DDE7
|
||||
al 00DE3C .Label_DE3C
|
||||
al 00DDC9 .Label_DDC9
|
||||
al 00E1AB .SubCE1AB
|
||||
al 00DDBC .Label_DDBC
|
||||
al 00DE35 .SubCDE35
|
||||
al 00E3FC .SubCE3FC
|
||||
al 00DDA4 .Label_DDA4
|
||||
al 00DD94 .Label_DD94
|
||||
al 00DD89 .Label_DD89
|
||||
al 00DD7F .Label_DD7F
|
||||
al 00DC4A .Label_DC4A
|
||||
al 00DC53 .Label_DC53
|
||||
al 00DC3D .Label_DC3D
|
||||
al 00DC07 .Label_DC07
|
||||
al 00DBDE .Label_DBDE
|
||||
al 00DBC5 .Label_DBC5
|
||||
al 00DBAC .Label_DBAC
|
||||
al 00DB94 .Label_DB94
|
||||
al 00DB84 .Label_DB84
|
||||
al 00DB7E .Label_DB7E
|
||||
al 00DB78 .Label_DB78
|
||||
al 00DB72 .Label_DB72
|
||||
al 00DB69 .Label_DB69
|
||||
al 00DB5B .Label_DB5B
|
||||
al 00DB44 .Label_DB44
|
||||
al 00DB38 .Label_DB38
|
||||
al 00DB18 .Label_DB18
|
||||
al 00DB0A .Label_DB0A
|
||||
al 00DAFD .Label_DAFD
|
||||
al 00DADA .StoreMenuSelection
|
||||
al 00DADC .LatchMenuInput
|
||||
al 00DAE6 .ReleaseMenuInputLatch
|
||||
al 00DB0D .MenuCursorYPositions
|
||||
al 00DAEC .Label_DAEC
|
||||
al 00DAA2 .TitleAndAttractNmi
|
||||
al 00FCF1 .SubCFCF1
|
||||
al 00DA61 .Label_DA61
|
||||
al 00DA4C .SubCDA4C
|
||||
al 00DB10 .SubCDB10
|
||||
al 00DA2F .SubCDA2F
|
||||
al 00DA1C .SubCDA1C
|
||||
al 00DA15 .Label_DA15
|
||||
al 00D9F9 .Label_D9F9
|
||||
al 00D9FA .Label_D9FA
|
||||
al 00D9F6 .Label_D9F6
|
||||
al 00D9F2 .Label_D9F2
|
||||
al 00D9EA .Label_D9EA
|
||||
al 00D9D9 .SubCD9D9
|
||||
al 00D9D8 .Label_D9D8
|
||||
al 00D9CC .Label_D9CC
|
||||
al 00D9B9 .SubCD9B9
|
||||
al 00D9B8 .Label_D9B8
|
||||
al 00D988 .D988ScoreAdjustTable
|
||||
al 00D984 .Label_D984
|
||||
al 00D968 .Label_D968
|
||||
al 00D960 .Label_D960
|
||||
al 00D951 .Label_D951
|
||||
al 00D94E .Label_D94E
|
||||
al 00D947 .Label_D947
|
||||
al 00D974 .Label_D974
|
||||
al 00D93F .Label_D93F
|
||||
al 00D937 .Label_D937
|
||||
al 00D92D .Label_D92D
|
||||
al 00D8ED .SubCD8ED
|
||||
al 00D822 .Label_D822
|
||||
al 00D81D .Label_D81D
|
||||
al 00D7FF .Label_D7FF
|
||||
al 00D7C7 .Label_D7C7
|
||||
al 00D796 .Label_D796
|
||||
al 00D78F .Label_D78F
|
||||
al 00DA1D .SubCDA1D
|
||||
al 00D7F5 .SubCD7F5
|
||||
al 00D767 .Label_D767
|
||||
al 00D75D .Label_D75D
|
||||
al 00D7A8 .Label_D7A8
|
||||
al 00D79E .Label_D79E
|
||||
al 00D771 .Label_D771
|
||||
al 00D773 .Label_D773
|
||||
al 00D774 .Label_D774
|
||||
al 00D714 .Label_D714
|
||||
al 00D6F4 .BitMaskTable
|
||||
al 00D6E4 .Label_D6E4
|
||||
al 00D6E7 .Label_D6E7
|
||||
al 00D6CB .Label_D6CB
|
||||
al 00D6BF .Label_D6BF
|
||||
al 00D6AE .Label_D6AE
|
||||
al 00D6B0 .Label_D6B0
|
||||
al 00D69C .Label_D69C
|
||||
al 00D6A0 .Label_D6A0
|
||||
al 00D6E9 .Label_D6E9
|
||||
al 00D6E3 .Label_D6E3
|
||||
al 00D663 .SubCD663
|
||||
al 00D6FC .SubCD6FC
|
||||
al 00D562 .Label_D562
|
||||
al 00D551 .Label_D551
|
||||
al 00FD67 .SubCFD67
|
||||
al 00D539 .Label_D539
|
||||
al 00FC27 .SubCFC27
|
||||
al 00FC24 .SubCFC24
|
||||
al 00F906 .SubCF906
|
||||
al 00D514 .Label_D514
|
||||
al 00D4ED .Label_D4ED
|
||||
al 00D4E1 .Label_D4E1
|
||||
al 00D4D6 .Label_D4D6
|
||||
al 00D4D1 .Label_D4D1
|
||||
al 00D4DF .Label_D4DF
|
||||
al 00D4C2 .Label_D4C2
|
||||
al 00D4BB .SubCD4BB
|
||||
al 00D4B9 .Label_D4B9
|
||||
al 00D4F0 .Label_D4F0
|
||||
al 00D481 .Label_D481
|
||||
al 00D473 .Label_D473
|
||||
al 00D46D .Label_D46D
|
||||
al 00D453 .SubCD453
|
||||
al 00D482 .Label_D482
|
||||
al 00D425 .SubCD425
|
||||
al 00D424 .Label_D424
|
||||
al 00D422 .SubCD422
|
||||
al 00D41C .Label_D41C
|
||||
al 00D419 .Label_D419
|
||||
al 00D3C9 .Label_D3C9
|
||||
al 00D301 .Label_D301
|
||||
al 00D2E0 .Label_D2E0
|
||||
al 00D2C8 .Label_D2C8
|
||||
al 00D2F8 .SubCD2F8
|
||||
al 00D275 .Label_D275
|
||||
al 00D2AF .Label_D2AF
|
||||
al 00D25F .Label_D25F
|
||||
al 00D24C .Label_D24C
|
||||
al 00D239 .Label_D239
|
||||
al 00D21D .SubCD21D
|
||||
al 00D2EE .SubCD2EE
|
||||
al 00D217 .Label_D217
|
||||
al 00D3B7 .SubCD3B7
|
||||
al 00D214 .Label_D214
|
||||
al 00D4F7 .SubCD4F7
|
||||
al 00D201 .Label_D201
|
||||
al 00D2C2 .SubCD2C2
|
||||
al 00D1FA .Label_D1FA
|
||||
al 00D515 .SubCD515
|
||||
al 00D1F1 .Label_D1F1
|
||||
al 00D505 .SubCD505
|
||||
al 00D1CA .Label_D1CA
|
||||
al 00D1BF .Label_D1BF
|
||||
al 00D1BA .Label_D1BA
|
||||
al 00D1B3 .Label_D1B3
|
||||
al 00D1B0 .Label_D1B0
|
||||
al 00D1A5 .Label_D1A5
|
||||
al 00D1A1 .Label_D1A1
|
||||
al 00D190 .Label_D190
|
||||
al 00D17C .Label_D17C
|
||||
al 00D14D .Label_D14D
|
||||
al 00D118 .Label_D118
|
||||
al 00D135 .FinalSequenceThresholds
|
||||
al 00D10C .Label_D10C
|
||||
al 00D102 .Label_D102
|
||||
al 00D0F8 .ClampReturnSequenceFrame
|
||||
al 00D12D .ReturnSequenceThresholds
|
||||
al 00D0EC .FindReturnSequenceFrame
|
||||
al 00D10A .FindFinalSequenceFrame
|
||||
al 00D121 .FinishSequenceNmi
|
||||
al 00D0D8 .ApplyTerminalSequenceFrame
|
||||
al 00D12A .TerminalSequenceThresholds
|
||||
al 00D0CE .FindTerminalSequenceFrame
|
||||
al 00D138 .ForwardSequenceFrameLimits
|
||||
al 00D0BF .ApplyForwardSequenceFrame
|
||||
al 00D124 .ForwardSequenceThresholds
|
||||
al 00D0B5 .FindForwardSequenceFrame
|
||||
al 00D0CC .SelectTerminalSequenceFrame
|
||||
al 00D0E0 .SelectReturnSequenceFrame
|
||||
al 00D0A6 .JumpToSelectSequenceFrame
|
||||
al 00D098 .Label_D098
|
||||
al 00D08A .GameplaySequenceNmiContinue3
|
||||
al 00D085 .Label_D085
|
||||
al 00D064 .Label_D064
|
||||
al 00D048 .Label_D048
|
||||
al 00D03E .GameplaySequenceNmiContinue2
|
||||
al 00D0A9 .SelectSequenceFrame
|
||||
al 00D021 .AdvanceSequenceToNextParity
|
||||
al 00D039 .AdvanceSequencePosition
|
||||
al 00D025 .InitializeSequenceReturnPhase
|
||||
al 00CFC3 .GameplaySequenceNmiContinue1
|
||||
al 00CFEA .PollSequenceActionButton
|
||||
al 00CFC0 .UpdateSequenceInput
|
||||
al 00CFAA .GameplaySequenceNmiCallback
|
||||
al 00DA1E .SubCDA1E
|
||||
al 00CF9D .WaitForSequenceStart
|
||||
al 00CF8E .InitializeSequenceBounds
|
||||
al 00CF87 .DeriveAimAngleNibble
|
||||
al 00FC78 .SubCFC78
|
||||
al 00CF51 .Label_CF51
|
||||
al 00CF48 .Label_CF48
|
||||
al 00CF2F .Label_CF2F
|
||||
al 00CF03 .Label_CF03
|
||||
al 00CEF3 .Label_CEF3
|
||||
al 00CEBB .Label_CEBB
|
||||
al 00CC74 .SpriteLayoutLists
|
||||
al 00CC5F .SpriteLayoutYOffsets
|
||||
al 00CC4A .SpriteLayoutXOffsets
|
||||
al 00CC44 .AltSpriteLayoutPointerHi
|
||||
al 00CC3E .AltSpriteLayoutPointerLo
|
||||
al 00CC31 .SpriteLayoutPointerHi
|
||||
al 00CC24 .SpriteLayoutPointerLo
|
||||
al 00CC15 .SpriteLayoutGroupMap
|
||||
al 00D4F2 .SubCD4F2
|
||||
al 00CC0F .Label_CC0F
|
||||
al 00CBEA .ParseSpriteLayout
|
||||
al 00CBE6 .SubCCBE6
|
||||
al 00CBDE .Label_CBDE
|
||||
al 00CBA2 .Label_CBA2
|
||||
al 00CB6E .Label_CB6E
|
||||
al 00CBCB .SubCCBCB
|
||||
al 00CB3A .Label_CB3A
|
||||
al 00CB60 .SubCCB60
|
||||
al 00D4F1 .SubCD4F1
|
||||
al 00CB0F .SubCCB0F
|
||||
al 00CB0C .Label_CB0C
|
||||
al 00CAF9 .Label_CAF9
|
||||
al 00CB97 .SubCCB97
|
||||
al 00CB63 .SubCCB63
|
||||
al 00CAE8 .Label_CAE8
|
||||
al 00CAEB .Label_CAEB
|
||||
al 00CB2C .Label_CB2C
|
||||
al 00CAA1 .Label_CAA1
|
||||
al 00CA9D .SubCCA9D
|
||||
al 00CA9C .Label_CA9C
|
||||
al 00CA88 .Label_CA88
|
||||
al 00CA85 .Label_CA85
|
||||
al 00CA7B .Label_CA7B
|
||||
al 00CA78 .Label_CA78
|
||||
al 00CA60 .Label_CA60
|
||||
al 00CA55 .SubCCA55
|
||||
al 00CA70 .SubCCA70
|
||||
al 00CA53 .SubCCA53
|
||||
al 00CA0F .Label_CA0F
|
||||
al 00CA26 .Label_CA26
|
||||
al 00CA06 .Label_CA06
|
||||
al 00C9AB .Label_C9AB
|
||||
al 00C9BA .Label_C9BA
|
||||
al 00C998 .Label_C998
|
||||
al 00C971 .Label_C971
|
||||
al 00C9E6 .Label_C9E6
|
||||
al 00C96B .Label_C96B
|
||||
al 00CA30 .SubCCA30
|
||||
al 00C935 .Label_C935
|
||||
al 00C945 .Label_C945
|
||||
al 00C931 .Label_C931
|
||||
al 00C946 .SubCC946
|
||||
al 00C906 .Label_C906
|
||||
al 00C8FB .Label_C8FB
|
||||
al 00C8EC .Label_C8EC
|
||||
al 00C8E8 .ClearOamShadowLoop
|
||||
al 00C8D9 .Label_C8D9
|
||||
al 00C8BC .MultiplyBy32
|
||||
al 00C8BB .MultiplyABy32
|
||||
al 00C89A .SubCC89A
|
||||
al 00C89D .SetPpuScrollAndMask
|
||||
al 00C872 .Label_C872
|
||||
al 00C751 .Label_C751
|
||||
al 00C752 .SubCC752
|
||||
al 00C73F .Label_C73F
|
||||
al 00C72F .Label_C72F
|
||||
al 00D9C7 .SubCD9C7
|
||||
al 00C70E .WriteSecondaryMarkerOam
|
||||
al 00C70C .SelectSecondaryMarkerTile
|
||||
al 00C71B .FinishGameplayNmi
|
||||
al 00C6DA .WriteAnimationMarkerOam
|
||||
al 00C6D8 .SelectAnimationMarkerTile
|
||||
al 00C6D4 .ShowAnimationMarker
|
||||
al 00C69F .DecrementAimAngle
|
||||
al 00C6A3 .StoreWrappedAimAngle
|
||||
al 00C686 .InitializeAimDirection
|
||||
al 00C6C8 .GameplayDisplayNmiCallback
|
||||
al 00C721 .SubCC721
|
||||
al 00C650 .PositionAimOamEntries
|
||||
al 00C640 .InitializeAimOamLoop
|
||||
al 00C642 .UpdateAimOamEntryLoop
|
||||
al 00C67E .HandleAimDirectionChange
|
||||
al 00C62D .HandleAimAdjustmentInput
|
||||
al 00CAA8 .RefreshSequenceSpriteLayout
|
||||
al 00C5ED .WrapClubSelectionIndex
|
||||
al 00C604 .BuildGameplayOam
|
||||
al 00C600 .ResetDirectionalRepeatLatch
|
||||
al 00C5F5 .RefreshClubSelectionDisplay
|
||||
al 00C5CD .HandleClubSelectionInput
|
||||
al 00C5C3 .StoreDirectionalInputIndex
|
||||
al 00C5B9 .ScanDirectionalSerialBits
|
||||
al 00C5A0 .GameplayInputNmiCallback
|
||||
al 00C599 .SubCC599
|
||||
al 00C589 .SubCC589
|
||||
al 00C586 .SubCC586
|
||||
al 00C57B .StrobeAndReadController
|
||||
al 00C563 .Label_C563
|
||||
al 00C575 .Label_C575
|
||||
al 00C8F5 .SubCC8F5
|
||||
al 00C527 .Label_C527
|
||||
al 00C542 .Label_C542
|
||||
al 00FF2B .SubCFF2B
|
||||
al 00C519 .Label_C519
|
||||
al 00C517 .Label_C517
|
||||
al 00C51F .Label_C51F
|
||||
al 00C501 .Label_C501
|
||||
al 00C4F7 .Label_C4F7
|
||||
al 00C504 .Label_C504
|
||||
al 00D9B1 .SubCD9B1
|
||||
al 00C4DC .Label_C4DC
|
||||
al 00C4EB .Label_C4EB
|
||||
al 00C4BA .Label_C4BA
|
||||
al 00C4B8 .Label_C4B8
|
||||
al 00C49C .Label_C49C
|
||||
al 00C4A7 .Label_C4A7
|
||||
al 00C909 .WaitFrameGroups
|
||||
al 00C481 .Label_C481
|
||||
al 00C44E .Label_C44E
|
||||
al 00D48B .SubCD48B
|
||||
al 00C3FF .Label_C3FF
|
||||
al 00D906 .SubCD906
|
||||
al 00C3BF .Label_C3BF
|
||||
al 00C4CB .SubCC4CB
|
||||
al 00C39F .Label_C39F
|
||||
al 00C3AE .Label_C3AE
|
||||
al 00C369 .Label_C369
|
||||
al 00C41B .SubCC41B
|
||||
al 00E52F .SubCE52F
|
||||
al 00C336 .Label_C336
|
||||
al 00C593 .SubCC593
|
||||
al 00C33E .Label_C33E
|
||||
al 00C907 .SubCC907
|
||||
al 00C380 .SubCC380
|
||||
al 00C383 .SubCC383
|
||||
al 00FEBF .SubCFEBF
|
||||
al 00FD12 .SubCFD12
|
||||
al 00C2BF .Label_C2BF
|
||||
al 00C286 .Label_C286
|
||||
al 00C2D9 .Label_C2D9
|
||||
al 00C305 .SubCC305
|
||||
al 00C27A .Label_C27A
|
||||
al 00C2C2 .Label_C2C2
|
||||
al 00D65A .SubCD65A
|
||||
al 00C3B1 .SubCC3B1
|
||||
al 00C26C .Label_C26C
|
||||
al 00C2BA .Label_C2BA
|
||||
al 00CA8E .SubCCA8E
|
||||
al 00C8B5 .RestorePpuCtrlShadow
|
||||
al 00C881 .WaitForFramePreservingY
|
||||
al 00D13E .SubCD13E
|
||||
al 00C238 .Label_C238
|
||||
al 00C240 .Label_C240
|
||||
al 00CE64 .SubCCE64
|
||||
al 00D9FF .SubCD9FF
|
||||
al 00D65D .SubCD65D
|
||||
al 00C1EF .Label_C1EF
|
||||
al 00C894 .SpriteOffsetForController
|
||||
al 00FCE6 .SubCFCE6
|
||||
al 00C916 .SubCC916
|
||||
al 00FE72 .SubCFE72
|
||||
al 00FC98 .UploadGeneratedCourseGrid
|
||||
al 00C1CD .Label_C1CD
|
||||
al 00C1D1 .Label_C1D1
|
||||
al 00C1CA .Label_C1CA
|
||||
al 00C1BC .Label_C1BC
|
||||
al 00DD78 .DecodeCoursePackage
|
||||
al 00C84D .SubCC84D
|
||||
al 00C8F3 .WaitForFrame
|
||||
al 00C198 .Label_C198
|
||||
al 00C199 .Label_C199
|
||||
al 00C484 .SubCC484
|
||||
al 00C192 .Label_C192
|
||||
al 00C184 .Label_C184
|
||||
al 00F931 .SubCF931
|
||||
al 00C160 .Label_C160
|
||||
al 00C17C .Label_C17C
|
||||
al 00C182 .Label_C182
|
||||
al 00C14A .Label_C14A
|
||||
al 00C17E .Label_C17E
|
||||
al 00C136 .SubCC136
|
||||
al 00E6B0 .SubCE6B0
|
||||
al 00C8C8 .ClearNametableAndOam
|
||||
al 00C888 .InstallNmiCallback
|
||||
al 00C0E8 .SubCC0E8
|
||||
al 00C0C7 .InitializeRuntimeState
|
||||
al 00C0C4 .IrqLoop
|
||||
al 00C0B8 .NmiEpilogue
|
||||
al 00C0A6 .NmiHandler
|
||||
al 00C09B .DiscardPpuBlockByteLoop
|
||||
al 00C08F .ReadPpuBlockByteLoop
|
||||
al 00C08D .ReadPpuBlockBytes
|
||||
al 00C8C1 .SetPpuAddress
|
||||
al 00DA23 .InitializeTitleAndGame
|
||||
al 00C087 .ReadPpuBlocks
|
||||
al 00C05D .CopyStartupTableLoop
|
||||
al 00C055 .Label_C055
|
||||
al 00C04F .Label_C04F
|
||||
al 00C041 .ClearStartupRamLoop
|
||||
al 00C007 .WaitForFirstVblank
|
||||
al 00C000 .Reset
|
||||
@@ -0,0 +1,3 @@
|
||||
; Address aliases not emitted as labels remain here.
|
||||
; Golf (JU) Pass 1 sprite/object table address aliases.
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
To make disassembling the 1984 NES classic Hogan's Alley significantly easier, you should focus on its straightforward architecture, unique input handling, and standard sprite structures.
|
||||
Here is a breakdown of the vital structural details that will save you time when writing a disassembly or configuration file:
|
||||
|
||||
1. The Memory Mapper (NROM)
|
||||
|
||||
• No Bank Switching: Hogan's Alley uses the NROM-128 (iNES Mapper 0) board. It has exactly 16 KB of PRG ROM (mapped to $C000–$FFFF) and 8 KB of CHR ROM.
|
||||
• Mirrored Vector Table: Because it is a 16 KB game mirrored into a 32 KB CPU space, the 6502 vectors at $FFFA–$FFFF are identical to the data at $BFFA–$BFFF in the raw PRG data.
|
||||
|
||||
2. Zapper Light Gun Mechanics
|
||||
|
||||
Since Hogan's Alley is a light gun game, your disassembly will heavily feature input reading from controller port 2 ($4017). Look out for these code patterns:
|
||||
• The Trigger Pull: Bit 4 of $4017 checks if the Zapper trigger is pulled.
|
||||
• The Light Sensor: Bit 3 of $4017 checks if the photodiode detects light (0 = light detected, 1 = darkness).
|
||||
• The Flash Hack: To see which criminal or innocent citizen was shot, the game blanks the screen for one frame, then draws white boxes over the target hitboxes one by one on subsequent frames while checking Bit 3 of $4017. Identifying this routine early will unlock the core game loop logic.
|
||||
|
||||
3. CHR Layout and Sprite Construction
|
||||
|
||||
• Sprite Mapping: Sprite data is pushed via Sprite DMA ($4014) to Object Attribute Memory (OAM). The targets (gangsters, police, civilians) are large metasprites composed of individual 8x8 tiles.
|
||||
• The "Flips": Look closely at the sprite attribute byte in OAM. Hogan's Alley flips tiles horizontally (Bit 6) and vertically (Bit 7) to reuse a single side of an arm, leg, or face for the opposite side, minimizing the 8 KB CHR space.
|
||||
|
||||
4. Audio Architecture (RP2A03)
|
||||
|
||||
The game uses a very early, standard Nintendo audio driver.
|
||||
• Audio registers reside between $4000 and $4015.
|
||||
• Sound effects (like the gunshot or the "miss" buzzer) are prioritized over the simple background jingles. Isolating the audio update routine (usually triggered inside the NMI) will let you separate the SFX data tables cleanly from the game logic.
|
||||
|
||||
5. Common Pitfalls to Automate
|
||||
|
||||
• Indirect Jumps: Watch out for JMP ($xxxx). Early NES games occasionally use jump tables for game states (Title Screen, Game A, Game B, Trick Shot). Ensure your disassembler treats these destination tables as 16-bit pointers rather than raw code instructions.
|
||||
• Data Arrays: Score counter graphics, timer lookups, and hit detection window delays are stored as raw data arrays embedded right next to the subroutines that use them.
|
||||
Binary file not shown.
@@ -1,100 +0,0 @@
|
||||
# Lunar Pool (U) — Skeleton Project
|
||||
|
||||
ROM: `_wip/Lunar Pool (U)/Lunar Pool (U).nes` (24,592 bytes, iNES). Status: **PASS 1 COMPLETE** — 4,586 instructions / 9,475 code bytes (57.8%) / 6,909 data bytes, byte accounting exact, **BYTE-IDENTICAL** at the PRG level. Pass 2 and 3 outstanding.
|
||||
|
||||
|
||||
## ROM Facts
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| Mapper | 0 (NROM) — from the iNES header |
|
||||
| PRG | 16 KB (header claims map at CPU $C000–$FFFF) |
|
||||
| CHR | 8 KB |
|
||||
| Mirroring | Horizontal |
|
||||
| Battery-backed flag | clear |
|
||||
| ROM SHA-256 | `6da37fd34e8f4eb3df34e9f446726a193db77d0e0bba32aa328ef225993fc8a1` |
|
||||
| PRG SHA-256 | `43a2f54cd48b38fc1e4a33051e019528e9789a774ace773fa7549c33dc9492c9` |
|
||||
|
||||
## Interrupt Vectors (taken from PRG $3FFA–$3FFF)
|
||||
|
||||
| Vector | Target | Note |
|
||||
|--------|--------|------|
|
||||
| NMI | `$FF65` | per-frame heartbeat |
|
||||
| RESET | `$E80C` | non-$C000 entry at $E80C — trace from here in Pass 1 |
|
||||
| IRQ | `$FF64` | target $FF64 — verify during Pass 1 |
|
||||
|
||||
## Pass Status
|
||||
|
||||
| Pass | Status | Description |
|
||||
|------|--------|-------------|
|
||||
| Pass 0 | Superseded | `prg.s` was a 12-line `.incbin` of the whole PRG — no disassembly at all |
|
||||
| Pass 1 | **Complete** | 4,586 instructions / **9,475 code bytes (57.8%)** / 6,909 data bytes. Byte accounting exact: 9,403 + 6,981 = 16,384. 598 labels, 598 routine headers |
|
||||
| Pass 2 | Outstanding | ~585 `Label_Cxxxx` to name |
|
||||
| Pass 3 | Outstanding | Data regions inside the 6,909 unreached bytes need naming |
|
||||
|
||||
### How Pass 1 got to 57.8%
|
||||
|
||||
| Step | Instructions | Code |
|
||||
|------|--------------|------|
|
||||
| Vectors + direct `jsr`/`jmp`/branch, official opcodes | 1,259 | 2,561 B (15.6%) |
|
||||
| `--undocumented` (108 NMOS opcodes) | 4,572 | 9,436 B (57.6%) |
|
||||
| `--auto-seed` (48 table-referenced entries) + `--extra-seed 0xE80C` | **4,586** | **9,475 B (57.8%)** |
|
||||
|
||||
### The dispatch mechanisms
|
||||
|
||||
**1. `jmp ($7961)` at three sites** (`$F788`, `$F7F6`, `$F828`). The target address is read from the RAM pointer at `$7961`/`$7962`, so it cannot be followed statically. These are game-over / hi-score screens: the data blocks that follow them contain the screen text (`"game over"`, `"hi`score__"`, `"shot"`).
|
||||
|
||||
**2. Stack-based dispatch at `$CBDC`** — the same pattern as Mario Bros (JU)'s `$CD9E`:
|
||||
|
||||
```
|
||||
$CBDC pla / sta ZpFA
|
||||
$CBDF pla / sta ZpFB
|
||||
$CBE7 lda (ZpFA),y ; read the entry, indexed by Y
|
||||
```
|
||||
|
||||
The pointer arrives via `pla`, so it is only knowable in the caller's frame.
|
||||
|
||||
### Tracer fixes required to get there
|
||||
|
||||
Three undocumented opcodes were missing from `nesdis.py` and were added:
|
||||
|
||||
* `$72` — `RRA abs` (the `RRA` family had `$63`/`$67`/`$6F`/`$73`/`$77`/`$7B`/`$7F` but not `$72`).
|
||||
* `$42` — `NOP #imm` (the NOP-immediate family had `$80`/`$82`/`$89`/`$C2`/`$E2` but not `$42`).
|
||||
* `$FA` — `NOP abs,X` (the NOP-abs,X family had `$1C`/`$3C`/`$5C`/`$7C`/`$DC`/`$FC` but not `$FA`).
|
||||
|
||||
One emitter fix: ca65 silently rewrites an operand whose high byte is `$00` in the shorter zero-page form (`sta $00FF,x` becomes `sta $FF,x`, emitting `$95` instead of `$9D`). `render()` now emits the `a:` prefix for ABS/ABSX/ABSY/IND operands with a high byte of `$00`, forcing the absolute form so the bytes match the ROM. `operand_value()` strips the prefix when parsing.
|
||||
|
||||
### Known remaining gaps
|
||||
|
||||
* The tracer still reports two overlaps (`$C3BB` — resolved with `--data 0xC3BB:1` — and `$F0EF`) and three rejected mis-aligned stubs.
|
||||
* 6,909 bytes (42.2%) are still data, gated behind the `jmp ($7961)` and `$CBDC` dispatches.
|
||||
* `locals.inc` carries 114 generated zero-page aliases, none yet named semantically.
|
||||
|
||||
## `copilot/` Contents
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `Lunar Pool (U).nes` | original ROM image (reference) |
|
||||
| `prg.bin` / `header.bin` / `chr.bin` | split image, produced by `_tools/splitnes.py` |
|
||||
| `prg.s` | Pass-1 skeleton: `.incbin "prg.bin", $0000, $4000` (whole PRG) |
|
||||
| `symbols.inc` | shared NES hardware constants (PPU/APU/controller, from the skeleton) |
|
||||
| `locals.inc` | project-local zero-page aliases — empty for now (filled in Pass 2) |
|
||||
| `linker.cfg` | PRG at $C000, 16 KB, `fill = yes` |
|
||||
| `Makefile` | links `reconstructed_prg.bin` and `cmp`s it against `prg.bin` |
|
||||
| `reconstructed_prg.bin` | build output from the last verified build |
|
||||
|
||||
Header/CHR are reproduced verbatim from `header.bin`/`chr.bin` (not linked): `make` verifies **PRG bytes only** at this stage, which is exactly what a skeleton proves. When this project is promoted to a full disassembly, `header.s` / `chr.s` (as e.g. `Burger Time (U)`) and a full-ROM `make` target get added.
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
cd "_wip/Lunar Pool (U)/copilot"
|
||||
make # → cmp reconstructed_prg.bin prg.bin → "BYTE-IDENTICAL"
|
||||
```
|
||||
|
||||
## Next Steps (per `PROMPTS.md`)
|
||||
|
||||
1. **Pass 1** — complete (57.8% code, byte accounting exact).
|
||||
2. **Pass 2** — name the ~585 remaining `Label_Cxxxx`; fill `locals.inc` with semantic zero-page aliases.
|
||||
3. **Pass 3** — name data tables/structures in the 6,909 unreached bytes; release provisional flags.
|
||||
4. **Promotion** — move to a top-level `<name>/copilot/` folder, add full-ROM build (header.s + chr.s + vectors), and write the power-on flow `OVERVIEW.md` in the established style; then it joins the root index's numbered inventory.
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,6 +0,0 @@
|
||||
MEMORY {
|
||||
PRG: start = $C000, size = $4000, file = %O, fill = yes;
|
||||
}
|
||||
SEGMENTS {
|
||||
PRG: load = PRG, type = ro;
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
; Lunar Pool (U) application-specific RAM aliases - Pass 1
|
||||
; Generated from every direct zero-page operand in reachable code:
|
||||
; ref counts are reads/writes, `where` lists the referencing addresses.
|
||||
; ZpXX names indicate storage with a role not yet unique enough for a behavioral name;
|
||||
; Pass 2 replaces them with names derived from observed usage.
|
||||
|
||||
Zp00 = $00 ; 22 refs; reads=13 writes=9; used at $CB45, CB49, CB52, CB61, +15 more
|
||||
Zp01 = $01 ; 34 refs; reads=18 writes=16; used at $CA79, CB4D, CB50, CB66, +27 more
|
||||
Zp02 = $02 ; 4 refs; reads=3 writes=1; used at $C3B4, E295, E844, EE45
|
||||
Zp03 = $03 ; 8 refs; reads=4 writes=4; used at $E8E6, E9FB, EE48, EE4A, +1 more
|
||||
Zp04 = $04 ; 3 refs; reads=2 writes=1; used at $F68F, F725
|
||||
Zp05 = $05 ; 12 refs; reads=6 writes=6; used at $E8EB, EE3C, F211, F2AF, +5 more
|
||||
Zp06 = $06 ; 5 refs; reads=2 writes=3; used at $EA00, EE32, F2E5
|
||||
Zp07 = $07 ; 22 refs; reads=16 writes=6; used at $EE55, EE57, EEC7, EF04, +16 more
|
||||
Zp08 = $08 ; 9 refs; reads=6 writes=3; used at $C3B6, F032, F236, F287, +3 more
|
||||
Zp09 = $09 ; 2 refs; reads=1 writes=1; used at $CFC4, D2E7
|
||||
Zp0C = $0C ; 4 refs; reads=2 writes=2; used at $E29A, E300, E309
|
||||
Zp0D = $0D ; 6 refs; reads=3 writes=3; used at $E240, E302, E314, E8F0
|
||||
Zp0E = $0E ; 4 refs; reads=2 writes=2; used at $E245, E31A, F5EE
|
||||
Zp0F = $0F ; 1 refs; reads=0 writes=1; used at $E8A1
|
||||
Zp10 = $10 ; 3 refs; reads=1 writes=2; used at $E3FF, E655, FBC8
|
||||
Zp11 = $11 ; 4 refs; reads=2 writes=2; used at $E405, E659, E6F8, FBCA
|
||||
Zp12 = $12 ; 5 refs; reads=4 writes=1; used at $C0C5, E666, F2A0, FBCC, +1 more
|
||||
Zp13 = $13 ; 6 refs; reads=5 writes=1; used at $E66A, E6FC, E70F, F2A4, +2 more
|
||||
Zp15 = $15 ; 2 refs; reads=1 writes=1; used at $F5F0
|
||||
Zp16 = $16 ; 4 refs; reads=2 writes=2; used at $F080, F14E, F196, F29D
|
||||
Zp17 = $17 ; 4 refs; reads=2 writes=2; used at $F084, F152, F193, F2A2
|
||||
Zp18 = $18 ; 5 refs; reads=3 writes=2; used at $C0CD, E698, E6CA, FC79, +1 more
|
||||
Zp19 = $19 ; 4 refs; reads=2 writes=2; used at $E696, E6ED, FC7B, FCB7
|
||||
Zp1A = $1A ; 2 refs; reads=1 writes=1; used at $FC99, FCCA
|
||||
Zp1B = $1B ; 2 refs; reads=1 writes=1; used at $FC9B, FCCE
|
||||
Zp1C = $1C ; 8 refs; reads=4 writes=4; used at $E61E, E662, EF5A, F1E2, +4 more
|
||||
Zp1D = $1D ; 8 refs; reads=5 writes=3; used at $EF62, EF8A, EFDF, F1E7, +4 more
|
||||
Zp1E = $1E ; 13 refs; reads=9 writes=4; used at $C0C7, C0C9, C0CF, C0D5, +9 more
|
||||
Zp1F = $1F ; 9 refs; reads=6 writes=3; used at $EF74, EF84, EFD9, F1F1, +5 more
|
||||
Zp20 = $20 ; 5 refs; reads=4 writes=1; used at $FBAD, FBEC, FC3A, FC7D, +1 more
|
||||
Zp21 = $21 ; 5 refs; reads=4 writes=1; used at $FBA8, FBF0, FC3E, FC81, +1 more
|
||||
Zp22 = $22 ; 5 refs; reads=4 writes=1; used at $FBBE, FC18, FC51, FC9D, +1 more
|
||||
Zp23 = $23 ; 5 refs; reads=4 writes=1; used at $FBB9, FC1C, FC55, FCA1, +1 more
|
||||
Zp24 = $24 ; 21 refs; reads=9 writes=12; used at $E3D6, E3EF, E6AB, E6BC, +16 more
|
||||
Zp25 = $25 ; 23 refs; reads=11 writes=12; used at $E3D4, E3F5, E6A9, E6C1, +18 more
|
||||
Zp26 = $26 ; 20 refs; reads=11 writes=9; used at $E3C4, E443, E51A, E59F, +15 more
|
||||
Zp27 = $27 ; 5 refs; reads=1 writes=4; used at $E3DD, E448, E51F, E5A4, +1 more
|
||||
Zp28 = $28 ; 8 refs; reads=6 writes=2; used at $E3CE, E67A, E68E, E694, +4 more
|
||||
Zp29 = $29 ; 5 refs; reads=3 writes=2; used at $E3E7, E683, E6AD, F268, +1 more
|
||||
Zp2A = $2A ; 6 refs; reads=3 writes=3; used at $C0D7, E31F, E34D, E373, +2 more
|
||||
Zp2B = $2B ; 4 refs; reads=2 writes=2; used at $E360, E53E, E55D, E57D
|
||||
Zp2C = $2C ; 9 refs; reads=2 writes=7; used at $E3C1, E43E, E50E, E515, +4 more
|
||||
Zp2D = $2D ; 9 refs; reads=2 writes=7; used at $E3DA, E43B, E502, E509, +4 more
|
||||
Zp2E = $2E ; 10 refs; reads=5 writes=5; used at $E487, E4B2, E4D5, E4DE, +6 more
|
||||
Zp2F = $2F ; 6 refs; reads=2 writes=4; used at $E485, E4BB, E4FB, E529, +2 more
|
||||
Zp30 = $30 ; 4 refs; reads=2 writes=2; used at $E39D, E555, E55B, E57B
|
||||
Zp31 = $31 ; 8 refs; reads=4 writes=4; used at $E384, E527, E540, E550, +4 more
|
||||
Zp32 = $32 ; 23 refs; reads=17 writes=6; used at $E413, E417, E457, E46C, +16 more
|
||||
Zp33 = $33 ; 17 refs; reads=12 writes=5; used at $E415, E41B, E429, E455, +10 more
|
||||
Zp34 = $34 ; 17 refs; reads=11 writes=6; used at $E71F, E721, E74F, E763, +11 more
|
||||
Zp35 = $35 ; 14 refs; reads=7 writes=7; used at $E4E0, E4E4, E55F, E56A, +6 more
|
||||
Zp36 = $36 ; 2 refs; reads=1 writes=1; used at $E5F8, E617
|
||||
Zp37 = $37 ; 5 refs; reads=2 writes=3; used at $EBC1, F321, F41B, F41D
|
||||
Zp3B = $3B ; 1 refs; reads=1 writes=0; used at $EBF5
|
||||
Zp49 = $49 ; 2 refs; reads=2 writes=0; used at $C0D1, C0D9
|
||||
Zp5F = $5F ; 6 refs; reads=3 writes=3; used at $C3C0, E85D, E8A6, F2EF, +1 more
|
||||
Zp60 = $60 ; 4 refs; reads=2 writes=2; used at $C00E, C019, C3E0, C3E6
|
||||
Zp61 = $61 ; 2 refs; reads=1 writes=1; used at $F521
|
||||
Zp65 = $65 ; 2 refs; reads=1 writes=1; used at $F85C
|
||||
Zp67 = $67 ; 1 refs; reads=1 writes=0; used at $EBF3
|
||||
Zp68 = $68 ; 2 refs; reads=1 writes=1; used at $C003, C3F7
|
||||
Zp69 = $69 ; 15 refs; reads=11 writes=4; used at $C085, C096, C0BD, C0E9, +10 more
|
||||
Zp6A = $6A ; 6 refs; reads=2 writes=4; used at $C08A, C0EB, C1E7, C401, +1 more
|
||||
Zp6B = $6B ; 31 refs; reads=18 writes=13; used at $C194, C1A8, C205, C219, +26 more
|
||||
Zp6C = $6C ; 12 refs; reads=4 writes=8; used at $C199, C1AD, C209, C217, +7 more
|
||||
Zp6D = $6D ; 16 refs; reads=13 writes=3; used at $C00C, C015, C02C, C02E, +11 more
|
||||
Zp6E = $6E ; 6 refs; reads=3 writes=3; used at $C0CB, C231, C283, C39F, +2 more
|
||||
Zp6F = $6F ; 14 refs; reads=6 writes=8; used at $C024, C23F, C26A, C275, +9 more
|
||||
Zp70 = $70 ; 5 refs; reads=1 writes=4; used at $C072, F786, F7F4, F826, +1 more
|
||||
Zp72 = $72 ; 1 refs; reads=1 writes=0; used at $F85A
|
||||
Zp74 = $74 ; 5 refs; reads=3 writes=2; used at $C0DB, EBF1, F85E
|
||||
Zp7F = $7F ; 2 refs; reads=0 writes=2; used at $E832, FA93
|
||||
Zp81 = $81 ; 1 refs; reads=0 writes=1; used at $E27E
|
||||
Zp84 = $84 ; 1 refs; reads=1 writes=0; used at $C0D3
|
||||
Zp85 = $85 ; 1 refs; reads=0 writes=1; used at $E9A0
|
||||
Zp86 = $86 ; 1 refs; reads=0 writes=1; used at $E995
|
||||
Zp87 = $87 ; 1 refs; reads=0 writes=1; used at $E98A
|
||||
Zp89 = $89 ; 1 refs; reads=0 writes=1; used at $E963
|
||||
Zp8A = $8A ; 4 refs; reads=4 writes=0; used at $C0DD, C0DF, C0E1, C0E3
|
||||
Zp8B = $8B ; 1 refs; reads=0 writes=1; used at $EDE2
|
||||
Zp8F = $8F ; 2 refs; reads=0 writes=2; used at $E84B, EDDD
|
||||
Zp92 = $92 ; 1 refs; reads=0 writes=1; used at $EDD8
|
||||
ZpA0 = $A0 ; 1 refs; reads=0 writes=1; used at $CC50
|
||||
ZpA5 = $A5 ; 1 refs; reads=1 writes=0; used at $F0CF
|
||||
ZpAA = $AA ; 1 refs; reads=1 writes=0; used at $C0E5
|
||||
ZpC0 = $C0 ; 2 refs; reads=2 writes=0; used at $C0C0, C0C2
|
||||
ZpD0 = $D0 ; 5 refs; reads=3 writes=2; used at $CC05, CC36, CC4B, CC7F
|
||||
ZpD1 = $D1 ; 2 refs; reads=0 writes=2; used at $CC19, CC47
|
||||
ZpD2 = $D2 ; 1 refs; reads=0 writes=1; used at $CC3C
|
||||
ZpD3 = $D3 ; 1 refs; reads=0 writes=1; used at $CC40
|
||||
ZpE8 = $E8 ; 4 refs; reads=2 writes=2; used at $CCC5, CCE2, F7BA, F7BC
|
||||
ZpE9 = $E9 ; 3 refs; reads=2 writes=1; used at $CCCF, F7AB, F7C2
|
||||
ZpEA = $EA ; 3 refs; reads=2 writes=1; used at $CCCA, F7A9, F7C0
|
||||
ZpEB = $EB ; 2 refs; reads=0 writes=2; used at $CCDC, F7B6
|
||||
ZpEC = $EC ; 1 refs; reads=0 writes=1; used at $F7B2
|
||||
ZpED = $ED ; 3 refs; reads=1 writes=2; used at $CC12, CC34, CC8A
|
||||
ZpEE = $EE ; 9 refs; reads=6 writes=3; used at $CBFD, CC17, CC2E, CC45, +4 more
|
||||
ZpEF = $EF ; 5 refs; reads=3 writes=2; used at $CAB4, CAB6, CDBB, CDC9, +1 more
|
||||
ZpF0 = $F0 ; 14 refs; reads=9 writes=5; used at $CA38, CA3F, CA48, CA4C, +8 more
|
||||
ZpF1 = $F1 ; 9 refs; reads=5 writes=4; used at $CA24, CA2B, CA2E, CA32, +4 more
|
||||
ZpF2 = $F2 ; 6 refs; reads=3 writes=3; used at $CA68, CA7F, CA88, CB19, +2 more
|
||||
ZpF3 = $F3 ; 5 refs; reads=2 writes=3; used at $CA6C, CA83, CA8C, CD4B, +1 more
|
||||
ZpF4 = $F4 ; 4 refs; reads=2 writes=2; used at $CC20, CC3A, FF01
|
||||
ZpF5 = $F5 ; 2 refs; reads=1 writes=1; used at $CC24, CC3E
|
||||
ZpF6 = $F6 ; 68 refs; reads=35 writes=33; used at $CAFB, CAFD, CB01, CB05, +52 more
|
||||
ZpF7 = $F7 ; 42 refs; reads=20 writes=22; used at $CAF9, CAFF, CB03, CB07, +29 more
|
||||
ZpF8 = $F8 ; 50 refs; reads=27 writes=23; used at $CFB3, D242, D251, D273, +40 more
|
||||
ZpF9 = $F9 ; 35 refs; reads=19 writes=16; used at $CFAE, D11D, D120, D24C, +30 more
|
||||
ZpFA = $FA ; 64 refs; reads=24 writes=40; used at $CB71, CB87, CB95, CB9B, +57 more
|
||||
ZpFB = $FB ; 63 refs; reads=25 writes=38; used at $CB9D, CBA3, CBCD, CBD5, +54 more
|
||||
ZpFC = $FC ; 135 refs; reads=55 writes=80; used at $CAA8, CB97, CB99, CBAB, +115 more
|
||||
ZpFD = $FD ; 101 refs; reads=41 writes=60; used at $CAA3, CB9F, CBA1, CBA9, +84 more
|
||||
ZpFE = $FE ; 28 refs; reads=15 writes=13; used at $CDD8, CE19, CF9C, CFA8, +24 more
|
||||
ZpFF = $FF ; 16 refs; reads=7 writes=9; used at $CDD6, CE14, CF9F, CFD7, +12 more
|
||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -1,595 +0,0 @@
|
||||
al 00FF65 .NmiHandler
|
||||
al 00FF64 .IrqHandler
|
||||
al 00FF5B .Label_FF5B
|
||||
al 00FF56 .Label_FF56
|
||||
al 00FF50 .Label_FF50
|
||||
al 00FF43 .Label_FF43
|
||||
al 00FF3D .Label_FF3D
|
||||
al 00FF2B .Label_FF2B
|
||||
al 00FF25 .Label_FF25
|
||||
al 00FF18 .Label_FF18
|
||||
al 00FF11 .Label_FF11
|
||||
al 00FF0E .Label_FF0E
|
||||
al 00FEFE .Label_FEFE
|
||||
al 00FECD .Label_FECD
|
||||
al 00FEBD .Label_FEBD
|
||||
al 00FEC5 .Label_FEC5
|
||||
al 00FEA8 .Label_FEA8
|
||||
al 00FE95 .Label_FE95
|
||||
al 00FE8E .Label_FE8E
|
||||
al 00FE6A .Label_FE6A
|
||||
al 00FE5A .Label_FE5A
|
||||
al 00FE4A .Label_FE4A
|
||||
al 00FE49 .Label_FE49
|
||||
al 00FE37 .Label_FE37
|
||||
al 00FE36 .Label_FE36
|
||||
al 00FE24 .Label_FE24
|
||||
al 00FE17 .Label_FE17
|
||||
al 00FE1A .Label_FE1A
|
||||
al 00FE1F .Label_FE1F
|
||||
al 00FE0E .Label_FE0E
|
||||
al 00FE06 .Label_FE06
|
||||
al 00FDFE .Label_FDFE
|
||||
al 00FDFA .Label_FDFA
|
||||
al 00FDE0 .Label_FDE0
|
||||
al 00FDD8 .Label_FDD8
|
||||
al 00FDD4 .Label_FDD4
|
||||
al 00FDBF .Label_FDBF
|
||||
al 00FDAA .Label_FDAA
|
||||
al 00FDA8 .Label_FDA8
|
||||
al 00FD98 .Label_FD98
|
||||
al 00FD8B .Label_FD8B
|
||||
al 00FD85 .Label_FD85
|
||||
al 00FD88 .Label_FD88
|
||||
al 00FD60 .Label_FD60
|
||||
al 00FD32 .Label_FD32
|
||||
al 00FD2D .Label_FD2D
|
||||
al 00FC6C .Label_FC6C
|
||||
al 00FBD1 .Label_FBD1
|
||||
al 00FBC2 .Label_FBC2
|
||||
al 00FBA5 .Label_FBA5
|
||||
al 00FBC1 .Label_FBC1
|
||||
al 00FB99 .Label_FB99
|
||||
al 00FB90 .Label_FB90
|
||||
al 00FB87 .Label_FB87
|
||||
al 00FB8D .Label_FB8D
|
||||
al 00FB7A .Label_FB7A
|
||||
al 00FB69 .Label_FB69
|
||||
al 00FB4C .Label_FB4C
|
||||
al 00FB38 .Label_FB38
|
||||
al 00FB39 .Label_FB39
|
||||
al 00FB55 .Label_FB55
|
||||
al 00FB2C .Label_FB2C
|
||||
al 00FAF9 .Label_FAF9
|
||||
al 00FAB1 .Label_FAB1
|
||||
al 00FAB4 .Label_FAB4
|
||||
al 00FA99 .Label_FA99
|
||||
al 00FA8D .Label_FA8D
|
||||
al 00FA8B .Label_FA8B
|
||||
al 00FA7F .Label_FA7F
|
||||
al 00FA7D .Label_FA7D
|
||||
al 00FA6F .Label_FA6F
|
||||
al 00FA6D .Label_FA6D
|
||||
al 00FA5F .Label_FA5F
|
||||
al 00FA56 .Label_FA56
|
||||
al 00FA4A .Label_FA4A
|
||||
al 00FA40 .Label_FA40
|
||||
al 00FA34 .Label_FA34
|
||||
al 00FA2B .Label_FA2B
|
||||
al 00FA1F .Label_FA1F
|
||||
al 00FA26 .Label_FA26
|
||||
al 00FA07 .Label_FA07
|
||||
al 00F9F9 .Label_F9F9
|
||||
al 00F9E4 .Label_F9E4
|
||||
al 00F9D9 .Label_F9D9
|
||||
al 00F9D6 .Label_F9D6
|
||||
al 00F9CE .Label_F9CE
|
||||
al 00F9BD .Label_F9BD
|
||||
al 00F9B0 .Label_F9B0
|
||||
al 00F9AD .Label_F9AD
|
||||
al 00F9A0 .Label_F9A0
|
||||
al 00F998 .Label_F998
|
||||
al 00F990 .Label_F990
|
||||
al 00F88A .Label_F88A
|
||||
al 00F87F .Label_F87F
|
||||
al 00F872 .Label_F872
|
||||
al 00F867 .Label_F867
|
||||
al 00F84C .Label_F84C
|
||||
al 00F81A .Label_F81A
|
||||
al 00F7E8 .Label_F7E8
|
||||
al 00F7BC .Label_F7BC
|
||||
al 00F7A7 .Label_F7A7
|
||||
al 00F7A5 .Label_F7A5
|
||||
al 00F77A .Label_F77A
|
||||
al 00F73F .Label_F73F
|
||||
al 00F728 .Label_F728
|
||||
al 00F725 .Label_F725
|
||||
al 00F71A .Label_F71A
|
||||
al 00F6CF .Label_F6CF
|
||||
al 00F6C1 .Label_F6C1
|
||||
al 00F69D .Label_F69D
|
||||
al 00F683 .Label_F683
|
||||
al 00F67D .Label_F67D
|
||||
al 00F674 .Label_F674
|
||||
al 00F66B .Label_F66B
|
||||
al 00F669 .Label_F669
|
||||
al 00F654 .Label_F654
|
||||
al 00F5D6 .Label_F5D6
|
||||
al 00F5C6 .Label_F5C6
|
||||
al 00F585 .Label_F585
|
||||
al 00F574 .Label_F574
|
||||
al 00F56C .Label_F56C
|
||||
al 00F557 .Label_F557
|
||||
al 00F54C .Label_F54C
|
||||
al 00F542 .Label_F542
|
||||
al 00F540 .Label_F540
|
||||
al 00F4B1 .Label_F4B1
|
||||
al 00F4DF .Label_F4DF
|
||||
al 00F49B .Label_F49B
|
||||
al 00F4F6 .Label_F4F6
|
||||
al 00F487 .Label_F487
|
||||
al 00F476 .Label_F476
|
||||
al 00F457 .Label_F457
|
||||
al 00F44D .Label_F44D
|
||||
al 00F435 .Label_F435
|
||||
al 00F41B .Label_F41B
|
||||
al 00F413 .Label_F413
|
||||
al 00F410 .Label_F410
|
||||
al 00F406 .Label_F406
|
||||
al 00F3E4 .Label_F3E4
|
||||
al 00F3D2 .Label_F3D2
|
||||
al 00F3AD .Label_F3AD
|
||||
al 00F3BB .Label_F3BB
|
||||
al 00F387 .Label_F387
|
||||
al 00F36E .Label_F36E
|
||||
al 00F377 .Label_F377
|
||||
al 00F365 .Label_F365
|
||||
al 00F344 .Label_F344
|
||||
al 00F33D .Label_F33D
|
||||
al 00F341 .Label_F341
|
||||
al 00F327 .Label_F327
|
||||
al 00F31F .Label_F31F
|
||||
al 00F312 .Label_F312
|
||||
al 00F30F .Label_F30F
|
||||
al 00F302 .Label_F302
|
||||
al 00F2EC .Label_F2EC
|
||||
al 00F2E5 .Label_F2E5
|
||||
al 00F2DB .Label_F2DB
|
||||
al 00F2CB .Label_F2CB
|
||||
al 00F270 .Label_F270
|
||||
al 00F25B .Label_F25B
|
||||
al 00F241 .Label_F241
|
||||
al 00F244 .Label_F244
|
||||
al 00F238 .Label_F238
|
||||
al 00F233 .Label_F233
|
||||
al 00F225 .Label_F225
|
||||
al 00F221 .Label_F221
|
||||
al 00F218 .Label_F218
|
||||
al 00F211 .Label_F211
|
||||
al 00F206 .Label_F206
|
||||
al 00F1F6 .Label_F1F6
|
||||
al 00F1E2 .Label_F1E2
|
||||
al 00F1D3 .Label_F1D3
|
||||
al 00F1B9 .Label_F1B9
|
||||
al 00F1AF .Label_F1AF
|
||||
al 00F1BC .Label_F1BC
|
||||
al 00F19A .Label_F19A
|
||||
al 00F193 .Label_F193
|
||||
al 00F16A .Label_F16A
|
||||
al 00F149 .Label_F149
|
||||
al 00F13F .Label_F13F
|
||||
al 00F148 .Label_F148
|
||||
al 00F125 .Label_F125
|
||||
al 00F0EF .Label_F0EF
|
||||
al 00F0DF .Label_F0DF
|
||||
al 00F0DC .Label_F0DC
|
||||
al 00F0CE .Label_F0CE
|
||||
al 00F07B .Label_F07B
|
||||
al 00F071 .Label_F071
|
||||
al 00F07E .Label_F07E
|
||||
al 00F04D .Label_F04D
|
||||
al 00F031 .Label_F031
|
||||
al 00F019 .Label_F019
|
||||
al 00F017 .Label_F017
|
||||
al 00F037 .Label_F037
|
||||
al 00EFF5 .Label_EFF5
|
||||
al 00F045 .Label_F045
|
||||
al 00EFD9 .Label_EFD9
|
||||
al 00EFD5 .Label_EFD5
|
||||
al 00EFB4 .Label_EFB4
|
||||
al 00EFB8 .Label_EFB8
|
||||
al 00EF84 .Label_EF84
|
||||
al 00EF53 .Label_EF53
|
||||
al 00EF50 .Label_EF50
|
||||
al 00EF3A .Label_EF3A
|
||||
al 00EF31 .Label_EF31
|
||||
al 00EF27 .Label_EF27
|
||||
al 00EEF0 .Label_EEF0
|
||||
al 00EEE0 .Label_EEE0
|
||||
al 00EEE6 .Label_EEE6
|
||||
al 00EEB9 .Label_EEB9
|
||||
al 00EE80 .Label_EE80
|
||||
al 00EE76 .Label_EE76
|
||||
al 00EE79 .Label_EE79
|
||||
al 00EE6F .Label_EE6F
|
||||
al 00EE57 .Label_EE57
|
||||
al 00EE53 .Label_EE53
|
||||
al 00EE3E .Label_EE3E
|
||||
al 00EE3A .Label_EE3A
|
||||
al 00EE2C .Label_EE2C
|
||||
al 00EE30 .Label_EE30
|
||||
al 00EDBA .Label_EDBA
|
||||
al 00EDB7 .Label_EDB7
|
||||
al 00ED8B .Label_ED8B
|
||||
al 00ED86 .Label_ED86
|
||||
al 00ED5D .Label_ED5D
|
||||
al 00ED4F .Label_ED4F
|
||||
al 00EBB0 .Label_EBB0
|
||||
al 00E9CC .Label_E9CC
|
||||
al 00E9CA .Label_E9CA
|
||||
al 00E980 .Label_E980
|
||||
al 00E974 .Label_E974
|
||||
al 00E971 .Label_E971
|
||||
al 00E95D .Label_E95D
|
||||
al 00E947 .Label_E947
|
||||
al 00E928 .Label_E928
|
||||
al 00E923 .Label_E923
|
||||
al 00E8FF .Label_E8FF
|
||||
al 00E8B3 .Label_E8B3
|
||||
al 00E88F .Label_E88F
|
||||
al 00E882 .Label_E882
|
||||
al 00E880 .Label_E880
|
||||
al 00E852 .Label_E852
|
||||
al 00E848 .Label_E848
|
||||
al 00E830 .Label_E830
|
||||
al 00E81E .Label_E81E
|
||||
al 00E817 .Label_E817
|
||||
al 00E80C .Reset
|
||||
al 00E802 .Label_E802
|
||||
al 00E7C0 .Label_E7C0
|
||||
al 00E7B5 .Label_E7B5
|
||||
al 00E7B1 .Label_E7B1
|
||||
al 00E78B .Label_E78B
|
||||
al 00E7A6 .Label_E7A6
|
||||
al 00E771 .Label_E771
|
||||
al 00E76D .Label_E76D
|
||||
al 00E748 .Label_E748
|
||||
al 00E763 .Label_E763
|
||||
al 00E721 .Label_E721
|
||||
al 00E71D .Label_E71D
|
||||
al 00E71B .Label_E71B
|
||||
al 00E71C .Label_E71C
|
||||
al 00E706 .Label_E706
|
||||
al 00E70F .Label_E70F
|
||||
al 00E6F7 .Label_E6F7
|
||||
al 00E6F8 .Label_E6F8
|
||||
al 00E6E4 .Label_E6E4
|
||||
al 00E6ED .Label_E6ED
|
||||
al 00E6D9 .Label_E6D9
|
||||
al 00E6D0 .Label_E6D0
|
||||
al 00E696 .Label_E696
|
||||
al 00E68C .Label_E68C
|
||||
al 00E683 .Label_E683
|
||||
al 00E67A .Label_E67A
|
||||
al 00E63E .Label_E63E
|
||||
al 00E60B .Label_E60B
|
||||
al 00E60A .Label_E60A
|
||||
al 00E5F2 .Label_E5F2
|
||||
al 00E5DF .Label_E5DF
|
||||
al 00E5E7 .Label_E5E7
|
||||
al 00E5FE .Label_E5FE
|
||||
al 00E598 .Label_E598
|
||||
al 00E586 .Label_E586
|
||||
al 00E582 .Label_E582
|
||||
al 00E572 .Label_E572
|
||||
al 00E570 .Label_E570
|
||||
al 00E564 .Label_E564
|
||||
al 00E57B .Label_E57B
|
||||
al 00E550 .Label_E550
|
||||
al 00E54A .Label_E54A
|
||||
al 00E53E .Label_E53E
|
||||
al 00E517 .Label_E517
|
||||
al 00E50B .Label_E50B
|
||||
al 00E4F9 .Label_E4F9
|
||||
al 00E4DC .Label_E4DC
|
||||
al 00E4E6 .Label_E4E6
|
||||
al 00E4C1 .Label_E4C1
|
||||
al 00E4B9 .Label_E4B9
|
||||
al 00E4AA .Label_E4AA
|
||||
al 00E48D .Label_E48D
|
||||
al 00E473 .Label_E473
|
||||
al 00E43B .Label_E43B
|
||||
al 00E47B .Label_E47B
|
||||
al 00E429 .Label_E429
|
||||
al 00E417 .Label_E417
|
||||
al 00E415 .Label_E415
|
||||
al 00E40E .Label_E40E
|
||||
al 00E405 .Label_E405
|
||||
al 00E3FB .Label_E3FB
|
||||
al 00E3E7 .Label_E3E7
|
||||
al 00E3CE .Label_E3CE
|
||||
al 00E3BF .Label_E3BF
|
||||
al 00E3BE .Label_E3BE
|
||||
al 00E3B1 .Label_E3B1
|
||||
al 00E3AB .Label_E3AB
|
||||
al 00E3AF .Label_E3AF
|
||||
al 00E39C .Label_E39C
|
||||
al 00E392 .Label_E392
|
||||
al 00E39A .Label_E39A
|
||||
al 00E381 .Label_E381
|
||||
al 00E37C .Label_E37C
|
||||
al 00E370 .Label_E370
|
||||
al 00E367 .Label_E367
|
||||
al 00E364 .Label_E364
|
||||
al 00E34A .Label_E34A
|
||||
al 00E349 .Label_E349
|
||||
al 00E341 .Label_E341
|
||||
al 00E333 .Label_E333
|
||||
al 00E322 .Label_E322
|
||||
al 00E31D .Label_E31D
|
||||
al 00E318 .Label_E318
|
||||
al 00E30F .Label_E30F
|
||||
al 00E30D .Label_E30D
|
||||
al 00E304 .Label_E304
|
||||
al 00E2FE .Label_E2FE
|
||||
al 00E2DB .Label_E2DB
|
||||
al 00E2D7 .Label_E2D7
|
||||
al 00E2C8 .Label_E2C8
|
||||
al 00E2BB .Label_E2BB
|
||||
al 00E2B2 .Label_E2B2
|
||||
al 00E2A2 .Label_E2A2
|
||||
al 00E286 .Label_E286
|
||||
al 00E275 .Label_E275
|
||||
al 00E270 .Label_E270
|
||||
al 00E25C .Label_E25C
|
||||
al 00E24F .Label_E24F
|
||||
al 00E240 .Label_E240
|
||||
al 00E22F .Label_E22F
|
||||
al 00E215 .Label_E215
|
||||
al 00E20D .Label_E20D
|
||||
al 00E202 .Label_E202
|
||||
al 00E1F2 .Label_E1F2
|
||||
al 00E1ED .Label_E1ED
|
||||
al 00E1BB .Label_E1BB
|
||||
al 00E1AE .Label_E1AE
|
||||
al 00E1AC .Label_E1AC
|
||||
al 00E1E5 .Label_E1E5
|
||||
al 00E1A4 .Label_E1A4
|
||||
al 00E19D .Label_E19D
|
||||
al 00E194 .Label_E194
|
||||
al 00E17C .Label_E17C
|
||||
al 00E171 .Label_E171
|
||||
al 00E162 .Label_E162
|
||||
al 00E15D .Label_E15D
|
||||
al 00E147 .Label_E147
|
||||
al 00E145 .Label_E145
|
||||
al 00E14E .Label_E14E
|
||||
al 00E118 .Label_E118
|
||||
al 00E113 .Label_E113
|
||||
al 00E0E7 .Label_E0E7
|
||||
al 00E0E3 .Label_E0E3
|
||||
al 00E0FE .Label_E0FE
|
||||
al 00E0E1 .Label_E0E1
|
||||
al 00E104 .Label_E104
|
||||
al 00E0BA .Label_E0BA
|
||||
al 00E0B1 .Label_E0B1
|
||||
al 00E0A4 .Label_E0A4
|
||||
al 00E089 .Label_E089
|
||||
al 00E094 .Label_E094
|
||||
al 00E079 .Label_E079
|
||||
al 00E055 .Label_E055
|
||||
al 00E062 .Label_E062
|
||||
al 00E048 .Label_E048
|
||||
al 00E040 .Label_E040
|
||||
al 00E02F .Label_E02F
|
||||
al 00E01E .Label_E01E
|
||||
al 00D4ED .Label_D4ED
|
||||
al 00D4E4 .Label_D4E4
|
||||
al 00D4CC .Label_D4CC
|
||||
al 00D4C4 .Label_D4C4
|
||||
al 00D4BD .Label_D4BD
|
||||
al 00D4B6 .Label_D4B6
|
||||
al 00D4AF .Label_D4AF
|
||||
al 00D4AD .Label_D4AD
|
||||
al 00D48F .Label_D48F
|
||||
al 00D488 .Label_D488
|
||||
al 00D487 .Label_D487
|
||||
al 00D45E .Label_D45E
|
||||
al 00D444 .Label_D444
|
||||
al 00D449 .Label_D449
|
||||
al 00D45D .Label_D45D
|
||||
al 00D41F .Label_D41F
|
||||
al 00D405 .Label_D405
|
||||
al 00D400 .Label_D400
|
||||
al 00D3E5 .Label_D3E5
|
||||
al 00D41E .Label_D41E
|
||||
al 00D3D3 .Label_D3D3
|
||||
al 00D3CB .Label_D3CB
|
||||
al 00D3BF .Label_D3BF
|
||||
al 00D3B3 .Label_D3B3
|
||||
al 00D3A0 .Label_D3A0
|
||||
al 00D39F .Label_D39F
|
||||
al 00D392 .Label_D392
|
||||
al 00D31B .Label_D31B
|
||||
al 00D317 .Label_D317
|
||||
al 00D30D .Label_D30D
|
||||
al 00D2DF .Label_D2DF
|
||||
al 00D300 .Label_D300
|
||||
al 00D2D4 .Label_D2D4
|
||||
al 00D29C .Label_D29C
|
||||
al 00D291 .Label_D291
|
||||
al 00D28F .Label_D28F
|
||||
al 00D22C .Label_D22C
|
||||
al 00D222 .Label_D222
|
||||
al 00D212 .Label_D212
|
||||
al 00D20A .Label_D20A
|
||||
al 00D1BA .Label_D1BA
|
||||
al 00D197 .Label_D197
|
||||
al 00D174 .Label_D174
|
||||
al 00D151 .Label_D151
|
||||
al 00D129 .Label_D129
|
||||
al 00D12C .Label_D12C
|
||||
al 00D0F3 .Label_D0F3
|
||||
al 00D0E4 .Label_D0E4
|
||||
al 00D0D5 .Label_D0D5
|
||||
al 00D073 .Label_D073
|
||||
al 00D088 .Label_D088
|
||||
al 00D0C3 .Label_D0C3
|
||||
al 00D0B1 .Label_D0B1
|
||||
al 00D047 .Label_D047
|
||||
al 00D03D .Label_D03D
|
||||
al 00D05B .Label_D05B
|
||||
al 00D02D .Label_D02D
|
||||
al 00D026 .Label_D026
|
||||
al 00D017 .Label_D017
|
||||
al 00D00D .Label_D00D
|
||||
al 00D004 .Label_D004
|
||||
al 00CFE5 .Label_CFE5
|
||||
al 00CFDE .Label_CFDE
|
||||
al 00CFA6 .Label_CFA6
|
||||
al 00CF9B .Label_CF9B
|
||||
al 00CE25 .Label_CE25
|
||||
al 00CE14 .Label_CE14
|
||||
al 00CDF4 .Label_CDF4
|
||||
al 00CDE4 .Label_CDE4
|
||||
al 00CE09 .Label_CE09
|
||||
al 00CDDA .Label_CDDA
|
||||
al 00CDD3 .Label_CDD3
|
||||
al 00CDB9 .Label_CDB9
|
||||
al 00CDAE .Label_CDAE
|
||||
al 00CD9D .Label_CD9D
|
||||
al 00CD73 .Label_CD73
|
||||
al 00CD7E .Label_CD7E
|
||||
al 00CD65 .Label_CD65
|
||||
al 00CD5F .Label_CD5F
|
||||
al 00CD58 .Label_CD58
|
||||
al 00CD3C .Label_CD3C
|
||||
al 00CD1C .Label_CD1C
|
||||
al 00CD0E .Label_CD0E
|
||||
al 00CCF3 .Label_CCF3
|
||||
al 00CCD9 .Label_CCD9
|
||||
al 00CCE5 .Label_CCE5
|
||||
al 00CCA9 .Label_CCA9
|
||||
al 00CCBA .Label_CCBA
|
||||
al 00CC91 .Label_CC91
|
||||
al 00CC8F .Label_CC8F
|
||||
al 00CC7D .Label_CC7D
|
||||
al 00CC7B .Label_CC7B
|
||||
al 00CC49 .Label_CC49
|
||||
al 00CC5E .Label_CC5E
|
||||
al 00CC2E .Label_CC2E
|
||||
al 00CC29 .Label_CC29
|
||||
al 00CC12 .Label_CC12
|
||||
al 00CC05 .Label_CC05
|
||||
al 00CBFD .Label_CBFD
|
||||
al 00CBFB .Label_CBFB
|
||||
al 00CBF4 .Label_CBF4
|
||||
al 00CBE5 .Label_CBE5
|
||||
al 00CBDC .Label_CBDC
|
||||
al 00CBC9 .Label_CBC9
|
||||
al 00CBC8 .Label_CBC8
|
||||
al 00CBB9 .Label_CBB9
|
||||
al 00CBB2 .Label_CBB2
|
||||
al 00CBAE .Label_CBAE
|
||||
al 00CBA9 .Label_CBA9
|
||||
al 00CB92 .Label_CB92
|
||||
al 00CB82 .Label_CB82
|
||||
al 00CB7F .Label_CB7F
|
||||
al 00CB6F .Label_CB6F
|
||||
al 00CB69 .Label_CB69
|
||||
al 00CB66 .Label_CB66
|
||||
al 00CB61 .Label_CB61
|
||||
al 00CB5A .Label_CB5A
|
||||
al 00CB4F .Label_CB4F
|
||||
al 00CB50 .Label_CB50
|
||||
al 00CB45 .Label_CB45
|
||||
al 00CB39 .Label_CB39
|
||||
al 00CB30 .Label_CB30
|
||||
al 00CB2B .Label_CB2B
|
||||
al 00CB25 .Label_CB25
|
||||
al 00CB1D .Label_CB1D
|
||||
al 00CAF7 .Label_CAF7
|
||||
al 00CABD .Label_CABD
|
||||
al 00CAB9 .Label_CAB9
|
||||
al 00CAAE .Label_CAAE
|
||||
al 00CAA3 .Label_CAA3
|
||||
al 00CA8F .Label_CA8F
|
||||
al 00CA86 .Label_CA86
|
||||
al 00CA77 .Label_CA77
|
||||
al 00CA6F .Label_CA6F
|
||||
al 00CA60 .Label_CA60
|
||||
al 00CA52 .Label_CA52
|
||||
al 00CA48 .Label_CA48
|
||||
al 00CA42 .Label_CA42
|
||||
al 00CA3C .Label_CA3C
|
||||
al 00CA38 .Label_CA38
|
||||
al 00CA2E .Label_CA2E
|
||||
al 00CA21 .Label_CA21
|
||||
al 00C475 .Label_C475
|
||||
al 00C445 .Label_C445
|
||||
al 00C471 .Label_C471
|
||||
al 00C429 .Label_C429
|
||||
al 00C415 .Label_C415
|
||||
al 00C416 .Label_C416
|
||||
al 00C409 .Label_C409
|
||||
al 00C404 .Label_C404
|
||||
al 00C401 .Label_C401
|
||||
al 00C3FC .Label_C3FC
|
||||
al 00C3F5 .Label_C3F5
|
||||
al 00C3F0 .Label_C3F0
|
||||
al 00C3EB .Label_C3EB
|
||||
al 00C3E0 .Label_C3E0
|
||||
al 00C3DA .Label_C3DA
|
||||
al 00C3C7 .Label_C3C7
|
||||
al 00C3BE .Label_C3BE
|
||||
al 00C3BC .Label_C3BC
|
||||
al 00C3AE .Label_C3AE
|
||||
al 00C392 .Label_C392
|
||||
al 00C38A .Label_C38A
|
||||
al 00C39F .Label_C39F
|
||||
al 00C331 .Label_C331
|
||||
al 00C332 .Label_C332
|
||||
al 00C321 .Label_C321
|
||||
al 00C32A .Label_C32A
|
||||
al 00C314 .Label_C314
|
||||
al 00C304 .Label_C304
|
||||
al 00C2FE .Label_C2FE
|
||||
al 00C2EC .Label_C2EC
|
||||
al 00C306 .Label_C306
|
||||
al 00C2CB .Label_C2CB
|
||||
al 00C2CA .Label_C2CA
|
||||
al 00C2BB .Label_C2BB
|
||||
al 00C2B8 .Label_C2B8
|
||||
al 00C2AD .Label_C2AD
|
||||
al 00C29E .Label_C29E
|
||||
al 00C294 .Label_C294
|
||||
al 00C28D .Label_C28D
|
||||
al 00C275 .Label_C275
|
||||
al 00C286 .Label_C286
|
||||
al 00C22F .Label_C22F
|
||||
al 00C21C .Label_C21C
|
||||
al 00C20C .Label_C20C
|
||||
al 00C205 .Label_C205
|
||||
al 00C200 .Label_C200
|
||||
al 00C1DA .Label_C1DA
|
||||
al 00C1D5 .Label_C1D5
|
||||
al 00C1D1 .Label_C1D1
|
||||
al 00C1C0 .Label_C1C0
|
||||
al 00C1A2 .Label_C1A2
|
||||
al 00C18D .Label_C18D
|
||||
al 00C0C0 .Label_C0C0
|
||||
al 00C0A9 .Label_C0A9
|
||||
al 00C0A1 .Label_C0A1
|
||||
al 00C092 .Label_C092
|
||||
al 00C082 .Label_C082
|
||||
al 00C07C .Label_C07C
|
||||
al 00C072 .Label_C072
|
||||
al 00C06A .Label_C06A
|
||||
al 00C054 .Label_C054
|
||||
al 00C05F .Label_C05F
|
||||
al 00C02E .Label_C02E
|
||||
al 00C024 .Label_C024
|
||||
al 00C01B .Label_C01B
|
||||
al 00C00C .Label_C00C
|
||||
al 00C00A .Label_C00A
|
||||
al 00C003 .Label_C003
|
||||
@@ -1,26 +0,0 @@
|
||||
Modules list:
|
||||
-------------
|
||||
prg.o:
|
||||
PRG Offs=000000 Size=004000 Align=00001 Fill=0000
|
||||
|
||||
|
||||
Segment list:
|
||||
-------------
|
||||
Name Start End Size Align
|
||||
----------------------------------------------------
|
||||
PRG 00C000 00FFFF 004000 00001
|
||||
|
||||
|
||||
Exports list by name:
|
||||
---------------------
|
||||
|
||||
|
||||
|
||||
Exports list by value:
|
||||
----------------------
|
||||
|
||||
|
||||
|
||||
Imports list:
|
||||
-------------
|
||||
|
||||
Binary file not shown.
@@ -1,108 +0,0 @@
|
||||
; =============================================================================
|
||||
; Nintendo Entertainment System hardware symbols
|
||||
; =============================================================================
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; PPU registers
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
PPUCTRL = $2000
|
||||
PPUMASK = $2001
|
||||
PPUSTATUS = $2002
|
||||
OAMADDR = $2003
|
||||
OAMDATA = $2004
|
||||
PPUSCROLL = $2005
|
||||
PPUADDR = $2006
|
||||
PPUDATA = $2007
|
||||
|
||||
OAMDMA = $4014
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Controller ports
|
||||
;
|
||||
; $4016:
|
||||
; Write: controller strobe
|
||||
; Read: controller port 1
|
||||
;
|
||||
; $4017:
|
||||
; Read: controller port 2
|
||||
; Write: APU frame counter
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
JOY1 = $4016
|
||||
JOY2 = $4017
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; APU pulse channel 1
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
APUPULSE1CTRL = $4000
|
||||
APUPULSE1SWEEP = $4001
|
||||
APUPULSE1TIMERLO = $4002
|
||||
APUPULSE1TIMERHI = $4003
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; APU pulse channel 2
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
APUPULSE2CTRL = $4004
|
||||
APUPULSE2SWEEP = $4005
|
||||
APUPULSE2TIMERLO = $4006
|
||||
APUPULSE2TIMERHI = $4007
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; APU triangle channel
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
APUTRIANGLECTRL = $4008
|
||||
APUTRIANGLETIMERLO = $400A
|
||||
APUTRIANGLETIMERHI = $400B
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; APU noise channel
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
APUNOISECTRL = $400C
|
||||
APUNOISEPERIOD = $400E
|
||||
APUNOISELENGTH = $400F
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; APU DMC channel
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
APUDMCCTRL = $4010
|
||||
APUDMCDIRECT = $4011
|
||||
APUDMCADDR = $4012
|
||||
APUDMCLENGTH = $4013
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; APU status and frame counter
|
||||
;
|
||||
; $4015:
|
||||
; Write: enable or disable the five APU channels
|
||||
; Read: channel and interrupt status
|
||||
;
|
||||
; $4017:
|
||||
; Write: APU frame-counter mode and IRQ inhibit
|
||||
; Read: controller port 2
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
APUSTATUS = $4015
|
||||
APUFRAMECOUNTER = $4017
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Controller masks
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
PAD_RIGHT = $01
|
||||
PAD_LEFT = $02
|
||||
PAD_DOWN = $04
|
||||
PAD_UP = $08
|
||||
PAD_START = $10
|
||||
PAD_SELECT = $20
|
||||
PAD_B = $40
|
||||
PAD_A = $80
|
||||
|
||||
PAD_HORIZONTAL = PAD_LEFT | PAD_RIGHT
|
||||
PAD_VERTICAL = PAD_UP | PAD_DOWN
|
||||
PAD_DPAD = PAD_HORIZONTAL | PAD_VERTICAL
|
||||
Reference in new issue
Block a user