•  Back 
  •  BIOS 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File3.4  Die Systemvariablen                                           TOS

Da die Systemvariablen und -vektoren die unterste Schicht des 
Betriebssystems darstellen, sollten Anwenderprogramme nur wenn 
unbedingt notwendig auf diese zugreifen. Konkret:

   ∙ keine Systemvariablen verändern, die nicht verändert werden 
     dürfen.
   ∙ keine Systemvariablen benutzen, wenn statt dessen auch eine 
     Funktion des Betriebssystems aufgerufen werden könnte (Beispiel: 
     Mfpint).

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.

 _vbl_list    LONG 0x4ce ursprüngliche Liste der Vertical-Blank 
                         Routinen. Man sollte immer nur über _vqlqueue 
                         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:

                          Bit-0 =  Tastenklick ein/aus
                          Bit-1 =  Tastenwiederholung ein/aus
                          Bit-2 =  Glocke bei Ausgabe von CTRL-G
                          Bit-3 =  bei Bconin den aktuellen Wert von 
                                   Kbshift in den Bits 24..31 
                                   zurückgeben.

 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:

                            ∙ Initialisierung der Diskettenlaufwerke 
                              (_nflops wird entsprechend gesetzt).
                            ∙ Übertragung von seekrate in die internen 
                              Variablen des BIOS.

 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:

                          Speichergröße    Wert 
                          128 K            0 
                          512 K            4 
                          256 K (2 Bänke)  0 
                          1 MB             5 

 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:

                          -1 =  normaler Status
                           0 =  Hardcopy beginnen
                          >0 =  Hardcopy abbrechen und auf Wert -1 
                                zurücksetzen.

                         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 und nach 
                         _v_bas_ad ü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