2300 5665 15d1 T ... GENS DOC NEW
************************************************************
    ASSEMBLER GENS 3.2 fuer Z 1013
************************************************************
 
GENS 3.2 (GENS) ist ein leistungsfaehiger 2 Pass Assembler von
Hisoft. In der Version fuer den Z 1013 ist das Programm leicht
abgeruestet. Es haben die Definitionen der Standard ZILOG-
Mnemonic Gueltigkeit. Im Gegensatz zum Original ist die Z 1013
Version nicht verschieblich. Es belegt den Speicher von
 100H ...1FFFH
Startadresse       100H
Restartadresse     2F8H
        oder       11AH
Das Programm veraendert sich waehrend des Laufs. Es wird eine
Druckerschnittstelle (CALL auf 162H) und ein Tastaturbeep 
(CALL auf 1F4H) realisiert.
Die Routinen SARUF (CALL auf 8CA) und LORUF (CALL auf A17H)
sind je nach Version über Sprungverteiler zu nutzen, oder werden
als Bestandteil des Programms beim Start auf F800H verschoben.
Letzteres kann zu Problemen bei Monitoren mit 4kByte führen.
Der Assembliervorgang ( Kommando A ) benoetigt eine Symbol-
tabelle die festgelegt werden kann. Zum Assemblieren koennen
Optionen festgelegt werden.
Option 1   Erzeugt ein Symboltabellen- Listing nach Lauf 2.
Option 4   Unterdrueckt Ausgabe Assembler Listing.
Option 8   Druckt Assemblerlisting.
Die Druckerschnittstelle übergibt im A- Register ein ASCII-
Zeichen. Zu beachten ist das Steuerzeichen 09H, daß einen
Tabulator von 8 Zeichenpositionen repräsentiert. Als Zeilenab-
schluß wird nur ein 0DH ausgegeben.
Es existieren Versionen mit der S 3004 über Optokoppler (durch
Ersatz des CPL- Befehls durch ein NOP auch ohne Optokoppler
nutzbar) und für einen CENTRONIC- Drucker.
Der erste Durchlauf liefert nur Fehlermeldungen. Es kommt die 
Meldung "Pass 1 errors : nn" und Lauf 2 wird nicht gestartet.
Labels die nicht im Operandenfeld auftauchen werden mit
"WARNING* Label absent" gemeldet.
Das Assemblerlisting hat folgende Form:
C000 210100   25  Label:  LD   HL,0001     ;Kommentar
1    6        15  21      26   (Positionen auf dem Bildschirm)
Die Zeilennummer ist im Bereich 1 bis 32767 zulaessig.
Der Assembler nutzt die Original ZILOG- Mnemonic.
Als Fehler werden im zweiten Lauf nur Error 10 und "BAD ORG"
angezeigt. Am Ende folgt die Meldung "Pass 2 errors nn", gefolgt
von einer Warnung bei fehlenden Labels. Die Belegung der Symbol-
tabelle wird durch "Table used xxxx from yyyy" angezeigt.
 
          ZEILENBEARBEITUNG
********************************************************
Eine Zeile des Quelltextes hat folgenden Aufbau:
Zeilennummer Label  Mnemonic Operanden  ;Kommentar
z.B. 10 ANFANG: LD  HL,WERT   ;Beispiel
 ";"    Die diesem Zeichen folgende Zeile wird als Kommentar
        bewertet und hat keine Wirkkung.
 "*"    Das nacchfolgende Zeichen wird als Assemblerkommando
        behandelt. Weitere Zeichen sind Kommentar.
 LABEL  Ist ein Symbol das einen 16 bit Wert repraesentiert.
        Ein Label kann ueber die EQU- Anweisung als Konstante
        definert werden. Nur die ersten sechs Zeichen eines 
        Labels sind signifikant. Ein Label beginnt stets mit 
        einem Buchstaben.
 ADR    Der Assembler verwaltet einen Adresszaehler. Mit der
        ORG- Anweisung kann dieser gesetzt werden. Mit dem 
        Symbol "&>" kann auf den Adresszaehler zugegriffen werden.
        z.B. LD HL,&>+5 laedt HL mit dem Wert Adresszaehler+5.
 SYMTAB Jedes Label wird in die Symboltabelle eingetragen.
        Die Symbolltabelle ist vom Typ Binary Tree Symbol Table
        wodurch ein effizientes Arbeiten moeglich ist.
             AUSDRUECKE
