As the system variables and vectors represent the lowest level of the operating system, application programs should access these only when absolutely necessary. Explicitly:
The following list contains all the TOS system variables:
|Variable Address|| Description
|_autopath LONG 0x4ca|| Pointer to the access path for the AUTO-folder (unused and not
|_bootdev WORD 0x446|| Normally contains the number of the drive that was used for
booting. In addition, this variable is also used during booting to
select the boot-drive (but usually this only works when no hard disk
driver is booted). So if one sets the variable to 1, has no
boot-capable hard drive connected and executes a reset, booting will
be from drive B!
|_bufl LONG 0x4b2|| Two pointers to GEMDOS buffer lists.
|_cmdload WORD 0x482|| If this register is non-0, an attempt is made to start the
program COMMAND.PRG instead of GEM. The register may be set by a
program in an executable bootsector.
|_dskbufp LONG 0x4c6|| Pointer to a 1024-byte buffer for reading and writing to floppy
disks or hard drives (e.g. at boot-attempts). The pointer is also used
by the VDI.
|_drvbits LONG 0x4c2|| Bit-table for the mounted drives of the BIOS. Valid are:
Bit-0 = Drive A
Bit-1 = Drive B
Bit-2 = Drive C (etc.)
In TOS 1.00 the variable is not cleared at a reset. Therefore custom drivers should clear the bits they have entered at a reset; otherwise it could happen that drive identifiers suddenly "disappear".
|_frclock LONG 0x466|| Similar to _vbclock, with the difference that the count is not
halted by vblsem.
|_fverify WORD 0x444|| Determines whether the BIOS should perform a Verify via Rwabs
when writing to floppy disks, or not. Valid are:
0 = No Verify
Normally the Verify is switched on.
|_hz_200 LONG 0x4ba|| Number of 200-Hz interrupts till now.
|_longframe WORD 0x59e|| If this flag is not null, then a CPU with long
stackframes (i.e. not a 68000 type) is installed. This value is
of interest, for instance, if a routine is to be hooked into an
exception vector, and the values to be examined are passed on the
stack. If this variable has the value 0 than one will find the
parameters at offset 6, otherwise at offset 8.
|_md LONG 0x49e|| Not officially documented, and probably also unused.
|_membot LONG 0x432|| Lower end of the free ST-compatible memory region under GEMDOS
(i.e. the start of the original TPA). The variable is used by the
BIOS function Getmpb.
|_memtop LONG 0x436|| Similar to _membot the end of the free ST-compatible memory
|_nflops WORD 0x4a6|| Number of mounted floppy disk drives.
|_p_cookies LONG 0x5a0|| Pointer to the cookie jar.
|_prtabt WORD 0x4f0|| Flag for aborting the printing process due to a timeout. It is
|_shell_p LONG 0x4f6|| This pointer is not used by the ROM, i.e. programs that use it
themselves have to clear it in the case of a reset and at a program
termination. Normally _shell_p is set by UNIX-like shells, and points
to a routine that handles a command line. The address of the character
string is passed on the stack (4(sp)), the return of the operation
will lie in register D0.
|_sysbase LONG 0x4f2|| Points to a OSHEADER structure.
|_timr_ms WORD 0x442|| Time in milliseconds that normally passes between two ticks of
the system timer. This value is also returned by the BIOS function
|_v_bas_ad LONG 0x44e|| Pointer to the starting address of the logical screen, which on
an ST has to be aligned at a 256-byte boundary. With an STE and TT
this is a 2- or 8-byte boundary respectively.
|_vbl_list LONG 0x4ce|| List of the initial vertical blank routines. One should always
access only via _vblqueue.
|_vbclock LONG 0x462|| Number of vertical blanks processed since the last reset.
|_vblqueue LONG 0x456|| Pointer to the list of pointers to the deferred vertical blank
|bell_hook LONG 0x5ac|| Pointer to a routine for the output of the ping-sound (system
bell). The BIOS looks after the querying of the flag automatically
in con_term and calls this routine only when the bell should really be
sounded. The routine is called in supervisor-mode and terminated via
RTS; it may alter the registers D0-D2 and A0-A2. BIOS calls from
"within" the routine are permitted (from TOS 1.06 on,
from KAOS 1.4.2 on).
|colorptr LONG 0x45a|| Pointer to a colour palette, which is loaded into the ST
hardware colour registers (from address 0xffff8240 onwards) at the
next vertical blank. This prevens an unattractive flickering on the
screen. If there is a null in colorptr, then nothing happns. After the
transfer of the colour values the pointer is cleared.
|con_state LONG 0x4a8|| Internal pointer for screen output routines (not officially
|conterm BYTE 0x484|| Attribute bits for the BIOS device "CON:". Valid
|criticret LONG 0x48a|| oOfficially undocumented, and probably also unused.
|defshiftmd BYTE 0x44a|| Default colour graphic resolution. Switches the computer to
colour operation (after a reset, by changing of the plugs or by
switching on) into the specified resolution.
|end_os LONG 0x4fa|| Pointer to the first byte not used by TOS-internal variables
(i.e. the first byte of free memory).
|etv_critic LONG 0x404|| Logical GEMDOS vector 257. Should always be set only via
|etv_term LONG 0x408|| Logical GEMDOS vector 258. Should always be set via Setexc.
Programs that hook into any system vectors should also hook into
this vector. If the program is terminated in an abnormal
manner, the operating system jumps first via this vector, so that one
can withdraw cleanly from all changed vectors. As MagiC uses its
own etv_term vector for each application, collisions can
not arise there.
|etv_timer LONG 0x400|| Logical GEMDOS vector 256. Should always be set via Setexc.
|etv_xtra LONG 0x40c|| Reserved for the logical vectors 259-263 of GEMDOS, and
|exec_os LONG 0x4fe|| Pointer to the first byte of the text segment of the
|flock WORD 0x43e|| If there is a non-zero value here, then you must not
access the DMA chip. So DMA device drivers must first inquire whether
the DMA chip has been blocked and set flock themselves when they start
|hdv_boot LONG 0x47a|| Vector to the routine for loading the boot sector. This routine
is used by the BIOS to establish whether a boot-sector is present
and establish whether there is a boot sector and if so, whether it is
|hdv_bpb LONG 0x472|| Vector to routine that establishes the BPB of a BIOS drive.
The device number is passed on the stack (4(sp)).
|hdv_init LONG 0x46a|| Vector to the initialisation routines for the floppy disk
drives. It is read out before reading the boot sectors, and hence can
be altered only by reset-resident programs or ROM-modules. The tasks
|hdv_mediach LONG 0x47e|| Vector to routine for establishing the media-change status of a
BIOS drive. The BIOS device number is passed on the stack (4(sp)).
|hdv_rw LONG 0x476|| Vector to the routine for reading and writing of blocks to
BIOS drives. The same parameters are passed on the stack as for
Rwabs (starting with 4(sp); rwflag).
|kcl_hook LONG 0x5b0|| Pointer to a routine for the output of the key-click sound. The
BIOS itself serves for the inquiry of the flag in con_term and calls
this routine only when the sound is to be issued. The routine is
called in supervisor mode, terminated via RTS, and may alter the
registers D0-D2 and A0-A2; it should not take up too much time. (From
TOS 1.06 on, from KAOS 1.4.2 on)
|memcntrl BYTE 0x424|| Contains the lowest four bits of the memory control register
Some known values are:
|memval2 LONG 0x43a|| Should hold the magical value 0x237698aa after a successful
cold start. If both memval2 as well as memvalid have the required
value and from TOS 1.02 on memval3 as well), then at the next reset
only a warm start will be initiated.
|memval3 LONG 0x51a|| See also memval and memval2. In this case the magical value is
0x5555aaaa. (From TOS 1.02 on)
|memvalid LONG 0x420|| Should contain the magical value 0x752019f3.
|nvbls WORD 0x454|| Number of entries that _vblqueue points to. Identical with the
maximum number of coresidentally installable vertical blank routines
(default value: 8).
|palmode WORD 0x448|| Tells the Atari the television mode. The following apply:
0 = NTSC mode (60 Hz)
1 = PAL mode (50 Hz)
In practice this system variable is ignored. A change of the picture repetition frequency is only possible via the corresponding hardware registers.
|phystop LONG 0x42e|| Pointer to the first byte above the physical end of the
ST-compatible RAM region (physical top of ST-compatible RAM)
|prt_cnt WORD 0x4ee|| Counter for the Alternate-Help key-presses. Valid are:
This variable also has to be set before a call of Prtblk.
|prv_aux LONG 0x512|| Pointer to a routine for output to the serial port (likewise
for hardcopy routine). The characer to be output lies in 6(sp).
|prv_auxo LONG 0x50e|| Pointer to a routine for establishing the status of the serial
ports (likewise for hardcopy function).
|prv_lst LONG 0x50a|| Pointer to a routine for output to the parallel port (likewise
for hardcopy routine). The character to be output lies in 6(sp).
|prv_lsto LONG 0x506|| Pointer to a routine for establishing the status of the
parallel port (likewise for hardcopy routine).
|pun_ptr LONG 0x516|| After successful installation of an AHDI- compatible hard disk
driver this points to a PUN_INFO structure.
|ramtop LONG 0x5a4|| Pointer to the end of the Fast-RAM in Atari TT (not officially
|ramvalid LONG 0x5a8|| Magic value that shows whether ramtop holds a sensible value.
Must be 0x1357bd13. Not officially documented.
|resvalid LONG 0x426|| If this address at a reset contains the magic value 0x31415926,
then the system will jump through resvector.
|resvector LONG 0x42a|| This is used during system initialisation. Contains the vector
for a reset, provided resvalid contains the correct value. At the time
of the call the hardware registers are not yet set, and the
stack-pointer too has not been initialised yet.
|sav_context LONG 0x4ae|| Should actually be a pointer to the memory region into which
parts of the stack are saved during exceptions. Actually however it is
not used by TOS, and one therefore has to access the variables
directly at the address 0x380.
|sav_row WORD 0x4ac|| Internal buffer for temporary saving the cursor row position
when using an Esc-Y VT-52 sequence (not officially documented).
|savptr LONG 0x4a2|| Pointer to temporary buffer to which internal registers of
BIOS and XBIOS are saved.
|scr_dump LONG 0x502|| Pointer to the hardcopy routine. Is used by the XBIOS function
Scrdmp. Zeiger auf die Hardcopy-Routine. Wird von der XBIOS-Funktion
|screenpt LONG 0x45e|| Pointer to the top of the physical screen. Is transferred at
the next vertical blank after _v_bas_ad to the relevant hardware
registers, bu not cleared subsequently. Therefore one should always
work with Setscreen.
|seekrate WORD 0x440|| Seek rate for the two floppy drives. Valid are:
0 = 6 ms
1 = 12 ms
2 = 2 ms
3 = 3 ms
The variable is read out straight after system start by the BIOS, and ignored afterwards. For altering the seek rate that is used actually, one has to use the XBIOS function Floprate.
|sshiftmd BYTE 0x44c|| Copy of the mode register of the shifter. Valid are:
0 = 320 * 200 (four planes)
1 = 640 * 200 (two planes)
2 = 640 * 400 (one planes)
3 = 640 * 480 (four planes, TT only)
4 = 1280 * 960 (one planes, TT only)
5 = 320 * 480 (eight planes, TT only)
All other values are reserved for future extensions.
|swv_vec LONG 0x46e|| Pointer to the routine that reacts to the connection of a black
and white or colour monitor (at the start it points to the normal reset
|the_env LONG 0x4be|| Pointer to the default environment strings (unused).
|themd MD 0x48e|| Pointer to the MD structure of the GEMDOS. This is set once
only during initialisation of the system, and must not be altered (and
it would be if using Getmpb!).
|trp14ret LONG 0x486|| Officially not documented, and probably also unused.
|vblsem WORD 0x452|| A value of 1 here means that the vertical blank handler is
|xconin LONG 0x53e|| Eight vectors for Bconin routines. (From TOS 1.02 on)
|xconout LONG 0x57e|| Eight vectors for Bconout routines. (From TOS 1.02 on)
|xconstat LONG 0x51e|| Eight vectors for Bconstat routines. (From TOS 1.02 on)
|xcostat LONG 0x55e|| Eight vectors for Bcostat routines. (From TOS 1.02 on)
Reset vector The System Vectors Program launch and TPA
System variables, sorted numerically
See also: System variables