APPLICATIONSPROGRAMMATION ★ Ein MINI-FORTH auf dem SCHNEIDER CPC-464 ★

Forth/UPN-Simulator (Compute Mit)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Interessieren Sie sich für Forth? Diese Programmiersprache hat ja in letzter Zeit regelrecht Furore gemacht und liegt nun auch für den Schneider CPC-464 in verschiedenen Versionen vor. Alle zusammen haben denselben Nachteil: Sie kosten einen Batzen Geld. Mit dem abgedruckten Förth-Simulator können Sie die Grundzüge diese Sprache erlernen und dann entscheiden, ob Forth für Sie in Frage kommt.

Die Vor- und Nachteile von Forth wurden ja schon oft genug erörtert, hier deshalb die wichtigsten Eigenschaften nur in Stichworten:

  • Fast so schnell wie Maschinensprache, aber nicht so schwierig zu programmieren.
  • Geringer Speicherplatzbedarf sowohl des Interpreters selbst als auch der erzeugten Programme.
  • Aufgrund der umgekehrten Polnischen Notation (s. u.) schwieriger zu erlernen als z. B. Basic oder Pascal.
  • Möglichkeit zur dynamischen Definition von Befehlen. Somit kann für jede Anwendung (Grafik, Textverarbeitung, Arithmetik) ein spezieller Befehlssatz kreiert werden.
Zuerst zur umgekehrten Polnischen Notation (UPN oder RPN), die dem Forth-An-fänger am meisten zu schaffen macht: Forth kennt zwar Variablen, benutzt sie aber kaum, da alle Daten auf Stacks, also Stapelspeichern, abgelegt werden. Maschinenprogrammierer wissen damit sicher etwas anzufangen (PUSH und POP), für die übrigen folgt hier die wohl meist-verwendete Erklärung: Stellen Sie sich einen Tellerstapel vor; auf diesen können Sie oben Teiler auflegen und oben auch wieder entnehmen. Solange Sie kein zirkusreifer Artist sind, dürfte es unmöglich sein, weiter unten liegende Teller direkt wegzunehmen. Sie müssen alle darüberliegenden Teller beiseite legen, um an diesen Teller heranzukommen. Diese Sper-cherorganisation nennt man LIFO-Last in, first out: was zuletzt auf den Stapel kommt, kann auch zuerst wieder weggenommen werden.

Stellen Sie sich das Ganze nun statt mit Tellern mit Zahlen vor: Sie können beliebig viele Zahlen auf den Stapel, neudeutsch „Stack “, legen. Die Rechen befehle, z. B. die vier Grundrechenarten, verknüpfen jeweils die beiden obersten Stapelelemente miteinander: Legen Sie die Zahlen 33 und 44 auf den Stapel und geben Sie ein Plus-Zeichen ein, so nimmt der Computer beide Werte vom Stack, addiert sie und legt das Ergebnis wieder auf den Stapel. Die Zahlen 33 und 44 selbst sind dann verschwunden.

Nach dieser kurzen Einführung sollten Sie die weiteren Übungen direkt am Computer durchführen. Geben Sie dazu den Forth/UPN-Simulator ein. Dieser ist in Basic geschrieben und damit natürlich erheblich langsamer als Forth normalerweise. Es besteht aber damit auch kaum die Gefahr, den Computer zum-Abstürzen zu bringen, was Anfänger - und auch Profis -bei Forth des öfteren schaffen. Außerdem kennt das Programm natürlich nicht den gesamten Befehlssatz, so fehlen z.B. Schleifen- und Vergleichs befehle. Um die Grundzüge der Programmierung in Forth zu erlernen, reicht das Programm aber voll aus. Da der Simulator in Basic geschrieben ist, steht er Ihren Erweiterungen natürlich offen.

Haben Sie das Programm abgetippt, sollten Sie es sicherheitshalber abspeichern. Auch ist es zu empfehlen, bei der Austestphase des Programms die ON-ERROR-An-weisung in Zeile 540 erst einmal wegzu-iassen, damit Sie Tippfehler in der eingegebenen Version entdecken können. Sobald Sie das Programm starten, schaltet es auf 80 Zeichen pro Zeile um und zeigt den Arbeitsbildschirm. Auf der rechten Bildschirmhälfte finden Sie alle residenten Forth-Befehle, die im folgenden Text an-
gesprochen werden. Links oben ist der Stack-Pointer SP zu finden, der immer auf das oberste Element des Stacks zeigt So können Sie während der Rechnungen immer die Stapel-Aktivitäten verfolgen. Beim Programmstart wird der Stack auf die Adresse 24576 gesetzt. Sie haben 16 KByte frei für den Stack und können 819216-Bit-Integerzahlen speichern. Dies ist erheblich mehr als bei anderen F-orth-Systemen und reicht auf jeden Fall aus. Das verbleibende umrahmte Biidschirm-fenster.in dem der Cursor steht, ist Ihr Eingabefeld. Auch werden die Antworten des Computers hier ausgegeben. Sie können bis zu 253 Zeichen in eine Eingangszeile packen; längere Eingaben werden zurückgewiesen.

