Oktober 1992

Meinungen, Programme und Hardware

Programmprojekte

Autor: Sven Friedrichs



Floppystatuserkennung mit dem Basic 7.0 und Compiler Basic 128

Die meisten Programmierer begnügen sich damit, die Diskettenoperationen ihres Programms auf der Standardlaufwerkadresse "8" durchführen zu lassen. Sehr zum Leidwesen von frischgebackenen Zweitfloppy-Besitzern, denn jetzt fängt das Gedippe (Computer"fach"ausdruck: Dipschalter mit dem nächstliegenden Gegenstand umschalten") erst richtig an. Nachladende Programme, die man mit aller Sorgfalt auf den 1581-Standard gebracht hat, erwarten wichtige Programmteile von Laufwerk "8", dabei ist die zweite Floppy meist über Adresse "9" zu erreichen. Also muß der Anwender mit Müh und Not die gut versteckten Dipschalter an seinem Laufwerk umstellen.

Wesentlich besser wäre, wenn der Programmierer ihm diese Arbeit abnehmen würde. Man braucht also eine Routine, die erkennt, welche Laufwerke zur Zeit aktiv sind. Um dieses Problem zu lösen, sind nicht einmal Assemblerkenntnisse nötig. Mit dem Basic des C128 geht es ganz einfach:

9000 for i=1to4
9010 poke 768,54: open 1,i+7,15: close1: poke 768,63
9020 if st=-128 or st=-125 then drive$(i)="aus": goto 9040
9030 drive$(i)="an"
9040 nexti
9050 return

Dieses kleine Programm wird mit "GOSUB 9000" gestartet und biegt die Adresse (768) der Fehlerroutine so um, daß das Basicprogramm auch bei ausgeschalteter Floppy weitergeführt wird. Nun braucht man nur noch den Status (st) abfragen, um den Zustand der Floppy zu erkennen. Wer aber mit dem Compiler "Basic 128" arbeitet, wird hier keinen Erfolg haben. Statt dessen sollte dieses Programm eingetippt werden:

9000 rem (klammeraffe)tc
9005 trap 9035
9010 for i=1to4
9015 drive$(i)="an"
9020 open 1,i+7,15,"ui": close1
9025 next i
9030 return
9035 if er=5 then drive$(i)="aus"
9040 resume next
9045 rem (klammeraffe)to

Wer den Compiler "Basic 128" benutzt muß die REM-Zeilen mit eintippen, da ein "Resume Next" Bereich vorher angemeldet werden muß. Im normalen Basic kann der REM-Befehl durch einen Doppelpunkt ersetzt werden. Und schließlich muß noch ein kleines Auswahlprogramm her: (Start erfolgt durch "run 9100")

9100 gosub 9000
9110 for i=1to4
9120 if drive$(i)="an" then gosub 9150
9130 next i
9140 print"Kein Laufwerk verfügbar!!!": end
9150 print"Soll das Laufwerk: ";i+7;" benutzt werden?"
9160 getkey a$
9170 if a$="j" then lw=i+7: goto ladeprogramm
9180 return

Sobald man die Frage nach dem Laufwerk mit "J" beantwortet, wird nach Ihrer Laderoutine verzweigt. ladeprogramm muß also durch die erste Zeilennummer Ihres Nachladeprogramms ersetzt werden. lw wird in die "Bload"- oder "Dload"-Anweisung untergebracht (z.B.: DLOAD "zeichensatz" ,u lw). Mit Sicherheit läßt sich das Ganze noch mit Raffinessen ausschmücken, doch sollte hier jeder Programmierer selbst entscheiden. In Punkto Anwenderfreundlichkeit streicht Ihr Programm auf jeden Fall schon einmal Pluspunkte ein.




Inhalt

   
Zurueck