**********************************************************
TERM        dezimale Konstante             z.B. 1234
            hexadezimale Konstante         z.B. #123
            binaere Konstante              z.B. %10010011
            Zeichenkonstante               z.B. "abc"
            Label                          z.B. L1234
            $ kann benutzt werden um den Wert des Adresszaelers
            zu beschreiben
OPERATOR    + Addition
            - Subtraktion
            &> logisches AND
            . logisches OR
            ! logisches XOR
            * Integermultiplikation
            / Integerdivision
            ? MOD- Funktion (a?b = a-(a/b)*a)
Arithmetische Operationen verwenden das Zweierkomplement, dass
heisst Zahlen groesser 32767 werden negativ dargestellt.
           ASSEMBLERANWEISUNGEN
**********************************************************
ORG ausdruck   setzt den Adresszaehler auf den Wert Ausdruck.
               Wird durch ORG ein Ueberschreiben des Programms
               veranlasst folgt die Ausschrift "BAD ORG" und
               ein Abbruch der Assemblierung.
EQU ausdruck   weist dem vorangestellten Label den Wert Ausdruck 
               zu. Der Ausdruck darf kein Symbol enthalten 
               das noch nicht vereinbart wurde.
DEFB ausdruck, ausdruck, ...
               Der durch den Adresszaehler bestimmten Speicher-
               zelle wird ein 8 bit Wert entsprechend Ausdruck
               zugewiesen.
DEFW ausdruck, ausdruck, ...
               Auf das durch den Adresszaehler bestimmten 
               Speicherplatzpaar wird ein Wort entsprechend
               Ausdruck gesetzt.
DEFS ausdruck  Erhoeht den Adresszaehler um den Wert Ausdruck.
               Damit wird ein Speicherbereich reserviert.
