Address Length Description
24576 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.
24832 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 60715.
28029 968
Game status buffer entry at 6D7D
32768 1
Print State: Y Position
32769 1
Print State: X Position
32770 1
Print State: Bit-Shift Count
32771 1
Print State: Character Code
32772 1
Print State: Attribute Byte
32773 1
Print State: Left Margin
32774 1
Print State: Right Margin
32775 1
Print State: Flags
32776 2
Print State: Font Bitmap Pointer
32778 2
Print State: Handler Pointer
32780 1
Print State: Normal Width
32781 1
Print State: Narrow Width
32782 1
Print State: Wide Width
32783 1
Print State: Space Width
32784 1
Print State: Line Height
32785 239
Print State: Row Count
36816 22
Control Code Dispatch Table
Two-byte handler address table for control codes 16–26 indexed by the control code zero-indexed from 16. Each entry is the address of the parameter handler installed into PrintState_Handler by PrintHandler.
36838 12
Font Configuration Table
Font configuration table, indexed by font number (0–3). Each eight-byte entry comprises six bytes of font metrics copied to 32780–32785 by the select font handler at PrintHandler_SelectFont, followed by a two-byte little-endian pointer to the font bitmap data stored at 32776.
36850 20
Game status buffer entry at 8FF2
50179 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.
50184 1
Wave Number
50185 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.
50196 1
Game status buffer entry at C414
50197 1
Lives
50198 1
Wave
50199 1
Lives Display Vertical Step
Vertical pixel stride between adjacent life icons in DrawLivesDisplay. Each pass advances the vertical seed by this value (6) to space icons evenly in the lives display column.
50200 1
Extra Life Compare Byte 0
First byte of the four-byte template compared with *Player_1_State in CheckScoreAwardLife.
50201 1
Extra Life Compare Byte 1
Second template byte vs *50180 in CheckScoreAwardLife. Also the BCD byte that CheckScoreAwardLife adds 2 to (carry into *Lives). Seeded as 2 in 54367.
50202 1
Extra Life Compare Byte 2
Third template byte, compared with *50181 in CheckScoreAwardLife.
50203 1
Extra Life Compare Byte 3
Fourth template byte, compared with *50182 in CheckScoreAwardLife.
50204 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.
50205 1
Wave Display X Pixel Position
50206 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.
50211 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.
50212 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.
50215 7
Table: Slot Count
50222 1
Border Colour
50223 24
Bouncing Enemy Count
50247 39
Player 2 State
50286 29
Game status buffer entry at C46E
50315 68
Player State Swap Buffer
Scratch buffer used by Swap_Player_State to hold the active player's 68-byte state block while the inactive player's state is copied over it.
50383 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 3 and one new entity is spawned adjacent to the player's current position.
50385 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.
50387 1
Intro Closing Sprite
50388 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.
50389 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.
50394 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.
50396 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 × 33 + 41.
50398 7
Wave Active Flag
Set to 1 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.
50405 14
Colour Cycle Table Pointer
50419 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.
50424 1
Attract Mode Frame Counter
Counts down from 50 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.
50425 4
Title Strip Blit Parameters
Four bytes read by BlitTitleStrips: *TitleBlit_Params and *50428 bound the strip loop, *50426 selects the screen row / band, *50427 is the run length (LDIR) per strip. Filled by DrawAttractTitle before each BlitTitleStrips call.
50429 1
Game status buffer entry at C4FD
50430 1
Game status buffer entry at C4FE
50431 1
Game status buffer entry at C4FF
50432 1
Game status buffer entry at C500
50433 1
Game status buffer entry at C501
50434 1
Game status buffer entry at C502
50435 5
Game status buffer entry at C503
50440 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.
50441 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.
50443 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.
50445 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.
50447 8
Entity Pointer Stash
General-purpose two-byte pointer stash used by several entity routines to preserve a working pointer across subroutine calls.
50455 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.
50456 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.
50457 2
Wave Start Pointer
Little-endian pointer loaded from the word table at 54244 (indexed from 54272) when staging a wave after tape load or max-wave reset; copied into Wave_Definition_Pointer when clearing player state in PlayerDeath.
50459 6
Animation Frame Pair
Initial animation frame pair for the current wave. Written as a word by 53725 and decremented each frame by Main_Game_Loop at 52322 until it reaches zero.
50465 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.
50479 2
Entity State Flag
Tracks the progress of the active entity state effect. 0 = no effect running; 1 = one step complete; 2 = all steps complete. Written by Initialise_Entity_State and polled each frame by Dispatch_Entity_State_Handler and Cycle_Border_From_Screen.
50481 1
Wave Sprite Frame Counter
Frame counter for the wave start sprite animation. Initialised to 14 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.
50482 1
Death Sequence Mode
When 1 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.
50483 1
Wave Start Delay
Countdown loaded to 26 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.
50484 2
Animation Frame Counter One
First per-frame animation counter, initialised to 15 at wave start by Main_Game_Loop.
50486 14
Animation Frame Counter Two
Second per-frame animation counter, initialised to 15 at wave start by Main_Game_Loop.
50956 7
Help Bar Attribute Sequence
Seven attribute bytes (65 / 66 / 68 ink cycling) and a 0 terminator, consumed from UpdateAttributeBar when UpdateAttributeBar_ResetTable arms HL here after the "H" key path through PollHKey.
54244 20
Game status buffer entry at D3E4
61662 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.
62804 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.
62878 2
Intro Colour Cycle Pointer
63572 1964
Game status buffer entry at F854