VolksForth/8080/CPM/DOC/DE/CPMSPECI.ORG

252 lines
13 KiB
Plaintext
Raw Normal View History

2020-06-28 14:26:46 +00:00
#+Title: CP/M 2.2 - spezifische Worte
2020-06-28 14:19:40 +00:00
2020-06-28 14:30:36 +00:00
* =#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=.
2020-06-28 14:19:40 +00:00
(cr ( -- ) "paren-c-r"
2020-06-28 14:26:46 +00:00
Setzt den Cursor in die erste Spalte der n{chsten Zeile. PAUSE wird
ausgeführt.
2020-06-28 14:19:40 +00:00
(decode ( addr pos1 key --- addr pos2 ) "paren-decode"
2020-06-28 14:26:46 +00:00
Wertet key aus. key wird in der Speicherzelle addr+pos1 abgelegt und
2020-06-28 14:19:40 +00:00
als Echo auf dem Bildschirm ausgegeben. Die Variable SPAN und pos1
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
(del ( -- ) "paren-del"
L|scht ein Zeichen links vom Cursor. Benutzt dabei CURLEFT.
Vergleiche auch DEL.
(emit ( 8b -- ) "paren-emit"
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
Vergleiche CON! und EMIT.
(expect ( addr len -- ) "paren-expect"
2020-06-28 14:26:46 +00:00
Erwartet len Zeichen vom Eingabeger{t, die ab addr im Speicher
2020-06-28 14:19:40 +00:00
abgelegt werden. Ein Echo der Zeichne wird ausgegeben. Return be
2020-06-28 14:26:46 +00:00
endet die Eingabe vorzeitig. Ein abschlie~endes Leerzeichen wird
immer ausgegeben. Die L{nge der Zeichenkette wird in der Variablen
SPAN übergeben. Vergleiche EXPECT.
2020-06-28 14:19:40 +00:00
.PA
(key ( -- char ) "paren-key"
2020-06-28 14:26:46 +00:00
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,
2020-06-28 14:19:40 +00:00
sondern unver{ndert abgeliefert. Vergleiche KEY.
(key? ( -- flag ) "paren-key-question"
2020-06-28 14:26:46 +00:00
flag ist TRUE, wenn eine Taste gedrückt wurde, sonst false.
2020-06-28 14:19:40 +00:00
Vergleiche auch KEY?.
(page ( -- ) "paren-page"
2020-06-28 14:26:46 +00:00
L|scht den Bildschirm, positioniert den Cursor in die linke obere
2020-06-28 14:19:40 +00:00
Ecke und setzt OUT auf null. Siehe auch LOCATE und PAGE.
(r/w ( adr blk file r/wf -- flag ) "paren-r-w"
2020-06-28 14:26:46 +00:00
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
2020-06-28 14:19:40 +00:00
Diskettenfehler vorlag.
(type ( addr len -- ) "paren-type"
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
/drive ( blk -- blk' drv ) "per-drive"
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
>drive ( blk drv -- block' ) "to-drive"
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
?drive-error ( f -- ) "question-drive-error"
Ist f=FALSE, so wird "beyond capacity" als Fehlermeldung ausgegeben.
?drive ( n -- n ) "question-drive"
2020-06-28 14:26:46 +00:00
]berprüft, ob das Laufwerk n existiert, und gibt "beyond capacity"
2020-06-28 14:19:40 +00:00
als Fehlermeldung aus, wenn dies nicht der Fall ist.
b/blk ( -- b/blk ) "bytes-per-block"
2020-06-28 14:26:46 +00:00
Eine Konstante die angibt, wieviele Bytes in einen Forth-Block
passen. Nach dem Forth-83 Standard ist B/BLK = &1024.
2020-06-28 14:19:40 +00:00
bios ( -- addr ) "bios"
Adresse eines 8080-Unterprogramms, das einen Sprung ins BIOS aus
2020-06-28 14:26:46 +00:00
führt. Das Low-Byte der Einsprungadresse steht dabei in HL. Wird von
2020-06-28 14:19:40 +00:00
con!, (key?, getkey und read/write benutzt.
blk/drv ( -- #blk ) "blocks-per-drive"
2020-06-28 14:26:46 +00:00
#blk gibt die Kapazit{t des aktuellen Laufwerks (bestimmt durch
2020-06-28 14:19:40 +00:00
OFFSET) in Forth-Bl|cken (1kB) an. Siehe (BLK/DRV.
.PA
2020-06-28 14:26:46 +00:00
con! ( 8b -- ) "con-store"
Gibt 8b auf die CONsole (Bildschirm) aus. Ascii-Werte < $20 werden
2020-06-28 14:19:40 +00:00
als Steuercodes interpretiert.
curleft ( -- ) "cur-left"
2020-06-28 14:26:46 +00:00
Bewegt den Cursor ein Zeichen nach links. Eine der vordefinierten
2020-06-28 14:19:40 +00:00
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"
2020-06-28 14:26:46 +00:00
Bewegt den Cursor ein Zeichen nach rechts. Eine der vordefinierten
Terminalfunktionen.
2020-06-28 14:19:40 +00:00
dark ( -- ) "dark"
2020-06-28 14:26:46 +00:00
L|scht den Bildschirm. Eine der vordefinierten Terminalfunktionen.
2020-06-28 14:19:40 +00:00
display ( -- ) "display"
Ein mit OUTPUT: definiertes Wort, das den Bildschirm als Ausgabe
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
Siehe TERMINAL:.
dma! ( addr -- ) "d-m-a-store"
addr ist die Adresse des Diskettenpuffers, der beim n{chsten Dis
2020-06-28 14:26:46 +00:00
kettenzugriff verwendet werden soll.
2020-06-28 14:19:40 +00:00
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
2020-06-28 14:26:46 +00:00
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
2020-06-28 14:19:40 +00:00
Disk-Parameter-Headders. (Siehe CP/M Operating System Manual)
Ist dph=0, so ist das angesprochene Laufwerk in diesem Komputer
2020-06-28 14:26:46 +00:00
system nicht unterstützt.
2020-06-28 14:19:40 +00:00
drv? ( blk -- drv ) "drive-question"
2020-06-28 14:26:46 +00:00
blk gibt die absolute Nummer eines FORTH-Blocks an, DRV? berechnet
2020-06-28 14:19:40 +00:00
daraus das Laufwerk (drv) auf dem er zu finden ist.
Siehe /DRIVE, >DRIVE.
drv0 ( -- ) "drive-zero"
2020-06-28 14:26:46 +00:00
W{hlt Laufwerk 0 (A) als aktuelles Laufwerk für R/W an. Siehe DRIVE
2020-06-28 14:19:40 +00:00
und >DRIVE.
drv1 ( -- ) "drive-one"
2020-06-28 14:26:46 +00:00
W{hlt Laufwerk 1 (B) als aktuelles Laufwerk für R/W an. Siehe DRIVE
2020-06-28 14:19:40 +00:00
und >DRIVE.
drvinit ( -- ) "drive-init"
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
dumb ( -- ) "dumb"
2020-06-28 14:26:46 +00:00
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
2020-06-28 14:19:40 +00:00
eingeschaltet ist, sind also auch PAGE, AT und DEL wirkungslos.
2020-06-28 14:26:46 +00:00
DUMB ist als aktuelles Terminal angew{hlt, bis die Installierung
2020-06-28 14:19:40 +00:00
eines leistungsf{higeren Terminals abgeschlossen ist.
getkey ( -- char ) "getkey"
2020-06-28 14:26:46 +00:00
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.
2020-06-28 14:19:40 +00:00
home ( -- ) "home"
2020-06-28 14:26:46 +00:00
Der Kopf des momentan selektierte Diskettenlaufwerks wird auf Spur
null gefahren. Spur null wird als n{chste Spur angew{hlt, die
2020-06-28 14:19:40 +00:00
verwendet werden soll. Siehe TRK!, DRV!.
index ( from to -- ) "index"
2020-06-28 14:26:46 +00:00
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
2020-06-28 14:19:40 +00:00
chararkterisieren.
keyboard ( -- ) "keyboard"
2020-06-28 14:26:46 +00:00
Ein mit INPUT: definiertes Wort, das die Tastatur als Eingabeger{t
anw{hlt. Die Worte KEY, KEY?, DECODE und EXPECT beziehen sich nun
2020-06-28 14:19:40 +00:00
auf die Tastatur. Siehe (KEY, (KEY? (DECODE, (EXPECT.
locate ( row col -- ) "locate"
Bewegt den Cursor absolut auf Spalte col, Zeile row.
2020-06-28 14:26:46 +00:00
Eine der vordefinierten Terminalfunktionen.
2020-06-28 14:19:40 +00:00
out ( -- addr ) "out"
2020-06-28 14:26:46 +00:00
Adresse einer Variablen, die die Anzahl der ausgegebenen Zeichen
enth{lt.
2020-06-28 14:19:40 +00:00
read/write ( r/wf sponti -- f ) "read-write"
2020-06-28 14:26:46 +00:00
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
2020-06-28 14:19:40 +00:00
mit DRV!, TRK!, SEC! und DMA! gew{hlt worden.
2020-06-28 14:26:46 +00:00
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).
2020-06-28 14:19:40 +00:00
rvsoff ( -- ) "reverse-off"
2020-06-28 14:26:46 +00:00
Schaltet die Inversdarstellung aus. Eine der vordefinierten
2020-06-28 14:19:40 +00:00
Terminalfunktionen.
2020-06-28 14:26:46 +00:00
2020-06-28 14:19:40 +00:00
rvson ( -- ) "reverse-on"
2020-06-28 14:26:46 +00:00
Schaltet die Inversedarstellung ein. Eine der vordefinierten
2020-06-28 14:19:40 +00:00
Terminalfunktionen.
sec! ( sec -- ) "sec-store"
sec ist der beim n{chsten Diskettenzugriff zu verwendende Sektor.
.PA
2020-06-28 14:26:46 +00:00
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,
2020-06-28 14:19:40 +00:00
CURRITE, RVSON, RVSOFF, DARK und LOCATE. Siehe auch TERMINAL:
Terminal: ( -- ) "terminal-colon"
2020-06-28 14:26:46 +00:00
Ein definierendes Wort für Terminals. Benutzt in der Form:
2020-06-28 14:19:40 +00:00
Terminal: <name>
2020-06-28 14:26:46 +00:00
newCURON newCUROFF newCURLEFT newCURRITE
2020-06-28 14:19:40 +00:00
newRVSON newRVSOFF newDARK newLOACTE ;
2020-06-28 14:26:46 +00:00
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
2020-06-28 14:19:40 +00:00
die Terminalfunktionen von <name> zu den aktuellen Terminal
funktionen gemacht, das Terminal <name> ist damit aktiv. Terminal
2020-06-28 14:26:46 +00:00
funktionen werden von AT, PAGE, DEL ausgeführt, wenn die Ausgabe auf
2020-06-28 14:19:40 +00:00
DISPLAY geschaltet ist. Siehe OUTPUT:, DISPLAY, DUMB.
trk! ( trk -- ) "track-store"
trk ist die beim n{chsten Diskettenzugriff zu verwendende Spur.
2020-06-28 14:26:46 +00:00