PROGRAM ASSEMBLER(INPUT,OUTPUT); (* F. MATTHES VERSION: 31.5.'86 *) (* MIT SUCHE.E VOM 28.5.'86 *) (* COMPILIEREN MIT ORG = 6510 *) LABEL 9; (* ABORT LABEL *) CONST LAENGE=8; (* ZEICHEN/LABEL *) START =5646;(* ROUTINE 1 IN M-CODE *) UMULTI=5758;(* ROUTINE 2 IN M-CODE *) LESS ="<"; (* FUER Z-PAGE LABELS *) (* DIE VERWENDETEN 'TOKEN': *) LINEEND =";";KOMMA =","; DBLCROSS="#"; LBRACK ="(";RBRACK=")"; LSQBRACK="["; RSQBRACK ="]";TILDE ="^"; PLUS ="+"; MINUS ="-";ANDTOKEN="&";ORTOKEN="!"; HEX ="$";BIN ="%"; OKT ="@"; STAR ="*"; SOURCEEND="A";KONST ="B"; LBL ="C"; ORG ="D";EQU ="E"; DFD ="F"; OPC ="G";IMP ="H"; EXP ="I"; (* DIE ADRESSIERUNGSARTEN: *) (* BINAERE DARSTELLUNG: *) IMPLIED = 1; (* .......1 *) (* ZERO PAGE ......1. *) (* ABSOLUTE ......11 *) (* ZERO PAGE,X .....11. *) (* ABSOLUTE ,X .....111 *) (* ZERO PAGE,Y ....1.1. *) (* ABSOLUTE ,Y ....1.11 *) IMMEDIATE = 18;(* ...1..1. *) IND = 35;(* ..1...11 *) INDX = 38;(* ..1..11. *) INDY = 42;(* ..1.1.1. *) RELATIVE = 66;(* .1....1. *) UNKNOWN =255; (* STRINGKONSTANTEN (LAENGE = 8) *) EMPTYLBL =" "; JSRSTR ="JSR "; JMPSTR ="JMP "; DFDSTR ="DFD ";(* DEFINE DATA *) EQUSTR ="EQU ";(* DEFINE LABEL *) ENDSTR ="END ";(* END OF SOURCE*) ORGSTR ="ORG ";(* STARTADDRESS *) IMPSTR ="IMP ";(* IMPORT LABELS*) EXPSTR ="EXP ";(* EXPORT LABELS*) XREGISTER="X "; YREGISTER="Y "; TYPE LSTRING=ARRAY[1..LAENGE] OF CHAR; FSTRING=ARRAY[1..20] OF CHAR; TPLABEL=^TLABEL; TLABEL =RECORD NAMEN: LSTRING; WERT : INTEGER; L,R : TPLABEL; END; TMODE =0..255; (* ADRESSIERUNGSART *) TART =(BYTE,ADDRESS,EXAKT); (* ERGEBNIS'TYPEN' *) TTOKEN =CHAR; (* AM EINFACHSTEN SO *) VAR STOP, WAIT: BOOLEAN; (* STEUERUNG *) ZN : INTEGER; (* LFD. ZEILE *) (* AUCH < 0 ! *) LASTZN : INTEGER; (* LETZTE ZEILE *) (* MIT LABEL *) ROOTLABEL,LASTLABEL:TPLABEL; (* LABELBAUM *) ER : INTEGER; (* FEHLERZAEHLER *) PASS : 1..2; (* LFD. PASS *) I : INTEGER; FILENAME : FSTRING; (* SOURCEFILE *) EXTPOS : INTEGER; (* INDEX DER *) (* EXTENSION *) CODEFILE, SOURCEFILE: TEXT; DSKCMD : TEXT; (* KOMMANDOKANAL *) (* DISKETTE *) AD,ANFANG :INTEGER; (* ADREESEN IM *) (* CODE *) ART : TART; (* NUR FUER ORG *) (* EIN PAAR KONSTANTEN: *) HEXSET,LITSET, LIT2SET,NUMSET: SET OF CHAR; TICK : CHAR; (* TOKEN "" *) LINELENGTH: INTEGER; (* LAENGE EINER *) (* SOURCEZEILE *) FILESIZE : INTEGER; (* # ZEILEN *) CH : CHAR; (* VON GETCHAR *) P : INTEGER; (* VON GETCHAR *) TOKEN : TTOKEN; (* VON GETTOKEN *) GLOBALLBL : LSTRING; (* IF TOKEN = LBL*) GLOBALVAL : INTEGER; (* IF TOKEN=KONST*) GLOBALMODE: INTEGER; (* IF TOKEN = OPC*) (* SCHNITTSTELLE ZU M-CODE: *) GLOBALOPC : LSTRING[5620]; GLOBALAM : INTEGER[5636]; GLOBALHI : INTEGER[5637]; (* + 1 *) GLOBALZW : INTEGER[5638]; GLOBALMOR : INTEGER[5640]; GLOBALMND : INTEGER[5642]; GLOBALERG : INTEGER[5644];