Address Length Description
9613 2
Saved IY Register
The value of IY from when the game was started, which the ROM interrupt routine needs. It is put back every time the game waits for an interrupt.
9615 2
Frame Counter
Counts the frames. It goes up by one in every frame, and is used for timing things.
9617 1
Random Number
The random number. It is changed in every frame by adding the high byte of the frame counter and the memory refresh register to it, and by some of the routines that use it.
9618 2
Character Set Address
The address of the character set that is used for printing text, which is the address of character 00. The font for the game starts with character 20, so for that it is 0100 bytes before the start of the data.
961A 1
Control Method
The method of control that has been chosen in the menu, which is in bits 1 and 2: 00 is the keyboard, 01 is the Kempston joystick, 02 is the cursor keys and 03 is Sinclair interface 2.
961B 6
Scores
The scores of the two players, which are each three bytes of binary coded decimal with the most significant byte first.
9621 1
Sprite Row Width
The number of bytes that are written to the buffer for each row of a sprite that is being drawn.
9622 1
Sprite Rows Left
The number of rows of the sprite that is being drawn that are still to be drawn.
9623 2
Saved Stack Pointer
Holds the stack pointer while a routine is using it for other things: the routines that draw sprites and that clear and copy the buffer.
9625 1
Controls
The controls that have been read but not used yet. A bit stays set until the robot has used it: bit 0 turns right, bit 1 turns left, bit 2 moves forward, bit 3 uses the action key, bit 4 fires the second weapon and bit 5 fires the first.
9626 1
Fraction Difference
The difference between the fractions of the horizontal and vertical positions of the robot, in sixteenths of a cell. It is used when the cells of the map are projected onto the screen.
9627 1
Fraction Sum
The sum of the fractions of the horizontal and vertical positions of the robot, in sixteenths of a cell.
9628 1
Text Attribute
The attribute that is used for the text that is printed using PrintText.
9629 1
Light Turned Flag
Set when a light that goes round the frame of the screen has been turned round, so that it is only turned once.
962A 2
Draw List Pointer
The address of the next free entry of the draw list.
962C 2
Cell Position
The column (the first byte) and the row (the second byte) of the map cell that was last looked at.
962E 2
Cell Address
The address in the map of the cell that was last looked at.
9630 2
Idle Timer
Counts down while the menu is being shown. When it reaches zero the hall of fame is shown.
9632 1
Last Control Method
The method of control that was selected the last time that the menu was drawn, which is used to tell if it has changed.
9633 1
Name Entered Flag
Set when a score has been put in the hall of fame, so that the hall of fame is shown.
9634 1
Places Higher
The number of places in the hall of fame that a new score is higher than.
9635 2
Unused Stack Pointer
The stack pointer is stored here by the main loop, but it is never used.
9637 1
Tune Played Flag
Set when the tune on the menu has been played, so that it is only played once.
9638 2
Enemy Hit Address
The address of the enemy that has been hit by a shot.
963A 2
Battery Energy
The energy that is left in the battery, as a 16-bit number. The high byte is the level that is shown on the battery bar, from 00 to 74.
963C 1
Displayed Battery Level
The level of the battery that is shown on the battery bar at the moment, which moves one pixel column at a time towards the level in the high byte of the battery energy.
963D 2
Cell To Check
The column (the low byte) and the row (the high byte) of the map cell that is checked in the next frame.
963F 2
Shot Cost
The amount of energy that is used by the shot that is being fired.
9641 5
Program Queue
The queue of programs that the robot has picked up. The first four are shown as icons in the panel and the last is the one that is used next when the action key is pressed.
9646 1
Attack Timer
The number of frames until the next sector is attacked.
9647 1
Attacked Sector
The code of the sector that is under attack. The row is in bits 6 and 7, and the column is in bits 1 and 2, and a value of 03 for either means that no sector is attacked.
9648 4
Robot Marker Position
The horizontal position (the first word) and the vertical position (the second word) of the robot when its marker on the map of the sectors was last drawn. The fraction is the low byte of each and the cell is the high byte.
964C 3
Packet Marker
The cell where the marker for the program packet was last drawn on the map of the sectors: the column, the row, and a flag that is set if there is a marker.
964F 1
Scroll Flag
Set when the message area has to be scrolled up before the next message is printed.
9650 1
Battery Low Flag
Set when the message "BATTERY LOW" has been queued, so that it is only queued once.
9651 1
Unused Variable
This byte is not used.
9652 1
Action Key Used Flag
Set when the action key has been used, so that holding it down does not use it again.
9653 4
Previous Position
The horizontal position (the first word) and the vertical position (the second word) that an entity had before it was moved, so that the move can be undone.
9657 1
Scroll Counter
The number of pixel rows that the message area still has to be scrolled up.
9658 1
Sectors Activated
The number of sectors that have been activated.
9659 1
Sectors Destroyed
The number of sectors that have been destroyed.
965A 1
Sectors Dealt With
The number of sectors that have been activated or destroyed.
965B 9
Sector Flags
One flag for each of the nine sectors, which is set (FF) when the sector has been activated.
9664 7
Unused Variables
These bytes are not used.
966B 1
Characters Printed
The number of characters of the current message that have been printed.
966C 16
Message Queue
The queue of the messages that are to be shown in the message area. There are eight entries of two bytes each: the number of the message (zero if the entry is free) and its argument. The values that are in the snapshot are left over from before the game was started.
967C 2
Unused Variables
These bytes are not used.
967E 9
Sector States
The state of each of the nine sectors. Bit 0 is set if the sector has been destroyed, bit 1 is set if it has been activated and bit 2 is set if it is under attack.
9687 1
Unused Variable
This byte is not used.
9688 2
Sound Effect
The sound effect PlaySoundStep is playing. The first byte is the number of tones still to play, or zero when nothing is playing. The second byte is the effect number (00 to 03). PlaySoundStep counts the first byte down and does not read the effect number.
968A 1
Player Number
The number of the player, which is cleared when a game is started and is not used.
968B 1
Lives
The number of lives that the player has left.
968C 1
Unused Variable
This variable is set to 80 when a game is started, and is never used.
968D 3
Unused Bytes
These bytes are not used.
9690 304
Entities
The entities, which are the robot, the shots, the enemies, the program packet and the clouds. Each is 10 bytes long. The entity is not in use if its type is zero.
Byte What it holds
00 Sprite type. Bit 7 flips it. Bits 0 and 1 pick the frame.
01 Fraction of the horizontal position.
02 Horizontal cell.
03 Fraction of the vertical position.
04 Vertical cell.
05 Type it becomes after materialising.
06 Robot wait timer, or the robot's speed.
07 Direction in the low two bits, or a shot's range.
08 Item an enemy is carrying.
09 Time a destroyer has left.
0A-0D Left unused by the handlers.
0E Program packet state: low four bits count, bit 7 destroyed.
0F Bit 0 set while the entity is visible.
Entity 00 is the robot, entities 01 to 03 are the shots, entities 04 to 09 are the enemies, entities 0A to 0D are the destroyers, entity 0E is the program packet and entities 0F to 12 are not used. The templates for the cells of the map come after them, and the last two entities are the clouds.
97C0 240
Cell Templates
The templates for the cells of the map, which are used to draw them in the same way as entities. Each is 10 bytes long, and they are for the cell types 01 to 0F. The first byte of each is the sprite type, and bytes 01 and 03 are offsets for its position, which are all zero. The handler for that sprite type runs on the template, which is how a program and an activated terminal animate.
Cell Sprite Drawn as
01 4C Hazard
02 74 Installed program
03 06 Battery
04 5D Sector wall along Y
05 5C Sector wall along X
06 5E Dropped program
07 4D Hazard
08 4E Transmitter
09 68 Terminal
0A 5B Wall along Y
0B 5A Wall along X
0C 6B Wall corner
0D 6A Wall post
0E 70 Activated terminal
0F 69 Socket
98B0 32
Cloud Entities
The two entities that are used for the clouds of smoke.
A361 11
Sector Energy
The number of programs that are installed in each sector, which is its energy. The energy of a sector goes down by one when one of its programs is destroyed and up by one when the robot installs a program. A sector with no energy is destroyed. The last two bytes are not used.
ADBF 4
Action Cell Position
The position of the cell that the action key was used on. The first word is the X position and the second is the Y position, each as a fraction byte followed by a cell number.
AF8E 32
Lights
The eight lights. Each light is four bytes long: the type (zero if the slot is not in use; bits 0-2 are the colour and bits 3-4 are the direction), a delay before the light can finish, and the address of the attribute that the light is in.
B7C6 54
Hall Of Fame Table
The eight places of the hall of fame. Each place is the score, which is three bytes of binary coded decimal, followed by the three letters of the name. The first entry is also the hi-score that is shown in the panel. The last six bytes are the work area that is used by NewHighScore.
C515 3136
Map
The map of the world, which is made of 40 columns and 40 rows of cells, although only the first 31 columns and rows have anything in them. The lower four bits of each cell are the type that it is now, and the upper four bits are the type that it started as. Each row of the map is 40 bytes long, and the first row is at the top. The walls between the nine sectors of 10 by 10 cells are the types 04 and 05, and 0C and 05 where they meet. The other types are described with the templates that are used to draw them.
D155 512
Unused Map
The rest of the area that is cleared when the map is reset. Nothing is ever put in it.
D355 3243
Draw List
The list of the sprites to be drawn. Each entry is three bytes: the type, the horizontal position and the height. It is ended by an entry with a type of zero. It is built in every frame, sorted by SortDrawList and drawn by DrawList. Only the start of this area is ever used, as the list is not long.
E000 4096
Shift Tables
The tables that are used to shift the bytes of a sprite to the right by one to seven pixels, which are built by BuildShiftTables. There are two pages for each shift, which hold the low bytes and the high bytes of each byte of the sprite when it is shifted. The page for the low bytes starts at EF00 for no shift, and moves down by two pages for each pixel of shift. The page below it is for the high bytes.
F000 256
Reversed Bytes
The table that gives each byte with its bits in the opposite order, which is built by BuildShiftTables and used to flip a sprite.
F100 1152
Unused Memory
This area is not used.
F580 2688
Play Window Buffer
The off-screen buffer that the play window is drawn into, which is copied to the screen by DrawPlayWindow. It is 70 lines of 18 bytes, and the first line is at the bottom of the window. Only the middle 14 bytes of each line are shown, as there are margins of two bytes at each end. The snapshot has some left over contents.