Da die Systemvariablen und -vektoren die unterste Schicht des Betriebssystems darstellen, sollten Anwenderprogramme nur wenn unbedingt notwendig auf diese zugreifen. Konkret:
Die folgende Liste enthält alle Systemvariablen des TOS:
Variable Adresse | Beschreibung
| ||||||||||
_autopath LONG 0x4ca | Zeiger auf Zugriffspfad für den AUTO-Ordner (unbenutzt und
nicht offiziell dokumentiert).
| ||||||||||
_bootdev WORD 0x446 | enthält normalerweise die Nummer des Laufwerks, von dem
gebootet worden ist. Außerdem wird diese Variable noch beim Booten
benutzt, um das Bootlaufwerk zu wählen (das klappt i.a. aber nur
dann, wenn kein Festplattentreiber gebootet wird). Wenn man also die
Variable auf 1 setzt, keine autobootfähige Festplatte angeschlossen
hat und einen Reset auslöst, wird von Laufwerk B gebootet!
| ||||||||||
_bufl LONG 0x4b2 | zwei Zeiger auf GEMDOS-Pufferlisten.
| ||||||||||
_cmdload WORD 0x482 | wenn dieses Register nicht 0 ist, wird versucht, anstelle von
GEM das Programm COMMAND.PRG zu starten. Das Register kann durch ein
Programm in einem ausführbaren Bootsektor gesetzt werden.
| ||||||||||
_dskbufp LONG 0x4c6 | Zeiger auf einen 1024 Bytes großen Puffer zum Lesen und
Schreiben auf Disketten oder Festplatten (z.B. beim Bootversuch). Der
Zeiger wird auch vom VDI benutzt.
| ||||||||||
_drvbits LONG 0x4c2 | Bit-Tabelle über die angemeldeten Laufwerke des BIOS. Es
gilt:
Bit-0 = Laufwerk A Bit-1 = Laufwerk B Bit-2 = Laufwerk C (usw.) Die Variable wird in TOS 1.00 beim Reset nicht gelöscht. Eigene Treiber sollten daher bei einem Reset die selbst eingetragenen Bits löschen; anderenfalls kann es passieren, daß Laufwerkskennungen plötzlich "verschwinden". | ||||||||||
_frclock LONG 0x466 | analog _vbclock, mit dem Unterschied, daß die Zählung nicht
durch vblsem angehalten wird.
| ||||||||||
_fverify WORD 0x444 | legt fest, ob das BIOS beim Schreiben auf Disketten per Rwabs
einen Verify durchführen soll, oder nicht. Dabei gilt:
0 = kein Verify Im Normalfall ist das Verify eingeschaltet. | ||||||||||
_hz_200 LONG 0x4ba | bisherige Anzahl der 200-Hz Interrupts.
| ||||||||||
_longframe WORD 0x59e | Wenn dieses Flag nicht null ist, dann ist eine CPU mit
langen Stackframes (also kein 68000er) installiert. Dieser
Wert ist z.B. dann von Interesse, wenn eine Routine in einen
Exception-Vektor eingeklinkt werden soll, und die zu untersuchenden
Werte auf dem Stack übergeben werden. Falls diese Variable den Wert 0
besitzt findet man die Parameter bei Offset 6, anderenfalls
bei Offset 8.
| ||||||||||
_md LONG 0x49e | offiziell nicht dokumentiert, und wohl auch unbenutzt.
| ||||||||||
_membot LONG 0x432 | Unteres Ende des unter GEMDOS freien ST-kompatiblen Speichers
(also der Anfang der ursprünglichen TPA). Die Variable wird von der
BIOS-Funktion Getmpb verwendet.
| ||||||||||
_memtop LONG 0x436 | Analog zu _membot das Ende des freien ST-kompatiblen
Speicherbereiches.
| ||||||||||
_nflops WORD 0x4a6 | Zahl der angeschlossenen Diskettenlaufwerke
| ||||||||||
_p_cookies LONG 0x5a0 | Zeiger auf den Cookie-Jar.
| ||||||||||
_prtabt WORD 0x4f0 | Flag für Abbruch des Druckvorgangs. Es ist jedoch ungenutzt.
| ||||||||||
_shell_p LONG 0x4f6 | Dieser Zeiger wird vom ROM nicht genutzt, d.h. Programme die
ihn selbst benutzen, müssen ihn im Falle eines Resets und bei
Programm-Ende selbst löschen. Normalerweise wird _shell_p von
UNIX-ählichen Shells gesetzt, und zeigt auf eine Routine, die eine
Kommandozeile abarbeitet. Die Adresse der Zeichenkette wird auf dem
Stack (4(sp)) übergeben, das Ergebnis der Operation erhält man in
Register D0.
| ||||||||||
_sysbase LONG 0x4f2 | zeigt auf eine OSHEADER-Struktur.
| ||||||||||
_timr_ms WORD 0x442 | Zeit in Millisekunden, die normalerweise zwischen zwei Aufrufen
des System-Timers vergeht. Dieser Wert wird auch von der
BIOS-Funktion Tickcal zurückgeliefert.
| ||||||||||
_v_bas_ad LONG 0x44e | Zeiger auf den Anfang des Bildschirmspeicher, der beim ST auf
einer 256-Byte-Grenze beginnen muss. Beim STE und TT ist es eine 2-
bzw. 8-Byte Grenze. Diese Varibale wird von von Logbase
zurückgeliefert.
| ||||||||||
_vbl_list LONG 0x4ce | ursprüngliche Liste der Vertical-Blank Routinen. Man sollte
immer nur über _vblqueue zugreifen.
| ||||||||||
_vbclock LONG 0x462 | Anzahl der erfolgten Vertical-Blanks.
| ||||||||||
_vblqueue LONG 0x456 | Zeiger auf Zeigertabelle für Vertical-Blank-Prozesse.
| ||||||||||
bell_hook LONG 0x5ac | Zeiger auf eine Routine zur Ausgabe des Ping-Geräusches. Das
BIOS sorgt selbsttätig für die Abfrage des Flags in con_term und
ruft diese Routine nur dann auf, wenn das Geräusch wirklich erklingen
soll. Die Routine wird im Supervisor-Modus aufgerufen per RTS
abgeschlossen, und darf die Register D0-D2 und A0-A2 verändern. Auch
BIOS Aufrufe vom "innern" der Routine aus sind erlaubt.
(ab TOS 1.06, ab KAOS 1.4.2)
| ||||||||||
colorptr LONG 0x45a | Zeiger auf eine Farbpalette, die beim nächsten Vertical-Blank
in die ST-Hardware Farbregister geladen wird (ab Adresse 0xffff8240).
Damit wird ein unschönes Zucken auf dem Bildschirm vermieden. Steht
in colorptr eine Null, so passiert nichts. Nach Übertragung der
Farbwerte wird der Zeiger gelöscht.
| ||||||||||
con_state LONG 0x4a8 | interner Zeiger für Bildschirm-Ausgaberoutinen (offiziell
nicht dokumentiert).
| ||||||||||
conterm BYTE 0x484 | Attribut-Bits für das BIOS-Gerät "CON:". Es gilt:
| ||||||||||
criticret LONG 0x48a | offiziell nicht dokumentiert, und auch wohl unbenutzt.
| ||||||||||
defshiftmd BYTE 0x44a | Standard-Farbgrafik-Auflösung. Schaltet der Computer auf
Farbbetrieb um (nach einem Reset, durch Wechseln der Stecker oder
durch Einschalten), wird in die angegebene Auflösung geschaltet.
| ||||||||||
end_os LONG 0x4fa | Zeiger auf das erste, nicht für TOS-interne Variablen benutzte
Byte (also das erste Byte des freien Speichers).
| ||||||||||
etv_critic LONG 0x404 | logischer GEMDOS-Vektor 257. Sollte immer nur per Setexc
gesetzt werden.
| ||||||||||
etv_term LONG 0x408 | logischer GEMDOS-Vektor 258. Sollte immer nur per Setexc
gesetzt werden. Programme, die sich in irgendwelche Systemvektoren hängen,
sollten sich auch in diesen Vektor einklinken. Falls das
Programm abnormal beendet wird, springt das Betriebssystem zunächst
über diesen Vektor, so daß man sich in Ruhe aus allen veränderten
Vektoren zurückziehen kann. Da MagiC für jede Applikation einen
eigenen etv_term-Vektor verwendet, kann es dabei nicht
zu Kollisionen kommen.
| ||||||||||
etv_timer LONG 0x400 | logischer GEMDOS-Vektor 256. Sollte immer nur per Setexc
gesetzt werden.
| ||||||||||
etv_xtra LONG 0x40c | reserviert für die logischen Vektoren 259-263 des GEMDOS, und
z.Zt. unbenutzt.
| ||||||||||
exec_os LONG 0x4fe | Zeiger auf das erste Byte des Textsegmentes des
Shell-Programms.
| ||||||||||
flock WORD 0x43e | wenn hier ein Wert ungleich 0 steht, dann darf nicht
auf den DMA-Chip zugegriffen werden. DMA-Gerätetreiber müssen also
zunächst abfragen, ob der DMA-Chip blockiert worden ist, und flock
dann, wenn sie mit der Arbeit beginnen, selbst setzen.
| ||||||||||
hdv_boot LONG 0x47a | Vektor zur Routine zum Laden des Bootsektors. Diese Routine
wird vom BIOS benutzt, um festzustellen, ob ein Bootsektor vorhanden
und ob er ausführbar ist.
| ||||||||||
hdv_bpb LONG 0x472 | Vektor zur Routine, die den BPB eines BIOS-Laufwerkes
ermittelt. Die Gerätenummer wird auf dem Stack (4(sp)) übergeben.
| ||||||||||
hdv_init LONG 0x46a | Vektor zu den Initialisierungsroutinen für die
Diskettenlaufwerke. Wird vor dem Lesen der Bootsektoren ausgelesen,
und kann daher nur von reset-residenten Programmen oder ROM-Modulen
verändert werden. Zu den Aufgaben gehören:
| ||||||||||
hdv_mediach LONG 0x47e | Vektor zur Routine zur Bestimmung des Media-Change-Status eines
BIOS-Laufwerks. Die BIOS-Gerätenummer wird auf dem Stack (4(sp))
übergeben.
| ||||||||||
hdv_rw LONG 0x476 | Vektor zur Routine zum Lesen und Schreiben von Blöcken auf
BIOS-Laufwerken. Auf dem Stack werden die gleichen Parameter wie bei
Rwabs übergeben (beginnend mit 4(sp); rwflag).
| ||||||||||
kcl_hook LONG 0x5b0 | Zeiger auf eine Routine zur Ausgabe des
Tastenklick-Geräusches. Das BIOS sorgt selbsttätig für die Abfrage
des Flags in con_term und ruft diese Routine nur dann auf, wenn das
Geräusch wirklich erklingen soll. Die Routine wird im Supervisor-Mode
aufgerufen, per RTS abgeschlossen und darf die Register D0-D2 und
A0-A2 verändern und sollte nicht allzu viel Zeit verbrauchen. (ab TOS
1.06, ab KAOS 1.4.2)
| ||||||||||
memcntrl BYTE 0x424 | enthält die untersten vier Bits des Speicher-Kontrollregisters
(0xffff8001)
Einige bekannte Werte sind:
| ||||||||||
memval2 LONG 0x43a | sollte den Magic-Wert 0x237698aa enthalten. Haben sowohl
memval2 als auch memvalid den geforderten Wert, (und ab TOS 1.02
auch memval3), wird beim nächsten Reset nur ein Warmstart ausgelöst.
| ||||||||||
memval3 LONG 0x51a | siehe auch memval und memval2. In diesem Fall ist der magische
Wert 0x5555aaaa. (ab TOS 1.02)
| ||||||||||
memvalid LONG 0x420 | sollte die magische Zahl 0x752019f3 enthalten.
| ||||||||||
nvbls WORD 0x454 | Anzahl der Einträge, auf die _vblqueue zeigt. Identisch mit
der Maximalzahl von gleichzeitig installierbaren
Vertical-Blank-Routinen (Standardwert: 8).
| ||||||||||
palmode WORD 0x448 | legt laut Atari die Fernsehnorm fest. Es gilt:
0 = NTSC-Modus (60 Hz) 1 = PAL-Modus (50 Hz) Tatsächlich wird diese Systemvariable nicht berücksichtigt. Eine Änderung der Bildwiederholfrequenz ist nur über die entsprechenden Hardwareregister möglich. | ||||||||||
phystop LONG 0x42e | Zeiger auf das erste Byte über dem physikalischen Ende des
ST-kompatiblen RAM-Bereichs.
| ||||||||||
prt_cnt WORD 0x4ee | Zähler für die Alternate-Help Tastendrücke. Es gilt:
Diese Variable muss man auch vor einem Aufruf von Prtblk setzen. | ||||||||||
prv_aux LONG 0x512 | Zeiger auf eine Routine zur Ausgabe auf dem seriellen Port
(ebenfalls für Hardcopy Routine). Das auszugebende Zeichen steht in
6(sp).
| ||||||||||
prv_auxo LONG 0x50e | Zeiger auf eine Routine zum Feststellen des Status der
seriellen Schnittstelle (ebenfalls für Hardcopy-Funktion).
| ||||||||||
prv_lst LONG 0x50a | Zeiger auf eine Routine zur Ausgabe auf dem parallelen Port
(ebenfalls für Hardcopy Routine). Das auszugebende Zeichen steht in
6(sp).
| ||||||||||
prv_lsto LONG 0x506 | Zeiger auf eine Routine zum Feststellen des Status des
parallelen Ports (ebenfalls für Hardcopy-Routine).
| ||||||||||
pun_ptr LONG 0x516 | zeigt bei erfolgreicher Installation eines AHDI-kompatiblen
Festplattentreibers auf eine PUN_INFO-Struktur.
| ||||||||||
ramtop LONG 0x5a4 | Zeiger auf das Ende des Fast-RAM's im Atari-TT (nicht offiziell
dokumentiert).
| ||||||||||
ramvalid LONG 0x5a8 | Magic-Wert der anzeigt, ob ramtop einen sinnvollen Wert
enthält. Muß 0x1357bd13 sein. Nicht offiziell dokumentiert.
| ||||||||||
resvalid LONG 0x426 | wenn diese Adresse bei einem Reset den Wert 0x31415926
enthält, wird durch resvector gesprungen.
| ||||||||||
resvector LONG 0x42a | wird bei der Systeminitialisierung benutzt. Enthält den Vektor
für einen Reset, falls resvalid den korrekten Wert beinhaltet. Zum
Zeitpunkt des Aufrufs sind die Hardwareregister noch nicht gesetzt,
und auch der Stackpointer ist noch nicht initialisiert.
| ||||||||||
sav_context LONG 0x4ae | sollte eigentlich ein Zeiger auf den Speicherbereich sein, in
den bei Exceptions die Register und Teile des Stacks gerettet werden.
Tatsächlich wird er aber vom TOS nicht benutzt, und daher muß man
direkt auf die Variablen bei Adresse 0x380 zugreifen.
| ||||||||||
sav_row WORD 0x4ac | interner Puffer zur Zwischenspeicherung der Cursor-Position
(nicht offiziell dokumentiert).
| ||||||||||
savptr LONG 0x4a2 | Zeiger auf Register-Zwischenspeicher von BIOS und XBIOS.
| ||||||||||
scr_dump LONG 0x502 | Zeiger auf die Hardcopy-Routine. Wird von der XBIOS-Funktion
Scrdmp benutzt.
| ||||||||||
screenpt LONG 0x45e | Zeiger auf den Anfang des Bildspeichers. Wird beim nächsten
Vertical-Blank in die betreffenden Hardware-Register (Rückgabe von
Physbase) und nach _v_bas_ad (Rückgabe von Logbase) übertragen,
anschließend aber nicht gelöscht. Daher sollte man stattdessen immer
mit Setscreen arbeiten.
| ||||||||||
seekrate WORD 0x440 | Seekrate für die beiden Floppies. Es gilt:
0 = 6 ms 1 = 12 ms 2 = 2 ms 3 = 3 ms Die Variable wird gleich nach dem Systemstart vom BIOS ausgelesen, und danach ignoriert. Zum ändern der tatsächlich benutzten Seekrate muß man die XBIOS-Funktion Floprate verwenden. | ||||||||||
sshiftmd BYTE 0x44c | Kopie des Modus-Registers des Shifters. Es gilt:
0 = 320 * 200 (vier Planes) 1 = 640 * 200 (zwei Planes) 2 = 640 * 400 (ein Plane) 3 = 640 * 480 (vier Planes, nur TT) 4 = 1280 * 960 (ein Plane, nur TT) 5 = 320 * 480 (acht Planes, nur TT) Alle anderen Werte sind für zukünftige Erweiterungen reserviert. | ||||||||||
swv_vec LONG 0x46e | Zeiger auf die Routine, die auf das Anschließen eines
Schwarz-Weiß bzw. Farbmonitors reagiert (zeigt zu Beginn auf die
normale Reset-Routine).
| ||||||||||
the_env LONG 0x4be | Zeiger auf die Standard-Environment Strings (unbenutzt).
| ||||||||||
themd MD 0x48e | Zeiger auf MD-Struktur des GEMDOS. Diese wird ein einziges mal
bei der Initialisierung des Systems gesetzt, und darf nicht verändert
werden (und das würde sie bei Benutzung von Getmpb!).
| ||||||||||
trp14ret LONG 0x486 | offiziell nicht dokumentiert, und auch wohl unbenutzt.
| ||||||||||
vblsem WORD 0x452 | ein Wert von 1 bedeutet, daß der Vertical-Blank-Handler
aktiviert ist.
| ||||||||||
xconin LONG 0x53e | Acht Vektoren für Bconin-Routinen. (ab TOS 1.02)
| ||||||||||
xconout LONG 0x57e | Acht Vektoren für Bconout-Routinen. (ab TOS 1.02)
| ||||||||||
xconstat LONG 0x51e | Acht Vektoren für Bconstat-Routinen. (ab TOS 1.02)
| ||||||||||
xcostat LONG 0x55e | Acht Vektoren für Bcostat-Routinen. (ab TOS 1.02)
|
Querverweis:
Reset-Vektor Systemvektoren Programmstart und TPA Systemvariablen,
nummerisch sortiert
Variable | Größe | Adresse |
0x400 | LONG | etv_timer |
0x404 | LONG | etv_critic |
0x408 | LONG | etv_term |
0x40c | LONG | etv_xtra |
0x420 | LONG | memvalid |
0x424 | BYTE | memcntrl |
0x426 | LONG | resvalid |
0x42a | LONG | resvector |
0x42e | LONG | phystop |
0x432 | LONG | _membot |
0x436 | LONG | _memtop |
0x43a | LONG | memval2 |
0x43e | WORD | flock |
0x440 | WORD | seekrate |
0x442 | WORD | _timr_ms |
0x444 | WORD | _fverify |
0x446 | WORD | _bootdev |
0x448 | WORD | palmode |
0x44a | BYTE | defshiftmd |
0x44c | BYTE | sshiftmd |
0x44e | LONG | _v_bas_ad |
0x452 | WORD | vblsem |
0x454 | WORD | nvbls |
0x456 | LONG | _vblqueue |
0x45a | LONG | colorptr |
0x45e | LONG | screenpt |
0x462 | LONG | _vbclock |
0x466 | LONG | _frclock |
0x46a | LONG | hdv_init |
0x46e | LONG | swv_vec |
0x472 | LONG | hdv_bpb |
0x476 | LONG | hdv_rw |
0x47a | LONG | hdv_boot |
0x47e | LONG | hdv_mediach |
0x482 | WORD | _cmdload |
0x484 | BYTE | conterm |
0x486 | LONG | trp14ret |
0x48a | LONG | criticret |
0x48e | MD | themd |
0x49e | LONG | _md |
0x4a2 | LONG | savptr |
0x4a6 | WORD | _nflops |
0x4a8 | LONG | con_state |
0x4ac | WORD | sav_row |
0x4ae | LONG | sav_context |
0x4b2 | LONG | _bufl |
0x4ba | LONG | _hz_200 |
0x4be | LONG | the_env |
0x4c2 | LONG | _drvbits |
0x4c6 | LONG | _dskbufp |
0x4ca | LONG | _autopath |
0x4ce | LONG | _vbl_list |
0x4ee | WORD | prt_cnt |
0x4f0 | WORD | _prtabt |
0x4f2 | LONG | _sysbase |
0x4f6 | LONG | _shell_p |
0x4fa | LONG | end_os |
0x4fe | LONG | exec_os |
0x502 | LONG | scr_dump |
0x506 | LONG | prv_lsto |
0x50a | LONG | prv_lst |
0x50e | LONG | prv_auxo |
0x512 | LONG | prv_aux |
0x516 | LONG | pun_ptr |
0x51a | LONG | memval3 |
0x51e | LONG | xconstat |
0x53e | LONG | xconin |
0x55e | LONG | xcostat |
0x57e | LONG | xconout |
0x59e | WORD | _longframe |
0x5a0 | LONG | _p_cookies |
0x5a4 | LONG | ramtop |
0x5a8 | LONG | ramvalid |
0x5ac | LONG | bell_hook |
0x5b0 | LONG | kcl_hook |
Querverweise: Systemvariablen