VolksForth/doc/atari-st/CHANGES.ORG
2019-07-22 09:30:15 +02:00

324 lines
12 KiB
Org Mode

#+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.