- 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.
229 lines
6.1 KiB
Plaintext
229 lines
6.1 KiB
Plaintext
0x8000 Reset
|
|
0x800E WaitForFirstPpuWarmup
|
|
0x8019 WaitForSecondPpuWarmup
|
|
0x802C InitializeGameState
|
|
0x8052 UpdateNametableFromStream
|
|
0x80AC StartStageSequence
|
|
0x8132 UpdateFadeFlashSprites
|
|
0x8164 InitializeRound
|
|
0x8226 MainGameLoop
|
|
0x82AC DivideBy20
|
|
0x82E1 SilenceSoundChannels1And3
|
|
0x82ED SilenceSoundChannel3
|
|
0x82FA StartIntroMusic
|
|
0x82FF StartMusicSequence
|
|
0x832A UpdateHudTallyTiles
|
|
0x8353 UpdateScoreTallyDigits
|
|
0x8372 WriteScoreTallyDigits
|
|
0x8399 LoadOamShadowFromTable
|
|
0x83A7 UpdateActorPositions
|
|
0x845C UpdateRoundTimers
|
|
0x856C PlayRoundChangeMusic
|
|
0x8596 UpdateScrollTarget
|
|
0x8598 UpdateScrollTargetAlt
|
|
0x8639 BeginVblankFrame
|
|
0x8644 ForceRenderingOff
|
|
0x8653 SetRenderingOffAndSignalVblank
|
|
0x865D UpdateRoundLogic
|
|
0x86CB NmiHandler
|
|
0x8751 FinishNmiUpdates
|
|
0x8759 FinishNmiRegisters
|
|
0x8764 IrqHandler
|
|
0x8765 SetSoundSequenceChannel1
|
|
0x877C RunGameStateDispatcher
|
|
0x87BF UpdateTimersAlt
|
|
0x87D1 PollControllerStart
|
|
0x87F2 UpdateFlashCounter
|
|
0x8837 PlayDeathSequence
|
|
0x8848 PollControllerBits
|
|
0x885B PollControllerAndAdvance
|
|
0x886C PollControllerBitsAlt
|
|
0x887C SignalVblankComplete
|
|
0x8882 PollControllerAndCheckRound
|
|
0x88A4 BuildOamList
|
|
0x88B0 EmitOamEntry
|
|
0x88EB EmitOamBlankEntry
|
|
0x88F9 EmitOamFromTable
|
|
0x88FF EmitOamAtOffset
|
|
0x8936 FindFreeOamSlot
|
|
0x8986 CompactOamList
|
|
0x89CE ReadControllerAndInit
|
|
0x8A28 UpdateStageActors
|
|
0x8A5E SpawnStageActors
|
|
0x8AE8 UpdateAttributeTable
|
|
0x8B07 ClearScrollLatch
|
|
0x8B20 WriteNametableTile
|
|
0x8B33 ClearAttributeRegion
|
|
0x8B92 RenderHudDigits
|
|
0x8BEF RenderHudDigitDescriptor
|
|
0x8BF8 SetRenderingOn
|
|
0x8C05 AdvanceAnimationSlot
|
|
0x8C0E QueueVramTransfer
|
|
0x8C11 QueueVramTransferAlt
|
|
0x8C65 ExecuteVramTransfer
|
|
0x8CB8 QueueVramDescriptor
|
|
0x934B UpdateActorX
|
|
0x9371 UpdateActorTile
|
|
0x9374 UpdateActorTileAlt
|
|
0x94B1 TestPlayerFacing
|
|
0x94C7 SelectActorSlot
|
|
0x94C8 SelectActorSlotAlt
|
|
0x94CF ClearActorPosition
|
|
0x94D7 ClearActorFields
|
|
0x94FE SetActorFlag
|
|
0x9585 UpdateActorState
|
|
0x95AE ComputeActorLeftEdge
|
|
0x95D2 ComputeActorRightEdge
|
|
0x95D9 CompareActorToLimit
|
|
0x9653 SetActorTileFromPalette
|
|
0x9667 StoreActorTile
|
|
0x969E AdvanceActorCounter
|
|
0x96AA SetActorTileValue
|
|
0x96C8 TestActorCollisionFlag
|
|
0x96F7 ComputeActorLeftEdgeAlt
|
|
0x9722 ComputeActorRightEdgeAlt
|
|
0x9729 TestActorRange
|
|
0x9732 MoveActorByStep
|
|
0x97BC SetActorAnimation63
|
|
0x97C0 SetActorAnimation62
|
|
0x97C4 SetActorAnimation61
|
|
0x97D5 UpdateActorAnimation
|
|
0x97FC TestAnimationSlot
|
|
0x982A ComputeActorLeftEdgeAt
|
|
0x9858 ComputeActorRightEdgeAt
|
|
0x985F TestActorValue
|
|
0x98E6 ComputeActorLeftEdgeAlt2
|
|
0x9911 UpdateActorTileFromIndex
|
|
0x9918 UpdateActorTileFromIndexAlt
|
|
0x99A3 SetSoundSequenceChannel2
|
|
0x99E2 LookupActorTileId
|
|
0x99E4 LookupActorTileIdAlt
|
|
0x9A24 StoreActorCoordinates
|
|
0x9A2E StoreActorCoordinatesAlt
|
|
0x9A3F FlipActorFacing
|
|
0x9A4E SpawnActorPair
|
|
0x9A6B SpawnActorPairAlt
|
|
0x9AE8 RunBytecodeInterpreter
|
|
0x9B05 DispatchThroughPointer
|
|
0x9B25 RunBytecodeProgram
|
|
0x9CBB ResetBytecodeState
|
|
0x9D4E CopyActorCoordinates
|
|
0x9DD6 SetActorBounds
|
|
0x9DE6 LoadActorTileIndex
|
|
0x9E6E UpdateActorFacing
|
|
0x9E7F QueueNametableWrite
|
|
0x9F14 FlushNametableWrite
|
|
0x9F4B UpdateActorMovement
|
|
0x9F54 MoveActorByOpcode
|
|
0x9FDF AddToNametableValue
|
|
0xA002 SubtractFromNametableValue
|
|
0xA01D ProcessBytecodeOpcode
|
|
0xA085 ComputeBytecodeOffset
|
|
0xA0A5 ResetBytecodeAccumulator
|
|
0xA0C6 ResetBytecodeAccumulatorAlt
|
|
0xA0F4 AdvanceBytecodeProgram
|
|
0xA0FB ResetBytecodeStateAlt
|
|
0xA12E ComputeActorTileRow
|
|
0xA15D ResetBytecodePointers
|
|
0xA17F RunActorScript
|
|
0xA250 LoadActorConfigByte
|
|
0xA253 ComputeActorConfigOffset
|
|
0xA25F CopyConfigBytes
|
|
0xA270 LoadActorConfigRecord
|
|
0xA298 CompareConfigValue
|
|
0xA2C8 ReturnFromConfigLoad
|
|
0xA2C9 LoadActorConfigFields
|
|
0xA316 StoreActorPaletteByte
|
|
0xA32C StoreActorControlByte
|
|
0xA338 ReadActorConfigByte
|
|
0xA435 CompareActorConfigValue
|
|
0xA46F StoreActorConfigResult
|
|
0xA482 LoadActorConfigAlt
|
|
0xA49F StoreActorConfigResultAlt
|
|
0xA4AA LoadActorFacingFlag
|
|
0xA4C7 LoadActorConfigBlock
|
|
0xA4DF TestSoundChannelState
|
|
0xA4F2 SetSoundSequenceChannel2Alt
|
|
0xA4FF FlipObjectIndex
|
|
0xA508 LookupObjectIndex
|
|
0xA512 UpdateObjectSlots
|
|
0xA51B AdvanceObjectSlot
|
|
0xA5DD WriteNametableBytes
|
|
0xA660 SetSoundSequenceChannel4
|
|
0xA68E UpdateObjectList
|
|
0xA695 UpdateObjectListEntry
|
|
0xA6F8 UpdateObjectCollisions
|
|
0xA79F CheckObjectScroll
|
|
0xA82F ClearScrollLatchAlt
|
|
0xA834 UpdateObjectSprite
|
|
0xA884 SetObjectFlags
|
|
0xA8D1 AdvanceObjectFrame
|
|
0xA8E9 TestObjectActive
|
|
0xA949 UpdateObjectAnimations
|
|
0xA952 UpdateObjectAnimation
|
|
0xA992 UpdateObjectTimer
|
|
0xA99E DecrementObjectCounter
|
|
0xA9AB UpdateObjectState
|
|
0xA9D8 ToggleScrollRegionFlip
|
|
0xA9FF BuildObjectList
|
|
0xAA56 ReadControllers
|
|
0xAA63 ReadControllerShiftRegister
|
|
0xAAB8 StoreControllerButtonBits
|
|
0xAACD EnableRendering
|
|
0xAADC DisableRenderingAndClearNametables
|
|
0xAAEF ClearNametablePattern
|
|
0xAB68 CopyPaletteFromTable
|
|
0xAB98 LoadShadowOamBlock
|
|
0xABA3 FillShadowOamBlock
|
|
0xABB1 UploadPalette
|
|
0xABE4 ApplyPpuScrollAndControl
|
|
0xABF7 ShiftAccumulatorRight4
|
|
0xABFC ClearOamShadow
|
|
0xAC0D SelectLevelVramWriter
|
|
0xAC3B SetLevelVramStream
|
|
0xAC43 FillAttributeBlock
|
|
0xAC4C WriteAttributeBlock
|
|
0xAC62 LoadAttributeStream
|
|
0xAC78 SetPpuAddressHighAnd40
|
|
0xAC82 WriteCompressedVramStream
|
|
0xAC88 AdvanceSourceByte
|
|
0xAC96 DecodeVramStreamToken
|
|
0xACA7 WriteVramRunToken
|
|
0xACC9 AdvanceDestinationWord
|
|
0xACD7 AdvanceCountWord
|
|
0xACE5 WithRenderingEnabled
|
|
0xACF5 WriteCompressedVramBlocks
|
|
0xAD19 ComputeCollisionBits
|
|
0xAD36 ComputePlayerOverlapBits
|
|
0xAE45 SetDefaultOverlapBits
|
|
0xAE9B ComputeEdgeOverlapBits
|
|
0xAF25 InitializeSoundEngine
|
|
0xAF3B UpdateSoundFrame
|
|
0xAF40 UpdateAllSoundChannels
|
|
0xAF43 UpdateSoundChannel
|
|
0xAF55 AdvanceSoundChannelNote
|
|
0xAF69 WriteSoundChannelState
|
|
0xAF6B RebuildApuEnableMask
|
|
0xAF73 StartSoundChannelNote
|
|
0xAFAB AdvanceSoundSequencePointer
|
|
0xAFC5 ComputeEnvelopeMask
|
|
0xAFD9 ComputeTonePeriod
|
|
0xB000 ShiftNoteTableIndex
|
|
0xB007 WriteToneRegisters
|
|
0xB029 WriteFixedToneRegisters
|
|
0xB03A ReadNoteDuration
|
|
0xB049 StoreNoteDuration
|
|
0xB059 StoreShortNoteDuration
|
|
0xB05D BuildApuChannelMask
|
|
0xB062 WriteApuEnable
|
|
0xB06C ApplySoundCommand
|
|
0xB083 WriteApuControlRegister
|
|
0xB08C AdvanceSoundSequenceStep
|
|
0xB08E AdvanceSoundSequenceStepAlt
|
|
0xB095 ReturnFromSoundCommand
|
|
0xB096 ReadLoopFlag
|
|
0xB09D HandleNoteTerminator
|
|
0xB0A9 HandleSustainCounter
|
|
0xB0B3 LoadSoundSequenceStep
|
|
0xB0C6 DecrementSustainCounter
|