Data Becker Forth

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Data Becker Forth
Der Startbildschirm.
Entwickler Compu-Lab Erlangen
Verleger Data Becker, Abacus
Release 1985
Plattform(en) C64
Genre Entwicklungssystem für die Sprache Forth
Steuerung Icon tastatur.png
Medien Icon disk525 1.png
Sprache(n) Programm Sprache:englisch
Handbuch Sprache:deutsch Sprache:englisch
Information aka Abacus Forth, FORTH-64


Allgemeines[Bearbeiten | Quelltext bearbeiten]

Data Becker Forth wurde im Jahr 1985 vom Verlag Data Becker mit einem Handbuch als "FORTH - Das Data Becker FORTH für Commodore 64" veröffentlicht. Es wurde auch als Abacus Forth vom amerikanischen Verlag Abacus mit englischsprachigen Handbuch veröffentlicht und wird dort als FORTH-64 bezeichnet. Es basiert vorwiegend auf FORTH79 (zweiter Forth-Standard), mit einigen Ergänzungswörtern aus FORTH83 und dem FIG-Forth-Standard.

Laut Verlag ist die Originaldiskette kopiergeschützt!

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Das dazugehörige Handbuch (ca. 80 Seiten).

Lieferumfang[Bearbeiten | Quelltext bearbeiten]

  • Originaldiskette mit "Data Becker Forth" und umfangreichen Handbuch (ca. 80 Seiten), das allerdings darauf hinweist, das es kein ausführliches Buch für die Programmierung in Forth ist.

Hardwareanforderung und -unterstützung[Bearbeiten | Quelltext bearbeiten]

Minimum:

Arbeitsweise[Bearbeiten | Quelltext bearbeiten]

Das "Data Becker Forth" wird von Diskette durch Eingabe von:

LOAD "GFORTH",8,1

geladen und gestartet.

Die ersten Kommandos, die benutzt werden können sind:

VLIST - zeigt eine Liste aller benutzbaren (inklusive definierten) Forth-Schlüsselwörter - das sogenannte "Dictionary" an; Abbruch mit der Taste RUN/STOP .
HELP  - zeigt die aktuelle Funktionstastenbelegung an und zeigt eine Tabelle mit der Zuordnung von ASCII-Code zu Forth-Wort.
.S    - zeigt den Inhalt des Parameter-Stacks an.

Das "Data Becker Forth" besteht aus einem Editor mit den entsprechenden Editorbefehlen (inklusive Screen-, Zeilen- und Zeichenbefehle), einem integrierten Assembler mit den entsprechenden Assembler- und Assembler-Editor-Befehlen, den Forth-Schlüsselwörter für die Programmierung, sowie zusätzliche Schlüsselwörter für die Grafik- und Sounderzeugung.

Die Organisation des Quelltextes erfolgt im Gegensatz zu BASIC seitenweise, in sogenannten "Screens" (von Data Becker als "Seite" bezeichnet) mit jeweils entsprechend fest vorgegebenen Zeilenanzahl von 16 zu je 64 Zeichen pro Zeile. Die Beschränkung der Screen-Anzahl ist auf den Speicherplatz des Datenträgers (hier: eine Diskette) begrenzt. Dies entspricht etwa 137 Screens. Die Screen werden dabei in einer Relativdatei namens "SRC" gehalten.
Die allgemeinen Fehlermeldungen von Forth sind auf Screen 4 und 5 enthalten und sollten somit nicht editiert werden, mit Ausnahme der leeren Zeilen, die für eigene Fehlermeldungen reserviert sind!
Programmierhilfen wie DUMP, HELP oder TRACE sind schon implementiert.

Da Forth eine sogenannte "offene Programmiersprache" ist, können auf einfacher Weise neue Befehle oder Schlüsselwörter (gemeinhin als Forth-Wort oder engl. word bezeichnet) eingebaut oder definiert werden. Viele der Befehle sind selbst in Forth programmiert, wobei nur ein eher geringer Teil der Wörter schließlich in Maschinencode abgefasst sind (um die Sprache prozessorunabhängiger zu machen oder kritische Befehle ausreichend schnell in der Ausführung oder platzsparend zu machen).

Weiterhin erfolgt die Angabe von Parametern (bis auf Ausnahmen) stets vor dem Befehl gemäß UPN!

