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: