]>
Commit | Line | Data |
---|---|---|
c25f6a44 L |
1 | ;MAC80 - An 8085 cross assembler for the DECsystem-10 |
2 | ||
3 | ; Copyright 1976,1977,1978,1983 | |
4 | ; Bruce Tanner / Cerritos College | |
5 | ; 11110 Alondra Blvd. | |
6 | ; Norwalk, CA 90650 | |
7 | ||
8 | ||
9 | SEARCH M80UNV,JOBDAT,MACTEN | |
10 | TITLE. (M80,MAC80,8085 Cross Assembler) | |
11 | M80TTL | |
12 | M80137 | |
13 | ||
14 | SUBTTL COMMAND SCANNER | |
15 | ||
16 | TWOSEG | |
17 | RELOC 400000 | |
18 | ||
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] | |
37 | BLT T1,ENDHGH## ;BLIT | |
38 | MOVE P1,[POINT 6,P2] ;TEMP POINTER | |
39 | TLNE F,FL.CCL ;CCL INPUT? | |
40 | JRST CCLIN ;YES | |
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? | |
46 | EXIT 1, ;YES | |
47 | CLRBFI ;CLEAR BUFFER | |
48 | JRST STAR ;& TRY AGAIN | |
49 | \fINITMP: SETZ P2, ;CLEAR P2 | |
50 | MOVE P1,[POINT 6,P2] ;RESTORE BYTE POINTER | |
51 | ||
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 | |
56 | CAIN I,":" | |
57 | JRST LOADEV ;IF COLON-LOAD THE DEVICE | |
58 | CAIE I,"=" | |
59 | CAIN I,"_" | |
60 | JRST BACK ;IF _ OR = STORE REL OR LIST FILE NAME | |
61 | CAIN I,"," | |
62 | JRST LODRL1 ;IF , STORE REL FILE NAME | |
63 | CAIN I,"!" | |
64 | JRST RUNAME ;IF ! RUN THE PROGRAM | |
65 | CAIN I,"." | |
66 | JRST LODFIL ;IF . LOAD THE FILE NAME | |
67 | CAIN I,"[" | |
68 | JRST LODPPN ;IF [ STORE EXT & PROCESS PPN | |
69 | CAIE I,")" | |
70 | CAIN I,"]" | |
71 | JRST LOOP ;IGNORE ] | |
72 | CAIGE I,40 | |
73 | JRST DONE ;IF BREAK, WE'RE DONE | |
74 | CAIE I,"(" | |
75 | CAIN I,"/" | |
76 | JRST SWITCH ;IF A SWITCH, SAVE IT | |
77 | SUBI I,40 ;CONVERT TO SIXBIT | |
78 | TLNE P1,770000 ;> 6 CHAR? | |
79 | IDPB I,P1 ;NO STUFF | |
80 | JRST LOOP ;LOOP | |
81 | ||
82 | LOADEV: SKIPE DEVICE ;IF DEVICE ALREADY FULL | |
83 | JRST TWODEV ;HOLLER | |
84 | MOVEM P2,DEVICE ;STORE DEVICE | |
85 | JRST INITMP ;INIT TEMP & LOOP | |
86 | ||
87 | LODFIL: SKIPE FILNAM ;FILE NAME ALREADY THERE? | |
88 | JRST TWOFIL ;YES | |
89 | MOVEM P2,FILNAM ;STORE FILE NAME | |
90 | JRST INITMP ;& LOOP | |
91 | ||
92 | SWITCH: PUSHJ P,INCH ;GET THE SWITCH | |
93 | CAILE I,140 ;LC? | |
94 | SUBI I,40 ;FORCE UPPER CASE SWITCH | |
95 | CAIN I,"C" ;CREF? | |
96 | JRST [SETOM CREFSW ;YES | |
97 | TRO F,FR.LST ;CREF IMPLIES LIST | |
98 | JRST LOOP] | |
99 | CAIN I,"S" ;SYMBOLS? | |
100 | SETOM SYMBSW ;YES | |
101 | JRST LOOP | |
102 | ||
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 | |
114 | JRST INITMP ;LOOP | |
115 | ||
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. | |
123 | SKIPN T1,DEVICE | |
124 | MOVE T1,[SIXBIT/DSK/] | |
125 | MOVEM T1,OBJDEV | |
126 | SETZM DEVICE | |
127 | JRST INITMP ;LOOP | |
128 | ||
129 | LODPPN: SETZ T1, | |
130 | SKIPE PPN | |
131 | JRST TWOPPN | |
132 | PUSHJ P,GETOCT | |
133 | CAIE I,"," | |
134 | JRST ILLDEL | |
135 | HRLZM T1,PPN | |
136 | SETZ T1, | |
137 | PUSHJ P,GETOCT | |
138 | HRRM T1,PPN | |
139 | JRST LOOP1 | |
140 | ||
141 | DONE: PUSHJ P,INCH | |
142 | CAIN I,CR | |
143 | PUSHJ P,INCH | |
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 | |
156 | SETZ T4, | |
157 | MOVE T2,DEVICE ;INPUT DEVICE | |
158 | HRRZI T3,IBUF | |
159 | OPEN SRC,T1 | |
160 | JRST NODEV | |
161 | MOVEI T1,0 ;ASCII | |
162 | SETZ T4, | |
163 | MOVE T2,DEVICE ;INPUT DEVICE | |
164 | HRRZI T3,MBUF | |
165 | OPEN LIB,T1 | |
166 | JRST NODEV | |
167 | RELOOK: MOVE T1,FILNAM | |
168 | MOVE T2,FILEXT | |
169 | SETZ T3, | |
170 | MOVE T4,PPN | |
171 | LOOKUP SRC,T1 | |
172 | JRST NOFILE | |
173 | TRNN F,FR.LST ;NEED A LIST FILE? | |
174 | JRST NOLST ;NO | |
175 | SETZ T1, | |
176 | SKIPN T2,LSTDEV | |
177 | MOVSI T2,'DSK' | |
178 | HRLZI T3,LBUF | |
179 | OPEN LST,T1 | |
180 | JRST NODEV | |
181 | SKIPN T1,LSTNAM | |
182 | MOVE T1,FILNAM | |
183 | SKIPN T2,LSTEXT | |
184 | MOVSI T2,'LST' | |
185 | SETZB T3,T4 | |
186 | ENTER LST,T1 ;MAKE THE LISTFILE | |
187 | JRST ENTERR | |
188 | NOLST: SKIPN SYMBSW ;IF NO SYMBOL FILE | |
189 | JRST NOSYM ;SKIP THIS | |
190 | SETZ T1, | |
191 | SKIPN T2,SYMDEV | |
192 | MOVSI T2,'DSK' | |
193 | HRLZI T3,SBUF | |
194 | OPEN SYM,T1 | |
195 | JRST NODEV | |
196 | SKIPN T1,SYMNAM | |
197 | MOVE T1,FILNAM | |
198 | SKIPN T2,SYMEXT | |
199 | MOVSI T2,'SYM' | |
200 | SETZB T3,T4 | |
201 | ENTER SYM,T1 ;MAKE THE SYMBOL FILE | |
202 | JRST ENTERR | |
203 | NOSYM: TLNN F,FL.CCL | |
204 | JRST MAC80A## | |
205 | OUTSTR [ASCIZ/MAC80: /] | |
206 | MOVE T1,FILNAM ;GET THE FILENAME | |
207 | PUSHJ P,TYPE ;TYPE IT | |
208 | OUTSTR [ASCIZ/ | |
209 | /] | |
210 | SETZ P2, | |
211 | MOVEM P3,TMPPTR ;SAVE TMPCOR BUFFER POINTER | |
212 | JRST MAC80A | |
213 | ||
214 | GETOCT: PUSHJ P,INCH | |
215 | CAIN I,40 | |
216 | JRST GETOCT | |
217 | CAIG I,"7" | |
218 | CAIGE I,"0" | |
219 | POPJ P, | |
220 | IMULI T1,10 | |
221 | ADDI T1,-60(I) | |
222 | JRST GETOCT | |
223 | \fOPNOBJ::PUSH P,T2 | |
224 | PUSH P,T3 | |
225 | PUSH P,T4 | |
226 | SETZ T4, | |
227 | SKIPN T2,OBJDEV ;DEVICE | |
228 | MOVSI T2,'DSK' | |
229 | MOVSI T3,OBUF | |
230 | OPEN OBJ,T1 | |
231 | JRST NODEV | |
232 | SKIPN T1,RELNAM | |
233 | MOVE T1,FILNAM | |
234 | SKIPN T2,RELEXT | |
235 | MOVSI T2,'HEX' | |
236 | SETZB T3,T4 | |
237 | ENTER OBJ,T1 | |
238 | JRST ENTERR | |
239 | POP P,T4 | |
240 | POP P,T3 | |
241 | POP P,T2 | |
242 | POPJ P, | |
243 | ||
244 | RUNAME: PUSHJ P,INCH | |
245 | CAIN I,15 | |
246 | PUSHJ P,INCH | |
247 | MOVEI T1,T2 | |
248 | HRLI T1,1 | |
249 | SKIPN T2,DEVICE | |
250 | MOVSI T2,'SYS' | |
251 | MOVE T3,P2 | |
252 | SETZB T4,T4+1 | |
253 | SETZB T4+2,T4+3 | |
254 | RUN T1, | |
255 | HALT | |
256 | ||
257 | \fINCH: TLNN F,FL.CCL ;CCL INPUT? | |
258 | JRST .+3 ;NO, SKIP | |
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 | |
264 | POPJ P, ;RETURN | |
265 | ||
266 | TYPE: MOVE T2,[POINT 6,T1] | |
267 | TLNN T2,770000 | |
268 | POPJ P, | |
269 | ILDB T3,T2 | |
270 | JUMPE T3,.-2 | |
271 | ADDI T3,40 | |
272 | OUTCHR T3 | |
273 | JRST TYPE+1 | |
274 | ||
275 | NODEV: MOVE T1,T2 | |
276 | OUTSTR [ASCIZ/Cannot OPEN device /] | |
277 | PUSHJ P,TYPE | |
278 | OUTSTR [BYTE (7) 15,12,0,0,0] | |
279 | JRST START | |
280 | ||
281 | ENTERR: OUTSTR [ASCIZ/ENTER error for file /] | |
282 | PUSH P,T2 | |
283 | PUSHJ P,TYPE | |
284 | POP P,T2 | |
285 | HLRZ T1,T2 | |
286 | JUMPE T1,.+3 | |
287 | OUTCHR ["."] | |
288 | PUSHJ P,TYPE | |
289 | OUTSTR [BYTE (7) 15,12,0] | |
290 | JRST START | |
291 | ||
292 | NOFILE::SKIPE FILEXT | |
293 | JRST .+4 | |
294 | MOVSI T1,'M80' | |
295 | MOVEM T1,FILEXT | |
296 | JRST RELOOK | |
297 | MOVE T1,FILNAM | |
298 | OUTSTR [ASCIZ/No such file /] | |
299 | PUSHJ P,TYPE | |
300 | MOVE T1,FILEXT | |
301 | JUMPE T1,.+3 | |
302 | OUTCHR ["."] | |
303 | PUSHJ P,TYPE | |
304 | OUTSTR [BYTE (7) 15,12,0,0,0] | |
305 | JRST START | |
306 | \fTWODEV: OUTSTR [ASCIZ/Two devices | |
307 | /] | |
308 | JRST CSTART | |
309 | ||
310 | TWOFIL: OUTSTR [ASCIZ/Two file names | |
311 | /] | |
312 | JRST CSTART | |
313 | ||
314 | TWOPPN: OUTSTR [ASCIZ/Two PPNs | |
315 | /] | |
316 | JRST CSTART | |
317 | ||
318 | ILLDEL: OUTSTR [ASCIZ/Illegal delimiter in PPN | |
319 | /] | |
320 | ||
321 | CSTART: TLNN F,FL.CCL ;CCL INPUT? | |
322 | CLRBFI ;SHOULDN'T BE | |
323 | JRST START ;RESTART SCAN | |
324 | ||
325 | CORERR: OUTSTR [ASCIZ/?Cannot shrink core | |
326 | /] | |
327 | JRST CSTART | |
328 | ||
329 | ASTER: ASCIZ / | |
330 | */ | |
331 | ||
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) | |
337 | TMPCOR T1, | |
338 | PUSHJ P,NOTEMP | |
339 | MOVE P3,[POINT 7,TBUF] | |
340 | JRST INITMP | |
341 | ||
342 | NOTEMP: MOVEI T1,17 ;NO TMPCOR--TRY DISK | |
343 | MOVSI T2,'DSK' | |
344 | SETZB T3,T4 | |
345 | OPEN TMPC,T1 ;OPEN DISK | |
346 | JRST NODEV | |
347 | PJOB T1, ;GET JOB NUMBER | |
348 | SETZ T3, | |
349 | IDIVI T1,12 ;AND CONVERT | |
350 | TRO T2,20 ;TO TMPDISK FILE NAME | |
351 | LSHC T2,-6 ;BY THE TRIED & TRUE METHOD | |
352 | TLNN T3,77 | |
353 | JRST .-4 | |
354 | MOVE T1,T3 | |
355 | HRRI T1,'MAC' | |
356 | MOVSI T2,'TMP' ;NNNMAC.TMP | |
357 | SETZB T3,T4 | |
358 | LOOKUP TMPC,T1 ;LOOKUP | |
359 | JRST MAC80 ;NO CCL FILE, ASSUME TTY INPUT | |
360 | INPUT TMPC,TMPBLK+1 ;PUT INTO TMPCOR BUFFER | |
361 | SETZ T1, | |
362 | RENAME TMPC,T1 ;DELETE TMPDSK FILE | |
363 | OUTSTR NOREN ;FAILURE | |
364 | RELEAS TMPC, | |
365 | POPJ P, ;BACK | |
366 | ||
367 | ||
368 | NOREN: ASCIZ/Cannot delete temp disk file | |
369 | / | |
370 | ||
371 | PDP: IOWD 100,PDL | |
372 | ||
373 | TMPBLK: SIXBIT /MAC/ | |
374 | IOWD 30,TBUF | |
375 | 0 | |
376 | ||
377 | XLIST | |
378 | LIT | |
379 | LIST | |
380 | \f RELOC 0 | |
381 | ||
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 | |
386 | LOOKIT: | |
387 | FILNAM::BLOCK 1 | |
388 | FILEXT::BLOCK 1 | |
389 | BLOCK 1 | |
390 | PPN:: BLOCK 1 | |
391 | OBJDEV::BLOCK 1 | |
392 | RELNAM: BLOCK 1 | |
393 | RELEXT: BLOCK 1 | |
394 | LSTNAM: BLOCK 1 | |
395 | LSTEXT: BLOCK 1 | |
396 | SYMNAM: BLOCK 1 | |
397 | SYMEXT: BLOCK 1 | |
398 | DEVICE: BLOCK 1 | |
399 | LSTDEV: BLOCK 1 | |
400 | SYMDEV: BLOCK 1 | |
401 | PDL: BLOCK 40 ;PDL STORAGE | |
402 | IBUF:: BLOCK 3 | |
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 | |
410 | ||
411 | END MAC80 | |
412 | \0\0 |