mirror of
https://github.com/forth-ev/VolksForth.git
synced 2025-02-27 03:28:59 +00:00
VplksForth CP/M Documentation files
This commit is contained in:
parent
522a9cf4d4
commit
afcd8fcfe8
73
8080/CPM/DOC/DE/ASSEM.org
Normal file
73
8080/CPM/DOC/DE/ASSEM.org
Normal file
@ -0,0 +1,73 @@
|
||||
#+Title: Der volksForth-8080-Assembler
|
||||
|
||||
Die CP/M-Version von volksFORTH ist mit einem Assembler für den Intel
|
||||
8080 ausgestattet. Dieser Assembler kann aber auch unter den anderen
|
||||
Versionen geladen werden und so als Cross-Assembler arbeiten. Diese
|
||||
Beschreibung enthält kein vollständiges Glossar, da die Mnemonics des
|
||||
Assemblers den meisten Programmierern vertraut sein dürften. Sie dient
|
||||
als Ergänzung der Beschreibung des 6502-Assemblers im
|
||||
UltraForth83-Handbuch Seite 175ff.
|
||||
|
||||
Eine genaue Darstellung der Funktionsweise findet sich in dem Artikel
|
||||
von John J. Cassady in den FORTH-Dimensions (Jahrgang III/6 Seite
|
||||
180f), an dessen Implementation sich die volksFORTH-Version anlehnt.
|
||||
|
||||
Der 8080-Assmebler erlaubt strukturierte Programmierung. Er
|
||||
verwendet die gleichen Strukturelemente, wie der 6502-Assembler. Vor
|
||||
den Kontrollstrukturen sind folgende Condition Codes zulässig:
|
||||
|
||||
#+begin_example
|
||||
c0= c0<> cs 0= 0<> pe 0< 0>=
|
||||
#+end_example
|
||||
|
||||
Sie entsprechen den Flags im Processor Status Word des 8080. Neben den
|
||||
Kontrollstrukturen gibt es auch noch absoluten Sprünge (jc, jm, jmp,
|
||||
jnc, jnz, jp, jpe, jpo, jz).
|
||||
|
||||
Beispiele für die Verwendung des 8080-Assemblers:
|
||||
|
||||
| volksFORTH | Intel |
|
||||
|------------+------------|
|
||||
| A xra | xra A |
|
||||
| A L mov | mov L,A |
|
||||
| 0 H mvi | mvi H,0 |
|
||||
| H pop | pop H |
|
||||
| vector lxi | lxi vektor |
|
||||
| D dad | dad D |
|
||||
| ... | ... |
|
||||
|
||||
|
||||
Die Belegung der Forth-Register sieht folgendermaßen aus:
|
||||
|
||||
| IP | im BC-Registerpaar |
|
||||
| W | im DE-Registerpaar |
|
||||
| SP | im SP |
|
||||
| UP | im Speicher |
|
||||
| RP | im Speicher |
|
||||
|
||||
Die beiden 8-Bit-Hälften von IP und W können auch getrennt
|
||||
angesprochen werden durch (IP und IP', bzw. W und W').
|
||||
|
||||
Zum Ansprechen der 8080-Register dürfen die FORTH-Namen sowie die
|
||||
Intel Namen benutzt werden.
|
||||
|
||||
Zusätzlich enthält das System noch mehrere Macros:
|
||||
|
||||
* =R rpop= : Hole das 16-Bit-Register R (R<>H) vom Returnstack.
|
||||
* =R rpush= : Bringe das 16-Bit-Register R (R<>H) zum Returnstack.
|
||||
* =R1 R2 mvx= : Kopiere 16-Bit-Register R1 nach R2.
|
||||
* =Next= : Springe zum Address-Interpreter.
|
||||
* =;c:= : Schalte den Assembler ab und den Forth-Compiler an.
|
||||
|
||||
Vordefinierte Labels sind:
|
||||
|
||||
* =Hpush= : Adresse der Routine, die das H-Register auf den Stack
|
||||
bringt und dann zu Next springt.
|
||||
* =Dpush= : Adresse der Routine, die das D- und H-Register auf den
|
||||
Stack bringt und dann zu Next springt.
|
||||
* =>Next= : Adresse des Address-Interpreters.
|
||||
* =UP= : Adresse der Speicherzelle für den User-Pointer
|
||||
* =RP= : Adresse der Speicherzelle für den Returnstackpointer
|
||||
* =IPsave= : Adresse einer Hilfszelle um den IP zwischenzuspeichern
|
||||
|
||||
Neue Labels können mit =>LABEL= und =LABEL= erzeugt werden, wie im 6502-Assembler.
|
261
8080/CPM/DOC/DE/CPMSPECI.txt
Normal file
261
8080/CPM/DOC/DE/CPMSPECI.txt
Normal file
@ -0,0 +1,261 @@
|
||||
.HE CP/M 2.2 - spezifische Worte
|
||||
#bs ( -- n ) "number-backspace"
|
||||
n ist der Ascii-Wert f}r Backspace.
|
||||
|
||||
#cr ( -- n ) "number-c-r"
|
||||
n ist der Ascii-Wert f}r Carriage-Return.
|
||||
|
||||
#esc ( -- n ) "number-escape"
|
||||
n ist der Ascii-Wert f}r Escape.
|
||||
|
||||
#lf ( -- n ) "number-linefeed"
|
||||
n ist der Ascii-Wert f}r Linefeed.
|
||||
|
||||
(at ( row col -- ) "paren-at"
|
||||
Positioniert den Cursor in die Zeile row, Spalte col und setzt OUT.
|
||||
Benutzt dabei LOCATE. Siehe auch AT.
|
||||
|
||||
(at? ( -- row col ) "paren-at-question"
|
||||
row ist die aktuelle Zeilennummer, col die aktuelle Spaltennummer.
|
||||
Vergleiche AT?
|
||||
|
||||
(blk/drv ( drv -- blocks ) "paren-blocks-per-drive"
|
||||
blocks gibt an wieviele Forth-Bl|cke (1kB) auf dem Laufwerk drv
|
||||
sind. Ist blocks=0, dann existiert dieses Laufwerk nicht.
|
||||
Siehe BLK/DRV.
|
||||
|
||||
(cr ( -- ) "paren-c-r"
|
||||
Setzt den Cursor in die erste Spalte der n{chsten Zeile. PAUSE wird
|
||||
ausgef}hrt.
|
||||
|
||||
(decode ( addr pos1 key --- addr pos2 ) "paren-decode"
|
||||
Wertet key aus. key wird in der Speicherzelle addr+pos1 abgelegt und
|
||||
als Echo auf dem Bildschirm ausgegeben. Die Variable SPAN und pos1
|
||||
werden inkrementiert. Folgende Tasten werden besonders behandelt:
|
||||
Control-S und Control-D beeinflussen nur pos1 und den Cursor. Ctrl-G
|
||||
l|scht das Zeichen unter dem Cursor und dekrementiert SPAN.
|
||||
Backspace (Control-H) und Delete ($7F) l|schen das Zeichen links vom
|
||||
Cursor und dekrementieren pos1 und SPAN. Control T f}gt an der
|
||||
Cursorposition ein Leerzeichen ein. SPAN wird inkrementiert. Return
|
||||
positioniert den Cursor auf das letzte Zeichen.
|
||||
Vergleiche INPUT: und (EXPECT.
|
||||
|
||||
(del ( -- ) "paren-del"
|
||||
L|scht ein Zeichen links vom Cursor. Benutzt dabei CURLEFT.
|
||||
Vergleiche auch DEL.
|
||||
|
||||
(emit ( 8b -- ) "paren-emit"
|
||||
Gib 8b auf dem Bildschirm aus. Ein PAUSE wird ausgef}hrt. Alle Werte
|
||||
werden als Zeichen ausgegeben. Steuercodes sind nicht m|glich, d.h.
|
||||
alle Werte < $20 werden als Punkt "." ausgegeben.
|
||||
Vergleiche CON! und EMIT.
|
||||
|
||||
(expect ( addr len -- ) "paren-expect"
|
||||
Erwartet len Zeichen vom Eingabeger{t, die ab addr im Speicher
|
||||
abgelegt werden. Ein Echo der Zeichne wird ausgegeben. Return be
|
||||
endet die Eingabe vorzeitig. Ein abschlie~endes Leerzeichen wird
|
||||
immer ausgegeben. Die L{nge der Zeichenkette wird in der Variablen
|
||||
SPAN }bergeben. Vergleiche EXPECT.
|
||||
.PA
|
||||
(key ( -- char ) "paren-key"
|
||||
Wartet auf einen Tastendruck. W{hrend der Wartezeit wird PAUSE
|
||||
ausgef}hrt. Die untersten 7 Bit von char enthalten den Ascii-Code
|
||||
der gedr}ckten Taste. Steuerzeichen werden nicht ausgewertet,
|
||||
sondern unver{ndert abgeliefert. Vergleiche KEY.
|
||||
|
||||
(key? ( -- flag ) "paren-key-question"
|
||||
flag ist TRUE, wenn eine Taste gedr}ckt wurde, sonst false.
|
||||
Vergleiche auch KEY?.
|
||||
|
||||
(page ( -- ) "paren-page"
|
||||
L|scht den Bildschirm, positioniert den Cursor in die linke obere
|
||||
Ecke und setzt OUT auf null. Siehe auch LOCATE und PAGE.
|
||||
|
||||
(r/w ( adr blk file r/wf -- flag ) "paren-r-w"
|
||||
Ist r/wf<>FALSE, wird der Forth-Block mit der absoluten Blocknummer
|
||||
blk von der Diskette gelesen. Ist r/wf=FALSE so wird er geschrieben.
|
||||
adr gibt die Addresse des Block-Puffers an. file mu~ null sein, da
|
||||
(r/w den Zugriff auf Files nicht unterst}tzt. flag ist TRUE wenn ein
|
||||
Diskettenfehler vorlag.
|
||||
|
||||
(type ( addr len -- ) "paren-type"
|
||||
Gibt den String, der im Speicher bei addr beginnt und die L{nge len
|
||||
hat, auf dem Blidschirm aus. Genau ein PAUSE wird nach der Ausgabe
|
||||
ausgf}hrt. Vergleiche TYPE, OUTPUT: und (EMIT.
|
||||
|
||||
/drive ( blk -- blk' drv ) "per-drive"
|
||||
blk gibt die absolute Nummer eines Forth-Blocks an. /DRIVE
|
||||
berechnet, auf welchem Laufwerk (drv) dieser Block zu finden ist,
|
||||
und welche relative Blocknummer (blk') er zum Anfang dieses
|
||||
Laufwerks hat. Siehe DRV?, >DRIVE.
|
||||
|
||||
>drive ( blk drv -- block' ) "to-drive"
|
||||
blk gibt die relative Blocknummer eine Forth-Blocks bez}glich des
|
||||
Anfangs von Laufwerk drv an. >DRIVE berechnet daraus, unter welcher
|
||||
Blocknummer dieser Block beim momentanen Stand von OFFSET erreicht
|
||||
werden kann (block'). In gewisser Weise Umkehrung von /DRIVE.
|
||||
|
||||
?drive-error ( f -- ) "question-drive-error"
|
||||
Ist f=FALSE, so wird "beyond capacity" als Fehlermeldung ausgegeben.
|
||||
|
||||
?drive ( n -- n ) "question-drive"
|
||||
]berpr}ft, ob das Laufwerk n existiert, und gibt "beyond capacity"
|
||||
als Fehlermeldung aus, wenn dies nicht der Fall ist.
|
||||
|
||||
b/blk ( -- b/blk ) "bytes-per-block"
|
||||
Eine Konstante die angibt, wieviele Bytes in einen Forth-Block
|
||||
passen. Nach dem Forth-83 Standard ist B/BLK = &1024.
|
||||
|
||||
bios ( -- addr ) "bios"
|
||||
Adresse eines 8080-Unterprogramms, das einen Sprung ins BIOS aus
|
||||
f}hrt. Das Low-Byte der Einsprungadresse steht dabei in HL. Wird von
|
||||
con!, (key?, getkey und read/write benutzt.
|
||||
|
||||
blk/drv ( -- #blk ) "blocks-per-drive"
|
||||
#blk gibt die Kapazit{t des aktuellen Laufwerks (bestimmt durch
|
||||
OFFSET) in Forth-Bl|cken (1kB) an. Siehe (BLK/DRV.
|
||||
.PA
|
||||
con! ( 8b -- ) "con-store"
|
||||
Gibt 8b auf die CONsole (Bildschirm) aus. Ascii-Werte < $20 werden
|
||||
als Steuercodes interpretiert.
|
||||
|
||||
curleft ( -- ) "cur-left"
|
||||
Bewegt den Cursor ein Zeichen nach links. Eine der vordefinierten
|
||||
Terminalfunktionen.
|
||||
|
||||
curoff ( -- ) "cur-off"
|
||||
Schaltet den Cursor aus. Eine der vordefinierten Terminalfunktionen.
|
||||
|
||||
curon ( -- ) "cur-on"
|
||||
Schaltet den Cursor an. Eine der vordefinierten Terminalfunktionen.
|
||||
|
||||
currite ( -- ) "cur-right"
|
||||
Bewegt den Cursor ein Zeichen nach rechts. Eine der vordefinierten
|
||||
Terminalfunktionen.
|
||||
|
||||
dark ( -- ) "dark"
|
||||
L|scht den Bildschirm. Eine der vordefinierten Terminalfunktionen.
|
||||
|
||||
display ( -- ) "display"
|
||||
Ein mit OUTPUT: definiertes Wort, das den Bildschirm als Ausgabe
|
||||
ger{t anw{hlt, wenn es ausgef}hrt wird. Die Worte EMIT, CR, TYPE,
|
||||
DEL, PAGE, AT, und AT? beziehen sich dann auf das aktuelle Terminal.
|
||||
Siehe TERMINAL:.
|
||||
|
||||
dma! ( addr -- ) "d-m-a-store"
|
||||
addr ist die Adresse des Diskettenpuffers, der beim n{chsten Dis
|
||||
kettenzugriff verwendet werden soll.
|
||||
|
||||
drive ( n -- ) "drive"
|
||||
W{hlt n als aktuelles Laufwerk an. [ndert OFFSET entsprechend.
|
||||
Siehe BLK/DRV.
|
||||
|
||||
drv! ( drv f -- dph ) "drive-store"
|
||||
drv ist die Nummer des Diskettenlaufwerks, das als n{chstes ver
|
||||
wendet werden soll. f=0 gibt an, ob es sich um den erste Zugriff
|
||||
nach einem CP/M Warmstart handelt. dph ist die Adresse des CP/M
|
||||
Disk-Parameter-Headders. (Siehe CP/M Operating System Manual)
|
||||
Ist dph=0, so ist das angesprochene Laufwerk in diesem Komputer
|
||||
system nicht unterst}tzt.
|
||||
|
||||
drv? ( blk -- drv ) "drive-question"
|
||||
blk gibt die absolute Nummer eines FORTH-Blocks an, DRV? berechnet
|
||||
daraus das Laufwerk (drv) auf dem er zu finden ist.
|
||||
Siehe /DRIVE, >DRIVE.
|
||||
|
||||
drv0 ( -- ) "drive-zero"
|
||||
W{hlt Laufwerk 0 (A) als aktuelles Laufwerk f}r R/W an. Siehe DRIVE
|
||||
und >DRIVE.
|
||||
|
||||
drv1 ( -- ) "drive-one"
|
||||
W{hlt Laufwerk 1 (B) als aktuelles Laufwerk f}r R/W an. Siehe DRIVE
|
||||
und >DRIVE.
|
||||
|
||||
drvinit ( -- ) "drive-init"
|
||||
Initialisiert das volksFORTH-Disk-System.
|
||||
Die im Komputer-System vorhandenen Laufwerke werden der Reihe nach
|
||||
selektiert und deren Kapazit{t berechnet. Dann wird das CP/M
|
||||
default-Laufwerk selektiert.
|
||||
dumb ( -- ) "dumb"
|
||||
Ein mit TERMINAL: definiertes Wort, das ein ignorantes Terminal
|
||||
anw{hlt, wenn es ausgef}hrt wird. CURON, CUROFF, CURLEFT, CURRITE,
|
||||
RVSON, RVSOFF, DARK und LOCATE haben dann keine Wirkung. Mit ihnen
|
||||
auch die sie benutzenden Worte (PAGE, (AT, (DEL. Wenn DISPLAY
|
||||
eingeschaltet ist, sind also auch PAGE, AT und DEL wirkungslos.
|
||||
DUMB ist als aktuelles Terminal angew{hlt, bis die Installierung
|
||||
eines leistungsf{higeren Terminals abgeschlossen ist.
|
||||
|
||||
getkey ( -- char ) "getkey"
|
||||
die unteren 7 Bit von char enthalten den Ascii-Code des letzten
|
||||
Tastendrucks. Ist noch keine Taste gedr}ckt, dann wartet getkey.
|
||||
Siehe auch KEY? und KEY.
|
||||
|
||||
home ( -- ) "home"
|
||||
Der Kopf des momentan selektierte Diskettenlaufwerks wird auf Spur
|
||||
null gefahren. Spur null wird als n{chste Spur angew{hlt, die
|
||||
verwendet werden soll. Siehe TRK!, DRV!.
|
||||
|
||||
index ( from to -- ) "index"
|
||||
Liest die Blocks from bis to einschlie~lich und gibt deren erste
|
||||
Zeilen aus. Index kann mit einer beliebigen Taste angehalten werden
|
||||
und mit RETURN abgebrochen werden. (Siehe STOP?) Die ersten Zeilen
|
||||
von Screens enthalten typischer Weise Kommentare, die den Inhalt
|
||||
chararkterisieren.
|
||||
|
||||
keyboard ( -- ) "keyboard"
|
||||
Ein mit INPUT: definiertes Wort, das die Tastatur als Eingabeger{t
|
||||
anw{hlt. Die Worte KEY, KEY?, DECODE und EXPECT beziehen sich nun
|
||||
auf die Tastatur. Siehe (KEY, (KEY? (DECODE, (EXPECT.
|
||||
|
||||
locate ( row col -- ) "locate"
|
||||
Bewegt den Cursor absolut auf Spalte col, Zeile row.
|
||||
Eine der vordefinierten Terminalfunktionen.
|
||||
|
||||
|
||||
out ( -- addr ) "out"
|
||||
Adresse einer Variablen, die die Anzahl der ausgegebenen Zeichen
|
||||
enth{lt.
|
||||
|
||||
read/write ( r/wf sponti -- f ) "read-write"
|
||||
Bewirkt das physikalische Lesen (r/wf = FALSE) und Schreiben
|
||||
(r/wf=TRUE) eines Sektors (=128 Bytes) von der/auf die Diskette. Das
|
||||
Laufwerk, die Spur , der Sektor sowie der Sektor-Puffer sind vorher
|
||||
mit DRV!, TRK!, SEC! und DMA! gew{hlt worden.
|
||||
sponti gibt an, ob beim Schreiben unmittelbar auf die Diskette
|
||||
geschrieben werden soll (sponti=TRUE) oder, ob der geschriebene
|
||||
Sektor im BIOS zwischengepuffert werden darf (sponti=FALSE).
|
||||
|
||||
rvsoff ( -- ) "reverse-off"
|
||||
Schaltet die Inversdarstellung aus. Eine der vordefinierten
|
||||
Terminalfunktionen.
|
||||
|
||||
rvson ( -- ) "reverse-on"
|
||||
Schaltet die Inversedarstellung ein. Eine der vordefinierten
|
||||
Terminalfunktionen.
|
||||
|
||||
sec! ( sec -- ) "sec-store"
|
||||
sec ist der beim n{chsten Diskettenzugriff zu verwendende Sektor.
|
||||
.PA
|
||||
Term: ( offset -- offset' ) "term-colon"
|
||||
Ein definierendes Wort f}r Terminalfunktionen. Wird benutzt um die
|
||||
einzelnen Komponenten eines Terminal-Vektors zu definieren.
|
||||
Vordefinierte Terminalfunktionen sind CURON, CUROFF, CURLEFT,
|
||||
CURRITE, RVSON, RVSOFF, DARK und LOCATE. Siehe auch TERMINAL:
|
||||
|
||||
Terminal: ( -- ) "terminal-colon"
|
||||
Ein definierendes Wort f}r Terminals. Benutzt in der Form:
|
||||
Terminal: <name>
|
||||
newCURON newCUROFF newCURLEFT newCURRITE
|
||||
newRVSON newRVSOFF newDARK newLOACTE ;
|
||||
TERMINAL: erzeugt einen Kopf f}r <name> im Dictionary und kompiliert
|
||||
einen Vektor von Zeigern auf Worte die f}r die Ausf}hrung von Ter
|
||||
minalfunktionen zust{ndig sind. Wird <name> ausgef}hrt, so werden
|
||||
die Terminalfunktionen von <name> zu den aktuellen Terminal
|
||||
funktionen gemacht, das Terminal <name> ist damit aktiv. Terminal
|
||||
funktionen werden von AT, PAGE, DEL ausgef}hrt, wenn die Ausgabe auf
|
||||
DISPLAY geschaltet ist. Siehe OUTPUT:, DISPLAY, DUMB.
|
||||
|
||||
trk! ( trk -- ) "track-store"
|
||||
trk ist die beim n{chsten Diskettenzugriff zu verwendende Spur.
|
||||
|
||||
|
93
8080/CPM/DOC/DE/EDITOR.txt
Normal file
93
8080/CPM/DOC/DE/EDITOR.txt
Normal file
@ -0,0 +1,93 @@
|
||||
.HE volksFORTH Editor f}r CP/M 2.2 Implementation Seite #
|
||||
.OP
|
||||
Der f}r die CP/M 2.2 Version von volksFORTH benutzte Editor enth{lt im
|
||||
wesentlichen die gleichen Funktionen wie die des Editors auf dem C64,
|
||||
beschrieben im Handbuch Seite 147ff.
|
||||
Im Gegensatz zum C64-Editor benutzt der neue Editor das Forth-Screen-
|
||||
Standardformat von 16 Zeilen a 64 Zeichen.
|
||||
Aufgerufen wird der Editor mit: <screennummer> L .
|
||||
Den zuletzt edititierten Screen erh{lt man mit: V , und mit:
|
||||
VIEW <name> kann man sich ansehen, wo <name> definiert worden ist.
|
||||
|
||||
Die Tastenbelegung ist neu organisiert. Im folgenden wird die Tastenbelegung
|
||||
f}r die allgemeine CP/M-Version und f}r die Schneider Version beschrieben. Mit
|
||||
Hilfe des Files INSTALL.SCR k|nnen die Tasten neu angepa~t werden. (Siehe
|
||||
Installationshinweis: "Wie fange ich an?")
|
||||
|
||||
Tastenbelegung f}r die allgemeine CP/M Version:
|
||||
|
||||
Komando (siehe Handbuch S. 152ff) Taste
_______________________________________________________
|
||||
|
||||
Cursor up Control E
|
||||
Cursor left Control S
|
||||
Cursor down Control X
|
||||
Cursor right Control D
|
||||
push-line Control I
|
||||
push-char Control J
|
||||
pull-line Control O
|
||||
pull-char Control K
|
||||
copy-line Control P
|
||||
copy-char Control L
|
||||
backspace Control H
|
||||
backspace delete
|
||||
delete-char Control G
|
||||
insert-char Control T
|
||||
delete-line Control Y
|
||||
insert-line Control N
|
||||
insert-mode-on insert-mode-off Control V
|
||||
clear-to-right Control Z
|
||||
new-line return
|
||||
+tab Control F
|
||||
-tab Control A
|
||||
search Control \ = Control \
|
||||
undo Control U
|
||||
update-exit Control Q
|
||||
flushed-exit escape
|
||||
shadow-screen Control W
|
||||
next-screen Control C
|
||||
back-screen Control R
|
||||
alter-screen Control [ = Control [
|
||||
mark-alter-screen Control B
|
||||
|
||||
.pa
|
||||
Tastenbelegung f}r die Schneider CP/M Version:
|
||||
|
||||
Komando (siehe Handbuch S. 152ff) Taste
_______________________________________________________
|
||||
|
||||
Cursor up Pfeil nach oben
|
||||
Cursor left Pfeil nach links
|
||||
Cursor down Pfeil nach unten
|
||||
Cursor right Pfeil nach rechts
|
||||
push-line shift Pfeil nach oben
|
||||
push-char shift Pfeil nach links
|
||||
pull-line shift Pfeil nach unten
|
||||
pull-char shift Pfeil nach rechts
|
||||
copy-line Control Q
|
||||
copy-char Control Z
|
||||
backspace Control H
|
||||
backspace delete
|
||||
delete-char Control P (clr)
|
||||
insert-char copy
|
||||
delete-line Control D
|
||||
insert-line Control T
|
||||
insert-mode-on Control I
|
||||
overwrite-mode-on Control O
|
||||
eraser-line Control C
|
||||
clear-to-right Control E
|
||||
new-line return
|
||||
+tab Control Pfeil nach rechts
|
||||
-tab Control Pfeil nach links
|
||||
home Control Pfeil noch oben
|
||||
to-end Control Pfeil nach unten
|
||||
search Control F
|
||||
undo Control U
|
||||
update-exit Control X
|
||||
flushed-exit escape
|
||||
show-load Control L
|
||||
shadow-screen Control W
|
||||
next-screen Control N
|
||||
back-screen Control B
|
||||
alter-screen Control A
|
||||
mark-alter-screen Control R
|
||||
|
||||
|
43
8080/CPM/DOC/DE/EINLEIT.txt
Normal file
43
8080/CPM/DOC/DE/EINLEIT.txt
Normal file
@ -0,0 +1,43 @@
|
||||
.op
|
||||
volksFORTH f}r CP/M 2.2
|
||||
_______________________
|
||||
|
||||
|
||||
Nach den Implementierungen von volksFORTH auf dem 6502 (C64) und dem 68000
|
||||
(Atari ST), liegt hier nun die dritte Implementierung, die auf dem 8080/Z80,
|
||||
vor. Sie st}tzt sich dabei auf das CP/M 2.2 Betriebssystem, soda~ volksFORTH
|
||||
damit auf einer gro~en Zahl von Mikrokomputersystemen zur Verf}gung steht.
|
||||
|
||||
volksFORTH ist ein public domain Produkt, d.h. volksFORTH darf beliebig
|
||||
kopiert und weiterverbreitet werden, solange dies nicht kommerziell geschieht,
|
||||
und das Urheberrecht der Autoren beachtet wird.
|
||||
|
||||
Fragen, Kritik und Anregungen bitte an:
|
||||
|
||||
Ulrich Hoffmann
|
||||
Harmsstra~e 71
|
||||
2300 Kiel 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Um die Verbreitung von FORTH allgemein k}mmert sich die FORTH-Gesellschaft
|
||||
e.V. In ihrem Vereinsorgan dem Forth-Magazin (Vierte-Dimension) erscheinen
|
||||
regelm{~ig Artikel }ber Forth, insbesondere }ber volksFORTH.
|
||||
|
||||
Die Adresse der Forth-Gesellschaft e.V. lautet:
|
||||
|
||||
Forth-Gesellschaft e.V.
|
||||
Friedensallee 92
|
||||
2000 Hamburg 50
|
||||
|
||||
Neben dem Forth-Magazin wird von der Forth-Gesellschaft der Forth-Tree, ein
|
||||
Mailboxsystem, unterhalten (040/3904204), das immer, au~er Dienstag von 18-20
|
||||
Uhr, wo am Sorgentelefon Fragen gekl{rt werden k|nnen, in Betrieb ist.
|
||||
Der ebenfalls angebotene Kopienservice bietet den Zugriff auf eine umfang
|
||||
reiche Forth-Bibliothek.
|
||||
|
||||
|
||||
Ulrich Hoffmann, Ende November 1986
|
527
8080/CPM/DOC/DE/FILEINT.txt
Normal file
527
8080/CPM/DOC/DE/FILEINT.txt
Normal file
@ -0,0 +1,527 @@
|
||||
.OP
|
||||
.HE Das Fileinterface volksFORTH - CP/M 2.2 Seite #
|
||||
|
||||
Fileinterface f}r das volksFORTH83
__________________________________
|
||||
auf CP/M Komputern
__________________
|
||||
|
||||
Wie geht es los?
________________
|
||||
|
||||
Bevor Sie das Glossar lesen, sollten Sie diese kleine Einf}hrung lesen
|
||||
und auf einer leeren Diskette die Beispiele ausprobieren.
|
||||
|
||||
Wie erzeuge ich ein File, in das ich ein Programm eingeben kann?
________________________________________________________________
|
||||
|
||||
Geben Sie bitte folgendes ein:
|
||||
MAKEFILE test.scr
|
||||
Das File test.scr wird auf der Diskette erzeugt, auf dem Sie das Forth
|
||||
gebootet haben.
|
||||
Als n{chstes sch{tzen Sie bitte ab, wie lang Ihr Programm etwa wird.
|
||||
Beachten Sie dabei bitte, da~ der Screen 0 eines Files f}r Hinweise zur
|
||||
Handhabung Ihres Programms und der Screen 1 f}r einen sog. Loadscreen
|
||||
(das ist ein Screen, der den Rest des File l{dt) reserviert sind. Wollen
|
||||
Sie also z.B. 3 Screens Programm eingeben, so mu~ das File 5 Screens lang
|
||||
sein; Sie geben also ein:
|
||||
5 MORE
|
||||
Fertig! Sie haben jetzt ein File, das die Screens 0..4 enth{lt. Geben Sie
|
||||
jetzt
|
||||
1 L
|
||||
ein. Sie editieren jetzt den Screen 1 Ihres neuen Files test.scr. Sie
|
||||
k|nnen, falls der Platz nicht ausreicht, Ihr File sp{ter einfach mit MORE
|
||||
verl{ngern. Ein File kann leider nicht verk}rzt werden.
|
||||
|
||||
Wie spreche ich ein bereits auf der Diskette vorhandenes File an?
_________________________________________________________________
|
||||
|
||||
Das geht noch einfacher. Geben Sie einfach den Filenamen ein. Reagiert
|
||||
das System mit der Meldung "Haeh?", so kennt das Forth dieses File noch
|
||||
nicht. Sie m}ssen in diesem Fall das Wort USE vor dem Filenamen eingeben,
|
||||
also z.B.
|
||||
USE test.scr
|
||||
Jetzt k|nnen Sie wie oben beschrieben mit 1 L (oder einer anderen Zahl)
|
||||
das File editieren, Das Wort USE erzeugt }brigens im Forthsystem das Wort
|
||||
TEST.SCR, falls es noch nicht vorhanden war. Wissen Sie also nicht mehr,
|
||||
ob Sie ein File schon benutzt haben, so k|nnen Sie mit WORDS nachsehen
|
||||
oder das Wort USE voranstellen.
|
||||
|
||||
Wie erzeuge ich ein File auf einem vorgegebenem Laufwerk, z.B. A: ?
___________________________________________________________________
|
||||
|
||||
Durch Voranstellen des Laufwerks etwa:
|
||||
MAKEFILE a:test.scr
|
||||
Oder durch Eingabe von
|
||||
A:
|
||||
Hierbei wird A: zum aktuellen Laufwerk gemacht. Files ohne Laufwerks
|
||||
angabe werden immer auf dem aktuellen Laufwerk erzeugt.
|
||||
.PA
|
||||
|
||||
0) Allgemeines
______________
|
||||
|
||||
Im folgenden wird die Benutzung des Fileinterfaces beschrieben. Dieses
|
||||
Fileinterface benutzt die Files des CP/M.
|
||||
Benutzt man ein File von Forth aus, so wird es in Bl|cke zu je 1024 Bytes
|
||||
aufgeteilt, die in gewohnter Wiese anzusprechen sind. Dies trifft auch f}r
|
||||
Files zu, die nicht vom Forth aus erzeugt wurden. Als Konvention wird vor
|
||||
geschlagen, da~ Files, die Forth-Screens, also Quelltexte, enthalten, mit .SCR
|
||||
erweitert werden. Files, die Daten enthalten, die nicht unmittelbar lesbar
|
||||
sind, sollten auf .BLK enden.
|
||||
|
||||
Zum Umschalten vom Filesystem auf Direktzugriff und umgekehrt gibt es das
|
||||
Wort:
|
||||
|
||||
DIRECT ( -- ) "direct"
|
||||
Schaltet auf Direktzugriff um. Auf den Filezugriff schalten wir durch das
|
||||
Nennen eines Filenamens.
|
||||
|
||||
|
||||
1) Die Laufwerkswahl
____________________
|
||||
|
||||
Files werden immer auf dem aktuellen Laufwerk erzeugt, solange der Filename
|
||||
nicht ausdr}cklich ein anderes Laufwerk vorsieht. Als Betriebssystemname wird
|
||||
dann der vollst{ndige Filename eingetragen, also mit eindeutig festgelegtem
|
||||
Laufwerk.
|
||||
Zum [ndern des aktuellen Laufwerks stehen die folgenden Worte zur Verf}gung:
|
||||
|
||||
A: ( -- ) "a-colon"
|
||||
Macht Diskettenstation A: zum aktuellen Laufwerk entsprechend der
|
||||
Funktion im CCP. Siehe SETDRIVE.
|
||||
|
||||
B: ( -- ) "b-colon"
|
||||
Macht Diskettenstation B: zum aktuellen Laufwerk entsprechend der
|
||||
Funktion im CCP. Siehe SETDRIVE.
|
||||
|
||||
SETDRIVE ( n -- ) "setdrive"
|
||||
Macht die Diskettenstation mit der Nummer n zum aktuellen Laufwerk. Hier
|
||||
bei entspricht n=0 der Diskstation A, n=1 der Diskstation B usw.
|
||||
|
||||
Um sich den Inhalt einer Diskette anzusehen, gibt es die Worte:
|
||||
|
||||
FILES ( -- ) "files"
|
||||
Listet den Inhalt des aktuellen Laufwerks (siehe SETDRIVE) auf dem Bild
|
||||
schirm auf. Dieses Wort, zusammen mit dem Wort FILES" entspricht dem
|
||||
Kommando DIR des CCP. In anderen volksFORTH-Filesystemen wird DIR benutzt
|
||||
um Direktories umzuschalten (MS-DOS, GEM-DOS).
|
||||
|
||||
FILES" ( -- ) "files-quote"
|
||||
Benutzt in der Form
|
||||
FILES" cccc"
|
||||
Listet die Files auf, deren Name cccc ist. Der String cccc darf die
|
||||
bekannten Wildcards ('?','*') sowie eine Laufwerksbezeichnung enthalten.
|
||||
Wird kein Laufwerk angegeben, so werden die Files des aktuellen Laufwerks
|
||||
ausgegeben.
|
||||
|
||||
|
||||
.PA
|
||||
2) Files
________
|
||||
|
||||
Files bestehen aus einem Forthname und einem Betriebssystemnamen, die nicht
|
||||
}bereinstimmen m}ssen.
|
||||
Ist das Forthwort, unter dem ein File zugreifbar ist, gemeint, so wird im
|
||||
folgenden vom Forthfile gesprochen. Ist das File auf der Diskette gemeint, das
|
||||
vom CP/M-BDOS verwaltet wird, so wird vom DOS-File gesprochen. Durch das
|
||||
Nennen des Forthnamens wird das Forthfile (und das zugeh|rige DOS-File) zum
|
||||
aktuellen File, auf das sich alle Operationen wir LIST, LOAD. CONVEY usw.
|
||||
beziehen. Beim Bekanntmachen des Files mit USE, MAKEFILE und ASSIGN u.a. wird
|
||||
das File auf dem aktuellen Laufwerk gesucht, wenn kein Laufwerk im Namen
|
||||
angegeben wird. Danach darf das aktuelle Laufwerk beliebig ge{ndert werden,
|
||||
ohne da~ das File dann auf einem anderen Laufwerk gesucht wird. Mit FORTHFILES
|
||||
k|nnen die aktuellen Zuordnungen zwischen Forthfile und DOS-File angezeigt
|
||||
werden.
|
||||
|
||||
FILE ( -- ) "file"
|
||||
Wird in der Form:
|
||||
FILE <name>
|
||||
benutzt.
|
||||
Erzeugt ein Forthwort mit Name <name>. Wird <name> sp{ter ausgef}hrt, so
|
||||
vermerkt es sich als aktuelles File. Ebenso vermerkt es sich als
|
||||
FROMFILE, was f}r CONVEY wichtig ist. Einem Forthfile wird mit MAKE oder
|
||||
ASSIGN ein DOS-File zugeordnet.
|
||||
|
||||
MAKE ( -- ) "make"
|
||||
Wird in der Form :
|
||||
MAKE cccc
|
||||
benutzt. Erzeugt ein DOS-File mit Namen cccc auf dem aktuellen (oder
|
||||
angegebenem Laufwerk) und ordnet es dem aktuellen Forthfile zu. Das File
|
||||
wird auch gleich ge|ffnet. Es hat die L{nge Null (siehe MORE).
|
||||
Beispiel FILE ausgabe
|
||||
ausgabe MAKE test.scr
|
||||
erzeugt ein Forthwort AUSGABE und ein File mit dem Namen A:TEST.SCR.
|
||||
(Angenommen A: ist aktuelles Laufwerk.) Alle Operationen wie LOAD, LIST
|
||||
usw. beziehen sich nun auf den entsprechenden Screen in A:TEST.SCR.
|
||||
Beachten Sie bitte, da~ dieses File noch leer ist, und daher eine Fehler
|
||||
bedingung besteht, wenn Zugriffsoperationen ausgef}hrt werden sollen.
|
||||
|
||||
MAKEFILE ( -- ) "makefile"
|
||||
Wird in der folgender Form benutzt:
|
||||
MAKEFILE <name>
|
||||
Erzeugt ein Forthfile mit dem Namen <NAME> und erzeugt abschlie~end ein
|
||||
DOS-File mit demselben Namen (und eindeutiger Laufwerksangabe). Die
|
||||
folgende Sequenz w}rde genau dasselber bewirken:
|
||||
FILE <name>
|
||||
<name> MAKE <name>
|
||||
|
||||
SAVEFILE ( addr len -- ) "savefile"
|
||||
Wird in der folgenden Form benutzt:
|
||||
SAVEFILE <name>
|
||||
Schreibt den String, der an der Adresse addr begint und die L{nge len hat
|
||||
als File mit dem Namen <name> auf die Diskette.
|
||||
|
||||
KILLFILE ( -- ) "killfile"
|
||||
L|scht das aktuelle File. Unsch|n, da dann das Forthfile noch existiert,
|
||||
das Dosfile aber gel|scht ist, soda~ es bei dem n{chsten Diskettenzugriff
|
||||
einen Fehler gibt, wenn nicht ein anderes File angew{hlt wird.
|
||||
.pa
|
||||
ASSIGN ( -- ) "assign"
|
||||
Wird in der Form
|
||||
ASSIGN cccc
|
||||
benutzt. Ordnet dem aktuellen File das DOS-File mit Namen cccc (mit
|
||||
eindeutiger Laufwerksangabe) zu. Eine Fehlerbedingung besteht, wenn das
|
||||
File nicht gefunden werden kann.
|
||||
|
||||
USE ( -- ) "use"
|
||||
Dieses Wort ist das wichtigste Wort zum Ausw{hlen von Files.
____________________________________________________________
|
||||
|
||||
Es wird in der folgenden Form benutzt:
|
||||
USE <name>
|
||||
Dieses Wort macht das File mit Namen <NAME> zum aktuellen File, auf das
|
||||
sich LOAD, LIST usw. beziehen. Es erzeugt ein Forthfile mit Namen <NAME>,
|
||||
falls der Name noch nicht vorhanden war. Anschlie~end wird das File auf
|
||||
dem aktuellen (oder angegebenem) Laufwerk gesucht. Wird das File nicht
|
||||
gefunden, so wird eine Fehlermeldung ausgegeben. Das (automatisch)
|
||||
erzeugte Forthfile verbleibt im Dictionary und mu~ ggf. mit FORGET
|
||||
vergessen werden.
|
||||
|
||||
CLOSE ( -- ) "close"
|
||||
Schlie~t das aktuelle File. Dabei wird das Inhaltsverzeichnis (Directory)
|
||||
der Diskette aktualisiert. Es werden die zu diesem File geh|renden
|
||||
ge{nderten Bl|cke auf Diskette zur}ckgeschrieben und alle zu diesem File
|
||||
geh|renden Bl|cke in den Block-Puffern gel|scht.
|
||||
|
||||
OPEN ( -- ) "open"
|
||||
Offnet das aktuelle File. Eine Fehlerbedingung besteht, wenn das File
|
||||
nicht gefunden werden kann. Die Benutzung dieses Wortes ist in den
|
||||
meisten F{llen }berfl}ssig, da Files automatisch bei einem Zugriff
|
||||
ge|ffnet werden.
|
||||
|
||||
EMPTYFILE ( -- ) "emptyfile"
|
||||
K}rzt das aktuelle File auf die L{nge null.
|
||||
|
||||
FROM ( -- ) "from"
|
||||
Wird in der folgenden Form benutzt:
|
||||
FROM <name>
|
||||
<name> ist der Name eines Forthfile, aus dem beim Aufruf von CONVEY und
|
||||
COPY Bl|cke herauskopiert werden sollen.
|
||||
|
||||
Beispiel: filea 1 FROM fileb 3 COPY
|
||||
|
||||
Kopiert den Block 1 aus FILEB auf den Block 3 von FILEA.
|
||||
Dieses Wort benutzt USE und das File auszuw{hlen. Das bedeutet, da~ FILEB
|
||||
automatisch als Forthfile angelegt wird, wenn es noch nicht im System
|
||||
vorhanden ist.
|
||||
.pa
|
||||
LOADFROM ( n -- ) "loadfrom"
|
||||
Wird in der folgenden Form benutzt:
|
||||
LOADFROM <name>
|
||||
<name> ist der Name eines Forthfiles, aus dem der Block n geladen wird.
|
||||
|
||||
Beispiel: 15 LOADFROM filea
|
||||
|
||||
L{dt den Block 15 aus FILEA. Dieses Wort ist wichtig, wenn w{hrend des
|
||||
Ladens eines Files Teile eines anderen Files geladen werden sollen.
|
||||
Dieses Wort benutzt USE, um FILEA zu selektieren. Das bedeutet, da~ auto
|
||||
matisch ein Forthfile mit Namen FILEA erzeugt wird, falls es im System
|
||||
noch nicht vorhanden war.
|
||||
Beachten Sie bitte, da~ dieses Wort nichts mit FROM oder FROMFILE zu tun
|
||||
hat, obwohl es {hnlich hei~t!
|
||||
|
||||
INCLUDE ( -- ) "include"
|
||||
Wird in der folgenden Form benutzt:
|
||||
INCLUDE <name>
|
||||
<name> ist der Name eines Forthfiles, das vollst{ndig geladen wird. Dabei
|
||||
ist Voraussetzung, da~ auf Screen 1 dieses Files Anweisungen stehen, die
|
||||
zum Laden aller Screens dieses Files f}hren. Siehe auch LOADFROM.
|
||||
|
||||
CAPACITY ( -- u ) "capacity"
|
||||
u ist die L{nge des aktuellen Files in Forth-Bl|cken (1024 Bytes).
|
||||
Beachten Sie bitte, da~ die L{nge des Files um eins gr|~er ist als die
|
||||
Nummer des letzten Blocks, da der Block 0 mitgez{hlt wird.
|
||||
|
||||
FORTHFILES ( -- ) "forthfiles"
|
||||
Druckt eine Liste aller Forthfiles, zusammen mit den Namen der zuge
|
||||
h|rigen DOS-Files, deren L{nge und deren Status (ge|ffnet / geschlossen).
|
||||
|
||||
FROMFILE ( -- addr ) "fromfile"
|
||||
Addr ist die Adresse einer Variablen, die auf das Forth-File zeigt, aus
|
||||
dem COPY und CONVEY Bl|cke lesen. Siehe auch FROM. Bei Nennen eines
|
||||
Forthfiles wird diese Variable gesetzt.
|
||||
|
||||
LOADFILE ( -- addr ) "loadfile"
|
||||
Addr ist die Adresse einer Variablen, die auf das Forthfile zeigt, das
|
||||
gerade geladen wird. Diese Variable wird bei Aufruf von LOAD, THRU usw.
|
||||
auf das aktuelle File gesetzt.
|
||||
|
||||
ISFILE ( -- addr ) "isfile"
|
||||
Addr ist die Adresse einer Variablen, die auf das aktuelle Forthfile
|
||||
zeigt. Sie wird bei Ausf}hrung eines Forthfiles gesetzt.
|
||||
|
||||
FILE? ( -- ) "file-question"
|
||||
Druckt den Namen des aktuellen Forthfiles.
|
||||
|
||||
MORE ( n -- ) "more"
|
||||
Verl{ngert das aktuelle File um n Screens. Die Screens werden hinten
|
||||
angeh{ngt. Anschlie~end wird das File geschloseen.
|
||||
|
||||
EOF ( -- f) "end-of-file"
|
||||
f ist ein Flag, das wahr ist, falls }ber das Ende des Files hinausgelesen
|
||||
wurde. f ist falsch, falls auf den zuletzt gelesenen Block noch weitere
|
||||
folgen.
|
||||
|
||||
.PA
|
||||
3) Verschiedenes
________________
|
||||
|
||||
Beim Vergessen eines Forth-Files mit Hilfe von FORGET, EMPTY usw. werden
|
||||
automatisch alle Blockpuffer, die aus diesem File stammen, gel|scht, und,
|
||||
wenn sie ge{ndert waren, auf die Diskette zur}ckgeschrieben. Das File wird
|
||||
anschlie~end geschlossen.
|
||||
|
||||
Bei Verwendung von FLUSH werden alle Files geschlossen. FLUSH sollte VOR jedem
|
||||
Diskettenwechsel ausgef}hrt werden, und zwar nicht nur, um die ge{nderten
|
||||
Bl|cke zur}ckzuschreiebn, sondern auch damit alle Files geschlossen werden.
|
||||
Sind n{mlich Files gleichen Namens auf der neuen Diskette vorhanden, so wird
|
||||
sonst eine abweichende L{nge des neuen Files vom Forth nicht erkannt.
|
||||
Nach dem Diskettenwechsel verlangt CP/M das "einloggen" der neuen Diskette.
|
||||
Dies geschieht mit DOS RESET. Wenn dies vergessen wird, so erh{lt man nach
|
||||
einem Schreibversuch auf die neue Diskette "BDOS-ERROR ON xx R/O" und landet
|
||||
zu allem ]berflu~ im CCP. Warum?? Fragen Sie Digital Research!
|
||||
|
||||
Bei Verwendung von VIEW wird automatisch das richtige File ge|ffnet.
|
||||
|
||||
|
||||
.PA
|
||||
4) CP/M 2.2. interne Worte des Filesystems (Implementation)
|
||||
|
||||
In diesem Abschnitt findet sich das Glossary f}r die Worte, die zur
|
||||
Implementation des Filesystems benutzt werden. Da das Filesystem noch
|
||||
recht neu ist, sind noch fast alle Namen sichtbar. Das kann sich aber
|
||||
{ndern, wenn klar ist, welche Worte man nicht mehr benutzt.
|
||||
Im Glossary wird oft von Forth-FCB (File-Control-Block) gesprochen. Das
|
||||
sind Speicherbereiche, mit denen Files beschrieben werden. Auch CP/M
|
||||
kennt FCBs. Die CP/M Filefunktionen erwarten alle einen DOS-FCB zur
|
||||
Beschreibung der Files. Die Worte, die diese Funktionen ausl|sen erwarten
|
||||
aber einen Forth-FCB, die im volksFORTH-Filesystem }bliche Beschreibung
|
||||
von Files. Wenn die Gefahr der Verwechselung besteht, so wird ausdr}ck
|
||||
lich von Forth-FCBs und DOS-FCBs gesprochen. Allgemein ist mit der Angabe
|
||||
von FCB ein Forth-FCB gemeint. Seine Struktur ist aus dem Quelltext
|
||||
ersichtlich. (Befehlsfolge: DOS VIEW B/FCB)
|
||||
|
||||
!fcb ( fcb -- ) "store-f-c-b"
|
||||
Interpretiert das als n{chstes in der Eingabe sthende Wort als Filename
|
||||
und weist es dem fcb zu.
|
||||
|
||||
!name ( addr len fcb -- ) "store-name"
|
||||
addr gibt die Anfangsadresse eines Strings an, der die L{nge len hat und
|
||||
einen Filenamen enth{lt. Dieser Name wird in den fcb eingetragen.
|
||||
Enth{lt er keine Laufwerksangabe, so wird das aktuelle Laufwerk benutzt
|
||||
und in den FCB geschrieben.
|
||||
|
||||
(capacity ( forthfcb -- n ) "paren-capacity"
|
||||
n ist die Filegr|~e des durch forthfcb beschrieben Files in Forth-
|
||||
Bl|cken.
|
||||
|
||||
(close ( fcb -- ) "paren-close"
|
||||
Schlie~t das File, das durch fcb beschrieben wird. Schreibt alle
|
||||
ver{nderten Bl|cke dieses Files auf die Diskette zur}ck und l|scht alle
|
||||
Bl|cke dieses Files in den Blockpuffern.
|
||||
|
||||
(closefile ( forthfcb -- f ) "paren-closefile"
|
||||
Schlie~t das durch den Forth-FCB angegebene File. f=$FF bedeutet, da~ das
|
||||
File nicht gefunden werden konnte. (Siehe CP/M Operating System Manual)
|
||||
|
||||
(createfile ( forthfcb -- f ) "paren-createfile"
|
||||
Erzeugt ein File, das durch den angegebenen Forth-FCB beschrieben wird.
|
||||
f=$FF bedeutet, da~ im Inhaltsverzeichnis der Diskette kein Platz mehr
|
||||
ist. (Siehe CP/M Operating System Manual)
|
||||
|
||||
(dir ( addr len -- ) "paren-dir"
|
||||
addr ist die Anfangsadresse eines Strings der L{nge len, der ein
|
||||
Suchmuster enth{lt. (dir zeigt die Files an, die auf dieses suchmuster
|
||||
passen. Siehe SEARCH0, SEARCHNEXT, FILES, FILES".
|
||||
|
||||
(file-read ( forthfcb -- f ) "paren-file-read"
|
||||
Liest den im Record-Feld des angegebenen Forth-FCB's bestimten Sektor in
|
||||
den Sektorpuffer ein. f<>0 bedeutet, da~ Daten fehlen.
|
||||
(Siehe CP/M Operating System Manual)
|
||||
|
||||
(file-write ( forthfcb -- f ) "paren-file-write"
|
||||
Schreibt den Sektorpuffer auf den im Record-Feld des angegebenen Forth-
|
||||
FCB's bestimten Sektor. f<>0 bedeutet, da~ die Diskette voll ist.
|
||||
(Siehe CP/M Operating System Manual)
|
||||
.pa
|
||||
(killfile ( forthfcb -- f ) "paren-killfile"
|
||||
L|scht das durch den Forth-FCB angegebene File. f=$FF bedeutet, da~ das
|
||||
File nicht gefunden werden konnte. (Siehe CP/M Operating System Manual)
|
||||
|
||||
(makeview ( -- n ) "paren-make-view"
|
||||
n ist eine Zahl die aus dem momentanen Block (BLK) und dem aktuellen File
|
||||
(LOADFILE) berechnet wird. Sie wird in das VIEW-Feld einer neuen
|
||||
Definition geschrieben, und dient dazu sp{ter mit VIEW den Definitions-
|
||||
Ort zu bestimmen.
|
||||
|
||||
(open ( fcb -- ) "paren-open"
|
||||
\ffnet das durch den FCB angegebene File und tr{gt dessen L{nge ein.
|
||||
Meldet einen Fehler, falls das File nicht gefunden werden konnte.
|
||||
|
||||
(openfile ( forthfcb -- f ) "paren-open-file"
|
||||
\ffnet das durch den Forth-FCB angegebene File. f=$FF bedeutet, da~ das
|
||||
File nicht gefunden werden konnte. (Siehe CP/M Operating System Manual)
|
||||
|
||||
(read-seq ( forthfcb -- f ) "paren-read-sequential"
|
||||
Liest den n{chsten Sektor aus dem durch den Forth-FCB angegebene File in
|
||||
den Sektorpuffer ein. f<>0 bedeutet, da~ keine Daten mehr zur Verf}gung
|
||||
stehen.
|
||||
(Siehe CP/M Operating System Manual)
|
||||
|
||||
(view ( viewblk -- blk' ) "paren-view"
|
||||
blk' ist die relative Blocknummer zum Anfang des in viewblk enthaltenen
|
||||
Files. viewblock hat die Form: fffffffbbbbbbbbb. Wobei f Bits f}r die
|
||||
Filenummer, b Bits f}r den Block angeben. Das File wird von (VIEW auto
|
||||
matisch ge|ffnet.
|
||||
|
||||
(write-seq ( forthfcb -- f ) "paren-write-sequential"
|
||||
Schreibt den n{chsten Sektor aus dem Sektorpuffer in das durch den Forth-
|
||||
FCB angegebene File. f<>0 bedeutet, da~ die Diskette voll ist.
|
||||
(Siehe CP/M Operating System Manual)
|
||||
|
||||
.buffers ( -- ) "dot-buffers"
|
||||
Gibt eine Liste der Block-puffer aus, die angibt, welchen Block aus
|
||||
welchem File die Puffer enthalten, und ob sie als UPDATEd markiert sind.
|
||||
|
||||
.dosfile ( fcb -- ) "dot-dosfile"
|
||||
Gibt den Dos-Namen des durch fcb angegebenen Files aus.
|
||||
|
||||
.fcb ( fcb -- ) "dot-f-c-b"
|
||||
Gibt den Forth-Namen, den Dos-Namen, die Filegr|~e und den Status
|
||||
(ge|ffnet / geschlossen ) des durch fcb angegebenen Files aus.
|
||||
|
||||
.file ( fcb -- ) "dot-file"
|
||||
Gibt den Forth-Namen des durch fcb angegebenen Files aus.
|
||||
|
||||
b/fcb ( -- n ) "bytes-per-f-c-b"
|
||||
n gibt an, wieviele Bytes ein Forth-FCB belegt.
|
||||
|
||||
b/rec ( -- n ) "bytes-per-record"
|
||||
n gibt an, wieviele Bytes in die Sektoren passen, die vom Betriebssystem
|
||||
benutzt werden. Bei CP/M 2.2 sind dies 128 Bytes.
|
||||
.pa
|
||||
bdos ( arg fun# -- res ) "bdos"
|
||||
Veranla~t einen Sprung ins BDOS. fun# ist der Wert, der ins C-Register
|
||||
geladen wird, die Nummer der aufzurufenden Funktion. arg ist der Wert,
|
||||
der ins DE-Register geladen werden soll, und res ist der Wert, der vom
|
||||
BDOS im A-Register zur}ckgeliefert wird. CP/M BDOS-Aufrufe sind im
|
||||
Operating System Manual beschrieben.
|
||||
|
||||
createfile ( fcb -- ) "createfile"
|
||||
Erzeugt ein File, da~ durch den FCB beschrieben wird. Meldet einen
|
||||
Fehler, falls dies nicht m|glich ist.
|
||||
|
||||
default-buffer ( -- addr ) "default-buffer"
|
||||
addr ist die Adresse des Standard Sektorpuffers des BDOS.
|
||||
|
||||
Dos ( -- ) "dos"
|
||||
Das Vocabulary, indem die meisten Definitionen des Filesystems gemacht
|
||||
werden.
|
||||
|
||||
dos-error? ( n -- f ) "dos-error-question"
|
||||
f ist TRUE, wenn n=$FF ist, denn das ist das Kennzeichen des BDOS f}r
|
||||
einen Fehler.
|
||||
|
||||
drive ( forthfcb -- addr ) "drive"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, unter der das
|
||||
Laufwerk eingetragen ist.
|
||||
|
||||
extension ( forthfcb -- addr ) "extension"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der die
|
||||
Extension beginnt.
|
||||
|
||||
fcb0 ( -- addr ) "f-c-b-zero"
|
||||
addr ist die Adresse, des vom CCP-benutzten Standard-File-Control-Blocks,
|
||||
so ver{ndert, da~ er einen Forth-FCB halten kann.
|
||||
|
||||
file-link ( -- addr ) "file-link"
|
||||
addr ist die Adresse einer User-Variablen, die auf den Anfang der Forth-
|
||||
file-liste zeigt.
|
||||
|
||||
file-r/w ( buffer block fcb r/wf -- f ) "file-r-w"
|
||||
Liest oder schreibt einen Forth-Block von der / auf die Diskette.
|
||||
r/wf gibt an, ob gelesen (rw/f<>FALSE) oder geschrieben (rw/f=FALSE)
|
||||
werden soll.
|
||||
block ist die Nummer des Blocks, buffer die Adresse des Puffers.
|
||||
fcb bestimmt, ob ein File benutzt wird (fcb<>0 ist dann die Adresse
|
||||
eines FCB) oder ob im Direktzugriff gearbeitet werden soll (fcb=0).
|
||||
f ist TRUE, falls ein Fehler aufgetreten ist. Vergleiche R/W.
|
||||
|
||||
filename ( forthfcb -- addr ) "filename"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der der
|
||||
Filename beginnt.
|
||||
|
||||
filenamelen ( -- n ) "filenamelen"
|
||||
n gibt die L{nge der im Betriebssystem benutzten Filenamen an. Bei CP/M
|
||||
sind dies 11 Zeichen (8 Name + 3 Extension)
|
||||
|
||||
fileno ( forthfcb -- addr ) "file-number"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der die
|
||||
Filenummer abgelegt ist.
|
||||
.pa
|
||||
filesize ( forthfcb -- addr ) "filesize"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der die
|
||||
Filegr|~e (in Sectoren) abgelegt ist.
|
||||
|
||||
in-range ( block fcb -- ) "in-range"
|
||||
Testet, ob der Forth-Block block in dem durch fcb angegebenen File liegt,
|
||||
und gibt eine Fehlermeldung aus, falls dies nicht der Fall ist.
|
||||
|
||||
|
||||
opened ( forthfcb -- addr ) "opened"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der das open-
|
||||
Flag abgelegt ist.
|
||||
|
||||
read-seq ( -- ) "read-sequential"
|
||||
Liest den n{chsten Sektor aus dem aktuellen File in den Sektorpuffer und
|
||||
liefert einen Fehler, falls dies nicht m|glich ist.
|
||||
|
||||
rec/blk ( -- n ) "bytes-per-record"
|
||||
n gibt an, wieviele logische CP/M-Sectoren (128 Bytes) in einen Forth-
|
||||
Block passen. Nach dem Forth-83 Standard ist ein Forth-Block 1024 Bytes
|
||||
gro~, B/REC ist dann also 8.
|
||||
|
||||
record ( forthfcb -- addr ) "record"
|
||||
Berechnet aus der Adresse eines Forth-FCBs die Adresse, an der der
|
||||
Recordz{hler f}r Random-Access-Files beginnt.
|
||||
|
||||
reset ( -- ) "reset"
|
||||
Initialisiert das Diskettensystem des BDOS. Mu~ nach einem Disketten
|
||||
wechsel benutzt werden! (Siehe CP/M Operating System Manual)
|
||||
|
||||
search0 ( forthfcb -- f ) "search-zero"
|
||||
Sucht im Inhaltsverzeichnis der Diskette nach dem ersten Vorkommen, des
|
||||
durch den Forth-FCB angegebenen Files. f=$FF bedeutet, da~ das File nicht
|
||||
gefunden werden konnte.
|
||||
(Siehe CP/M Operating System Manual)
|
||||
|
||||
searchnext ( forthfcb -- f ) "serach-next"
|
||||
Sucht im Inhaltsverzeichnis der Diskette nach dem n{chsten Vorkommen, des
|
||||
durch den Forth-FCB angegebenen Files. f=$FF bedeutet, da~ das File nicht
|
||||
gefunden werden konnte.
|
||||
(Siehe CP/M Operating System Manual)
|
||||
|
||||
setdma ( dma -- ) "set-d-m-a"
|
||||
dma ist die Adresse des Sektorpuffers, der beim n{chsten Diskettenzugriff
|
||||
benutzt werden soll (Siehe CP/M Operating System Manual)
|
||||
|
||||
size ( forthfcb -- ) "size"
|
||||
Berechnet die Filegr|~e in dem durch den Forth-FCB beschriebenen File und
|
||||
tr{gt sie in das Feld record ein. (Siehe CP/M Operating System Manual)
|
||||
|
||||
tab ( -- ) "tab"
|
||||
Geht auf die n{chste Tabulatorposition (alle 20 Spalten).
|
||||
|
||||
write-seq ( -- ) "write-sequential"
|
||||
Schreibt einen Sektor aus dem Sektorpuffer als n{chsten Sektor des
|
||||
aktuellen Files und meldet einen Fehler, falls dies nicht m|glich ist.
|
106
8080/CPM/DOC/DE/INSTALL.txt
Normal file
106
8080/CPM/DOC/DE/INSTALL.txt
Normal file
@ -0,0 +1,106 @@
|
||||
.OP
|
||||
Wie fange ich an?
|
||||
-----------------
|
||||
|
||||
In diesem Text soll der Vorgang der Installation von volksFORTH an ein CP/M-
|
||||
KomputerSystem (Bildschirm, Tastatur, Drucker) beschrieben werden.
|
||||
Auf der ausgelieferten Diskette finden sich folgende Files:
|
||||
|
||||
ASS8080 SCR Der volksFORTH 8080-Assembler
|
||||
ASSTRAN SCR Zum Laden des Assembler auf den Heap
|
||||
DISASS SCR Ein Z80-Disassembler fuer volksFORTH
|
||||
DOUBLE SCR Definitionsn fuer doppeltgenaue Zahlen
|
||||
EDITOR SCR Der volksFORTH Full-Screen Editor
|
||||
FILEINT SCR Das volksFORTH Fileinterface zu CP/M 2.2
|
||||
HASHCASH SCR Ein schnelles Dictionary-Suchverfahren
|
||||
INSTALL SCR Der Installer f}r die Editor-Befehlstasten
|
||||
KERNEL COM Der volksFORTH Kern (Terminal unabh{ngig)
|
||||
PORT8080 SCR Definitionen f}r 8080 Portzugriff
|
||||
PORTZ80 SCR Definitionen f}r Z80 Protzugriff
|
||||
PRIMED SCR Der primitivst Editor zum Installieren
|
||||
PRINTER SCR Anpassung von volksFORTH an den Drucker
|
||||
RELOCATE SCR Das Utility-Wort BUFFERS
|
||||
SAVESYS SCR Das Utility-Wort SAVESYSTEM
|
||||
SEE SCR Der automatische Decompiler
|
||||
SIMPFILE SCR Ein einfaches Filesystem f}r Direktzugriff
|
||||
SOURCE SCR Der Quelltext des volksFORTH Kerns
|
||||
STARTUP SCR Load-File, das aus KERNEL.COM VOLKS4TH.COM macht
|
||||
STRING SCR Definitionen f}r Stringoperationen
|
||||
TASKER SCR Der volksFORTH Multitasker
|
||||
TERMINAL SCR Definitionen f}r das installierte Terminal
|
||||
TIMES SCR Die Utility-Worte OFTEN und TIMES
|
||||
TOOLS SCR Der manuelle Decompiler, DUMP und der Tracer
|
||||
VOLKS4TH COM Das volksFORTH Standard-System
|
||||
|
||||
|
||||
************************ A C H T U N G ***********************
|
||||
* *
|
||||
* Bevor Sie irgendetwas mit dem System ausprobieren: *
|
||||
* Machen Sie Sicherheitskopien von den Orginaldisketten. *
|
||||
* *
|
||||
**************************************************************
|
||||
|
||||
|
||||
|
||||
0) Drei wichtige Worte: USE, LIST und LOAD
|
||||
|
||||
volksFORTH bearbeitet seine Programmtexte in sogenannten Screen Files
|
||||
(Nachname: .SCR), das sind Files, die in 1 kB gro~e Screens aufgeteit
|
||||
sind, die wiederum in 16 Zeilen mit je 64 Zeichen strukturiert sind. Um
|
||||
ein schon existentes File als aktuelles File anzuw{hlen wird das Wort USE
|
||||
<filename> benutzt. (Beispiel: USE TERMINAL.SCR, w{hlt TERMINAL.SCR als
|
||||
aktuelles File.) Um sich nun einen bestimmten Screen anzusehen, wird nn
|
||||
LIST benutzt. (Beispiel: 1 LIST, zeigt Screen 1 des aktuellen Files.)
|
||||
Mit nn LOAD wird ein bestimmter Screen geladen: Die Definitionen in
|
||||
diesem Screen werden in eine f}r den Komputer ausf}hrbare Form gebracht.
|
||||
(Beispiel: 1 LOAD, l{dt Screen 1 des aktuellen Files.)
|
||||
Per Konvention soll der Screen null eines jeden Files eine Erkl{rung des
|
||||
Inhaltes des Files enthalten. Wird Screen eins, der sogenannte LOAD-
|
||||
Screen, geladen, so soll er das Laden der gesamten Definitionen des Files
|
||||
veranlassen.
|
||||
Zeile Null eines jeden Screens soll Auskunft }ber den Inhalt des Screens
|
||||
geben.
|
||||
|
||||
|
||||
|
||||
|
||||
1) Die Anpassung von volksFORTH an den Komputer
|
||||
|
||||
Damit das volksFORTH in vollem Umfang benutzt werden kann, ist zun{chst
|
||||
eine Installation erforderlich. F}r Schneider-Komputer ist diese schon
|
||||
von uns vorgenommen worden, soda~ es gleich richtig losgehen kann.
|
||||
Die Anpassung an einen anderen Komputer beinhaltet:
|
||||
|
||||
a) Anpassung der Bildschirmfunktionen
|
||||
In dem File TERMINAL.SCR werden die notwendigen Bildschirmfunktionen
|
||||
definiert. Diese m}ssen auf den neuen Bildschirm angepa~t werden.
|
||||
Da der Editor erst nach erfolgreicher Anpassung benutzt werden kann,
|
||||
m}ssen diese Screens auf andere Art und Weise ge{ndert werden.
|
||||
Dazu kann der Primitivst-Editor im File PRIMED.SCR benutzt werden.
|
||||
Die normalerweise zu benutzenden Escape-Sequenzen, sind dem ent
|
||||
sprechenden Terminal-Handbuch zu entnehmen. Mit USE PRIMED.SCR 1
|
||||
LOAD den primitivst Editor laden. (Screen 0 enth{lt Anleitung,
|
||||
Screen 2 ein Beispiel). Dann mit USE TERMINAL.SCR dieses File zur
|
||||
Benutzung anw{hlen. PRIMED arbeitet dann auf diesem File.
|
||||
|
||||
b) Anpassung der Editor-Befehlstasten
|
||||
Im File EDITOR.SCR gibt es eine Tabelle mit Namen KEYTABLE, in der
|
||||
die Tasten zu den in der Tabelle ACTIONTABLE definierten Befehlen
|
||||
angegeben werden. Durch [ndern der Tabelle KEYTABLE k|nnen die
|
||||
Befehlstasten des Editors ver{ndert werden.
|
||||
Zum einfachen Anpassen des Editors gibt es das File INSTALL.SCR,
|
||||
indem interaktiv die neuen Befehlstasten abgefragt werden.
|
||||
(Achtung!: Der Sourcetext wird nicht mitge{ndert!!)
|
||||
|
||||
|
||||
2) Die Anpassung von volksFORTH an den Drucker
|
||||
|
||||
In dem File PRINTER.SCR wird die Ansteuerung des Druckers (hier Epson
|
||||
FX80) definiert. Sollte kein Epson-kompatibler Drucker vorliegen, m}ssen
|
||||
auch hier die Escape-Sequenzen ge{ndert werden.(Siehe Druckerhandbuch!)
|
||||
Dies sollte aber m|glichst erst dann geschehen, wenn die restlichen An
|
||||
passungen laufen!
|
||||
|
||||
|
||||
|
||||
|
19
8080/CPM/DOC/DE/README.txt
Normal file
19
8080/CPM/DOC/DE/README.txt
Normal file
@ -0,0 +1,19 @@
|
||||
volksFORTH und der Platzmangel auf Disketten 7.7.87
|
||||
|
||||
Das volksFORTH Softwaresystem, so wie es zur Zeit in der Version 3.80
|
||||
f}r CP/M 2.2 ausgeteilt wir, hat einen Umfang von ca. 400 kB, zu gro~
|
||||
f}r einige Diskettenformate.
|
||||
Um diesem Dilemma zu entgegnen haben wir dem volksFORTH System das
|
||||
Public Domain Programm NSWP.COM (inclusive Doku) beigef}gt, und die
|
||||
Screenfiles damit bearbeitet (Huffman-Kompression bringt Screenfiles
|
||||
typischer Weise auf 1/3 bis 1/2 der Gr|~e).
|
||||
Um nun mit dem System arbeiten zu k|nnen, m}ssen die Screenfiles zuerst
|
||||
wieder expandiert werden. Dies geschieht auch mit Hilfe von NSWP.COM.
|
||||
1) NSWP aufrufen.
|
||||
2) mit W *.SQR alle komprimierten Screenfiles anw{hlen
|
||||
3) mit Q und U und der Angabe einer leeren (!) Diskette
|
||||
Files expandieren.
|
||||
|
||||
|
||||
Als dann viel Erfolg und Spa~,
|
||||
Ulrich Hoffmann
|
Loading…
x
Reference in New Issue
Block a user