- 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.
6.1 KiB
6.1 KiB
| 1 | 0x8000 | Reset |
|---|---|---|
| 2 | 0x800E | WaitForFirstPpuWarmup |
| 3 | 0x8019 | WaitForSecondPpuWarmup |
| 4 | 0x802C | InitializeGameState |
| 5 | 0x8052 | UpdateNametableFromStream |
| 6 | 0x80AC | StartStageSequence |
| 7 | 0x8132 | UpdateFadeFlashSprites |
| 8 | 0x8164 | InitializeRound |
| 9 | 0x8226 | MainGameLoop |
| 10 | 0x82AC | DivideBy20 |
| 11 | 0x82E1 | SilenceSoundChannels1And3 |
| 12 | 0x82ED | SilenceSoundChannel3 |
| 13 | 0x82FA | StartIntroMusic |
| 14 | 0x82FF | StartMusicSequence |
| 15 | 0x832A | UpdateHudTallyTiles |
| 16 | 0x8353 | UpdateScoreTallyDigits |
| 17 | 0x8372 | WriteScoreTallyDigits |
| 18 | 0x8399 | LoadOamShadowFromTable |
| 19 | 0x83A7 | UpdateActorPositions |
| 20 | 0x845C | UpdateRoundTimers |
| 21 | 0x856C | PlayRoundChangeMusic |
| 22 | 0x8596 | UpdateScrollTarget |
| 23 | 0x8598 | UpdateScrollTargetAlt |
| 24 | 0x8639 | BeginVblankFrame |
| 25 | 0x8644 | ForceRenderingOff |
| 26 | 0x8653 | SetRenderingOffAndSignalVblank |
| 27 | 0x865D | UpdateRoundLogic |
| 28 | 0x86CB | NmiHandler |
| 29 | 0x8751 | FinishNmiUpdates |
| 30 | 0x8759 | FinishNmiRegisters |
| 31 | 0x8764 | IrqHandler |
| 32 | 0x8765 | SetSoundSequenceChannel1 |
| 33 | 0x877C | RunGameStateDispatcher |
| 34 | 0x87BF | UpdateTimersAlt |
| 35 | 0x87D1 | PollControllerStart |
| 36 | 0x87F2 | UpdateFlashCounter |
| 37 | 0x8837 | PlayDeathSequence |
| 38 | 0x8848 | PollControllerBits |
| 39 | 0x885B | PollControllerAndAdvance |
| 40 | 0x886C | PollControllerBitsAlt |
| 41 | 0x887C | SignalVblankComplete |
| 42 | 0x8882 | PollControllerAndCheckRound |
| 43 | 0x88A4 | BuildOamList |
| 44 | 0x88B0 | EmitOamEntry |
| 45 | 0x88EB | EmitOamBlankEntry |
| 46 | 0x88F9 | EmitOamFromTable |
| 47 | 0x88FF | EmitOamAtOffset |
| 48 | 0x8936 | FindFreeOamSlot |
| 49 | 0x8986 | CompactOamList |
| 50 | 0x89CE | ReadControllerAndInit |
| 51 | 0x8A28 | UpdateStageActors |
| 52 | 0x8A5E | SpawnStageActors |
| 53 | 0x8AE8 | UpdateAttributeTable |
| 54 | 0x8B07 | ClearScrollLatch |
| 55 | 0x8B20 | WriteNametableTile |
| 56 | 0x8B33 | ClearAttributeRegion |
| 57 | 0x8B92 | RenderHudDigits |
| 58 | 0x8BEF | RenderHudDigitDescriptor |
| 59 | 0x8BF8 | SetRenderingOn |
| 60 | 0x8C05 | AdvanceAnimationSlot |
| 61 | 0x8C0E | QueueVramTransfer |
| 62 | 0x8C11 | QueueVramTransferAlt |
| 63 | 0x8C65 | ExecuteVramTransfer |
| 64 | 0x8CB8 | QueueVramDescriptor |
| 65 | 0x934B | UpdateActorX |
| 66 | 0x9371 | UpdateActorTile |
| 67 | 0x9374 | UpdateActorTileAlt |
| 68 | 0x94B1 | TestPlayerFacing |
| 69 | 0x94C7 | SelectActorSlot |
| 70 | 0x94C8 | SelectActorSlotAlt |
| 71 | 0x94CF | ClearActorPosition |
| 72 | 0x94D7 | ClearActorFields |
| 73 | 0x94FE | SetActorFlag |
| 74 | 0x9585 | UpdateActorState |
| 75 | 0x95AE | ComputeActorLeftEdge |
| 76 | 0x95D2 | ComputeActorRightEdge |
| 77 | 0x95D9 | CompareActorToLimit |
| 78 | 0x9653 | SetActorTileFromPalette |
| 79 | 0x9667 | StoreActorTile |
| 80 | 0x969E | AdvanceActorCounter |
| 81 | 0x96AA | SetActorTileValue |
| 82 | 0x96C8 | TestActorCollisionFlag |
| 83 | 0x96F7 | ComputeActorLeftEdgeAlt |
| 84 | 0x9722 | ComputeActorRightEdgeAlt |
| 85 | 0x9729 | TestActorRange |
| 86 | 0x9732 | MoveActorByStep |
| 87 | 0x97BC | SetActorAnimation63 |
| 88 | 0x97C0 | SetActorAnimation62 |
| 89 | 0x97C4 | SetActorAnimation61 |
| 90 | 0x97D5 | UpdateActorAnimation |
| 91 | 0x97FC | TestAnimationSlot |
| 92 | 0x982A | ComputeActorLeftEdgeAt |
| 93 | 0x9858 | ComputeActorRightEdgeAt |
| 94 | 0x985F | TestActorValue |
| 95 | 0x98E6 | ComputeActorLeftEdgeAlt2 |
| 96 | 0x9911 | UpdateActorTileFromIndex |
| 97 | 0x9918 | UpdateActorTileFromIndexAlt |
| 98 | 0x99A3 | SetSoundSequenceChannel2 |
| 99 | 0x99E2 | LookupActorTileId |
| 100 | 0x99E4 | LookupActorTileIdAlt |
| 101 | 0x9A24 | StoreActorCoordinates |
| 102 | 0x9A2E | StoreActorCoordinatesAlt |
| 103 | 0x9A3F | FlipActorFacing |
| 104 | 0x9A4E | SpawnActorPair |
| 105 | 0x9A6B | SpawnActorPairAlt |
| 106 | 0x9AE8 | RunBytecodeInterpreter |
| 107 | 0x9B05 | DispatchThroughPointer |
| 108 | 0x9B25 | RunBytecodeProgram |
| 109 | 0x9CBB | ResetBytecodeState |
| 110 | 0x9D4E | CopyActorCoordinates |
| 111 | 0x9DD6 | SetActorBounds |
| 112 | 0x9DE6 | LoadActorTileIndex |
| 113 | 0x9E6E | UpdateActorFacing |
| 114 | 0x9E7F | QueueNametableWrite |
| 115 | 0x9F14 | FlushNametableWrite |
| 116 | 0x9F4B | UpdateActorMovement |
| 117 | 0x9F54 | MoveActorByOpcode |
| 118 | 0x9FDF | AddToNametableValue |
| 119 | 0xA002 | SubtractFromNametableValue |
| 120 | 0xA01D | ProcessBytecodeOpcode |
| 121 | 0xA085 | ComputeBytecodeOffset |
| 122 | 0xA0A5 | ResetBytecodeAccumulator |
| 123 | 0xA0C6 | ResetBytecodeAccumulatorAlt |
| 124 | 0xA0F4 | AdvanceBytecodeProgram |
| 125 | 0xA0FB | ResetBytecodeStateAlt |
| 126 | 0xA12E | ComputeActorTileRow |
| 127 | 0xA15D | ResetBytecodePointers |
| 128 | 0xA17F | RunActorScript |
| 129 | 0xA250 | LoadActorConfigByte |
| 130 | 0xA253 | ComputeActorConfigOffset |
| 131 | 0xA25F | CopyConfigBytes |
| 132 | 0xA270 | LoadActorConfigRecord |
| 133 | 0xA298 | CompareConfigValue |
| 134 | 0xA2C8 | ReturnFromConfigLoad |
| 135 | 0xA2C9 | LoadActorConfigFields |
| 136 | 0xA316 | StoreActorPaletteByte |
| 137 | 0xA32C | StoreActorControlByte |
| 138 | 0xA338 | ReadActorConfigByte |
| 139 | 0xA435 | CompareActorConfigValue |
| 140 | 0xA46F | StoreActorConfigResult |
| 141 | 0xA482 | LoadActorConfigAlt |
| 142 | 0xA49F | StoreActorConfigResultAlt |
| 143 | 0xA4AA | LoadActorFacingFlag |
| 144 | 0xA4C7 | LoadActorConfigBlock |
| 145 | 0xA4DF | TestSoundChannelState |
| 146 | 0xA4F2 | SetSoundSequenceChannel2Alt |
| 147 | 0xA4FF | FlipObjectIndex |
| 148 | 0xA508 | LookupObjectIndex |
| 149 | 0xA512 | UpdateObjectSlots |
| 150 | 0xA51B | AdvanceObjectSlot |
| 151 | 0xA5DD | WriteNametableBytes |
| 152 | 0xA660 | SetSoundSequenceChannel4 |
| 153 | 0xA68E | UpdateObjectList |
| 154 | 0xA695 | UpdateObjectListEntry |
| 155 | 0xA6F8 | UpdateObjectCollisions |
| 156 | 0xA79F | CheckObjectScroll |
| 157 | 0xA82F | ClearScrollLatchAlt |
| 158 | 0xA834 | UpdateObjectSprite |
| 159 | 0xA884 | SetObjectFlags |
| 160 | 0xA8D1 | AdvanceObjectFrame |
| 161 | 0xA8E9 | TestObjectActive |
| 162 | 0xA949 | UpdateObjectAnimations |
| 163 | 0xA952 | UpdateObjectAnimation |
| 164 | 0xA992 | UpdateObjectTimer |
| 165 | 0xA99E | DecrementObjectCounter |
| 166 | 0xA9AB | UpdateObjectState |
| 167 | 0xA9D8 | ToggleScrollRegionFlip |
| 168 | 0xA9FF | BuildObjectList |
| 169 | 0xAA56 | ReadControllers |
| 170 | 0xAA63 | ReadControllerShiftRegister |
| 171 | 0xAAB8 | StoreControllerButtonBits |
| 172 | 0xAACD | EnableRendering |
| 173 | 0xAADC | DisableRenderingAndClearNametables |
| 174 | 0xAAEF | ClearNametablePattern |
| 175 | 0xAB68 | CopyPaletteFromTable |
| 176 | 0xAB98 | LoadShadowOamBlock |
| 177 | 0xABA3 | FillShadowOamBlock |
| 178 | 0xABB1 | UploadPalette |
| 179 | 0xABE4 | ApplyPpuScrollAndControl |
| 180 | 0xABF7 | ShiftAccumulatorRight4 |
| 181 | 0xABFC | ClearOamShadow |
| 182 | 0xAC0D | SelectLevelVramWriter |
| 183 | 0xAC3B | SetLevelVramStream |
| 184 | 0xAC43 | FillAttributeBlock |
| 185 | 0xAC4C | WriteAttributeBlock |
| 186 | 0xAC62 | LoadAttributeStream |
| 187 | 0xAC78 | SetPpuAddressHighAnd40 |
| 188 | 0xAC82 | WriteCompressedVramStream |
| 189 | 0xAC88 | AdvanceSourceByte |
| 190 | 0xAC96 | DecodeVramStreamToken |
| 191 | 0xACA7 | WriteVramRunToken |
| 192 | 0xACC9 | AdvanceDestinationWord |
| 193 | 0xACD7 | AdvanceCountWord |
| 194 | 0xACE5 | WithRenderingEnabled |
| 195 | 0xACF5 | WriteCompressedVramBlocks |
| 196 | 0xAD19 | ComputeCollisionBits |
| 197 | 0xAD36 | ComputePlayerOverlapBits |
| 198 | 0xAE45 | SetDefaultOverlapBits |
| 199 | 0xAE9B | ComputeEdgeOverlapBits |
| 200 | 0xAF25 | InitializeSoundEngine |
| 201 | 0xAF3B | UpdateSoundFrame |
| 202 | 0xAF40 | UpdateAllSoundChannels |
| 203 | 0xAF43 | UpdateSoundChannel |
| 204 | 0xAF55 | AdvanceSoundChannelNote |
| 205 | 0xAF69 | WriteSoundChannelState |
| 206 | 0xAF6B | RebuildApuEnableMask |
| 207 | 0xAF73 | StartSoundChannelNote |
| 208 | 0xAFAB | AdvanceSoundSequencePointer |
| 209 | 0xAFC5 | ComputeEnvelopeMask |
| 210 | 0xAFD9 | ComputeTonePeriod |
| 211 | 0xB000 | ShiftNoteTableIndex |
| 212 | 0xB007 | WriteToneRegisters |
| 213 | 0xB029 | WriteFixedToneRegisters |
| 214 | 0xB03A | ReadNoteDuration |
| 215 | 0xB049 | StoreNoteDuration |
| 216 | 0xB059 | StoreShortNoteDuration |
| 217 | 0xB05D | BuildApuChannelMask |
| 218 | 0xB062 | WriteApuEnable |
| 219 | 0xB06C | ApplySoundCommand |
| 220 | 0xB083 | WriteApuControlRegister |
| 221 | 0xB08C | AdvanceSoundSequenceStep |
| 222 | 0xB08E | AdvanceSoundSequenceStepAlt |
| 223 | 0xB095 | ReturnFromSoundCommand |
| 224 | 0xB096 | ReadLoopFlag |
| 225 | 0xB09D | HandleNoteTerminator |
| 226 | 0xB0A9 | HandleSustainCounter |
| 227 | 0xB0B3 | LoadSoundSequenceStep |
| 228 | 0xB0C6 | DecrementSustainCounter |