home *** CD-ROM | disk | FTP | other *** search
- /*
- * Z80 - Assembler
- * Copyright (C) 1987-1992 by Udo Munk
- *
- * History:
- * 17-SEP-1987 Development under Digital Research CP/M 2.2
- * 28-JUN-1988 Switched to Unix System V.3
- */
-
- /*
- * Rechner und Betriebssystem abhaengige Definitionen
- */
- #define LENFN 128 /* max. Laenge von Filenamen */
- #define READA "r" /* file open mode read ascii */
- #define WRITEA "w" /* file open mode write ascii */
- #define WRITEB "w" /* file open mode write binary */
-
- /*
- * Diverse Konstanten
- */
- #define REL "1.1"
- #define COPYR "Copyright (C) 1988, 89, 90 by Udo Munk"
- #define SRCEXT ".asm" /* Filenamen-Extension der Quelle */
- #define OBJEXT ".bin" /* Filenamen-Extension des Object Code */
- #define LSTEXT ".lis" /* Filenamen-Extension des Listings */
- #define OUTBIN 1 /* Format der Objektdatei: binaer */
- #define OUTMOS 2 /* Mostek binaer */
- #define OUTHEX 3 /* Intel hex */
- #define OUTDEF OUTMOS /* Default-Format der Objektdatei */
- #define COMMENT ';' /* Kommentar-Zeichen */
- #define LINCOM '*' /* wenn in Spalte 1, Kommentarzeile */
- #define LABSEP ':' /* Label-Seperator */
- #define STRSEP '\'' /* String-Separator */
- #define ENDFILE "END" /* Ende der Quelle */
- #define MAXFN 512 /* max. Anzahl Quellen */
- #define MAXLINE 128 /* max. Laenge einer Zeile Quelle */
- #define PLENGTH 65 /* Default Anzahl Zeilen/Seite im Listing */
- #define SYMSIZE 8 /* max. Laenge Symbole */
- #define INCNEST 5 /* INCLUDE Verschachtelungstiefe */
- #define IFNEST 5 /* IF.. Verschachtelungstiefe */
- #define HASHSIZE 500 /* Anzahl Eintraege in Symbol-Hash-Array */
- #define OPCARRAY 256 /* Groesse des Arrays fuer generierte Ops */
- #define SYMINC 100 /* Anfangsgroesse des sortierten Symbol-Array */
-
- /*
- * Struktur der OP-Code Tabelle
- */
- struct opc {
- char *op_name; /* Op-Code Name */
- int (*op_fun) (); /* Pointer auf Funktion zur Codeerzeugung */
- int op_c1; /* erster Basis-OP-Code */
- int op_c2; /* zweiter Basis-OP-Code */
- };
-
- /*
- * Struktur der Operanden Tabelle
- */
- struct ope {
- char *ope_name; /* Operand Name */
- int ope_sym; /* Symbolischer Wert des Operanden */
- };
-
- /*
- * Struktur der Symbol-Tabelleneintraege
- */
- struct sym {
- char *sym_name; /* Symbol Name */
- int sym_wert; /* Symbol Wert */
- struct sym *sym_next; /* naechster Eintrag */
- };
-
- /*
- * Struktur fuer verschachtelte INCLUDE's
- */
- struct inc {
- unsigned inc_line; /* Zeilenzaehler fuers Listing */
- char *inc_fn; /* Filename der Datei mit INCLUDE */
- FILE *inc_fp; /* Filepointer der Datei mit INCLUDE */
- };
-
- /*
- * Definition der Symbole fuer die Operanden.
- * Die Definitionen fuer Register A, B, C, D, H, L
- * und (HL) entsprechen den Bits in den Opcodes
- * und duerfen auf keinen Fall geaendert werden!
- */
- #define REGB 0 /* Register B */
- #define REGC 1 /* Register C */
- #define REGD 2 /* Register D */
- #define REGE 3 /* Register E */
- #define REGH 4 /* Register H */
- #define REGL 5 /* Register L */
- #define REGIHL 6 /* Register indirekt HL */
- #define REGA 7 /* Register A */
- #define REGI 8 /* Register I */
- #define REGR 9 /* Register R */
- #define REGAF 10 /* Registerpaar AF */
- #define REGBC 11 /* Registerpaar BC */
- #define REGDE 12 /* Registerpaar DE */
- #define REGHL 13 /* Registerpaar HL */
- #define REGIX 14 /* Register IX */
- #define REGIY 15 /* Register IY */
- #define REGSP 16 /* Register SP */
- #define REGIBC 17 /* Register indirekt BC */
- #define REGIDE 18 /* Register indirekt DE */
- #define REGIIX 19 /* Register indirekt IX */
- #define REGIIY 20 /* Register indirekt IY */
- #define REGISP 21 /* Register indirekt SP */
- #define FLGNC 30 /* Flag no carry */
- #define FLGNZ 31 /* Flag not zerro */
- #define FLGZ 32 /* Flag zerro */
- #define FLGM 33 /* Flag minus */
- #define FLGP 34 /* Flag plus */
- #define FLGPE 35 /* Flag parrity even */
- #define FLGPO 36 /* Flag parrity odd */
- #define NOOPERA 98 /* kein Operand vorhanden */
- #define NOREG 99 /* Operand ist kein Register */
-
- /*
- * Definition der Assembler-Fehler-Nummern, die
- * zu Fehlermeldungen im Listfile fuehren
- * (siehe asmerr)
- */
- #define E_ILLOPC 0 /* illegaler Opcode */
- #define E_ILLOPE 1 /* illegaler Operand */
- #define E_MISOPE 2 /* fehlender Operand */
- #define E_MULSYM 3 /* mehrfach definiertes Symbol */
- #define E_UNDSYM 4 /* undefiniertes Symbol */
- #define E_VALOUT 5 /* Wert ausserhalb Bereich */
- #define E_MISPAR 6 /* Klammer fehlt */
- #define E_MISHYP 7 /* String Separator fehlt */
- #define E_MEMOVR 8 /* memory override (ORG) */
- #define E_MISIFF 9 /* fehlendes IF bei ELSE oder ENDIF */
- #define E_IFNEST 10 /* IF zu tief verschachtelt */
- #define E_MISEIF 11 /* fehlendes ENDIF */
- #define E_INCNEST 12 /* INCLUDE zu tief verschachtelt */
-
- /*
- * Definition der Fehlernummern, die zum sofortigen
- * Abbruch des Programms fuehren (siehe fatal)
- */
- #define F_OUTMEM 0 /* out of memory */
- #define F_USAGE 1 /* usage: .... */
- #define F_HALT 2 /* Assembly halted */
- #define F_FOPEN 3 /* can't open file */
- #define F_INTERN 4 /* internal error */
-