1 ;MAC80 - An 8085 cross assembler for the DECsystem-10
3 ; Copyright 1976,1977,1978,1983
4 ; Bruce Tanner / Cerritos College
9 SEARCH M80UNV,JOBDAT,MACTEN
10 TITLE. (M80,MAC80,8085 Cross Assembler)
14 SUBTTL COMMAND SCANNER
19 MAC80: TDZA F,F ;CLEAR FLAGS
20 MOVSI F,FL.CCL ;CCL ENTRY
21 SETZM SVJBFF ;ZERO AT START
22 START:: RESET ;RESET ALL I/O
23 MOVE P,PDP ;SET UP PDL
24 SKIPE T1,SVJBFF ;1ST TIME THRU?
25 JRST .+4 ;NO--RESET .JBFF
26 MOVE T1,.JBFF ;YES--GET .JBFF
27 MOVEM T1,SVJBFF ;AND SAVE IT
28 JRST .+4 ;AND SKIP THE CORE CONTRACTION
29 MOVEM T1,.JBFF ;RESET FIRST FREE
30 CORE T1, ;SHRINK CORE BACK DOWN
31 JRST CORERR ;IMPROBABLE
32 SETZB P2,LOOKIT ;TEMP (P2) & 1ST LOC OF TEMP STORAGE
33 MOVE T1,[FILNAM,,FILNAM+1] ;REST OF TEMP STORAGE
34 BLT T1,ENDLOW ;BBLLLIIIITTTTT!
35 SETZM SYMTAB## ;START OF STORAGE
36 MOVE T1,[SYMTAB,,SYMTAB+1]
38 MOVE P1,[POINT 6,P2] ;TEMP POINTER
39 TLNE F,FL.CCL ;CCL INPUT?
41 STAR: OUTSTR ASTER ;HERE IF TTY INPUT
42 PUSHJ P,INCH ;GET CHAR
43 CAIL I,40 ;SPECIAL CHAR?
44 JRST LOOP1 ;NO--PROCESS
45 CAIN I,"Z"-100 ;TTY EOF?
48 JRST STAR ;& TRY AGAIN
49 \fINITMP: SETZ P2, ;CLEAR P2
50 MOVE P1,[POINT 6,P2] ;RESTORE BYTE POINTER
52 LOOP: PUSHJ P,INCH ;GET CHARACTER FROM WHEREVER
53 JUMPE I,XIT ;NULL--END OF THE LINE.
54 LOOP1: CAIN I,40 ;SPACE?
55 JRST LOOP ;YES, IGNORE
57 JRST LOADEV ;IF COLON-LOAD THE DEVICE
60 JRST BACK ;IF _ OR = STORE REL OR LIST FILE NAME
62 JRST LODRL1 ;IF , STORE REL FILE NAME
64 JRST RUNAME ;IF ! RUN THE PROGRAM
66 JRST LODFIL ;IF . LOAD THE FILE NAME
68 JRST LODPPN ;IF [ STORE EXT & PROCESS PPN
73 JRST DONE ;IF BREAK, WE'RE DONE
76 JRST SWITCH ;IF A SWITCH, SAVE IT
77 SUBI I,40 ;CONVERT TO SIXBIT
78 TLNE P1,770000 ;> 6 CHAR?
82 LOADEV: SKIPE DEVICE ;IF DEVICE ALREADY FULL
84 MOVEM P2,DEVICE ;STORE DEVICE
85 JRST INITMP ;INIT TEMP & LOOP
87 LODFIL: SKIPE FILNAM ;FILE NAME ALREADY THERE?
89 MOVEM P2,FILNAM ;STORE FILE NAME
92 SWITCH: PUSHJ P,INCH ;GET THE SWITCH
94 SUBI I,40 ;FORCE UPPER CASE SWITCH
96 JRST [SETOM CREFSW ;YES
97 TRO F,FR.LST ;CREF IMPLIES LIST
103 \fBACK: TRNN F,FR.LST ;IF LISTING,
104 JRST LODRL1+1 ;LOAD REL FILE
105 SKIPN T1,FILNAM ;SKIP & LOAD IF FILE NAME THERE
106 MOVE T1,P2 ;ELSE LOAD TEMP
107 MOVEM T1,LSTNAM ;LOAD LIST FILE NAME
108 SETZM FILNAM ;CLEAR OLD FILE NAME
109 CAME P2,LSTNAM ;DID WE LOAD TEMP ALREADY?
110 MOVEM P2,LSTEXT ;NO-TEMP CONTAINS LST EXT.
111 MOVE T1,DEVICE ;LOAD THE DEVICE
112 MOVEM T1,LSTDEV ;TRANSFER
113 SETZM DEVICE ;AND CLEAR DEVICE
116 LODRL1: TRO F,FR.LST ;COMMA INPLIES LIST FILE
117 SKIPN T1,FILNAM ;SKIP & LOAD IF FILE NAME THERE
118 MOVE T1,P2 ;ELSE LOAD TEMP
119 MOVEM T1,RELNAM ;LOAD RELFILE NAME
120 SETZM FILNAM ;CLEAR FILE NAME
121 CAME P2,RELNAM ;DID WE LOAD TEMP?
122 MOVEM P2,RELEXT ;NO-LOAD RELFILE EXT.
124 MOVE T1,[SIXBIT/DSK/]
144 SKIPN T1,DEVICE ;IF DEVICE IS OMITTED...
145 HRLZI T1,'DSK' ;... "DSK" IS ASSUMED
146 MOVEM T1,DEVICE ;STORE THE DEVICE
147 SKIPE FILNAM ;IF THERE IS A FILE NAME
148 JRST TSTEXT ;SEE IF THERE IS AN EXTENSION
149 SKIPN T1,P2 ;IS THERE SOMETHING IN TEMP?
150 JRST START ;NO - BAD SYNTAX
151 MOVEM T1,FILNAM ;MOVE WHATEVER
152 JRST DO.IO ;AND START DOING THE I/O
153 \fTSTEXT: SKIPN FILEXT ;ALREADY FILE EXTENSION?
154 HLLZM P2,FILEXT ;NO--STORE TEMP
155 DO.IO: MOVEI T1,0 ;ASCII
157 MOVE T2,DEVICE ;INPUT DEVICE
163 MOVE T2,DEVICE ;INPUT DEVICE
167 RELOOK: MOVE T1,FILNAM
173 TRNN F,FR.LST ;NEED A LIST FILE?
186 ENTER LST,T1 ;MAKE THE LISTFILE
188 NOLST: SKIPN SYMBSW ;IF NO SYMBOL FILE
189 JRST NOSYM ;SKIP THIS
201 ENTER SYM,T1 ;MAKE THE SYMBOL FILE
205 OUTSTR [ASCIZ/MAC80: /]
206 MOVE T1,FILNAM ;GET THE FILENAME
207 PUSHJ P,TYPE ;TYPE IT
211 MOVEM P3,TMPPTR ;SAVE TMPCOR BUFFER POINTER
227 SKIPN T2,OBJDEV ;DEVICE
257 \fINCH: TLNN F,FL.CCL ;CCL INPUT?
259 ILDB I,P3 ;GET TMPCOR CHAR
260 JRST .+2 ;JUST IN CASE...
261 INCHWL I ;GET TTY CHAR.
262 CAIL I,140 ;IF LOWER CASE,
263 SUBI I,40 ;CONVERT TO UPPER CASE
266 TYPE: MOVE T2,[POINT 6,T1]
276 OUTSTR [ASCIZ/Cannot OPEN device /]
278 OUTSTR [BYTE (7) 15,12,0,0,0]
281 ENTERR: OUTSTR [ASCIZ/ENTER error for file /]
289 OUTSTR [BYTE (7) 15,12,0]
298 OUTSTR [ASCIZ/No such file /]
304 OUTSTR [BYTE (7) 15,12,0,0,0]
306 \fTWODEV: OUTSTR [ASCIZ/Two devices
310 TWOFIL: OUTSTR [ASCIZ/Two file names
314 TWOPPN: OUTSTR [ASCIZ/Two PPNs
318 ILLDEL: OUTSTR [ASCIZ/Illegal delimiter in PPN
321 CSTART: TLNN F,FL.CCL ;CCL INPUT?
323 JRST START ;RESTART SCAN
325 CORERR: OUTSTR [ASCIZ/?Cannot shrink core
332 XIT: EXIT 1, ;EXIT GRACEFULLY
333 EXIT ;NO SO GRACEFULLY
334 \fCCLIN: SKIPE P3,TMPPTR ;WAS THERE A TMPCOR BUFFER POINTER?
335 JRST INITMP ;YES--LOADED & GONE
336 MOVE T1,[2,,TMPBLK] ;NO, GET TMPCOR FILE (1 IS READ)
339 MOVE P3,[POINT 7,TBUF]
342 NOTEMP: MOVEI T1,17 ;NO TMPCOR--TRY DISK
345 OPEN TMPC,T1 ;OPEN DISK
347 PJOB T1, ;GET JOB NUMBER
349 IDIVI T1,12 ;AND CONVERT
350 TRO T2,20 ;TO TMPDISK FILE NAME
351 LSHC T2,-6 ;BY THE TRIED & TRUE METHOD
356 MOVSI T2,'TMP' ;NNNMAC.TMP
358 LOOKUP TMPC,T1 ;LOOKUP
359 JRST MAC80 ;NO CCL FILE, ASSUME TTY INPUT
360 INPUT TMPC,TMPBLK+1 ;PUT INTO TMPCOR BUFFER
362 RENAME TMPC,T1 ;DELETE TMPDSK FILE
363 OUTSTR NOREN ;FAILURE
368 NOREN: ASCIZ/Cannot delete temp disk file
382 TBUF: BLOCK 30 ;DONT CLEAR TMPCOR BUFFER
383 TMPPTR: BLOCK 1 ;HOLDS TMPCOR BYTE POINTER
384 SVJBFF: BLOCK 1 ;SAVE .JBFF
385 ;CLEAR REST OF TABLE SPACE
401 PDL: BLOCK 40 ;PDL STORAGE
403 OBUF:: BLOCK 3 ;BUFFER HEADERS
404 LBUF:: BLOCK 3 ;LISTING FILE
405 SBUF:: BLOCK 3 ;SYMBOL FILE
406 MBUF:: BLOCK 3 ;MACLIB
407 CREFSW::BLOCK 1 ;NON-ZERO IF CROSS REFERENCE LISTING REQUESTED
408 SYMBSW::BLOCK 1 ;NON-ZERO IF SYMBOL TABLE DUMP REQUESTED
409 ENDLOW: BLOCK 1 ;TOP OF STORAGE