* GF6 * GNU-FORTH zum QL * 4.9.1993 ... 1.5.1998 * .hpr * F6 - Vers. 818 *
                     Hinweise zu den Versionen ab 809
            Look at ">>" for some short english explanation

     Version 8.18 is the, sort of, "Final Beta" of the GF6 Forth System.
  Copyright (C) 1998 und Urheberrecht beim Autor, H.-P. Recktenwald, Berlin


  Die GF6-Sammlung unterliegt den Bedingungen der in deutscher bersetzung
  als "GNU-G_txt" beigefgten GNU-Lizenz fr freie Software.
  Es sei jedoch darauf hingewiesen, da beim Versand, auch in Gestalt einer
  nur schmckenden Beigabe, auf beliebige profitable Gegenleistung stets u.a.
  Vertrags- und Produkthafung, sowie AGBG zulasten des Versenders Rechtskraft
  bekommen, und da es keine Mglichkeit gibt, dies auszuschlieen.


Die Sammlung besteht im Urzustand aus den Blcken (Directories):
        t1      Systembeschreibung, Glossar, F6-Assemblertext
        t2      Hilfstexte fr den F6-Editor
        gf      F6 Code, Screenfiles, Programme
        ap      Anwendungsprogramme
        lr      32K-Ur-System von L.Reeves


