MSX load
Wolfgang Borrmann private Seite für Sammler und MSX-Freunde


 

 

 
Home

Hardware
Hardware wanted
Software
Zeitschriften
Ausstellungen
Basic
Links

Impressum

 
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

 

 

 

   

Copyright 2006-2010 by Wolfgang Borrmann