0% found this document useful (0 votes)
96 views4 pages

The System Variables of The Sinclair ZX81: Notes Address Name

The Sinclair ZX81 has system variables stored in memory from 16384 to 16508 that control aspects of the system. These variables include flags, error codes, memory addresses and more. They are referenced by name but cannot be used directly in BASIC programs. Poking or peeking the values of some variables can impact system operation, while others are safe to manipulate. The document provides details on over 30 system variables, their addresses, contents and effects of modifying them.

Uploaded by

rc2molina
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
96 views4 pages

The System Variables of The Sinclair ZX81: Notes Address Name

The Sinclair ZX81 has system variables stored in memory from 16384 to 16508 that control aspects of the system. These variables include flags, error codes, memory addresses and more. They are referenced by name but cannot be used directly in BASIC programs. Poking or peeking the values of some variables can impact system operation, while others are safe to manipulate. The document provides details on over 30 system variables, their addresses, contents and effects of modifying them.

Uploaded by

rc2molina
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

The System Variables of the Sinclair ZX81

The bytes in memory from 16384 to 16508 are set aside for specific uses by the system. You can peek them to find out various
things about the system, and some of them can be usefully poked. They are listed here with their uses.

These are called system variables and carry names, but do not confuse them with the variables used by the BASIC. You cannot
use the names in a BASIC program; they are simply mnemonics that are used to make it easier to refer to the variables.

The abbreviations in column 1 have the following meanings.

The variable should not be poked, because the system might


X
crash.
NPoking the variable will have no lasting effect.
S The variable is saved by SAVE.

The number in column 1 is the number of bytes in the variable. For two bytes, the first one is the less significant byte - the
reverse of what you might expect. So to poke a value v to a two-byte variable at address n, use

POKE n,v - 256*INT (v/256)

POKE n + 1,INT (v/256)

and to peek its value, use the expression

PEEK n + 256*PEEK (n+1)

Notes Address Name Contents

1 16384 ERR_NR 1 less than the report code. Starts off at 255 (for -1), so PEEK 16384,
if it works at all, gives 255. POKE 16384,n can be used to force an
error halt: 0 W n W 14 gives one of the usual reports, 15 W n W 34 or
99 W n W 127 gives a nonstandard report, and 35 W n W 98 is likely
to mess up the display file.
X1 16385 FLAGS Various flags to control the BASIC system.

X2 16386 ERR_SP Address of first item on machine stack (after GOSUB returns).

2 16388 RAMTOP Address of first byte above BASIC system area. You can poke this to
make NEW reserve space above that area (see Chapter 26) or to fool
CLS into setting up a minimal display file (Chapter 27).

N1 16390 MODE Specifies K, L, F or G cursor.

N2 16391 PPC Line number of statement currently being executed. Poking this has no
lasting effect except in the last line of the program.

S1 16393 VERSN 0 identifies 8K ROM in saved programs.

S2 16394 E_PPC Number of current line (with program cursor).

SX2 16396 D_FILE See Chapter 27.

S2 16398 DF_CC Address of PRINT position in display file. Can be poked so that
PRINT output is sent elsewhere.

SX2 16400 VARS See Chapter 27.

SN2 16402 DEST Address of variable in assignment.

SX2 16404 E_LINE See Chapter 27.

SX2 16406 CH_ADD Address of the next character to be interpreted: the character after the
argument of PEEK, or the ENTER at the end of a POKE statement.

S2 16408 X_PTR Address of the character preceding the marker.

SX2 16410 STKBOT }

} See Chapter 27.

SX2 16412 STKEND }

SN1 16414 BREG Calculator’s b register.

SN2 16415 MEM Address of area used for calculator’s memory. (Usually MEMBOT
but not always.)

S1 16417 not used


SX1 16418 DF_SZ The number of lines (including one blank line) in the lower part of the
screen.

S2 16419 S_TOP The number of the top program line in automatic listings.

SN2 16421 LAST_K Shows which keys pressed

SN1 16423 Debounce status of keyboard.

SN1 16424 MARGIN Number of blank lines above or below picture - 31.

SX2 16425 NXTLIN Address of next program line to be executed.

S2 16427 OLDPPC Line number to which CONT jumps.

SN1 16429 FLAGX Various flags.

SN2 16430 STRLEN Length of string type designation in assignment.

SN2 16432 T-ADDR Address of next item in syntax table (very unlikely to be useful).

S2 16434 SEED The seed for RND. This is the variable that is set by RAND.

S2 16436 FRAMES Counts the frames displayed on the television. Bit 15 is 1. Bits 0 to 14
are decremented for each frame sent to the television. This can be used
for timing, but PAUSE also uses it. PAUSE resets bit 15 to 0 and puts
in bits 0 to 14 the length of the pause. When these have been counted
down to zero, the pause stops. If the pause stops because of a key
depression, bit 15 is set to 1 again.

S1 16438 COORDS x-coordinate of last pointed PLOTted.

S1 16439 y-coordinate of last pointed PLOTted.

S1 16440 PR_CC Less significant byte of address of next position for LPRINT to print
at (in PRBUFF).

SX1 16441 S_POSN Column number for PRINT position.

SX1 16442 Line number for PRINT position.

S1 16443 CDFLAG Various flags. Bit 7 is on (1) during compute and display mode.

S33 16444 PRBUFF Printer buffer (33 rd character is ENTER).


SN30 16477 MEMBOT Calculator’s memory area; used to store numbers that cannot
conveniently be put on the calculator stack.

S2 16507 not used

Source: ZX81 BASIC Programming by Steven Vickers, (c) Sinclair Research Limited.

Many thanks to W. John Guineau and his trusty scanner.

You might also like