"Benchmarks"
        mgen andere unternehmen. Zur Beurteilung der Geschwindigkeit im F6
        dienen mir die Zeiten zum Compilieren von Assembler und Editor, und
        einige Bilschirm-bezogene Worte, wie z.B. VLIST. Dabei fallen Unter-
        schiede zu Behauptungen auf, wie sie gelegentlich immer wieder in der
        einschlgigen Inet-Newsgroup (comp.lang.forth) aufzutauchen pflegen:
        1.      Ein "native"-Code-Compiler sei um etwa das drei- bis fnffache
                schneller, als ein traditionell gefdeltes System, wie das F6:
                Das mu sich auf extrem ineffiziente Varianten beziehen, mir
                ist dergleichen nie vorgekommen, bei Vergleichen mit dem F6
                waren nur in Details gelegentlich Werte von ca 1:3 erzielbar,
                insgesammt kam mit viel Glck etwa eine Verdopplung zustande.
                Ein Faktor 1:4 trifft in etwa auf optimalen Assemblercode zu,
                nicht aber auf - auch aufwendig optimierte - Hi-Level-Worte.
        2.      Processor-Caches wrden von gefdelten Forth-Systemen nicht
                nennenswwert genutzt:
                Das ist Unsinn, wie Messungen der Compile-Zeiten in der QXL
                am F6 zeigen. Dort ergeben sich Verhltnisse nicht unter 1:3,
                meist besser, und maximal bis 1:7.

        Nebenbei:
        Die Ausfhrungszeit von F6-Programmen erreicht in gnstigen Fllen ein
        Verhltnis von ca. 1:90 gegenber gleichartigen S*Basic-Programmen.
        Die Strke des F6 liegt bei der allgemeinen Datenverarbeitung, whrend
        in Verbindung mit Ein-Ausgabe-Operationen der Laufzeitvorteil weitgehend
        schwindet. Beim Senden eines String z.B. an einen NUL-Kanal lag er nur
        bei etwa 1:4 (QL mit MGG/GC). Wobei aber auch fr reinen Assemblercode
        das Verhltnis dann nicht sonderlich gnstig ausfllt, wie etwa anhand
        der Procedur CH_CHS aus "IO2" leicht veranschaulicht werden kann.
        Um den Preis geringerer Flexibilitt (welche vielfach garnicht bentigt
        wird), aber auch geringerer(!) Fehlertoleranz, kann durch feste Defini-
        tionen die Geschwindigkeit wesentlich gesteigert werden. Das knnte mit
        geringem Aufwand durch nderungen in der Assemblerquelle geschehen,
        indem man die betr. {dodefer}-Eintragung streicht, die dort angegebene
        Ausfhrungs-Definition mit deren Namensheader versieht, und dann das
        System neu assembliert. Ohne solche nderungen kme evtl. Compilieren
        der im deferred-Wort gespeicherten CFA infrage.
        Ein Beispiel:
                type create TYPE dodefer
                  dc.w dtype-Z,dtype-Z
                dtype dc.w dojump-Z
                  dc.l Xtype-Z
        wrde dann in der Assemblerquelle ersetzt durch:
                type create TYPE dojump
                 dc.l Xtype-Z
        oder vom Forth aus in ein Wort compiliert als:
                : name .. .. [ ' type @ , ] .. .. ;


Prfung in SMSQ-Varianten:
        F6 ist ein QDOS-spezifisches versionsunabhngiges Forth-System. Vom
        SMSQ/E gibt es aber derart viele Varianten, etliche auch mit Fehlern,
        die von lcherlichen Peinlichkeiten (2.82/3 fr GC) bis zu gefhrlichen
        Schden (s.u.) reichen, soda diese Aussage eingeschrnkt werden mu:
        Referenz ist die mit der QXL gelieferte Version SMSQ 2.76. Das hat
        immerhin den Vorteil, da nicht auch noch neue und meist einzeln nicht
        verfgbare PIF-Versionen die Ergebnisse zustzlich verflschen knnen,
        und da die Fehler soweit bekannt sind, da sie sich bndigen lassen.
        Der Erprobung in der GC dient das SMSQ/E 2.84. In solchen Systemen ist
        es beim F6 aber der MINERVA in jeder Hinsicht hoffnungslos unterlegen;
        die Tests mit den diversen SMSQ/E sind darum dort nur oberfchlich.

    Bedauerlich, doch dieser Hinweis ist noch immer unerllich:
        Das WIN-Filesystem von SMSQ und SMSQ/E zur QXL weist grobe Fehler auf,
        die schwere Schden verursachen knnen! Diese treten bei mehrfach im
        r/o-Modus geffneten Kanlen auf dieselbe Dateie auf, und in besonders
        schwerer Form noch hufiger, wenn whrend QXL-interner Filezugriffe
        zugleich das NETzwerk in Betrieb ist. Dann werden die Slave-Blcke
        (Datenpuffer des System fr den File-Transport) oft so weitgehend ver-
        dorben, da die betr. Datei unwiederbringlich verlorengehen kann!
        Sollten z.B. in F6-Editor pltzlich verdorbene Seiten erscheinen, so
        hilft es in den meisten Fllen, OHNE JEDE WEITERE AKTION die QXL sofort
        zu verlassen und das System neu zu starten. Versuche, zuvor irgend-
        welche Dateien zu sichern, wrde jene mit groer Sicherheit zerstren!

   >>   F6 was designed as a QDOS-specific any versions portable Forth system.
        It was tested (and is currently being run) in many QL systems, as MGG,
        JM, JS, and (preferably) MINERVA (1.93), and in the QXL/SMSQ 2.76.
        Only a few tests were carried out, occasionally, with one of the many
        SMSQ/E versions. Those systems in the GC/QL seem not be worth testing
        at all, because the MINERVAe are much superior, and thus there were
        only a few (and no current!) checks with SMSQ/E (2.84) in the GC/QL.

   Pse, be warned of some significant bugs in the SMSQ and SMSQ/E systems,
        which relate to the WIN drives of the QXL and recursively multiply
        r/o-opened channels to the same file. This most certainly after some
        time can corrupt some slave blocks (internal storage for file-i/o).
        Even more often the same was encountered if some file action in the QXL
        was in progress while simultaneuosly transferring data via the NETwork
        fileserver. There is no means to overcome that bug, except, mostly, by
        then IMMEDIATELY QUITTING the QXL, and restarting. Otherwise, saveing
        any files data most certainly can destroy the files concerned, and
        even might corrupt any others which were currently open!


* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

F6 Vers. 815 => 816 => 817 => 818 , 1. Mai 1998:

Neue/genderte Files:

        F6WORDS_txt  ->  F6INTRO_txt, F6GLS_txt, F6REF_txt
        forth_asm
        forth_scr
        f6asm_scr
        fig_scr
        f6task_scr
        f6xco_scr
        f6xco_4th
        QF
        F6ED
        F6AS

Neues Programm
        RecoverX        Files aus QXL.WIN-Drives/-Files extrahieren/restaurieren
        RecoverX_txt    Beschreibung dazu
    >>  RecoverX_doc    QXL.WIN files recovery/extraction; description.
        qxlwin_scr      f6-source
        qxlsec_dat      empty sector template


Hinweise:
        Der Kern wurde nochmals auf geringsten Speicherbedarf im Forth-
        Bereich und auf Ausfhrungsgeschwindigkeit hin berarbeitet. Eine
        Steigerung scheint unter den gegebenen Voraussetzungen kaum mehr
        mglich, und so wird dies die letzte durchgreifende nderung am F6
        sein. Mit seiner Hilfe soll nun ein neues 32-Bit-System im ANS-
        Standard entstehen, das zugleich Grundlage einer Java-VM bildet...

     1. Wegen nderungen im Hi-Level-Bereich mssen C-SAVE-Files vor dem
        Laden in den Kern 8.18 neu compiliert werden.
    >>  Because of the new words (re below) any previously C-SAVEd files
        can only be C-LOADed after being re-compiled.

     2. Der Kern ist an entscheidenden Stellen grundlegend umgebaut. Fr
        eigene Varianten sollten darum insbes. alle von ueren INTERPRETer
        rsp QUIT abhngigen Teile genau berprft werden (mehr s. unten).
        Aus DEFERRED-Worten kann nicht mehr auf den Instruction-Pointer
        zugegriffen werden, Worte wie {R+} sind dort nicht mehr verwendbar.
    >>  The kernel was re-made to an extent that any own modifications,
        mainly those relying on the inner INTERPRETer, or QUIT, should
        thoroughly be verified (re below).
        DEFERRED words no longer reliably can access the IP, e.g. with {R+}.
        The PRINTER words ("forth_scr") have been modified, acccordingly,
        and any user defined routines should be re-done, if applicable.

     3. UQLX wurde mit Vers. vom Feb. 1998 korrigiert, das F6 spielt:
        CMPM (neben anderen berarbeiteten Details) ist nun in Ordnung.
        Das Filesystem weist dagegen noch entscheidende Fehler auf, die
        innerhalb des F6 nur teilweise umgangen werden konnten (z.b. HEADR).

     4. Assemblieren des F6 in der QXL mit SMSQ 2.76 war bei 2M Speicherausbau
        nicht mehr mglich, in der GC mit Minerva sind ca. 1300K erforderlich.
        -> Nach Umbau des STRING-Macro fr den Assembler reichen nun doch
           wieder "nur" etwa 800K aus...

     5. Der F6-Assembler wurde fr gleichzeitiges Assemblieren in verschiedene
        Ziel-Files erweitert. Einzelheiten sind "f6asm_scr" zu entnehmen.

     6. Ein Mini-Decompiler zur Kontrolle des jngsten Hi-Level-Wortes:
        : dcm here latest pfa 2dup - 2/ . {: emit
          BEGIN count-w 2+ nfa id. 2dup > 0= UNTIL 2drop ;


* In "forth_scr":


GETENV  etc.
        Zugriff auf die Environment-Variablen der ENV-Erweiterung zum C68.
        Die SBasic-Erweiterung selber ist NICHT MULTITASK-sicher, darum sind
        hier nur lesende Worte definiert.
    >>  r/o access to the C68 environment variables, as supplied by ENV_BIN.
        Those variables, by their definition are NOT safely multitasking!
        Accessing them twice, consecutively, can reduce the risk of reading
        false data, while writing would always amount to some uncertainty.

.KWORDS ( use: .KWORDS filename )
KWORDS  (erwartet den auf die betr. Assembler-Quelle gffneten work-Kanal)
        Anzeige der im Quelltext enthaltenen Forth-Worte.
        (expecting open work-channel to the appropriate assembler file)
        Displaying the kernel words from the assembler source.

L-DROP  ( n1 n2 -- )
        Locals bis auf die mit n1 n2 gegebene Anzahl Ebenen und Bytes entfernen,
        Das Wertepaar n1 n2 entspricht der Rckgabe von ?LOCALS.
    >>  discard as many locals as allocated after the level/bytes pair of n1 n2
        was returned by ?LOCALS, or equivalent.

NO-LOCALS
        Alle Locals entfernen, notfalls Local-Basis und S0 auf TIB justieren.
    >>  discard any locals, re-set locals base and S0 to tib if necessary.

T.      ( nn -- )
        Zur Ausgabe von durch {.S} unverflschten Zahlenwerten -> Verwendung
        des Local-Speichers in Ordnung gebracht: Da "<#" die Variable HLD auf
        PAD einstellt, wirkt die LOCAL-Zuweisung nur, wenn sie _danach_ steht.
    >>  used in {.S} and while debugging to _not_ corrupt the correct numbers
        display -> bug fixed.


* gendert/neu bei den PRINTER-Worten - scr 58 ff -

CS-CSEQ ( .. n(1) n(2) .. n(n) nn -- )
        erwartet als ersten Posten im Stack die Anzahl Steuercodes, z.B.
                DEPTH >R 27 {@ 27 {t 1 27 {6 DEPTH R> - CS-CSEQ
   >>   parameter passing changed, now with leading count, as shown above.

PRINTER / CONSOLE
        lt den ggf. existierenden Kanal nach SER/PAR (etc) offen, weil
        die vllig verfehlte kanal(!)bezogene Ausgabepufferung des SMSQ/E
        sonst binnen krzester Frist den gesamten Speicher zustopfen kann.
        Bei Versuchen kam es dann auerdem zu gravierenden Systemfehlern
        (Systemvariable SV.FREE := -1 mit den entsprechenden Folgen!).

TAB     ( n1 -- )
        Position n1 anfahren, neue Zeile falls n1 > Fensterbreite.
   >>   Printing posn to column n1, new line if n1 > window with.

DEFAULT-IS TAB
        Aufruf als QDOS-Trap wiederherstellen.
   >>   Restore to QDOS-trap operating mode.


* Korrekturen in "f6xco_scr":  \
* Korrekturen in "f6a80_scr":   ) D6-Verwendung an neuen F6-Kern angepat
* Korrekturen in "f6task_scr": /  >> usage of D6 adjusted to new kernel


* Korrekturen in "f6asm_scr":


CODEFILE        ASMFILE
        fr abwechselndes Assemblieren in verschiedene Zielfiles berarbeitet.
    >>  re-done to enabling multiple concurrent destination files. Not tested.

#)      Fehler bei .l absolute data { ( dn ) 32bit .l #) ... } korrigiert.
    HINWEIS (aus eigener Erfahrung..):
        Die unsinnige Adressierung
                ' c-find 2@ 32bit    #  a2 ) lea,
        wird strukturbedingt vom Assembler nicht als Fehler erkannt! Es mu
                ' c-find 2@ 32bit .l #) a2   lea,
        geschrieben werden: Fr die "absolute data" Adressierung steht "#)".
    >>  address mode bugfix when optimzing a 32-bit absolute data address.

PUSH,   POP,
        Fehler in der Auswertung von MOVEM-Listen korrigiert.

{ d2..d4 d6 a3..6 }
        neben der vom C1-Forth bernommenen etwas ungewhnlichen Schreibweise
        fr MOVEM-Listen gilt auch die sonst eher gebruchliche Darstellung
{ d2-d4/d6/a3-a6 }
        sowie alle Varianten von beiden in gemischter Form.


* nderungen/Ergnzungen im Kern, zugleich "forth_asm":


DOFORGET (D) ( cacheflg exitflg voclfa nfa -- cacheflg exitflg voclfa nn )
        Fr EMPTY, FORGET etc. genderte Datenanordnung:
        Das deferred-Wort DOFORGET liegt nun in einer Lo-Level Subroutine, soda
        weder Returnstack noch darin liegende Daten verndert werden drfen.
        Deshalb wurde die Flag zum Restaurieren des CACHE-Zustandes zustzlich
        an vierte Stelle in den Datenstack bernommen.
        Weiter wurde "exitflg" eingefgt; Werte ungleich Null darin veranlassen
        ohne die Notwendigkeit von Vernderungen am Returnstack den vorzeitigen
        Abbruch von FORGET bei Erhalt des bisherigen Dictionary-Zustandes.
        BEISPIELE in "f6asm_scr"; die Sonderbehandlung darin fr das Vocabular
        der Localen Wortdefinitionen wurde angepat, andere nderungen sind im
        F6-Original nicht erforderlich.
   >>   Any words re-defining the leading FORGET vector, DOFORGET, executing
        NOOP by default, should be checked and probably re-done, because they
        cannot rely on returnstack data any more. Though never documented those
        data might have been used, e.g. for an early return as in the Local
        words vocabulary of "f6asm_scr".
        The other newly introduced item is "exitflg" which when set to non-zero
        will be leading to early return, in an orderly manner, before actually
        FORGETting, thus leaving the dictionary unchanged.
        In the F6 sources there is just one place concerned, in the temporary
        Local Words vocabulary of "f6asm_scr" which was modified accordingly
        (and where some more examples for the usage of DOFORGET can be found).

,,      ( dn -- )
        Reserviert Platz und compiliert double nach {here}.

(ERT)   4th-Wort entfernt, Datenposten adressierbar mit { $4a +origin }.
   >>   eliminated, data addressable by { $4a +origin }.

'XECUTE ( pfa -- )
        Ersetzt die Sequenz { cfa execute }.
        { ' 'xecute } im F6 entspricht damit in der Wirkung der Folge
        { ' execute } bei den spteren Forth-Standards (F-83, ANS, etc.).

ACP     ACL     ( -- ptr )      hidden
        USER-Vari, reserviert.

ANEW    use: ANEW name
        ANEW ruft -FORGET des angegebenen Namen auf und setzt eine Marke in
        Gestalt eines neu gebildeten NOOP-Wortes {name} - was die krzest
        mgliche Wortdefinition im F6 ist; das Wort hat kein Parameterfeld.
        Alles, was danach compiliert wurde, wird bei erneuten Aufruf von ANEW
        mit demselben Namen aus dem Speicher entfernt. Wirkt also wie
                { -FORGET name }
        und setzt anschlieend die Marke erneut.
        Die FORGET-Funktion des Aufrufs wirkt nur auf das CURRENT-Vocabular,
        ltere Marken gleichen Namens in anderen Vocabularen bleiben unberhrt.
        Sie ist von Worttyp unabhngig, d.h. jedes beliebige jngste Wort mit
        dem angegebenen Namen wird von diesem ANEW-eigenen -FORGET erfat.
   >>   -FORGET and redefine {name} in the CURRENT vocabulary.

B/DIR   ( -- nn )       Constante mit Vorgabewert 64
        Lge einer Directory-Eintragung.
        Nicht zu verwechseln mit B/HED, welche die mit fs.xinf ermittelte
        Anzahl Bytes Header-Vorspann in Massenspeichermedien aufnimmt, und
        z.B. bei DOS-Typ Disketten Null ist.
   >>   bytes per directory entry; 64 by default.

C-FIND  entfernt, kann ersetzt werden durch:
                BL WORD HERE CURRENT @ @ (FIND)
   >>   eliminated, can be substituted by the above sequence.

[CPL]   (D) ( cfa -- cfa )
        wird als letzte Operation vor dem Eintragen der im Stack liegenden
        cfa in das Dictionary (dem eigentlichen Compile-Vorgang) durchlaufen.
        Hier knnen ggf. noch zustzliche Optimierungen eingefgt werden.
        Weil [CPL] als deferred-Wort definiert ist, kann das mit IS in Form
        gewhnlicher Hi-Level Forth-Worte geschehen.
CMC     Die mit IS nderbare Constante CMC hlt einen Freigabezhler bereit.
        Jener kann um die Anzahl zugefgter 16-Bit-Posten (cfa, literal, etc)
        hoch- rsp. mu(!) um die Anzahl entfernter Posten abwrtsgezhlt werden.
        Um weitere Einflunahme zu unterbinden, stellt man ihn ggf. auf Null.
        Sein positiver Wert entspricht der zulssigen Anzahl Posten, um die der
        Code vom Ende her maximal verkrzt werden darf, bei negativen Werten
        oder Null darf keine nderung mehr vorgenommen werden.
        Mit jeder Vernderung ist auerdem der Dictionary-Pointer als 32-Bit-
        Posten (relative 4th-Adresse) zu justieren:
                ( nn ) DP 2- M+!  oder ( nn ) MINUS DP 2- M+!
        nn zhlt in Bytes und mu geradzahlig sein.
        Weitere Manahmen sind nicht erforderlich.

!CHNAME ( ptr chan -- )
        Von "forth_scr" in den Kern bernommen, damit auch ohne "L-LOAD" sofort
        verfgbar, sowie zur Umgehung gewisser Mngel beim Direkzugriff (TK2)
        und des UQLX ergnzt.
        Ermittelt den Namen eines offenen F6-Kanals (nur Fenster oder File).
        Lnge des Devicenamen liegt durch fs.xinf fest bei max. 4 Zeichen; der
        Anteil von Directory+Filenamen wird ggf. auf {F/N} Zeichen begrenzt,
        und die des dafr zu lesenden Fileheaders auf {B/DIR}. Beides sind
        4th-Constante, die mit IS gendert werden knnen, also fr den Fall,
        da ein fs.headr ber den QDOS-Standard hinaus lngere Namen liefern
        sollte (z.B. "QVFS"), auf jeden zu erwartenden Wert einstellbar sind.
   >>   Finds the name of an open F6-channel; from "forth_scr".
        Any channel other than a window or a file (i.e. any channel the device
        of which does serve the fs.headr trap) will produce an empty string.
        File+directory names length limited by F/N, which can be adjusted to
        any (reasonable) value, in case some new fs.headr - for which then the
        constant B/DIR should be adjusted accordingly - might return names
        longer than set up by the QDOS standards ("QVFS", etc.).
        Extended to also find the names of direct device access channels (TK2)
        and of any f.s.-channels in the UQLX (where fs.headr is bugged).

2CONS+  defn: ( dn 2CONS+ name )  exec: ( dn1 -- dn2 ) -> dn2:=dn1+2cons
        Beim Aufruf dn zur im Stack vorhandenen double addieren.
   >>   defn of fast de-/incrementing double constants, executing the same
        way as the pre-defined 1+, 1-, D2+, D1-, etc.
D2+ 1+  Ausfhrung von CONS2+ & CONS+ ist identisch der von D1+, 2-, etc.

CONS+   CONSM+  2CONS+
        knnen ebenfalls mit IS gendert werden.
    >>  Values redefinable with IS.

CONS+   CONSM+
        knnen auerdem mit DEFAULT-IS auf den jeweils unmittelbar danach
        in den Speicher eingetragenen Wert (zurck-)gestellt werden.
    >>  Values re-settable with DEFAULT-IS if compiled as:
                ( nn ) CONSM+ name ( default ) ,

DEL-DEFB ( -- 0 | err )
    >>  requires IO2/"dvs_byt" erforderlich.
        Das TK2-Kommando (auch in GC, S-GC und SMSQ enthalten) kann in der
        QXL nach Benutzung verschiedener WIN-Laufwerke u.U. groe Bereiche
        an Speicher freigeben und hilft manchmal auch bei u.g. SMSQ-Fehler.

ERNUM   wird mit dem Lesen automatisch auf Null gestellt, liefert also nur
        das erste Mal einen brauchbaren Wert. Solange ERNUM noch nicht benutzt
        wurde, kann der Fehlercode an der Forth-Adresse $8012 gelesen werden.
                $8012 2@        \ wie ERNUM

FSTRG-L FSLOAD  SSTRG-L FSSAVE
        erneut berarbeitet, Fehler bei FSSAVE korrigiert;
        "timeout"-Bearbeitung fr NETzwerk- und SER-Transport eingerichtet.
        In den Aufrufen werden nur die String-Traps verwandt, bei welchen je
        nach Gert und Speicherausbau sich gegenber den QDOS-Traps fs.load
        rsp. fs.save durch die Slave-Block-Verwaltung des Systems ohne jede
        weitere Zwischenspeicherung zumeist ein hoher Zeitvorteil ergibt.
        fs.load/save sind nicht in allen QL-/SMSQ-Systemen fehlerfrei.
        Solche Fehler auszuschlieen ist weiterer Zweck dieser F6-Worte.

INI-LOC & LOCAL
        modifiziert fr IS und die nderungen in der Schreibweise.
    >>  modified to enable the new operational modes (re below).

IS      use: ( nn ) IS name
        bergabe neuer Werte an Variable und Constante mit IS ist nun etwa
        im Verhltnis 1:3 schneller als die entsprechende Variante mit {!};
        es werden besondere Operatoren mit folgenden Hilfsnamen compiliert:
          is  (deferred)        il  (any locals)        v!  (cons, vari)
          u! (user)             dv! (2cons, vari)       fv! (fp-cons)
          ar! (associative: range:)                     cs! (case:)
        UND:
                .. LOCAL ab..| .. .. IS A ..
        IS kann auch auf Locale Variable angewandt werden. Dazu wird intern
        geprft, ob solche im betr. Wort berhaupt initiiert wurden (INI-LOC
        oder LOCAL ..|), und ob der angegebene Name ein einzelner Buchstabe
        a..z oder A..Z ist, der NOCH NICHT als regulres Forth-Wort definiert
        wurde. Die Local-Posten i, j und r knnen z.B. hiermit nicht verndert
        werden, da sie als 4th-Worte bereits existieren, und zum anderen kann
        es Laufzeit-Fehler geben, wenn etwa LOCAL AB| definiert, aber ..IS D..
        hingeschrieben wurde. Auf diese Weise kann auch mit IS auf die Locals
        eines bergeordneten Wortes zugegriffen werden. Gibt es solche nicht,
        kann die Ausfhrung Fehler durch z.B. berschreiben des TIB erzeugen.
        Bei Schreibweise ohne vorangestelltes LOCAL dauert das Compilieren
        verfahrensbedingt u.U. erheblich lnger, die Form IS ... wird danach
        aber entschieden schneller ausgefhrt, als { -LOC ... ! }.
   >>   IS if used to re-define the value of any kind of 4th-constants or
        variables is now much faster (1:3) than the usual {!} operations,
        compiled by several new, headerless words (re above).
        IS can also be used to modify any Locals values, if the word currently
        being defined includes LOCALs (or local memory initiated by INI-LOC),
        and if the name after IS is a single character in the range of a..z or
        A..Z, which was NOT defined as a 4th-word (as, for instance, i, j, and
        r already are), regardless of the actual range being used.

L<I     mit -LOC gendert:
                -loc A l<i      ( -- ptr n1 n2 ) n1:=ptr n2:-ve
                -loc a l<i      ( -- ptr n1 n2 ) n1:=ptr n2:+ve

LOCAL   (Speicherschutz, vereinfachte Schreibweise fr Locale Variable)
      1. Der 4th-Speicher bis 128 Bytes ber HERE, entspr 48 Bytes ber PAD,
        wird gegen berschreiben durch Locale variable geschtzt. Entsprechende
        Zuweisungsversuche werden mit der Meldung 10 abgewiesen:
                "too many Locals"
      2. Bevor der uere Interpreter den Zahlen-Compiler aktiviert, nachdem
        die Wort-Suche erfolglos war, wird nun erst noch geprft, ob der gerade
        gelesene Text als LOCALe Variable auswertbar sein knnte. Sofern LOCALs
        initiiert wurden, werden einzelne Buchstaben als Local-Leseoperationen
        gedeutet. Mit wenigen Ausnahmen, z.B. {i}, {j} oder {r}, gengt es dann,
        statt LOCAL {buchstabe} nur den Buchstaben hinzuschreiben:
                : name .. LOCAL abc| ...  A c s* d$.  ... ;
        oder, z.B. fr den Zugriff auf bergeordnete Local-Posten:
                : name .. [ 0 dup ] INI-LOC .. .. END-LOC ;
        ABER
                : name .. LOCAL abcdefghij| .. A i s* ..     .. ;
        wrde das existierende Forth-Wort {i} compilieren, in diesem Falle also
        den Index einer DO-LOOP rsp. den entsprechenden Posten vom Returnstack.
        Der betr. LOCALe Posten ist NUR mit vorangestelltem {LOCAL} erreichbar.
        Bedingt durch das Verfahren wird die Schreibweise mit LOCAL u.U. sehr
        viel schneller compiliert.
      3. Ein (alter) Nebeneffekt:
                1 2 3 4 5 6  ->  local abccef|  -> a:6 b:5 c:4 d:4 e:2 f:1
        oder    1 2 3 4 5 6  ->  local abccce|  -> a:6 b:5 c:4 d:4 e:4 f:2
        Stets werden soviele Posten von Stack genommen, wie LOCALs zu besetzen
        sind, auch bei gleichnamigen ("berschreibend duplizierenden") Indices.
   >> 1. Locals allocations ranging down to 128 bytes above HERE, i.e. 48 bytes
        above PAD, or further will be rejected with the message #10:
                "too many Locals"
      2. LOCALs reading operations can now be written by just the indexing
        character, dispensing with the leading {LOCAL} keyword, if the LOCALs
        already have been initiated and if the character concerned does not
        represent another already defined Forth word - i.e {i}, {j} or {r}
        cannot be addressed this way:
                : name .. LOCAL abcdefghij| .. A i s* ..     .. ;
        will NOT work as expected if the LOCAL item {i} was meant, while
                : name .. LOCAL abcdefghij| .. A local i s* ..   .. ;
        would do the job.

MD/     ( dn1 un2 -- dn3 )              - floored quotient -
        Division double durch vorzeichenlose single in double Quotienten.
    >>  signed quotient from division of signed double by unsigned single.

PTYPE   (D) ( ptr count -- )            - type printable chars -
        Wesentlich schneller, Stringlnge aber zustzlich auf den freien 4th-
        Speicher zwischen SP@ und HERE, wie mit { MEM . } angegeben, begrenzt.
    >>  Is now much faster, but cannot output strings longer than availiable
        4th-memory - as displayed by { MEM . }.

RDROP   =>> (I)
        compiles: RDROP         as      rdrop   (dummy header)
                  RDROP RDROP           2rdrop  (  "  )
        RDROP ist nun optimierendes Compiler-Wort (immediate).
   >>   RDROP is now an immediate and optimizing compiler word.

;       (I)                             - Optimierung -
;S      ergnzt:
        compiles: RDROP ;       as      r;      (dummy header)
                  RDROP RDROP ;         rr;     (  "  )
                  2DROP ;               dd;     (  "  )
        werden je zu einer einzigen Operation zusammengefat compiliert. Der
        durch geeignete Wortanordnung mglichen Optimierung durch Umbau zum
        Sprung in eine abschlieende Colon-Definition sollte jedoch weiterhin
        Vorrang gegeben werden, da jene meist den greren Zeitgewinn bietet.
   >>   semis { ; } modified to optimize {{ RDROP } RDROP ; } and { 2DROP ; }.

S>M     ( ..nn n1..nx ptr mx -- ..nn )
M>S     ( ptr mx -- n1..nx )
        Datentransfer in Anzahl mx Bytes zwischen Stack und ptr im Speicher
        analog R>M und M>R. Vorsichtshalber begrenzt auf 510 Bytes je Aufruf.

-SCAN   ( ptr1 maxlen byte -- ptr1 disp )
        Sucht nach dem Wert byte im Speicherbereich maxlen bei ptr1,
        ausgehend von dessen Ende, gibt neben der Anfangsposition ptr1 den
        Abstand disp zum gefundenen Byte zurck, rsp 0 wenn das Zeichen nicht
        gefunden wirde. - Beispiel:
                " 1 s-load win6_gf_fig_scr " -count
                2dup {_ -scan 1- {_ -scan
                dup -rot {{ emit type {} emit cr
                2swap + -rot + swap over - {{ emit type {} emit
        schreibt
                {1 s-load win6_gf_}
                {fig_scr }
   >>   scanning backwards the 4th memory area at ptr1 of length maxlen,
        returning ptr1 and the displacement disp to where byte was found.

SOURCE  umgebaut:
        Liefert bei -1 in BLK die Werte aus ACP und ACL.

TRAP1   =>> dummy-header, TRAP1A can be used instead.

[USING] ( ptr -- )
        Ausfhrungsteil von USING.
        Erwartet ptr zu einem Filenamen und ffnet damit den SCREEN-Kanal.
   >>   Executing part of USING, with ptr to the screenfile name.

QXL     (D) ( -- flg )                  - versuchshalber -
        {QXL} wird, wenn das F6 in QXL/SMSQ betrieben wird, und immer, wenn
        in einem {R/W}-Aufruf der "Fehler" -16 (bad medium) auftritt, eine
        Aktion zugewiesen, die "true" (1) zurckgibt, soda Manahmen zur
        (vorsichtigen!) Umgehung gewisser "Strungen" im SMSQ mglich sind.
        Sollten L-LOAD oder S-LOAD dennoch abbrechen und QXL nicht 1 liefern,
        kann vor einem erneuten Versuch folgende Eingabe helfen:
                screen close empty ' 1 is QXL

        ...weil jenes heillos vermurkste SMSQ bei WIN-Dateien in der QXL, auf
        die aus jeweils neuen OPEN-IN geffneten Kanlen recursiv zugegriffen
        wird, nach einer gewissen Zeit nur noch "bad medium" - "FEHLERHAFTER
        DATENTRGER" meldet, auch, wenn ein wirklicher Fehler nicht vorliegt,
        mute fr ordentliche Funktion von z.B. L-LOAD eine Sonderbehandlung
        installiert werden, die nun in den Kern verlagert ist.
        Der Fehler wirkt auch beim Zugriff ber Netz aus dem wirklichen QL!
        Darberhinaus:
     EINE EINDRINGLICHE WARNUNG...
        ...betr. des SMSQ (oder ../E) in der QXL bezglich der WIN-Laufwerke:
        Wieder einmal sind mir diverse Dateien verdorben worden (gerade eben,
        22.4.98). Das geschieht im Zusammenhang mit dem Datentransport ber
        Netz, und wenn hufig relative File-Positionierungen stattgefunden
        haben. Auslser scheint demnach die QDOS-Trap fs.posre zu sein, bei
        der sich Fehler einstellen, und wo dann fs.posab beim selben Kanal oft
        noch einwandfreie Ergebnisse liefert. Danach werden gerade offene Files
        mit Schlieen der betr. Kanle mit groer Sicherheit vllig verdorben.
        Als einziges Gegenmittel bietet sich sofortiger Reset des Rechners an,
        oder wenigstens Aufgabe des QXL-Systems bei Rckkehr ins DOS.
        Ein Bild des Jammers! Und:
        Mr.T. sind die Phnomene bekannt (reproduzierbare Beispiele wurden ihm
        wiederholt bermittelt), doch, obwohl Untersuchung der Systemdaten und
        der Ergebisse verschiedener relevanter QDOS-Operationen (FPOS, etc) in
        solchen Fllen sehr deutliche Hinweise liefern, scheint er, wie die
        mangelhafte Reaktion zeigt, mit dieser Problematik restlos berfordert
        (und ich bin es leid, ihm wieder und wieder detaillierte nderungs-
        (Anweisungen auszuarbeiten...

   >>   Flag when in a QXL/SMSQ system, will also be set to returning true (1)
        if an error -16 ("bad medium") occurred, which is specific to SMSQ in
        the QXL with recursively multiply OPEN-IN-type opened channels to the
        same file on a WIN device, thus preventing, for instance, L-LOAD from
        orderly operating. I'd then also frequently find the slave blocks of
        other files badly corrupted, which would result to a loss of data after
        closeing the files concerned if they were opened with write permission.
        (those bugs were reported to Mr.T., who seems to prefer to just denying
        (them and to ignoring any related evidence.
     IMPORTANT NOTE:
        Do not trust the fs.posre QDOS-trap when in an SMSQ-ish system, and in
        the QXL, with regard to the msdos-files dummy WIN drives! I've lost
        several files after some network traffic and files repositioning with
        fs.posre - fs.posab seems to working error free, but fs.posre apparently
        worked out really destructive...
        The phenomenon can be reproduced by
                ' 0 IS QXL
        and then loading and compiling, e.g., "fig_scr" from a WIN drive,
        which soon will be interrupted by the "bad medium" error message.
        This is not dangerous as long as nothing will be written to a file,
        thus such a test can safely be used to verify that malfunction.


*  >>   where applicable, adjust your screenfiles to the changed properties:

L-LOAD  +CONTINUE       (I)
        -->> IMMEDIATE ausgefhrt.

(;) (D#) (PROMPT) CC4TH CC-4TH
        -->> HIDDEN-Vocabular. Insbes. durch (PROMPT) und (ERT) sind in
        den Screenfiles im _gf_-Directory Anpassungen erforderlich, z.B:
                .. also hidden (prompt) previous ..

(EXPER) [;C]
        -->> ASSEMBLER-Vocabular.

(EXPER) ( -- ) (D)
        Wird bei einem Fehler in EXPECT daraus aufgerufen und stellt den
        minimal erforderlichen i/o-Kontext wieder her, indem TIB und die
        i/o-Kanle auf die Vorgabewerte zurckgestellt und die Bereitschafts-
        Meldung der Eingabe aktiviert werden.
   >>   The routine executed by (EXPER), which will be executed by EXPECT if
        an error occurred, was made to recover TIB, the i/o channels, and
        re-activating the keyboard prompt. A redefinition should at least do
        that, and may be used to execute any other i/o re-initiating stuff.


* wegen geringen Nutzens (und o.g. Speicherprobleme) entfernt

!A, @A  und alle anderen "aligned" store/fetch-Operatoren. Die entsprechenden
        byteweise arbeitenden Operatoren sind nur unwesentlich langsamer.
   >>   the aligned store/fetch operators have been cancelled because of
        their little use and the above mentioned memory related problems.


* nderungen intern, Korrekturen:


-FORGET fr compilierte Variante in Ordnung gebracht.

TOP-NFA Fehler im Returnstack korrigiert.
        (Gutes Beispiel, da auch zuviel "Sicherheit" mglich ist: Weil beim
        (Ausprobieren in direkter Eingabe Rckkehr immer nach QUIT erfolgt,
        (wo der Returnstack zurckgesetzt wird, und weil "oberhalb" dieser
        (Position sicherheitshalber noch die cfa von QUIT abgelegt ist, ein
        (Irrlufer auch deshalb meist dorhin verzweigt, ist der fehlende Posten
        (mir bislang nie aufgefallen...

UM/MOD  ( ud1 u2 -- ur uq )
        gibt bei Divisions-berlauf das passend justierte Ergebis aus QM/MOD
        zurck, wodurch dann immerhin der Divisionsrest noch richtig abgelie-
        fert wird. Prfung darauf anhand des Quotienten, der diesen Fllen
        gleich dem hherwertigen Teil des Dividenden ist.
   >>   modified to always return the correct remainder. An overflow of the
        quotient can be detected by comparing the m.s. word of the dividend
        with the quotient which then will be equal.

-0  SP@  RP@ TICK
        Adressen von Timer, 4th-Basis und Stacks initial auf Vielfache von 4
        Bytes justiert, woraus fr Processoren ab 68020 deutlich verbesserte
        Ausfhrungsgeschwindigkeit bei 32-Bit-Speicheroperationen resultiert.
        Sie werden dann in derselben Zeit ausgefhrt, wie 16-Bit-Operationen.

?LOCALS Fehler in der Zhlerbearbeitung korrigiert und Fehlervorgabe ingefgt.
        Kann nun z.B. bei irregulrem Abbruch zur Freigabe des Local-Speichers
        benutzt werden, bei gleichzeitiger Re-Initiierung von S0 auf TIB:
                -1 LOCC ! ?LOCALS 2DROP
        oder, nicht immer ganz so radikal:
                | ?LOCALS -DUP IF 2/ LOC> ENDIF DROP
                  ?LOCALS OR IF -1 LOCC ! ?LOCALS 2DROP ENDIF |
   >>   can now be used to de-allocate Locals memory if the program flow was
        interrupted irregularly.

Verschiedene Code-Teile
        zur Gewinnung von freiem Platz im 4th-Bereich weitere Hi-Level-Teile
        in Lo-Level-Code bertragen. Sofern darin nicht auf den Returnstack
        zugegriffen wird, knnen nun Primitives, Deferred-Worte und(!) Colon-
        Definitionen (Hi-Level..) von beliebigem Ort aus dem Assembly aufge-
        rufen werden, ohne da der Schutz-Job einen Fehler meldet. Nach dem-
        selben Muster (s. "forth_asm", <Cprim> etc) lassen sich solche Aufrufe
        auch mit dem F6-Assembler in's Dictionary oder in Files assemblieren.
        Das Compilieren von Screenfiles ist gegenber v.8.14 um bis zu 20%
        schneller, auch einige compilierte Aufrufe wurden beschleunigt.

mkchp   Flschlich wurde jede Kanal-Id mit negativer Tag-Nummer als ungltig
        bewertet - z.B. im MGG-System sind solche Kanle aber in Ordnung.
        Nur $ff00.0000 oder $ffff.ffff sind Signal fr nicht vorhandene rsp
        geschlossene Kanle. Der F6-Code wurde korrigiert. Es drften aber
        hnliche Stellen auch in den Screenfiles vorhanden sein, die ggf.
        noch anzupassen sind.
    >>  found -ve channel tags in MGG being ok, only $ff00.0000 in the QDOS
        tables, or $ffff.ffff, signalling a closed or not present channel. In
        F6 any other -ve number was falsely also interpreted as "not open".

d6.l    im Text auch mit [os] bezeichnet, dient nun als ptr auf die Basis
        der localen Variablen und ist zugleich auch ptr auf den leeren
        Datenstack, wie er als Langwort in {s0 2-} gespeichert ist, wodurch
        insbes. die Localen Variablen deutlich schneller verarbeitet werden.
   HINWEIS: Es ist nun nicht mehr mglich, mit {s0} auch den Local-Pointer
        direkt zu beeinflussen. Solche Versuche fhren zu Fehlern.
        Dazu sind nur noch die regulren Operatoren-Paare zu verwenden:
                >LOC            LOC>
                INI-LOC         END-LOC
   NDERUNG:    STK>LOC         LOC>STK
        Fr letzteres Paar wird der Returnstack zur Ablage der Bereichsgre
        benutzt, sie sind darum nur entsprechend >R und R> geordnet paarweise
        einsetzbar. Re-Initiierung (auch des TIB) notfalls mit:
                -1 LOCC ! ?LOCALS
    >>  d6 = [os] now used as the local area pointer, which is identical to
        the empty-stack-pointer, as fetched with { s0 2- 2@ }, leading to
        the LOCALs and most error checking operations execute much faster.
        BUT: {s0} cannot be used to directly manipulate the locals memory!
        The regular operator pairs should be used instead, as noted above.
   CHANGED:
        STK>LOC stores internal data to, and LOC>STK fetches them from, the
        returnstack, thus must be used in a balanced manner, like >R and R>.

Xilocal nderung der Codierung mit [ip]: Byteweises lesen fhrt zum Abbruch
        durch den F6-Schutzjob, der im betr. Codebereich die Register des
        virtuellen Forth-Processors auf geradzahligen Inhalt berwacht.
        - Alter Fehler, war lngst in Ordnung gebracht, ist offenbar durch
          Verwechslung der Arbeitsdateien erneut in den Quelltext geraten.
    >>  Bug at <Xilocal> fixed, again...

locmin  in Ordnung gebracht.

Assembly Registers
        Reg d4/d5/d6/d7/a3/a4/a5/a6/a7 - D4, D5, OS, UP, NX, IP, SP, BP, RP
        Diese und zur Zwischenspeicherung _jedes_ der verbleibenden Register
        werden im Kern benutzt. Die o.g. drfen nicht, rsp nur systemkonform,
        verndert werden, die anderen sind ggf. zu sichern.
   >>   User code should preserve the above registers, and/or maintain them
        in a system comformant manner, when calling a 4th word on kernel
        level, and also care for _any_ other registers, because they might
        not be preserved by the kernel primitives!


* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

F6 Vers. 814 => 815, 19. Mrz 1998:

Neue/genderte Files:

        as_gls
        forth_asm
        forth_scr
        fig_scr
        f6asm_scr
        keirsey_scr     (Spielerchen zur "Psycho-Analyse")
        QF
        F6ED
        F6AS


Hinweis:

     1. Alle .._4th-Files (und dandere mit C-SAVE erzeugte) mssen
        neu compiliert werden!

     2. Derzeitige Fehlfunktion im QL-Emulator "UQLX" ist auf falsche
        Emulation des CMPM Processorbefehls zurckzufhren. Vorlufig
        Korrektur nur durch Ersatz der entspechenden Passagen im
        Assemblertext mglich - oder Warten auf UQLX-Korrektur.


nderungen in den Texten

F6WORDS_txt
        weiter berarbeitet, durch bertragungsfehler verdorbene Textpartien
        ausgebessert, inhaltlich ohne wesentliche nderungen.


"f6asm_scr"

        Einige zustzliche Mnemonics fr (nicht immer alle! s.u.) Processoren ab
        68020; bis auf wenige Ausnahmen fehlen die erweiterten Adressierungsmodi.
        Auer CHK2, (das im F6 eine trap #0 auslsen wrde) sind die fr 68EC040-
        Processoren tauglichen Mnemonics in der (alten) QXL geprft und ok.
    >>  Some more mnemonics in the F6-assembler:

BFTEST, BFSET,  BFCLR,  BFCHG,  BFINS,  BFEXTU, BFEXTS, BFFFO,
CHK2,   CMP2,   EXTB,
MULU,   MULS,   DIVU,   DIVS,   in den einfachen .L-Varianten
        ab 68020,

CALLM,  RTD,    RTM,
        nur 68020

*2 *4 *8
        Scalierung bei Register-indizierter Adressierung, ab 68020.


LABEL:  T2VAR:  H:   T:
        Locale Definitionen und solche mit nur temporrem Namens-Header
        in Ordnung gebracht. Zu beachten: Diese Namen knnen nicht in
        Listenkonstruktionen {case:}, {range:} etc. eingebaut werden.
    >>  Items set up with those definitions can't be used in any of the
        list constructs, {case:}, {range:}, nor {associative:}.

LOCK, UNLOCK,
        Hilfs-Macros fr im Supervisor-Modus auszufhrende Passagen.


"forth_scr"

        Durch, berwiegend optisch wirksame, nderungen hat sich die unter
        SCR-Nummer zu adressierende Lage der Seiten ab 12 um +3 verndert.
        L-LOAD-Aufrufe sind davon unabhngig, der initiale Einsprung ist
        angepasst. Nur die Kontrolle eventuell eigener direkter Seiten-
        Angaben aus anderen Quellen ist ggf. erforderlich, nderungen in
        der eigentlichen F6-Sammlung fallen weiter _nicht_ an.


nderungen in "forth_asm"

PUSHFILE  POPFILE  INTERPRET  (LINE)
        als Primitives in den auenliegenden Codebereich bertragen.
     >> now primitives.

.. -dup IF ..   =>  .. ?0BRANCH ..
        Zusammenfassung der Fallentscheidung durch Codierung als ?0BRANCH
        in die BRANCH-Optimierung eingereiht.
     >> additionally included in the braches optimisation.
        Saves another bit of execution time and mamory space.

.. -dup 0= IF .. => .. ?1BRANCH ..
        analog, ?1BRANCH neu, altes Wort mit diesem Namen umbenannt (s.u.).
     >> new optimisation as with ?0BRANCH, old word re-named - re below.

.. over = IF drop ..  =>  .. ?=BRANCH ..
        Alt, umbenannt, war ?1BRANCH, s.o.
     >> formerly {?1BRANCH}


RCLCK, RECHP, BAUD
        <dot11d> korrigiert: "vagabundierendes" branch-Z entfernt - wei
        der Geier, wie der Code da reingekommen ist; alter Fehler, lange
        gesucht... Fiel u.a. durch Systemzusammenbruch nach BACKUP auf,
        immer zum Schlu ausgelst durch die fehlgeleitete Heapfreigabe.
     >> Erroneous {branch-Z} in <dot11d> found, bug fixed.

.BYE    ( -- ptr )
        Gibt den mit ptr adressierten QDOS-Typ-String als Meldungstext
        an das den F6-Job mit EXEC_W o.dgl. aufrufende SBasic zurck.
        Beim Aufruf aus anderen Jobs hat D0 mit gesetztem Bit #31 die
        Adresse des Textes. Auswertung mu dann umnittelbar nach Rckkehr
        aus dem Jobaufruf erfolgen, da nach einer neuen Speicherzuweisung
        auch durch beliebige andere Jobs der Text verdorben werden kann.
     >> When called with EXEC_W etc., for exlusive execution, the return
        code in D0 will be set to the address (and bit #31 set) of the
        QDOS-type string where ptr points to.

?LOCALS ( -- bytes levels )
        Gibt Anzahl LOCAL-Zuweisungsebenen und Anzahl der insgesamt dafr
        reservierten Bytes zurck. Bei Fehlern wird S0 re-initiiert und
        die USER-Vari LOCC, die die o.a. Werte hlt, auf Null zurckgestellt.
     >> Returns current levels of LOCAL assignations and the number of
        currently reserved local bytes.


* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

F6 Vers. 813 => 814, 9. Aug 1997:

Neue/genderte Files:

        forth_asm
        forth_scr
        fig_scr
        QF
        F6ED
        F6AS


nderungen in den Texten

F6WORDS_txt
        berarbeitet, durch bertragungsfehler verdorbene Textpartien
        ausgebessert, inhaltlich ohne wesentliche nderungen.


nderungen in "forth_asm"

FSSAVE  und andere File-i/o-Sequenzen netzwerktauglich gemacht.
        Z.B. bricht die qdos-Trap fs.save beim Senden ber Netzwerk meist
        schon nach einer geringen Anzahl Bytes ab, auch io.sstrg liefert
        bei greren Datenblcken selten den String vollstndig ab.
        FSSAVE benutzt im F6 nun die Trap io.sstrg in Blcken zu max. 1K
        und wiederholt die Aufrufe solange, bis smtliche Daten gesendet
        wurden.
     >> using io.sstrg internelly to safely send all data via NET or to MDV,
        where fs.save mostly returned incomplete.


nderung in "forth_scr"

BACKUP  der innere Aufruf {-bup} und das Wort {bcy}, das den Datentransport
        erledigt, sind fr NETzwerktauglichkeit korrigiert.
     >> {-bup} and {bcy} modified to reliably NETworking.


* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

F6 Vers. 812 => 813, 1. Juni 1997:

        Die Aufzeichnungen hierzu sind durch vollstndigen Datenverlust
        zweier Festplatten restlos verlorengegangen. Aus dem Gedchtnis
        nur soviel (vollstndige Beschreibung in "F6WORDS_txt"):

        Systemstart erneut an SMSQ-Eigenheiten & -Fehler (z.B. CN_-Vectoren)
        angepat. Ein paar eigene Fehler korrigiert (wird wohl so sein...).

LOC>    Bei LOCal-Bereichszuweisung wird der betr. Speicher mit 0 initiiert.
     >> uninitiated Local memory cleared to zeroes.

>FOUNT  ( selector chan -- )
        Selector = -23 fr den Latin1-Zeichensatz; ein weiterer Zeichensatz
        mit einigen speziellen Graphikzeichen ist mit -19 codiert.

HISTORY Die Commandline-History von B.Jakubith wird erkannt und ggf. beim
        Systemstart mit 80 Zeilen fr {in-cons} automatisch installiert.
     >> At system startup an 80 lines commandline history will be initiated
        automatcally if the device (by B.Jakubith, "oktagon") was found.

MOVE-MEM wird blockweise im Supervisor-Modus ausgefhrt.

        Neu:

CONS+   def: ( nn CONS+ name -- ) exec: ( n1 -- n2 )
        einfache Constante, bei Aufruf in den Stack addiert.
    >>> single which will be added to the value already on t.o.s.

CONSM+  def: ( nn CONSM+ name -- ) exec: ( dn1 -- dn2 )
        einfache Constante, bei Aufruf vorzeichenerweitert zum doppelten
        Posten im Stack addiert.
    >>> sign extended single which will be added to double on t.o.s.

IS-HIS  ( chan -- flag )
        flag = 1 wenn der Kanal chan eine Commandline-History besitzt.


* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

F6 Vers. 809 => 810, 18. Sept 1996:

        Codeblcke zum Einbau durch C-LOAD in diese Version mssen
        neu compiliert werden.
>>>     Codeblocks for C-LOAD need to be re-compiled.

Betroffen sind:
"QF" und "forth_asm"

Korrektur:

0>      lieferte beim Vergleich mit $8000 den falschen Flagwert 1.
    >>> wrong result with $8000 corrected.


Neu:

BFTST                   ( udadr ud -- flg )
        Test Bit#(ud) im Feld ab Adresse udadr. flg ist der Bit-Wert 0 oder 1.
    >>> Test bit#(ud) in the bit field beginning in memory at l.s.b. of dadr.

BFCLR BFSET BFCHG       ( udadr ud -- )
        Bit#(ud) im Feld ab Adresse udadr lschen, setzen, kippen.
    >>> clear, set, invert bit#(ud) in bit field beginning at udadr.

nderungen:

BTST BSET BCLR
    >>> deleted, may be compiled from "forth_scr".
        aus dem Kern genommen, da die neuen Bitfeld-Operationen mehr leisten;
        einzeln unter ihrem Namen rsp. alle drei unter dem Suchwort BITS z.B.
        mit L-LOAD aus "forth_scr" nachladbar.

TEXT " NAME \NAME W@ S@ S#,
>CHAN< TO-WORK SET-WORK IS-CHAN SET-CHAN
        Ganz als lo-level-Worte verfasst und Ausfhrungsroutinen in den Code-
        teil verlagert. Neben dem Laufzeitvorteil wurden damit weitere 180+
        Bytes im Forth-Adressenbereich frei (s.o., Bitfeld-Operationen).

+       ist immediate und wirkt bei einzeln vorangestelltem Festwert optimie-
        rend, indem es das compilierte LIT durch LIT+ ersetzt, was beide Worte
        zusammenfat:
                .. HERE 30 + ..
        wird umgeformt zu
                .. HERE LIT+ 30 ..
        Verhindern lt sich das mit {0 is CMC}, oder auch durch:
                .. HERE -30 - ..
    >>> The "+" operator is now an optimizing immediate compiling word.

LIT+    wurde sicherheitshalber in das HIDDEN-Vocabular eingereiht. Bereits in
        den Screenfiles benutzte Aufrufe stellt man am besten auf {+} um und
        berlt dem Compiler die Optimierung. Anderfalls mu ggf. HIDDEN in
        die Suchfolge aufgenommen werden.
    >>> this word for safety was moved to the HIDDEN vocabulary.
        Some words in the screenfiles need to be modified, compiling with the
        HIDDEN-voc. included to the search order or, preferably, by rearranging
        to using {+} instead of {LIT+}.

>LOC    ( nn -- )
        Die Anzahl nn Zellen wird mit 0 initiiert.

"forth_asm"
        Neben den nderungen zu o.a. Punkten wurde das create-Macro etwas
        gestrafft, was durch Wegfall einer Variablen wieder ein paar Labels
        mehr ermglicht.
    >>> The "create" macro was slightly modified and now seems to leave some
        more label space to the assembler wich might enable a few more future
        modifications/extensions of the kernel.


* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

F6 Vers. 808 => 809, 4. Sept 1996:

Betroffen sind:
"QF" und "forth_asm", {SORT-L} in "forth_scr", "f6asm_scr", "f6task_scr"
 und "bh_scr". Alle anderen Bestandteile der Sammlung unverndert.

Gendert:

Innere Namens-Schreibweise auf alten Zustand gebracht, stattdessen {ID.} so
gendert, da die Namen grogeschrieben erscheinen. Wortnamen knnen, wie
z.B. in "bh_scr" gezeigt, in unvernderter Ausgabe nun zugleich wieder als
beschreibender Text des jeweiligen Aufrufs benutzt werden. Dazu ist ledig-
lich eine zweite Form der Namensausgabe erforderlich, {.ID} im Beispiel, wo
keine Umwandlung in Groschreibung vorgenommen wird.
>>>
Old storage mode of forth names restored, while {ID.} "ANSIfied" to display
uppercase names.

Korrigiert:

WARNING
        wurde in CREATE als Variablenpointer ausgewertet, nicht als deren Wert,
        soda die Meldung berdefinierter Namen stets ausblieb.
    >>> WARNING again correctly evaluated by CREATE.

"forth_scr"
SORT-L in Ordnung gebracht (falsche Datenmanipulation beim Pointeraustausch).
   >>> item order bug fixed.

"f6asm_scr"
   >>> SR/CCR/imed related bugs concerning the ADD/AND group fixed.

Beim Immediate-Adressierungszhler fehlte der Leseoprator (scr 41).
Fehler hierdurch waren allerdings bisher nicht feststellbar, weder bei den
Prfseiten am Ende von "as_gls", noch beim Assemblieren von "f6task_scr".

Bei XOR, und verwandten Mnemonics war die Fehlerabfrage verdreht, soda
Speicher als Ziel nicht assemblierbar war und in Verbindung mit dem Status-
register Fehler auftraten (scr 55, 56).

Wenn der Assembler auch mglichst viele Fehler abfangen soll, erfat er
jedoch lngst nicht jede mgliche Fehlersituation, und es sind, wie das
Beispiel zeigt, auch die berwachten Mglichkeiten nicht vollstndig
ausgetestet. - Wer solche Fehler findet, wird um Nachricht gebeten.

* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *

 eof 
