River Raid visible excerpt browser harness

Abstract slot/shape inspector and section-structure visualizer. Renders only what the local excerpt exposes: reset effects, zero-page memory, fuel-display ball calculation, the six visible slot arrays, NTSC color constants, section/block structure, kernel timing, and address layout. Does not claim full scene reconstruction, complete sprite-pointer routing, or gameplay resolution.

Controls

Safe scope: six visible slots, declared zero-page bytes, known shape IDs, known flags, player/missile coordinates, the exact visible fuel formula (fuelHi >> 3) + 69, section/block structure, NTSC color decode, kernel timing, ROM-backed bitmaps for the known shape IDs shown here, including even/odd frame A/B sprite variants driven by frameCnt, plus an excerpt-limited loop helper for frame/RNG/countdown/playerX stepping. Not safe: full scene synthesis, PF pattern decoding, resolved collision behavior, or a full renderer.

Fuel display preview

Visible excerpt summary

Abstract slot / shape / scanline inspector

Selected world row

Composite row strip

Scroll / seam detail

Future seam timeline

Editable slot arrays

Selected slot detail


 

Selected slot sprite preview

P0 jet bitmap variant

P0 jet bitmap A/B compare

Current live sprite decisions

Explosion family compare

Playfield pattern reference

Known ROM address coverage

ROM / extract provenance

Named zero-page snapshot


 

Zero-page memory dump


 

Slot/shape-state mirror

riverraid_port.js slot/state model resetAndInit() stubs preserved abstract browser inspector

 

Section / block structure


 

MainLoop entry inspector

State captured at the top of MainLoop: LDX #4, LDA fuelHi, 3x LSR, ADC #69, JSR SetPosX

Section countdown

sectionBlock countdown uses raw values 16..1; value 1 is the bridge sentinel and sectionEnd=0 is the transition sentinel. Derived from ZP-VARIABLES.

NTSC color palette

Zero-page address map

Addr
End
Len
Label
Comment
Aliases

Bit-flag editor

Joystick input decoder

Missile envelope

Sound ZP fields ($F8-$FB)

Sound effect fields declared in excerpt. TIA AUDC/AUDF/AUDV writes NOT in excerpt.

Section end ($8A)

sectionEnd=0 marks end of section. From excerpt ZP-VARIABLES.

Variation/delay/player bytes ($80,$81,$F4)

gameVariation, gameDelay, and player byte are declared in ZP-VARIABLES. Byte values are surfaced directly; swap/control logic is NOT in excerpt.

posYLo ($8C)

Low value of blockOffset. From excerpt ZP-VARIABLES.

prevPF1PatId ($88)

Previous block PF pattern ID. From excerpt ZP-VARIABLES.

bridgeExplode byte ($8D)

bridgeExplode declared byte from excerpt ZP-VARIABLES. Trigger/decrement logic is not visible in the excerpt.

RNG 16-bit state

Block flags ($8E..$93)

All 6 blockLst slot flags decoded. From excerpt ZP-VARIABLES.

Frame counter ($82)

dXSpeed ($87)

x-acceleration byte from excerpt ZP-VARIABLES. Physics NOT in excerpt.

Score pointers ($CD / $DD)

scorePtr1 (12B) and scorePtr2 (11B) read for inspection. SetScorePtrs NOT in excerpt.

scorePtr2 alias bytes ($DE/$E0/$E2/$E4/$E6)

Kernel-temporary alias-byte view over scorePtr2 shared addresses named by excerpt comments: blockNum, reflect0, hitEnemyIdx, PFCrashFlag, and missileFlag.

Game mode stepper

NTSC color inspector

Click any color swatch below to decode it

Address alias conflicts

ZP addresses shared by multiple field names (from ZP-VARIABLES aliases in the excerpt)

Excerpt coverage map

Which zero-page fields have visible code vs. declaration-only. Derived from the ASM excerpt.

PF_State bit decoder ($89)

Declared PF_State bits from excerpt constants: b7 ISLAND_FLAG and b6 CHANGE_FLAG. This panel surfaces the raw bits only.

roadBlock / temp2 alias byte ($ED)

roadBlock is the temp2 alias from excerpt ZP-VARIABLES. Bit 7 is surfaced only as the PF-road bit for this inspector; code that sets the bit is NOT in the excerpt.

Fuel meter

Combined fuelHi:fuelLo as percentage. Drain/fill mechanics not visible in excerpt.

fuelLo ($B8)

Low byte of 16-bit fuel counter, paired with fuelHi at $B7. Drain/fill logic NOT in excerpt.

blockPart ($B6)

blockPart byte convention: 1=first half, 2=value-2 bridge-half marker. Declared in excerpt ZP-VARIABLES. Transition logic NOT in excerpt.

Slot address reverse-lookup

ZP addresses for each field of the selected block slot (0..5)

Zero-page hex editor ($80-$FD)

Missile bounds inspector

Missile Y/X bytes, $FF-sentinel check on missileFlag, and bounds check against excerpt constants MIN_MISSILE=13 MAX_MISSILE=161. Advance/fire/collision logic NOT in excerpt.

P0 position/velocity byte inspector

Declared P0-related bytes: playerX, speedX, speedY. JET_Y=19 fixed scanline constant. Physics/acceleration/wrapping are NOT in excerpt.

PFcolor / valleyWidth shared byte ($EE)

PFcolor and valleyWidth are two names for the same declared byte in excerpt ZP-VARIABLES. This panel shows the raw byte plus a color decode only.

Shape pointer state

shapePtr0 ($BA), shapePtr1a ($C7), shapePtr1b ($C9) — 2-byte ROM shape ptrs from ZP-VARIABLES.

shapePtr0 target bytes

shapePtr0 ($BA), reflect0 ($E0), playerColor ($EF), playerX ($B3), JET_Y=19. Target bitmap bytes and P0 NUSIZ shadow are NOT visible in the excerpt.

PF pointer state ($D9/$DB)

PF1Ptr ($D9), PF2Ptr ($DB) — 2-byte ROM pattern page ptrs from ZP-VARIABLES. Bank-switching NOT in excerpt.

Color pointer state ($CB)

colorPtr ($CB, length 2) — ROM color lookup table pointer from ZP-VARIABLES.

Saved RNG state ($EB/$EC)

randomLoSave2 ($EB) / randomHiSave2 ($EC) — level-start RNG pair for consistency. Save/restore logic NOT in excerpt.

Collision alias bytes ($E8/$E0/$E2/$E4)

collidedEnemy ($E8) plus alias bytes reflect0 (scorePtr2+3, $E0), hitEnemyIdx (scorePtr2+5, $E2), and PFCrashFlag (scorePtr2+7, $E4). TIA CX register collision reads NOT in excerpt; this panel does not claim resolved collision behavior.

Declared state-byte areas ($BD..$C5)

Declared player1State/player2State byte ranges from ZP-VARIABLES, including the visible livesPtr2 alias-byte note.

MainLoop fuel trace

Instruction-level trace of MainLoop fuel-bar computation: LDA fuelHi, 3x LSR, CLC, ADC #69, JSR SetPosX. Fully excerpt-grounded from visible ASM.

State display colors ($F0/$F1)

stateBKColor ($F0, const GREY) / statePFColor ($F1, const YELLOW+2). Set by init code NOT in excerpt.

Player color ($EF)

playerColor ($EF, YELLOW/BLACK). Toggle logic (invulnerability flash) NOT in excerpt.

Kernel line counter ($FD)

kernelLineNum byte from excerpt ZP-VARIABLES. Counter update logic is not visible in the excerpt.

Screensaver state ($85/$86/$F7)

SS_XOR ($85), SS_Mask ($86), SS_Delay ($F7) — screensaver color-shift fields from ZP-VARIABLES. XOR/Mask/delay logic NOT in excerpt — inspector-only.

Reset sequence trace

Step-by-step annotation of the visible Reset code ($F000). JSR subroutines (SetScorePtrs, SetScorePtr1, GameInit) are NOT in the excerpt — inspector-only trace aid.

