• Contact
  • Journal
  • Home
  • Arcade
  • Time Pilot (Sound)
  • RAMUse
  • Site
  • Page
  • Amiga
    • Rainbow Islands
      • 1loader-dec
      • 1loader
      • boot
      • orig-boot
      • Journal
  • Arcade
    • Asteroids 80%
      • Hardware
      • RAMUse
      • Code

      • DVG
      • VectorROM

      • Journal
    • Crazy Climber 1%
      • BigSpriteGraphics.pdf
      • Buildings.pdf
      • cclimber.asm
      • CharEnc.inc
      • CrazyClimberMemoryMapInfo.pdf
      • GraphicsAndCharacterAssetInfo.pdf
      • MemoryMap.inc
    • Defender 75%
      • RAMUse
      • Hardware
      • Bank1
      • Bank2
      • Bank3
      • Bank7
      • BankFixed
      • Mapping.txt
      • SoundHardware
      • SoundRAMUse
      • SoundCode
      • Defender-Theory-Early.pdf
      • Defender-Theory-Later.pdf
      • Defender.CPU.jpg
      • Defender.ROM.B&W.jpg
      • Defender.Vid.B&W.jpg
      • SoundROM.txt
    • DonkeyKong
      • Hardware
      • RAMUse
      • Code
    • Frogger (Sound)
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Hardware
      • RAMUse
      • Code

      • GFX

      • Journal
    • Galaga 5%
      • CPU1 (Main)
      • CPU2 (Secondary)
      • CPU3 (Sound)
      • GFX1 (Characters)
      • GFX2 (Sprites)
      • PROMcolors
      • PROMpaletteChar
      • PROMpaletteSprite

      • CPU1Fix

      • Journal
    • Moon Patrol 75%
      • Hardware
      • RAMUse
      • Code

      • GFX1 (Text)
      • GFX2 (Sprites)
      • GFX3 (Mountains)
      • GFX4 (Hills)
      • GFX5 (City)
      • ImageBackgroundColors
      • SpriteColors
      • SpriteColorSets
      • TextColors

      • MoonPatrolSound
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Journal
    • Omega Race 10%
      • Hardware
      • RAMUse
      • MainBoard

      • SoundHardware
      • SoundRAMUse
      • SoundBoard

      • DVGPROM
      • VectorROM

      • Journal
    • Phoenix 90%
      • Hardware
      • RAMUse
      • Code

      • Background
      • Foreground

      • Journal

      • Scramble HHi
        • phoenixj-func-main2.pdf
        • phoenixj-func-main2.scap
        • phoenixj.asm-may2025.txt
        • phoenixj.asm-may2025.txt.pdf
    • Space Invaders
      • invaders.asm
      • Hardware
      • RAMUse
      • Code

      • Journal
    • The Pit
      • Hardware
      • RAMUse
      • Code
    • Time Pilot (Sound)
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Hardware
      • RAMUse
      • Code

      • Journal
    • Sea Wolf 1%
      • Hardware
      • RAMUse
      • Code

      • Journal
    • Scramble 1%
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Journal
  • Atari2600
    • Stella (Hardware Info)
    • Asteroids 5%
      • RAMUse
      • Code

      • Journal
    • Battle Zone 1%
      • RAMUse
      • Code

      • Journal
    • Chess 1%
      • RAMUse
      • Code

      • Journal
    • Combat 10%
      • RAMUse
      • Code
      • CodePAL

      • Journal
    • Double Gap
      • Code
      • DoubleGap.asm

      • Journal
    • Entombed 1%
      • RAMUse
      • Code

      • Journal
    • ET 1%
      • RAMUse
      • Code

      • Journal
    • Burger Time 1%
      • RAMUse
      • CodeBank0
      • CodeBank1
      • CodeBank2
      • CodeBank3
      • CodeBank4
      • CodeBank5
      • CodeBank6
      • CodeBank7

      • Journal
    • Missile Command 1%
      • RAMUse
      • Code

      • Journal
    • Space Invaders 1%
      • RAMUse
      • Code

      • Journal
  • ColossalCave
    • CodeOrg
    • DataOrg

    • Code350
    • Data350
  • CoCo
    • Hardware
    • Early Work
    • Pyramid
      • RAMUse
      • Code

      • Journal
    • Raaka Tu
      • RAMUse
      • Code

      • Journal
    • Bedlam
      • RAMUse
      • Code

      • Journal
    • Madness & Minotaur
      • Walk Through
        • after_start.txt
        • after_start.cas
        • after_1.txt
        • after_1.cas
        • after_2.txt
        • after_2.cas
        • after_3.txt
        • after_3.cas
        • after_4.txt
        • after_4.cas
        • after_5.txt
        • after_5.cas
        • after_6.txt
        • after_6.cas
        • after_7.txt
        • after_7.cas
        • after_8.txt
        • after_8.cas
        • after_9.txt
        • after_9.cas
        • after_10.txt
        • after_10.cas
        • after_11.txt
        • after_11.cas
        • after_12.txt
        • after_12.cas
        • after_13.txt
        • after_13.cas
        • after_14.txt
        • after_14.cas
        • after_15.txt
        • after_15.cas
        • after_16.txt
        • after_16.cas
        • after_17.txt
        • after_17.cas
        • after_18.txt
        • after_18.cas
        • after_19.txt
        • after_19.cas
        • after_20.txt
        • after_20.cas
        • after_21.txt
        • after_21.cas
        • after_22.txt
        • after_22.cas
        • after_23.txt
        • after_23.cas
        • after_24.txt
        • after_24.cas
        • after_25.txt
        • after_25.cas
      • RAMUse
      • Code

      • SaveGameViewer

      • Journal
    • Mega-Bug
      • RAMUse
      • Code

      • Journal
    • Popcorn
      • RAMUse
      • Code

      • Journal
    • Daggorath
      • RAMUse
      • Code

      • Level Maps

      • Journal
    • Downland 5%
      • RAMUse
      • Code

      • Journal
    • Audio Analyzer 5%
      • RAMUse
      • Code

      • Journal
    • Doubleback
      • RAMUse
      • Code

      • Journal
  • NES
    • Zelda 5%
      • Hardware
      • RAMUse
      • Bank0
      • Bank1
      • Bank2
      • Bank3
      • Bank4
      • Bank5
      • Bank6
      • Bank7

      • Journal
    • Kid Icarus 1%
      • Hardware
      • RAMUse
      • Bank0
      • Bank1
      • Bank2
      • Bank3
      • Bank4
      • Bank5
      • Bank6
      • Bank7

      • Journal
  • Gameboy
    • Hardware
    • Link's Awakening 1%
      • RAMUse
      • Bank00
      • Bank01
      • Bank02
      • Bank03
      • Bank04
      • Bank05
      • Bank06
      • Bank07
      • Bank08
      • Bank09
      • Bank0A
      • Bank0B
      • Bank0C
      • Bank0D
      • Bank0E
      • Bank0F
      • Bank10
      • Bank11
      • Bank12
      • Bank13
      • Bank14
      • Bank15
      • Bank16
      • Bank17
      • Bank18
      • Bank19
      • Bank1A
      • Bank1B
      • Bank1C
      • Bank1D
      • Bank1E
      • Bank1F

      • Journal
    • Tetris 1%
      • RAMUse
      • Code

      • Journal
  • TRS80
    • HardwareLevel2
    • HardwareLevel1
    • HardwareDisk
    • HauntedHouse
      • RAMUse1
      • Code1
      • RAMUse2
      • Code2

      • Journal
    • Pyramid
      • RAMUse
      • Code

      • RAMUse1
      • Code1

      • Journal
    • RaakaTu
      • RAMUse
      • Code

      • Journal
    • Bedlam
      • RAMUse
      • Code

      • Journal
    • Xenos
      • RAMUse
      • Code
      • Section1
      • Section2
      • Section3
      • Section4
      • Section5
      • Section6
      • Section7
      • Section8
      • Section9
      • SSVDOBJS
      • USVDOBJS

      • Journal
  • Virus
    • Morris Worm 1%
      • Journal
    • Stoned
      • Journal

  • Tools
    • Blend
      • blend.zip

      • Journal
  • Main Board RAM

