mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-25 10:30:57 +00:00
324 lines
12 KiB
Plaintext
324 lines
12 KiB
Plaintext
|
#+Title: Ä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 Wort =FORTHSTART= , 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= und =D-=.
|
||
|
|
||
|
- 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!= und =LN+!= .
|
||
|
|
||
|
- =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= und =MEDIACH?=.
|
||
|
|
||
|
- Neu ist das deferred word =MAKEVIEW=, das in =CREATE= das Viewfield
|
||
|
erzeugt.
|
||
|
|
||
|
- =>name= ist erheblich schneller, weil =nfa?= jetzt in Code
|
||
|
definiert ist.
|
||
|
|
||
|
- Die Uservariable =FILE= ist in =ISFILE= umbenannt worden. Ebenso
|
||
|
ist das Wort =FILE@= durch =ISFILE@= ersetzt. Zusätzlich gibt es die
|
||
|
Variable =FROMFILE=. =CONVEY= z.B. kopiert Screens von =FROMFILE= nach
|
||
|
=ISFILE=.
|
||
|
|
||
|
- Das deferred word =(DISKERR= ist nicht mehr vorhanden. Stattdessen
|
||
|
wird bei allen Diskoperationen ein =ABORT"= im Fehlerfalle
|
||
|
ausgeführt.
|
||
|
|
||
|
- Die Worte =BACKUP= und =EMPTYBUF= sind sichtbar.
|
||
|
|
||
|
- Im FORGET-Bereich ist das Wort =REMOVE= sichtbar. Neu ist das
|
||
|
deferred word =CUSTOM-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 ein =OPEN=.
|
||
|
|
||
|
- 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,
|
||
|
bevor =ISFILE= geändert wird.
|
||
|
|
||
|
- =?DISKABORT= läuft auf ein =ABORT"= ; 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= und =USE= testen, ob der Wert in =ISFILE=
|
||
|
ein FCB ist.
|
||
|
|
||
|
- Die Worte =KILLFILE=, =KILLDIR= und =EMPTYFILE= sind gestrichen.
|
||
|
|
||
|
- =(MORE= ist neu; wird von =MORE= aufgerufen, ist aber schneller, weil
|
||
|
nicht jedemal ein =CLOSE= 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 durch =SPOOL'= ersetzt. =SPOOL'= erlaubt die
|
||
|
Angabe eines Druckkommandos wie =LISTING= oder =PTHRU= 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 Sequenz =BASE PUSH HEX= nicht mehr.
|
||
|
|
||
|
** TOOLS.SCR
|
||
|
|
||
|
- Im Decompiler ist =L= (für Literal) durch =K= (für Konstante) ersetzt
|
||
|
worden. Das vermeidet Namenskonflikte beim Aufruf des Editors.
|
||
|
- =NPUSH= im Tracer ist durch =CPUSH= ersetzt worden. Dieses Wort
|
||
|
befindet sich jetzt in =DIVERSES.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= statt =XMIN.CLIP=, =Y_MAX= statt =Y.MAX= usw. Dies gilt auch
|
||
|
für die Funktionen =SHOW_MOUSE= =HIDE_MOUSE= =PUT_PIXEL= =GET_PIXEL= und
|
||
|
=FORM_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 Ordner =GEM=,
|
||
|
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= und =B_HEIGHT=. Sie
|
||
|
bezeichnen Positionen im Array =SIZES=.
|
||
|
- 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 jetzt =INPATH= und =INSEL=.
|
||
|
- Die Screennummern im Loadscreen haben sich geändert (aufpassen,
|
||
|
wenn =LOADFROM AES.SCR= verwendet wird.)
|
||
|
|
||
|
*** VDI.SCR
|
||
|
- =mem>scr= und =scr>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?= und =GETBLOCKS= sind nicht mehr
|
||
|
sichtbar.
|
||
|
- Aus Geschwindigkeitsgründen sind die Worte =*=, =M*=, =M/MOD=, =/MOD=, =/=,
|
||
|
=MOD= und =MINIMAX=, also die wichtigsten Arithmetik-Routinen in
|
||
|
Maschinencode geschrieben.
|
||
|
|
||
|
** GEM\BASICS.SCR
|
||
|
|
||
|
- enthält jetzt die Worte =SHOW_C= und =HIDE_C=, die bisher in =VDI.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\SUPERGEM.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 ein =ARGUMENTS= enthalten. Damit werden
|
||
|
versehentliche falsche Eingaben weitgehend neutralisiert.
|
||
|
- Das Wort =>PRINTER=, das den Ausgabevektor für den Drucker beinhaltet
|
||
|
ist sichtbar geworden.
|