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 >
Text File  |  1986-02-06  |  8KB  |  151 lines

  1.  
  2.    Kalte Zeiten im Bootsektor
  3.  
  4.  
  5.    Unser hier vorgestelltes GfA-Basic-Programm installiert eine 
  6. kleine, aber nützliche Utility im Bootsektor Ihrer Disketten. Damit 
  7. haben Sie auch ohne Hardware-Uhr immer die richtige Systemzeit und 
  8. eine Kaltstart-Möglichkeit parat.
  9.  
  10.    Haben Sie einen Atari ST mit ROM-TOS? Dann haben Sie vielleicht 
  11. schon fast vergessen, daß es auch ausführbare Bootsektoren gibt, in 
  12. denen kleine Assembler-Programme ihr Dasein fristen können. Das 
  13. bekannteste Beispiel dafür sind die mittlerweile fast als 
  14. antiquarisch anzusehenden Systemdisketten aus der Anfangszeit des 
  15. ST. Sie enthielten das Betriebssystem in Form einer Datei namens 
  16. "TOS.IMG". Doch konnte man mit dieser Datei alleine gar nichts 
  17. anfangen, man mußte immer die ganze Diskette kopieren, um ein Booten 
  18. des Rechners zu erzielen. Das Geheimnis lag im Bootsektor versteckt, 
  19. der enthielt nämlich den sogenannten "Loader": Ein kurzes 
  20. Maschinenprogramm, das nach einem Reset geladen und gestartet wurde 
  21. und die Datei "TOS.IMG" in den Speicher des Atari brachte und 
  22. aktivierte.
  23.  
  24.    Zu Zeiten des weit verbreiteten ROM-TOS lädt natürlich (fast) 
  25. niemand mehr sein Betriebssystem noch von Diskette, und so kommt es, 
  26. daß der Bootsektor vieler Disketten nicht richtig ausgelastet ist. 
  27. Das brachte uns auf die Idee, eine kleine Utility, die normalerweise 
  28. im AUTO-Ordner abgelegt würde, in den Bootsektor zu verpflanzen, wo 
  29. sie keinen Speicherplatz im Directory und in der FAT verschwendet. 
  30. Als weiterer Vorteil kommt hinzu, daß das Betriebssystem nach einem 
  31. Reset den Bootsektor sowieso in den Speicher lädt und auf 
  32. Ausführbarkeit testet: Die Ladezeit unserer Utility verlangsamt den 
  33. Bootvorgang also überhaupt nicht.
  34.  
  35.    Wie muß ein ausführbarer Bootsektor aussehen?
  36.  
  37.    Der Bootsektor ist der allererste Sektor einer Diskette oder 
  38. Harddisk (über letztere berichten wir demnächst), von dem bei einer 
  39. Diskette die ersten dreißig und die letzten zwei Bytes eine 
  40. besondere Bedeutung haben. Am Anfang des Bootsektors findet das BIOS 
  41. Informationen über das physikalische Format des Speichermediums 
  42. (siehe auch die Beschreibung im Assembler-Listing), aus denen es den 
  43. sogenannten BIOS Parameter Block (BPB) erzeugt, welcher nur noch 
  44. über das logische Diskettenformat Auskunft gibt. Die letzten beiden 
  45. Bytes dienen als Ausgleichwort für eine Prüfsumme. Nach einem Reset 
  46. wird nämlich der Bootsektor des Boot-Laufwerkes (i.d.R. Laufwerk A:; 
  47. probieren Sie doch mal von GfA-Basic aus SDPOKE &H446,1 für Laufwerk 
  48. B:) vom Betriebssystem in einen Diskbuffer geladen und eine 
  49. Prüfsumme darüber errechnet, welche zusammen mit den letzten beiden 
  50. Bytes bei einem als ausführbar markierten Bootsektor genau den Wert 
  51. $1234 ergibt. Nur wenn dieses Ergebnis erzielt wird, ruft das TOS 
  52. den Bootsektor mit einer JSR-Instruktion als Unterprogramm auf. Der 
  53. Bootsektor sollte dann allerdings als ersten Befehl einen kurzen 
  54. Sprung (BRA.S) enthalten, der mindestens die ersten 30 Bytes mit den 
  55. Format-Informationen der Diskette überspringt. Da die 
  56. Speicherposition des Diskbuffers, in dem unser Bootprogramm nun 
  57. gerade ausgeführt wird, variieren kann und vom TOS keine Relokation 
  58. (Anpassung der Adressen an die aktuelle Position) vorgenommen wird, 
  59. muß unser Programmcode völlig positionsunabhängig geschrieben worden 
  60. sein. Verwenden Sie also PC-relative Adressierungsarten, meiden Sie 
  61. DATA- und BSS-Segmente, und begnügen Sie sich mit dem Platz im 
  62. Diskbuffer (512 Bytes), oder versorgen Sie sich anderweitig mit 
  63. Speicherplatz. Wenn das Bootprogramm seine Arbeit getan hat, kann es 
  64. mit einer RETurn-Instruktion die Kontrolle über den Rechner wieder 
  65. an das TOS abgeben, welches dann den Bootvorgang mit dem Starten von 
  66. Programmen aus dem AUTO-Ordner und dem Installieren von Accessories 
  67. fortsetzen darf.
  68.  
  69.    Und was kann unser Bootsektor nun?
  70.  
  71.    Der größte Teil des Codes sorgt für die richtige Systemzeit und 
  72. das richtige Datum. Damit haben Sie dann immerhin ein halbwegs 
  73. sinnvolles Datum im Directory, was nicht nur beim Arbeiten mit einer 
  74. Make-Utility dienlich ist. Sie brauchen das aktuelle Datum und die 
  75. Uhrzeit nur einmal nach dem Einschalten des Rechners einzugeben, 
  76. danach holt sich unsere Boot-Utility die richtige Uhrzeit stets vom 
  77. Tastaturprozessor, der glücklicherweise bei einem Reset nicht 
  78. gelöscht wird. Sollten Sie sich beim Eingeben der Zeit einmal 
  79. vertippen, können Sie durch Festhalten der rechten SHIFT-TASTE beim 
  80. Booten eine Neueingabe des Datums erzwingen, ohne den Rechner 
  81. ausschalten zu müssen.
  82.  
  83.    Als weiteres nützliches Feature können Sie durch Drücken der 
  84. ALTERNATE-TASTE kurz nach Betätigen des Reset-Knopfes einen 
  85. Kaltstart einleiten. Das Bootprogramm löscht bei gedrückter ALT-
  86. Taste ganz einfach die Systemvariablen memvalid und res_valid und 
  87. springt dann in die Reset-Routine des ROM. Diese glaubt nun, der 
  88. Speicherinhalt sei in Unordnung geraten und löscht alle evtl. 
  89. vorhandenen resetfesten Programme, wie z.B. Ramdisks. Diese 
  90. Möglichkeit eines Kaltstartes, ohne den Rechner wirklich ausschalten 
  91. zu müssen, schützt Ihre Hardware vor unnötigen Stromstößen. 
  92. Besonders Besitzer des 1040 (und des MEGA ST) werden dieses zu 
  93. schätzen wissen, müssen sie doch die Netzspannung schalten. Und 
  94. Schaltnetzteile mögen es bekanntlich gar nicht gerne, kurz 
  95. hintereinander aus- und wieder eingeschaltet zu werden. Ihr Rechner 
  96. wird Ihnen für dieses Bootprogramm dankbar sein! Außerdem vergißt 
  97. der Tastaturprozessor ja bei jedem unnötigen Ausschalten auch das 
  98. Datum und die Uhrzeit.
  99.  
  100.    Als weitere Beigabe macht unser Programm den Farbmonitor-
  101. Besitzern eine kleine Freude: Sie können jetzt den AUTO-Ordner mit 
  102. dem Changehertz-Programm einmotten! Der Bootsektor sorgt für eine 
  103. Bildwiederholfrequenz von 60 Hertz (natürlich nur im Farbmodus). 
  104. Falls Ihr Farbmonitor jedoch bei 60 Hertz den Dienst verweigert, 
  105. können Sie an den markierten Stellen im Listing eine Anpassung 
  106. vornehmen.
  107.  
  108.    Eine Geschmacksfrage, über die man nicht streiten sollte, ist der 
  109. Tastaturklick. Viele ST-Besitzer stört dieser, und sie drehen den 
  110. Lautstärkeregler fast ganz herunter. Dadurch kommen sie aber häufig 
  111. nicht oder nur verspätet in den Genuß schönster Sound-Effekte. 
  112. Dieses ist wieder ein Fall für unsere Boot-Utility: Wir schalten den 
  113. Tastaturklick aus und sind glücklich...
  114.  
  115.    Damit wird das Kontrollfeld-Accessory in den meisten 
  116. Anwendungsfällen überflüssig.
  117.  
  118.    Und wie wird's gemacht?
  119.  
  120.    Unser GfA-BASIC-Programm holt sich zunächst mit der Xbios-
  121. Funktion Floprd den ursprünglichen Bootsektor von Laufwerk A:, Track 
  122. 0, Sektor 1 und lädt diesen in den String Buf$, der genau 512 Bytes 
  123. lang ist und als Zwischenspeicher für den Bootsektor dient. Nun wird 
  124. unser Maschinenprogramm aus den Data-Zeilen Byte für Byte gelesen 
  125. und in den Buffer übertragen. Dabei ist der Sprung auf das 
  126. eigentliche Bootprogramm in die ersten beiden Bytes des Bootsektors 
  127. einzutragen, die Informationen über das Disk-Format werden nicht 
  128. verändert, und die letzten beiden Bytes des Bootsektors bleiben für 
  129. den Prüfsummen-Ausgleich frei. Nachdem unser Bootprogramm in den 
  130. Zwischenspeicher eingetragen ist, sorgt die Xbios-Funktion Protobt 
  131. für die Prüfsumme $1234, die dem TOS die Ausführbarkeit des 
  132. Bootsektors signalisiert. Mit Flopwr wird der so modifizierte 
  133. Bootsektor wieder auf die Diskette zurückgeschrieben. Fertig!
  134.  
  135.    Für diejenigen unter Ihnen, die wissen wollen, was sie da 
  136. eigentlich in ihren Bootsektor schreiben, drucken wir noch das 
  137. Assemblerlisting des Programmes in den Data-Zeilen in einer Version 
  138. für den AUTO-Ordner ab. Der Unterschied zur Bootsektor-Version liegt 
  139. lediglich in der Art des Rücksprunges zum TOS. Das Assemblerlisting 
  140. ist ausführlich kommentiert und somit weitgehend selbsterklärend. 
  141. Selbstverständlich läuft unser Programm auch unter dem Blitter-TOS 
  142. ohne Probleme, eigentlich sogar noch besser: Unter dem "alten" TOS 
  143. dauert der Bootvorgang von Programmen aus dem AUTO-Ordner und von 
  144. Accessories fast doppelt solange. Außerdem kam es unter dem "alten" 
  145. TOS während der Bootsequenz gelegentlich zu mysteriösen Abstürzen. 
  146. Dieser Fehler ist im Blitter-TOS erfolgreich behoben.
  147.  
  148.    Und nun wünschen wir Ihnen viel Spaß mit Ihrer neuen Nutzung des 
  149. Bootsektors.
  150.  
  151.