Beispielsweise:

  • 100 LIST - Zeigt die 16 Zeilen des "Screens" 100 in Forth an.
  • 5 . - Gibt den Wert 5 auf den Bildschirm aus.
  • 5 2 * . - Berechnet den Wert aus 5*2 und zeigt ihn an; sinngemäß: 10.
  • 2 3 + 3 * - Berechnet den Wert aus (2+3)*3 und legt ihn (15) auf den Stack.

Funktionstasten[Bearbeiten | Quelltext bearbeiten]

Mit der Funktionstaste F1  wird der HELP-Befehl ausgeführt und zeigt die aktuelle Funktionstastenbelegung an:

F-Taste: Forth-ASCII: Ausgeführter Befehl / Bedeutung:
SHIFT+RUN  (131) ELOAD - Lädt den zuletzt editierten Screen
F1  (133) HELP - Zeigt die aktuelle Tastaturbelegung an
F2  (137) WHERE - Zeigt den Fehler an, der beim Laden eines zu editierenden Screens aufgetreten ist
F3  (134) &HI-RES - Umschalten auf HiRes-Bildschirmanzeige für hochauflösende Grafik
F4  (138) &LO-RES - Umschalten auf LoRes-Bildschirmanzeige für Text
F5  (135) ?DISC - Zustand des Diskettenlaufwerkes abfragen
F6  (139) FLUSH - Speichert alle Veränderungen am Ende eines Editiervorganges auf Diskette ab; besser jedoch DONE verwenden!
F7  (136) VLIST - Zeigt alle Forth-Schlüsselwörter an
F8  (140) DONE - Verlässt den Editormode, speichert alle veränderten Screens ab und stellt die Standard-Funktionstastenbelegung wieder her

Diese können mit dem ´KEY-Befehl entsprechend angepasst werden.

Im Editor sind die Funktionstasten wie folgt belegt:

F-Taste: Befehl: Bedeutung:
F1  +EDIT editiert nächsten Screen
F2  -EDIT editiert vorherigen Screen
F3  DELETE aktuellen Suchbegriff löschen
F4  WIPE löscht aktuelle Screen
F5  INSERT aktuellen INSERT-Puffer nochmal einfügen.
F6  FIND aktuellen Suchbegriff nochmal suchen.
F7  SSAVE editierte Screen abspeichern
F8  DONE editieren beenden
SHIFT+RUN  ELOAD zuletzt editierte Screen erneut laden
  E aktuelle Screen erneut vorlegen

Farbpalette[Bearbeiten | Quelltext bearbeiten]

Die Farbpalette ist in diesem Forth so realisiert, dass 10 verschiedene Farben angeboten werden, die als Konstanten bzw. Schlüsselwörter mit den dazugehörigen Farbwerten 0 bis 9 zur Verfügung stehen. Diese entsprechen den ersten 10 Farben der C64-Farbtabelle:

Farbe: Farbwert:
BLACK 0
WHITE 1
RED 2
CYAN 3
PURPLE 4
GREEN 5
BLUE 6
YELLOW 7
ORANGE 8
BROWN 9

Beispielsweise die Eingabe von:

BLACK PEN WHITE BORDER WHITE SCREEN 

verändert den Bildschirm in schwarze Textfarbe (PEN) auf weißen Grund (SCREEN) mit weißen Bildschirmrand (BORDER).

Alternativ geht auch dies:

15 PEN 12 BORDER 11 SCREEN

Ergibt einen Bildschirm in den drei C64-Grautönen: Hellgraue Schrift auf Dunkelgrauer Grund mit grauen Rahmen.

Die weiteren C64-Farben 10 bis 15 sind ebenfalls vorhanden. Nur das es hier keine vordefinierten Farbschlüsselwörter gibt! Diese lassen sich aber anlegen mit:

15 CONSTANT GREY3

Der Farbwert 15 wird dem Farbschlüsselwort GREY3 zugeordnet.

Weiterhin könnte man auch deutsche Schlüsselwörter nutzen:

0 CONSTANT SCHWARZ

Der Farbwert 0 wird dem Schlüsselwort SCHWARZ zugeordnet.

Forth-Stacks[Bearbeiten | Quelltext bearbeiten]

