Files
disasm/_wip/MUSCLE (U)/copilot/zero_page_names.tsv
T
tmerritt 4c644d2a20 Pass 3 for NES PowerPad Test Card (U): name all data tables and VramWrite streams
- Decoded the VramWrite ($E1CC) stream format: <addr hi> <addr lo> <count> <bytes>, $00 terminator
- Named all 9 payload streams ($E4CC-$E7C2, no gaps/overlaps) plus VramWriteSourcePointerTable at $F000
- Split PadBitTableLives into Player1TileTable ($E4B4) and Player2TileTable ($E4C0), 12 entries each (Y=0..11)
- Decoded CHR font (digits $30-$39, letters $3A-$52, space $5F; 'W' missing from the A-Z run)
  and recovered on-screen text including 'PRESS A TO TEST SIDE-A' / 'SIDE-B'
- Documented that the 16 KiB PRG is two byte-identical 8 KiB halves; $C000 copy is dead
- Documented 7 unreached subroutines inside the live code region (kept as .byte per Pass-1 policy)
- Fixed a stray duplicate sentence and stale _wip paths in root OVERVIEW.md

Byte-identical ROM verified.
2026-10-16 20:24:23 -04:00

7.5 KiB

1# MUSCLE (U) zero-page names - Pass 2
2# kind<TAB>old<TAB>new<TAB>note
3zpZp10SourcePointerLoLo byte of the compressed VRAM/attribute stream pointer
4zpZp11SourcePointerHiHi byte of the compressed VRAM/attribute stream pointer
5zpZp12DestinationPointerLoLo byte of the VRAM destination pointer
6zpZp13DestinationPointerHiHi byte of the VRAM destination pointer
7zpZp1ABytecodeStreamPointerLoLo byte of the token-stream pointer, loaded from the $8CEF table
8zpZp1BBytecodeStreamPointerHiHi byte of the token-stream pointer
9zpZp1CBytecodeHandlerPointerLoLo byte of the handler address consumed by jmp ($001C)
10zpZp1DBytecodeHandlerPointerHiHi byte of the handler address consumed by jmp ($001C)
11zpZp1EActorIndexActive player/actor slot (0 or 1) used as an array index
12zpZp21ActorSlotOffsetActorIndex*4; byte offset into the per-actor record arrays
13zpZp22ActorSlotOffsetHiHigh half of the per-actor record offset
14zpZp23ActorFieldOffsetSecond per-actor offset used by the bytecode handlers
15zpZp24FrameCounterLoLow byte of the 16-bit frame counter, incremented once per NMI
16zpZp25FrameCounterHiHigh byte of the 16-bit frame counter
17zpZp26PlayerSpriteIndex1Per-player sprite slot table, first plane
18zpZp27PlayerSpriteIndex2Per-player sprite slot table, second plane
19zpZp28PlayerSpriteIndex3Per-player sprite slot table, third plane
20zpZp29PlayerSpriteIndex4Per-player sprite slot table, fourth plane
21zpZp2APlayerPaletteIndexPer-player palette slot table
22zpZp2BPlayerTileIndexPer-player tile slot table
23zpZp34ActorPosXLoPer-actor 16-bit X scratch, written by the bytecode handlers
24zpZp35ActorPosXHiPer-actor 16-bit X scratch, high byte
25zpZp36ActorPosYPer-actor Y scratch
26zpZp3APlayerPosXLo1Player 1 X position, low byte
27zpZp3CPlayerPosYLo1Player 1 Y position, low byte
28zpZp3EPlayerPosXLo2Player 2 X position, low byte
29zpZp40PlayerPosYLo2Player 2 Y position, low byte
30zpZp41ScriptFlagsScript state byte selected by the bytecode SelectActorSlot handlers
31zpZp43ScriptCounterAPer-actor bytecode counter A
32zpZp44ScriptCounterBPer-actor bytecode counter B
33zpZp45ScriptCounterCPer-actor bytecode counter C
34zpZp47ScriptArgLoPer-actor bytecode argument, low byte
35zpZp48ScriptArgHiPer-actor bytecode argument, high byte
36zpZp4DScriptFlagsLoLow byte of the 16-bit script flag pair
37zpZp4EScriptFlagsHiHigh byte; tested non-zero to gate several bytecode handlers
38zpZp65ActionCooldownFrames to wait before the main loop resumes object updates
39zpZp68ScreenTransitionState0 = idle, negative = entering, positive = leaving
40zpZp6EPlayerBoxOriginXPlayer 1 hitbox origin used by the overlap test
41zpZp70PlayerBoxOriginYPlayer 1 hitbox origin used by the overlap test
42zpZp80SoundVolume1APU channel 1 volume
43zpZp81SoundVolume2APU channel 2 volume
44zpZp82SoundVolume3APU channel 3 volume
45zpZp83SoundVolume4APU channel 4 volume
46zpZp8BPlayerFlashTimerPer-player damage-flash countdown
47zpZp8CPlayerFlashTimer2Per-player damage-flash countdown, second half
48zpZp8DRoundTransitionTimerDecremented by the round-transition state
49zpZp91PlayerPaletteIndexLoLow byte of the player palette index pair
50zpZp92PlayerPaletteIndexHiHigh byte of the player palette index pair
51zpZp94PlayerCount0 = one player, 1 = two players
52zpZp96SubModeFlag$FF entering a sub-mode, $01 leaving it, 0 idle
53zpZpC4SoundEnvelopeMode1APU channel 1 envelope/tone mode nibble
54zpZpC5SoundEnvelopeMode2APU channel 2 envelope/tone mode nibble
55zpZpC6SoundEnvelopeMode3APU channel 3 envelope/tone mode nibble
56zpZpC7SoundEnvelopeMode4APU channel 4 envelope/tone mode nibble
57zpZpC8SoundNoteTimer1APU channel 1 note duration countdown
58zpZpC9SoundNoteTimer2APU channel 2 note duration countdown
59zpZpCASoundNoteTimer3APU channel 3 note duration countdown
60zpZpCBSoundNoteTimer4APU channel 4 note duration countdown
61zpZpCCSoundEnvelopeValue1APU channel 1 envelope byte read from the sequence
62zpZpCDSoundEnvelopeValue2APU channel 2 envelope byte read from the sequence
63zpZpCESoundEnvelopeValue3APU channel 3 envelope byte read from the sequence
64zpZpCFSoundEnvelopeValue4APU channel 4 envelope byte read from the sequence
65zpZpD0SoundChannelStep1APU channel 1 step index into its note table
66zpZpD1SoundChannelStep2APU channel 2 step index into its note table
67zpZpD2SoundChannelStep3APU channel 3 step index into its note table
68zpZpD3SoundChannelStep4APU channel 4 step index into its note table
69zpZpD4SoundSequencePtrLo1APU channel 1 sequence pointer, low byte
70zpZpD5SoundSequencePtrLo2APU channel 2 sequence pointer, low byte
71zpZpD6SoundSequencePtrLo3APU channel 3 sequence pointer, low byte
72zpZpD7SoundSequencePtrLo4APU channel 4 sequence pointer, low byte
73zpZpD8SoundSequencePtrHi1APU channel 1 sequence pointer, high byte
74zpZpD9SoundSequencePtrHi2APU channel 2 sequence pointer, high byte
75zpZpDASoundSequencePtrHi3APU channel 3 sequence pointer, high byte
76zpZpDBSoundSequencePtrHi4APU channel 4 sequence pointer, high byte
77zpZpDCSoundSustainCounter1APU channel 1 sustain/release counter
78zpZpDDSoundSustainCounter2APU channel 2 sustain/release counter
79zpZpDESoundSustainCounter3APU channel 3 sustain/release counter
80zpZpDFSoundSustainCounter4APU channel 4 sustain/release counter
81zpZpE0SoundLastCtrlWrite1Last value written to $4000+4*channel, channel 1
82zpZpE1SoundLastCtrlWrite2Last value written to $4000+4*channel, channel 2
83zpZpE2SoundLastCtrlWrite3Last value written to $4000+4*channel, channel 3
84zpZpE3SoundLastCtrlWrite4Last value written to $4000+4*channel, channel 4
85zpZpE4ApuRegisterOffsetChannel*4, the offset added to $4000/$4001/$4002/$4003
86zpZpE8ApuEnableMaskBit mask of currently enabled APU channels
87zpZpE9SoundMutedBit 7 set suppresses writes to $4015 (write during rendering)
88zpZpEASoundTonePeriodLoComputed tone period, low byte
89zpZpEBSoundTonePeriodHiComputed tone period, high byte
90zpZpECSoundEnvelopeMaskLoComputed envelope bits OR-ed into $4000, low part
91zpZpEDSoundEnvelopeMaskHiComputed envelope bits OR-ed into $4000, high part
92zpZpEESoundReadPointerLoLo byte of the sound sequence read cursor
93zpZpEFSoundReadPointerHiHi byte of the sound sequence read cursor
94zpZpF0PlayerActionStatePer-player action/animation state byte ($80..$FF)
95zpZpF1PlayerActionState2Per-player second action state byte
96zpZpF2ControllerButtonMaskFiltered button bits for this read, per player
97zpZpF3ControllerButtonMask2Filtered button bits, second player
98zpZpF4ControllerButtonsPrevPrevious read's button byte, for edge detection
99zpZpF5ControllerButtonsPrev2Previous read's button byte, second player
100zpZpF6ControllerDPad1Directional bits derived from the button byte
101zpZpF7ControllerDPad2Directional bits derived from the button byte
102zpZpF8ControllerFaceButtons1Face-button bits derived from the button byte
103zpZpF9ControllerFaceButtons2Face-button bits derived from the button byte
104zpZpFAControllerButtons1Raw button byte for player 1 (shadows $4010/$4011 at reset)
105zpZpFBControllerButtons2Raw button byte for player 2 (shadows $4010/$4011 at reset)
106zpZpFCPpuCtrlShadowShadow of the last value written to $2000
107zpZpFDPpuMaskShadowShadow of the last value written to $2001
108zpZpFEPpuScrollXShadow of the first $2005 write
109zpZpFFPpuScrollYShadow of the second $2005 write
110zpZp14VramBlockCountLoLow byte of the 16-bit block counter advanced by AdvanceCountWord
111zpZp15CollisionFlagBitsAccumulator for the overlap bit flags OR-ed together by ComputePlayerOverlapBits