1000 437f 0000 I ... FORTH.DOC-T1
 Das Programmiersystem




        ___________
       |           |
       | F O R T H |
       |___________|

fuer den Kleinrechner-Bausatz Z1013

bearbeitet: B.Schubert                       Leipzig, 11/1987

0.   Einleitung

1.   Speicherkonzept

2.   Abweichungen vom FIG-Standard
2.1. Reihung, Sprachumfang
2.2. Kassettenarbeit mit FCB
2.3. Abweichungen im wortinternen Aufbau

3.   Erweiterungen des Wortschatzes
3.1. Worte aus dem F79-Standard und Hilfsworte
3.2. Editor
3.3. Case-Struktur
3.4. Dump
3.5. Disco

4.   Systemdatenbereiche
4.1. Cold-Start-Area
4.2. Anpassungs-Area

5.   Literaturhinweise
6.   Glossar


0.   Einleitung
_______________

Forth  ist  ein 1971 von Charles Moore  entwickeltes  Sprach-
und  Systemkonzept,   das  mit  wenigen Betriebssystemschnitt-
stellen  arbeitsfaehig  ist  und sich daher besonders  fuer 
Kleinrechner,  Heimcomputer,  industrielle Steuerungen und aehnliche
Anwendungsfaelle eignet.
In  der  DDR ist Forth im Vergleich zu anderen Hochsprachen  noch 
relativ wenig verbreitet.
Die  vorliegende Forth-Version entstand aus einer  Arbeitsversion 
eines Forth-Systems fuer den KC 85/1 (Z9001), die an der Wilhelm
Pieck-Universitaet entwickelt wurde und dem Robotron-Computer-
club zur Verfuegung stand. Nach der Konvertierung auf einen Z1013
wurde  das  System  nahezu ausschliesslich mit  sich  selbst  neu 
erstellt. Dabei wurden zunaechst die Schnittstellen angepasst und 
vorhandene Adressfehler in einigen Worten beseitigt.
Als Vorbild fuer die Erweiterungen zu einem komfortablen
Entwicklungssystem  diente  vorwiegend eine  Version  von  "Microsystems 
Laboratory  Los Angeles",  in der DDR bekannt als  "FORTHLE.COM". 
Von  diesem System wurden einige Funktionen dem Sinn nach 
uebernommen und fuer das vorliegende System zugeschnitten.


1.   Speicherkonzept
____________________

