Tipps in der Basicprogrammierung
Es soll an dieser Stelle versucht werden, eigene Erfahrungen mit der
Programmierung auf einem MSX-Rechner weiterzugeben. Neben Tipps und
Techniken kommt auch (positive und negative) Kritik am MSX-System nicht zu
kurz. Gerade das Aufzeigen von Schwachstellen des eigenen Systems wird ja
häufig in systemspezifischen Publikationen vernachlässigt. Deshalb hier ein
gewisser Akzent auch auf die negative Kritik, welche zugegeben bei MSX nicht
übermäßig viel Nahrung findet.
Gedacht sind diese Tipps sowohl für Programmier-Neulinge und "Umsteiger" als
auch für Fortgeschrittenere. Letztere sollen hiermit auch dazu angeregt
werden, weitere Tipps und Kniffe aus Ihrer Erfahrung an gleicher Stelle
beizusteuern, oder auch Optimierungsmöglichkeiten zu den hier dargestellten
Techniken. Dem absoluten Programmieranfänger sei gesagt, das es nicht
erforderlich ist, alles gleich zu verstehen. Ein gewisser Eindruck von den
Möglichkeiten und vielleicht ein paar einfachere Beispiele mal
auszuprobieren, das ist schon viel wert.
Die Tipps beziehen sich zum Teil speziell auf Basic und Maschinensprache,
zum Teil sind sie sprachenunabhängig. Die Programmbeispiele sind meist in
Basic. Es sollen hier keine Beschreibungen der einzelnen Befehle, wie man
sie in den Handbüchern findet, aufgezeichnet, sondern Möglichkeiten aus der
Programmierpraxis dargestellt werden, die man den Handbüchern nicht immer so
unmittelbar entnehmen kann.
G r o ß / K l e i n - S c h r e i b
u n g , C a p s - L a m p e
Man kennt es von
der Schreibmaschine oder PC: Normalerweise erscheinen beim Drücken der
Buchstabentasten die kleinen Buchstaben. Drückt man zusammen mit der
Buchstaben- auch die Umschalt-(Shift-)Taste, so erscheinen Großbuchstaben
(englisch capitals = "Caps"). Zum dauerhaften Einstellen der großen
Buchstaben gibt es eine Feststelltaste: Caps-Lock. Beim MSX-Computer ist sie
so realisiert, daß sie wechselweise die Großschreibung ein- und ausschalten
kann. Sie braucht auch nicht zusammen mit der Shift-Taste gedrückt zu
werden. Die Feststellung geschieht auch nicht mechanisch, sondern per
Programm (eine Betriebssystemfunktion). Man kann die eingeschaltete
Dauergroßschreibung am Brennen des "Caps"-LED erkennen
Allerdings ist die Verknüpfung der
Großschreibung mit dem Leuchten des LED nicht zwangsläufig. Man kann
innerhalb eines Programms beide
Funktionen unabhängig voneinander setzen und zurücksetzen. Zunächst zur
Dauergroßschreibung. Diese wird einfach aktiviert, indem man die
Speicherstelle "CAPST" (FCAB hex) auf einen Wert ungleich 0 setzt, in Basic
also etwa durch POKE
&HFCAB,255.
Keine Frage, dass man den Normalzustand wiederherstellen kann per
POKE &HFCAB,0.
Allerdings ist
durch das Setzen des Wertes 255 nicht garantiert, dass, wenn wir vom
Anwender unseres Programms als nächstes eine Tastatureingabe erwarten, jetzt
nur große Buchstaben kommen können. Der Anwender hat jederzeit die
Möglichkeit, durch Drücken der Caps-Lock-Taste sich den Normalzustand
wiederherzustellen. Zusätzlich beeinflusst der Wert in der Adresse &HCAB nur
die Groß-/Kleinschreibung. Die CAPS-LED wird hiervon nicht beeinflusst. Um
auch die CAP-LED anzusteuern, gibt es zwei Möglichkeiten.
Das BIOS bietet eine Routine zum Ein- und
Ausschalten der Caps-Lampe an: "CHGCAP"
auf der Adresse &H132.
Ob ein- oder
ausgeschaltet wird, hängt vom Inhalt des CPU-Registers A beim Aufruf ab: Bei
Null wird an-, sonst ausgeschaltet. Aus Basic können wir diese Routine
per
USR aufrufen:
10 CLEAR 200,&HC200
100 Poke &HC200,&H3E: REM LD A
110 Poke &HC201,&HFF:REM mit Wert &HFF
(CAPS aus)
/ wird hier der Wert
&H00 gesetzt, wird die CAPS LED eingeschaltet
120 Poke &HC202,&HCD:REM CALL CHGCAP
130 Poke &HC203,&H32:REM Bios wird aufgerufen
140 Poke &HC204,&H1:
150 Poke &HC205,&HC9:REM RET zurück ins Basic
160 DEFUSR=&HC200:X=USR(0):REM Aufruf der
Maschinensprache ab &HC200
Es gibt's aber noch eine andere Möglichkeit. Mit OUT
&HAB,12 wird an-, mit OUT &HAB,13
wieder
abgeschaltet. Dies ist genau das gleiche, was die Routine
CHGCAP auch tut. Zwar
wird aus Kompatibilitätsgründen von der direkten Ein- und Ausgabe auf die
Portadressen abgeraten, doch dürften sich diese speziellen Adressen bei MSX
wohl kaum noch ändern ;).
Fehlersuche mit dem RENUM Befehl
Noch ein spezielles
Basic-Thema. Frage: Wie kann ich sicher sein, dass alle Zeilennummern, die
mit GOTO, GOSUB und RESTORE angesprochen werden, auch wirklich in meinem
Programm vorkommen?
Ganz einfach: RUN
und auf Fehlermeldungen warten. Dies ist zwar eine Methode, jedoch keine
sichere. Denn nicht in jedem Lauf eines Programms werden alle Stellen
durchlaufen und es bliebe die Unsicherheit auf einen solcher Fehler.
Es gibt jedoch noch ein besseres Verfahren:
Programm mit SAVE sichern, RENUM
durchführen,
eventuelle Fehlermeldungen mit Zeilennummern aufschreiben, Originalversion
des Programms mit LOAD wieder laden und Fehler bereinigen.
Ganz Schlaue wissen sogar, wie man es ohne
SAVE/LOAD macht: Wenn wir sicher wissen, dass etwa keine Zeilennummern ab
60000 im Programm sind, führt ein RENUM 60000,60000
zu keiner Veränderung des Programms, jedoch zu allen gültigen
Fehlermeldungen der Art:
Undefined line xxxx in
yyyy.
Der RENUM-Befehl dient eigentlich nur zur Neunummerierung des Programms.
Falls eine GOTO oder GOSUB Anweisung eine Zeilennummer beinhaltet die nicht
existiert, wird diese GOTO oder GOSUB Zeile nicht neu nummeriert und ein
Fehler wird angezeigt. Mit der untenstehende Anweisung wird das Programm ab
Zeile 10 beginnend mit Zeile 1000 und einer Schrittweite von 50
durchnummeriert.
RENUM 1000,10,50