(* ASSEMBLER *) (* FLORIAN MATTHES 31.5.1986 *) (*$"ASS.DECL.P" *) (*$"ASS.MOD1.P" *) (*$"ASS.MOD2.P" *) (*$"ASS.MOD3.P" *) (*$"ASS.MOD4.P" *) (*$"ASS.MOD5.P" *) (*$"ASS.MOD6.P" *) BEGIN (* MAIN *) (* KONSTANTEN VORBELEGEN *) LITSET := ["A".."Z"]; NUMSET := ["0".."9"]; LIT2SET:= LITSET + NUMSET+ ["."]; LITSET := LITSET + [LESS]; HEXSET := NUMSET + ["A".."F"]; TICK:= CHR(34); WRITELN("“ASSEMBLER V4:"); WRITELN("============="); WRITE("ABBRUCH BEI FEHLERN"); READBOOLEAN(STOP,FALSE); WRITE("HALT BEI ANZEIGEN"); READBOOLEAN(WAIT,TRUE); WRITELN("NAME SOURCEFILE (OHNE .E)"); I:=0; REPEAT I:=I+1;READ(FILENAME[I]); UNTIL FILENAME[I]=" "; FILENAME[I]:="."; FILENAME[I+1]:="E"; EXTPOS:=I+1; FILENAME[I+2]:=","; FILENAME[I+3]:="P"; FILENAME[I+4]:=","; FILENAME[I+5]:="R"; OPEN(DSKCMD,8,15,"I0"); OPEN(SOURCEFILE,8,2,FILENAME); DISK; ROOTLABEL:=NIL; (* LABELBAUM IST LEER *) ER:=0; PASS:=1; ANFANG:=-1; INIT; (* PASS 1 *) (* ====== *) AD:=ANFANG; WHILE TOKEN<>SOURCEEND DO BEGIN NEWLINE; WHILE TOKEN=LBL DO BEGIN DEFINE(GLOBALLBL,AD); GETXTOKEN END; CASE TOKEN OF OPC: INCREMENTAD; EQU: DOEQU; DFD: DODFD; IMP: DOIMPORT; EXP: DOEXPORT(FILENAME,EXTPOS); ORG: BEGIN GETTOKEN; FORMULA(ANFANG,ART,TRUE); AD:=ANFANG; IF TOKEN<>LINEEND THEN ERROR(1); WRITE("STARTADRESSE DES CODE:"); WRITEADR(ANFANG,0); END; LINEEND,SOURCEEND: (* NICHTS *); ELSE ERROR(1) END; (* CASE *) END; CLOSE(SOURCEFILE); DISK; WRITELN("PASS 1 BEENDET."); LABELTABELLE; KEY; (* PASS 2 *) (* ====== *) OPEN(SOURCEFILE,8,2,FILENAME); DISK; FILENAME[EXTPOS] :="M"; FILENAME[EXTPOS+4]:="W"; WRITELN(DSKCMD,"S0:",FILENAME);DISK; OPEN(CODEFILE ,8,3,FILENAME); DISK; IF ANFANG=-1 THEN ERROR(8); OUT(ANFANG);OUT(HBYTE(ANFANG)); PASS:=2; AD:=ANFANG; INIT; WHILE TOKEN<>SOURCEEND DO BEGIN NEWLINE; WHILE TOKEN=LBL DO GETXTOKEN; CASE TOKEN OF OPC: ASSEMBLE(GLOBALLBL,GLOBALMODE); DFD: DODFD; ELSE (* LINEEND/SOURCEEND/EQU... *) END; (* CASE *) END; WRITELN("PASS 2 BEENDET."); WRITELN; WRITE("ENDADRESSE:"); WRITEADR(ADDU(AD,-1),0); WRITELN; WRITELN(ER," FEHLER GEFUNDEN."); WAIT:=TRUE; LABELTABELLE; 9: (* ABORT *) CLOSE(CODEFILE); DISK; CLOSE(SOURCEFILE); DISK; CLOSE(DSKCMD); END.