Forth ist verwendet grundsätzlich zwei Stacks:

  • den Parameter-Stack:
    Dieser nimmt Werte für Berechnungen oder für die Parameterübergabe an Forth-Wörter (sozusagen ein Schlüsselwort, das ein "Unterprogramm" darstellt) auf. Er ist wie bei Forth-Varianten in einer 6502-Implementierung üblich in der Zeropage platziert und deswegen relativ beschränkt (etwa auch hinsichtlich der Schachtelungstiefe bei Rekursionen).
  • den Return-Stack:
    Hier werden in erster Linie Rücksprungadressen der in Verschachtelung aufgerufenen Forth-Wörter abgelegt (entkoppelt vom Parameter-Stack, damit die Programmflusssteuerung und Parameterbehandlung entkoppelt sind), aber auch temporäre Zwischenwerte bei komplexeren Berechnungen und Manipulationen innerhalb eines Wortes. Auch hier ist wie bei 6502-Implementierungen üblich, der Stack mit dem Prozessor-Stack realisiert.

Die Werte am Stack sind immer als 16-Bit-Werte zu verstehen (= Cell). Ob diese als vorzeichenlos, vorzeichenbehaftet oder sonst wie interpretiert werden, hängt von verarbeitenden Programm ab, das diese verwendet.


Vokabulare[Bearbeiten | Quelltext bearbeiten]

Forth organisiert seine Wörter sogenannte Vokabularen (engl. Vocabulary), die entsprechend ausgewählt und aktiv geschaltet werden können. Mit diesen werden Wortgruppen , die im verborgenen sind, sichtbar gemacht und in der Suchreihenfolge zuerst gereiht. Diese Vokubalare werden mit Aufruf des jeweiligen Namens aktiviert.

  • FORTH - das Standardvokabular
  • ASSEMBLER - Assembler in einer sehr verbreiteten Ragsdale-Implementierung[1] in der entsprechend bekannten Syntax.
  • EDITOR - Editorbefehle
  • GRAPHIC - Grafikbefehle
  • SOUND - Soundbefehle

Editor[Bearbeiten | Quelltext bearbeiten]

Programmierung[Bearbeiten | Quelltext bearbeiten]

Die Berechnung von Ausdrücken erfolgt über diese arithmetische Schlüsselwörter: +, -, *, /, MOD (Modulo bzw. Divisionsrest), /MOD (Rest und Ergebnis der Division), MAX (Maximalwert), MIN (Minimalwert), ABS (Absolutwert), MINUS (Vorzeichenwechsel), AND, OR, XOR (logisches wie binäres Und-, Oder-, Exklusiv-Oder-Verknüpfung), NOT (logisch wie auch binäre Negation), <, >, =, 0>, 0= und beziehen sich auf vorzeichenbehaftete 16-Bit-Ganzzahlwerte. Einige davon dürften bekannt sein.

Beispiel:

  • 5 5 * 2 / - Berechnet (5*5)/2

Es gibt zusätzlich entsprechende Operatoren die vorzeichenlose Zahlen (wie U*, U/, U< usw.) oder doppelt genau Ganzzahlen, die also 32 Bit breit sind, (D+-, D+, DMINUS, DABS usw.) sowie "mixed" Operationen, die den Umgang mit 16-Bit- und 32-Bit-Werte vermischen lassen (M*, M/, M/MOD, usw).

Strings[Bearbeiten | Quelltext bearbeiten]

Bei Forth liegt der Fokus nicht unbedingt bei den Möglichkeiten zur String-Verarbeitung, die sich im Standardvokabular eher auf spezifische Wörter der Dictionary-Verarbeitung und Fehlerausgabe beschränkten. Bei Data Becker FORTH enthält das Standardvokabular eine Reihe von Wörtern für die String-Verarbeitung, die sich von der Bezeichnung an jene der bekannten BASIC-Befehle orientieren:
$+, $C+, $2C+, $RIGHT, $LEFT, $MID, $LEN, $MLEN, $!, $VAL, $STR, $VARIABLE, "

Strukturen[Bearbeiten | Quelltext bearbeiten]

Neben den Standardkonstrukten

  • IF ... ELSE ... ENDIF/THEN
  • BEGIN ... WHILE ... REPEAT
  • BEGIN ... UNTIL
  • BEGIN ... AGAIN
  • DO ... LOOP/+LOOP

gibt es auch die Fallunterscheidung mit

