Promotes Lunar Pool
This commit is contained in:
1 parent
837007843d
commit
62866563ba
53 files changed
+115746
-4100
No files matched your search
@@ -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
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
all: reconstructed_prg.bin verify
|
||||
prg.o: prg.s symbols.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
|
||||
verify: reconstructed_prg.bin prg.bin
|
||||
cmp reconstructed_prg.bin prg.bin
|
||||
@echo BYTE-IDENTICAL
|
||||
clean:
|
||||
rm -f prg.o reconstructed_prg.bin reconstructed.map reconstructed.lbl
|
||||
@@ -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.
|
||||
|
||||
Reference in new issue
Block a user