Address Length Description
6000 256
Entity List
Start of the entity list in RAM. The playfield write pointer at Playfield_Entity_List_Pointer is reset to this address before the main game loop, and the entity processing routines walk forward from here each frame.
6100 3197
Entity List Base
Base address of the entity list. Entity_List_Write_Pointer, Entity_List_Snapshot, and Entity_List_Working_Pointer are all initialised to this address. Also used as the score table reception buffer during tape load operations at ED2B.
6D7D 968
Game status buffer entry at 6D7D
8000 1
Print State: Y Position
8001 1
Print State: X Position
8002 1
Print State: Bit-Shift Count
8003 1
Print State: Character Code
8004 1
Print State: Attribute Byte
8005 1
Print State: Left Margin
8006 1
Print State: Right Margin
8007 1
Print State: Flags
8008 2
Print State: Font Bitmap Pointer
800A 2
Print State: Handler Pointer
800C 1
Print State: Normal Width
800D 1
Print State: Narrow Width
800E 1
Print State: Wide Width
800F 1
Print State: Space Width
8010 1
Print State: Line Height
8011 239
Print State: Row Count
8FD0 22
Control Code Dispatch Table
Two-byte handler address table for control codes 10–1A indexed by the control code zero-indexed from 10. Each entry is the address of the parameter handler installed into PrintState_Handler by PrintHandler.
8FE6 12
Font Configuration Table
Font configuration table, indexed by font number (00–03). Each eight-byte entry comprises six bytes of font metrics copied to 800C–8011 by the select font handler at PrintHandler_SelectFont, followed by a two-byte little-endian pointer to the font bitmap data stored at 8008.
8FF2 20
Game status buffer entry at 8FF2
C403 5
Player 1 State
Root of the active player state block (see Swap_Player_State / PlayerDeath_ClearPlayerSlot). Leading bytes hold the packed score for PrintPlayerScore and the prefix compared in CheckScoreAwardLife.
C408 1
Wave Number
C409 11
Wave Definition Pointer
Pointer to the current entry in the wave definition table. Read by Stage_Next_Wave to load the enemy count and type for the incoming wave; advanced after each wave is staged.
C414 1
Game status buffer entry at C414
C415 1
Lives
C416 1
Wave
C417 1
Lives Display Vertical Step
Vertical pixel stride between adjacent life icons in DrawLivesDisplay. Each pass advances the vertical seed by this value (06) to space icons evenly in the lives display column.
C418 1
Extra Life Compare Byte 0
First byte of the four-byte template compared with *Player_1_State in CheckScoreAwardLife.
C419 1
Extra Life Compare Byte 1
Second template byte vs *C404 in CheckScoreAwardLife. Also the BCD byte that CheckScoreAwardLife adds 02 to (carry into *Lives). Seeded as 02 in D45F.
C41A 1
Extra Life Compare Byte 2
Third template byte, compared with *C405 in CheckScoreAwardLife.
C41B 1
Extra Life Compare Byte 3
Fourth template byte, compared with *C406 in CheckScoreAwardLife.
C41C 1
Active Enemy Count
Running total of active wave enemies. Incremented as enemies are spawned and decremented as they are killed. When it reaches zero, Stage_Next_Wave loads a fresh wave; when non-zero, the current wave set is re-populated instead. CheckScoreAwardLife_SessionGate also reads it as a session-active gate: non-zero means a game is in progress, so the copy-protection keyboard check is run.
C41D 1
Wave Display X Pixel Position
C41E 5
Two-Player Session Flag
Non-zero when both player slots take part in the current credit session. After a lost life PlayerDeath uses it for Swap_Player_State swap vs same-player loop. Cleared on init after the max wave.
C423 1
Wave Enemy Count
Number of primary wave enemies to spawn in the current wave. Read from the wave definition by Spawn_Primary_Wave_Enemies.
C424 3
Wave Enemy Type
Enemy type parameter for the current wave, read from the wave definition by Spawn_Primary_Wave_Enemies and copied into each spawned entity record.
C427 7
Table: Slot Count
C42E 1
Border Colour
C42F 24
Bouncing Enemy Count
C447 39
Player 2 State
C46E 29
Game status buffer entry at C46E
C48B 68
Player State Swap Buffer
Scratch buffer used by Swap_Player_State to hold the active player's 44-byte state block while the inactive player's state is copied over it.
C4CF 2
Entity Spawn Timer
Decremented once per frame by the main game loop at Main_Game_Loop. When it reaches zero it is reset to 03 and one new entity is spawned adjacent to the player's current position.
C4D1 2
Playfield Entity List Pointer
Pointer to the current write position in the playfield entity list. Set to Entity_List by Stage_Next_Wave before the main game loop is entered.
C4D3 1
Intro Closing Sprite
C4D4 1
Player Y Position
Player's current Y pixel position on the playfield. Updated each frame by the movement handler in Main_Game_Loop when the player moves vertically.
C4D5 5
Player X Position
Player's current X pixel position on the playfield. Updated each frame by the movement handler in Main_Game_Loop when the player moves horizontally.
C4DA 2
Entity Record Pointer
Pointer to the entity record currently being processed. Set before calling Remove_Entity_From_List to identify which entity to remove, and saved on entry to the movement handler at Move_And_Redraw_Entity so that the entity can be located after sprite-draw calls that may disturb HL.
C4DC 2
RNG Seed
Two-byte seed for the linear congruential random number generator. Updated each call to Advance_RNG_Seed using the recurrence: seed = seed × 21 + 29.
C4DE 7
Wave Active Flag
Set to 01 by Stage_Next_Wave once the entity list and playfield are initialised, signalling the main game loop at Main_Game_Loop that the wave is live.
C4E5 14
Colour Cycle Table Pointer
C4F3 5
Cached Spawn Pixels
Y pixel then X pixel for the enemy currently being placed by Spawn_Primary_Wave_Enemies, written before the screen address build reads them back.
C4F8 1
Attract Mode Frame Counter
Counts down from 32 in the attract mode loop at Attract_Mode_Loop. Written each frame before the per-frame service calls; when it reaches zero, control jumps to the high score entry screen at Display_High_Score_Entry_Screen.
C4F9 4
Title Strip Blit Parameters
Four bytes read by BlitTitleStrips: *TitleBlit_Params and *C4FC bound the strip loop, *C4FA selects the screen row / band, *C4FB is the run length (LDIR) per strip. Filled by DrawAttractTitle before each BlitTitleStrips call.
C4FD 1
Game status buffer entry at C4FD
C4FE 1
Game status buffer entry at C4FE
C4FF 1
Game status buffer entry at C4FF
C500 1
Game status buffer entry at C500
C501 1
Game status buffer entry at C501
C502 1
Game status buffer entry at C502
C503 5
Game status buffer entry at C503
C508 1
Border Colour Step
Current step into the border colour cycle (0–7); decremented each frame by Cycle_Border_Colour and used to index the attribute pair table at Table_Border_Colour_Pairs.
C509 2
Entity List Write Pointer
Little-endian pointer into the entity list; loaded at the start of Spawn_Wave_Enemies and updated with the final write position on exit.
C50B 2
Entity List Snapshot
Snapshot of *Entity_List_Write_Pointer taken at the start of Spawn_Wave_Enemies; used alongside *Entity_List_Working_Pointer to bracket the range of entity records written.
C50D 2
Entity List Working Pointer
Working write pointer into the entity list; updated by Spawn_Wave_Enemies_Populate_Slot as each record is appended and flushed to *Entity_List_Write_Pointer when the build completes.
C50F 8
Entity Pointer Stash
General-purpose two-byte pointer stash used by several entity routines to preserve a working pointer across subroutine calls.
C517 1
Player Y Direction
Index of the player's current vertical movement direction. Stored each frame by Main_Game_Loop and used to look up the vertical movement delta and the entity type to spawn above or below the player.
C518 1
Player X Direction
Index of the player's current horizontal movement direction. Stored each frame by Main_Game_Loop and used to look up the horizontal movement delta, the sprite frame, and the entity type to spawn beside the player.
C519 2
Wave Start Pointer
Little-endian pointer loaded from the word table at D3E4 (indexed from D400) when staging a wave after tape load or max-wave reset; copied into Wave_Definition_Pointer when clearing player state in PlayerDeath.
C51B 6
Animation Frame Pair
Initial animation frame pair for the current wave. Written as a word by D1DD and decremented each frame by Main_Game_Loop at CC62 until it reaches zero.
C521 14
Entity State Pointer
Two-byte pointer written by Initialise_Entity_State from the entity state table at Entity_State_Table. Read by Dispatch_Entity_State_Handler and executed via JP (HL) to dispatch the current entity state handler.
C52F 2
Entity State Flag
Tracks the progress of the active entity state effect. 00 = no effect running; 01 = one step complete; 02 = all steps complete. Written by Initialise_Entity_State and polled each frame by Dispatch_Entity_State_Handler and Cycle_Border_From_Screen.
C531 1
Wave Sprite Frame Counter
Frame counter for the wave start sprite animation. Initialised to 0E by Initialise_Wave_Start_Sprites and decremented each frame by Animate_Wave_Start_Sprites; when it reaches zero the closing sprite is drawn and the animation restarts.
C532 1
Death Sequence Mode
When 01 PlayerDeath skips the intro HUD, "PLAYER" messaging and intro delay before losing a life, and skips the extra "PLAYER" line in the game-over branch. Set from the wave-table path together with the table variant in B.
C533 1
Wave Start Delay
Countdown loaded to 1A at the start of each wave by Main_Game_Loop. Checked each frame at Main_Loop_Poll; while non-zero the frame is skipped and control branches to the wave-end handler at Dispatch_Narrow_Entity_Approach.
C534 2
Animation Frame Counter One
First per-frame animation counter, initialised to 0F at wave start by Main_Game_Loop.
C536 14
Animation Frame Counter Two
Second per-frame animation counter, initialised to 0F at wave start by Main_Game_Loop.
C70C 7
Help Bar Attribute Sequence
Seven attribute bytes (41 / 42 / 44 ink cycling) and a 00 terminator, consumed from UpdateAttributeBar when UpdateAttributeBar_ResetTable arms HL here after the "H" key path through PollHKey.
D3E4 20
Game status buffer entry at D3E4
F0DE 16
Border Colour Pairs
Eight outer/inner attribute-byte pairs for the screen border colour cycle. Each word is read by Cycle_Border_Colour and passed as DE to Fill_Border_Attributes.
F554 2
Screen Colour Cycle Pointer
Self-modifying pointer into Colour_Cycle_Table. Holds the address of the next colour cycle entry to apply on the next call to Advance_Colour_Cycle.
F59E 2
Intro Colour Cycle Pointer
F854 1964
Game status buffer entry at F854