Das  vorliegende  System benutzt einen RAM-Bereich ab  100H.  Der 
Kaltstart beginnt auf der Adresse 334H.  Entsprechend der
Konvention  fuer CP/M ist fuer eine uebersichtliche  Programmgestaltung 
der  Kaltstart  auf  die Adresse 100H  mit  einem  Zwischensprung 
vorverlegt.  Der Bereich von 100H bis 200H ist frei und kann fuer 
Anpassungen   (z.B.:fuer  Save/Load-Routinen   anderer   Formate) 
genutzt werden.  Im KC 85/1 ist dieser Bereich vom Betriebssystem 
belegt.
Ab 200H beginnen die Routinen fuer die Anpassung an das
Betriebssystem (Anpassungsarea),  der Bereich der User-Variablen und  der 
Returnstack.Die Primitivworte fuer die Schnittstellenanpassung an 
das  Betriebssystem wurden voellig neu gestaltet bzw.  beseitigt. 
Das System wurde so umgearbeitet,  dass alle hardwarespezifischen 
Routinen  fuer  Ein/Ausgaben auf  diesen  speziellen 
Anpassungsbereich zugreifen.
Auf  Adresse  300H  steht ein Sprung zum  Warmstart  des  Systems 
(339H)  und dahinter das zugehoerige Aufrufwort entsprechend  dem 
Format fuer den KC 85/1 (WFORTH).
Gegenueber  anderen Sprachkonzepten (z.B.CAOS-FORTH fuer KC 85/2) 
ist dieses Forth so aufgebaut,  dass es Hilfsmittel besitzt, sich 
selbst  zu  vervielfaeltigen (SAVE).  Dadurch kann  die  aktuelle 
Laenge des Forth beim Abspeichern jeweils verschieden  sein.  Die 
Endadresse  des  abzuspeichernden  Systems wird immer  auf  XXFFH 
aufgerundet.
Der vom Forth-System waerend der Arbeit genutzte
Speicherbereich  ist in seiner Grundform auf 4000H d.h. 16kByte eingestellt. Damit 
wird  vielen  Anwendern die Moeglichkeit gegeben, ohne 
Speichererweiterung arbeiten zu koennen. Einschraenkungen des vorhandenen 
Wortschatzes treten dadurch nicht auf.  Bei Speichererweiterungen 
kann  durch  Aendern der Konstanten 'LIMIT' auf die  erste  nicht 
mehr  verfuegbare  Speicheradresse der Bereich fuer  die  Screen-
Puffer  beliebig  geaendert werden.  Ueber einen  anschliessenden 
COLD- oder WARM-Aufruf wird die Anzahl der SCR-Puffer neu
berechnet  (#BUFF).  Beim  Abspeichern  eines  so  geaenderten  Systems 
enthaelt das System die neuen Parameter!
Eine  Verschiebung des Datenstacks und der  Woerterbuchobergrenze 
fuer groessere Erweiterungen obliegt den jeweiligen Anforderungen 
und den Systemkenntnissen des Anweders.


2.   Abweichungen vom FIG-Standard
__________________________________

2.1. Reihung, Sprachumfang

Forth  stellt  eine sogenannte "offene"  Sprache  dar,  d.h.  ihr 
Sprachumfang  ist  theoretisch unbegrenzt und wird  vom  Anwender 
staendig  erweitert.  Daher  muss  bei  der  Implementierung  des 
Systems eine fuer den Anwender sichtbare Grenze geschaffen werden 
die kennzeichnet, wo der systembedingte Grundwortschatz endet und 
die  Anwenderworte beginnen.  Diese Grenze stellt im  allgemeinen 
das Wort 'TASK' dar, welches aus einer Leerdefinition besteht.
Unterhalb  dieses  Wortes wird das Forth ueblicherweise mit Hilfe 
eines Assemblers uebersetzt.  Dabei werden Assemblerworte
(Primi- tive) direkt uebersetzt und Forth-Worte (Secondarys) mit DA  (De-
finiere  Adresse)  aufgebaut.  Bei dieser Vorgehensweise  ist  es 
nicht  zwingend  notwendig  in allen Faellen  die  Forth-typische 
Arbeitsweise ein Wort nur aus vorangegangenen zu erstellen
einzu- halten.  Im vorliegenden System wurde darauf geachtet, die Forth-
Reihung weitgehend einzuhalten und die Anzahl an
Vorwaertsverwei- sen zu hoeheren Worten zu minimieren.Aus diesem Grund wurden alle 
Worte oberhalb '(' neu geschrieben.  Das hoechste mit 
Vorwaerts- verweis  addressierte Wort ist 'MESSAGE'.  Fuer den Programmierer 
gilt die Woerterbuchgrenze 'TASK',  der erfahrene
Systemprogram- mierer  hat  die  Moeglichkeit alle Worte oberhalb  'MESSAGE'  zu 
vergessen ohne einen Absturz befuerchten zu muessen.


2.2. Kassettenarbeit mit FCB

Forth  ist  ein Sprachsystem  das  normalerweise  Diskettenarbeit 
beinhaltet.  Die  Diskette kann vom Forth als virtueller Speicher 
ueber ein Fenster (Screen-Puffer) verwaltet werden.  Meisst  wird 
dabei die gesamte Diskette fuer Screens verwendet. Bei der Arbeit 
mit  CP/M  ist das mitunter ein Nachteil,  der bei  "FORTHLE.COM" 
durch die Vergabe von Screen-File-Namen behoben wird.  So ist
ein  uebersichtliches  Sortieren von Screens fuer verschiedene  Anwen-
dungsfaelle und deren Verwaltung vom Betriebssytem aus moeglich.
In Anlehnung daran wurde das Kassetten-Screen-Konzept entwickelt. 
Ein Screen beinhaltet 1/2kByte,  die mit einem Kopfblock zusammen 
auf der Kassette abgelegt werden.  Der im Screen-Kopf  verwendete 
Name  wird beim Kalt- und beim Warmstart in der  Systemausschrift 
angegeben und kann mit dem Wort "USING" dem System neu zugewiesen 
werden.  Der  Aufbau des Kopfblockes entspricht vollstaendig  dem 
des  Header-Save/Load  fuer den Z1013.  Als  Anfangsadresse  wird 
standardmaessig  die  Bildschirmadresse 'EC00H'  eingetragen,  so 
dass ein Screen auch mit Hilfe des HS/L-Programmes ohne Laden des 
Forth schnell gesichtet bzw. kopiert werden kann.


2.3. Abweichungen im wortinternen Aufbau

Bei einigen implementierten Worten weicht der wortinterne  Aufbau 
etwas  von der Empfehlung der FIG ab.  So wurden unter anderem in 
einzelnen  Worten eigene Worte und F79-Worte  verwendet,  um  die 
Implementierung effektiver zu gestalten.  In anderen Worten wurde 
die  innere Stuktur  so geaendert,  dass sich eine  effektvollere 
Bedienung ergibt. Das betrifft  insbesondere die folgenden Worte:

- EMPTY-BUFFERS    dieses  Wort berechnet zusaetzlich die  Anzahl 
                   der  moeglichen Screen-Puffer  zwischen  FIRST 
                   und LIMIT auch wenn LIMIT willkuerlich
veraen-                    dert  wurde  und traegt diese Anzahl in  #BUFF 
                   ein
- FLUSH            dieses  Wort  ist  so  veraendert,  dass  auch 
                   Screens oberhalb 8000H erreicht werden
- +BUF             dieses  Wort weist in Abhaengigkeit von  LIMIT 
                   auch  Puffer  oberhalb 8000H  zu,  LIMIT  muss 
                   nicht mehr direkt auf Pufferobergrenze
berech-                    net  werden.  Das wird von  EMPTY-BUFFERS  und 
                   +BUF uebernommen.
- VLIST            damit  der  Bildschirm  uebersichtlich  bleibt 
                   wurde VLIST in 3 Funktionen veraendert
                   - Auflisten in 2 Kolonnen mit Angabe der NFA
                   - Anhalten und Fortsetzen des Listens mit der
                     Leertaste, andere Tasten brechen ab
                   - Analog FORTH83 wird nur das jeweils aktuelle
                     Vokabular ausgelistet
- LIST             dieses  Wort  erkennt die eingegebene  SCR-nr. 
                   stets als Dezimalwert an,  solange sie 2
Stel-                    len nicht ueberschreitet,  auch wenn eine  an-
                   dere  Zahlenbasis  eingestellt  wurde.  Werden 
                   Hexazahlen (Buchstaben) eingegeben,  so werden 
                   sie in Dezimalzahlen umgerechnet. Alles
darue-                    ber Hinausgehende wird mit Fehler quittiert
- .S               die Darstellung erfolgt so,  dass der TOS oben 
                   ist
- BYE              ist unteteilt in eine innere Routine (BYE) die 
                   den  Sprung zum Betriebssystem  enthaelt(F000) 
                   und eine Verkleidung
- QUIT/COLD/ABORT  wurden  weitgehend den Routinen des  "FORTHLE" 
                   nachgebildet.  So kann auf Adresse 2AH +ORIGIN 
                   die   CFA  einer  Anwenderwortes   eingetragen 
                   werden,  welches  beim Eintritt in das  System 
                   durch ABORT aktiviert wird. Eine zweite
Start-                    routine kann auf der Adresse 2CH +ORIGIN  ein-
                   getragen  werden,  die  stets durch  das  Wort 
                   'QUIT' aktiviert wird (z.B.Einstellen HEX)
- FORGET           dieses  Wort weist oft erhebliche 
Einschraen-                    kungen oder Fehler auf.  Es wurde so erstellt, 
                   dass  ein Vergessen ueber  mehrere  Vokabulare 
                   moeglich ist. Die Vokabularzeiger werden dabei 
                   so  korrigiert,  dass  es nicht zu  Abstuerzen 
                   kommt
- BLOCK,BUFFER,R/W,BLK-READ,BLK-WRITE,SET-IO wurden den
Erfordernissen an die Kassettenarbeit mit dem Wort 'SAVE'
angepasst. Alle  Worte wurden nur soweit veraendert,  dass die Uebergabe der 
Parameter  beim  Aufruf und beim Verlassen den  Konventionen  des 
FIG-Standards entsprechen.
Der Wiedereintritt in das FORTH-System ueber Adresse 300H erfolgt 
so, dass die Screen-Puffer erhalten bleiben.


3.   Erweiterung des Wortschatzes
_________________________________

3.1. Worte aus dem F79-Standard und Hilfsworte

Aus  dem  Standard  des  FORTH-79 wurden  zur  Erleichterung  der 
Implementierung folgende Worte uebernommen:
2-   2*   2/   Arithmetik mit 2
PICK           n-tes Element vom Stack auf TOS (2 PICK=OVER)
ROLL           n-tief Stack rotieren (2 ROLL=SWAP, 3 ROLL=ROT)
DEPTH          uebergibt Tiefe der Stacknutzung
EXIT           Vorzeitiges Verlassen eines Wortes vor ;S
ASCII          legt Wert des folgenden Zeichens auf Stack
FREEZE         Einfrieren der Systemdaten auf derzeitigen Stand


Weiterhin wurden zusaetzlich folgende Worte implementiert:

USING     - Aenderung der Zuweisung des Filenamens fuer Screens
QX        - Quick-Index,  es  werden die  1.Zeilen  (Indexzeilen) 
            aller  im Speicher befindlichen Screens  aufgelistet. 
            Bearbeitete  Screens  (Update) werden mit  einem  '*' 
            gekennzeichnet
BSPACES   - loescht  die letzten Ausgaben durch Backspace in  der 
            Laenge entsprechend 'OUT'
SAVE      - ohne  Parameter  legt das FORTH-System von  100H  bis 
            'HERE' auf Kassette ab.  Zur Erleichterung beim Laden 
            wird zuvor Anfangs- und Endadresse auf dem Bildschirm 
            angezeigt  und  auf Bestaetigung mit ENTER  gewartet, 
            andere Tasten brechen die Funktion ab.  Die  hoechste 
            abzuspeichernde Adresse wird auf XXFFH aufgerundet.
          - mit   Namenangabe  wird  zusaetzlich  ein   Kopfblock 
            erzeugt,   der   dem  Aufbau  fuer   Header-Save/Load 
            entspricht.

3.2. Editor

Der  Editor  ist als ein zusaetzliches Vokabular  vereinbart.  Er 
gehoert  also nicht zum Grundwortschatz des Systems.  Er ist  mit 
minimalem Aufwand fuer eine zeilenorientierte Eingabe von Screens 
ausgelegt. Fuer den Nutzer sind nur folgende Worte von Bedeutung:
n P  Eingabe des folgenden Textes in Zeile n
n D  loeschen der Zeile n , alle anderen Zeilen ruecken nach oben
n I  Einfuegen  des  Folgenden Textes in Zeile n ,  alle  anderen 
     Zeilen ruecken nach unten

  L       listen des aktuellen Screens
n CLR     loeschen des Screens n mit Leerzeichen und listen, es
          erfolgt kein laden des Screens
alt neu
RENUMBER  umnummerieren des betreffenden Screen-Puffers im  Spei-
          cher, gegebenenfalls wird der Screen geladen


3.3. Case-Struktur

Die  Case-Struktur  stellt eine Erweiterung der  strukturierenden 
Worte   dar  und  erleichtert  das  Testen  eines    Wertes   auf 
verschiedene Bedingungen.  Die vorliegende Version testet nur auf 
Gleichheit  des  TOS mit den Testwerten,  was fuer  viele  Zwecke 
schon  eine  grosse Erleichterung ist.  Die Anwendung  sieht  wie 
folgt aus: