Kalte Zeiten im Bootsektor Unser hier vorgestelltes GfA-Basic-Programm installiert eine kleine, aber ntzliche Utility im Bootsektor Ihrer Disketten. Damit haben Sie auch ohne Hardware-Uhr immer die richtige Systemzeit und eine Kaltstart-M”glichkeit parat. Haben Sie einen Atari ST mit ROM-TOS? Dann haben Sie vielleicht schon fast vergessen, daž es auch ausfhrbare Bootsektoren gibt, in denen kleine Assembler-Programme ihr Dasein fristen k”nnen. Das bekannteste Beispiel dafr sind die mittlerweile fast als antiquarisch anzusehenden Systemdisketten aus der Anfangszeit des ST. Sie enthielten das Betriebssystem in Form einer Datei namens "TOS.IMG". Doch konnte man mit dieser Datei alleine gar nichts anfangen, man mužte immer die ganze Diskette kopieren, um ein Booten des Rechners zu erzielen. Das Geheimnis lag im Bootsektor versteckt, der enthielt n„mlich den sogenannten "Loader": Ein kurzes Maschinenprogramm, das nach einem Reset geladen und gestartet wurde und die Datei "TOS.IMG" in den Speicher des Atari brachte und aktivierte. Zu Zeiten des weit verbreiteten ROM-TOS l„dt natrlich (fast) niemand mehr sein Betriebssystem noch von Diskette, und so kommt es, daž der Bootsektor vieler Disketten nicht richtig ausgelastet ist. Das brachte uns auf die Idee, eine kleine Utility, die normalerweise im AUTO-Ordner abgelegt wrde, in den Bootsektor zu verpflanzen, wo sie keinen Speicherplatz im Directory und in der FAT verschwendet. Als weiterer Vorteil kommt hinzu, daž das Betriebssystem nach einem Reset den Bootsektor sowieso in den Speicher l„dt und auf Ausfhrbarkeit testet: Die Ladezeit unserer Utility verlangsamt den Bootvorgang also berhaupt nicht. Wie muž ein ausfhrbarer Bootsektor aussehen? Der Bootsektor ist der allererste Sektor einer Diskette oder Harddisk (ber letztere berichten wir demn„chst), von dem bei einer Diskette die ersten dreižig und die letzten zwei Bytes eine besondere Bedeutung haben. Am Anfang des Bootsektors findet das BIOS Informationen ber das physikalische Format des Speichermediums (siehe auch die Beschreibung im Assembler-Listing), aus denen es den sogenannten BIOS Parameter Block (BPB) erzeugt, welcher nur noch ber das logische Diskettenformat Auskunft gibt. Die letzten beiden Bytes dienen als Ausgleichwort fr eine Prfsumme. Nach einem Reset wird n„mlich der Bootsektor des Boot-Laufwerkes (i.d.R. Laufwerk A:; probieren Sie doch mal von GfA-Basic aus SDPOKE &H446,1 fr Laufwerk B:) vom Betriebssystem in einen Diskbuffer geladen und eine Prfsumme darber errechnet, welche zusammen mit den letzten beiden Bytes bei einem als ausfhrbar markierten Bootsektor genau den Wert $1234 ergibt. Nur wenn dieses Ergebnis erzielt wird, ruft das TOS den Bootsektor mit einer JSR-Instruktion als Unterprogramm auf. Der Bootsektor sollte dann allerdings als ersten Befehl einen kurzen Sprung (BRA.S) enthalten, der mindestens die ersten 30 Bytes mit den Format-Informationen der Diskette berspringt. Da die Speicherposition des Diskbuffers, in dem unser Bootprogramm nun gerade ausgefhrt wird, variieren kann und vom TOS keine Relokation (Anpassung der Adressen an die aktuelle Position) vorgenommen wird, muž unser Programmcode v”llig positionsunabh„ngig geschrieben worden sein. Verwenden Sie also PC-relative Adressierungsarten, meiden Sie DATA- und BSS-Segmente, und begngen Sie sich mit dem Platz im Diskbuffer (512 Bytes), oder versorgen Sie sich anderweitig mit Speicherplatz. Wenn das Bootprogramm seine Arbeit getan hat, kann es mit einer RETurn-Instruktion die Kontrolle ber den Rechner wieder an das TOS abgeben, welches dann den Bootvorgang mit dem Starten von Programmen aus dem AUTO-Ordner und dem Installieren von Accessories fortsetzen darf. Und was kann unser Bootsektor nun? Der gr”žte Teil des Codes sorgt fr die richtige Systemzeit und das richtige Datum. Damit haben Sie dann immerhin ein halbwegs sinnvolles Datum im Directory, was nicht nur beim Arbeiten mit einer Make-Utility dienlich ist. Sie brauchen das aktuelle Datum und die Uhrzeit nur einmal nach dem Einschalten des Rechners einzugeben, danach holt sich unsere Boot-Utility die richtige Uhrzeit stets vom Tastaturprozessor, der glcklicherweise bei einem Reset nicht gel”scht wird. Sollten Sie sich beim Eingeben der Zeit einmal vertippen, k”nnen Sie durch Festhalten der rechten SHIFT-TASTE beim Booten eine Neueingabe des Datums erzwingen, ohne den Rechner ausschalten zu mssen. Als weiteres ntzliches Feature k”nnen Sie durch Drcken der ALTERNATE-TASTE kurz nach Bet„tigen des Reset-Knopfes einen Kaltstart einleiten. Das Bootprogramm l”scht bei gedrckter ALT- Taste ganz einfach die Systemvariablen memvalid und res_valid und springt dann in die Reset-Routine des ROM. Diese glaubt nun, der Speicherinhalt sei in Unordnung geraten und l”scht alle evtl. vorhandenen resetfesten Programme, wie z.B. Ramdisks. Diese M”glichkeit eines Kaltstartes, ohne den Rechner wirklich ausschalten zu mssen, schtzt Ihre Hardware vor unn”tigen Stromst”žen. Besonders Besitzer des 1040 (und des MEGA ST) werden dieses zu sch„tzen wissen, mssen sie doch die Netzspannung schalten. Und Schaltnetzteile m”gen es bekanntlich gar nicht gerne, kurz hintereinander aus- und wieder eingeschaltet zu werden. Ihr Rechner wird Ihnen fr dieses Bootprogramm dankbar sein! Aužerdem vergižt der Tastaturprozessor ja bei jedem unn”tigen Ausschalten auch das Datum und die Uhrzeit. Als weitere Beigabe macht unser Programm den Farbmonitor- Besitzern eine kleine Freude: Sie k”nnen jetzt den AUTO-Ordner mit dem Changehertz-Programm einmotten! Der Bootsektor sorgt fr eine Bildwiederholfrequenz von 60 Hertz (natrlich nur im Farbmodus). Falls Ihr Farbmonitor jedoch bei 60 Hertz den Dienst verweigert, k”nnen Sie an den markierten Stellen im Listing eine Anpassung vornehmen. Eine Geschmacksfrage, ber die man nicht streiten sollte, ist der Tastaturklick. Viele ST-Besitzer st”rt dieser, und sie drehen den Lautst„rkeregler fast ganz herunter. Dadurch kommen sie aber h„ufig nicht oder nur versp„tet in den Genuž sch”nster Sound-Effekte. Dieses ist wieder ein Fall fr unsere Boot-Utility: Wir schalten den Tastaturklick aus und sind glcklich... Damit wird das Kontrollfeld-Accessory in den meisten Anwendungsf„llen berflssig. Und wie wird's gemacht? Unser GfA-BASIC-Programm holt sich zun„chst mit der Xbios- Funktion Floprd den ursprnglichen Bootsektor von Laufwerk A:, Track 0, Sektor 1 und l„dt diesen in den String Buf$, der genau 512 Bytes lang ist und als Zwischenspeicher fr den Bootsektor dient. Nun wird unser Maschinenprogramm aus den Data-Zeilen Byte fr Byte gelesen und in den Buffer bertragen. Dabei ist der Sprung auf das eigentliche Bootprogramm in die ersten beiden Bytes des Bootsektors einzutragen, die Informationen ber das Disk-Format werden nicht ver„ndert, und die letzten beiden Bytes des Bootsektors bleiben fr den Prfsummen-Ausgleich frei. Nachdem unser Bootprogramm in den Zwischenspeicher eingetragen ist, sorgt die Xbios-Funktion Protobt fr die Prfsumme $1234, die dem TOS die Ausfhrbarkeit des Bootsektors signalisiert. Mit Flopwr wird der so modifizierte Bootsektor wieder auf die Diskette zurckgeschrieben. Fertig! Fr diejenigen unter Ihnen, die wissen wollen, was sie da eigentlich in ihren Bootsektor schreiben, drucken wir noch das Assemblerlisting des Programmes in den Data-Zeilen in einer Version fr den AUTO-Ordner ab. Der Unterschied zur Bootsektor-Version liegt lediglich in der Art des Rcksprunges zum TOS. Das Assemblerlisting ist ausfhrlich kommentiert und somit weitgehend selbsterkl„rend. Selbstverst„ndlich l„uft unser Programm auch unter dem Blitter-TOS ohne Probleme, eigentlich sogar noch besser: Unter dem "alten" TOS dauert der Bootvorgang von Programmen aus dem AUTO-Ordner und von Accessories fast doppelt solange. Aužerdem kam es unter dem "alten" TOS w„hrend der Bootsequenz gelegentlich zu mysteri”sen Abstrzen. Dieser Fehler ist im Blitter-TOS erfolgreich behoben. Und nun wnschen wir Ihnen viel Spaž mit Ihrer neuen Nutzung des Bootsektors.