| Game status buffer

Address | Length | Description
--- | --- | ---
7F00 | 96 | Screen refresh buffer Used by the routines at E9D5, EA80, F0BE, F100, F3A0 and FC57. Each byte of the screen refresh buffer (SRB) corresponds to a segment of 8 character squares on the screen, the leftmost of which will be at x=0, x=8, x=16 or x=24. Each bit set in an SRB byte corresponds to a character square in the segment that needs refreshing. Bit 7 corresponds to the leftmost character square in the segment, bit 0 to the rightmost character square. Note that, owing to a quirk in the way the SRB-updating routine at E9D5 works, the first 16 bytes of the screen refresh buffer correspond not to any part of the screen, but to the four rows of the play area that are immediately above the currently visible portion of the play area. Therefore, the screen-updating routine at EA80 ignores those bytes and starts inspecting SRB bytes at 7F10 instead. Note also that the routine at 6EC5 uses the first 16 bytes of the SRB as a temporary backup store for the submessage indicator and submessage addresses at 7F81, and the routine at FC6A uses the first 32 bytes of the SRB as a temporary store for the top row of attribute bytes when scrolling the screen up and down.
7F60 | 33 | Message buffer Used by the routine at 6EC5 to prepare a message before displaying it. Also used by the routines at F18E and F1BA as temporary storage for one of the character buffers in groups 0xD7-0xDD.
7F81 | 16 | Submessage indicator and message addresses Used by the routine at 6EC5.
7F91 | 1 | Unused
7F92 | 5 | Message 0x02: '{number}' Used as a submessage of message 0x2A. This message is cleared by the routine at 76FA when Sam picks up a phone, and updated by the routine at 77D3 as Sam dials.
7F97 | 2 | Phone table entry address Used by the routines at 776F and 77A3. Holds either the address of the second byte of the entry in the phone message table at 6B4B or 6B72 that corresponds to the phone that Sam is calling (if the person on the other end has a message for him) or picking up a call from, or the address of the final byte of the phone table at 6B72 (if the person Sam's calling has no message to give); this address contains the number of the message corresponding to the name that Sam must give in order to receive the telephone message, or 0x00 if no name is required to receive the message, or 0xFF if the person Sam's calling will respond with message 0x2E (I DUNNO NO {name}).
7F99 | 1 | Time that Sam last lifted a ringing telephone Checked by the routine at 76DD and set by the routine at 76FA (to the value of the second byte of the the system variable FRAMES, which is incremented every 5.12s).
7F9A | 1 | ID of the telephone that Sam is calling Checked by the routines at 7500 (using the event entry at 6044) and 772F, and updated by the routines at 71DD, 776F, 7A0C and F1E3.
7F9B | 1 | Telephone call status flags Used by the routines at 75F6, 76FA, 776F, 77D3 and 7A0C.
Bit(s) | Meaning if set
--- | ---
0 | Unused
1 | The telephone call is finished (disconnected)
2,3 | Unused
4 | A digit is being dialled
5 | The destination telephone is ringing
6 | Sam must give a name in response to 'WHO'S THERE?'
7 | Sam has picked up a ringing telephone
7F9C | 2 | Score Checked by the routine at F0BE, and updated by the routine at 6EB1.
7F9E | 2 | Bucks Checked by the routines at 7B6A, 7B9A and F0BE, and updated by the routines at 6100 and 6E87.
7FA0 | 2 | Time the last message was displayed Used by the routine at 6EC5. Holds the two least significant bytes of the system variable FRAMES as they were when the last message was displayed.
7FA2 | 6 | Blown fuse delay counters When a fuse is blown, the corresponding delay counter here is initialised by the routine at 74AA. The delay counters are checked and decremented by the routine at F404.
7FA8 | 1 | Icon panel status flags Used as a temporary buffer by the routines at 73E4, 7425 and 7603. Each bit set here (by the routine at 7425 or 7603) corresponds to an icon that should be displayed in the panel.
Bit(s) | Icon
--- | ---
7 | Fuse/Budgie
6 | Door/Hook
5 | Light bulb
4 | Telephone
0-3 | Unused
7FA9 | 1 | Main loop task timer Decremented and checked on every pass through the main loop by the routine at F000, and also checked by the routine at F144.
7FAA | 10 | Door knock status flags Used by the routines at F2A8, F748 and F7CD. The bits in each byte here are used as follows:
Bit(s) | Meaning if set
--- | ---
7 | Somebody has just knocked on the door
6 | Somebody is going to answer the door
0-5 | Unused
7FB4 | 1 | Blown fuse indicator Used by the routine at F1FC, which stores a non-zero value here if any fuses are currently blown.
7FB5 | 1 | Unused
7FB6 | 1 | Fuse flags Used by the routines at 74AA and 75A4. A bit set here indicates that the corresponding fuse has already been blown once. Bits 6 and 7 are unused.
Bit | Fuse
--- | ---
0 | No. 74
1 | Hotel
2 | No. 31
3 | No. 19
4 | No. 17
5 | No. 15
7FB7 | 1 | Index of the current message in the message queue Used by the routines at 6EC5 and 75D0.
7FB8 | 8 | Message queue Used by the routines at 6EC5, 75D0 and FA79.
7FC0 | 4 | Bullet buffer 1 Used by the routines at 621E, 65DB and 6670.
7FC4 | 4 | Bullet buffer 2 Used by the routines at 621E, 65DB and 6670.
7FC8 | 1 | Last value seen in the system variable FRAMES Stores the value of the LSB of the system variable FRAMES as it stood at the end of the last pass through the main loop at F02B or the routine at 790D.
7FC9 | 1 | Current disguise Checked by the routines at 7222, 739D and 7500 (using the event entry at 605A), and changed by the routine at F95E. Holds the ID of Sam's current disguise.
ID | Disguise
--- | ---
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
7FCA | 6 | Number string buffer Used by the routine at 6E1A.
7FD0 | 2 | Message 0x01: '{tens digit}/{name}' Used as a submessage of messages 0x24, 0x28, 0x2E and 0x34. The message number of the name is inserted by the routine at 776F; the tens digit of the number of bucks is inserted by the routine at 7B6A or FB52.
7FD2 | 1 | Message number to watch in the message queue Set by the routines at 6100, 790D and 7996, and checked by the routine at 78FC.
7FD3 | 1 | ID of the telephone Sam is holding Set by the routine at 76FA and checked by the routine at 77D3.
7FD4 | 2 | Time when the score was last incremented Checked and set by the routine at 7AB6. Holds the value of the two least significant bytes of the system variable FRAMES as they were when the score was last incremented.
7FD6 | 5 | Unused
7FDB | 3 | Location the police should head for when looking for Sam Set by the routines at 71A0 and 7A39, and checked by the routine at 72B1.
7FDE | 2 | Random number seed Used by the routine at F17F.
7FE0 | 7 | Unused Data is copied here from the game status buffer template at FFE0, but is never used.
7FE7 | 1 | Bullet timer Used by the routine at 65DB.
7FE8 | 1 | Disguise status flags Modified by the routine at 71AC, and checked by the routine at 7294. Each bit set here corresponds to a disguise that is known by the police. Bit 7 (corresponding to no disguise) is always set.
Bit | Disguise
--- | ---
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7FE9 | 1 | Object inventory Changed by the routine at 7603, and checked by the routines at 634C, 7500 (using the event entries at 60B0 and 60C6) and 7BE1. Each bit set here corresponds to an object in Sam's possession.
Bit(s) | Object
--- | ---
0-5 | Unused
6 | Hook
7 | Budgie
7FEA | 1 | Key inventory Changed by the routines at 7603 and 7996, and checked by the routines at 7500 (using the event entries at 600A and 6097) and 7A39. Each bit set here corresponds to a key in Sam's possession.
Bit(s) | Key
--- | ---
0-2 | Unused
3 | No. 74
4 | No. 31
5 | No. 27
6 | No. 15
7 | No. 19
7FEB | 1 | Police flags Changed by the routines at 71DD, 7500 (using the event entry at 6097), 7A04, 7A39 and F731; checked by the routines at 73E4, 7B5C, 7B6A and 7CFE. The bits set here have the following meaning:
Bit(s) | Meaning if set
--- | ---
0 | Sam is wanted by the police
1-6 | Unused
7 | Sam is in jail
7FEC | 2 | High score The high score is copied here from the game status buffer template at FFE0 by the routine at F8AE, but never used afterwards.
7FEE | 1 | Game mode indicator Holds the current game mode (0-4). Checked by the routines at 7500 (using the event entry at 5FE0), 7996, 7AB6 and F080, and updated by the routine at F8AE.
Mode | Meaning
--- | ---
0 | Demo mode
1 | The game has just started
2 | Sam has entered no. 15 with the key
3 | Sam has had the phone call about the key to no. 74 and gone to the top of the apartment building
4 | The mob is after Sam
7FEF | 1 | Lives (first aid kits) Used by the routines at 6592 and 7414. A first aid kit will be displayed in the icon panel for every bit that is set.
7FF0 | 10 | Door status flags Used by the routines at 76BC, F144, F293 and F2A8. In each flag byte here, bits 0-2 hold the door close delay timer (0 if the door is shut), and the set bit (if any) in bits 3-7 indicates the key that is required to unlock the door:
Bit | Key
--- | ---
3 | Key to no. 74
4 | Key to no. 31
5 | Key to no. 27
6 | Key to no. 15
7 | Key to no. 19
7FFA | 1 | Input device indicator Set by the routine at 6177, and used by the routine at EAB2. Holds 0x6B ('k') if the Kempston joystick is being used, or 0x00 otherwise.
7FFB | 1 | Number of the character just moved (0xD7-0xE5) Used by the routine at F1FC.
7FFC | 1 | Sam's status flags Used by the routine at 74D8 to decide how to deal with Sam.
Bit | Meaning if set | Routine
--- | --- | ---
0 | Sam is being carried by a gangster or policeman | 7AF4
1 | Sam is immobilised (after meeting Lana) | 6100
2 | Unused |
3 | Sam is rolling or somersaulting | 64CD
4 | Sam is on the phone | 77D3
5 | Sam is blowing a fuse | 75C2
Sam is switching a light on or off
Sam is raising or lowering a blind
Sam is throwing the hook
Sam is picking up an object
6 | Sam is knocking on or opening a door | F308
7 | Sam is falling from the roof of a building | FB93
7FFD | 1 | Last key pressed Set by the main loop at F02B, and checked by the routine at ECE1. Holds the value from the keypress offset table corresponding to the last key pressed.
7FFE | 1 | x-coordinate of the leftmost column of the play area on screen Checked by many routines, and modified by the routines at E80E and E845.
7FFF | 1 | y-coordinate of the topmost row of the play area on screen Checked by many routines, and modified by the routines at E87C and E8B7.