... CASE 
  ... OF ... ENDOF
  ... OF ... ENDOF
  ...
ENDCASE

Sound-Programmierung[Bearbeiten | Quelltext bearbeiten]

Die Sound-Programmierung kann im Programm, aber auch als Direkteingabe erfolgen.

  • SOUND - aktiviert das Vokabular mit den den Sound-Befehlen.
  • p VOLUME - Angabe der Lautstärke mit p von 0 (aus) bis 15 (laut)
  • p1 p2 p3 p4 p5 ENVELOPE - Definition der Hüllkurve (ADSR) der Stimme p1 mit folgenden Parametern:
    • p1 - Stimme (1 bis 3)
    • p2 - Anschlag (1 bis 15)
    • p3 - Abschwellen (1 bis 15)
    • p4 - Halten (1 bis 15)
    • p5 - Ausklingen (1 bis 15)
  • p1 p2 p3 p4 p5 p6 VOICE - Erzeugung eines Tones der Stimme p1 mit folgenden Parametern:
    • p1 - Stimme (1 bis 3)
    • p2 - Frequenz (0 bis 65535)
    • p3 - Wellentyp (17: TRIANGLE, 33: SAWTOOTH, 65: PULSE, 129: NOISE)
    • p4 - Tastenverhältnis (0 bis 255) nur bei PULSE relevant
    • p5 - Ausklingen (1 bis 15)
    • p6 - Klangdauer (-32768 bis 32768)
  • SID - Adresse des SID ($D400 / 54272)
  • Für die Wellenformen können auch die Konstanten TRIANGLE (Dreieck), SAWTOOTH (Sägezahn), PULSE (Puls bzw. Rechteck), NOISE (Rauschen) benutzt werden.

Für die Erzeugung eines Tones müssen nur die oben genannten Befehle nacheinander richtig eingegeben werden.

Grafik-Programmierung[Bearbeiten | Quelltext bearbeiten]

Die Grafikprogrammierung kann im Programm, aber auch als Direkteingabe erfolgen.

  • GRAPHIC - aktiviert das Vokabular mit den im folgenden angeführten Grafikbefehlen.

LORES[Bearbeiten | Quelltext bearbeiten]

  • &LO-RES - schaltet in LO-RES Modus um; kann auch über F4  erfolgen
  • ze sp S@ - holt den Zeichenwert aus Zeile (ze) und Spalte (sp)
  • Z ze sp S! - schreibt den Bildschirmcode Z als Zeichen in der angegebenen Zeile und Spalte

HIRES[Bearbeiten | Quelltext bearbeiten]

  • &HI-RES - schaltet in HI-RES-Modus um; kann auch über F3  erfolgen
  • &CLEAR - löscht den aktuellen HiRes-Grafikbildschirm
  • f &INK - Malfarbe festlegen; Parameter f steht für die 10 Farbwerte
  • f &PAPER - Hintergrundfarbe festlegen; Parameter f steht für die 10 Farbwerte
  • "Name" d &LOAD - lädt ein Bild mit dem Dateinamen von Laufwerk d (normal: 8).
  • "Name" d &SAVE - speichert ein Bild mit dem Dateinamen auf Laufwerk d ab; Beispiel: "BILD1" 8 &SAVE
  • p x y &S! - einen Punkt an Koordinate x,y (mit x=0-319; y=0-199) setzen oder löschen mit p = TRUE oder FALSE (1 oder 0)
  • x y &S@ - liefert den Wert des Pixels an Position x,y
  • p x1 y1 x2 y2 &LINE - zeichnet oder löscht (mit p = TRUE oder FLASE bzw. 1 oder 0)eine Linie von Position x1,y1 bis x2,y2

Hinweis: Bei HiRes-Grafik befindet sich die Koordinate 0,0 links unten!


Optionale Grafikbefehle sind:

  • &TM - Textmodus aktivieren
  • &SCM - Single-Color-Modus einschalten
  • &SBM - Standard Bitmap setzen
  • &MCM - Multi-Color-Modus einschalten
  • &ECM - Extended-Color-Modus einschalten

Assembler[Bearbeiten | Quelltext bearbeiten]

Besprechungen und Literatur[Bearbeiten | Quelltext bearbeiten]


Bezugsquellen[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. Forth Dimensions, Vol3, No5, "Forth 6502 Assembler"