![]() |
Game status buffer |
| Address | Length | Description | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9613 | 2 |
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 |
Counts the frames. It goes up by one in every frame, and is used for timing things.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9617 | 1 |
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 |
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 |
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 |
The scores of the two players, which are each three bytes of binary coded decimal with the most significant byte first.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9621 | 1 |
The number of bytes that are written to the buffer for each row of a sprite that is being drawn.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9622 | 1 |
The number of rows of the sprite that is being drawn that are still to be drawn.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9623 | 2 |
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 |
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 |
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 |
The sum of the fractions of the horizontal and vertical positions of the robot, in sixteenths of a cell.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9628 | 1 |
The attribute that is used for the text that is printed using PrintText.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9629 | 1 |
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 |
The address of the next free entry of the draw list.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 962C | 2 |
The column (the first byte) and the row (the second byte) of the map cell that was last looked at.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 962E | 2 |
The address in the map of the cell that was last looked at.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9630 | 2 |
Counts down while the menu is being shown. When it reaches zero the hall of fame is shown.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9632 | 1 |
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 |
Set when a score has been put in the hall of fame, so that the hall of fame is shown.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9634 | 1 |
The number of places in the hall of fame that a new score is higher than.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9635 | 2 |
The stack pointer is stored here by the main loop, but it is never used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9637 | 1 |
Set when the tune on the menu has been played, so that it is only played once.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9638 | 2 |
The address of the enemy that has been hit by a shot.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 963A | 2 |
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 |
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 |
The column (the low byte) and the row (the high byte) of the map cell that is checked in the next frame.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 963F | 2 |
The amount of energy that is used by the shot that is being fired.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9641 | 5 |
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 |
The number of frames until the next sector is attacked.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9647 | 1 |
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 |
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 |
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 |
Set when the message area has to be scrolled up before the next message is printed.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9650 | 1 |
Set when the message "BATTERY LOW" has been queued, so that it is only queued once.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9651 | 1 |
This byte is not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9652 | 1 |
Set when the action key has been used, so that holding it down does not use it again.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9653 | 4 |
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 |
The number of pixel rows that the message area still has to be scrolled up.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9658 | 1 |
The number of sectors that have been activated.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9659 | 1 |
The number of sectors that have been destroyed.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 965A | 1 |
The number of sectors that have been activated or destroyed.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 965B | 9 |
One flag for each of the nine sectors, which is set (FF) when the sector has been activated.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9664 | 7 |
These bytes are not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 966B | 1 |
The number of characters of the current message that have been printed.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 966C | 16 |
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 |
These bytes are not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 967E | 9 |
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 |
This byte is not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9688 | 2 |
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 |
The number of the player, which is cleared when a game is started and is not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 968B | 1 |
The number of lives that the player has left.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 968C | 1 |
This variable is set to 80 when a game is started, and is never used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 968D | 3 |
These bytes are not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 9690 | 304 |
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.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 97C0 | 240 |
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.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| 98B0 | 32 |
The two entities that are used for the clouds of smoke.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| A361 | 11 |
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 |
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 |
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 |
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 |
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 |
The rest of the area that is cleared when the map is reset. Nothing is ever put in it.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| D355 | 3243 |
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 |
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 |
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 |
This area is not used.
|
||||||||||||||||||||||||||||||||||||||||||||||||
| F580 | 2688 |
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.
|