Ihr Sinclair Spectrum spricht nicht nur seine »Muttersprache« Basic, er kommuniziert auch sehr gut in Pascal. Allerdings benötigen Sie 48 KByte RAM.
Vor einigen Monaten begann für mich der praktische Einstieg ins Pascal. Einige Bücher hatten mich schon neugierig gemacht, aber ohne die eigene Erfahrung mit dieser Sprache war mir doch vieles nicht so ganz klar.
Die englische Dokumentation zum Pascal-Compiler enthält für den Spectrum Ergänzungsseiten, weil durch Softwareänderungen und andere Tastenfunktionen eine Abweichung zum Standardtext entstanden ist. Wenn Sie gerne für den Spectrum aktualisierte Befehlslisten hätten, werden Sie in diesem Artikel vielleicht auch eine Ergänzung zum Handbuch sehen.
Blaise Pascal (1623 bis 1662), der französische Philosoph und Mathematiker hat wohl nicht damit gerechnet, daß sein Name auch einmal für eine Programmiersprache verwendet wird. Professor N. Wirth stellte im ]ehre 1971 seine neue Sprache Pascal vor, die das strukturierte Programmieren unterstützen und dabei nur grundlegende Sprachkonzepte enthalten soll.
Eine Sprache für alle Zwecke? Nun, das kann auch Pascal nicht leisten, aber der systematische Aufbau hilft den eigenen Programmierstil zu verbessern und die Geschwindigkeit des erzeugten Pascal-Codes macht in vielen Fällen wohl auch das mühsame Schreiben von Maschinencode überflüssig.
Von einer modernen Sprache erwartet man, daß sie neben einer schnellen Programmausführung auch das strukturierte Programmieren unterstützt und selbstdokumentierend ist.
Wie sieht es da beim Basic unserer Micros aus?
Die Geschwindigkeit eines Basic-Interpreters ist natürlich nicht berauschend, muß doch während des Programmablaufes jeder Befehl erst in die Maschinensprache übersetzt werden.
Pascal: Es wird vom Compiler ein kompakter Code erzeugt, der zirka 40 mal schneller sein soll als Basic.
Zum Strukturieren gehört das Aufteilen des Programms in Blöcke, die sich im GrundBasic nur durch GOSUB aufrufen lassen (das GOTO ist in diesem Zusammenhang ja verpönt).
Pascal: Es können Prozeduren und Funktionen aufgerufen werden. Blockbildung mit BEGIN ... END, mehrere Arten von Schleifen und so weiter sind möglich.
Der Selbstdokumentation dienen Namen für Prozeduren und Variable. Bei numerischen Variablen ist die Möglichkeit, Bezeichner zu kreieren, meist nicht so eingeengt. Strings dürfen oft aber nur mit einem Buchstaben und dem $ bezeichnet werden. Wenn GOSUBs mit einer Variablen erlaubt sind, kann man noch etwas für die Lesbarkeit tun, aber den Rest muß man mit REM-Zeilen besorgen.
Pascal; Funktionen und Prozeduren werden mit Namen aufgerufen. Bezeichner können unabhängig vom Variablentyp gewählt werden.
Kommentare können in das Listing eingefügt werden.
Die besseren Möglichkeiten, ein übersichtliches Programm zu schreiben, hat man eindeutig bei Pascal.
Die Muttersprache der meisten Heimcomputer ist Basic. Eine Allroundsprache, die den Einstieg erleichtert und durch eigene kleine Programme schnell Erfolgserlebnisse liefert. Daß man auch ganz komplexe Aufgaben mit Basic lösen kann, das wird wohl niemand bestreiten. Beispiele dafür findet man vielfach. Aber auffallend ist, daß viele Programme auch einen Codeteil beinhalten. Wenn es auf Geschwindigkeit ankommt, muß man es dem Rechner einfach machen. Und Maschinencode ist nun mal seine Sprache, da kann er arbeiten ohne zu »denken«.
Basic oder Pascal? Die Entscheidung kann man erst treffen, wenn man beide Sprachen kennt und auch dann wird es noch von der Aufgabe abhängen. Was spricht aber dagegen, es einmal mit Pascal zu versuchen. Was man dazu braucht, ist ein Pascal-Compiler auf Kassette mit dem dazugehörigen Handbuch und ein Pascal-Lehrbuch. Erleben Sie das Gefühl, einen völlig »neuen« Computer zu besitzen.
Die folgenden Kapitel beziehen sich auf den Hisoft-Compiler HP 4S Version 1.5 für den Spectrum 48 KByte.
Das Handbuch vom Compiler besteht aus einer zirka 60 Seiten starken Dokumentation von Hisoft-Pascal, unterteilt in Flußdiagramme, Befehlsworte, Handling, Programmbeispiele und einige Ergänzungsseiten, die sich speziell auf den Spectrum beziehen.
Man betont, daß es kein Lehrbuch für Pascal sein soll und verweist auf das Angebot im Buchhandel. Auf den ersten Blick mag das als Nachteil erscheinen Spectrum-Besitzer sind ja durch das gute Sinclair-Handbuch verwöhnt - aber es ist besser, eine gute Dokumentation zu besitzen als ein Halb-und-Halb-Werk.
Etwas unübersichtlich ist allerdings die Arbeit mit den Ergänzungsseiten. Liest man im Handbuch, daß dieser oder jener Befehl auf dem Spectrum nicht verfügbar ist, so findet man in der Ergänzung was jetzt wie geändert wurde. Softwarepflege ist ja etwas positives, aber ausgetauschte Handbuchseiten sind eben übersichtlicher als Ergänzungsblätter.
Um die weiterführenden Kapitel besser verstehen zu können, muß man in etwa wissen, wie ein PascalCompiler aufgebaut ist und welche Aufgabe seine Programmteile haben.
Der Basic-Lader lädt nicht nur den Compilercode, sondern wird auch vom Compiler selbst für verschiedene TapeRoutinen benutzt. Außerdem kann man damit vom Basic aus wieder ins Pascal zurück. In diesem Programm darf nichts verändert werden, weil vom Pascal aus »hineingepokto wird.
Compiler und Editor dienen der Programmerstellung und Korrektur, Zunächst wird ein Listing geschrieben, der sogenannte Text. Die Zeilennummern sind dabei nur Hilfsmittel für die Korrektur, für Sprünge oder Verzweigungen werden sie nicht benutzt, Nach jeder Änderung im Text muß das Programm vor dem Laufen wieder compiliert werden. Dabei wird es in den Objekt-Code übersetzt und die Prüfung auf Syntaxfehler durchgeführt. Wenn der Compiler keine Fehler meldet, ist das Programm startbereit.
Runtimes ist ein Block von über 4 KByte Länge, der zum Laufen des Objektcodes benötigt wird. Er ist nicht verschiebbar und bestimmt praktisch die Mindestlänge eines Pascal-Codes. Seine Startadresse liegt bei USR 24608.
Ist das Programm ausgetestet, so wird im Translate-Modus der Objektcode an Runtimes kopiert. Dabei werden Editor und Compiler gelöscht. Die Endadresse des Objektcodes wird angezeigt, so daß man sich die Blocklänge ausrechnen kann.
Was man im Basic des Spectrum als Toolkit dazuladen muß, der HP 4S hat es schon eingebaut. Eine Fülle von Optionen, die das Programmieren erleichtern. Die Befehle haben in den vier Betriebsarten zum Teil unterschiedliche Bedeutung, deshalb eine getrennte Aufstellung.
Das Zeichen »>« signalisiert den Befehls-und Schreibmodus. Der Cursor zeigt das blinkende »C« oder »L«. Wie in Basic kann man mit Cs2 (Caps shift) die Groß-/Kleinschrift umschalten. Die Sinclair-Token gibt es nicht mehr, die reservierten Pascal-Worte müssen mit Großbuchstaben ausgeschrieben werden. Die Zeichen der Optionen werden, bis auf wenige Ausnahmen, auch als Kleinbuchstaben akzeptiert.
Wie das Spectrum-Basic hat auch HP4S einen Zeileneditor, der jedoch bedeutend mehr Möglichkeiten bietet. Einige Funktionen laufen über Caps shift (Cs), bei anderen ändert sich das Cursor-Zeichen (dargestellt in der Klammer). Die Sonderzeichen und der Edit-Mode werden mit ENTER verlassen. Der Text ist nur vor dem Cursor zu sehen.
Werden beim Compilieren Fehler erkannt, so erscheint eine ERROR-Meldung mit Fehlernummer. Siebzig verschiedene Fehler kann der Compiler unterscheiden. Mit »E« geht die angezeigte Zeile in den Edit-Mode, die Zeile vorher kann man mit »P« aufrufen (Großbuchstaben verwenden).
In den Text können Befehle für den Compiler eingefügt werden, die zum Beispiel den Drucker steuern oder Text vom Band in den Objektcode einbinden. Die Steuerzeichen werden wie Kommentare in geschweifte Klammern gesetzt, erhalten aber vorweg das $-Zeichen.
Ist ein lauffähiges Programm erstellt, so wird mit »T« das Quellprogramm (Text) compiliert. Hat es den Compiler fehlerfrei passiert und wird die Meldung »OK?« mit »Y«bestätigt, so wird der Objektcode an den Teil Runtimes gesetzt. Dabei werden der Compiler und der Editor gelöscht. Das Quellprogramm sollte man vorher mit »Pn,m,s« speichern, um noch mal Änderungen vornehmen zu können oder Teile des Textes für weitere Programme zu verwenden.
Ist der T -Mode mit »Y« quittiert, so kommt die »START TAPE...« Meldung und BasicLader und Pascal-Code können gespeichert werden.
Das Programm erhält den Namen, der im »Find«-String steht (F,Name) und ist nach dem Laden selbststartend, kann aber auch mit GOTO 7 aufgerufen werden. Soll der Pascal-Code von einem eigenen Basic-Programm gestartet werden, so kann das mit USR 24608 erfolgen.
Dieser Artikel wird in der nächsten Ausgabe fortgesetzt.
Optionen für den Schreibmodus:
ENTER Cursor in der Zeile = Eingabezeile quittiert
ENTER Cursor nach der Zeilennummer = Zeile gelöscht
Cs 0 löscht das letzte Zeichen (Delete)
Cs 8 nächste TAB-Position
Cs 5 löscht die ganze Zeile einschl. Nummer
Optionen für den Befehlsmodus:
Cs 1 schaltet in den Befehlsmodus, wenn kein »>«
In,m generiert Zeilennummern, beginnt mit »n« in Schritten von »m«
En Zeile »n« wird zur Edit-Zeile
Kn n = Anzahl der zu listenden Zeilen (max 21)
L listet ab Zeile 1 (bei mehr als K-Zeilen scroll)
Ln,m listet von Zeile »n« bis Zeile »m«
Dn,m löschen von Zeile »n« bis »m«
Mn,m Zeile »n« wird nach »m« kopiert
Nn,m Renumber beginnt mit Zeile »n« in Schritten »m«
C der Text wird compiliert
Cn der Text wird compiliert ab Zeile »n«
R starten des Objektcodes
B Sprung ins Basic. Rücksprung mit: GOTO 9 (Warmstart, Text bleibt erhalten) GOTO 12 (Kaltstart, Text wird gelöscht)
Pn,m,s speichert den Text von Zeile »n« bis »m« unter dem Namen »s« auf Band
G,s laden eines mit »P« gespeicherten Textes und dem Namen »s«
Wn,m,s speichert den Text (nicht in HP4S Format) von Zeile » n« bis »m« unter dem Namen »s« auf Band (siehe Tape-Routinen)
Fn,m,f,s von Zeile »n« bis »m« wird nach dem Zeichen (Zeichenfolge) »f« gesucht, das durch »s« ersetzt werden kann. Ersetzen mit Taste »S«, weitersu chen mit »F«, beenden mit ENTER
V zeigt, wie »Fn,m,fs« definiert wurde
F,,s Name »s« wird im Translate-Modus für das Programm verwendet
T Translate. Das Programm wird compiliert und mit Runtimes verbunden. Compiler und Editor werden gelöscht, wenn »OK?« mit »Y« beantwortet wird
X zeigt die Endadresse des Compilers (Hex)
1. Befehls-Modus: | schreiben des Textes, Wahl der Betriebsarten |
2. Edit-Modus: | korrigieren im Zeileneditor |
Compile-Modus: | übersetzen des Textes (Listing) zum Objektcode |
Translate-Modus: | verbinden des Objektcodes mit dem Teil Runtimes |
Optionen in der Edit-Zeile:
SPACE vorrücken auf das nächste Zeichen
Cs 0 ein Zeichen zurück
Cs 8 nächste TAB-Position
K löscht ein Zeichen
Z löscht von Cursor bis Zeilenende
I () insertieren
X () insertieren am Ende der Zeile
C (+) überschreiben
L listet Zeile mit Änderungen
R Zeile wird neu geladen (ohne Änderungen)
Q Edit-Mode beendet. Zeile nicht geändert
ENTER Edit-Mode beendet. Zeile ist geändert
F sucht den nächsten »Find«-String (»f«)
S ändert den Find-String in den Ersatz-String (»s«)
Steuerzeichen:
L+ volles Listing
L- ohne Listing (ohne Angabe L+)
P schaltet zwischen Bildschirm und Drucker (ohne Angabe Bild)
F Text abrufen von Band (mit »W« gespeichert, siehe Tape-Routinen)
(weitere Optionen im Handbuch)
Beispiele:
1 {$L-} compilieren ohne Listing
50 {$P} nach Zeile 50 wird bis Zeile 100 auf den Drucker geschaltet
100 {$P}
150 {$F
PLOT} Prozedur PLOT wird vom Band abgerufen und in den Objektcode eingebunden