AnlaĂ zu dieser kleinen Untersuchung war der Versuch, ein neues Programm [1] unter verschiedenen Umgebungen auszutesten. Da dieses Programm mit einigen neuen und interessanten Eigenschaften ausgestattet war und unter anderem den Aufruf der erst ab AES V1.3 implementierten Funktion fsel_exinput - gekoppelt an eine Versionsabfrage - enthielt, begaben wir uns also zu einem Bekannten, der eine Entwicklerversion des TOS 1.4 installiert hatte, das ja AES V1.3 enthalten sollte.
Doch obwohl wir alle ganz sicher waren, TOS 1.4 wirklich vor uns zu haben, griff die Abfrage offensichtlich nicht, und es war leider nichts mit dem erwarteten fsel_exinput!
Um diesem merkwĂŒrdigen Effekt auf die Spur zu kommen, setzte ich mich hin und schrieb ein kleines Assembler-Programm, das mir alle Versionsnummem und -daten der wichtigen Betriebssystemteile ausgeben wĂŒrde. Die Ăberlegungen hierzu sowie zu den von ATARI bzw. Digital Research benutzten Formaten zusammen mit den Ergebnissen der Untersuchungen verschiedener mir bekannter TOS-Versionen möchte ich den geneigten âAtarianernâ nicht vorenthalten. AuĂerdem schienen mir nun, nachdem der ATARI ST inzwischen in ein - fĂŒr Computer - schon âreifes Alterâ gekommen ist. Reflektionen zur Geschichte und Entwicklung seines Betriebssystems angebracht.
Das TOS
Das Betriebssystem des ATARI ST wurde ursprĂŒnglich in den USA bei Digital Research Inc. (DRI), den Schöpfern von CP/M und GEM, entwickelt und besteht aus mehreren Teilen, die aufeinander aufbauen: âTOSâ (The Operating System [2]), bestehend aus BIOS (Basic Input Output System), XBIOS (Extended BIOS) und GEMDOS (GEM Disk Operating System), stellen das âeigentlicheâ Betriebssystem dar [2;7]. Darauf aufgesetzt ist GEM (Graphic Environment Manager), das wiederum aus VDI (Virtual Device Interface) und AES (Application Environment Services) besteht und beim ATARI ST, im Gegensatz zum PC-GEM, ein integraler Teil des Betriebssystems im weiteren Sinne ist - ĂŒbrigens einer der GrĂŒnde, weshalb das ST-GEM vom Rechtsstreit zwischen Apple und DRI unberĂŒhrt blieb. Dieser Auffassung entsprechen auch die Einteilung der auf dem ST lauffĂ€higen Programme nach ihrer jeweiligen OberflĂ€che in TOS-Anwendungen und GEM-Applikationen, die Namensgebung der entsprechenden Extender und schlieĂlich die Aufmachung der Copyright-Box im Desktop. Oft wird aber auch das ST-Betriebssystem als Ganzes unter dem Namen TOS zusammengefaĂt, z.B. in [3]. Wie dem auch sei, das TOS trĂ€gt eine Versionsnummer und ein Entstehungsdatum, von den Teilen des Betriebssystems sind auĂerdem GEMDOS und AES mit gesonderten Versionsnummern versehen, die sich mit Hilfe spezieller Funktionen abfragen lassen. Dazu spĂ€ter mehr. Doch kommen wir nun zu dem Teil, in dem die meisten interessanten Informationen zu diesem Betriebssystem abgelegt sind, und das ist:
... oder TOS-Programmkopf, denn das TOS ist ja schlieĂlich nichts anderes als ein Programm, und zwar das Programm, das gestartet wird, wenn wir den ST einschalten, und das dann die ganze Zeit lĂ€uft - im Vordergrund oder, wenn andere Programme oder âApplikationenâ laufen, im Hintergrund. Wie kommen wir nun an diese interessanten Informationen heran?
Das TOS befindet sich bei den meisten STs in einem 192 kByte groĂen ROM (Read Only Memory), bis auf einige frĂŒhe Versionen dieses Rechners (260 ST, 520 ST und 520 ST+), die stattdessen nur ein sogenanntes Boot-ROM haben - eine 16 kByte groĂe Miniausgabe, die den ST gerade einmal dazu befĂ€higt, das ârichtigeâ, d.h. vollstĂ€ndige TOS von Diskette nachzuladen (NĂ€heres dazu und zu den Daten des Boot-ROMs weiter unten). Das ROM beginnt beim ST an der Adresse $FC0000.
Doch nun nur ja nicht etwa frech ins ROM âgepeektâ! Denn schlieĂlich muĂ das âaktiveâ TOS ja gar nicht dort liegen. Es kann ja auch eine andere Version des TOS von Diskette nachgeladen worden sein, oder wir haben es gar mit einem der neuen STEs zu tun, bei denen das ansonsten kompatible TOS an der Adresse $E00000 liegt! Und wer weiĂ, was die Zukunft noch alles bringen wird. Also holt man sich die Adresse des TOS-Headers korrekterweise aus der garantierten Betriebssystemvariablen _sysbase ($4F2).
Dort liegen nun die uns hier interessierenden Daten an den Offsets, die man Tabelle 1 entnehmen kann (die Bezeichnungen wurden aus [3] ĂŒbernommen):
Die drei Variablen osjbase, os_start und osjnembot habe ich eigentlich nur aufgenommen, um einmal zu verfolgen, wie sich die Lage des Betriebssystems im Laufe der Zeit und der fortschreitenden Versionsnummern immer weiter zu höheren Adressen hin verschoben hat, und wie auch der TOS-Header - schon zweimal -vergröĂert, der OS-Pool [7] dann jedoch wieder verkleinert wurde.
Offset |
Format |
Bezeichnung |
Bedeutung |
$02 |
word |
os_version |
TOS-Versionsnummer |
$04 |
long |
os_start |
TOS-Startadresse |
$08 |
long |
os_base |
TOS-Header-Adresse |
$0C |
long |
osjmembot |
Anfangsadresse des freien Speichers |
$18 |
long |
os_gendat |
TOS-Erstellungsdatum im BCD-Format |
$1E |
word |
os_gendatg |
das gleiche im GEMDOS-Format, erst seit dem TOS vom 20.11.1985 |
Tabelle 1: Offsets aus der Betriebssystemvariablen _sysbase
Die TOS-Version
Da ist sie nun endlich, die TOS-Versionsnummer, verschwenderisch kodiert in einem Wort, jedes Byte eine Dezimalstelle enthaltend, und zwar so, wie ein M68000-Prozessor so etwas im Speicher abzulegen pflegt! Im höherwertigen Byte steht nĂ€mlich die Vorkomma- und im niederwertigen die Nachkommastelle. Man könnte dies sonst etwas ungewöhnliche Format als decimal byte fixed, also etwa âDezimal-Byte in Festkommadarstellungâ bezeichnen. Das Wort $0102 z.B. ist also als Version 1.2 zu interpretieren, bekannter vielleicht unter dem Namen âBlitter-TOSâ. Der Vorteil ist hierbei, daĂ man es sehr einfach in ASCII wandeln kann, und im Hexdump ist es eben auch gut zu erkennen. Was die âVerschwendungâ betrifft so sind - oder waren - so viele TOS-Versionen wahrscheinlich auch gar nicht geplant. Hoffentlich reichtâs beim jetzigen Entwicklungstempo bis zum Jahre 2099! Und damit kommen wir auch schon zum...
...TOS-Datum...
oder genauer TOS-Erstellungsdatum. Dies liegt im TOS-Header gleich zweimal - in verschiedenen Formaten - vor. Erst einmal als Langwort im Format BCD (Binary Coded Decimal) fixed, also etwa BCD-Festkommaformat. Die Kodierung ist MM/DD/YYYY, \m angelsĂ€chsischen Format. $04221987 wĂ€re also zu interpretieren als 04/22/1987 oder in unserer Schreibweise als 22.4.1987, das ist wieder das Datum des allseits bekannten Blitter-TOSâ. Die Umwandlung des BCD-Formats, bei dem jedes Nibble (Halbbyte) eine Dezimalziffer enthĂ€lt, ist relativ einfach zu bewerkstelligen, und auĂerdem lĂ€Ăt sich die Information direkt aus dem Hexdump ablesen.
Das gleiche Datum ist noch einmal am Offset $1E als Wort in GEM-DOS- Kodierung abgelegt, allerdings -soweit mir bekannt - erst ab der TOS-Version vom 20.11.1985, als der TOS-Header zum erstenmal erweitert wurde, vorher begann hier schon der Code des Betriebssystems. Diese sog. GEMDOS-Kodierung ist die gleiche, die von den beiden GEMDOS-Funktionen Tsetdate und Tgetdate verwendet wird. Hier ist das Datum Ă€uĂerst sparsam binĂ€r kodiert in den 16 Bits untergebracht, und zwar in folgender Form [4;5]:
Bit 0...4 Tag, von 1...31
Bit 5...8 Monat, von 1...12
Bit 9..15 Jahr seit 1980, von 0...119, d.h. bis 2099
Das schon erwĂ€hnte Datum des âBlitter-TOSâ erscheint hier in der Form $0E96, die Dekodierung ist also durch Bit-Schieben und Maskieren zu besorgen. Warum braucht man nun zweimal das gleiche Datum in verschiedenen Formaten? Ein Grund fĂŒr diese Redundanz könnte gewesen sein, daĂ man sich eine vorher vorhandene Umwandlungsroutine ersparen wollte, um so das Ganze zu kĂŒrzen und schlieĂlich in den 192 kByte ROM unterbringen zu können. Das war nĂ€mlich am Anfang ein ziemliches Problem fĂŒr die TOS Entwickler.
TOS im RAM
Beim ST liegt das TOS ja, wie bereits erwĂ€hnt, an der Adresse $FC0000 im ROM, bis auf die Modelle eben, die hier nur ein sogenanntes âBoot-ROMâ haben. Diese mĂŒssen das TOS von Diskette nachladen, und es wird dann natĂŒrlich im RAM angelegt. Der Ablauf ist wie folgt: Das Boot-ROM initialisiert das System und sucht dann nach dem sog. Boot-Loader auf dem Boot-Sektor der System-Diskette. Dies ist ein kleines Programm, das die Systemdatei namens TOS.IMG an die Adresse $40000 (=256k) in den Speicher lĂ€dt. Hieraus kann man schon ersehen,daĂ die MindestbestĂŒckung des ST mit RAM 512k betragen muĂ.(UrsprĂŒnglich geplante Auslegung in [5].) Dann wird die Startadresse von TOS.IMG (IMG = Image = Abbild) angesprungen. Hier befindet sich nun nicht etwa der TOS-Header, nein, liebe ST-Freunde, das wĂ€re ja auch zu einfach (und zu unflexibel, dann wĂŒrde man nĂ€mlich fĂŒr jede Version einen anderen Boot-Lader brauchen!), es ist der sog. Relocator (RELOCRL) [8]. Dies ist wieder ein kleines Programm, das jetzt die Kontrolle ĂŒbernimmt und das TOS.IMG (minus sich selbst) an seinen endgĂŒltigen Platz kopiert. Das TOS.IMG ist - wie die Kennung schon besagt - eine sog. âImage-Dateiâ, d.h. ein Abbild, das genau auf die absolute Adresse gelinkt wurde, an der es nachher im Speicher steht. Das hat den Vorteil, daĂ die darin enthaltenen absoluten Adressen nicht mehr reloziert werden mĂŒssen. Nun wird die Startadresse angesprungen, und das so aktivierte TOS erledigt den Rest der Initialisierung bis zum Erscheinen des beliebten GEM-Desktops oder einer Command-Shell.
Wie man sich leicht denken kann, unterscheiden sich die AblĂ€ufe wĂ€hrend der Initialisierungsphase im RAM-TOS und ROM-TOS um einiges, deshalb ist es auch nicht möglich, sich ein TOS.IMG ins ROM zu brennen - von Copyright- Bedenken einmal abgesehen. AuĂerdem werden dort, wo das ROM-TOS Strukturen ins RAM kopiert, um sie da modifizieren zu können, beim RAM-TOS praktischerweise, und um Arbeitsspeicher zu sparen, diese Strukturen innerhalb des IMG selbst verĂ€ndert. Das TOS.IMG gehört somit zur Gruppe der selbstmodifizierenden Programme, und so etwas ist im ROM nun einmal nicht zu verwirklichen! Ob RAM- oder ROM-TOS erzeugt werden soll, wird beim Systemhersteller ganz einfach durch das Linken unterschiedlicher Module erreicht, und die stehen ja nur den Systemprogrammierern der ATARI Corp. zur VerfĂŒgung.
Ein TOS.IMG von einem Speichermedium nachladen kann aber nicht nur das dazu bestimmte ursprĂŒngliche Boot-ROM, diese Möglichkeit ist auch beim normalen ROM-TOS - gleich welcher Version - vorgesehen. Der Ablauf ist der gleiche, es braucht nur beim Start des ST eine sog. Systemdiskette mit Boot-Lader und TOS.IMG eingelegt zu sein. Nach dem Laden ĂŒbernimmt dann das âgebooteteâ TOS die Kontrolle ĂŒber den ST. Das hat aber nicht etwa nostalgische GrĂŒnde! Wenn man noch Programme hat, die wegen âspeziellerâ Programmierung auf dem aktuellen ROM-TOS nicht laufen wollen, könnte man z.B. eine Ă€ltere Version des Betriebssystems als TOS.IMG booten. Oder man hat noch ein âaltesâ TOS im ROM und möchte gern die Vorteile der jeweils neuesten Version genieĂen: Dann bootet man eben das neue TOS vom Massenspeicher. Denn es geht inzwischen nicht nur mit TOS.IMG und Boot-Lader von Diskette (langsam!), sondern auch mit Hilfe von Ladeprogrammen im Auto-Ordner z.B. von der Festplatte oder RAM-Disk (schnell bis sehr schnell!). Und es muĂ auch nicht immer ein TOS.IMG sein: Mir ist z.B. auch eine Version des âBlitter-TOSâ, von dem m.E. nie ein .IMG im Umlauf war, bekannt, die mit Hilfe einer speziellen Relozierdatei (da hat sich jemand viel Arbeit gemacht!) und eines Laders im AUTO-Ordner gebootet wurde. Oder man denke an das KAOS [6], ein modifiziertes âBlitter-TOSâ mit einer auf MS-DOS gestylten Version des GEMDOS, das auf Ă€hnliche Weise - allerdings an das zu diesem Zweck verschobene phystop, was leider die Möglichkeiten ziemlich einengt - geladen wird.
Auf jeden Fall, da es - wie auch sonst im Leben - nichts umsonst gibt, muĂ der âLuxusâ eines wie auch immer gebooteten TOS bezahlt werden, und zwar in bar mit ca. 200 kByte RAM.
GEMDOS
Das GEMDOS ist das DOS des TOS, oder, wie der Name (s.o.) schon sagt, eigentlich des GEM (Computersprachâ - grauslich Sprachâ!). Es trĂ€gt eine besondere, von der TOS-Version unabhĂ€ngige Versionsnummer, die sich mit der Funktion _S_version erfragen lĂ€Ăt. Angeliefert wird von dieser Funktion ein Wort im Format byte reversed, binary fixed oder auch Intel binary fixed, kurzum ein binĂ€r kodierter Festkommawert mit vertauschten Bytes [4;5]. An diesem fĂŒr M68k-Prozessoren âhaarstrĂ€ubendenâ Format kann man auch mal wieder sehen, was in den Köpfen der GEMDOS-Entwickler herumgeisterte, als sie das System entwarfen, und auch sonst ist ja sattsam bekannt [2;7], mit welch anderem System der Befehlssatz von GEMDOS die meisten Ăbereinstimmungen aufweist, und auf welcher Prozessorfamilie eben das lĂ€uft. Wundem wir uns also nicht weiter! Um wieder unser beliebtes Blitter-TOS als Beispiel anzufĂŒhren, der Wert $1300 ist also zu interpretieren als V 0.19, und diese Angabe bekommt man z.B. auch, wenn man im COMMAND.PRG (aus dem alten Entwicklungspaket) oder einer Ă€hnlichen Text-Shell die Version des Betriebssystems abfragt. Daraus entnehme ich ĂŒbrigens, daĂ die Kodierung der Versionsnummer binĂ€r und nicht etwa als BCD zu interpretieren ist, das ist nĂ€mlich in [4;5] nicht explizit angegeben. Die gleiche Versionsnummer bekam man ĂŒbrigens auch schon beim TOS 1.0 vom 6.2.1986 geliefert, es war wohl alles mehr oder weniger beim alten geblieben. Die Ă€lteste GEMDOS-Versionsnummer, die ich zu sehen bekam, war - im Widerspruch zu [4] - V 0.13, aus dem deutschen âPilz-TOSâ (so genannt, weil es statt der heutzutage ĂŒblichen Bomben Pilze ausgibt) vom 20.6.1985. Im TOS 1.4 vom 6.4.1989 ist - wie auch in den davor liegenden Testversionen - die GEMDOS-Version V 0.21 enthalten.
AES
Das oder die AES ist oder sind die oberste Schicht des Betriebssystems, auf der dann das GEM-Desktop als grafische Shell lĂ€uft. Als Teil des GEM von DRI geschaffen, trĂ€gt es (ich bleibe mal beim auch im Amerikanischen eingebĂŒrgerten Singular) auch wieder eine gesonderte und unabhĂ€ngige Versionsnummer. Diese Nummer erhĂ€lt man ĂŒblicherweise beider Anmeldung einer Applikation - so heiĂen GEM-Programme - als ersten Eintrag im sog. global-Array, mit dem Namen ap_version.
Die Abfrage der AES-Version ist ĂŒbrigens ein probates Mittel, um festzustellen, ob das AES vorhanden und initialisiert ist, z.B. bei Programmen, die sowohl auf der sog. TOS-OberflĂ€che als auch als GEM-Applikationen laufen sollen. Der Test auf ap_id, also die vom AES vergebene Applikationsnummer, bringt hier nĂ€mlich nichts, da sie fĂŒr die Hauptapplikation ĂŒblicherweise Null ist. Dazu muĂ man wissen, daĂ das AES entweder noch nicht - wĂ€hrend der Abarbeitung des AUTO-Ordners - oder auch nicht mehr -nach der AusfĂŒhrung von Puntaes (XBIOS 39) bei RAM-TOS - installiert sein kann.
Das Format der Versionsnummer ist BCD fixed, also BCD-Festkommawert. FĂŒr die im âBlitter-TOSâ enthaltene Version des AES hat ap_version den Wert $0120, somit zu interpretieren als V 1.2. Auch im sog. âaltenâ TOS vom 6.2.1986 hatte das AES schon diese Versionsnummer, was wohl heiĂt, daĂ sich da nichts oder zumindest nichts weiter Interessantes geĂ€ndert hat.
Der Patch
Nachdem nunmehr die Voraussetzungen zu weiterer Erkundung geschaffen waren, begab ich mich wieder zu jenem Bekannten, um dort mein Programm auf seine Entwicklerversion des TOS 1.4 loszulassen. Es handelte sich ĂŒbrigens um die Version vom 8.8.88 (schönes Datum!), die mit einer Alertbox Launch TOS ausgerĂŒstet war. Das TOS hatte natĂŒrlich die Version 1.4, das GEMDOS die Version 0.21 und - man staune - das AES die Version 1.04! Also eine RĂŒckentwicklung? Nein, das konnte nicht sein! Da muĂte sich jemand geirrt und die Formate oder Versionsnummern verwechselt haben.
Wo war nun aber die AES-Versionsnummer im TOS abgelegt? Als Hilfe hatte ich erfahren, daĂ sie nicht etwa, wie von mir zuerst vermutet, in einer Tabelle steht, sondern vielmehr als immediate in einem Langwort zusammen mit ap_count in das global-Array geschrieben wird. Das bewuĂte Langwort $01040001 war leicht zu finden: Es kommt nĂ€mlich glĂŒcklicherweise nur ein einziges Mal im ganzen TOS vor! Der dazugehörige Befehl erwies sich als move.l #$01040001 ,(a0)+ oder im Hexdump $20FCO1040001. Nachdem nun dieser Wert vernĂŒnftig (z.B. in $01300001 oder $01400001) geĂ€ndert und das System neu gebootet war, durften wir uns am einwandfreien Arbeiten der Funktion fsel_exinput erfreuen.
AES-Versionsnummern
Die kleinste AES-Versionsnummer, die ich beobachten konnte, war 1.01 und stammt wieder aus besagtem alten âMushroom-TOSâ vom 20.6.1985. Das sog. âBeta-Test TOSâ vom 18.5.1988 enthielt AES V1.3, am fortgeschrittensten sind das TOS 1.4 vom 22.2.1989, das erste sog. âRainbow-TOSâ - nach den Farben, die wie ein Regenbogen das ATARI-Symbol durchlaufen - und dessen Nachfolger vom 6.4.1989, dort trĂ€gt das AES die Versionsnummer 1.4.
Vielleicht sollte man noch anmerken, daà es auch zur Zeit auf dem ATARI ST noch höhere AES-Versionsnummern geben kann, diese gehören dann aber nicht mehr zum TOS, sondern sind - gebootete - AufsÀtze auf das TOS, wie z.B. die Portierung von GEM 2.0 der Firma ABC, in der das AES die Versionsnummer 2.1 oder neuerdings auch 2.2 trÀgt.
TOS-Versionsnummern
Die kleinste TOS-Versionsnummer hat natĂŒrlich das Boot-ROM, auch bekannt als âDas Boot' [8], nĂ€mlich 0.0. Die ersten vollstĂ€ndigen TOS-Versionen bis einschlieĂlich der bei uns wohl am weitesten verbreiteten (ROM und RAM) und oft als âAltes TOS' bezeichneten Version vom 6.2.1986 tragen die Versionsnummer 1.0. Dann kommt das oben schon erwĂ€hnte âBlitter-TOS' mit der Versionsnummer 1.2, interessanterweise im neuesten mir bekannten âDiagnostic' von ATARI als âOS Version #2' bezeichnet. Die neueste Ausgabe ist z.Z. das ebenfalls schon erwĂ€hnte âRainbow-TOS' V 1.4 vom 6.4.1989. Dies soll auch, wie man auf der ATARI-Messe in DĂŒsseldorf vernehmen konnte, die âzunĂ€chst' endgĂŒltige Version sein, die dann auch im Fachhandel auf ROMs zur NachrĂŒstung erhĂ€ltlich sein wird.
Die Daten verschiedener TOS-Versionen, derer ich habhaft werden konnte, sind der besseren Ăbersicht halber noch einmal in Tabelle 2 zusammengefaĂt.
TOS 1.6, ein an die verĂ€nderte und erweiterte Hardware des STE angepaĂtes TOS 1.4, ist auf dem ST nicht lauffĂ€hig und ist daher in diesem Zusammenhang uninteressant. Allerdings sollten alle ST-Programme auch auf dem STE laufen können.
Auf dem ATARI TT konnte man auf der Messe ja schon einige Programme laufen sehen. Das daraufinstallierte sog. TT-TOS soll, wie man bei ATARI in DĂŒsseldorf vernahm, ein auf die Hardware des TT zugeschnittenes TOS 1.4 sein, aber der TT lĂ€Ăt ja noch auf sich warten. Welche Perspektive bietet sich nun uns Anwendern und Programmierern? ATARI hat angekĂŒndigt, das ST-Betriebssystem in Zukunft stĂ€rker als bisher mit Information und Dokumentation zu unterstĂŒtzen - und das wurde zum Teil im Zusammenhang mit der Entwicklung der hier besprochenen neuen Versio-nen ja auch schon verwirklicht [9; 10; 11 ]. Warten wirâs ab, was die Zukunft noch alles bringen wird! Auf jeden Fall wage ich die Prognose, daĂ dem ATARI ST, dieser vielseitigen Maschine mit ihrem faszinierenden Betriebssystem, noch viele Jahre interessanter Entwicklung bevorstehen.
Bernd Rosenlecher
Quellen:
[1] Wolfram Roisch. METADUMP APP, Programm und Assembler-Quelltext, 1989
[2] Tim Oren, Professional GEM, Column #15, Antic Publishing, 1986
[3] Jankowski, Reschke, Rabich. ATARI ST Profibuch, DĂŒsseldorf 1988
[4] London Dyer, ATARI GEMDOS Reference Manual. ATARI Corp. April, 1986. In den ErlĂ€uterungen zu Sversion wird die Ausgabe vom 29.5.85 als first disk-based' und die vom 20.11.85 als first ROM-based' bezeichnet - es handelt sich hier natĂŒrlich um amerikanische Ausgaben - und beide sollen die GEMDOS-Versionsnummer $1300. d.i. V 0.19, tragen.
[5] The GEMDOS Programmer's Guide, Digital Research Inc. 1985
[6] Andreas Kromke, Das wahre GEMDOS. c't 11/88 S. 194 ff. Dem im KAOS V 1.2.3 enthaltenen GEMDOS wurde von seinem Autor die Versionsnummer V 0.21 erteilt.
[7] Kramer,Riebl,HĂŒbner. Das TOS-Listing, Band 1, Hannover 1988
[8] London Dyer. A Hitchhiker's Guide to the BIOS. ATARI Corp. August. 1985
[9] TOS Release Notes. ATARI Corp., 1988, oft zitiert doch leider immer noch nicht allgemein zugÀnglich!
[10] RAINBOW TOS Release Notes, ATARI Corp., August. 1989. brandneu, s.o.!
[11] HMH (Hrsg.). SYSTEM_1.INF. US-Infos zum ATARI ST. Hamburg 1989. Bisher ca. 50 kByte Infos von ATARI und DRI Systemprogrammierern aus Usenet & anderen elektron. Quellen, auf Anfrage gegen Unkostenbeitrag auf Diskette erhÀltlich.
Mein Dank gilt Herrn K.W. Quinckardt. Hamburg, der mir freundlicherweise seine reichhaltige Sammlung von originalen ATARI ST-Systemdisketten zur Auswertung zur VerfĂŒgung stellte.
TOS |
Datum |
Name |
Bytes |
Sprache |
Art |
GEMDOS |
AES |
os_base |
os_start |
os_membot |
0.0 |
- |
Das Boot |
16384 |
englisch |
ROM |
- |
- |
- |
- |
- |
1.0 |
20.06.85 |
Mushroom |
207128 |
deutsch |
RAM |
0.13 |
1.01 |
$5000 |
$501 E |
$19C00 |
1.0 |
20.11.85 |
- |
197744 |
deutsch |
RAM |
0.19 |
1.2 |
$6100 |
$6120 |
$1A900 |
1.0 |
20.11.85 |
- |
196526 |
franz. |
RAM |
0.19 |
1.2 |
$6100 |
$6120 |
$1A950 |
1.0 |
06.02.86 |
Altes |
196480 |
deutsch |
RAM |
0.19 |
1.2 |
$6100 |
$6120 |
$1A950 |
1.0 |
06.02.86 |
Altes |
196608 |
deutsch |
ROM |
0.19 |
1.2 |
$FC0000 |
$FC0020 |
$6100 |
1.2 |
22.04.87 |
Blitter |
196608 |
deutsch |
ROM |
0.19 |
1.2 |
$FC0000 |
$FC0030 |
$8900 |
1.4 |
18.05 88 |
Beta-Test |
195282 |
englisch |
RAM |
0.21 |
1.3 |
$AC00 |
$AC30 |
$2140C |
1.4 |
08.08.88 |
Developer |
196550 |
deutsch |
RAM |
0.21 |
1.04 |
$AD00 |
$AD30 |
$2140C |
1.4 |
22.02.89 |
Rainbow |
196608 |
deutsch |
ROM |
0.21 |
1.4 |
$FC0000 |
$FC0030 |
$611C |
1.4 |
06.04.89 |
Rainbow |
196608 |
deutsch |
ROM |
0.21 |
1.4 |
$FC0000 |
$FC0030 |
$611C |
1.6 |
19.06.89 |
STE |
196608 |
deutsch |
ROM |
0.21 |
1.4 |
$E00000 |
$E00030 |
$611C |
Tabelle 2: TOS-Daten im Vergleich
*--------------------------------------------------
* test for aes initialization, TOS, GEMDOS & AES
* versions etc. (c) MAXON Computer GmbH 1989
* -------------------------------------------------
start: bra.s action
* -----------------------------------------------------
* write word (max 5 decimal places) in d0 as
* decimal ASCII to string in a1
dec_w: move.w #3,d1 ;4 dec. places
move.l #10000,d2 ;4 dec. places
yeah: divu #10,d2
ext.l d0 ;ready for div
divu d2,d0
addi.b #$30,d0 ;to ASCII
move.b d0,(a1)+ ;write to strg.
swap d0
dbf d1,yeah
rts
* ----------------------------------------------------
* kill leading or trailing zero in string
zero: cmpi.b #$30,-1(a1) ;'0' ?
bne.s leave
move.b #$20,-1(a1) ;SPC
leave: rts
* ----------------------------------------------------
* write long in d0 as hex to string in a1
wrthex: moveq #7,d1 ;loop for 8 nibbles
nibble: rol.l #4,d0 ;get nibble
move.l d0,d2
andi.b #$0f,d2 ;mask
addi.b #48,d2 ;add '0' for
cmpi.b #57,d2 ;>9?
ble.s wrt_it
addq.b #7,d2 ;'A'..'F'
wrt_it: move.b d2,(a1)+ ;write to string
dbf d1,nibble
rts
* ----------------------------------------------------
action: move.l 4(sp),a0 ;basepage addr
lea mystk,a1 ;end of code
move.l al,sp ;new sp
suba.l a0,a1 ;prog length
move.l a1,-(sp) ;newsize
move.l a0,-(sp) ;block
clr -(sp) ;filler
move.w #$4A,-(sp) ;Mshrink
trap #1 ;GEMDOS
lea $C(sp),sp
lea tos_dat(pc),a4 ;header msg
bsr print
pea sysinfo(pc)
move.w #$26,-(sp) ;Supexec
trap #14 ;XBIOS
addq.l #6,sp
movea.l a0,a3 ;save sysbase
lea os_base(pc),a4
lea 18(a4),a1
move.l 8(a3),d0 ;get os_base
bsr wrthex
bsr print ;display addr of os_base
lea os_start(pc),a4
lea 18(a4),a1
move.l 4(a3),d0 ;get os_start
bsr wrthex
bsr print ;display addr of os_start
lea os_memb(pc),a4
lea 18(a4),a1
move.l $C(a3),d0 ;get os_membot
bsr wrthex
bsr print ;display addr of os_membot
lea tosver(pc),a4 ;message string
lea 13(a4),a1 ;position to be patched
move.b 2(a3),d0 ;get 1st byte
addi.b #$30,d0 ;to ASCII
move.b d0,(a1) ;write it there
addq #2,a1 ;position to be patched
move.b 3(a3),d0 ;get 2nd byte
addi.b #$30,d0 ;to ASCII
move.b d0,(a1) ;write it there
bsr print ;display TOS vers number
lea bcd_date(pc),a4
lea 16(a4),a1
lea $18(a3),a0
move.b (a0)+,d0 ;get month
bsr bcd_conv
bsr bcd_conv
addq.l #1,a1
move.b (a0)+,d0 ;get day
bsr bcd_conv
bsr bcd_conv
addq.l #1,a1
move.b (a0)+,d0 ;get 1st half of year
bsr bcd_conv
bsr bcd_conv
move.b (a0)+,d0 ;get 2nd half of year
bsr bcd_conv
bsr bcd_conv
bsr print ;display TOS BCD date
cmpi.b #$1E,7(a3) ;oldest TOS version ?
beq.s next
lea dos_date(pc),a4
lea 16(a4),a1 ;position to be patched
move.w $1E(a3),d3 ;get GEMDOS coded date
move.w d3,d0
andi.w #$1F,d0 ;get day
bsr decimal
addq #1,a1
lsr #5,d3 ;get month to position
move.b d3,d0
andi.b #$F,d0 ;get month
bsr decimal
addq #1,a1
lsr #4,d3 ;get (year-1980) into position
move.b d3,d0
andi.w #$7F,d0 ;get (year-1980)
addi.w #1980,d0 ;year
bsr dec_w
bsr print ;display TOS DOS date
next: move #$30,-(sp) ;Sversion
trap #1 ;GEMDOS
addq.l #2,sp
tst d0
beq.s close
move.w d0,d7 ;save version no
lea dosver(pc),a4 ;message string
lea 12(a4),a1 ;position to be patched
bsr decimal
rol #8,d7
move.b d7,d0 ;get highbyte
addq #1,a1 ;advance position
bsr decimal
bsr.s print ;display GEMDOS version
moveq #10,d0 ;opcode appl_init
move.l #$00010000,d1 ;input to control array
bsr.s aes
lea global,a6
move 4(a6),d4 ;ap_id
bmi.s close ;function failure->end prg
move.w (a6),d5 ;ap version
beq.s not_inst
lea inst(pc),a4 ;message string
lea 12(a4),a1 ;position to be patched
rol #8,d5
move.b d5,d0 ;get highbyte
bsr.s bcd_conv ;1st nibble
bsr zero ;kill zero
bsr.s bcd_conv ;2nd nibble
addq #1,a1 ;advance position to be patched
rol #8,d5
move.b d5,d0 ;get lowbyte
bsr.s bcd_conv ;1st nibble
bsr.s bcd_conv ;2nd nibble
bsr zero ;kill zero
go_on: bsr.s print
bsr.s bconin
moveq #19,d0 ;appl_exit
move.l #$00010000,d1 ;input to control array
bsr.s aes
move (a6),d5 ;return value
close: clr -(sp)
trap #1
* -------------------------------------------------
not_inst:lea missing(pc),a4
bra go_on
* -------------------------------------------------
aes: lea contrl,a0
move d0,(a0) ;opcode
movep.l d1,3(a0) ;fill parameter array
move.l #aespb,d1 ;addr table
move #$C8,d0 ;AES
trap #2 ;GEM
rts
* -------------------------------------------------
* string output to console: modelled after
* Cconws, string addr in A4
print: move.b (a4)+,d0 ;string addr
beq.s return
move d0,-(SP) ;char
move #2,-(sp) ;con
move #3,-(sp) ;Bconout
trap #13 ;BIOS
addq.l #6,sp
bra print
return: rts
* -----------------------------------------------
bconin: move #2,-(sp) ;con
move #2,-(sp) ;bconin
trap #13
addq.l #4,sp
rts
* ------------------------------------------------
* convert bcd-byte in d0 to 2 position decimal
* ascii - write to string in a1
bcd_conv:rol.b #4,d0 ;get nibble
move.b d0,d1
andi.b #$F,d1 ;mask
addi.b #$30,d1 ;to ASCII
move.b d1,(a1)+ ;write char to string
rts
* ------------------------------------------------
* convert byte in d0 to 2 position decimal ASCII
* - write to string in a1
decimal: andi.l #$FF,d0 ;byte only of interest here, .l for div!
cmpi.b #9,d0 ;single
bls.s single
divu #10,d0 ;get tens
bsr.s chgform ;output
swap d0 ;get units
chgform: add.b #48,d0 ;to ASCII
move.b d0,(a1)+ ;write char to string
rts
single: move.b #' ',(a1)+ ;leading zero
bra chgform ;output
* ------------------------------------------------
sysinfo: movea.l $4F2,a0 ;sysbase
rts
* ------------------------------------------------
aespb: dc.l contrl,global,intin,intout,addrin,addrout
* the following are fixed structs after each label, XX etc are to be patched
inst: dc.b 13,10,' AES V XX.XX resident ',13,10,0
missing: dc.b 13,10,' AES not (yet?) resident ',0
dosver: dc.b 13,10,' GEMDOS V XX.XX resident ',0
tosver: dc.b 13,10,' TOS V X.X resident ',0
bcd_date:dc.b 13,10,' TOS BCD date MM/DD/YYYY ',0
dos_date:dc.b 13,10,' TOS DOS date DD.MM.YYYY ',0
os_base: dc.b 13,10,' os_base $00XXXXXX ',0
os_start:dc.b 13,10,' os_start $00XXXXXX ',0
os_memb: dc.b 13,10,' os_membot $00XXXXXX ',10,0
tos_dat: dc.b 27,'E'
dc.b 13,10,â TOS VERSION INF MAXOnN Computer 89 ',10,0
* ------------------------------------------------
bss
even
contrl: ds 5
global: ds 15
intin: ds 16
intout: ds 7
addrin: ds.l 3
addrout: ds.l 1
ds.l 50
mystk: ds.b 1
* ------------------------------------------------