************************************************************ 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