DEFM "s"       Den Speicherplaetzen wird ein ASCII- String zu-
               gewiesen. Die Laenge betraegt maximal 255 Zeichen.
               Am Anfang und Ende muessen """ stehen.
ENT ausdruck   setzt die Startadresse des Objektcodes auf den
               Wert Ausdruck. Wichtig fuer das Assemblerkommando
               "R" und zum Ermitteln der Startadresse.
IF ausdruck    Wertet Ausdruck aus. Nur wenn dieser ungleich
               Null ist wird die Assemblierung fortgesetzt.
               Ansonsten wird die Assemblierung bis ELSE oder 
               END ausgesetzt.
ELSE           Schaltet die Assemblierung ein oder aus je nach
               vorhergehendem Modus.
END            beendet die Assemblierung.
             ASSEMBLERKOMMANDOS
*********************************************************
*E      erzeugt drei Zeilen auf dem Bildschirm bzw. Drucker.
*Hs     Der String "s" wird nach jedem *E als Ueberschrift
        eingesetzt. Automatisch wird ein *E erzeugt.
*S      bewirkt ein Stopp des Listings. Durch Druecken einer
        beliebigen Taste wird das Listen fortgesetzt. Dieses
        Kommando hat keinen Einfluss auf den Drucker!
*L-     Stopt das Listing auf Drucker und Bildschirm.
*L+     Setzt Listing auf Drucker und Bildschirm fort.
*D-     Der Adresszaehler wird dezimal anstatt normalerweise
        hexadezimal angegeben.
*D+     Die Wirkung von *D- wird wieder aufgehoben.
*C-     Das Assemblerlisting wird um den Objektcode verkuerzt.
*C+     Wirkung von *C- wird wieder aufgehoben.
*F filename
        Dieses Kommando erlaubt die Assemblierung von der 
        Kassette. Das File muss vorher mit "T" abgespeichert
        werden.
*M+     Durch dieses Kommando wird veranlasst, dass ein Macro
        vollstaendig aufgelistet wird. 
*M-     Im Listing erscheint nur der Macroname.
Ein Macro hat folgende Form:
Name     MAC
         Macrodefinition
         ENDM
 
EDITORFUNKTIONEN
----------------
GENS enthaelt einen Editor, der zeilenorientiert arbeitet. Der
Editor erzeugt ein komprimiertes File. Folgende Zeichen sind
fuer den Editor von Bedeutung:
"ENTER"      0DH Zeilenabschluss
"BACKSPACE"  08H Loeschen eines Zeichen
"TAB"        09H Vorwaerts zur naechsten Tabulatorposition.
Eine Kommandozeile des Editors hat folgenden Aufbau:
K n1,n2,s1,s2
K         Kommandobuchstabe
n1,n2     Zeilennummer im Bereich 1 ... 32767
s1,s2     Zeichenkette der maximalen Laenge 20
I n,m     Automatische Zeilennnummerierung ab n mit der
          Schrittweite m.
L n,m     Listen des Quelltextes von Zeile n bis Zeile m.
K n       Einstellung der Anzahl der Zeilen fuer List. n
          ist eine MOD 255 Zahl die bis zum naechsten K-                                 
          Kommando gespeichert wird.
D n,m     Loeschen eines Zeilenbereichs von n bis m. Soll nur
          eine Zeile geloescht werden ist n gleich m. 
M n,m     Die Zeile n wird nach Zeilennummer m transportiert.
          Falls eine Zeile m vorhanden ist, wird diese geloescht.
N n,m     Neunummerierung von Zeile n in Abstaenden von m.
F n,m,f,s Suchen nach einem String im Zeilenbereich von n
          bis m. Wird die Zeichenkette f gefunden, so wird in
          in den EDIT- Modus gesprungen und die Zeichenkette
          f gegen die Zeichenkette s ausgetauscht. 
P n,m     Der Zeilenbereich n bis m wird mittels HEADER abge-
          gespeichert. Filetyp ist "G" .
G         Von der Kassette wird ein File im HEADER Format einge- 
          lesen. Ein Anhängen von Programmen ist problemlos 
          möglich. Reassemblerprogramme die mit MONS 3M erstellt 
          wurden, und mit HSAVE abgespeichert wurden 
          lassen sich einladen und weiter bearbeiten.
T n,m,s   Abspeichern der Zeilen n bis m unter dem Filenamen
          s. So abgespeicherte Files koennen vom Band                                 
          assembliert werden.
A         Assemblierung des gesamten Textfiles.
R         Probelauf des Programms. Vorraussetzung ist der
          Gebrauch der Assembleranweisung ENT.
B         Austritt aus GENS in das Betriebssystem des Z 1013.
V         Bringt die aktuellen Werte von n1 und n2 zur Anzeige.
X         Die Start- und Endadresse des Textfiles werden                                 
          dezimal angezeigt.
W n,m     Der Zeilenbereich n bis m wird ausgedruckt.
          Aller 54 Zeilen wird ein STOP eingefügt.
R         Ermöglicht das Laden eines GENS- Programms, daß
          mit der herkömmlichen GENS- Routine abgespeichert
          wurde.
S n,m,s   Hiermit wird ein Zeilenbereich des Quelltextes
          mit einer TINY- BASIC ähnlichen Routine unter
          dem Namen "s" abgespeichert.
E n       Editierung der Zeile n. Folgende Subkommandos
          sind verfuegbar:
" "    Incrementiert den Textzeiger um eins.
"TAB"  (09H) Textzeiger wird auf die naechste Tabulatorposition
       gestellt.
"ENT"  Beendigung des Editiermodus.
"Q"    Beendet die Editierung dieser Zeile ohne die Aenderungen
       zu uebernehmen.
"R"    Laedt nochmals die Originalzeile aus dem Puffer und 
       Ueberschreibt damit die geaenderte Zeile.
"L"    Listet den Rest der Zeile hinter dem Textzeiger.
"K"    Loescht ein Zeichen auf der aktuellen Kursorposition.
"Z"    Loescht Zeichen von der Kursorposition einschliesslich
       bis zum Zeilenende.
"F"    Sucht weiter nach dem im F- Kommando definierten 
       Zeichenkette f. Wird der String f gefunden so befindet
       man sich im EDIT- Modus am Anfang der betreffenden
       Zeile.
"S"    Ersetzt den aktuellen f- String durch den s- String.
"I"    Einfuegen von Zeichen ab der aktuellen Position.
"x"    Bewegt den Textzeiger an das Zeilenende und beendet
       den aktuellen Sub- Modus.
"C"    Ermoeglicht den Austausch der Zeichen ab der aktuellen
       Position. Mit ENT wird dieser Submodus beendet.
 
 *** FEHLERMELDUNGEN ***
ERROR 01   Fehler im Aufbau dieser Zeile
ERROR 02   Mnemonic wurde nicht erkannt 
ERROR 03   Statement schlecht geformt
ERROR 04   Symbol mehr als einmal definiert
ERROR 05   Zeile enthaelt unerlaubtes Zeichen
ERROR 06   Ein Operand dieser Zeile ist unerlaubt
ERROR 07   Ein reserviertes Wort wurde als Symbol verwendet
ERROR 08   Falsche Registerbenutzung
ERROR 09   Zu viele Register in dieser Zeile
ERROR 10   Der Wert des Ausdrucks ist unzulaessig
ERROR 11   Befehl JP (IX+n) und JP (IY+n) sind unerlaubt
ERROR 12   Fehler bei der Anwendung einer Assembleranweisung
ERROR 13   Illegale Vorwaertsreferenz ; Zugriff auf ein noch
           nicht definiertes Symbol
ERROR 14   Division durch Null
ERROR 15   Ueberlauf in einer Multiplikationsoperation
ERROR 16   Verschachtelte Macrodefinition
ERROR 17   Marke ist nicht als Macro definiert
ERROR 18   Verschachtelter Macroaufruf
ERROR 19   Verschachteltes bedingtes Statement
BAD ORG!   Die Anwendung der ORG Anweisung haette die Zer-
           stoerung des GENS oder der Symboltabelle zur Folge
Out of Table Space
           Der vereinbarte Platz fuer die Symboltabelle ist
           nicht ausreichend.
Bad Memory Der Speicherplatz fuer den Quelltext ist nicht
           ausreichend.
*** RESERVIERTE WORTE
A B C D E H L I R $
AF BC DE HL IX IY SP NC Z NZ M P PE PO
 
*** MNEMONICS DES ASSEMBLERS ***
ADC   ADD   AND   BIT   CALL  CCF   CP    CPD   CPDR
CPI   CPIR  CPL   DAA   DEC   DI    DJNZ  EI    EX
EXX   HALT  IM    IN    INC   IND   INDR  INI   INIR
JP    JR    LD    LDD   LDDR  LDI   LDIR  NEG   NOP
OR    OTDR  OTIR  OUT   OUTD  OUTI  POP   PUSH  RES
RET   RETI  RETN  RL    RLA   RLC   RLCA  RLD   RR
RRA   RRC   RRCA  RRD   RST   SBC   SCF   SET   SLA
SRA   SRL   SUB   XOR
DEFB  DEFM  DEFS  DEFW  ELSE  END   ENT   EQU   IF    ORG
*D  *E  *H  *L  *S  *C  *F
Diese Beschreibung wurde unter Verwendung der HISOFT Dokummentation
durch Test der vorliegenden Version erarbeitet.
Hinweise, Fehler und Rueckfragen bitte an:
Andreas Koehler
Tiroler Str. 9
Dessau 
4500