Wiederholen Sie doch noch einmal die Rechnung von vorhin. Tippen Sie ein:

33 [ENTER] - der Stapelzeiger erhöht sich auf 24578
44 [ENTER] - der Stackzeiger steht jetzt auf 24580
+ [ENTER] - jetzt wird der Stapel wieder auf 24578 erniedrigt

Nun wollen Sie aber auch ein Ergebnis sehen. In Basic würden Sie jetzt PRINT eingeben, Forth hat dafür den Punkt,,” reserviert Geben Sie also noch einen Punkt ein und drücken Sie wieder ENTER Kurz darauf erscheint das Ergebnis 77.

Natürlich können Sie auch alle Eingaben in eine einzige Zeile packen:

33 44 + . [ENTER]

Das Ergebnis ist dasselbe. Die übrigen drei Grundrechenarten funktionieren genauso:

3 4 *. ergibt 12
12 3 /. ergibt 4
4 3 -. ergibt 1

Eine Kombination dieser Rechnungen ist natürlich auch möglich:

3 4*5 + . ergibt 17

Achten Sie unbedingt darauf, zwischen allen Operanden und Operatoren mindestens ein Leerzeichen einzufügen. Mehr Leerzeichen schaden nicht, drücken aber etwas die Verarbeitungsgeschwindigkeit. Alle Eingaben können sowohl in Klein- als auch in Großbuchstaben erfolgen.

Jetzt bleibt nur noch eines zu tun: Üben, üben, üben! Denn dies ist die wohl wichtigste Grundlage von Forth. Ohne Kenntnis der UPN kein Forth!

Nun gibt es noch weitere Befehle, mit denen der Stapelspeicher manipuliert werden kann. Dazu sind noch zwei Fachbegriffe zu erklären: TOS heißt „Top of Stack “, meint also das oberste Stapelelement. „20S” heißt „Second Element of Stack” und ist das zweite Stapelelement, das direkt unter dem TOS liegt Es gibt Befehle, die nur den TOS verändern, und andere, die TOS und 20S benötigen.

1+ und 2+ sind nur der Vollständigkeit halber aufgenommen und funktionieren genauso wie „1 +” und „2 + ”. Bei richtigen Forth-Interpretern bringen sie einen kleinen Geschwindigkeitsgewinn.

SQR ist ähnlich der Pascal-Funktion SQR nicht zu verwechseln mit Basic's SQR Dieser Befehl quadriert den TOS. Achten Sie aber - wie bei allen anderen Berechnungen darauf, daß nur Integer-Zahlen verarbeitet werden können, die im Bereich von -32768 bis 65535 liegen können.
Beispiel: 3 SQR. ergibt 9

DUP dupliziert den TOS, d. h. der Inhalt des TOS wird noch einmal auf den Stapel gelegt So können z.B. Zwischenergebnisse gespeichert werden, wenn diese Zahl nochmals benötigt wird.
Beispiel: 3 DUP *. ergibt 3 3 *.und hat das Ergebnis 9.

DROP vergißt den TOS und erniedrigt den Stapelzeiger dementsprechend,
Beispiel: 3 4 DROP . ergibt 3, da der TOS-Wert 4 wieder vergessen wurde.

SWAP tauscht den Inhalt des TOS und des 20S aus. Damit können z. B. Divisionen und Subtraktionen vorbereitet werden, bei denen es auf die Stellung der Operanden ankommt
Beispiel: 4 3-. ergibt 4-3=1 4 3 SWAP -. ergibt 3-4=-1

SWPB ist vor allem für Maschinenprogrammierer interessant, denn SWPB heißt „Swap Bytes” und tauscht das High- und das Low-Byte des TOS aus.
Beispiel: &0003 SWPB. ergibt 768 (hexadezimal &0300)

Hier sehen Sie auch, daß Sie überall auch Hexadezimal- und Binärzahlen verwenden können - bis auf den Sonderfall Null: Diese Zahl muß dezimal eingegeben werden. Das hat das Programm um einige Zeilen verkürzt.

ABS entspricht der Basic-Funktion ABS. Es bildet den Absolutwert des TOS.
Beispiel: -3 ABS . ergibt 3

NEG bildet den Minuswert des TOS.
Beispiel: 3 NEG. ergibt -3

MIN und MAX vergleichen den Inhalt des TOS und 20S und legen das Minimum bzw. Maximum weder auf den Stapel.
Beispiel: 3 4 MIN . ergibt 3 4 5 MAX. ergibt 5

AND, OR, XOR erlauben logische Verknüpfungen des TOS und 20S. Sie entsprechen den gleichnamigen Basic-Kommandos.
Beispiel: 1 2 OR. ergibt 3

NOT bildet das Zweier-Komplement des TOS - genau wie der Basic- Befehl gleichen Namens:
Beispiel: 3 NOT. ergibt -4

EMIT gibtden Inhalt des TOS als ASCIi-Zeichen aus, vergleichbar der CHR$-Funktion in Basic.
Beispiel: 7 EMIT gibt einen Beep-Ton aus.

