mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-25 10:30:57 +00:00
12 KiB
12 KiB
Änderungen im volksForth Atari ST
Version 3.80 gegenüber 3.7 ff
Wir haben versucht, in diesem Dokument alle Änderungen seit Version 3.7 zu erfassen. Dies ist für alle interessant, die bereits fertige Programme haben und diese nun anpassen möchten. Drei Hauptänderungen müssen dabei berücksichtigt werden: Das Fileinterface, die Änderungen im GEM und die Relokabilität des Systems.
Nicht verschweigen wollen wir, daß wir eine Fülle kleiner Fehler und Unschönheiten korrigiert haben, nicht zuletzt aufgrund von Rückmeldungen der volksFORTH-83 Benutzer!
FORTH_83.SCR
- Das System ist relokatibel. Betroffen sind alle Assemblerworte, die
mit dem Register D7 gearbeitet haben. Das Wort
MEMPAGE
gibt es nicht mehr. Stattdessen gibt es das neue WortFORTHSTART
, das eine Langadresse liefert, die den Anfang des Systems kennzeichnet. Dort befinden sich die Informationen, die GEM-Dos zum Aufbau der Basepage braucht. UP
ist eine Variable geworden (bisher Register A3).- Im Kernel enthalten sind jetzt die Worte, die unter DOUBLE
zusammengefaßt waren, also
2@
,2!
,2VARIABLE
,2CONSTANT
,2OVER
,2SWAP
undD-
. - Ebenfalls im Kernel sind die Langoperationen, die auf den gesamten
Ram-Speicher arbeiten können als da sind:
LC@
,LC!
,L@
,L!
,LCMOVE
(fehlerfrei),L2@
,L2!
undLN+!
. UM/MOD
erzeugt die Fehlermeldung "division overflow".- Der Fehler in
-ROLL
wurde behoben. drvinit
ist mit: drvinit noop ;
definiert. Damit ist es möglich, dort Routinen zu patchen, die nach dem Booten des Systems ausgeführt werden sollen. Davon macht z.B. der Editor Gebrauch.- Es gibt ein
(LOAD
, dem Screennummer und Position im Block übergeben werden. - Im Direktzugriff werden nur die Laufwerke A und B unterstützt,
allerdings sowohl einseitige als auch doppelseitige Laufwerke.
Umschaltung erfolgt beim Lesen oder Schreiben automatisch. Dazu
dienen die Worte
GETBLOCKS
undMEDIACH?
. - Neu ist das deferred word
MAKEVIEW
, das inCREATE
das Viewfield erzeugt. >name
ist erheblich schneller, weilnfa?
jetzt in Code definiert ist.- Die Uservariable
FILE
ist inISFILE
umbenannt worden. Ebenso ist das WortFILE@
durchISFILE@
ersetzt. Zusätzlich gibt es die VariableFROMFILE
.CONVEY
z.B. kopiert Screens vonFROMFILE
nachISFILE
. - Das deferred word
(DISKERR
ist nicht mehr vorhanden. Stattdessen wird bei allen Diskoperationen einABORT"
im Fehlerfalle ausgeführt. - Die Worte
BACKUP
undEMPTYBUF
sind sichtbar. - Im FORGET-Bereich ist das Wort
REMOVE
sichtbar. Neu ist das deferred wordCUSTOM-REMOVE
. - Die 68000 Errortraps führen auf ein
ABORT"
und räumen den Systemstack richtig auf. - Das System arbeitet nach wie vor im Supervisormodus. Bisher wurde der SSP beim Verlassen des Systems nicht wieder restauriert. Das ist jetzt der Fall und damit hoffentlich das mysteriöse Verhalten einiger Programme (z.B. 1st_Word) im Anschluß an FORTH behoben.
- Das System enthält voreingestellt nur noch &10 Diskbuffer.
FILEINT.SCR
- Das gabs in Version 3.7 noch gar nicht. Hier sind deswegen die Änderungen seit Version 3.71 aufgeführt.
- Das File
FILESAVE.SCR
gibt es nicht mehr.SAVESYSTEM
ist jetzt am Anfang des Fileinterface definiert. - In
GETDRIVE
wurde der Systemstack nicht korrekt gerichtet. Das führte bisweilen zum Absturz. CAPACITY
enthält einOPEN
.- Analog zu A: und B: gibt es jetzt auch die Worte C: und D:.
- In
(VIEW
wird überprüft, ob das File überhaupt vorhanden ist, bevorISFILE
geändert wird. ?DISKABORT
läuft auf einABORT"
; es werden nicht mehr alle, sondern nur die wichtigsten Fehlermeldungen im Klartext ausgegeben, für den Rest gibt es die Fehlernummer.PATHES
wurde auf 30 Zeichen verkürzt.WORKSPACE
ist jetzt sichtbar.- Im System selbst ist eine 'Disk Transfer Area' (DTA) enthalten.
Diese wird anstelle der des Systems benutzt. Vielleicht
verschwinden damit rätselhafte Fehler beim Umschalten von
Laufwerken mit
DIR
(?!?!) OPEN
,CLOSE
,MAKE
undUSE
testen, ob der Wert inISFILE
ein FCB ist.- Die Worte
KILLFILE
,KILLDIR
undEMPTYFILE
sind gestrichen. (MORE
ist neu; wird vonMORE
aufgerufen, ist aber schneller, weil nicht jedemal einCLOSE
ausgeführt wird.(MAKEVIEW
ist jetzt headerlos.CONVEY
überprüft, ob die Blöcke überhaupt existieren.FILES
zeigt die Subdirectories nicht mehr mit "" an, sondern mit einem "D", damit mans auch drucken kann. Die Filelänge wird in der gewählten Zahlenbasis und nicht mehr zwangsweise in decimal ausgegeben.
PRINTER.SCR
- Die Epson-Anpassung wurde verbessert, sodaß sie nun auch auf Epson-Druckern selbst läuft. Die Kompatiblen können nämlich meistens mehr als das Original. Zusätzlich wurde eine Umlaut-Wandlung eingebaut.
- Der Code zum Ausdrucken formatierter Listings wurde verbessert.
Zusätzlich wurde das Wort
PRINTALL
aufgenommen, das ein komplettes File ohne Shadows druckt. - Das Wort
SPOOL
wurde durchSPOOL'
ersetzt.SPOOL'
erlaubt die Angabe eines Druckkommandos wieLISTING
oderPTHRU
und ist damit flexibler.
ASSEMBLE.SCR
- Dieses File gehört nicht mehr zum Arbeitssystem, sondern kann
wahlweise zugeladen werden. Mit
2 LOADFROM ASSEMBLE.SCR
wird der Assembler auf den HEAP geladen. - Aufgrund der Relokation wurden einige neue Makros eingeführt, ebenso hat sich die Belegung der Register geändert (Näheres im File ASSEMBLE.DOC)
DOUBLE.SCR
- gibt es nicht mehr. Die entsprechenden Worte befinden sich im Kernelsystem.
FILESAVE.SCR
- gibt es nicht mehr. Die entsprechenden Worte befinden sich im File
FILEINT.SCR
.
FORTHKER.PRG
- enthält jetzt bereits das Fileinterface.
- Das System ist auf
DECIMAL
voreingestellt.
STARTUP.SCR
- enthält nur noch die INCLUDE-Anweisungen, um aus
FORTHKER.PRG
ein Arbeitssystem zusammenzustellen.
DIVERSES.SCR
- ist neu und enthält häufig benutzte Worte, die wir nirgendwo unterbringen konnten.
- Das Wort
.BLK
enthält die SequenzBASE PUSH HEX
nicht mehr.
TOOLS.SCR
- Im Decompiler ist
L
(für Literal) durchK
(für Konstante) ersetzt worden. Das vermeidet Namenskonflikte beim Aufruf des Editors. NPUSH
im Tracer ist durchCPUSH
ersetzt worden. Dieses Wort befindet sich jetzt inDIVERSES.SCR
, da es auch im Editor benutzt wird.
STRINGS.SCR
- Neu ist das Wort
0"
, das einen counted und 0-terminated String im Dicitonary ablegt.0"
ist statesmart, kann also sowhl im Interpreter- als auch im Compilermodus benutzt werden. TEXT
funktioniert jetzt tatsächlich so, wie es dokumentiert ist.
LINE_A.SCR
- Insgesamt wurde dieses File 'entrümpelt' und stellt jetzt nur noch
die Grundfunktionen zur Verfügung. Andere sind z.B. nach
DEMO.SCR
ausgelagert. Im Einzelnen sind folgende Worte betroffen: Variable BKGRND OVERWRITE TRANSPARENT INVTRANS EXORWRITE RSET RDRAW HOME PATTERN PATTERNS ARROW A_SETUP
ist sichtbar und damit auch für neue Definitionen zu gebrauchen.- Die Variablen sind auf "_" statt "." umgestellt worden, also
XMIN_CLIP
stattXMIN.CLIP
,Y_MAX
stattY.MAX
usw. Dies gilt auch für die FunktionenSHOW_MOUSE
HIDE_MOUSE
PUT_PIXEL
GET_PIXEL
undFORM_MOUSE
. +SPRITE
und-SPRITE
funktionieren jetzt, können sich aber mit normalen Hardwaresprites nicht messen.- Die Copyraster-Funktionen sind gestrichen. Die entsprechenden
VDI-Funktionen sind ebenso schnell, daher muß diese aufwendige
Definition nicht wiederholt werden (File
VDI.SCR
im OrdnerGEM
, Screen $10 ff).
DEMO.SCR
- Die Demos wurden z.T. umgeschrieben und sind jetzt noch viel hübscher !! (Dank an GFA-Basic)
TASKER.SCR
- Die Uhr als Demonstration des Multitasking war nicht sehr gelungen und ist daher gestrichen.
- Beim
FORGET
einer Task wird jetzt tatsächlich der gesamte Speicherbereich freigegeben. - Die Syntax des Spoolers wurde geändert (s.PRINTER.SCR)
Subdirectory GEM
BASICS.SCR
- Die Arrays
INTIN
,INTOUT
usw. wurden drastisch verkürzt. - Die Pointernamen im GLOBAL-Array wurden gestrichen (Platzverschwendung)
- Neue Worte sind
C_WIDTH
C_HEIGHT
B_WIDTH
undB_HEIGHT
. Sie bezeichnen Positionen im ArraySIZES
. - Das Wort AES hat einen Stackparameter, nämlich
#addrout
, weniger. Dieser wird automatisch gesetzt. Alle AES-Aufrufe haben damit einen Parameter weniger. - Die Variable OBJC_TREE wird universeller verwendet und ist daher
schon hier statt wie bisher in
AES.SCR
definiert. - Der Fehler in
S_CLIP
wurde korrigiert.
AES.SCR
- An vielen Stellen wird der Inhalt von
OBJC_TREE
implizit übergeben. Das vereinfacht die Parameterübergabe. Betroffen sind die Worte MENU_BAR MENU_ICHECK MENU_IENABLE MENU_TNORMAL MENU_TNEXT FORM_DO FORM_CENTER - Bei
FSEL_INPUT
sind die Stringarrays sichtbar geworden, sodaß man sie auch benutzen kann !! Sie heißen jetztINPATH
undINSEL
. - Die Screennummern im Loadscreen haben sich geändert (aufpassen,
wenn
LOADFROM AES.SCR
verwendet wird.)
VDI.SCR
mem>scr
undscr>mem
sind jetzt Defining-Words, mit denen sich Worte konstruieren lassen, die das tun, was die beiden vorher gemacht haben; dabei läßt sich aber ein MFDB (Memory Form Definition Block) mitgeben. Damit ist es jetzt möglich, mit mehreren MFDBs zu arbeiten. Syntax ist an den Beispielen in VDI.SCR zu sehen. Im Editor werden zwei MFDBs benutzt.- Die Screennummern im Loadscreen haben sich geändert (aufpassen,
wenn
LOADFROM VDI.SCR
verwendet wird.)
SUPERGEM.SCR
- Neues File, das einige sinnvolle Befehle enthält, die die Arbeit mit GEM erleichtern.
GEMDEFS.SCR
- Neues File, enthält GEM-Definitionen in der Art von 'C'-#defines, um Quelltexte lesbarer zu machen.
EDITOR.SCR
- Neu !!! Enthält den GEM-Editor (hätten Sie's erraten?) und ist vollständig mit Kommentarscreens versehen. Soll unter anderem zeigen, wie man unter FORTH GEM programmieren kann.
EDWINDOW.SCR
- Ebenfalls komplett geändert. Enthält die Routinen für das GEM-Window des Editors. Auch dieses File kann als Beispiel für eigene Programme benutzt werden.
Änderungen ab Version 3.80
18.11.86
Natürlich gibt es auch in Version 3.80 noch kleinere Änderungen. Sie sind bisher jedoch nicht so gravierend, daß sie eine neue Versionsnummer nötig machen.
FORTH_83.SCR
- Die Worte
OUT
,WRAP
,MEDIACH?
undGETBLOCKS
sind nicht mehr sichtbar. - Aus Geschwindigkeitsgründen sind die Worte
*
,M*
,M/MOD
,/MOD
,/
,MOD
undMINIMAX
, also die wichtigsten Arithmetik-Routinen in Maschinencode geschrieben.
GEM\BASICS.SCR
- enthält jetzt die Worte
SHOW_C
undHIDE_C
, die bisher inVDI.SCR
bzw.SUPERGEM.SCR
definiert waren. - Das Wort
SETARRAYS
ist jetzt sichtbar. - Das Global-Array wurde um zwei Worte verlängert (wer weiß, warum ?!)
GEM\AES.SCR
- Der Message-Buffer bei
EVNT_MESAG
wurde auf 16 Bytes verkürzt. - Bei
MENU_REGISTER
ist der Rückgabewert 0 kein Fehler; das Wort wurde entsprechend korrigiert.
GEM\GEMDEFS.SCR
- Dieses File enthält keine Labels mehr, sondern spezielle Konstanten. Diese werden komplett auf den Heap geladen. Die Wirkung ist dieselbe wie vorher, aber es ist kein Vocabulary mehr nötig.
GEM§UPERGEM.SCR
- GETNUMBER wurde so geändert, daß jetzt auch führende Leerzeichen überlesen werden. Diese führten bislang zur Fehlermeldung '?'.
PRINTER.SCR
- In
PTHRU
ist jetzt einARGUMENTS
enthalten. Damit werden versehentliche falsche Eingaben weitgehend neutralisiert. - Das Wort
>PRINTER
, das den Ausgabevektor für den Drucker beinhaltet ist sichtbar geworden.