Programmer's Corner Juni '91 --------------------------- Hallo Programmierfreaks! Diesmal geht es in der Programmer's Corner um den Enviroment-Check. Der Enviroment-Check wird von einem Programm durchgeführt, um zu erfahren, auf welchen System es läuft. Darunter fällt z.B.: - Welcher Computertyp (400/800/600XL/800XL/ 200XL/800XE/130XE...) - wieviele und welche Diskettenstationen angeschlossen sind - wieviel Speicher der Computer besitzt, - welche Erweiterungen eingebaut sind, - welches Dos geladen wurde, usw.... Wozu das Ganze? Nun, viele Program- mierer kümmern sich (leider) nicht darum, wie ihr Programm auf verschie- dene Systemzusammenstellungen reagiert. Das Resultat sind dann Programmabstürze und fehlerhafte Programme, die Compu- terlaien zur Verzweiflung treiben kön- nen. Ein sauber programmiertes Programm überprüft das System, auf dem es läuft und stellt sich auf Eigenschaften ein, anstatt sie zu ignorieren. Hier setzt das Enviroment-Check-Programm an. Das (Beispiel-) Programm selbst ist nicht sehr nützlich, es prüft die Systemkon- figuration und zeigt diese an. Das Programm sollte eher als Fundgrube für eure eigenen Programme verstanden werden. Daher will ich die einzelnen Routinen der Reihe nach beschreiben: TURBO-BASIC CHECK (Zeile 220-310) --------------------------------- Es kommt immer wieder vor, das Anwender versuchen, TURBO-BASIC Programme aus dem ATARI-BASIC heraus zu starten. Dies endet dann mit einer Fehlermeldung (Fehler 17 - Befehl nicht ausführbar) wenn der Computer auf den ersten TURBO-BASIC Befehl stößt. Sinnvoll ist es da, vor dem eigentlichen TURBO-BASIC Programmteil einen ATARI-BASIC Pro- grammteil zu setzten, der Überprüft, ob TURBO-BASIC geladen wurde. Genau dies geschied beim TURBO-BASIC-CHECK. Anhand des Wertes in den Speicherstellen 12/13 ($C,$D = DOSINI) überprüft das Programm das Vorhandensein von TURBO-BASIC. Nur wenn in diesen Speicherstellen der Wert 8320 ($2080) steht, wird zum eigent- lichen TURBO-BASIC Programm verzweigt. Ansonsten hält das Programm an und ermöglicht dem Benutzer, den Computer neu zu BOOTEN oder ins DOS zu springen. COMPUTERCHECK (Zeile 420-510) ----------------------------- Um zu erkennen, ob das Computersystem ein 400/800 oder ein XL/XE ist, gibt es wahrscheinlich mehrere Möglichkeiten, da die Betriebssysteme beider Systeme größere Unterschiede aufweisen. Ich benutze zur Unterscheidung die Speicherstelle 829 ($340 = PUPBT1), welche beim 400/800 im Gegensatz zum XL/XE System immer eine Null enthält. PAL/NTSC Check (Zeile 520-630) ------------------------------ Von den ATARI 8-Bit Computern gibt es zwei verschiedene Ausführungen: eine amerikanische NTSC Version und eine europäische PAL Version. Der Unter- schied besteht in der Art der Bild- schirmsignale, die der Computer er- zeugt. Die amerikanische Version ist auf das amerikanische Fernsehsystem ausgerichtet (NTSC = 60 Hz Bildwieder- holung), die europäische auf das PAL System (50 Hz Bildwiederholung). Diese Unterscheidung ist wichtig bei Pro- grammen, die Timer des Computers als Zeitmessung benutzen (die Timer zählen bei der amerikanischen Version schneller). Unterscheiden kann man beide Versionen über die Speicherstelle 53268 ($D014 = PAL/NTSC). Befindet sich in dieser Speicherstelle ein Eins, so handelt es sich um ein europäisches Modell, bei einer 14 haben wir es mit einem amerikanischen Computer zu tun. ERWEITERUNGS CHECK (Zeile 640-750) ---------------------------------- Hier wird überprüft, ob ein Modul im Modulschacht steckt. Hierfür fragt das Programm die Speicherstelle 53267 ($D013 = TRIG3) ab. Eine Eins in dieser Speicherstelle zeigt ein Modul an. Nun kann über die Speicherstelle 49149 ($BFFD = CARTFG) geprüft werden, ob es sich um ein sg. Spezialmodul handelt. Ein Wert über 128 signalisiert ein solches Spezial-(Diagnose-)modul. Als nächstes wird geprüft, ob ein BIBOMON vorhanden ist. Wenn dies der Fall ist, zeigt der Vektor für den Selbsttest 58497 ($E480) auf die Startadresse des Bibomons (36839/$8FE7) anstatt auf den Selbsttest. DOS-Test (Zeile 760-930) ------------------------ Es ist sinnvoll zu wissen, unter welchem DOS das Programm geladen wurde, da sich die verschiedenen DOS-Versionen teilweise stark in der Art und dem Umfang der Befehle sowie im Speicherplatzverbrauch unterscheiden. Das DOS kann anhand einer oder zwei signifikanten Speicherstellen erkannt werden (3889/$0F31 + 1804/$070C). Hier eine Liste der Ergebnisse beim Test der og. Speicherstellen: 3889 1804 Dos ------------------------------------ 0 SpartaDos 2.3e 8 Dos II+/D V.6.1 13 Dos 4.0 15 SpartaDos 1.1 19 Atari Dos 2.5 41 Bibo Dos 1 55 Bibo Dos V5.4SF 76 Atari Dos 3.0 78 Atari Dos 3.0 89 SpartaDos 3.2d 100 Bibo Dos V3.0R 108 MyDos 4.x 145 Bibo Dos V5.4RN 176 Bibo Dos V5.4RF 201 Bibo Dos V6.4RF 207 OSS OS/A+ 4.00 238 0 OSS Dos XL 2.3 238 124 Atari Dos 2.0 238 128 OSS OS/A+ ASCOM 240 Turbo Dos 2.x 244 Atari Dos XE ------------------------------------ LAUFWERKSTEST (Zeile 930-1330) ------------------------------ Der Laufwerkstest ist der komplizier- teste von allen. Ihn hier ausführlich zu beschreiben, würde den Rahmen der Programmer's Corner sprengen. Interes- sierte mögen sich das Listing anschau- en. Soviel zur Theorie: Zuerst wird über das SIO-Kommando STATUS geprüft, ob das Laufwerk vorhanden ist. Fällt dieser Test positiv aus, so versucht das Programm den sg. PERCOM-Block zu lesen. Gelingt dies, ist es ein erweitertes Laufwerk. Kann nun noch das SIO-Geschwindigkeitsbyte geladen werden, hat man es mit einer SPEEDY zu tun, ansonsten ist es wahrscheinlich ein TURBO- oder HAPPY-Laufwerk. RAMDISKTEST (Zeile 1340-1450) ----------------------------- Der Ramdisktest ist schon wieder etwas simpler. Hier wird versucht, jeweils für die Laufwerke 5-9 die Directory zu öffnen. Gelingt dies, kann man davon ausgehen, daß es sich hier um eine Ramdisk handelt. DRUCKERTEST (Zeile 1460-1530) ----------------------------- Ebenso wird der Drucker überprüft: Kann ein Kanal für P: eröffnet werden ist ein Drucker angeschlossen. JOYSTICKPORTTEST (Zeile 1530-1670) ---------------------------------- Simpel fällt auch der Joystickporttest aus. Hier wird getestet, ob und welche Geräte am Joystickport angeschlossen sind. Liefert STICK(port) einen Wert kleiner 15, so kann man mit einer angeschlossenen Maus rechnen. Ist das Ergebnis PADDLE(port*2) ungleich 228, so ist ein Paddle angeschlossen. Soviel zum Enviroment-Check Programm, das leider nicht ganz vollständig ist. Leider fehlt mir das Wissen, wie ich: - ein 810 Laufwerk erkennen kann - ein XF551 Laufwerk erkennen kann - ein TURBO Laufwerk erkennen kann - ein HAPPY Laufwerk erkennen kann - die Größe des erweiterten RAM Speichers im TURBO-BASIC ermitteln kann - zwischen XL und XE Geräten unterscheiden kann (wenn es Unterschiede gibt) Wer mir diese Fragen beantworten kann oder Ergänzungen zum Enviroment-Check hat, der setze sich mit mir in Verbindung (oder schreibe einen Programmer's Corner Artikel). Danke!!!!! Carsten Strotmann Tel.: (0 25 81) 89 20