![]() |
Game status buffer |
| Address | Length | Description |
|---|---|---|
| 6000 | 256 |
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 |
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 |
|
| 8000 | 1 |
|
| 8001 | 1 |
|
| 8002 | 1 |
|
| 8003 | 1 |
|
| 8004 | 1 |
|
| 8005 | 1 |
|
| 8006 | 1 |
|
| 8007 | 1 |
|
| 8008 | 2 |
|
| 800A | 2 |
|
| 800C | 1 |
|
| 800D | 1 |
|
| 800E | 1 |
|
| 800F | 1 |
|
| 8010 | 1 |
|
| 8011 | 239 |
|
| 8FD0 | 22 |
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, 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 |
|
| C403 | 5 |
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 |
|
| C409 | 11 |
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 |
|
| C415 | 1 |
|
| C416 | 1 |
|
| C417 | 1 |
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 |
First byte of the four-byte template compared with *Player_1_State in CheckScoreAwardLife.
|
| C419 | 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 |
Third template byte, compared with *C405 in CheckScoreAwardLife.
|
| C41B | 1 |
Fourth template byte, compared with *C406 in CheckScoreAwardLife.
|
| C41C | 1 |
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 |
|
| C41E | 5 |
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 |
Number of primary wave enemies to spawn in the current wave. Read from the wave definition by Spawn_Primary_Wave_Enemies.
|
| C424 | 3 |
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 |
|
| C42E | 1 |
|
| C42F | 24 |
|
| C447 | 39 |
|
| C46E | 29 |
|
| C48B | 68 |
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 |
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 |
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 |
|
| C4D4 | 1 |
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'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 |
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 |
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 |
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 |
|
| C4F3 | 5 |
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 |
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 |
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 |
|
| C4FE | 1 |
|
| C4FF | 1 |
|
| C500 | 1 |
|
| C501 | 1 |
|
| C502 | 1 |
|
| C503 | 5 |
|
| C508 | 1 |
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 |
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 |
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 |
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 |
General-purpose two-byte pointer stash used by several entity routines to preserve a working pointer across subroutine calls.
|
| C517 | 1 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
First per-frame animation counter, initialised to 0F at wave start by Main_Game_Loop.
|
| C536 | 14 |
Second per-frame animation counter, initialised to 0F at wave start by Main_Game_Loop.
|
| C70C | 7 |
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 |
|
| F0DE | 16 |
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 |
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 |
|
| F854 | 1964 |
|