]> cloudbase.mooo.com Git - kermit-80.git/blame - mac80.mac
Bugfix in outmdm (output buffer flush)
[kermit-80.git] / mac80.mac
CommitLineData
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
19MAC80: TDZA F,F ;CLEAR FLAGS
20 MOVSI F,FL.CCL ;CCL ENTRY
21 SETZM SVJBFF ;ZERO AT START
22START:: 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
41STAR: 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
52LOOP: PUSHJ P,INCH ;GET CHARACTER FROM WHEREVER
53 JUMPE I,XIT ;NULL--END OF THE LINE.
54LOOP1: 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
82LOADEV: SKIPE DEVICE ;IF DEVICE ALREADY FULL
83 JRST TWODEV ;HOLLER
84 MOVEM P2,DEVICE ;STORE DEVICE
85 JRST INITMP ;INIT TEMP & LOOP
86
87LODFIL: SKIPE FILNAM ;FILE NAME ALREADY THERE?
88 JRST TWOFIL ;YES
89 MOVEM P2,FILNAM ;STORE FILE NAME
90 JRST INITMP ;& LOOP
91
92SWITCH: 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
116LODRL1: 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
129LODPPN: 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
141DONE: 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
155DO.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
167RELOOK: 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
188NOLST: 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
203NOSYM: 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
214GETOCT: 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
244RUNAME: 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
266TYPE: 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
275NODEV: 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
281ENTERR: 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
292NOFILE::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
310TWOFIL: OUTSTR [ASCIZ/Two file names
311/]
312 JRST CSTART
313
314TWOPPN: OUTSTR [ASCIZ/Two PPNs
315/]
316 JRST CSTART
317
318ILLDEL: OUTSTR [ASCIZ/Illegal delimiter in PPN
319/]
320
321CSTART: TLNN F,FL.CCL ;CCL INPUT?
322 CLRBFI ;SHOULDN'T BE
323 JRST START ;RESTART SCAN
324
325CORERR: OUTSTR [ASCIZ/?Cannot shrink core
326/]
327 JRST CSTART
328
329ASTER: ASCIZ /
330*/
331
332XIT: 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
342NOTEMP: 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
368NOREN: ASCIZ/Cannot delete temp disk file
369/
370
371PDP: IOWD 100,PDL
372
373TMPBLK: SIXBIT /MAC/
374 IOWD 30,TBUF
375 0
376
377 XLIST
378 LIT
379 LIST
380\f RELOC 0
381
382TBUF: BLOCK 30 ;DONT CLEAR TMPCOR BUFFER
383TMPPTR: BLOCK 1 ;HOLDS TMPCOR BYTE POINTER
384SVJBFF: BLOCK 1 ;SAVE .JBFF
385 ;CLEAR REST OF TABLE SPACE
386LOOKIT:
387FILNAM::BLOCK 1
388FILEXT::BLOCK 1
389 BLOCK 1
390PPN:: BLOCK 1
391OBJDEV::BLOCK 1
392RELNAM: BLOCK 1
393RELEXT: BLOCK 1
394LSTNAM: BLOCK 1
395LSTEXT: BLOCK 1
396SYMNAM: BLOCK 1
397SYMEXT: BLOCK 1
398DEVICE: BLOCK 1
399LSTDEV: BLOCK 1
400SYMDEV: BLOCK 1
401PDL: BLOCK 40 ;PDL STORAGE
402IBUF:: BLOCK 3
403OBUF:: BLOCK 3 ;BUFFER HEADERS
404LBUF:: BLOCK 3 ;LISTING FILE
405SBUF:: BLOCK 3 ;SYMBOL FILE
406MBUF:: BLOCK 3 ;MACLIB
407CREFSW::BLOCK 1 ;NON-ZERO IF CROSS REFERENCE LISTING REQUESTED
408SYMBSW::BLOCK 1 ;NON-ZERO IF SYMBOL TABLE DUMP REQUESTED
409ENDLOW: BLOCK 1 ;TOP OF STORAGE
410
411 END MAC80
412\0\0