mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-26 17:49:18 +00:00
787 lines
35 KiB
Plaintext
787 lines
35 KiB
Plaintext
|
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.
|