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.
ROM-backed extracted sprite cards
Extracted shape and HUD glyph bitmaps collected from the ROM-backed reports and appended here for direct inspection.
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.
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.