Main Board RAM

Work RAM lives at `0xA800`–`0xAFFF`. Each name below describes the cell by its role in the running game; the hex address is the stable identity. Cells that share a byte, or whose role is only partly pinned, carry a terse caveat.

Address Name Description
a800 playerState State byte of the player's own record, which begins at this address.
a802 playerHeading The heading the player's ship is flying, a full byte = 256 steps of the circle.
a808 worldScrollY Per-frame world scroll, the component that lands in a sprite entry's NATIVE-Y byte.
a80a worldScrollX Per-frame world scroll, the component that lands in a sprite entry's NATIVE-X byte.
a810 actorRecordSlot0 Actor slot 0's record head -- first of the four actor/target object slots (array slots 1-4).
a811 waveKillCountdown How many more qualifying kills until the current wave's shared claim fires.
a812 waveClaimTimer Frame-countdown window during which a spawned wave's shared claim is armed.
a814 bankLaunchCooldownPeriod Reload period (interval constant) that re-arms BANK_LAUNCH_COOLDOWN after a launch; never decremented.
a817 bankLaunchCooldown Live per-vblank cooldown for the bank-launch arm (launchBankEnemyWhenAimedNearPlayer) and the Mother-Ship's homing spawn.
a820 actorRecordSlot1 Actor slot 1's record head.
a821 claimToken The shared "last of the wave" token, holding one claimant at a time.
a827 bankLaunchNearHalfY Near-band proximity half-width gating a bank launch, one axis.
a830 actorRecordSlot2 Actor slot 2's record head; also the free-slot-search band base.
a837 bankLaunchNearHalfX The other-axis near-band proximity half-width for the bank launch (launchBankEnemyWhenAimedNearPlayer only; its local name calls it X).
a840 actorRecordSlot3 Actor slot 3's record head; also doubles as the aimed-spawn era "bank A" record seat.
a844 bankLaunchSlotCount Count of records the bank-launch arm scans for a free slot (loop bound; zero disables the arm).
a850 craftRecordSlot0 Slot 0's record, and the iteration base of the whole 7-slot craft band.
a860 craftRecordSlot1 Slot 1's record head; its per-slot handler seats it and tails into the era body.
a870 craftRecordSlot2 Slot 2's record head.
a880 craftRecordSlot3 Slot 3's record head.
a890 craftRecordSlot4 Slot 4's record head, and the seat of the "cleared" free-slot spawn search.
a8a0 motherShipState State byte of the Mother-Ship's record, which begins at this address and runs two slots.
a8a4 motherShipHoldCounter Mother-Ship record +4 (the code's own alias is HOLD_COUNTER): a countdown decremented each mid-phase frame while the ship is kept live, reaching 0 ends the phase; zeroed on the player-contact kill.
a8b0 craftRecordSlot6 Slot 6's record head (the last ordinary craft slot), with two extra duties.
a8b4 motherShipAimSideToggle The Mother-Ship's homing-launch aim-side toggle: inc'd each launch, bit 0 picks the +0x18 / -0x18 side of the aim.
a8c0 eraObjectRecordSlot0 Era-object bank slot 0's record head -- base of the three-slot per-era special-object bank (array 12-14).
a8c6 attackerSpawnSlotCount Per-era count of enemy slots the attacker / craft-bank spawner fields -- §3's "spawner cap 0, 1, 2".
a8d0 eraObjectRecordSlot1 Era-object bank slot 1's record head (second of the grouped three).
a8d4 attackerSpawnAimSideToggle The attacker (era-bank) aimed-spawn aim-side toggle: inc'd each spawn, bit 0 picks the +/- side of the aim window whose magnitude is ATTACKER_SPAWN_WINDOW_HALF (0xa8d6, this record's +6).
a8d6 attackerSpawnWindowHalf Half-width of the proximity window deciding WHETHER the era attacker bank spawns (doubled into a window).
a8dc hitsRemaining How many more hits the big two-slot object can absorb before it dies.
a8e0 eraObjectRecordSlot2 Era-object bank slot 2's record head; also doubles as the aimed-spawn era "bank B" record seat.
a8e6 attackerSpawnAimWindowHalf Half-width of the final launch-facing window for the attacker spawn.
a8f0 parachutistRecord The parachutist's record head (array slot 15); its +7 is PARACHUTIST_RUNG 0xa8f7.
a8f4 attackerSpawnCooldown Live shared per-vblank cooldown for the era attacker-bank spawn arms.
a8f6 attackerSpawnCooldownPeriod Reload period (interval constant) for ATTACKER_SPAWN_COOLDOWN; never decremented.
a8f7 parachutistRung How many rescue awards this life has already been paid, which is the rung the next one takes.
a900 sceneryRecordSlot0 Scenery record base, scenery slot 0 (array slot 16); the ix cursor runSceneryForEra seats (paired with SCENERY_ENTRY_SLOT0).
a97f playerStateBlockEnd inclusive top of the player/actor-state RAM block cleared from PLAYER_STATE on a fresh round
a980 frameTick Free-running frame counter, advanced once per vblank service.
a981 coinAccepted Coin-counter pulses the machine still OWES the mechanical counter.
a982 coinAcceptedSlot2 slot-2 twin of COIN_ACCEPTED (0xa981)
a983 serviceCreditDebounce IN0 bit-2 debounce; a clean edge awards one credit (service-bit identity MAME-pending)
a984 coinPulseTimer Pulses coin slot 1's mechanical counter still owes, counted down one frame at a time.
a985 coinPulseTimerSlot2 slot-2 twin of COIN_PULSE_TIMER (0xa984)
a986 creditCount packed-BCD on-screen credit total (saturates at 0x99)
a987 screenUnflipped Whether the picture is the right way up for whoever is playing: 1 upright, 0 turned round.
a988 blankLinesLeft Lines of the character plane still to blank in the wipe now running.
a989 blankLineCursor Where the next line of that wipe starts — a 16-bit cell address in the character plane.
a98d highScoreHi High score. HIGH_SCORE_HI is the MSB of the single displayed high score (0xA98B/8C/8D), seeded at boot and promoted when a game beats it.
a98e fireButtonEdgeShift Fire-button edge-detect shift register.
a991 scratchPtrA General 16-bit scratch pointer (first of the pair, 0xA991-A992); dereferenced as a live working cursor, role varies by caller.
a993 scratchPtrB General 16-bit scratch pointer (second of the pair, 0xA993-A994); sometimes used alone (e.g. as a video-write destination).
a99d chainWindow How much longer a hit still counts as part of the current chain.
a99e chainStep Which rung of the chained-hit award ladder the next hit will be paid at.
a9ab sequencePhase OUTER phase of the same two-level machine: the machine's top-level MODE.
a9ac sequenceSubstep INNER index of the two-level sequence machine.
a9ad dip1Mirror inverted mirror of DSW 0xC200 (the gameplay dip bank)
a9ae in0Mirror Mirror of the IN0 input port, rewritten every frame from the port itself.
a9af in1Mirror inverted mirror of IN1 0xC320 (main / player-1 controls)
a9b0 in2Mirror inverted mirror of IN2 0xC340 (cocktail / player-2 controls)
a9b1 coinageSettings The two coinage DIP settings, as the machine sees them: the complement of the DSW0 port.
a9b2 commandWriteCursor SOUND: write index into the 64-cell command ring (pairs 0xa9b3)
a9b3 commandReadCursor The command ring's CONSUMER cursor: which cell the foreground loop reads next.
a9c0 freePlay Set while the cabinet is on free play, so a coin never has to buy a credit.
a9c1 startingLives lives per game (3/4/5/0xff), loaded into PLAYER_ONE/TWO_LIVES at start
a9c2 cocktailMode cabinet type; gates screen flip (exact polarity MAME-pending)
a9c3 bonusLifeSetting selects the bonus-life mark list + the attract bonus captions
a9c4 difficultySetting Which of the eight Difficulty DIP positions the cabinet is set to, 0-7.
a9c6 demoSoundsEnable attract-sound gate: a queued request is dropped unless set or a game is active
a9c7 coinSlot1Debounce slot-1 coin-line debounce shift register
a9c8 coinSlot1Accumulator slot-1 coins-inserted accumulator (+0x10/coin vs COIN_SLOT_1_RATIO 0xa9c9)
a9c9 coinSlot1Ratio What coin slot 1 charges: coins-required-minus-one in the high nibble, credits in the low.
a9ca coinSlot2Debounce slot-2 debounce (the idiomatic layer mislabels it "PHASE")
a9cb coinSlot2Accumulator slot-2 accumulator (+0x10/coin vs COIN_SLOT_2_RATIO 0xa9cc)
a9cc coinSlot2Ratio The same for coin slot 2, from the OTHER nibble.
a9cd killQuota The kill quota a round is armed with: how many enemies the next round will ask for.
a9ce bcdFrameCounter free-running packed-decimal frame counter (inc+daa each vblank)
a9cf scriptCycleCounter 0..4 round-robin index for in-turn demo-script selection
a9d0 attractStageCounter attract scene counter cycling 1->2->3->1
a9d3 startRungRounds15 The escalation rung a round STARTS on, for the first five rounds.
a9d4 startRungRounds610 The same, for rounds six to ten.
a9d5 startRungRounds11Up The same, for round eleven and up.
a9d6 eraRungPeriod How many wraps of the base-sixty counter one rung of ERA_RUNG lasts.
a9d7 eraRungTimer Wraps of the base-sixty counter still to go before ERA_RUNG climbs again.
a9e2 penRouteLeg Leg index into the pen's fixed L-shaped route table; incremented each run to select the next leg.
a9e3 penRowPos The pen's row position as 8.8 fixed point (read as mem16 at 0xA9E3; its whole-cell high byte is PEN_ROW_CELL at 0xA9E4).
a9e4 penRowCell The pen's whole-cell row -- the high byte of PEN_ROW_POS -- which plotPenCell masks to five bits and multiplies by the 32-cell row stride to address the plane.
a9e5 penColumnPos The pen's column position as 8.8 fixed point (mem16 at 0xA9E5; whole-cell high byte PEN_COLUMN_CELL at 0xA9E6).
a9e6 penColumnCell The pen's whole-cell column -- the high byte of PEN_COLUMN_POS -- added within the row by plotPenCell.
a9e7 penRowStep Signed 8.8 per-step row increment ((target - PEN_ROW_POS)/16, sign kept), added to PEN_ROW_POS each step.
a9e9 penColumnStep Signed 8.8 per-step column increment, added to PEN_COLUMN_POS each step.
a9eb sequenceDelay The sequence machine's shared one-shot delay: frames still to wait before its next step.
a9f0 introAnimationStep The round-start intro animation's step selector (0..5): stepRoundStartIntroAnimation dispatches on it and each sub-animation writes the next step to hand off (flash->1, band-to-2->2, colour-cycle->3, band-to-4->4, flood->5).
a9f1 playerFlashTick Frame tick of the player-ship white flash (intro step 0/1): bit 0 alternates the sprite colour; at tick 8 it advances INTRO_ANIMATION_STEP and requests the spawn-flash sound.
a9f2 bandTo2PassCountdown Per-pass countdown for advanceScriptedCharPlaneBandTo2 (bit 0 selects a blank vs draw pass), decremented each pass and zeroed at the script's end, which sets INTRO_ANIMATION_STEP to 2.
a9f3 spriteColourCycleCountdown Countdown driving a sprite's colour field during the colour-cycle step (bit 2 holds each colour four frames); advances INTRO_ANIMATION_STEP when it reaches zero, wrapping below zero.
a9f4 bandTo4PassCountdown Per-pass countdown for advanceScriptedCharPlaneBandTo4 (bit 0 selects blank vs draw), zeroed at the script's end, which sets INTRO_ANIMATION_STEP to 4.
a9f6 colourFloodCountdown Countdown stepped down once as floodColourPlaneWithSavedPlayerColour finishes painting the colour plane (intro step 4).
a9f7 bandScriptCursor 16-bit cursor walking the char-plane band script (a byte per plane cell); shared by the band-to-2 / band-to-4 drawers and stepThirteenScriptedGlyphCells, left where it ended.
aa10 playerEntry The player's sprite entry (array slot 0's X-seat), and the iteration base of the whole entry band.
aa11 playerSpriteCode The player's sprite code/shape byte = PLAYER_ENTRY +1; written from a heading-indexed table (the descriptor's 2nd byte).
aa12 actorEntrySlot0 Actor slot 0's sprite entry (paired with ACTOR_RECORD_SLOT0).
aa14 actorEntrySlot1 Actor slot 1's sprite entry.
aa16 actorEntrySlot2 Actor slot 2's sprite entry; free-slot-search entry seat.
aa18 actorEntrySlot3 Actor slot 3's sprite entry; also the aimed-spawn "bank A" entry seat.
aa1a craftEntrySlot0 Slot 0's sprite entry, and the iteration base of the whole entry band; paired with CRAFT_RECORD_SLOT0 in every whole-band walk (entry stride +0x02).
aa1c craftEntrySlot1 Slot 1's sprite entry (paired with CRAFT_RECORD_SLOT1).
aa1e craftEntrySlot2 Slot 2's sprite entry.
aa20 craftEntrySlot3 Slot 3's sprite entry.
aa22 craftEntrySlot4 Slot 4's sprite entry, and the "cleared" spawn-search entry-cursor seat (parallel to CRAFT_RECORD_SLOT4).
aa24 motherShipEntry The Mother-Ship's sprite entry (array slot 10), paired with MOTHER_SHIP_STATE 0xa8a0.
aa26 craftEntrySlot6 Slot 6's sprite entry: the "owed" spawn-search entry-cursor seat, and the Mother-Ship's second sprite entry when armed (parallel to CRAFT_RECORD_SLOT6).
aa28 eraObjectEntrySlot0 Era-object bank slot 0's sprite entry (paired with ERA_OBJECT_RECORD_SLOT0).
aa2a eraObjectEntrySlot1 Era-object bank slot 1's sprite entry.
aa2c eraObjectEntrySlot2 Era-object bank slot 2's sprite entry; also the aimed-spawn "bank B" entry seat.
aa2e parachutistEntry The parachutist's sprite entry (array slot 15), paired with PARACHUTIST_RECORD.
aa30 sceneryEntrySlot0 Scenery sprite-entry X seat, scenery slot 0 (array slot 16); base of publishSpriteShadow's bank-0 head run [.,6] (slots 16-18).
aa31 scenerySpriteCodeSlot0 Scenery sprite code/shape byte, scenery slot 0 (= SCENERY_ENTRY_SLOT0 +1); base of the era-keyed 8-slot code fill (stride 2).
aa36 sceneryEntrySlot3 Scenery sprite-entry X seat, scenery slot 3 (array slot 19); base of publishSpriteShadow's bank-0 tail run [.,10] (slots 19-23).
aa3f tamperFoldFlag work-RAM flag set 0xff before the image-signature fold, never read in the layer (foldImageBlockIntoSignatureThenAdvanceSequence)
aa40 playerSpriteAttribute The player's sprite attribute byte (colour + flip bits), and the base of the second bank's 32-byte colour/flip run publishSpriteShadow copies to hardware.
aa41 playerSpriteY The player's sprite Y (vertical) byte, and the base of the Y band hideAllSprites / hideCaptionSprites zero to park every sprite off-screen.
aa43 actorSpriteYSlot0 Actor slot 0's sprite Y (array slot 1; = ACTOR_ENTRY_SLOT0 +0x31, one step of the PLAYER_SPRITE_Y band).
aa55 motherShipSpriteY The Mother-Ship's sprite Y (array slot 10; = MOTHER_SHIP_ENTRY +0x31); read as a scalar in the contact/collision windows.
aa59 eraObjectSpriteYSlot0 Era-object bank slot 0's sprite Y (array slot 12; = ERA_OBJECT_ENTRY_SLOT0 +0x31); read as a scalar in fixed-target collision.
aa60 scenerySpriteAttributeSlot0 Scenery attribute (colour+flip) band base, scenery slot 0 (= SCENERY_ENTRY_SLOT0 +0x30); base of the bank-1 head run [.,6].
aa66 scenerySpriteAttributeSlot3 Scenery attribute band, scenery slot 3 (array slot 19); base of publishSpriteShadow's bank-1 tail run [.,10].
aa6f tamperImageSignature The folded byte-signature of a program-image block (the self-check's checksum); written by the image-fold step and read once at ROM 0x2730 as cp 0x76, deraling to the power-on wipe on mismatch -- an anti-tamper cell.
aa80 playerShotArray Base of the player's six-slot shot record array.
aa81 shotBurstPending Countdown of shots still owed from the current fire press.
aa82 shotSpawnCooldown Inter-shot fire-rate cooldown: frames left before the next player shot may seed.
aadf playerShotArrayEnd inclusive top of the player-shot RAM block cleared from PLAYER_SHOT_ARRAY on a fresh round
ab08 highScoreTableBase The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab0b highScoreRec0ScoreHi The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab10 highScoreRec1Base The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab18 highScoreRec2Base The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab20 highScoreRec3Base The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab27 highScoreSlideSrc The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab28 highScoreRec4Base The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab2f highScoreTableEnd The high-score TABLE is five records of eight bytes at 0xAB08..0xAB2F: per record +0 rank, +1..+3 score lo/mid/hi, +4..+7 name glyphs.
ab30 randomRegister Base of the seventeen-byte shift register the pseudo-random generator advances.
ab43 tamperGlyphCopy A copy of one character cell's glyph, taken so the anti-tamper machinery can check later that the display still says what it should.
abfe tamperGlyphStrip Anti-tamper caption witness -- the glyph sampled from a copyright-caption cell (0xA61C), re-checked each await-start frame by the animation strip (cp 0xa5); a mismatch diverts the strip's special path.
abff tamperColourStrip The colour byte of the TAMPER_GLYPH_STRIP sample (from the colour-RAM mirror); checked cp 0x05 / cp 0x10.
ac00 commandRing The 64-cell command ring: command byte and argument byte in adjacent cells.
ac43 soundQueueCount Count of queued sound-code bytes in the low-level sound FIFO; the enqueuer increments it, the drain decrements it (0 = empty).
ac44 soundQueueHead Head (oldest byte) and base of the sound-code FIFO body; the drain sends it, then slides the remaining bytes down.
ac64 enemyAimAnchorY The enemy aim ANCHOR point's paired coordinate byte -- the Y of the pair whose X is ENEMY_AIM_POINT_TABLE (0xAC65).
ac65 enemyAimPointTable Base of the enemy aim-point table, and byte-wise entry 0's X = the ship anchor point (0xAC64 = Y).
ac74 enemyStandoffAimSetY The SET standoff aim point's Y pair byte (its X is ENEMY_STANDOFF_AIM_SET at 0xAC75; names.js already documents "pair 0xAC74 = Y").
ac75 enemyStandoffAimSet X byte of one of the two selectable ship-standoff aim points (pair 0xAC74 = Y).
ac79 enemyStandoffAimClear X byte of the sibling standoff aim point (pair 0xAC78 = Y), chosen when that selector bit is CLEAR.
ac7f enemyStandoffAimMain X byte of the most-referenced ship-standoff aim point (pair 0xAC7E = Y).
ac83 enemyStandoffAimBlockEnd The last byte (base + 0x0F) of that sixteen-byte aim-coordinate record; used only as the inclusive terminator of armRoundStart's 0x80 clear loop `cell <= 0xAC83`.
acc0 eraRung The escalation rung inside the current era: the LOW half of the composite ERA_INDEX describes.
acc1 roundCraftCount Per-round enemy-craft quota: how many craft a round should field.
acc2 waveSpawnBusyFlag work-RAM busy/lock flag =0xff around the inline wave-build loop, =0 after (driveEnemyWaveForLifePhase)
acc3 waveDescriptorIndex Descriptor-table selector for the current inline wave: (2 * era) + a random parity bit.
acc4 scriptPickThreshold Per-round threshold that decides how each spawning craft's movement script is chosen.
acc6 roundTransitionHold Nonzero while a round / wave / Mother-Ship transition sequence is underway.
acc7 tamperGlyphKonami Anti-tamper caption witness -- the glyph sampled from the "(c) KONAMI 1982" caption cell 0xA63C ('N'); checked by the scenery/era arm as cp 0x3b, deraling into a data-run trap (0x315b) on mismatch.
ad00 livesRemaining Lives the ACTIVE player has left, in the live context block.
ad01 roundNumber Which round is being played, counting on without wrapping.
ad02 killsRemaining Enemies still to destroy before the Mother-Ship appears -- the manual's 56.
ad03 bonusLifeLatch Active context +3: the once-per-mark bonus-life award latch (bit 0); mirrors the saved PLAYER_ONE/TWO_BONUS_LIFE_LATCH.
ad04 eraIndex Which era (the manual's ROUND) is being played, 0-4.
ad05 lifeTicksLow Low place of a three-place base-sixty counter, stepped once per dispatch of the round engine's per-frame service block.
ad06 lifeTicksMid Middle place of that counter, stepped once per wrap of LIFE_TICKS_LOW.
ad07 lifeTicksHigh High place of that counter, stepped once per wrap of LIFE_TICKS_MID.
ad0a startRung Active context +0xA: the difficulty rung the round opens on (copied into ERA_RUNG 0xacc0 at reset); mirrors PLAYER_ONE/TWO_START_RUNG.
ad0b penGlyph The active caption/pen glyph (active context +0x0B, companion of PEN_COLOUR at +0x0C).
ad0c penColour The live caption/pen colour attribute (active context +0x0C; the saved per-player copies are at 0xAD1C/0xAD2C).
ad0d motherShipArmed Raised while this round's Mother-Ship has been armed.
ad0e roundArmed Active context +0xE: the round-armed gate (0xFF armed; cleared to 0 once the intro sound sequence completes); mirrors PLAYER_ONE/TWO_ROUND_ARMED.
ad10 playerOneLives Player one's lives, in their saved sixteen-byte context block at 0xAD10.
ad11 playerOneRoundNumber Player one's copy of ROUND_NUMBER (0xAD01), the unwrapped round ordinal. Seeded 1 at a fresh round arm; the attract arm overloads it to attract-stage + 1.
ad12 playerOneKillsRemaining Player one's copy of KILLS_REMAINING (0xAD02): craft still to destroy this round, seeded from KILL_QUOTA (0xA9CD).
ad13 playerOneBonusLifeLatch Player one's copy of the bonus-life award one-shot latch (active 0xAD03, bit 0, set by awardBonusLifeAtScoreMark once the score mark is passed).
ad14 playerOneEraIndex Player one's copy of ERA_INDEX (0xAD04): which era/round is in force -- the key setSavedPenFromEra and seatCaptionPen use for the caption pen.
ad16 playerOneLifeTicksMid Player one's copy of LIFE_TICKS_MID (0xAD06).
ad1a playerOneStartRung Player one's copy of the round start rung (active 0xAD0A) -- the difficulty rung the round opens on, later copied into ERA_RUNG.
ad1b playerOnePenGlyph Player one's saved copy of PEN_GLYPH (saved context +0x0B).
ad1c playerOnePenColour Player one's saved copy of PEN_COLOUR (saved context +0x0C); the source floodColourPlaneWithSavedPlayerColour reads when ACTIVE_PLAYER selects player one.
ad1d playerOneMotherShipArmed Player one's copy of MOTHER_SHIP_ARMED (0xAD0D).
ad1e playerOneRoundArmed Player one's copy of the round-armed gate (active 0xAD0E, which startNextRound sets to 0xFF and the ROM tests as a boolean `and a; ret z`).
ad20 playerTwoLives Player two's lives, in their saved context block at 0xAD20 -- the same byte, the other block.
ad21 playerTwoRoundNumber Player two's copy of ROUND_NUMBER -- the same field as PLAYER_ONE_ROUND_NUMBER, the other block.
ad22 playerTwoKillsRemaining Player two's copy of KILLS_REMAINING; the twin of PLAYER_ONE_KILLS_REMAINING, seeded from KILL_QUOTA.
ad23 playerTwoBonusLifeLatch Player two's copy of the bonus-life award latch; the twin of PLAYER_ONE_BONUS_LIFE_LATCH.
ad24 playerTwoEraIndex Player two's copy of ERA_INDEX; the twin of PLAYER_ONE_ERA_INDEX (the caption-pen era key).
ad26 playerTwoLifeTicksMid Player two's copy of LIFE_TICKS_MID; the twin of PLAYER_ONE_LIFE_TICKS_MID (mem16 clears the mid/high pair 0xAD26/0xAD27).
ad2a playerTwoStartRung Player two's copy of the round start rung; the twin of PLAYER_ONE_START_RUNG.
ad2b playerTwoPenGlyph Player two's saved copy of PEN_GLYPH; the twin of PLAYER_ONE_PEN_GLYPH, the other block.
ad2c playerTwoPenColour Player two's saved copy of PEN_COLOUR; the twin of PLAYER_ONE_PEN_COLOUR.
ad2d playerTwoMotherShipArmed Player two's copy of MOTHER_SHIP_ARMED; the twin of PLAYER_ONE_MOTHER_SHIP_ARMED.
ad2e playerTwoRoundArmed Player two's copy of the round-armed gate; the twin of PLAYER_ONE_ROUND_ARMED.
ad30 playActive Flag set while play is active.
ad31 twoPlayerGame Two-player-game flag: 0xFF for a two-player game, 0x00 for one player / attract.
ad32 activePlayer Which of the two players is up: 0 for player one, 1 for player two.
ad33 player1ScoreLo Scoring. Each player's score is three packed-BCD bytes, low byte first.
ad34 player1ScoreMid Scoring. Each player's score is three packed-BCD bytes, low byte first.
ad35 player1ScoreHi Scoring. Each player's score is three packed-BCD bytes, low byte first.
ad36 player2ScoreLo Scoring. Each player's score is three packed-BCD bytes, low byte first.
ad37 player2ScoreMid Scoring. Each player's score is three packed-BCD bytes, low byte first.
ad38 player2ScoreHi Scoring. Each player's score is three packed-BCD bytes, low byte first.
ad39 tamperWitness A character cell copied out of the display when the image checksum fails, glyph then colour.
adf2 demoScriptDwell Attract-demo autopilot: the packed dwell/steer byte -- low 6 bits are the frame countdown, top 2 bits the steering command; reloaded from the next script byte when the dwell expires.
adf3 demoScriptPointerLo Attract-demo autopilot: low byte of the little-endian cursor into the ROM heading-command script.
adf4 demoScriptPointerHi Attract-demo autopilot: high byte of the DEMO_SCRIPT_POINTER_LO cursor.
adfb tamperGlyphReadback Tile-image tamper tripwire: the glyph read back from video cell 0xA5DC; the demo start derails into a data-run trap unless it reads 0xFD.
adfc tamperColourReadback Tile-image tamper tripwire: the colour read back from cell 0xA1DC; the demo proceeds only if it is 0x10 or 0x05.
ae00 deferredWriteCursor Write pointer of the deferred character-write list, which runs from 0xAE04.
ae04 deferredWriteList Head of the deferred-PAINT list -- 4-byte records {addr lo, addr hi, tile, colour} that DEFERRED_WRITE_CURSOR 0xae00 fills and paintDeferredCells drains into both planes; a cursor still == this head means the list is empty.
ae80 deferredBlankCursor Write pointer of the SECOND deferred cell list, the one holding what to blank.
ae84 deferredBlankList Head of the deferred-BLANK list (same 4-byte record layout) that DEFERRED_BLANK_CURSOR 0xae80 fills and blankCellsPaintedLastPass drains, stamping the blank glyph 0x20 into the character plane only.