Mehr Komfort: CLEAR, RUN, END, STOP, LOAD, SAVE


In den vorangegangen Kapiteln haben wir die Pfeiler des Programmierens kennengelernt. Mit PRINT, INPUT, LET, GOTO und IF können Sie schon fast alles programmieren. Aber es ist etwas mühsam. Der C16 bietet Ihnen nicht nur diese elementaren Befehle, sondern noch einiges drumherum. Dies soll in diesem und den folgenden Kapiteln besprochen werden.

CLEAR und RUN

Bis jetzt haben wir unsere Programme immer mit GOTO gestartet. Haben wir allerdings - wie im Moment - mehrere Programme im Speicher, kann es zu Problemen kommen, wenn das Programm Speicher benutzt, ohne sie vorher mit festdefinierten Werten zu belegen. Wir haben inzwischen sicher die Übersicht über all die Speicher und ihre Belegungen verloren. Wenn wir nun ein Programm starten, sind die Speicher garantiert nicht richtig gesetzt und das Programm macht nur Mist.

Daher gibt es ohnehin eine Grundregel beim Programmieren:

Weise jeder Variablen (jedem Speicher) innerhalb des Programms einen Anfangswert zu - entweder mit LET oder mit INPUT.

Man soll es also gerade nicht so machen, wie wir in den vorangegangenen Kapiteln (aus der Not heraus): Mit Variablen arbeiten, die im Programm selbst nicht gesetzt wurden.

Um hier Fehler leichter erkennen zu können, ist es möglich, vor dem Programmstart alle Variablen auf einmal zu löschen. Das macht man mit dem Kommando CLEAR. Man sollte also vor jedem Start des Programms ein CLEAR eingeben. Um sich das zu ersparen, gibt es das RUN-Kommando. Es ist eine Kombination aus CLEAR und GOTO: Zuerst alles löschen, dann loslegen. Es ist üblich, Programme mit RUN zu starten.

END und STOP

Wahrscheinlich ist es ihnen schon längst aufgefallen: Wenn Sie zwei Programme hintereinander im Speicher stehen haben, dann kann es leicht passieren, dass beim Start des ersten Programms das zweite mit ausgeführt wird. Wenn Sie anfangs das erste Programm in den Zeilen 1 bis 4 und das zweite ab Zeile 10 stehen hatten, dann wurde bei GOTO 1 natürlich alles ausgeführt, Zeile 1 bis 4 und dann weiter ab Zeile 10. Kann man das auch trennen? Kann man. Mittels dem END-Befehl. Kommt das Programm an ein END, dann beendet es das Programm.

10 INPUT A
20 IF A=1 THEN GOTO 110
30 IF A=2 THEN GOTO 150
110 INPUT A
120 INPUT B
130 PRINT A+B
140 END
150 INPUT A
160 INPUT B
170 PRINT A-B
180 END

Dieses Programm nimmt zuersteinmal eine Zahl entgegen. Mit dieser Zahl wird aber nicht gerechnet, sie wird als ein Schalter verarbeitet. Wurde 1 eingegeben, verzweigt das Programm nach 110 und summiert zwei Zahlen auf. Wurde 2 eingegeben, verzweigt das Programm nach 150 und bildet die Differenz aus zwei Zahlen. Der END-Befehl sorgt dafür, dass das Programm nicht vom Summe-Teil in den Differenzteil läuft.

Im Grunde der gleiche Befehl ist der STOP-Befehl. Er verursacht nur eine andere Antwort des Rechners. Nach einem END-Befehl antwortet er mit "READY", nach einem STOP-Befehl mit "BREAK IN LINE XXX" (XXX steht hier für eine Zeilennummer). Daher wird STOP zum Testen des Programms benutzt. Im entgültig laufenden Programm wäre der STOP-Befehl nicht so gut, weil "BREAK" ja heisst: Das Programm wurde unterbrochen, eigentlich müsste es weiterlaufen. Da ist was schiefgelaufen. Und das kann dann den Nutzer (auch Sie selbst) irritieren.

SAVE und LOAD

Wahrscheinlich haben Sie sich schon ziemlich geärgert. Es ist ja ganz schön, das Programmieren, aber wenn man nach jedem Beenden des C16 (also von Yape), bzw. nach dem Herunterfahren des PC's alle Programme wieder eintippen muss - das kann doch nicht wahr sein. Kann sich der C16 die eingegebenen Programme nicht behalten?

