home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
No Fragments Archive 10: Diskmags
/
nf_archive_10.iso
/
MAGS
/
STMAGAZIN
/
STMAGAZIN.MSA
/
ANWENDUN.GEN
/
BOOT_GEN
/
BOOT_GEN.TXT
< prev
next >
Wrap
Text File
|
1986-02-06
|
8KB
|
151 lines
Kalte Zeiten im Bootsektor
Unser hier vorgestelltes GfA-Basic-Programm installiert eine
kleine, aber nützliche 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 ausführbare Bootsektoren gibt, in
denen kleine Assembler-Programme ihr Dasein fristen können. Das
bekannteste Beispiel dafür 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 natürlich (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 würde, 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
Ausführbarkeit testet: Die Ladezeit unserer Utility verlangsamt den
Bootvorgang also überhaupt nicht.
Wie muß ein ausführbarer 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 für eine Prüfsumme. 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 für Laufwerk
B:) vom Betriebssystem in einen Diskbuffer geladen und eine
Prüfsumme darüber errechnet, welche zusammen mit den letzten beiden
Bytes bei einem als ausführbar 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 ausgeführt 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 begnügen 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 für 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 glücklicherweise 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 müssen.
Als weiteres nützliches Feature können Sie durch Drücken der
ALTERNATE-TASTE kurz nach Betätigen des Reset-Knopfes einen
Kaltstart einleiten. Das Bootprogramm löscht bei gedrückter 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 müssen, schützt Ihre Hardware vor unnötigen Stromstößen.
Besonders Besitzer des 1040 (und des MEGA ST) werden dieses zu
schätzen wissen, müssen 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 für 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 für eine
Bildwiederholfrequenz von 60 Hertz (natürlich 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 für unsere Boot-Utility: Wir schalten den
Tastaturklick aus und sind glücklich...
Damit wird das Kontrollfeld-Accessory in den meisten
Anwendungsfällen überflüssig.
Und wie wird's gemacht?
Unser GfA-BASIC-Programm holt sich zunächst mit der Xbios-
Funktion Floprd den ursprünglichen 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 für den Bootsektor dient. Nun wird
unser Maschinenprogramm aus den Data-Zeilen Byte für 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 für
den Prüfsummen-Ausgleich frei. Nachdem unser Bootprogramm in den
Zwischenspeicher eingetragen ist, sorgt die Xbios-Funktion Protobt
für die Prüfsumme $1234, die dem TOS die Ausführbarkeit des
Bootsektors signalisiert. Mit Flopwr wird der so modifizierte
Bootsektor wieder auf die Diskette zurückgeschrieben. Fertig!
Für 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
für den AUTO-Ordner ab. Der Unterschied zur Bootsektor-Version liegt
lediglich in der Art des Rücksprunges zum TOS. Das Assemblerlisting
ist ausführlich 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 Abstürzen.
Dieser Fehler ist im Blitter-TOS erfolgreich behoben.
Und nun wünschen wir Ihnen viel Spaß mit Ihrer neuen Nutzung des
Bootsektors.