VolksForth/doc/msdos/LIESMICH.TXT
2017-04-24 00:25:49 +02:00

787 lines
35 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

VolksForth Readme
Version 1.0
10. August 2005 (cas)
VolksForth ist ein 16bit Forthsystem der Forth Gesellschaft e.V. Die
Hauptentwicklung am VolksForth fand von 1985 bis 1989 statt. Das
VolksForth Projekt wurde 2005 wiederbelebt, um ein ueberschaubares
Forth-System fuer Systeme mit begrenzten Systemresourcen zur Verfuegung
zu stellen.
Einige moderne Forth Systeme sind von VolksForth beeinflusst worden oder
von VolksForth abgeleitet worden (GNU-Forth, bigForth).
Die aktuelle VolksForth Version ist 3.81. Die Arbeit an der Version 3.90
hat begonnen.
Derzeit stehen VolksForth Versionen fuer folgende
Rechner/Betriebssysteme zur Verfuegung:
VolksForth MS-DOS (Intel x86 Architektur i8086-ia64)
VolksForth 6502 (Commodore 64, Commodore Plus 4)
VolksForth Z80 (CP/M, Schneider CPC)
VolksForth 68000 (Atari ST)
Hinweis zum Copyright
Die VolksForth Quelldateien unterliegen der
BSD Lizenz - http://www.opensource.org/licenses/bsd-license.php
Das Handbuch unterliegt dem Copyright (c) 1985 - 2005 Forth Gesellschaft
e.V. ( Klaus Schleisiek, Ulrich Hoffmann, Bernd Pennemann, Georg Rehfeld
und Dietrich Weineck).
Handbuecher, Programmdateien und Quellcode zum VolksFORTH sowie
Informationen zur Forth Gesellschaft finden Sie auf dem Webserver der
Forth Gesellschaft
http://www.forth-ev.de/
Informationen und Hilfestellung zur Programmiersprache Forth finden Sie
im Internet, ausgehend von der Webseite der Forthgesellschaft, oder im
Usenet im Forum de.comp.lang.forth (ueber Google Groups:
http://groups.google.de/group/de.comp.lang.forth )
Hinweise zum VolksForth MS-DOS
* Voraussetzungen
PC kompatibler MS-DOS/PC-DOS Rechner mit min. 64KB Speicher
MS-DOS/PC-DOS ab 2.11
* Installation
Kopieren Sie die Dateien im Verzeichnis "Files" in ein beliebiges Verzeichnis auf
dem PC.
In der Distribution finden sich folgende Files:
KERNEL COM Der volksFORTH Kern, der von KERNEL.SCR erzeugt wurde
MINIMAL COM Minimalsystem fuer die Anpassung an "Fastkompatible"
VOLKS4TH COM Normale Softwareentwicklungsumgebung, mit VOLKS4TH.SYS erzeugt
ANSI VID Videodisplaytreiber auf der Basis des ANSI.SYS MS-DOS Treibers
BIOS VID Videodisplaytreiber durch BIOS-call $10
MULTI VID Multitasking Videodisplaytreiber durch BIOS-call $10
MINIMAL SYS Loadfile, um aus KERNEL.COM MINIMAL.COM zu erzeugen
VOLKS4TH SYS Loadfile, um aus KERNEL.COM VOLKS4TH.COM zu erzeugen
GRAPHIC PRN Druckerinterface fuer den IBM-Graphic Printer
M130I PRN Druckerinterface fuer den M130i
NEC8023 PRN Druckerinterface fuer den NEC 8023a
DISKS CFG Konfigurationsfile fuer die Speicheraufteilung
SYSTEM CFG Konfigurationsfile fuer die Floppylaufwerke
ASM SCR 8088/86 Postfix-Assembler
BLOCKING SCR Hilfsprogramm, um physikalische Bloecke in Files zu uebertragen
DOUBLE SCR Definitionen fuer doppeltgenaue (32 bit) Zahlen
EDITOR SCR Full Screen Editor
EXTEND SCR Allgemeine Systemerweiterungen
F83ASM SCR Der Assembler aus F83
INSTALL SCR Definition der Befehlstasten des Editors
KERNEL SCR Sourcecode des volksFORTH Kerns
PRIMED SCR Primitivsteditor zur Anpassung an "Fastkompatible" Rechner
SEE SCR Der automatische Decompiler
SERIAL SCR Die serielle Schnittstelle
TASKER SCR Der Multitasker
TIMER SCR Der Timer im IBM-PC
TOOLS SCR Der manuelle Decompiler, der Tracer und DUMP-Utility
Zuerst sollte versucht werden, das Programm VOLKS4TH.COM zu starten. Meldet
sich das System auf dem Bildschirm mit einer Statuszeile in der 25ten Zeile,
so ist der Rechner kompatibel genug fuer den Multitasking Videotreiber
MULTI.VID. Sollte jedoch keine Meldung auf dem Bildschirm erscheinen, so
handelt es sich leider nur um einen "Fastkompatiblen" Rechner und es ist
etwas Arbeit erforderlich, das volksFORTH anzupassen.
Der naechste Versuch, MINIMAL.COM zu starten, sollte eigentlich erfolgreich
sein. Wenn das nicht der Fall ist, dann handelt es sich noch nicht einmal um
ein ordentliches MS-DOS Betriebssystem, da von dieser FORTH-Version
keinerlei Routinen im ROM des Rechners direkt - unter Umgehung des MS-DOS -
benutzt werden.
MINIMAL listet nach dem Starten eine kurze Beschreibung des Primitivst-
editors, der nun dazu benutzt werden kann, das Loadfile VOLKS4TH.SYS so zu
veraendern, da<64> damit ein System mit weniger anspruchsvollem Videodisplay-
treiber erzeugt werden kann.
Voraussetzung dazu ist, dass durch das Systemfile CONFIG.SYS (siehe MS-DOS
Handbuch) der Devicetreiber ANSI.SYS beim Booten des Systems installiert
wurde. Existiert auch dieser nicht, so ist die Benutzung des Full-Screen
Editors in der ausgelieferten Form nicht moeglich. Ist ANSI.SYS ins System
integriert, so kann mit der Anpassung des Forthsystems fortgefahren werden.
Nach starten von MINIMAL.COM ist folgendes einzugeben:
USE VOLKS4TH.SYS 1 LIST
Danach kann durch das NEW Kommando (siehe Beschreibung des Primitivst-
editors) im File VOLKS4TH.SYS die Zeile, die
"include multi.vid" enthaelt, durch "include ansi.vid" ersetzt werden.
Dann muss auch noch im File EDITOR.SCR auf Screen 1 eine entsprechende
Aenderung vorgenommen werden, indem die Ladeanweisung fuer das Multitasking
Display "auskommentiert" wird und entsprechend die Ladeanweisung fuer das
ANSI-Display aktiviert wird dadurch, da<64> in der ersten Spalte der "\"
(siehe: Interpreter-Worte) umgesetzt wird.
Danach wird mit BYE ins Betriebssystem zurueckgekehrt. Die Befehlszeile
KERNEL INCLUDE VOLKS4TH.SYS
erstellt dann ein neues File VOLKS4TH.COM, das nun die ANSI.SYS Steuer-
sequenzen fuer die Cursorsteuerung benutzt. Dies dauert einige Zeit, da
insgesamt ca. 15kByte Objectcode compiliert werden muessen.
Nach dem Ende des Ladevorgangs meldet sich das System mit einem Piep und es
sollte auch in der 25. Zeile eine inverse Statuszeile angezeigt werden.
Nun kann noch mit Eingabe von INCLUDE DISKS.CFG die aktuelle Speicher-
kapazitaet der Diskettenlaufwerke festgelegt werden. Dies ist jedoch nur dann
notwendig, wenn im DIRECT-Modus (siehe: Fileinterface) auf die Disketten
zugegriffen werden soll. Danach evtl. mit SAVESYSTEM VOLKS4TH.COM die
Aenderungen permanent auf die Disk zurueckschreiben.
Damit ist die Anpassung an den Rechner beendet.
Der Videodisplaytreiber BIOS.VID benutzt - wie auch MULTI.VID - den BIOS-
call $10. Da jedoch keine Ruecksicht auf Multitaskingbetrieb genommen wird
(Nur eine Task kann den Bildschirm steuern), ist die Bildschirmausgabe
schneller.
Als letztes bleibt dann noch die Anpassung an den Drucker vorzunehmen. Dafuer
gibt es im System bereits die drei Files
GRAPHIC.PRN M130I.PRN NEC8023.PRN.
Sollten Sie einen Drucker haben, der noch andere Steuersequenzen benoetigt,
so muessen Sie sich fuer Ihren Drucker auch ein entsprechendes .PRN File
schaffen. Als Vorbild kann dabei jedes der drei vordefinierten Files dienen;
es sind lediglich die jeweils aktuellen Werte fuer die Steuersequenzen an
passender Stelle einzutragen - dies erfordert jedoch schon einige
Vertrautheit mit Forth. Sollten Sie dazu nicht in der Lage sein, so hilft
Ihnen vielleicht ein alter Forth-Hase in ihrer Naehe, mit dem Sie viel-
leicht die Forth Gesellschaft eV ( http://www.forth-ev.de) in
Verbindung bringen kann. Bitte denken Sie auch daran, neue Druckertreiber an
die Forth Gesellschaft einzusenden, damit diese in das volksFORTH-Paket
aufgenommen werden koennen.
Der passende Druckertreiber muss dann in dem Loadfile VOLKS4TH.SYS
so eingetragen werden, wie das beim Videodisplaytreiber beschrieben wurde.
* Emulator
* Windows 9x, ME
VolksForth 3.81 funktioniert sollte in der reinen DOS Umgebung dieser Betriesb-
systeme ohne Probleme funktionieren
* Windows NT, 2000, XP, Vista
VolksForth MS-DOS sollte auch in der Dos Umgebung moderner Windows Systeme laufen.
Wenn Sie Probleme mit dem VolksForth unter Windows NT, 2000, XP oder Vista bemerken,
empfehlen wir den Einsatz eines DOS-Emulators wie Dos-Box
(http://dosbox.sourceforge.net/)
* OS/2 / eComStation
VolksForth 3.81 funktioniert ohne Probleme in der Dos-Umgebung von OS/2 und eComStation
* Unix / Linux
Unter Linux / Unix Systemen auf x86 Hardware Basis kann VolksForth unter der DosEmu
Umgebung ( http://www.dosemu.org ) ausgefuehrt werden. Auch der kommerzielle PC-Emulator
VMWare eignet sich gut um eine MS-DOS/PC-DOS Umgebung zu erstellen. Unter anderen System-
Platformen (MacOS X PowerPC, Solaris, HP/UX) sind die PC-Emulatoren Qemu
(http://fabrice.bellard.free.fr/qemu/) und DosBox (http://dosbox.sourceforge.net/) zu
empfehlen.
Als freie Alternative zu MS-DOS / PC-DOS empfielt sich FreeDOS ( http://www.freedos.org/ ).
Die Forth Live-Linux CD-ROM (erhaeltlich im Downloadbereich der Forth
Gesellschaft Webseite) enthaelt die aktuellen Versionen des VolksForth direkt
ausfuerbar auf der Linux CD-ROM, inkl. der VolksForth Handbuecher.
Viel Spass mit VolksForth
wuenscht das VolksForth Team
---------------
Weitere Informationen:
volksFORTH 3.81 fuer den IBM-PC und Kompatible wurde aus dem volksFORTH 3.80
fuer CP/M Rechner entwickelt.
Es wurden wenige Aenderungen am Kern des Systems vorgenommen, diese beziehen
sich hauptsaechlich auf Stellen, die in der Version 3.80 unelegant waren und
fuer die inzwischen bessere Loesungen in der Forth-Community erarbeitet worden
waren.
Grundlegend Ueberarbeitet wurde das File-Interface. Auf der Benutzerebene
stehen die gleichen Worte, wie im volksFORTH 3.80 fuer den ATARI und CP/M zur
Verfuegung, die darunterliegende Implementation wurde jedoch grundlegend
geaendert, so dass jetzt endlich in Forth auch sequentielle Files, die nicht
die starre BLOCKstruktur haben, manipuliert werden koennen. Damit ist es
endlich moeglich, auch volksFORTH fuer kleine Hilfsprogramme zu verwenden, die
mit anderen Programmen erstellte Files "bearbeiten" und durch den Befehl
SAVESYSTEM als "standalone"-Programm abgespeichert wurden.
Besonders weitreichende Moeglichkeiten erschliessen sich dadurch, dass beim
Aufruf von volksFORTH auf der Betriebssystemebene noch eine ganze
Kommandozeile mit Uebergeben werden kann, die dann unmittelbar nach dem
Booten von Forth ausgefuehrt wird. Durch die Systemvariable RETURN_CODE kann
nach Verlassen des Forthprogramms ein Wert an MS-DOS zurueckgegeben werden,
der mit dem Batch-Befehl ERRORLEVEL abgefragt werden kann.
Darueberhinaus ist es auch moeglich, mit dem Befehl MSDOS aus dem Forth heraus
eine weitere COMMAND.COM shell aufzurufen und spaeter mit EXIT wieder ins
Forth zurueckzukehren, wobei der Bildschirm, der zum Zeitpunkt des Aufrufs
bestand, wiederhergestellt wird. Selbstverstaendlich kann neben MSDOS selber
auch jedes andere beliebige Anwendungsprogramm aufgerufen werden - auch eine
weitere Inkarnation des Forth Systems - so da<64> sich mit diesen Moeglichkeiten
die Begrenzungen, die in dem beschraenkten Adressraum von 64k liegen,
ueberwinden lassen. Auch komplizierte Overlaystrukturen sind nicht mehr
notwendig, es werden einfach aus einem zentralen "Verwaltungsprogramm"
heraus spezielle Forth-Anwendungsprogramme aufgerufen.
=============================================================================
Das Handbuch unterliegt dem Copyright
(c) 1985/1986 Ulrich Hoffmann, Georg Rehfeld und Dietrich Weineck.
(c) 1988/1989 Klaus Schleisiek, Joerg Staben, Klaus Kohl
Informationen zu <20>nderungen genueber frueheren VolksForth Versionen und
Aenderungen gegenueber dem Handbuch:
ONLY
Dieses Wort wurde bisher nur durch einen undurchsichtigen "patch" im
System realisiert. In dieser Version 3.81 ist ONLY nun eine ganz
gewoehnliche :-Definition. Dazu wurde das Vokabular ROOT im Kern neu
definiert, das alle die Definitionen enthaelt, die frueher im Vokabular ONLY
enthalten waren. Jetzt koennen einfach durch ROOT DEFINITIONS in dieses
Vokabular - das immer als letztes zu durchsuchendes Vokabular in die
Suchreihenfolge eingefuegt ist - weitere Worte hineindefiniert werden.
INTERPRET
Auch INTERPRET benoetigte bisher zur Implementation einen sehr mysterioesen
Systempatch. Dank einer Idee von Mike Perry ist auch diese letzte Ecke nun
abgeschliffen: Das deferred Wort PARSER enthaelt entweder den Code fuer den
Interpreter oder den Compiler (durch [ und ] umzuschalten) und Interpret
ist nun eine BEGIN ... REPEAT Schleife, in der das naechste Wort aus dem
Quelltext geholt wird. Ist der Quelltext erschoepft, so wird die Schleife
verlassen, andernfalls wird PARSER aufgerufen und dadurch das Wort ent-
weder interpretiert oder compiliert. Nun ist es auch sehr viel einfacher
als vorher, selber eigene Worte zu definieren, die in PARSER eingehuengt
werden. Dies ist immer dann sinnvoll, wenn der Interpreter in einem
Anwendungsprogramm anders als der uebliche Forth-Interpreter arbeiten soll.
>INTERPRET
Konnte gluecklicherweise gestrichen werden.
QUIT QUERY
Bisher enthielt QUERY ein BLK OFF. Das war an dieser Stelle aber am
falschen Platz und gehoert ins QUIT, wo es aber vorher nicht war. Das war
bisher kaum aufgefallen, da QUERY eigentlich nur in der QUIT-Loop benutzt
worden war.
CAPITALIZE
War von den Parametern her so spezialisiert auf die Benutzung in NAME
zugeschnitten, dass es darueber hinaus eigentlich sinnlos war. CAPITALIZE
ist nun durch UPPER ersetzt worden. Es kann jetzt folgendermassen definiert
werden:
: CAPITALIZE ( adr -- adr ) DUP COUNT UPPER ;
NUMBER?
Ist ein ganz uebles Beispiel dafuer, dass in verschiedenen Faellen
unterschiedliche Anzahlen von Parametern als Ergebnis auf dem Stack
liegen. Es ist jedesmal eine Pein, wenn das Wort benutzt werden soll.
Wir haben daraus gelernt, dass das ein grosser Fehler war, aber aus
portabilitaetsgruenden alles so gelassen.
DOES>
Auf Grund des Maschinencodes des 8086 compiliert DOES> keine absolute
Adresse zur Routine DODO, sondern einen relativen Sprung. Dies ist zum
Beispiel beim Decompiler zu beachten.
WARNING
Die Logik wurde "herumgedreht" und nun schaltet WARNING OFF die Meldung
"exists" aus und WARNING ON wieder ein.
(COLD
Bei der Ausfuehrung wird der gecountete String, der an der absoluten
Adresse 80h steht, in den Texteingabepuffer uebertragen. Dieser Text, der
von MS-DOS bei Aufruf des .COM-Files aus der Eingabezeile dorthin
uebertragen wurde, wird dann als allererstes von Forth interpretiert.
Dadurch ist es sehr einfach moeglich, Forth Programme in Batch-Files zu
benutzen und mit Parametern zu versorgen. Zu beachten ist, dass immer dann,
wenn ein COLD ausgefuehrt wird, gleichfalls der gecountete String an dieser
Stelle interpretiert wird. Da MS-DOS die gleiche Stelle dazu benutzt,
Namen von Files waehrend Directoryoperationen abzulegen, steht dort oft ein
fuer Forth "unsinniger" Textstring.
TRACE'
Im TOOLS-Vokabular wurde in TRACE umbenannt.
VIEW
Zeigt nun nur noch den Screen auf dem Bildschirm, auf dem die ge"viewte"
Definition steht. Soll gleichzeitig der Editor "angeworfen" werden, so ist
das Wort FIX zu benutzen.
Zusaetzliche Worte im Kern
0=EXIT
Ist komplementaer zu ?EXIT und wurde in den Kern aufgenommen.
FIX <name>
Mit FIX <name> wird das File, in dem <name> definiert wurde, zum aktuellen
File gemacht. Dann wird der Full-Screen-Editor aktiviert, der Screen ange-
zeigt, auf dem <name> definiert wurde und der Cursor stellt sich hinter
die auf dem Screen hinter <name>. Durch diese Funktion ist es im
allgemeinen ueberfluessig, waehrend der Programmentwicklung noch Quelltexte
auszudrucken.
FLIP ( u1 -- u2 )
Das Byteswap des obersten Stackelements. u1 ist eine 16-bit Zahl mit den
Bits B15 .. B8 B7 .. B0, wobei B15 .. B8 als das "high-Byte", B8 .. B0 als
das "low-Byte" bezeichnet wird. Durch FLIP wird das High- mit dem Low-Byte
ausgetauscht, so dass u2 als Ergebnis die Bits in der Reihenfolge
B7 .. B0 B15 .. B8 angeordnet hat.
PROMPT
Ein deferred Wort, das fuer die Ausgabe des "ok" verantwortlich ist. Es
wurde auch das Wort (QUIT neu implementiert. Nun ist es moeglich, den Forth
Interpreter auch wie ein "klassisches" Betriebssystem arbeiten zu lassen,
in dem eine Meldung nicht NACH jeder Aktion HINTER der Eingabe-zeile
ausgegeben wird, sondern VOR einer Aktion am ANFANG der Eingabezeile. Ein
entsprechendes Beispiel befindet sich im Quelltext hinter der Definition
von QUIT.
PARSER
siehe INTERPRET.
Die INTEL-Prozessoren haben eine verkomplizierte Art, den Adressraum jenseits
von 64kBytes zu adressieren - naemlich mit sogenannten "Segmentregistern".
Am besten kommt man damit noch zurecht, wenn man diese Prozessoren als 16-
bit Prozessoren betrachtet, die in der Lage sind, mehrere Programme, die
jeweils hoechstens 64k Programmspeicherbereich haben, gleichzeitig im
Speicher zu halten. Es ist deshalb auch unvernuenftig, auf diesen Prozessoren
ein Forthsystem mit 32-bit Adressen zu installieren - es handelt sich eben
nicht um 32-bit Prozessoren.
Statt dessen ist in volksFORTH die Moeglichkeit gegeben, aus dem Forth heraus
mit dem Wort CALL (im DOS-Vokabular) ein weiteres .COM oder .EXE-Programm
aufzurufen. Dies koennen natuerlich ihrerseits Forth-Programme sein, denen
dann auch noch eine ganze Eingabezeile als Parameter mit "auf den Weg"
gegeben werden koennen. Ueber die Systemvariable RETURN_CODE ist es auch noch
moeglich, einen Errorcode bei Beendigung des Forth Programms an MS-DOS zu
uebergeben, der dann in Batch-Files getestet werden kann. Damit waere es zum
Beispiel moeglich, den Full-Screen Editor aus dem System auszulagern und mit
den Befehlen FIX, EDIT, ED usw. jeweils ein .COM-Programm aufzurufen, das
den Forth-Editor als "stand-alone" Programm enthaelt und damit keinen
Adressraum im Entwicklungssystem mehr verbraucht.
Die Intel-Prozessoren setzen die Speicheradressen aus zwei Teilen zusammen,
dem SEGMENT und dem OFFSET. Dies ist jedoch nicht mit "echten" 32-bit
Adressen zu verwechseln. Diese werden auf einem 16-bit Stack in der
Reihenfolge "low-word" unter dem "high-word" abgelegt. Uebertraegt man diese
Philosophie auf die "seg:addr" Adressen des 8086, dann blockiert dauernd die
Segmentadresse den Stack. Deshalb wird bei den Operatoren, die im
erweiterten Adressraum des 8086 operieren, die Segmentadresse UNTER der
Offsetadresse auf den Stack gelegt.
Der Stackkommentar dafuer lautet "seg:addr"
Operatoren, die als Adressargument eine "erweiterte" Adresse benoetigen, haben
ein "l" im Namen vorangestellt.
B/SEG ( -- n )
Eine Konstante, die angibt, wieviele Bytes zwischen zwei Segmenten
liegen. Dies sind beim 8086 16 Bytes, beim 80286 im 286-Modus
jedoch 64 Bytes. volksFORTH auf dem 80286 setzt zur Zeit voraus,
dass der 8086-Emulationsmodus eingeschaltet ist.
DS@ ( -- seg )
Legt die Segmentadresse des Segments auf den Stack, in dem sich das
maximal 64kByte grosse Forthsystem gerade befindet. Das Daten-,
Extra-, Stack- und Codesegment werden durch Forth alle auf den
gleichen Wert gesetzt.
L@ ( seg:addr -- n )
Entspricht dem @, jedoch im erweiterten Adressraum.
L! ( n seg:addr -- )
Entspricht dem !, jedoch im erweiterten Adressraum.
LALLOCATE ( #pages -- seg ff / rest err# ) EXTEND
Es koennen hiermit im erweiterten Adre<72>raum die Anzahl #pages
Speicherplatz angefordert werden. Die Groesse einer "Page" in Bytes
entspricht der Konstanten B/SEG. Wenn die Speicheranforderung
erfaellt werden kann, dann wird unter einer 0 als Flag fuer den
Erfolg der Operation die Segmentadresse des ersten Segments
innerhalb eines zusammenhaengenden Speicherbereichs von #page Pages
auf den Stack gelegt. Ansonsten liegt unter einem Fehlercode die
maximale Anzahl von Pages, die noch als zusammenhaengender Bereich
verfuegbar sind. Diese Funktion ist in dem Wort SAVEVIDEO benutzt,
um den Bildschirminhalt in den Speicher zu kopieren. Die
komplementaeren Funktionen sind LFREE und RESTOREVIDEO.
LC@ ( seg:addr -- 8b )
Entspricht dem C@, jedoch im erweiterten Adressraum.
LC! ( 8b seg:addr -- )
Entspricht dem C!, jedoch im erweiterten Adressraum.
LDUMP ( seg:addr quan -- ) TOOLS
Entspricht dem DUMP, jedoch im erweiterten Adressraum.
LFREE ( seg -- err# )
Der Speicherbereich, der an der Segmentadresse SEG beginnt, wird
wieder an das Betriebssystem zurueckgegeben. Diese Operation ist nur
definiert, wenn zu einem vorherigen Zeitpunkt eine LALLOCATE-
Operation durchgefuehrt worden war, die als Ergebnis die Segment-
adresse SEG gehabt hatte. Als Ergebnis liegt ein Fehlercode auf dem
Stack, der im Erfolgsfall Null ist.
LMOVE ( from.seg:addr to.seg:addr quan -- )
Entspricht dem MOVE, jedoch im erweiterten Adressraum. Es koennen
hiermit maximal 64kBytes auf einmal bewegt werden.
LTYPE ( seg:addr len -- )
Entspricht dem TYPE, jedoch im erweiterten Adressraum. Es ist zu
beachten, dass TYPE in den Videodisplaytreibern BIOS.VID und
MULTI.VID so implementiert ist, dass bei Erreichen des Zeilenendes
nicht automatisch ein CR ausgefuehrt wird. Statt dessen werden alle
Zeichen, die "jenseits" des rechten Rands liegen, nicht ausgegeben.
PC@ ( port.addr -- 8b )
Holt ein Byte von port.addr aus einem Peripheriebaustein des 8086-
Systems auf den Stack.
PC! ( 8b port.addr -- )
Speichert ein Byte in einen Peripheriebaustein des 8086-Systems bei
port.addr.
Drei wichtige Worte: USE, LIST, LOAD und INCLUDE
volksFORTH bearbeitet seine Quelltexte in sogenannten Screen Files, die
ueblicherweise die Endung .SCR haben. Das sind Files, die in 1 kB grosse
Screens aufgeteilt sind, jeweils in 16 Zeilen zu je 64 Zeichen strukturiert.
Soll ein File, das schon existiert, bearbeitet werden, so wird es durch
USE <filename> zum sogenannten "aktuellen" File gemacht. Zum Beispiel macht
USE KERNEL.SCR das File KERNEL.SCR zum aktuellen File, auf das sich alle
weiteren Fileoperationen beziehen, bis ein anderes File zum aktuellen File
gemacht wird.
Mit <nn> LIST wird Screen nn auf dem Bildschirm angezeigt - also zum
Beispiel mit 1 LIST der Screen 1 des Files KERNEL.SCR.
Mit <nn> LOAD wird ein Screen nn geladen, d.h. durch den Forth-Compiler
in das Woerterbuch compiliert.
Ueblicherweise enthaelt Screen 0 eines jeden Files eine kurze Erklaerung ueber
den Inhalt des Files - dies ist auch deshalb sinnvoll, da der Screen 0 eines
Files nicht geladen werden kann. Screen 1 enthaelt ueblicherweise den
sogenannten "loadscreen". Dieser steuert den Ladevorgang des gesamten Files.
In Zeile 0 eines jeden Screens ist ein Kommentar ueber den Inhalt des Screens
und das Datum der letzten Aenderung enthalten.
Mit INCLUDE <filename> kann man unkompliziert ein ganzes Screenfile laden.
Diese Operation ist der Sequenz "USE <filename> 1 LOAD" Aequivalent.
#DRIVES ( -- n )
Eine Konstante, die die moegliche Anzahl von logischen Laufwerken im
System definiert. Diese Anzahl ist nur im DIRECT-Modus von
Bedeutung. So, wie der Kern compiliert ist, sind maximal 6
Laufwerke zugelassen.
(BLOCK ( blk file -- addr )
Liest den Block BLK aus dem File, dessen FCB bei der Adresse FILE
beginnt und legt diesen in einen Puffer bei der Adresse ADDR ab.
(BUFFER ( blk file -- addr )
Reserviert einen 1kByte grossen Puffer im Adressbereich des Forth-
Systems fuer den Block BLK. FILE ist die Adresse des FCB's, in dem
sich der Block befindet. Ist FILE = 0, dann handelt es sich um
einen DIRECTen physikalischen Zugriff. ADDR ist die Anfangsadresse
des Puffers.
(R/W ( addr blk fcb r/w -- *f )
Die Standardroutine fuer das deferred Wort R/W.
(DISKERROR ( #err -- ) DOS
Die Standard-System Fehlerbehandlungsroutine fuer Fehler beim
Diskzugriff. Hiermit ist das deferred Wort ?DISKERROR
initialisiert.
(FSEARCH ( string -- asciz *f ) DOS
Das File, dessen Name als String bei STRING steht, wird in der
Directory gesucht. Enthaelt der Filename keine Suchpfadinformation,
dann wird im aktuellen Directory gesucht. Bei Erfolg liegt eine
Null auf dem Stack, sonst eine Fehlernummer.
*BLOCK ( blk -- d ) DOS
Die doppeltgenaue Zahl D ist die Byteadresse des ersten Bytes im
1024-Byte gro<72>en Block BLK.
.FILE ( fcb -- ) DOS
Druckt den Forth-Filenamen des Files, dessen FCB-Adresse auf dem
Stack liegt.
/BLOCK ( d -- rest blk ) DOS
Die doppeltgenaue Zahl D wird umgerechnet in die REST-Anzahl von
Bytes innerhalb des 1024-Byte gro<72>en Blocks BLK.
/DRIVE ( blk1 -- blk2 drive )
Fuer den DIRECT-Modus beim Diskzugriff. Aus der absoluten
Blocknummer BLK1 wird (siehe: CAPACITIES) die relative Blocknummer
BLK2 auf Laufwerk DRIVE berechnet. Dabei ist Laufwerk A: Drive 0
etc.
>ASCIZ ( string addr -- asciz )
Mit diesem Operator wird der gecountete String an der Adresse
STRING umgewandelt in einen nullterminierten String, der an der
Adresse ADDR abgelegt wird. ASCIZ ist die Adresse, an der der neue
String liegt.
>DRIVE ( blk1 +n -- blk2 )
Dient zum "umrechnen" von Blocknummern im DIRECT-Modus. BLK2 ist
die absolute Blocknummer, die dem relativen Block BLK1 auf Drive +N
entspricht.
?DISKERROR ( -- )
Ein deferred Wort, dass die Fehlerbehandlungsroutine fuer Disk- und
Filezugriffe enthaelt. Standardmaessig ist die Routine (DISKERROR
zugewiesen.
A: B: C: D: E: F: G: H:
Wie bei MS-DOS, macht das dadurch bezeichnete logische Laufwerk zum
aktuellen Laufwerk.
ASCIZ ( -- asciz )
Holt das naechste Wort im Quelltext in den Speicher und legt es als
nullterminierten String bei der Adresse ASCIZ ab.
ASSIGN ( -- )
Benutzt in der Form:
ASSIGN <filename>
Weist dem aktuellen File den physikalischen Filenamen <filename>
zu.
ATTRIBUT ( -- addr ) DOS
Eine Variable, die die Fileattribute enthaelt, die bei der Suche
nach Files in einem Directory beruecksichtigt werden. Standardmaessig
mit 7 initialisiert, so da<64> in die Suche read-only, hidden und
systemfiles eingeschlossen sind.
CAPACITIES ( -- addr )
Die Adresse eines Vektors, der die Kapazitaeten der angeschlossenen
logischen Laufwerken in 1kByte-Bloecken enthaelt. Dafuer sind maximal
6 Eintraege (siehe: #DRIVES) vorgesehen. Mit dem Hilfsprogramm
DISKS.CFG koennen die Kapazitaeten fuer die Diskettenlaufwerke
eingestellt werden. Die Kapazitaet der angeschlossenen Diskdrives
sollten eigentlich von der Bootroutine aus dem System selber
erschlossen werden.
CLOSE ( -- )
Schliesst das aktuelle File.
COUNTED ( asciz -- addr len )
Wird benutzt, um die Laenge eines mit einer Null terminierten
Strings zu bestimmen. ASCIZ ist die Anfangsadresse dieses Strings
(MS-DOS verwaltet Strings so), ADDR und LEN sind die
Stringparameter, die zB. von TYPE verarbeitet werden wuerde.
DIRECT ( -- )
Die Filevariablen werden auf Null gesetzt und damit beziehen sich
die Diskzugriffe durch BLOCK auf physikalische Blocks.
ERROR# ( -- addr )
Eine Variable, die die Fehlernummer des letzten Fehlers beim
Zugriff auf ein File enthaelt.
FBLOCK! ( addr blk fcb -- ) DOS
1024 Bytes, die ab der Adresse ADDR innerhalb des
Forthadressbereichs stehen, werden auf den Block BLK innerhalb des
Files geschrieben, das durch FCB characterisiert ist.
BLOCK@ ( addr blk fcb -- ) DOS
1024 Bytes, die im File FCB in Block BLK stehen, werden ab der
Adresse ADR im Forthadressbereich abgelegt.
CAPACITY ( -- n )
N ist die Kapazitaet in 1024-Byte Bloecken des aktuellen Files bzw.
des aktuellen Laufwerks bei DIRECT-Zugriff.
DRIVE ( n -- )
Macht N zum aktuellen Laufwerk.
DRV ( -- n )
N ist die Nummer des aktuellen Laufwerks.
FCLOSE ( fcb -- ) DOS
Das File, dessen FCB-Adresse auf dem Stack liegt, wird geschlossen.
FGETC ( fcb -- 8b / eof ) DOS
Aus dem File, dessen FCB-Adresse auf dem Stack liegt, wird das
naechste Byte gelesen und der Schreib/Lesezeiger um eine Position
weitergerueckt. Wenn das letzte Byte bereits gelesen war, wird die
EndOfFile-Markierung -1 zurueckgegeben.
FILE ( -- )
siehe ATARI Fileinterface.
FILE?
Zeigt den Forth-Filenamen des aktuellen Files an.
FILE-LINK ( -- addr )
Eine Variable zur Verwaltung der File-Control-Bloecke (FCB). Der
Inhalt von FILE-LINK zeigt auf den Anfang des Parameterfeldes des
zuletzt definierten FCB's - und an dieser Stelle steht dann die
Adresse des davor definierten FCB's usw., so da<64> dadurch alle FCB's
aufgefunden werden koennen.
FILE! ( 8b dfaddr fcb -- ) DOS
Das Byte 8B wird an die Position DFADDR des Files FCB geschrieben.
FILE@ ( dfaddr fcb -- 8b / eof ) DOS
Das Byte an der 32-bit Position DFADDR im File, dass durch FCB
charakterisiert ist, wird gelesen. Liegt DFADDR jenseits des
letzten Bytes im File, so wird -1 zurueckgegeben. Nach erfolgreichem
Lesen steht der Lese/Schreibzeiger hinter dem gelesenen Byte.
FILENAME ( -- addr ) DOS
Die Anfangsadresse eines 62-Byte gro<72>en Speicherbereichs, der zum
ablegen von Filenamen waehrend DOS-Fileoperationen dient.
FNAMELEN ( -- n ) DOS
Eine Konstante, die die maximale Laenge von logischen Filenamen,
bestehend aus Drive, Path und Name, die in den FCB's abgespeichert
werden koennen, bestimmt. Wird dieser Wert veraendert, so kann die
neue Laenge erst in den FCB's verwendet werden, die nach der
Aenderung angelegt werden.
FPUTC ( 8b fcb -- ) DOS
Das Byte 8B wird an der aktuellen Position des Schreib/Lesezeigers
in das File FCB geschrieben. Dabei wird der Zeiger um eine Position
weitergerueckt.
FRESET ( fcb -- ) DOS
FCB ist die Adresse eines FileControlBlocks. Das dadurch
charakterisierte File wird "zurueckgesetzt", d.h. das File wird
geoeffnet (wenn es noch nicht geoeffnet war) und der Schreib/Lese-
zeiger wird auf den Anfang des Files gesetzt.
FROM Siehe ATARI Fileinterface.
FSEARCH ( string -- asciz *f ) DOS
Ein deferred Wort. Es enthaelt die Suchstrategie (siehe: (FSEARCH),
die beim oeffnen eines Files verwendet wird, um das File auf der
Disk zu lokalisieren.
FSEEK ( dfaddr fcb -- ) DOS
Der Schreib/Lesezeiger des Files, das durch FCB charakterisiert
ist, wird auf die Position DFADDR gesetzt. Dabei ist DFADDR eine
doppeltgenaue Zahl, so dass maximal Files von 4-GByte Groesse
verwaltet werden koennen.
INCLUDE siehe ATARI Fileinterface.
LFGETS ( seg:addr quan fcb -- #read ) DOS
siehe: ~READ. Lediglich wird statt der Handlenummer die Adresse des
FCB's des gewuenschten Files angegeben.
LFPUTS ( seg:addr quan fcb -- )
Die Anzahl QUAN von Bytes ab der erweiterten Adresse SEG:QUAN
werden ab der aktuellen Position des Schreib/Lesezeigers in das
File geschrieben, das durch FCB charakterisiert ist. Danach steht
der Schreib/Lesezeiger hinter dem letzten geschriebenen Byte.
LFSAVE ( seg:addr quan string -- )
Erzeugt ein File mit dem Namen, der als gecounteter String an der
Adresse STRING abgelegt ist und schreibt die Anzahl QUAN Bytes ab
der erweiterten Adresse SEG:ADDR in dieses neue File.
LOADFROM Siehe ATARI Fileinterface.
OPEN ( -- )
Oeffnet das aktuelle File.
PUSHFILE ( -- ) C
Wird in :-definitionen benutzt, um den aktuellen Zustand des
Filevariablen ISFILE und FROMFILE nach dem Ende der :-Definition
wiederherzustellen. Siehe: PUSH
SAVEFILE ( addr len -- )
Wird in der Form:
SAVEFILE <name>
benutzt und schreibt die Anzahl von LEN Bytes ab der Adresse ADDR
in das neu erzeugte File mit dem Namen <name>.
SAVESYSTEM <name>
Schreibt eine bootbare Form des jetzt laufenden Forthsystems unter
dem Namen <name> auf die Disk. Dabei muss <name> die Endung .COM
haben, wenn dieses System spaeter wieder unter MS-DOS gestartet
werden soll.
USE ( -- )
siehe ATARI Fileinterface.
VIEW ( -- )
Wird in der Form:
VIEW <name>
benutzt. Wenn <name> im Woerterbuch gefunden wird, so wird das File
geoeffnet, in dem der Quelltext von <name> steht und der Block wird
gelistet, auf dem <name> definiert ist. Siehe: LIST
~CLOSE ( handle -- ) DOS
Der MS-DOS Systemaufruf, um das File, das durch HANDLE
characterisiert ist, zu schliessen.
~CREAT ( asciz attribut -- handle ff / err# ) DOS
Der MS-DOS Systemaufruf, um ein neues File zu erzeugen.
~DIR ( addr drive -- err# ) DOS
Der MS-DOS Systemaufruf, mit dem das aktuelle Directory an der
Adresse ADDR als nullterminierter String abgelegt wird.
~DISK? ( -- n ) DOS
Der MS-DOS Systemaufruf, mit dem das aktuelle Laufwerk abgefragt
wird.
~FIRST ( asciz attr -- err# ) DOS
Der MS-DOS Systemaufruf, um erstmalig nach einem File zu suchen.
~NEXT ( -- err# ) DOS
Der MS-DOS Systemaufruf, der nach ~FIRST benutzt wird, um weitere
passende Filenamen aufzufinden.
~OPEN ( asciz mode -- handle ff / err# ) DOS
Der MS-DOS Systemaufruf fuer das Oeffnen eines Files. ASCIZ ist die
Adresse des vollen Namensstrings und MODE bezeichnet die Art des
Files (read-only, write-only, read-write). Bei Erfolg liegt eine
HANDLE-nummer unter einer Null auf dem Stack, ansonsten eine
Fehlernummer.
~SELECT ( n -- ) DOS
Der MS-DOS Systemaufruf, mit dem das aktuelle Laufwerk selektiert
wird.
~READ ( seg:addr quan handle -- #read ) DOS
Die Anzahl QUAN von Bytes werden aus dem File gelesen, dass durch
die Zahl HANDLE charakterisiert ist. Sie werden im erweiterten
Speicherbereich bei SEG:ADDR abgelegt. Nach Ende der Leseoperation
liegt die Anzahl der Bytes auf dem Stack, die tatsaechlich bis zum
Ende des Files gelesen werden konnten. Es koennen jedoch nur maximal
64kByte auf einmal gelesen werden.
~UNLINK ( asciz -- err# ) DOS
Der MS-DOS Systemaufruf, um einen Fileeintrag zu loeschen.