Um sich noch ein bisschen mehr zu ärgern: Es war durchaus beabsichtigt, dass Sie das/die Programme an jedem Morgen neu eintippen. Das schafft Bewußtsein, lässt das Gefühl für "Speicher" vom Verstand ins Herz sickern. Der Speicher des C16 (und des PC's, der vom C16 angesteuert wird), ist elektronischer Speicher. Alles wird irgendwie in elektrischen Schaltkreisen gespeichert. Ist der Strom weg, ist auch der Speicherinhalt weg. Bei Taschenrechnern ist das auch so - nur ist da der Strom nie weg, da die Batterie den Speicher auch in ausgeschaltetem Zustand mit Strom versorgt.

Diesen elektronischen Speicher nennt man Hauptspeicher. Dort werden sowohl die Variablen als auch das Programm gespeichert. Wir werden an anderer Stelle noch näher darauf eingehen. Jetzt interessiert uns erstmal, welche Wege es gibt, den Hauptspeicherinhalt, besonders das Programm permament zu sichern.

Erster Weg: Abschreiben
Sie lachen? Gut, zugegebenermassen ist das heute - wir werden es gleich lernen - keine gute Alternative mehr. In den 70er- und frühen 80er-Jahren stand genau dies am Anfang jeder Programmierer-Karriere: Das Programm vom Bildschirm auf Papier zu übertragen. Die anderen, weiter unten beschriebenen Möglichkeiten, waren zu teuer; das Geld hatte gerade für den nackten Homecomputer gereicht und ein Massenspeicher kostete mindestens 300 DM, ein guter (Diskettenlaufwerk) um die 1000 DM.
Zweiter Weg: Ausdrucken
Wenn man einen Drucker zur Verfügung hat, geht der Weg auf's Papier via Ausdrucken natürlich schneller. Für die umgekehrte Richtung, vom Papier in den Hauptspeicher zurück gibt es immer noch nur die Tastatur und den tippenden Menschen.
Dritter Weg: Kassettenrecorder
Der für den C16 damals übliche Weg war ein Kassettenrecorder. Den konnte man an den C16 anschliessen. Dann nahm man eine handesübliche Kassette (am Besten eine mit kurzer Länge, z.B. C30) und steckte sie in den Recorder. Nun gab man im C16 das Kommando SAVE ein (plus ENTER). Anschliessend kommt die Meldung "PRESS PLAY & RECORD ON TAPE". Dann musste man den Kassettenrecorder auf "Aufnahme" stellen. War das getan, fing ein grässliches Piepsen an, ziemlich ähnlich wie ein Faxgerät oder analoges Modem. Der Bildschirm verschwand und es dauerte - je nach Länge des Programms - 10 Sekunden bis 10 Minuten, bis er wieder kam. Anschliessend konnte man die Kassette anhalten und das Programm war auf Kassette (in Form des Piepsens) gespeichert. Nun konnte man den C16 abschalten. Am nächsten Morgen legte man die Kassette ein und spulte sie erstmal an den Anfang zurück. Dann gab man beim C16 den Befehl LOAD ein. Anschliessend verschwand der Screen (Bildschirm). Nun drückte man auf PLAY. Und nach 10 Sekunden bis 10 Minuten tauchte der Bildschirm wieder auf. In der Hälfte der Fälle mit einer ERROR-Meldung. Dann musste man sein Glück nochmal versuchen. In der anderen Hälfte mit einer OK-Meldung. Dann gab man den LIST-Befehl ein, sah das Programm und war sehr glücklich.
Königsweg: Diskette
Hier und da gab es auch hinreichend Reiche oder Fanatische, die 1000 DM für ein Diskettenlaufwerk ausgaben ;-). Die Technik ist im Grunde die gleiche, wie beim Kassettenrecorder: Der Speicherinhalt wird in der Magnetschicht einer beschichteten Folie festgehalten. Diese Art von Speicherung braucht keinen Strom. Im Gegensatz zum Tonband in der Kassette kann der Lese- und Schreibkopf des Diskettenlaufwerks wie der Tonkopf eines Schallplattenspielers die ganze Platte, d.h. die ganze scheibenförmige Folie erreichen. Der Unterschied liegt nicht nur in einer viel höheren Übertragungsgeschwindigkeit, er liegt vor allem in der Möglichkeit, die einzelnen Programme auf der Platte gezielt zu laden. Beim Tonband liegt unter dem Kopf immer nur ein Programm und man muss dieses komplett am Kopf vorbeispielen oder -spulen, um ans nächste zu gelangen. Bei der Diskette kann man den Kopf gezielt zum Programm bringen - innerhalb von Millisekunden.

Wir haben nun den Komfort, den Königsweg gehen zu können. Ihr PC hat (wahrscheinlich noch) ein Diskettenlaufwerk. Das wäre das praktischste. Ein USB-Stick oder eine Speicherkarte wären auch gut. Das ist natürlich nicht das gleiche wie damals das beim C16. Vor allem Speicherkarten fassen viel mehr Daten und sind schneller. Aber das schadet ja nichts. Zuerst muss das entsprechende Laufwerk (bei der Diskette wäre es A:) für den C16 zugänglich gemacht werden. Dazu schieben Sie erstmal eine Diskette/Speicherkarte ins Laufwerk, bzw. stöpseln einen Stick an. Dann gehen Sie mit der Maus in das Menü "File" des Emulators und dort zu "Attach Disk Image" und dann nach rechts zu "Drive 8".

Nun müssen Sie sich eine virtuelle Diskette erzeugen. Dazu klappen Sie ganz oben das Ordner-Menü auf und gehen auf "31/2-Diskette A:" oder auf "Wechseldatenträger".

Dann geben Sie der virtuellen Diskette einen Dateinamen, z.B. "mydisk". Nun erzeugen SIe die Diskette durch Klick auf "Create Image" ganz unten. Und dann klicken Sie weiter oben auf "Attach". Damit haben Sie Ihre virtuelle Diskette erzeugt und angeschlossen.

Ab jetzt können Sie Ihre Programme auf der Diskette speichern. Dazu benutzen Sie das Kommando SAVE wie bei Kassetten. Der Unterschied besteht darin, dass Sie noch zwei Dinge zusätzlich angeben müssen: Einen Programmnamen und die Zahl 8. Eine Speicherung geht also durch

SAVE "MEINPROG",8

Das war's schon. Die Zahl 8 ist etwas mysteriös. Es handelt sich hier um eine Gerätenummer: Der Kassettenrecorder hat die 1 (was weggelassen werden kann) und das Diskettenlaufwerk die Nummer 8. Warum die 8 und nicht die 2, das weiss ich nicht.

Laden tut man mit dem LOAD-Kommando analog:

LOAD "MEINPROG",8

Allerdings funktioniert das nur, falls - wie jetzt - nach dem Starten des Emulators auch eine virtuelle Diskette "attached" wurde. Wollen Sie an Ihre virtuelle Diskette nach einem Neustart des Emulators wieder herankommen, gehen Sie wie oben wieder in das Fenster "Attach disk image", wählen im Dateifenster die Datei "mydisk1", die die virtuelle Diskette verkörpert und gehen auf "Attach". Anschliessend ist die virtuelle Diskette wieder angeschlossen und das LOAD funktioniert.

Und fertig ist die Laube. Wir können nun nicht nur ein Programm abspeichern, sondern derer mehrere - soviel, wie eben auf der Diskette Platz haben (mehr zum Platz im Kapitel "Bits und Bytes"). Wir müssen ihnen nur unterschiedliche Namen geben.

Wenn man die Übersicht verloren hat, was da eigentlich so alles auf der Diskette drauf ist, kann man das Kommando DIRECTORY eingeben. Daraufhin listet der C16 den Inhalt der Diskette auf - alle Programme, die schon gespeichert wurden.

Das sieht dann vielleicht so aus:

1        "MEINPROG"        PRG
1        "PROG2"           PRG
1        "RECHNEN"         PRG

Die erste Spalte zeigt die Grösse des Programms in s.g. Blocks. Bis jetzt haben unsere Programme alle offensichtlich nur einen Block Grösse. (Die Einheit "Block" ist veraltet - das brauchen Sie sich nicht zu merken.) Dann kommt der Name. Und dann noch "PRG", was "Programm" bedeuten soll. Das ist der Dateityp. Es kann auch noch andere Dateitypen geben; damit werden wir uns noch beschäftigen.