SPACES gibt soviele Leerzeichen aus, wie sie dem TOS-lnhalt entsprechen.
Beispiel: 20 SPACES 42 EMIT gibt nach 20 Leerzeichen einen Stern aus.

CR, LF, CRLF geben einen Wagenrücklauf, ein Line-Feed oder beides zusammen aus:
CR entspricht 13 EMIT
LF entspricht 10 EMIT
CRLF entspricht 10 EMIT 13 EMIT

CLS löscht den Bildschirm.

BEEP gibt einen Beep-Ton aus und entspricht 7 EMIT.

GOTOXY setzt den Cursor entsprechend dem TOS und 20S.
Beispiel: 11 GOTOXY setzt den Cursor in die linke obere Ecke.

BASIC führt einen Rücksprung nach Basic aus.

Wortdefinitionen

Nun zu einem weiteren hervorstechenden Merkmal von Forth: den Wortdefinitionen. Ihnen ist sicher schon aufgefallen, daß man mit dem Grundwortschatz von Forth nicht allzuviel anfangen kann. Dafür kann man aber komplizierte Befehlsfolgen unter einen Namen zusammenfassen und unter diesem Namen aufrufen. Die Definitionen bestehen aus einem Doppelpunkt, einem Leerzeichen, dem Namen der Definition, einem weiteren Leerzeichen, den Befehlen, wiederum einem Leerzeichen und einem Strichpunkt als Kennzeichen für das Definitionsende.

Dabei können die neuen Definitionen wiederum auf alte bereits definierte Worte zurückgreifen. Vielleicht stört Sie der Punkt als Druck befehl und Sie wollen das Basic-Wort PRINT übernehmen. Nichts leichter als das:

: PRINT.;

Ab sofort können PRINT und der Punkt gleichwertig nebeneinander verwendet werden.

: KUBIK DUP DUP * * ;

definiert ein Wort KUBIK, mit dem der TOS hoch drei genommen werden kann:

4 KUBIK . ergibt 64 -
: KUBIKPRINT KUBIK PRINT ;

verwendet beide definierten Worte in einer neuen Definition. Übersetzt wird es vom

Computer als DUP DUP * * *
4 KUBIKPRINT druckt dann sofort den Wert 64 aus.

LIST listet alle vom Benutzer definierten Worte auf.

DEF erlaubt es, die Definition eines Wortes noch einmal anzuzeigen. Dazu muß die Nummer des Worts ermittelt werden. Sie können ganz einfach beim LIST- Befehl die Worte abzäh len, indem Sie bei Null begin-
nen.
Beispiel:
LIST ergibt PRINT KUBIK KUBIKPRINT
PRINT ist dann Definition /, KUBIK Nr.1,
KUBIKPRINT Nr.2
1 DEF ergibt: KUBIK = DUP DUP * *

FORGET ermöglicht es, gezielt Worte aus dem Vokabular wieder zu streichen, wenn sie fehlerhaft sind oder nicht mehr benötigt werden.
Beispiel:
4 KUBIKPRINT ergibt 64
FORGET KUBIKPRINT
4 KUBIKPRINT ergibt KUBIKPRINT?

Als letzte Gruppe gibt es noch sechs „gefährliche” Kommandos. Diese können nämlich den Computer zum Aussteigen bringen - genau wie ihre Basic-Äquivalente PEEK, POKE, DEEK, DOKE, PRINT PEEK und PRINT DEEK.

C! entspricht dem Basic-POKE: 255 24576 C! POKE 24576,255
! ist ein Doppet-POKE; &3FAC 24576 ! POKE 24576,&AC:POKE24577,&3F
C@ entspricht dem Basic-PEEK 24576 Ca TOS=PEEK(24576)
@ entspricht einem Doppel-PEEK 24576 a TOS=PEEK(24576)+PEEK(24577)*256
C? ist ein PRINT PEEK 24576 C? PRINT PEEK(24576)
? ist ein PRINT Doppel-PEEK 24576 ? PRINT PEEK(24576)+PEEK(;4577)*256

Überlegen Sie sich die Verwendung dieser Befehle aber gut! Ein falscher Wert - und der Computer ist abgestürzt. Viel Spaß beim Forth-Lernen! Vielleicht finden Sie ja soviel Interesse daran, daß Sie sich einen richtigen Forth-Interpreter zulegen.

Martin Kotulla, Compute Mit

★ PUBLISHER: Compute Mit
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: COMPUTE MIT 1986
★ AUTHOR: Martin Kotulla
 



★ AMSTRAD CPC ★ DOWNLOAD ★

Aucun fichier de disponible:
» Vous avez des fichiers que nous ne possédons pas concernent cette page ?
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Text-Pro (Computer Schau)
» Applications » ESAT Software/Goldmark - Viewtext
» Applications » te - Text Editor
» Applications » Texthardcopy (CPC Amstrad International)
» Applications » RSX Textdump
» Applications » Text Editor
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 196 millisecondes et consultée 1140 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.