Block line / kernel phase ($FC)

temp3/blockLine/maxId triple alias at $FC. Kernel structure 12*2+8=32 from ASM comment. Phase labels are excerpt-constant-derived; kernel code NOT in excerpt.

Zero-const invariants ($F3/$F6)

zero1 ($F3) and zero2 ($F6) are declared "always zero!" in the ASM excerpt. Non-zero values indicate an inspector edit or write outside excerpt-grounded logic.

PF1PatId ($BC)

Playfield pattern ID for new generated block. Page boundary at SWITCH_PAGE_ID=9: ids < 9 = $FC, >= 9 = $FD. Generation code NOT in excerpt.

player1State byte area ($BD..$C1)

Declared player1State byte area with level alias byte, saved RNG pair, and livesPtr bytes. All sub-fields from excerpt ZP-VARIABLES. Read/write code NOT in excerpt.

Fuel Display State ($B7/$B8)

Unified fuel view: fuelHi ($B7), fuelLo ($B8), fuel16, ball position from MainLoop LDA/LSR/LSR/LSR/CLC/ADC#69. Drain/fill NOT in excerpt.

Player2 state ($C2..$C5)

player2State 4 bytes with livesPtr2=$C5 (low byte only, high is const). Read/write code NOT in excerpt -- inspector-only.

PF1PatId Page Boundary ($BC)

PF1 pattern ID page resolver. SWITCH_PAGE_ID=9: IDs >= 9 use ROM page $FD, others $FC. Zone labels are inspector-only aids. Generation code NOT in excerpt.

Block offset line ($B6 + $B9)

Computes section-relative line from blockOffset ($B6) and sectionBlock ($B9). (SECTION_BLOCKS - sectionBlock) * BLOCK_SIZE + blockOffset. Inspector-only; kernel scan order NOT in excerpt.

RNG seed period

LFSR period analysis for a given 16-bit seed. Seed $0000 = lock-up. Maximal period = 65,535. Section count (57,337) from ASM header. Cycle restriction logic NOT in excerpt.

Kernel timing ($FC)

Decodes blockLine/temp3 ($FC) into display phase (12x2-line = 24 scanlines) vs setup (8 lines). Structure from ASM header comment. Kernel code NOT in excerpt.

PF1 page address ($BC)

computePF1PageAddress: ROM page high byte from PF1PatId. < SWITCH_PAGE_ID(9) = $FC, >= 9 = $FD. Banking mechanism NOT in excerpt.

Section block sequence ($B9)

Enumerates raw sectionBlock countdown bytes: 0=transition sentinel, 1=bridge sentinel, 2..16=numbered block values. Derived from SECTION_BLOCKS=16 constant. Transition logic NOT in excerpt.

diffPF inspector ($F2)

The ASM excerpt declares "diffPF = temp ; difference between two PF pattern ids". The PF-difference computation itself is NOT in excerpt — this surfaces the raw byte only.

Block array end addresses

End-address constants from ASM excerpt: blockLstEnd ($93), XPos1LstEnd ($99), State1LstEnd ($9F), Shape1IdLstEnd ($A5), PF1LstEnd ($AB), PF2LstEnd ($B1). Derived as base+NUM_BLOCKS-1 for each of the six block arrays. Used by kernel to iterate blocks.

NUSIZ per slot ($9A..$9F)

TIA NUSIZx values decoded from State1Lst bit 0-2. ASM names: TWO_COPIES=%001, THREE_COPIES=%011, DOUBLE_SIZE=%101, QUAD_SIZE=%111 (ASM lines 158-162). Bit 3 = REFP1 direction. Fine-move bits 4-7 = HMxy. Full kernel NUSIZ write timing NOT in excerpt.

Section progress ($B9/$B6/$8B)

Section/block/offset progress inspector. sectionBlock ($B9, ASM line 217) counts down from SECTION_BLOCKS=16. blockOffset ($8B) advances per frame within BLOCK_SIZE=32. blockPart ($B6) toggles 1/2 for bridge halves. Section/block advance logic NOT in excerpt.