|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 211968 (0x33c00)
Types: TextFile
Names: »oftn«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦this⟧ »oftn«
1 CC COPYRIGHT 1978 MOTOROLA INC.
2 CC
3 CC
4 CC ARTICLES, INFORMATION AND DATA ENCLOSED HEREIN
5 CC ARE PROPRIETARY TO MOTOROLA AND MAY NOT BE
6 CC DISTRIBUTED, REPRODUCED OR DISCLOSED OUTSIDE
7 CC BUYER'S ORGANIZATION WITHOUT THE EXPRESS WRITTEN
8 CC CONSENT OR APPROVAL OF AN AUTHORIZED MOTOROLA
9 CC OFFICER.
10 CC
11 CC
12 CC1.0 INTRODUCTION
13 CC
14 CC
15 CC SEE SECTION 3.0 FOR INSTALLATIONS PROCEDURES......
16 CC
17 CC THIS IS THE M68000 CROSS ASSEMBLER. IT IS WRITTEN IN
18 CC ANSI STANDARD FORTRAN-IV, SO IT SHOULD BE POSSIBLE
19 CC TO COMPILE AND EXECUTE IT ON ANY COMPUTER WHICH SUPPORTS
20 CC ANSI FORTRAN-IV.
21 CC
22 CC THIS IS A TWO PASS ASSEMBLER. ON THE FIRST PASS IT WILL READ
23 CC IN THE SOURCE FILE FROM FORTRAN UNIT 'LUSI' AND BUILD THE
24 CC SYMBOL TABLE. ON PASS TWO THE SOURCE FILE IS REWOUND AND A
25 CC LISTING IS OUTPUT TO FORTRAN UNIT 'LUOT'. THE OBJECT RECORD
26 CC (BINARY OBJECT RECORDS IN MC68000 FORMAT)
27 CC ARE OUTPUT TO THE FORTRAN UNIT 'LUOO'.
28 CC
29 CC SEE THE M68000 CROSS MACRO ASSEMBLER MANUAL FOR INFORMATION
30 CC ON THE INSTRUCTION SET.
31 CC
32 CC1.1 GENERAL INFORMATION ABOUT THE CROSS ASSEMBLER.
33 CC
34 CC EACH ROUTINE STARTS WITH COMMENTS DESCRIBING VERSION
35 CC NUMBER, DATE, ENTRY, EXIT VALUE OF ARGUMENTS IN CALLS, AND
36 CC ITS FUNCTION. ALSO INDICATES IF IT IS COMPUTER DEPENDENT OR
37 CC INDEPENDENT ON THE FIRST COMMENT LINE. IF COMPUTER
38 CC INDEPENDENT IT SAYS CMP: ALL. IF COMPUTER DEPENDENT IT
39 CC SAYS CMP: PDP-11.
40 CC TO MODIFY CROSS ASSEMBLER TO RUN ON NON PDP-11 TYPE
41 CC COMPUTERS, EACH ROUTINE WITH CMP: PDP-11 MUST BE MODIFIED TO
42 CC RUN ON NEW HOST COMPUTER. SOME ROUTINES INDICATE WHY THEY
43 CC ARE PDP-11 DEPENDENT, OTHERS ARE SELF EXPLANATORY. EACH
44 CC SOURCE STATEMENT IS READ IN USING ALPHA (A1) FORMAT. THE
45 CC STATEMENT IS THEN ZERO FILLED(R1 FORMAT) ON THE LEFT.
46 CC WHEN ASSEMBLY IS COMPLETED THE SOURCE LINE IS
47 CC PRINTED OUT IN A1 FORMAT. GENERATED M68000 HEX INSTRUCTIONS
48 CC ARE CONVERTED TO ASCII THEN OUTPUT.
49 CC
50 CC1.2 GENERAL OPERATION OF THE CROSS ASSEMBLER.
51 CC
52 CC DURING PASS ONE THE SOURCE LINE IS BROKEN INTO ELEMENTS
53 CC CALLED TOKENS BY ROUTINE 'SCN'. EACH TOKEN IS LOOKED UP
54 CC IN THE SYMBOL TABLE BY 'LKP'. IF A LABEL IT IS ENTERED
55 CC IN THE TABLE BY 'STF'. IF AN OPERAND IT IS LOCATED IN THE
56 CC SYMBOL TABLE AND INFORMATION STORED WITH IT IS USED TO BUILD
57 CC THE INSTRUCTION. PART OF THE DATA IS USED TO BRANCH IN
58 CC 'BUILD1' TO COMPLETE THE INSTRUCTION.
59 CC AT THE END OF PASS 1 THE FILE IS REWOUND AND EACH SOURCE
60 CC LINE IS READ IN AGAIN. OPERANDS ARE FOUND IN THE SYMBOL
61 CC TABLE AND DATA FOUND WITH THEM IS USED IN 'BUILD2'.
62 CC ROUTINE 'OUTPUT' PRINTS OUT THE SOURCE LINE AND THE
63 CC GENERATED INSTRUCTIONS.
64 CC ROUTINE 'PAR' WEAVES ITS WAY THROUGH THE PARSE NET TABLE
65 CC AND CALLING 'ACT1' IN PASS 1 AND 'ACT2' IN PASS 2 IT
66 CC BREAKS EACH SOURCE LINE DOWN, BUILDING THE INSTRUCTION FOR
67 CC FINAL ASSEMBLY IN 'BUILD1' OR 'BUILD2'. MACROS ARE
68 CC STORED IN THE SYMBOL TABLE AND ARE PULLED OUT DURING
69 CC EXPANSION IN EACH PASS. PASS ONE MUST EXAMINE A
70 CC MACRO TO SEE HOW MANY BYTES ARE REQUIRED FOR AN INSTRUCTION
71 CC IN ORDER TO KEEP IN PHASE WITH PASS TWO.
72 CC A MODIFICATION IN 'ACT1' OR 'BUILD1' CHANGING THE NUMBER
73 CC OF BYTES GENERATED WILL HAVE TO BE MADE IN 'ACT2' OR 'BUILD2'
74 CC TO AVOID PHASE ERRORS. THE REVERSE IS ALSO TRUE.
75 CC
76 CC2.0 INTRODUCTION
77 CC
78 CC THIS SECTION DEFINES DEVICE NUMBERS, COMMON,
79 CC HOW TO MODIFY THE SYMBOL TABLE SIZE, AND HOW TO CHANGE
80 CC DEVICE NUMBERS AND SPECIAL COMPUTER DEPENDENT VARIABLES.
81 CC
82 CC2.1 DEVICE NUMBERS. SEE SUBROUTINE 'COMDEP' TO CHANGE.
83 CC
84 CC LUSI = 2 (SOURCE INPUT)
85 CC LUOT = 6 (ASSEMBLY LISTING AND ERROR MESSAGES TO A PRINTER
86 CC LUOT = 3 (ASSEMBLY LISTING AND ERROR MESSAGES TO FILE)
87 CC LUOT = 5 (ASSEMBLY LISTING AND ERROR MESSAGES TO CONSOLE)
88 CC LULT = 5 (OUTPUT TO CONSOLE)
89 CC LUOT = 3 RSX-11M SETTING TO SPOOL OUTPUT INSTEAD
90 CC OF GOING DIRECTLY TO PRINTER. SEE 'COMDEP'.
91 CC LUCI = 5 (INPUT FROM CONSOLE)
92 CC LUOO = 1 (ASSEMBLED OBJECT OUTPUT)
93 CC
94 CC2.2 COMMON
95 CC
96 CC ALL COMMON IS LABELED /A/. THE DICTIONARY, PARSENET TABLE, AND
97 CC HASH TABLE ARE INITIALIZED IN BLOCK DATA.
98 CC
99 CC ISYM - SYMBOL TABLE, THE DICTIONARY IS IN THE FIRST 1200
100 CC WORDS. SEE BLOCK DATA WHERE THE DICTIONARY IS
101 CC INITIALIZED.
102 CC AN ENTRY IN THE SYMBOL TABLE IS AS FOLLOWS:
103 CC ISYM(1)->M.S.WORD OF SYMBOL'S VALUE.
104 CC (2)->M.S.BYTE = NUMBER CHARACTERS IN SYMBOL NAME TIMES 2.
105 CC 1 = 1-2 CHARS, 2=3-4 CHARS ETC.
106 CC (2)->L.S.BYTE=TYPE: 255=OPCODE 1=LABEL
107 CC (3)->LINK TO NEXT SYMBOL IN TABLE
108 CC (4)-(4+S)-> S=(SIZE-1)/2 2 CHARACTERS/WORD
109 CC (4+S+1)->ADDRESS TYPE, SEE RR-MMM-TTT BELOW.
110 CC IN LEAST SIGNIFICANT BYTE(L.S.B).
111 CC (4+S+2)-> 2 L.S.B OF SYMBOL'S ADDRESS.
112 CC JSUC POINTS TO ISYM(1) ON RETURN FROM 'LKP'.
113 CC JPTR & LPTR POINT TO ISYM(4+S+1) ON RETURN FROM 'LKP'.
114 CC
115 CC 1 - SYMBOL TABLE:
116 CC LOW BYTE BITS DEFINED AS RR-MMM-TTT WHERE:
117 CC RR = 00 - UNDEFINED SYMBOL
118 CC 01 - DEFINED IN PASS ONE
119 CC 10 - DEFINED IN PASS TWO
120 CC 11 - MULTIPLY DEFINED SYMBOL
121 CC MMM = RESERVED FOR MODE (ASCII,BIN,ETC)
122 CC TTT = 0 - ABSOLUTE SYMBOL
123 CC 1 - RELATIVE SYMBOL
124 CC 2 - REGISTER
125 CC 3 - KEYWORD
126 CC 2 - ADDRESS OF THE SYMBOL
127 CC
128 CC KARD1 - INPUT SOURCE IMAGE GOES HERE.
129 CC
130 CC KARD2 - MACRO PARAMETER SAVE AREA IN R1 FORMAT
131 CC MFLD - POINTERS TO EACH SUBFIELD IN KARD2
132 CC MDEP - DEPTH OF MACRO NESTING, MAX = 3
133 CC MPTR - POINTER TO MACRO DEFINITION OR ELSE = 0
134 CC
135 CC ITOKEN - SYMBOL IS BROKEN DOWN FROM 'KARD1' TO HERE AND
136 CC IS TAKEN FROM HERE AND PUT IN SYMBOL TABLE.
137 CC
138 CC TKNSIZ - NUMBER OF CHARACTERS IN 'ITOKEN'.
139 CC
140 CC TKNTYP - TYPE OF TOKEN IN 'ITOKEN'.
141 CC 24 = VARIABLE
142 CC 25 = NUMBER
143 CC 27 = 'STRING' OVER 4 BYTES LONG
144 CC 28 = REGISTER
145 CC 29 = STATEMENT LABEL
146 CC 30 = MNEMONIC
147 CC
148 CC TKNVAL - VALUE OF 'ITOKEN'.
149 CC TKNVA2 - HOLDS OVERFLOW FROM 'TKNVAL', SET IN 'SCN'.
150 CC
151 CC SYMTYP - MODE OF THE FIRST OPERAND
152 CC 0 = ABSOLUTE
153 CC 1 = RELATIVE
154 CC
155 CC JSUC - FLAG SET BY SYMBOL LOOKUP ROUTINE 'LKP'.
156 CC
157 CC JPTR - SET TO POINT AT SYMBOL TABLE ENTRY OF SYMBOL.
158 CC
159 CC NXSYM - POINTS TO NEXT AVAILABLE ADDRESS IN SYMBOL TABLE.
160 CC NXSYM1 - SAVE START OF LABELS IN SYMBOL TABLE,END OF DICT.
161 CC
162 CC KOLUMN - POSITION OF SCAN IN 'KARD1'.
163 CC
164 CC KD1BCT - END OF INPUT BUFFER(KARD1)
165 CC
166 CC KD1LNO - SOURCE LINE NUMBER.
167 CC
168 CC PASS,IPASS - PASS NUMBER FLAG ASSEMBLER IS CURRENTLY ON
169 CC -1 = PASS ONE
170 CC 0 = PASS TWO
171 CC
172 CC IPCC - CURRENT P-COUNT.
173 CC IPC2 - M.S.B. OF CURRENT P-COUNT(3RD BYTE)
174 CC
175 CC IOPC - OPCODE CLASS
176 CC
177 CC INS - ARRAY INSTRUCTION IS BUILT IN AND OUTPUT FROM.
178 CC
179 CC ISIZ - SIZE (B,W,L) FOR CURRENT INSTRUCTION
180 CC PASS 1 PASS 2
181 CC B = BYTE = 1 0
182 CC W = WORD = 2 64
183 CC L = LONG WORD = 4 128
184 CC
185 CC INSL - NUMBER OF BYTES REQUIRED FOR CURRENT INSTRUCTION.
186 CC
187 CC IADM - ADDRESS MODE FOR FIELD-1 AND FIELD-2 OF
188 CC THE OPERAND.
189 CC IADM(1,2):
190 CC ADDESS MODE ASSEMBLER FORMAT
191 CC 00 = DATA REG DIRECT D1
192 CC 08 = ADDR REG DIRECT A1
193 CC 16 = ADDR REG INDIRECT (A1)
194 CC 24 = POST INCREMENT (A1)+
195 CC 32 = PRE DECREMENT -(A1)
196 CC 40 = INDIRECT & DISPL'MT 3(A1)
197 CC 48 = DISPL'MT & IND & X 3(A1,A2)
198 CC 56 = ABSOLUTE SHORT $1234
199 CC 57 = ABSOLUTE LONG $123456
200 CC 58 = PC + DISPL'MT REL
201 CC 59 = PC + X + DISPL'MT REL(A1)
202 CC 60 = IMMEDIATE SHORT #$1234
203 CC IMMEDIATE LONG #$123456
204 CC 64 = STATUS REGISTER SR,CCR
205 CC
206 CC 2 - REGISTER #
207 CC
208 CC X IADM(X,1) IADM(X,2)
209 CC - --------- --------
210 CC 3 ... NO. BYTES IN INS(5)
211 CC 4 SYMTYP(1) SYMTYP(2)
212 CC 0 = ABSOLUTE 0 = ABSOLUTE
213 CC 1 = RELATIVE 1 = RELATIVE
214 CC 5 FORWARD REFERENCE?
215 CC 0 = BACKWARDS 0 = BACKWARD
216 CC 1 = FORWARD 1 = FORWARD
217 CC 6 A0-D7 BIT MASK D0-A7 BIT MASK
218 CC 7 CURRENT IPC MODE ...
219 CC 0 = ABSOLUTE 0 = 2 BYTE ADDRESSING
220 CC 1 = RELATIVE 1 = 3 BYTE ADDRESSING: > 65535
221 CC
222 CC LENSYM - LENGTH OF SYMBOL TABLE, EQUALS NUMBER OF
223 CC DIMENSIONS OF 'ISYM-10'.
224 CC
225 CC KASH - HASH TABLE FOR SYMBOL LOOKUP.
226 CC
227 CC KCLAS - TOKEN CLASS.
228 CC
229 CC NET1 -> NET5 - PARSENET TABLE.
230 CC
231 CC NBPW - NUMBER OF BYTES IN HOST COMPUTER'S WORD.
232 CC
233 CC IEOT - END OF LINE = 4.
234 CC
235 CC LSP - ASCII BLANK RIGHT JUSTIFIED.
236 CC
237 CC IHB480 - HEX CONSTANT SET IN 'COMDEP'
238 CC
239 CC IHEX9K - HEX CONSTANT SET IN 'COMDEP'
240 CC
241 CC
242 CC KCFF - HEX CONSTANT $FF SET IN 'COMDEP'
243 CC
244 CC LIST - LIST, NOLIST OPTION FLAG.
245 CC 1 = LIST ASSEMBLY (DEFAULT)
246 CC 0 = DON'T LIST ASSEMBLY
247 CC
248 CC IOBJ - OBJECT OUTPUT, NO OBJECT OUTPUT FLAG
249 CC 1 = OBJECT OUTPUT REQUESTED - DEFAULT
250 CC 0 = NO OBJECT OUTPUT REQUESTED
251 CC
252 CC IPLEN - NUMBER OF LINES PER PAGE
253 CC INITIALIZED TO 65
254 CC
255 CC LLEN - NUMBER CHARACTERS PER LINE
256 CC DEFAULT = 80
257 CC MIN = 26
258 CC MAX = 120
259 CC MAX NUMBER CHARACTERS INPUT ON SOURCE LINE = 95
260 CC
261 CC LLENSW - FLAG INDICATING COMMAND 'LLEN' HAS BEEN USED.
262 CC 1 = 'LLEN' IN EFFECT, ADJUST OUTPUT LINE TO
263 CC PARTICULAR COLUMN
264 CC 0 = DEFAULT = 'LLEN' NOT IN EFFECT.
265 CC NOTE: A SOURCE LINE IS NOT COLUMN ADJUSTED ON
266 CC OUTPUT UNLESS 'LLEN' IS USED.
267 CC
268 CC ICOL - USED TO FLAG IFXX IN PROCESS, AND MACRO FLAG.
269 CC
270 CC NEST - IFXX-ENDC NEST COUNT.
271 CC
272 CC2.3 MODIFYING SYMBOL TABLE SIZE.
273 CC
274 CC CHANGE EACH OCCURRANCE OF ISYM(N) IN COMMON /A/ FROM ITS
275 CC CURRENT VALUE TO DESIRED VALUE. CHANGE VARIABLE 'LENSYM'
276 CC IN BLOCK DATA TO EQUAL VALUE OF 'N-10' IN COMMON /A/ ISYM(N).
277 CC
278 CC2.4 ERROR MESSAGES
279 CC
280 CC ERROR # DESCRIPTION
281 CC ------- ----------
282 CC 0201 ILLEGAL CHARACTER
283 CC 0202 SYMBOL TOO LONG
284 CC 0203 IMPROPER TERMINATION OF OPERAND FIELD
285 CC 0204 SYNTAX ERROR
286 CC 0205 SIZE SUBFIELD NOT ALLOWED FOR THIS OPCODE
287 CC 0206 REDEFINED SYMBOL
288 CC 0207 UNDEFINED SYMBOL
289 CC 0208 DISPLACEMENT RANGE (SIZE) ERROR
290 CC 0209 ILLEGAL ADDRESS MODE FOR THIS INSTRUCTION
291 CC 0210 VALUE TOO LARGE
292 CC 0211 UNDEFINED SYMBOL
293 CC 0212 DATA SIZE IS INVALID
294 CC 0213 REGISTER MUST BE ADDRESS REGISTER
295 CC 0214 INVALID SIZE SPECIFIED FOR INDEX REGISTER (MUST BE .L)
296 CC 0215 REGISTER MUST BE DATA REGISTER
297 CC 0216 NEGATIVE NOT ALLOWED
298 CC 0217 BYTE MODE NOT ALLOWED
299 CC 0218 DESTINATION MUST BE ALTERABLE
300 CC 0219 TOO MANY OPERANDS FOR THIS INSTRUCTION
301 CC 0220 PHASING ERROR BETWEEN PASS ONE AND PASS TWO.
302 CC 0221 SYMBOL TABLE OVERFLOW
303 CC 0222 INTERNAL ERROR - PARSE STACK OVERFLOW
304 CC 0223 INTERNAL ERROR - UNDEFINED ACTION
305 CC 0224 ILLEGAL MACRO PARAMETER
306 CC 0225 MISPLACED 'MACRO' OR 'ENDM'
307 CC 0226 MACRO CALLS NESTED TOO DEEP
308 CC 0227 MULTIPLE REGISTERS ALLOWED ONLY FOR MOVEM(LDM,STM)
309 CC 0228 INTERNAL ERROR - SYMBOL LOST
310 CC 0229 LABEL REQUIRED ON THIS STATEMENT
311 CC 0230 INSTRUCTION ADDRESS HAS FALLEN ON AN ODD BOUNDARY
312 CC 0231 SYMBOL/EXPRESSION MUST BE ABSOLUTE
313 CC 0232 AND/OR/EOR TO CCR OR SR MUST HAVE IMMEDIATE SOURCE
314 CC 0233 ILLEGAL REGISTER FOR THIS INSTRUCTION
315 CC 0234 INVALID SYNTAX FOR THIS INSTRUCTION
316 CC 0235 FORWARD REFERENCED ADDRESS CANNOT BE LONG ABSOLUTE MODE
317 CC 0236 MEMORY SHIFTS MAY ONLY BE SINGLE BIT
318 CC 0237 ILLEGAL OPERATION ON A RELATIVE SYMBOL
319 CC 0238 INVALID BYTE SIZE FOR THIS INSTRUCTION
320 CC 0239 'END' DOES NOT TERMINATE SOURCE PROGRAM AS IT SHOULD
321 CC 0240 ILLEGAL FORWARD REFERENCE
322 CC
323 CC3.0 INSTALLATION OF THE M68000 CROSS ASSEMBLER ON A PDP-11 SYSTEM
324 CC TYPE SYSTEM.
325 CC
326 CC THE CROSS ASSEMBLER COMES ON A TAPE IN ONE FILE.
327 CC EACH SUBPROGRAM MUST BE SEPARATED FROM THIS FILE AND COMPILED
328 CC SEPARATELY IN ORDER TO LINK THE ENTIRE PROGRAM INTO A TASK.
329 CC ALL BUT 5 SUBPROGRAMS ARE WRITTEN IN FORTRAN. PROGRAMS MUST BE
330 CC COMPILED WITH THE /ON AND /SU FORTRAN OPTIONS TO GET THE LOAD
331 CC MODULE SMALL ENOUGH TO FIT IN 28K OF MEMORY ON A DOS SYSTEM.
332 CC USE /NOVA/NOSN ON AN RSX-M SYSTEM.
333 CC NOVA=NO 32 BIT INTEGERS
334 CC NOSN=NO INTERNAL STATEMENT #'S GEN'D BY COMPILER
335 CC THE FOLLOWING SWITCHES ARE USED WITH FORTRAN IV-PLUS, V02-51
336 CC /NOTR NO TRACE
337 CC /NOCK NO SUBCRIPT CHECKING
338 CC
339 CC IT SHOULD BE POSSIBLE TO OVERLAY THIS PROGRAM TO
340 CC GET MORE MEMORY AVAILABLE FOR SYMBOL TABLE SPACE. ALL ROUTINES
341 CC EXCEPT 'ACT1', 'BUILD1', 'ACT2', 'BUILD2', AND 'PRSYM' MUST
342 CC BE IN MEMORY, OR MUST BE IN THE MAIN OVERLAY. ACT1 CALLS
343 CC BUILD1 AND BOTH ARE USED IN PASS 1 ONLY. THEREFORE THESE TWO
344 CC SUBPROGRAMS CAN BE CONCATENATED AS ONE OVERLAY. ACT2, BUILD2
345 CC DO NOT CALL EACH OTHER AND MAY EACH BE THE SAME LEVEL OVERLAY
346 CC AS ACT1 SINCE THEY ARE USED ONLY IN PASS 2 . PRSYM PRINTS OUT
347 CC SYMBOL TABLE WHEN PASS 2 IS DONE SO IT CAN BE AT THE SAME
348 CC LEVEL AS ACT1, ACT2, AND BUILD2.
349 CC
350 CC SEVERAL PAGES OF NOTES ON ASSEMBLER CONSTRUCTION, VARIABLE
351 CC NAMES, COMMON, AND A DESCRIPTION OF THE VARIABLE NAMES IS
352 CC INCLUDED. THIS IS FOR INFORMATION ONLY AND IS NOT PART OF THE
353 CC OVERALL SOURCE PROGRAM.
354 CC
355 CC THE MAIN PROGRAM IS 'MACS'. SEVERAL SUBPROGRAMS FOLLOW 'MACS'
356 CC ALL IN FORTRAN. FIVE MORE IN PDP-11 ASSEMBLY LANGUAGE FOLLOW.
357 CC THE ASSEMBLY LANGUAGE PROGRAMS ARE: ADD,MUL,SUB,DIV,NEGATE.
358 CC SEPARATE THE FORTRAN PROGRAMS AND COMPILE EACH ONE. THEN
359 CC SEPARATE THE ASSEMBLY PROGRAMS AND ASSEMBLE EACH ONE.
360 CC LINK ALL OF THE RESULTANT .OBJ FILES IN TO A TASK(LOAD
361 CC MODULE). WHEN THIS IS DONE IT IS READY FOR EXECUTION.
362 CC
363 CC AS A TEST OF THE INSTALLATION OF THE CROSS ASSEMBLER IT
364 CC IS SUGGESTED THE SORT PROGRAM FOUND IN APPENDIX E OF THE
365 CC CROSS MACRO ASSEMBLER REFERENCE MANUAL, M68KXASM(D3), BE
366 CC USED. THIS PROGRAM SHOULD EXECUTE IN EITHER THE HARDWARE
367 CC OR A SIMULATOR SUCCESSFULLY.
368 CC
369 CC ONCE THE LOAD MODULE IS UP AND RUNNING, IT IS READY
370 CC FOR EXECUTION.
371 CC
372 CC RSX-11M SYSTEM.
373 CC ROUTINE 'FILEOP' HAS 'CALL ASSIGN' IN IT FOR THE RSX-11M
374 CC SYSTEM. THIS ROUTINE MUST BE CHANGED IF THE USER DOES NOT
375 CC WANT TO USE THIS METHOD OF ACCESSING FILES. 'FILEOP' ALSO
376 CC REQUESTS THE FILENAME FOR THE OUTPUT LISTING. IF THE SYSTEM
377 CC ALLOWS DIRECT OUTPUT TO THE LINE PRINTER THIS MAY BE
378 CC CHANGED ACCORDINGLY. THE 'CALL FILEOP(6)' IN 'MACS'
379 CC MUST ALSO BE DELETED IN THIS CASE, UNLESS THE COMPLETE
380 CC IN CHANGE IS MADE IN 'FILEOP'. THE REQUEST FOR PRINTING
381 CC PASS 1 IN 'MACS' MAY ALSO BE REMOVED IF DESIRED. THIS IS A
382 CC DEBUGGING AID.
383 CC NAMES FOR ALL FILES ARE REQUESTED FROM 'FILEOP'.
384 CC
385 CC THIS SOFTWARE HAS BEEN CHECKED OUT ON AN RSX-11M VERSION 3.2
386 CC SYSTEM. IT HAS NOT BEEN RAN ON AN RSTS OR UNIX SYSTEM. THE
387 CC SOFTWARE IS SENT OUT ON AN 800 BPI UN-LABELED 9-TRACK TAPE.
388 CC IT IS IN ASCII, 80 BYTES PER RECORD AND BLOCK. THE USER
389 CC MUST BE ABLE TO READ THIS TYPE OF TAPE.
390 CC A FORTRAN PROGRAM USING CALLS TO 'QIO' IS AVAILABLE FROM
391 CC MOTOROLA TO DO THIS READ. IT IS PLANNED TO PUT A COPY
392 CC OF THIS PROGRAM IN THE NEXT UPDATE OF THE REFERENCE MANUAL.
393 CC RELEASES PREVIOUS TO 1.4 WERE CHECKED OUT ON RSX-11M, FORTRAN
394 CC V02.2-1. RELEASE 1.4 WAS CHECKED OUT ON FORTRAN IV-PLUS
395 CC V02-51. A CHANGE HAD TO BE MADE IN THE CALL TO 'ASSIGN' TO
396 CC BE DOWNWARD COMPATIBLE WITH DEC'S CHANGE IN 'ASSIGN' REQUIRING
397 CC THE FIRST CHARACTER AT THE END OF THE FILENAME TO BE A NULL.
398 CC
399 CC AFTER READING THE TAPE IN TO A DISC FILE IT IS BEST TO WRITE A
400 CC FORTRAN PROGRAM THAT READ IN THAT FILE AND SPLIT IT INTO THE
401 CC SEPARATE SUBPROGRAMS.
402 CC
403 CC *** END OF THIS ARTICLE ***
404 CC
405 CC
406 CC
407 CC
408 CC NAM: MACS VER: 1.0 DAT: DEC 8, 1978 CMP: PDP-11
409 CC
410 CC SYS: MACS
411 CC
412 CC FNC: THIS IS THE MAIN PROGRAM FOR THE M68000 CROSS ASSEMBLER.
413 CC IT INITIALIZES SEVERAL VARIABLES, AND
414 CC CALLS ROUTINES FOR PASS1 AND PASS 2.
415 CC
416 CC ******************************************************
417 CC *** ***
418 CC *** COPYRIGHT 1978 BY MOTOROLA INCC ***
419 CC *** ***
420 CC ******************************************************
421 CC
422 CC ***********************************************************
423 CC *** ***
424 CC *** THIS IS A PRELIMINARY RELEASE OF THE MC68000 ***
425 CC *** CROSS ASSEMBLER. AS SUCH IT IS POSSIBLE THE ***
426 CC *** INSTRUCTION SET FOR THE MC68000 MAY CHANGE ***
427 CC *** CAUSING CHANGES IN THIS CROSS ASSEMBLER. ***
428 CC *** MOTOROLA RESERVES THE RIGHT TO MAKE CHANGES ***
429 CC *** WITHOUT NOTICE. ***
430 CC *** ***
431 CC ***********************************************************
432 CC
433 CC REV: N/A
434 CC
435 CCALLS COMDEP-FILEOP-PNCH-ERR-PRSYM-PAGE
436 CC
437 C*
438 IMPLICIT INTEGER (A-Z)
439 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
440 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
441 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
442 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
443 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
444 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
445 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
446 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
447 COMMON /A/ NXSYM1
448 DIMENSION KCLAS2(64)
449 DATA KCLAS2/8,9,9,9,3,9,9,5,9,9,9,9,9,9,9,9,
450 & 7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,
451 & 6,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,
452 & 6,6,6,6,6,6,6,6,6,6,6,9,2,9,6,6/
453 DATA IYES/'Y'/
454 C
455 C*** INITIALIZE VARIABLES, IO DEVICES
456 CALL COMDEP
457 9960 FORMAT(' PRINT PASS 1? (Y/N)'/)
458 9961 FORMAT(A1)
459 WRITE(LULT,9960)
460 READ(LUCI,9961) JJJ
461 IF(JJJ.EQ.IYES) CALL DEBUG(1)
462 C
463 C+++ THIS FILE OUTPUT OF SOURCE IS TO GET AROUND
464 C+++ THE SPOOLING TO PRINTER ON THE SYSTEM.
465 C+++ REMOVE THE 'CALL FILEOP(6)' TO GO DIRECTLY TO PRINTER
466 C
467 C+++ ALSO REMOVE TEST AT END OF THIS PROGRAM FOR CLOSING FILE 3
468 CALL FILEOP(6)
469 C
470 C+++ END
471 C
472 DO 40 I=1,11
473 DO 40 J=1,3
474 40 MFLD(I,J)=0
475 C*** SET UP COMMON /A/ARRAY 'KCLAS'
476 DO 70 I=1,64
477 70 KCLAS(I)=KCLAS2(I)
478 C*** PAGE SWITCH DEFAULT ON
479 NOP=1
480 C*** FLAG NOT TO PRINT EXPANDED LITERALS
481 LUDI=0
482 C*** IOBJ=1=OBJECT OUT - IOBJ=0=NO OBJECT OUT
483 IOBJ=1
484 C
485 C*** LIST=0 NOLIST - LIST=1 LIST(DEFAULT).
486 LIST= 1
487 C*** SET DEFAULT LINE LENGTH
488 LLEN=80
489 C*** SET DO NOT ADJUST OUTPUT LINE SWITCH
490 LLENSW=0
491 C*** SET DEFAULT PAGE COUNT TO 65 LINES/PAGE
492 IPLEN=65
493 ICOL=0
494 NEST=0
495 MNUM=0
496 C*** ASCII BLANK, RIGHT JUSTIFIED, ZERO FILLED.
497 LSP=32
498 C*** LEAVE SYMBOL TABLE SIZE LESS THAN MAX IN ORDER TO HANDLE
499 C*** SYMBOL TABLE OVERFLOW.
500 LENSYM=2990
501 IEOT=4
502 JERR=0
503 IPC2=0
504 IPC=0
505 IADM(7,2)=0
506 IADM(7,1)=1
507 C*** INIT MACRO @000 VALUE
508 KARD2(1,1)=64
509 KARD2(2,1)=48
510 KARD2(3,1)=48
511 KARD2(4,1)=48
512 KARD2(5,1)=0
513 C*** PRINT THIS HEADER TO CONSOLE
514 CALL PAGE(81)
515 C
516 C
517 C*** GET SI FN OPENED
518 C
519 CALL FILEOP(1)
520 C*** OUTPUT HEADER
521 CALL PAGE(82)
522 C
523 C*** PERFORM PASS ONE
524 C
525 750 CONTINUE
526 IPASS=-1
527 C*** SAVE FOR SYMBOL TABLE PRINT OUT.
528 900 NXSYM1=NXSYM
529 1000 CALL PAR
530 IF(IPASS.LT.0) GO TO 1000
531 C
532 C*** PERFORM PASS TWO
533 C
534 C*** IS OBJECT OUTPUT DESIRED?
535 IF(IOBJ.EQ.0) GO TO 1100
536 C*** OPEN OBJ FILE
537 CALL FILEOP(5)
538 CALL PNCH(1,IPC)
539 CALL PNCH(3,IPC)
540 1100 CONTINUE
541 C
542 C*** IN CASE IFXX - ENDC NOT EQUAL RESET
543 C
544 NEST=0
545 C
546 C
547 C*** RESET MACRO @ COUNTER
548 KARD2(1,1)=64
549 KARD2(2,1)=48
550 KARD2(3,1)=48
551 KARD2(4,1)=48
552 KARD2(5,1)=0
553 C
554 2000 CALL PAR
555 IF(IPASS.EQ.0) GO TO 2000
556 C*** END OF PASS 2
557 C*** PRINT FINAL ERROR COUNT
558 CALL ERR(-1)
559 C*** PRINT SYMBOL TABLE
560 CALL PRSYM
561 C*** PUT OUT TRAILING RECORD IF OBJECT OUT REQ.
562 IF(IOBJ.EQ.0) GO TO 3000
563 CALL PNCH(2,IPC)
564 C*** CLOSE OBJECT OUTPUT FILE
565 2900 CALL FILEOP(4)
566 C
567 C+++ IF LIST IS TO FILE, CLOSE IT
568 C
569 3000 CONTINUE
570 IF(LUOT.EQ.3) CALL CLOSE(3)
571 END
572 BLOCK DATA
573 CC NAM: BLOCK DATA VER: 1.0 DAT: DEC 8, 1978 CMP: PDP-11
574 C
575 C*
576 IMPLICIT INTEGER (A-Z)
577 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
578 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
579 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
580 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
581 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
582 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
583 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
584 COMMON /A/ LIST,ICOL,NEST
585 C
586 C*** THE C>>> MUST NOT BE MOVED, PARNET USES IT
587 C>>>
588 DATA NXSYM/1171/
589 DATA ISYM( 1)/O 0/,ISYM( 2)/O 1777/,ISYM( 3)/O 141/
590 DATA ISYM( 4)/O 46501/,ISYM( 5)/O 41522/,ISYM( 6)/O 47400/
591 DATA ISYM( 7)/O177777/,ISYM( 8)/O 0/,ISYM( 9)/O 0/
592 DATA ISYM( 10)/O 1377/,ISYM( 11)/O 661/,ISYM( 12)/O 42516/
593 DATA ISYM( 13)/O 42115/,ISYM( 14)/O177777/,ISYM( 15)/O 1/
594 DATA ISYM( 16)/O 0/,ISYM( 17)/O 1777/,ISYM( 18)/O 150/
595 DATA ISYM( 19)/O 46505/,ISYM( 20)/O 54111/,ISYM( 21)/O 52000/
596 DATA ISYM( 22)/O177777/,ISYM( 23)/O 2/,ISYM( 24)/O 0/
597 DATA ISYM( 25)/O 1377/,ISYM( 26)/O 275/,ISYM( 27)/O 42516/
598 DATA ISYM( 28)/O 42000/,ISYM( 29)/O 1/,ISYM( 30)/O 1/
599 DATA ISYM( 31)/O 0/,ISYM( 32)/O 1377/,ISYM( 33)/O 402/
600 DATA ISYM( 34)/O 42516/,ISYM( 35)/O 42103/,ISYM( 36)/O 1/
601 DATA ISYM( 37)/O 2/,ISYM( 38)/O 0/,ISYM( 39)/O 1377/
602 DATA ISYM( 40)/O 616/,ISYM( 41)/O 50101/,ISYM( 42)/O 43505/
603 DATA ISYM( 43)/O 1/,ISYM( 44)/O 3/,ISYM( 45)/O 0/
604 DATA ISYM( 46)/O 1377/,ISYM( 47)/O 742/,ISYM( 48)/O 46111/
605 DATA ISYM( 49)/O 51524/,ISYM( 50)/O 1/,ISYM( 51)/O 4/
606 DATA ISYM( 52)/O 0/,ISYM( 53)/O 1777/,ISYM( 54)/O 677/
607 DATA ISYM( 55)/O 47117/,ISYM( 56)/O 46111/,ISYM( 57)/O 51524/
608 DATA ISYM( 58)/O 1/,ISYM( 59)/O 5/,ISYM( 60)/O 0/
609 DATA ISYM( 61)/O 1377/,ISYM( 62)/O 706/,ISYM( 63)/O 47117/
610 DATA ISYM( 64)/O 46000/,ISYM( 65)/O 1/,ISYM( 66)/O 5/
611 DATA ISYM( 67)/O 0/,ISYM( 68)/O 1377/,ISYM( 69)/O 1756/
612 DATA ISYM( 70)/O 52124/,ISYM( 71)/O 46000/,ISYM( 72)/O 1/
613 DATA ISYM( 73)/O 6/,ISYM( 74)/O 0/,ISYM( 75)/O 1777/
614 DATA ISYM( 76)/O 303/,ISYM( 77)/O 47117/,ISYM( 78)/O 50101/
615 DATA ISYM( 79)/O 43505/,ISYM( 80)/O 1/,ISYM( 81)/O 7/
616 DATA ISYM( 82)/O 0/,ISYM( 83)/O 1777/,ISYM( 84)/O 175/
617 DATA ISYM( 85)/O 47117/,ISYM( 86)/O 47502/,ISYM( 87)/O 45000/
618 DATA ISYM( 88)/O 1/,ISYM( 89)/O 10/,ISYM( 90)/O 0/
619 DATA ISYM( 91)/O 1377/,ISYM( 92)/O 266/,ISYM( 93)/O 41515/
620 DATA ISYM( 94)/O 50114/,ISYM( 95)/O 1/,ISYM( 96)/O 11/
621 DATA ISYM( 97)/O 0/,ISYM( 98)/O 1377/,ISYM( 99)/O 634/
622 DATA ISYM( 100)/O 41515/,ISYM( 101)/O 50122/,ISYM( 102)/O 1/
623 DATA ISYM( 103)/O 12/,ISYM( 104)/O 0/,ISYM( 105)/O 777/
624 DATA ISYM( 106)/O 242/,ISYM( 107)/O 43400/,ISYM( 108)/O 1/
625 DATA ISYM( 109)/O 13/,ISYM( 110)/O 0/,ISYM( 111)/O 1777/
626 DATA ISYM( 112)/O 562/,ISYM( 113)/O 46501/,ISYM( 114)/O 51513/
627 DATA ISYM( 115)/O 31000/,ISYM( 116)/O 1/,ISYM( 117)/O 14/
628 DATA ISYM( 118)/O 0/,ISYM( 119)/O 1377/,ISYM( 120)/O 257/
629 DATA ISYM( 121)/O 51124/,ISYM( 122)/O 42400/,ISYM( 123)/O 2/
630 DATA ISYM( 124)/O 47163/,ISYM( 125)/O 0/,ISYM( 126)/O 1377/
631 DATA ISYM( 127)/O 1104/,ISYM( 128)/O 51124/,ISYM( 129)/O 51000/
632 DATA ISYM( 130)/O 2/,ISYM( 131)/O 47167/,ISYM( 132)/O 0/
633 DATA ISYM( 133)/O 1377/,ISYM( 134)/O 2067/,ISYM( 135)/O 51124/
634 DATA ISYM( 136)/O 51400/,ISYM( 137)/O 2/,ISYM( 138)/O 47165/
635 DATA ISYM( 139)/O 0/,ISYM( 140)/O 1777/,ISYM( 141)/O 1066/
636 DATA ISYM( 142)/O 51105/,ISYM( 143)/O 51505/,ISYM( 144)/O 52000/
637 DATA ISYM( 145)/O 2/,ISYM( 146)/O 47160/,ISYM( 147)/O 0/
638 DATA ISYM( 148)/O 1777/,ISYM( 149)/O 0/,ISYM( 150)/O 52122/
639 DATA ISYM( 151)/O 40520/,ISYM( 152)/O 53000/,ISYM( 153)/O 2/
640 DATA ISYM( 154)/O 47166/,ISYM( 155)/O 0/,ISYM( 156)/O 1377/
641 DATA ISYM( 157)/O 1326/,ISYM( 158)/O 47117/,ISYM( 159)/O 50000/
642 DATA ISYM( 160)/O 2/,ISYM( 161)/O 47161/,ISYM( 162)/O 0/
643 DATA ISYM( 163)/O 777/,ISYM( 164)/O 1371/,ISYM( 165)/O 42103/
644 DATA ISYM( 166)/O 4/,ISYM( 167)/O 0/,ISYM( 168)/O 0/
645 DATA ISYM( 169)/O 1377/,ISYM( 170)/O 652/,ISYM( 171)/O 47522/
646 DATA ISYM( 172)/O 43400/,ISYM( 173)/O 5/,ISYM( 174)/O 1/
647 DATA ISYM( 175)/O 0/,ISYM( 176)/O 1377/,ISYM( 177)/O 553/
648 DATA ISYM( 178)/O 42521/,ISYM( 179)/O 52400/,ISYM( 180)/O 5/
649 DATA ISYM( 181)/O 2/,ISYM( 182)/O 0/,ISYM( 183)/O 1377/
650 DATA ISYM( 184)/O 733/,ISYM( 185)/O 51505/,ISYM( 186)/O 52000/
651 DATA ISYM( 187)/O 5/,ISYM( 188)/O 3/,ISYM( 189)/O 0/
652 DATA ISYM( 190)/O 777/,ISYM( 191)/O 420/,ISYM( 192)/O 42123/
653 DATA ISYM( 193)/O 5/,ISYM( 194)/O 4/,ISYM( 195)/O 0/
654 DATA ISYM( 196)/O 1377/,ISYM( 197)/O 337/,ISYM( 198)/O 51117/
655 DATA ISYM( 199)/O 51107/,ISYM( 200)/O 5/,ISYM( 201)/O 5/
656 DATA ISYM( 202)/O 0/,ISYM( 203)/O 1377/,ISYM( 204)/O 1221/
657 DATA ISYM( 205)/O 43101/,ISYM( 206)/O 44514/,ISYM( 207)/O 5/
658 DATA ISYM( 208)/O 6/,ISYM( 209)/O 0/,ISYM( 210)/O 1377/
659 DATA ISYM( 211)/O 715/,ISYM( 212)/O 51520/,ISYM( 213)/O 41400/
660 DATA ISYM( 214)/O 5/,ISYM( 215)/O 7/,ISYM( 216)/O 0/
661 DATA ISYM( 217)/O 1377/,ISYM( 218)/O 1005/,ISYM( 219)/O 46111/
662 DATA ISYM( 220)/O 47113/,ISYM( 221)/O 6/,ISYM( 222)/O 47120/
663 DATA ISYM( 223)/O 0/,ISYM( 224)/O 1377/,ISYM( 225)/O 1670/
664 DATA ISYM( 226)/O 52516/,ISYM( 227)/O 46113/,ISYM( 228)/O 6/
665 DATA ISYM( 229)/O 47130/,ISYM( 230)/O 0/,ISYM( 231)/O 1377/
666 DATA ISYM( 232)/O 364/,ISYM( 233)/O 51527/,ISYM( 234)/O 40520/
667 DATA ISYM( 235)/O 7/,ISYM( 236)/O 44100/,ISYM( 237)/O 0/
668 DATA ISYM( 238)/O 1377/,ISYM( 239)/O 1720/,ISYM( 240)/O 52122/
669 DATA ISYM( 241)/O 40520/,ISYM( 242)/O 10/,ISYM( 243)/O 47100/
670 DATA ISYM( 244)/O 0/,ISYM( 245)/O 1377/,ISYM( 246)/O 1174/
671 DATA ISYM( 247)/O 52123/,ISYM( 248)/O 52000/,ISYM( 249)/O 11/
672 DATA ISYM( 250)/O 45000/,ISYM( 251)/O 0/,ISYM( 252)/O 1377/
673 DATA ISYM( 253)/O 501/,ISYM( 254)/O 41514/,ISYM( 255)/O 51000/
674 DATA ISYM( 256)/O 11/,ISYM( 257)/O 41000/,ISYM( 258)/O 0/
675 DATA ISYM( 259)/O 1377/,ISYM( 260)/O 1147/,ISYM( 261)/O 47105/
676 DATA ISYM( 262)/O 43400/,ISYM( 263)/O 11/,ISYM( 264)/O 42000/
677 DATA ISYM( 265)/O 0/,ISYM( 266)/O 1377/,ISYM( 267)/O 643/
678 DATA ISYM( 268)/O 47117/,ISYM( 269)/O 52000/,ISYM( 270)/O 11/
679 DATA ISYM( 271)/O 43000/,ISYM( 272)/O 0/,ISYM( 273)/O 1377/
680 DATA ISYM( 274)/O 1417/,ISYM( 275)/O 47102/,ISYM( 276)/O 41504/
681 DATA ISYM( 277)/O 12/,ISYM( 278)/O 44000/,ISYM( 279)/O 0/
682 DATA ISYM( 280)/O 1377/,ISYM( 281)/O 1317/,ISYM( 282)/O 50105/
683 DATA ISYM( 283)/O 40400/,ISYM( 284)/O 13/,ISYM( 285)/O 44100/
684 DATA ISYM( 286)/O 0/,ISYM( 287)/O 1377/,ISYM( 288)/O 751/
685 DATA ISYM( 289)/O 45123/,ISYM( 290)/O 51000/,ISYM( 291)/O 14/
686 DATA ISYM( 292)/O 47200/,ISYM( 293)/O 0/,ISYM( 294)/O 1377/
687 DATA ISYM( 295)/O 463/,ISYM( 296)/O 45115/,ISYM( 297)/O 50000/
688 DATA ISYM( 298)/O 14/,ISYM( 299)/O 47300/,ISYM( 300)/O 0/
689 DATA ISYM( 301)/O 1377/,ISYM( 302)/O 526/,ISYM( 303)/O 41122/
690 DATA ISYM( 304)/O 40400/,ISYM( 305)/O 15/,ISYM( 306)/O 60000/
691 DATA ISYM( 307)/O 0/,ISYM( 308)/O 1377/,ISYM( 309)/O 0/
692 DATA ISYM( 310)/O 41123/,ISYM( 311)/O 51000/,ISYM( 312)/O 15/
693 DATA ISYM( 313)/O 60400/,ISYM( 314)/O 0/,ISYM( 315)/O 1377/
694 DATA ISYM( 316)/O 625/,ISYM( 317)/O 41110/,ISYM( 318)/O 44400/
695 DATA ISYM( 319)/O 15/,ISYM( 320)/O 61000/,ISYM( 321)/O 0/
696 DATA ISYM( 322)/O 1377/,ISYM( 323)/O 1237/,ISYM( 324)/O 41114/
697 DATA ISYM( 325)/O 51400/,ISYM( 326)/O 15/,ISYM( 327)/O 61400/
698 DATA ISYM( 328)/O 0/,ISYM( 329)/O 1377/,ISYM( 330)/O 1737/
699 DATA ISYM( 331)/O 41103/,ISYM( 332)/O 41400/,ISYM( 333)/O 15/
700 DATA ISYM( 334)/O 62000/,ISYM( 335)/O 0/,ISYM( 336)/O 1377/
701 DATA ISYM( 337)/O 535/,ISYM( 338)/O 41103/,ISYM( 339)/O 51400/
702 DATA ISYM( 340)/O 15/,ISYM( 341)/O 62400/,ISYM( 342)/O 0/
703 DATA ISYM( 343)/O 1377/,ISYM( 344)/O 0/,ISYM( 345)/O 41116/
704 DATA ISYM( 346)/O 42400/,ISYM( 347)/O 15/,ISYM( 348)/O 63000/
705 DATA ISYM( 349)/O 0/,ISYM( 350)/O 1377/,ISYM( 351)/O 571/
706 DATA ISYM( 352)/O 41105/,ISYM( 353)/O 50400/,ISYM( 354)/O 15/
707 DATA ISYM( 355)/O 63400/,ISYM( 356)/O 0/,ISYM( 357)/O 1377/
708 DATA ISYM( 358)/O 0/,ISYM( 359)/O 41126/,ISYM( 360)/O 41400/
709 DATA ISYM( 361)/O 15/,ISYM( 362)/O 64000/,ISYM( 363)/O 0/
710 DATA ISYM( 364)/O 1377/,ISYM( 365)/O 1041/,ISYM( 366)/O 41126/
711 DATA ISYM( 367)/O 51400/,ISYM( 368)/O 15/,ISYM( 369)/O 64400/
712 DATA ISYM( 370)/O 0/,ISYM( 371)/O 1377/,ISYM( 372)/O 0/
713 DATA ISYM( 373)/O 41120/,ISYM( 374)/O 46000/,ISYM( 375)/O 15/
714 DATA ISYM( 376)/O 65000/,ISYM( 377)/O 0/,ISYM( 378)/O 1377/
715 DATA ISYM( 379)/O 2206/,ISYM( 380)/O 41115/,ISYM( 381)/O 44400/
716 DATA ISYM( 382)/O 15/,ISYM( 383)/O 65400/,ISYM( 384)/O 0/
717 DATA ISYM( 385)/O 1377/,ISYM( 386)/O 0/,ISYM( 387)/O 41107/
718 DATA ISYM( 388)/O 42400/,ISYM( 389)/O 15/,ISYM( 390)/O 66000/
719 DATA ISYM( 391)/O 0/,ISYM( 392)/O 1377/,ISYM( 393)/O 1032/
720 DATA ISYM( 394)/O 41114/,ISYM( 395)/O 52000/,ISYM( 396)/O 15/
721 DATA ISYM( 397)/O 66400/,ISYM( 398)/O 0/,ISYM( 399)/O 1377/
722 DATA ISYM( 400)/O 1747/,ISYM( 401)/O 41107/,ISYM( 402)/O 52000/
723 DATA ISYM( 403)/O 15/,ISYM( 404)/O 67000/,ISYM( 405)/O 0/
724 DATA ISYM( 406)/O 1377/,ISYM( 407)/O 1212/,ISYM( 408)/O 41114/
725 DATA ISYM( 409)/O 42400/,ISYM( 410)/O 15/,ISYM( 411)/O 67400/
726 DATA ISYM( 412)/O 0/,ISYM( 413)/O 1377/,ISYM( 414)/O 670/
727 DATA ISYM( 415)/O 47105/,ISYM( 416)/O 43530/,ISYM( 417)/O 16/
728 DATA ISYM( 418)/O 40000/,ISYM( 419)/O 0/,ISYM( 420)/O 1377/
729 DATA ISYM( 421)/O 1615/,ISYM( 422)/O 42530/,ISYM( 423)/O 52000/
730 DATA ISYM( 424)/O 17/,ISYM( 425)/O 44200/,ISYM( 426)/O 0/
731 DATA ISYM( 427)/O 1377/,ISYM( 428)/O 0/,ISYM( 429)/O 52101/
732 DATA ISYM( 430)/O 51400/,ISYM( 431)/O 20/,ISYM( 432)/O 45300/
733 DATA ISYM( 433)/O 0/,ISYM( 434)/O 1377/,ISYM( 435)/O 1014/
734 DATA ISYM( 436)/O 51510/,ISYM( 437)/O 44400/,ISYM( 438)/O 21/
735 DATA ISYM( 439)/O 51300/,ISYM( 440)/O 0/,ISYM( 441)/O 1377/
736 DATA ISYM( 442)/O 2117/,ISYM( 443)/O 51514/,ISYM( 444)/O 51400/
737 DATA ISYM( 445)/O 21/,ISYM( 446)/O 51700/,ISYM( 447)/O 0/
738 DATA ISYM( 448)/O 1377/,ISYM( 449)/O 1401/,ISYM( 450)/O 51503/
739 DATA ISYM( 451)/O 41400/,ISYM( 452)/O 21/,ISYM( 453)/O 52300/
740 DATA ISYM( 454)/O 0/,ISYM( 455)/O 1377/,ISYM( 456)/O 724/
741 DATA ISYM( 457)/O 51503/,ISYM( 458)/O 51400/,ISYM( 459)/O 21/
742 DATA ISYM( 460)/O 52700/,ISYM( 461)/O 0/,ISYM( 462)/O 1377/
743 DATA ISYM( 463)/O 1245/,ISYM( 464)/O 51516/,ISYM( 465)/O 42400/
744 DATA ISYM( 466)/O 21/,ISYM( 467)/O 53300/,ISYM( 468)/O 0/
745 DATA ISYM( 469)/O 1377/,ISYM( 470)/O 760/,ISYM( 471)/O 51505/
746 DATA ISYM( 472)/O 50400/,ISYM( 473)/O 21/,ISYM( 474)/O 53700/
747 DATA ISYM( 475)/O 0/,ISYM( 476)/O 1377/,ISYM( 477)/O 0/
748 DATA ISYM( 478)/O 51526/,ISYM( 479)/O 41400/,ISYM( 480)/O 21/
749 DATA ISYM( 481)/O 54300/,ISYM( 482)/O 0/,ISYM( 483)/O 1377/
750 DATA ISYM( 484)/O 0/,ISYM( 485)/O 51526/,ISYM( 486)/O 51400/
751 DATA ISYM( 487)/O 21/,ISYM( 488)/O 54700/,ISYM( 489)/O 0/
752 DATA ISYM( 490)/O 1377/,ISYM( 491)/O 1050/,ISYM( 492)/O 51520/
753 DATA ISYM( 493)/O 46000/,ISYM( 494)/O 21/,ISYM( 495)/O 55300/
754 DATA ISYM( 496)/O 0/,ISYM( 497)/O 1377/,ISYM( 498)/O 1301/
755 DATA ISYM( 499)/O 51515/,ISYM( 500)/O 44400/,ISYM( 501)/O 21/
756 DATA ISYM( 502)/O 55700/,ISYM( 503)/O 0/,ISYM( 504)/O 1377/
757 DATA ISYM( 505)/O 1471/,ISYM( 506)/O 51507/,ISYM( 507)/O 42400/
758 DATA ISYM( 508)/O 21/,ISYM( 509)/O 56300/,ISYM( 510)/O 0/
759 DATA ISYM( 511)/O 1377/,ISYM( 512)/O 1156/,ISYM( 513)/O 51514/
760 DATA ISYM( 514)/O 52000/,ISYM( 515)/O 21/,ISYM( 516)/O 56700/
761 DATA ISYM( 517)/O 0/,ISYM( 518)/O 1377/,ISYM( 519)/O 1642/
762 DATA ISYM( 520)/O 51507/,ISYM( 521)/O 52000/,ISYM( 522)/O 21/
763 DATA ISYM( 523)/O 57300/,ISYM( 524)/O 0/,ISYM( 525)/O 1377/
764 DATA ISYM( 526)/O 1310/,ISYM( 527)/O 51514/,ISYM( 528)/O 42400/
765 DATA ISYM( 529)/O 21/,ISYM( 530)/O 57700/,ISYM( 531)/O 0/
766 DATA ISYM( 532)/O 1377/,ISYM( 533)/O 1426/,ISYM( 534)/O 44506/
767 DATA ISYM( 535)/O 42521/,ISYM( 536)/O 22/,ISYM( 537)/O 1/
768 DATA ISYM( 538)/O 0/,ISYM( 539)/O 1377/,ISYM( 540)/O 1507/
769 DATA ISYM( 541)/O 44506/,ISYM( 542)/O 47105/,ISYM( 543)/O 22/
770 DATA ISYM( 544)/O 2/,ISYM( 545)/O 0/,ISYM( 546)/O 1377/
771 DATA ISYM( 547)/O 1165/,ISYM( 548)/O 46114/,ISYM( 549)/O 42516/
772 DATA ISYM( 550)/O 23/,ISYM( 551)/O 1/,ISYM( 552)/O 0/
773 DATA ISYM( 553)/O 1377/,ISYM( 554)/O 1254/,ISYM( 555)/O 50114/
774 DATA ISYM( 556)/O 42516/,ISYM( 557)/O 23/,ISYM( 558)/O 2/
775 DATA ISYM( 559)/O 0/,ISYM( 560)/O 1377/,ISYM( 561)/O 0/
776 DATA ISYM( 562)/O 51524/,ISYM( 563)/O 47520/,ISYM( 564)/O 23/
777 DATA ISYM( 565)/O 47162/,ISYM( 566)/O 0/,ISYM( 567)/O 1377/
778 DATA ISYM( 568)/O 0/,ISYM( 569)/O 46525/,ISYM( 570)/O 46125/
779 DATA ISYM( 571)/O 24/,ISYM( 572)/O140300/,ISYM( 573)/O 0/
780 DATA ISYM( 574)/O 1377/,ISYM( 575)/O 0/,ISYM( 576)/O 46525/
781 DATA ISYM( 577)/O 46123/,ISYM( 578)/O 24/,ISYM( 579)/O140700/
782 DATA ISYM( 580)/O 0/,ISYM( 581)/O 1377/,ISYM( 582)/O 1727/
783 DATA ISYM( 583)/O 42111/,ISYM( 584)/O 53125/,ISYM( 585)/O 24/
784 DATA ISYM( 586)/O100300/,ISYM( 587)/O 0/,ISYM( 588)/O 1377/
785 DATA ISYM( 589)/O 2045/,ISYM( 590)/O 42111/,ISYM( 591)/O 53123/
786 DATA ISYM( 592)/O 24/,ISYM( 593)/O100700/,ISYM( 594)/O 0/
787 DATA ISYM( 595)/O 1377/,ISYM( 596)/O 0/,ISYM( 597)/O 40504/
788 DATA ISYM( 598)/O 42000/,ISYM( 599)/O 25/,ISYM( 600)/O150000/
789 DATA ISYM( 601)/O 0/,ISYM( 602)/O 1377/,ISYM( 603)/O 1525/
790 DATA ISYM( 604)/O 40504/,ISYM( 605)/O 42111/,ISYM( 606)/O 25/
791 DATA ISYM( 607)/O150001/,ISYM( 608)/O 0/,ISYM( 609)/O 1377/
792 DATA ISYM( 610)/O 1353/,ISYM( 611)/O 40504/,ISYM( 612)/O 42101/
793 DATA ISYM( 613)/O 25/,ISYM( 614)/O150002/,ISYM( 615)/O 0/
794 DATA ISYM( 616)/O 1377/,ISYM( 617)/O 1410/,ISYM( 618)/O 40504/
795 DATA ISYM( 619)/O 42121/,ISYM( 620)/O 25/,ISYM( 621)/O 50000/
796 DATA ISYM( 622)/O 0/,ISYM( 623)/O 1377/,ISYM( 624)/O 2004/
797 DATA ISYM( 625)/O 51525/,ISYM( 626)/O 41111/,ISYM( 627)/O 25/
798 DATA ISYM( 628)/O110001/,ISYM( 629)/O 0/,ISYM( 630)/O 1377/
799 DATA ISYM( 631)/O 1606/,ISYM( 632)/O 51525/,ISYM( 633)/O 41101/
800 DATA ISYM( 634)/O 25/,ISYM( 635)/O110002/,ISYM( 636)/O 0/
801 DATA ISYM( 637)/O 1377/,ISYM( 638)/O 2103/,ISYM( 639)/O 51525/
802 DATA ISYM( 640)/O 41121/,ISYM( 641)/O 25/,ISYM( 642)/O 50400/
803 DATA ISYM( 643)/O 0/,ISYM( 644)/O 1377/,ISYM( 645)/O 1230/
804 DATA ISYM( 646)/O 51525/,ISYM( 647)/O 41000/,ISYM( 648)/O 25/
805 DATA ISYM( 649)/O110000/,ISYM( 650)/O 0/,ISYM( 651)/O 1377/
806 DATA ISYM( 652)/O 0/,ISYM( 653)/O 40516/,ISYM( 654)/O 42000/
807 DATA ISYM( 655)/O 26/,ISYM( 656)/O140000/,ISYM( 657)/O 0/
808 DATA ISYM( 658)/O 1377/,ISYM( 659)/O 1362/,ISYM( 660)/O 40516/
809 DATA ISYM( 661)/O 42111/,ISYM( 662)/O 26/,ISYM( 663)/O140000/
810 DATA ISYM( 664)/O 0/,ISYM( 665)/O 1377/,ISYM( 666)/O 0/
811 DATA ISYM( 667)/O 47522/,ISYM( 668)/O 44400/,ISYM( 669)/O 26/
812 DATA ISYM( 670)/O 0/,ISYM( 671)/O 0/,ISYM( 672)/O 777/
813 DATA ISYM( 673)/O 1272/,ISYM( 674)/O 47522/,ISYM( 675)/O 26/
814 DATA ISYM( 676)/O100000/,ISYM( 677)/O 0/,ISYM( 678)/O 1377/
815 DATA ISYM( 679)/O 1534/,ISYM( 680)/O 42517/,ISYM( 681)/O 51000/
816 DATA ISYM( 682)/O 27/,ISYM( 683)/O130400/,ISYM( 684)/O 0/
817 DATA ISYM( 685)/O 1377/,ISYM( 686)/O 1500/,ISYM( 687)/O 42517/
818 DATA ISYM( 688)/O 51111/,ISYM( 689)/O 27/,ISYM( 690)/O130400/
819 DATA ISYM( 691)/O 0/,ISYM( 692)/O 1377/,ISYM( 693)/O 1570/
820 DATA ISYM( 694)/O 41515/,ISYM( 695)/O 50000/,ISYM( 696)/O 30/
821 DATA ISYM( 697)/O130000/,ISYM( 698)/O 0/,ISYM( 699)/O 1377/
822 DATA ISYM( 700)/O 1335/,ISYM( 701)/O 41515/,ISYM( 702)/O 50101/
823 DATA ISYM( 703)/O 30/,ISYM( 704)/O130001/,ISYM( 705)/O 0/
824 DATA ISYM( 706)/O 1377/,ISYM( 707)/O 0/,ISYM( 708)/O 41515/
825 DATA ISYM( 709)/O 50111/,ISYM( 710)/O 30/,ISYM( 711)/O 6000/
826 DATA ISYM( 712)/O 0/,ISYM( 713)/O 1377/,ISYM( 714)/O 0/
827 DATA ISYM( 715)/O 42530/,ISYM( 716)/O 43400/,ISYM( 717)/O 31/
828 DATA ISYM( 718)/O140500/,ISYM( 719)/O 0/,ISYM( 720)/O 1377/
829 DATA ISYM( 721)/O 0/,ISYM( 722)/O 41510/,ISYM( 723)/O 45400/
830 DATA ISYM( 724)/O 32/,ISYM( 725)/O 40600/,ISYM( 726)/O 0/
831 DATA ISYM( 727)/O 1377/,ISYM( 728)/O 1775/,ISYM( 729)/O 41515/
832 DATA ISYM( 730)/O 50115/,ISYM( 731)/O 33/,ISYM( 732)/O130410/
833 DATA ISYM( 733)/O 0/,ISYM( 734)/O 1377/,ISYM( 735)/O 1543/
834 DATA ISYM( 736)/O 40504/,ISYM( 737)/O 42130/,ISYM( 738)/O 34/
835 DATA ISYM( 739)/O150400/,ISYM( 740)/O 0/,ISYM( 741)/O 1377/
836 DATA ISYM( 742)/O 0/,ISYM( 743)/O 51525/,ISYM( 744)/O 41130/
837 DATA ISYM( 745)/O 34/,ISYM( 746)/O110400/,ISYM( 747)/O 0/
838 DATA ISYM( 748)/O 1377/,ISYM( 749)/O 0/,ISYM( 750)/O 40502/
839 DATA ISYM( 751)/O 41504/,ISYM( 752)/O 35/,ISYM( 753)/O140400/
840 DATA ISYM( 754)/O 0/,ISYM( 755)/O 1377/,ISYM( 756)/O 1444/
841 DATA ISYM( 757)/O 51502/,ISYM( 758)/O 41504/,ISYM( 759)/O 35/
842 DATA ISYM( 760)/O100400/,ISYM( 761)/O 0/,ISYM( 762)/O 1777/
843 DATA ISYM( 763)/O 0/,ISYM( 764)/O 46517/,ISYM( 765)/O 53105/
844 DATA ISYM( 766)/O 50000/,ISYM( 767)/O 36/,ISYM( 768)/O 400/
845 DATA ISYM( 769)/O 0/,ISYM( 770)/O 1377/,ISYM( 771)/O 1453/
846 DATA ISYM( 772)/O 42102/,ISYM( 773)/O 51101/,ISYM( 774)/O 40/
847 DATA ISYM( 775)/O 50710/,ISYM( 776)/O 0/,ISYM( 777)/O 1377/
848 DATA ISYM( 778)/O 0/,ISYM( 779)/O 42102/,ISYM( 780)/O 52000/
849 DATA ISYM( 781)/O 40/,ISYM( 782)/O 50310/,ISYM( 783)/O 0/
850 DATA ISYM( 784)/O 1377/,ISYM( 785)/O 1552/,ISYM( 786)/O 42102/
851 DATA ISYM( 787)/O 44111/,ISYM( 788)/O 40/,ISYM( 789)/O 51310/
852 DATA ISYM( 790)/O 0/,ISYM( 791)/O 1377/,ISYM( 792)/O 2215/
853 DATA ISYM( 793)/O 42102/,ISYM( 794)/O 46123/,ISYM( 795)/O 40/
854 DATA ISYM( 796)/O 51710/,ISYM( 797)/O 0/,ISYM( 798)/O 1377/
855 DATA ISYM( 799)/O 0/,ISYM( 800)/O 42102/,ISYM( 801)/O 41503/
856 DATA ISYM( 802)/O 40/,ISYM( 803)/O 52310/,ISYM( 804)/O 0/
857 DATA ISYM( 805)/O 1377/,ISYM( 806)/O 1462/,ISYM( 807)/O 42102/
858 DATA ISYM( 808)/O 41523/,ISYM( 809)/O 40/,ISYM( 810)/O 52710/
859 DATA ISYM( 811)/O 0/,ISYM( 812)/O 1377/,ISYM( 813)/O 0/
860 DATA ISYM( 814)/O 42102/,ISYM( 815)/O 47105/,ISYM( 816)/O 40/
861 DATA ISYM( 817)/O 53310/,ISYM( 818)/O 0/,ISYM( 819)/O 1377/
862 DATA ISYM( 820)/O 1516/,ISYM( 821)/O 42102/,ISYM( 822)/O 42521/
863 DATA ISYM( 823)/O 40/,ISYM( 824)/O 53710/,ISYM( 825)/O 0/
864 DATA ISYM( 826)/O 1377/,ISYM( 827)/O 0/,ISYM( 828)/O 42102/
865 DATA ISYM( 829)/O 53103/,ISYM( 830)/O 40/,ISYM( 831)/O 54310/
866 DATA ISYM( 832)/O 0/,ISYM( 833)/O 1377/,ISYM( 834)/O 0/
867 DATA ISYM( 835)/O 42102/,ISYM( 836)/O 53123/,ISYM( 837)/O 40/
868 DATA ISYM( 838)/O 54710/,ISYM( 839)/O 0/,ISYM( 840)/O 1377/
869 DATA ISYM( 841)/O 0/,ISYM( 842)/O 42102/,ISYM( 843)/O 50114/
870 DATA ISYM( 844)/O 40/,ISYM( 845)/O 55310/,ISYM( 846)/O 0/
871 DATA ISYM( 847)/O 1377/,ISYM( 848)/O 0/,ISYM( 849)/O 42102/
872 DATA ISYM( 850)/O 46511/,ISYM( 851)/O 40/,ISYM( 852)/O 55710/
873 DATA ISYM( 853)/O 0/,ISYM( 854)/O 1377/,ISYM( 855)/O 1561/
874 DATA ISYM( 856)/O 42102/,ISYM( 857)/O 43505/,ISYM( 858)/O 40/
875 DATA ISYM( 859)/O 56310/,ISYM( 860)/O 0/,ISYM( 861)/O 1377/
876 DATA ISYM( 862)/O 1577/,ISYM( 863)/O 42102/,ISYM( 864)/O 46124/
877 DATA ISYM( 865)/O 40/,ISYM( 866)/O 56710/,ISYM( 867)/O 0/
878 DATA ISYM( 868)/O 1377/,ISYM( 869)/O 0/,ISYM( 870)/O 42102/
879 DATA ISYM( 871)/O 43524/,ISYM( 872)/O 40/,ISYM( 873)/O 57310/
880 DATA ISYM( 874)/O 0/,ISYM( 875)/O 1377/,ISYM( 876)/O 0/
881 DATA ISYM( 877)/O 42102/,ISYM( 878)/O 46105/,ISYM( 879)/O 40/
882 DATA ISYM( 880)/O 57710/,ISYM( 881)/O 0/,ISYM( 882)/O 1377/
883 DATA ISYM( 883)/O 0/,ISYM( 884)/O 46105/,ISYM( 885)/O 40400/
884 DATA ISYM( 886)/O 42/,ISYM( 887)/O 40700/,ISYM( 888)/O 0/
885 DATA ISYM( 889)/O 1377/,ISYM( 890)/O 0/,ISYM( 891)/O 40523/
886 DATA ISYM( 892)/O 46000/,ISYM( 893)/O 43/,ISYM( 894)/O160400/
887 DATA ISYM( 895)/O 0/,ISYM( 896)/O 1377/,ISYM( 897)/O 0/
888 DATA ISYM( 898)/O 40523/,ISYM( 899)/O 51000/,ISYM( 900)/O 43/
889 DATA ISYM( 901)/O160000/,ISYM( 902)/O 0/,ISYM( 903)/O 1377/
890 DATA ISYM( 904)/O 1660/,ISYM( 905)/O 46123/,ISYM( 906)/O 46000/
891 DATA ISYM( 907)/O 43/,ISYM( 908)/O160410/,ISYM( 909)/O 0/
892 DATA ISYM( 910)/O 1377/,ISYM( 911)/O 2111/,ISYM( 912)/O 46123/
893 DATA ISYM( 913)/O 51000/,ISYM( 914)/O 43/,ISYM( 915)/O160010/
894 DATA ISYM( 916)/O 0/,ISYM( 917)/O 1377/,ISYM( 918)/O 1710/
895 DATA ISYM( 919)/O 41103/,ISYM( 920)/O 44107/,ISYM( 921)/O 44/
896 DATA ISYM( 922)/O 500/,ISYM( 923)/O 0/,ISYM( 924)/O 1377/
897 DATA ISYM( 925)/O 2171/,ISYM( 926)/O 41103/,ISYM( 927)/O 46122/
898 DATA ISYM( 928)/O 44/,ISYM( 929)/O 600/,ISYM( 930)/O 0/
899 DATA ISYM( 931)/O 1377/,ISYM( 932)/O 0/,ISYM( 933)/O 41123/
900 DATA ISYM( 934)/O 42524/,ISYM( 935)/O 44/,ISYM( 936)/O 700/
901 DATA ISYM( 937)/O 0/,ISYM( 938)/O 1377/,ISYM( 939)/O 0/
902 DATA ISYM( 940)/O 41124/,ISYM( 941)/O 51524/,ISYM( 942)/O 44/
903 DATA ISYM( 943)/O 400/,ISYM( 944)/O 0/,ISYM( 945)/O 1777/
904 DATA ISYM( 946)/O 0/,ISYM( 947)/O 41103/,ISYM( 948)/O 44107/
905 DATA ISYM( 949)/O 53400/,ISYM( 950)/O 47/,ISYM( 951)/O 500/
906 DATA ISYM( 952)/O 0/,ISYM( 953)/O 1777/,ISYM( 954)/O 2075/
907 DATA ISYM( 955)/O 41103/,ISYM( 956)/O 46122/,ISYM( 957)/O 53400/
908 DATA ISYM( 958)/O 47/,ISYM( 959)/O 600/,ISYM( 960)/O 0/
909 DATA ISYM( 961)/O 1777/,ISYM( 962)/O 2013/,ISYM( 963)/O 41123/
910 DATA ISYM( 964)/O 42524/,ISYM( 965)/O 53400/,ISYM( 966)/O 47/
911 DATA ISYM( 967)/O 700/,ISYM( 968)/O 0/,ISYM( 969)/O 1777/
912 DATA ISYM( 970)/O 0/,ISYM( 971)/O 41124/,ISYM( 972)/O 51524/
913 DATA ISYM( 973)/O 53400/,ISYM( 974)/O 47/,ISYM( 975)/O 400/
914 DATA ISYM( 976)/O 0/,ISYM( 977)/O 1377/,ISYM( 978)/O 2053/
915 DATA ISYM( 979)/O 46517/,ISYM( 980)/O 53105/,ISYM( 981)/O 45/
916 DATA ISYM( 982)/O 0/,ISYM( 983)/O 0/,ISYM( 984)/O 1777/
917 DATA ISYM( 985)/O 2061/,ISYM( 986)/O 46517/,ISYM( 987)/O 53105/
918 DATA ISYM( 988)/O 40400/,ISYM( 989)/O 45/,ISYM( 990)/O 0/
919 DATA ISYM( 991)/O 0/,ISYM( 992)/O 1777/,ISYM( 993)/O 0/
920 DATA ISYM( 994)/O 46517/,ISYM( 995)/O 53105/,ISYM( 996)/O 50400/
921 DATA ISYM( 997)/O 45/,ISYM( 998)/O 70000/,ISYM( 999)/O 0/
922 DATA ISYM(1000)/O 1377/,ISYM(1001)/O 0/,ISYM(1002)/O 46104/
923 DATA ISYM(1003)/O 46400/,ISYM(1004)/O 46/,ISYM(1005)/O 46000/
924 DATA ISYM(1006)/O 0/,ISYM(1007)/O 1377/,ISYM(1008)/O 2031/
925 DATA ISYM(1009)/O 51524/,ISYM(1010)/O 46400/,ISYM(1011)/O 46/
926 DATA ISYM(1012)/O 44200/,ISYM(1013)/O 0/,ISYM(1014)/O 1777/
927 DATA ISYM(1015)/O 0/,ISYM(1016)/O 46517/,ISYM(1017)/O 53105/
928 DATA ISYM(1018)/O 46400/,ISYM(1019)/O 46/,ISYM(1020)/O 44200/
929 DATA ISYM(1021)/O 0/,ISYM(1022)/O 1377/,ISYM(1023)/O 0/
930 DATA ISYM(1024)/O 51117/,ISYM(1025)/O 46000/,ISYM(1026)/O 43/
931 DATA ISYM(1027)/O160430/,ISYM(1028)/O 0/,ISYM(1029)/O 1377/
932 DATA ISYM(1030)/O 2125/,ISYM(1031)/O 51117/,ISYM(1032)/O 51000/
933 DATA ISYM(1033)/O 43/,ISYM(1034)/O160030/,ISYM(1035)/O 0/
934 DATA ISYM(1036)/O 1377/,ISYM(1037)/O 0/,ISYM(1038)/O 51117/
935 DATA ISYM(1039)/O 54114/,ISYM(1040)/O 43/,ISYM(1041)/O160420/
936 DATA ISYM(1042)/O 0/,ISYM(1043)/O 1377/,ISYM(1044)/O 0/
937 DATA ISYM(1045)/O 51117/,ISYM(1046)/O 54122/,ISYM(1047)/O 43/
938 DATA ISYM(1048)/O160020/,ISYM(1049)/O 0/,ISYM(1050)/O 401/
939 DATA ISYM(1051)/O 2133/,ISYM(1052)/O 42060/,ISYM(1053)/O 2/
940 DATA ISYM(1054)/O 0/,ISYM(1055)/O 0/,ISYM(1056)/O 401/
941 DATA ISYM(1057)/O 2141/,ISYM(1058)/O 42061/,ISYM(1059)/O 2/
942 DATA ISYM(1060)/O 1/,ISYM(1061)/O 0/,ISYM(1062)/O 401/
943 DATA ISYM(1063)/O 2147/,ISYM(1064)/O 42062/,ISYM(1065)/O 2/
944 DATA ISYM(1066)/O 2/,ISYM(1067)/O 0/,ISYM(1068)/O 401/
945 DATA ISYM(1069)/O 2155/,ISYM(1070)/O 42063/,ISYM(1071)/O 2/
946 DATA ISYM(1072)/O 3/,ISYM(1073)/O 0/,ISYM(1074)/O 401/
947 DATA ISYM(1075)/O 2163/,ISYM(1076)/O 42064/,ISYM(1077)/O 2/
948 DATA ISYM(1078)/O 4/,ISYM(1079)/O 0/,ISYM(1080)/O 401/
949 DATA ISYM(1081)/O 0/,ISYM(1082)/O 42065/,ISYM(1083)/O 2/
950 DATA ISYM(1084)/O 5/,ISYM(1085)/O 0/,ISYM(1086)/O 401/
951 DATA ISYM(1087)/O 0/,ISYM(1088)/O 42066/,ISYM(1089)/O 2/
952 DATA ISYM(1090)/O 6/,ISYM(1091)/O 0/,ISYM(1092)/O 401/
953 DATA ISYM(1093)/O 0/,ISYM(1094)/O 42067/,ISYM(1095)/O 2/
954 DATA ISYM(1096)/O 7/,ISYM(1097)/O 0/,ISYM(1098)/O 401/
955 DATA ISYM(1099)/O 0/,ISYM(1100)/O 40460/,ISYM(1101)/O 2/
956 DATA ISYM(1102)/O 10/,ISYM(1103)/O 0/,ISYM(1104)/O 401/
957 DATA ISYM(1105)/O 0/,ISYM(1106)/O 40461/,ISYM(1107)/O 2/
958 DATA ISYM(1108)/O 11/,ISYM(1109)/O 0/,ISYM(1110)/O 401/
959 DATA ISYM(1111)/O 0/,ISYM(1112)/O 40462/,ISYM(1113)/O 2/
960 DATA ISYM(1114)/O 12/,ISYM(1115)/O 0/,ISYM(1116)/O 401/
961 DATA ISYM(1117)/O 0/,ISYM(1118)/O 40463/,ISYM(1119)/O 2/
962 DATA ISYM(1120)/O 13/,ISYM(1121)/O 0/,ISYM(1122)/O 401/
963 DATA ISYM(1123)/O 0/,ISYM(1124)/O 40464/,ISYM(1125)/O 2/
964 DATA ISYM(1126)/O 14/,ISYM(1127)/O 0/,ISYM(1128)/O 401/
965 DATA ISYM(1129)/O 0/,ISYM(1130)/O 40465/,ISYM(1131)/O 2/
966 DATA ISYM(1132)/O 15/,ISYM(1133)/O 0/,ISYM(1134)/O 401/
967 DATA ISYM(1135)/O 0/,ISYM(1136)/O 40466/,ISYM(1137)/O 2/
968 DATA ISYM(1138)/O 16/,ISYM(1139)/O 0/,ISYM(1140)/O 401/
969 DATA ISYM(1141)/O 2177/,ISYM(1142)/O 40467/,ISYM(1143)/O 2/
970 DATA ISYM(1144)/O 17/,ISYM(1145)/O 0/,ISYM(1146)/O 401/
971 DATA ISYM(1147)/O 0/,ISYM(1148)/O 51520/,ISYM(1149)/O 2/
972 DATA ISYM(1150)/O 17/,ISYM(1151)/O 0/,ISYM(1152)/O 1001/
973 DATA ISYM(1153)/O 0/,ISYM(1154)/O 52523/,ISYM(1155)/O 50000/
974 DATA ISYM(1156)/O 2/,ISYM(1157)/O 20/,ISYM(1158)/O 0/
975 DATA ISYM(1159)/O 1001/,ISYM(1160)/O 0/,ISYM(1161)/O 41503/
976 DATA ISYM(1162)/O 51000/,ISYM(1163)/O 2/,ISYM(1164)/O 74/
977 DATA ISYM(1165)/O 0/,ISYM(1166)/O 401/,ISYM(1167)/O 0/
978 DATA ISYM(1168)/O 51522/,ISYM(1169)/O 2/,ISYM(1170)/O 174/
979 DATA ISYM(1171)/O 0/,ISYM(1172)/O 0/,ISYM(1173)/O 0/
980 DATA NET1( 1)/ 29/,NET2( 1)/ 0/,NET3( 1)/ 2/,
981 & NET4( 1)/ 2/,NET5( 1)/ 1/
982 DATA NET1( 2)/ 30/,NET2( 2)/ 0/,NET3( 2)/ 0/,
983 & NET4( 2)/ 3/,NET5( 2)/ 2/
984 DATA NET1( 3)/ 46/,NET2( 3)/ 0/,NET3( 3)/ 5/,
985 & NET4( 3)/ 4/,NET5( 3)/ 0/
986 DATA NET1( 4)/ 24/,NET2( 4)/ 0/,NET3( 4)/ 0/,
987 & NET4( 4)/ 5/,NET5( 4)/ 3/
988 DATA NET1( 5)/ 0/,NET2( 5)/ 8/,NET3( 5)/ 0/,
989 & NET4( 5)/ 6/,NET5( 5)/ 0/
990 DATA NET1( 6)/ 44/,NET2( 6)/ 0/,NET3( 6)/ -1/,
991 & NET4( 6)/ 5/,NET5( 6)/ 4/
992 DATA NET1( 7)/ 0/,NET2( 7)/ 0/,NET3( 7)/ 0/,
993 & NET4( 7)/ 0/,NET5( 7)/ 0/
994 DATA NET1( 8)/ 28/,NET2( 8)/ 0/,NET3( 8)/ 12/,
995 & NET4( 8)/ 9/,NET5( 8)/ 5/
996 DATA NET1( 9)/ 45/,NET2( 9)/ 0/,NET3( 9)/ 11/,
997 & NET4( 9)/ 10/,NET5( 9)/ 0/
998 DATA NET1(10)/ 28/,NET2(10)/ 0/,NET3(10)/ 0/,
999 & NET4(10)/ 11/,NET5(10)/ 15/
1000 DATA NET1(11)/ 47/,NET2(11)/ 0/,NET3(11)/ -1/,
1001 & NET4(11)/ 8/,NET5(11)/ 0/
1002 DATA NET1(12)/ 40/,NET2(12)/ 0/,NET3(12)/ 16/,
1003 & NET4(12)/ 13/,NET5(12)/ 34/
1004 DATA NET1(13)/ 28/,NET2(13)/ 0/,NET3(13)/ 24/,
1005 & NET4(13)/ 14/,NET5(13)/ 6/
1006 DATA NET1(14)/ 41/,NET2(14)/ 0/,NET3(14)/ 0/,
1007 & NET4(14)/ 15/,NET5(14)/ 0/
1008 DATA NET1(15)/ 43/,NET2(15)/ 0/,NET3(15)/ -1/,
1009 & NET4(15)/ -1/,NET5(15)/ 7/
1010 DATA NET1(16)/ 45/,NET2(16)/ 0/,NET3(16)/ 20/,
1011 & NET4(16)/ 17/,NET5(16)/ 24/
1012 DATA NET1(17)/ 40/,NET2(17)/ 0/,NET3(17)/ 23/,
1013 & NET4(17)/ 18/,NET5(17)/ 34/
1014 DATA NET1(18)/ 28/,NET2(18)/ 0/,NET3(18)/ 24/,
1015 & NET4(18)/ 19/,NET5(18)/ 8/
1016 DATA NET1(19)/ 41/,NET2(19)/ 0/,NET3(19)/ 0/,
1017 & NET4(19)/ -1/,NET5(19)/ 0/
1018 DATA NET1(20)/ 35/,NET2(20)/ 0/,NET3(20)/ 22/,
1019 & NET4(20)/ 21/,NET5(20)/ 0/
1020 DATA NET1(21)/ 0/,NET2(21)/ 36/,NET3(21)/ 0/,
1021 & NET4(21)/ -1/,NET5(21)/ 10/
1022 DATA NET1(22)/ 27/,NET2(22)/ 0/,NET3(22)/ 25/,
1023 & NET4(22)/ -1/,NET5(22)/ 16/
1024 DATA NET1(23)/ 0/,NET2(23)/ 40/,NET3(23)/ 0/,
1025 & NET4(23)/ 26/,NET5(23)/ 11/
1026 DATA NET1(24)/ 0/,NET2(24)/ 38/,NET3(24)/ 0/,
1027 & NET4(24)/ 26/,NET5(24)/ 11/
1028 DATA NET1(25)/ 0/,NET2(25)/ 36/,NET3(25)/ 0/,
1029 & NET4(25)/ 26/,NET5(25)/ 11/
1030 DATA NET1(26)/ 40/,NET2(26)/ 0/,NET3(26)/ -1/,
1031 & NET4(26)/ 27/,NET5(26)/ 0/
1032 DATA NET1(27)/ 28/,NET2(27)/ 0/,NET3(27)/ 0/,
1033 & NET4(27)/ 28/,NET5(27)/ 12/
1034 DATA NET1(28)/ 46/,NET2(28)/ 0/,NET3(28)/ 31/,
1035 & NET4(28)/ 29/,NET5(28)/ 0/
1036 DATA NET1(29)/ 24/,NET2(29)/ 0/,NET3(29)/ 0/,
1037 & NET4(29)/ 30/,NET5(29)/ 13/
1038 DATA NET1(30)/ 41/,NET2(30)/ 0/,NET3(30)/ 0/,
1039 & NET4(30)/ -1/,NET5(30)/ 0/
1040 DATA NET1(31)/ 44/,NET2(31)/ 0/,NET3(31)/ 35/,
1041 & NET4(31)/ 32/,NET5(31)/ 0/
1042 DATA NET1(32)/ 28/,NET2(32)/ 0/,NET3(32)/ 0/,
1043 & NET4(32)/ 33/,NET5(32)/ 14/
1044 DATA NET1(33)/ 46/,NET2(33)/ 0/,NET3(33)/ 35/,
1045 & NET4(33)/ 34/,NET5(33)/ 0/
1046 DATA NET1(34)/ 24/,NET2(34)/ 0/,NET3(34)/ 0/,
1047 & NET4(34)/ 35/,NET5(34)/ 13/
1048 DATA NET1(35)/ 41/,NET2(35)/ 0/,NET3(35)/ 0/,
1049 & NET4(35)/ -1/,NET5(35)/ 0/
1050 DATA NET1(36)/ 45/,NET2(36)/ 0/,NET3(36)/ 37/,
1051 & NET4(36)/ 37/,NET5(36)/ 24/
1052 DATA NET1(37)/ 40/,NET2(37)/ 0/,NET3(37)/ 40/,
1053 & NET4(37)/ 38/,NET5(37)/ 34/
1054 DATA NET1(38)/ 0/,NET2(38)/ 36/,NET3(38)/ 0/,
1055 & NET4(38)/ 39/,NET5(38)/ 0/
1056 DATA NET1(39)/ 41/,NET2(39)/ 0/,NET3(39)/ 0/,
1057 & NET4(39)/ 43/,NET5(39)/ 35/
1058 DATA NET1(40)/ 24/,NET2(40)/ 0/,NET3(40)/ 41/,
1059 & NET4(40)/ 43/,NET5(40)/ 17/
1060 DATA NET1(41)/ 25/,NET2(41)/ 0/,NET3(41)/ 42/,
1061 & NET4(41)/ 43/,NET5(41)/ 17/
1062 DATA NET1(42)/ 42/,NET2(42)/ 0/,NET3(42)/ 0/,
1063 & NET4(42)/ 43/,NET5(42)/ 17/
1064 DATA NET1(43)/ 62/,NET2(43)/ 0/,NET3(43)/ 45/,
1065 & NET4(43)/ 44/,NET5(43)/ 25/
1066 DATA NET1(44)/ 62/,NET2(44)/ 0/,NET3(44)/ 0/,
1067 & NET4(44)/ 37/,NET5(44)/ 0/
1068 DATA NET1(45)/ 60/,NET2(45)/ 0/,NET3(45)/ 47/,
1069 & NET4(45)/ 46/,NET5(45)/ 26/
1070 DATA NET1(46)/ 60/,NET2(46)/ 0/,NET3(46)/ 0/,
1071 & NET4(46)/ 37/,NET5(46)/ 0/
1072 DATA NET1(47)/ 38/,NET2(47)/ 0/,NET3(47)/ 48/,
1073 & NET4(47)/ 36/,NET5(47)/ 27/
1074 DATA NET1(48)/ 33/,NET2(48)/ 0/,NET3(48)/ 50/,
1075 & NET4(48)/ 36/,NET5(48)/ 28/
1076 DATA NET1(49)/ 37/,NET2(49)/ 0/,NET3(49)/ 50/,
1077 & NET4(49)/ 36/,NET5(49)/ 29/
1078 DATA NET1(50)/ 42/,NET2(50)/ 0/,NET3(50)/ 51/,
1079 & NET4(50)/ 36/,NET5(50)/ 30/
1080 DATA NET1(51)/ 47/,NET2(51)/ 0/,NET3(51)/ 52/,
1081 & NET4(51)/ 36/,NET5(51)/ 31/
1082 DATA NET1(52)/ 43/,NET2(52)/ 0/,NET3(52)/ 53/,
1083 & NET4(52)/ 36/,NET5(52)/ 32/
1084 DATA NET1(53)/ 45/,NET2(53)/ 0/,NET3(53)/ -1/,
1085 & NET4(53)/ 36/,NET5(53)/ 33/
1086 DATA KASH( 1)/ 0/,KASH( 2)/ 573/,KASH( 3)/ 740/,KASH( 4)/ 139/
1087 DATA KASH( 5)/1013/,KASH( 6)/ 960/,KASH( 7)/ 559/,KASH( 8)/ 16/
1088 DATA KASH( 9)/ 328/,KASH(10)/ 594/,KASH(11)/ 608/,KASH(12)/1042/
1089 DATA KASH(13)/ 797/,KASH(14)/ 147/,KASH(15)/ 384/,KASH(16)/ 0/
1090 DATA KASH(17)/ 0/,KASH(18)/ 0/,KASH(19)/ 601/,KASH(20)/ 314/
1091 DATA KASH(21)/ 916/,KASH(22)/ 300/,KASH(23)/ 279/,KASH(24)/ 24/
1092 DATA KASH(25)/ 335/,KASH(26)/ 52/,KASH(27)/ 31/,KASH(28)/ 356/
1093 DATA KASH(29)/ 202/,KASH(30)/ 38/,KASH(31)/ 110/,KASH(32)/ 503/
1094 DATA KASH(33)/ 691/,KASH(34)/ 251/,KASH(35)/ 391/,KASH(36)/ 923/
1095 DATA KASH(37)/ 9/,KASH(38)/ 531/,KASH(39)/ 209/,KASH(40)/ 293/
1096 DATA KASH(41)/ 168/,KASH(42)/ 60/,KASH(43)/ 643/,KASH(44)/ 118/
1097 DATA KASH(45)/ 90/,KASH(46)/ 155/,KASH(47)/ 216/,KASH(48)/ 286/
1098 DATA KASH(49)/ 0/,KASH(50)/ 265/,KASH(51)/ 1/,KASH(52)/ 510/
1099 DATA KASH(53)/ 67/,KASH(54)/1055/,KASH(55)/ 587/,KASH(56)/ 237/
1100 DATA KASH(57)/ 82/,KASH(58)/ 132/,KASH(59)/ 74/,KASH(60)/ 230/
1101 DATA KASH(61)/ 45/,KASH(62)/ 937/,KASH(63)/ 0/,KASH(64)/ 0/
1102 END
1103 SUBROUTINE ERR(JERNO)
1104 CC NAM: ERR VER: 1.0 DAT: 12/08/78 CMP: ALL
1105 CC
1106 CC SYS: MACS
1107 CC
1108 CC ENT: JERNO > 0 - ERROR NUMBER
1109 CC = 0 - OUTPUT TOTAL # OF ERRORS FOR CURRENT INSTRUCTION
1110 CC = -1 - OUTPUT TOTAL # OF ERRORS FOR PROGRAM
1111 CC
1112 CC RTN: JERNO - N/C
1113 CC
1114 CC FNC: THIS ROUTINE TABLES ERROR #'S FOR EACH SOURCE STATEMENT
1115 CC AND AT THE END OF SCAN OUTPUTS ALL ERRORS FOR IT.
1116 CC IT OUTPUTS TOTAL # ERRORS FOR THE PROGRAM AT THE END.
1117 CC
1118 CC REV: N/A
1119 CC
1120 CCALLS PAGE
1121 C
1122 C*
1123 IMPLICIT INTEGER (A-Z)
1124 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1125 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1126 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1127 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1128 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1129 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1130 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1131 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT
1132 C
1133 DIMENSION NERR(2,10)
1134 DATA KD1LN2/0/
1135 DATA ITOTER/0/,LASK/42/
1136 C*** TABLE THE ERROR FOR THIS SOURCE LINE?
1137 IF(JERNO.LE.0) GO TO 100
1138 IF(JERR.EQ.10) RETURN
1139 JERR=JERR+1
1140 NERR(1,JERR)=JERNO
1141 NERR(2,JERR)=KOLUMN
1142 RETURN
1143 C*** PRINT THE ERRORS IF ANY, 0=NONE, LESS THAN 0= PRINT TOTAL
1144 100 IF(JERNO.LT.0) GO TO 300
1145 IF(JERR.EQ.0) RETURN
1146 C*** PRINT EACH ERROR FOR THIS SOURCE LINE.
1147 DO 200 K=1,JERR
1148 KK=NERR(2,K)
1149 DO 130 J=1,41
1150 130 JBUF(J)=LSP
1151 C*** NAX # CHARS TO PRINT.
1152 IF(KK.GT.41) KK=41
1153 IF(KK.GT.0) JBUF(KK)=LASK
1154 C
1155 C*** IF "NOLIST" PRINT THE SOURCE LINE HERE
1156 C*** KD1LN2= LAST LINE # ENCOUNTERED WITH AN ERROR.
1157 JBUF(51)=KD1LN2
1158 IF(LIST.EQ.1) GO TO 140
1159 IF(KARD1(1).EQ.0) GO TO 140
1160 IF(KD1BCT.GT.41) KD1BCT=41
1161 WRITE(LUOT,9900) KD1LNO,(KARD1(J),J=1,KD1BCT)
1162 CALL PAGE(1)
1163 9900 FORMAT(I4,21X,80A1)
1164 KARD1(1)=0
1165 140 CONTINUE
1166 WRITE(LUOT,9980) NERR(1,K),KD1LN2,(JBUF(J),J=1,KK)
1167 9980 FORMAT('****** ERROR ',I4,'--',I4,41A1)
1168 CALL PAGE(1)
1169 200 CONTINUE
1170 C*** KEEP LINE # OF THIS ERROR.
1171 KD1LN2=KD1LNO
1172 ITOTER=ITOTER+JERR
1173 JERR=0
1174 RETURN
1175 C*** FINAL ERROR COUNT PRINT
1176 300 WRITE(LUOT,9970) ITOTER,KD1LN2
1177 9970 FORMAT(/' ****** TOTAL ERRORS ',I3,'--',I4)
1178 CALL PAGE(2)
1179 C*** IF SOURCE GOES TO FILE, PRINT TOTAL ERRORS AT CONSOLE
1180 IF(LUOT.NE.LULT) WRITE(LULT,9970) ITOTER,KD1LN2
1181 RETURN
1182 END
1183 SUBROUTINE COMDEP
1184 CC NAM: COMDEP VER: 1.0 DAT: 12/08/78 CMP: PDP-11
1185 CC
1186 CC SYS: MACS
1187 CC
1188 CC ENT: N/A
1189 CC
1190 CC RTN: N/A
1191 CC
1192 CC FNC: THIS ROUTINE SETS VARIABLES IN COMMON TO WHAT THE
1193 CC COMPUTER IT IS CURRENTLY RUNNING ON REQUIRES.
1194 CC IT ALSO SETS I/O DEVICE NUMBERS TO 6800 DEVICES.
1195 CC DEVICE NUMBER VARIABLE NAME
1196 CC 2 LUSI - SOURCE INPUT
1197 CC 3 LUOT - ASSEMBLY LISTING(TO A FILE)
1198 CC 6 LUOT - ASSEMBLY LISTING( TO PRINTER)
1199 CC 5 LUOT - ASSEMBLY LISTING( TO CONSOLE)
1200 CC 5 LULT - OUTPUT TO CONSOLE.
1201 CC 5 LUCI - INPUT FROM CONSOLE.
1202 CC 1 LUOO - ASSEMBLED OBJECT OUTPUT.
1203 CC
1204 CC
1205 CC REV: N/A
1206 CC
1207 C*
1208 IMPLICIT INTEGER (A-Z)
1209 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1210 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1211 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1212 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1213 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1214 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1215 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1216 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT
1217 C
1218 C
1219 C
1220 C*** IHB480 CHANGED TO HEX B180 FROM B480
1221 DATA IB480/O130600/,IHX9K/O110000/
1222 C*** IHB480 = $B180 HEX
1223 IHB480 = IB480
1224 C*** IHEX9K = 9000 HEX
1225 IHEX9K=IHX9K
1226 C*** # OF BYTES PER COMPUTER WORD
1227 NBPW=2
1228 C
1229 C*** DEFAULT SOURCE OUTPUT DEVICE NUMBER
1230 C
1231 LUOT=6
1232 C
1233 C*** SOURCE INPUT DEVICE NUMBER
1234 C
1235 LUSI=2
1236 C
1237 C*** CONSOLE INPUT
1238 C
1239 LUCI=5
1240 C
1241 C*** CONSOLE OUTPUT
1242 C
1243 LULT=5
1244 C
1245 C*** OBJECT OUTPUT(S RECORDS) DEVICE #
1246 LUOO=1
1247 C*** POWER OF 2 SHIFT
1248 C*** 'AND' MASK
1249 KCFF=255
1250 C*** LINE COUNT
1251 KD1LNO=0
1252 C*** END OF RECORD POINTER
1253 KD1BCT=0
1254 RETURN
1255 END
1256 SUBROUTINE SOUCIN(I)
1257 CC NAM: SOUCIN VER: 1.0 DAT: 12/08/78 CMP: PDP-11
1258 CC
1259 CC SYS: MC68000 ASM
1260 CC
1261 CC ENT: N/A
1262 CC
1263 CC RTN: I=0=END OF FILE - I=1=END OF FILE NOT FOUND
1264 CC
1265 CC FNC: READ A SOURCE RECORD DEPENDING ON COMPUTER TYPE
1266 CC
1267 CCALLS MPUCVC
1268 C
1269 C*
1270 IMPLICIT INTEGER (A-Z)
1271 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1272 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1273 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1274 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1275 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1276 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1277 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1278 DATA IO377/O377/
1279 9920 FORMAT(100A1)
1280 I=1
1281 GO TO 200
1282 135 I=0
1283 C*** RESET LINE COUNTER AND BUFFER POINTER
1284 KD1BCT=0
1285 KD1LNO=0
1286 RETURN
1287 200 CONTINUE
1288 READ(LUSI,9920,END=135) KARD1
1289 C*** UPDATE LINE COUNT
1290 KD1LNO=KD1LNO+1
1291 C*** REMOVE BLANK FROM UPPER BYTE
1292 DO 300J=1,95
1293 KARD1(J)=MPUAND(KARD1(J),IO377)
1294 300 CONTINUE
1295 C*** SET END OF LINE
1296 KD1BCT=95
1297 KARD1(96)=IEOT
1298 RETURN
1299 END
1300 SUBROUTINE FILEOP(IOP)
1301 CC NAM: FILEOP VER: 1.0 DAT 12/08/78 CMP: PDP-11
1302 CC
1303 CC SYS: MACS
1304 CC
1305 CC ENT: IOP - 1 = OPEN SI FILE
1306 CC - 2 = CLOSE SI FILE
1307 CC - 3 = REWIND SOURCE INPUT FILE FOR SECOND PASS.
1308 CC - 4 = CLOSE OBJ FILE
1309 CC - 5 = OPEN OBJ FILE
1310 CC - 6 = OPEN FILE FOR LIST TO GO TO.
1311 CC
1312 CC RTN: N/C
1313 CC
1314 CC FNC: THIS ROUTINE IS FOR FILE OPERATIONS ON DIFFERENT
1315 CC COMPUTERS, SUCH AS OPENING AND CLOSING FILES ETC.
1316 CC
1317 CC REV: N/A
1318 CC
1319 CCALLS ASSIGN
1320 C
1321 C*
1322 IMPLICIT INTEGER (A-Z)
1323 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1324 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1325 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1326 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1327 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1328 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1329 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1330 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT
1331 DATA LSPP/' '/
1332 GO TO (100,200,300,400,500,600),IOP
1333 9910 FORMAT(100A2)
1334 100 CONTINUE
1335 WRITE(LULT,9900)
1336 9900 FORMAT(' ENTER SI FILENAME')
1337 READ(LUCI,9910) JBUF
1338 C*** INSERT ZERO AS LAST CHAR
1339 DO 150 I=1,10
1340 IF(JBUF(I).NE.LSPP) J=I
1341 150 CONTINUE
1342 JBUF(J+1)=0
1343 CALL ASSIGN(LUSI,JBUF,0)
1344 GO TO 610
1345 200 CONTINUE
1346 CALL CLOSE(LUSI)
1347 RETURN
1348 300 CONTINUE
1349 REWIND LUSI
1350 RETURN
1351 400 CONTINUE
1352 CALL CLOSE(LUOO)
1353 RETURN
1354 500 CONTINUE
1355 WRITE(LULT,9930)
1356 9930 FORMAT(' ENTER OBJ FILENAME')
1357 READ(LUCI,9910) JBUF
1358 C*** INSERT ZERO AS LAST CHAR
1359 DO 550 I=1,10
1360 IF(JBUF(I).NE.LSPP) J=I
1361 550 CONTINUE
1362 JBUF(J+1)=0
1363 CALL ASSIGN(LUOO,JBUF,0)
1364 RETURN
1365 C
1366 C*** OPEN FILE FOR LISTING
1367 C
1368 600 CONTINUE
1369 RETURN
1370 610 CONTINUE
1371 WRITE(LULT,9950)
1372 9950 FORMAT(' ENTER LISTING FILENAME')
1373 READ(LUCI,9910) JBUF
1374 LUOT=3
1375 C*** INSERT ZERO AS LAST CHAR
1376 DO 650 I=1,10
1377 IF(JBUF(I).NE.LSPP) J=I
1378 650 CONTINUE
1379 JBUF(J+1)=0
1380 CALL ASSIGN(LUOT,JBUF,0)
1381 RETURN
1382 END
1383 SUBROUTINE REREAD
1384 CC NAM: REREAD VER: 1.0 DAT: 12/08/78 CMP: ALL
1385 CC
1386 CC SYS: MC68000 ASM
1387 CC
1388 CC ENT: ALL VARIABLES USED ARE IN COMMON
1389 CC
1390 CC RTN: N/A
1391 CC
1392 CC FNC: THIS ROUTINE INCREMENTS THE @NNN NUMBER IN A MACRO.
1393 CC
1394 CC REV: N/A
1395 CC
1396 CCALLS NONE.
1397 C
1398 C*
1399 IMPLICIT INTEGER (A-Z)
1400 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1401 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1402 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1403 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1404 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1405 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1406 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1407 C*** 57 = ASCII 39 = 9
1408 C*** IS THE COUNT > 9?
1409 IF(KARD2(4,1).EQ.57) GO TO 100
1410 KARD2(4,1)=KARD2(4,1)+1
1411 RETURN
1412 100 KARD2(4,1)=48
1413 IF(KARD2(3,1).EQ.57) GO TO 200
1414 KARD2(3,1)=KARD2(3,1)+1
1415 RETURN
1416 200 KARD2(3,1)=48
1417 KARD2(2,1)=KARD2(2,1)+1
1418 RETURN
1419 END
1420 SUBROUTINE DEBUG(II)
1421 C THIS SUBROUTINE IS FOR DEBUGGING ONLY
1422 C IT IS CALLED FROM 'PAGE' AND 'OUTPUT'
1423 C
1424 DATA I1STP/0/
1425 GO TO (10,100),II
1426 10 CONTINUE
1427 I1STP=1
1428 RETURN
1429 100 CONTINUE
1430 IF(I1STP.EQ.1) II=1
1431 RETURN
1432 END
1433 SUBROUTINE PAR
1434 CC NAM: PAR VER: 1.0 DAT: 12/08/78 CMP: ALL
1435 CC PGM: PARSE ROUITNE
1436 CC
1437 CC SYS: MC68000 ASM
1438 CC
1439 CC ENT: N/A
1440 CC RTN: N/A
1441 CC
1442 CC FNC: CHECK THE PARSE NET FOR THE TOKEN TYPE AND WHEN FOUND
1443 CC DOES ITS ACTIONS.
1444 CC
1445 CC REV: N/A
1446 CC
1447 CCALLS SCN-ACT1-ACT2-ERR
1448 CC
1449 CC ERROR NUMBERS CALLED: 203,204,222
1450 CC
1451 C*
1452 IMPLICIT INTEGER (A-Z)
1453 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1454 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1455 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1456 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1457 C TKNTYP DEFINED ALTERNATE SUCCESSOR ACTION
1458 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1459 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1460 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1461 C
1462 DIMENSION JSTACK(20)
1463 C*** SPECIAL ALT,SUC CODE ***
1464 DATA NONE/0/
1465 100 KOLUMN=0
1466 105 CALL SCN
1467 110 JG=1
1468 NPTR=1
1469 LPTR=0
1470 C*** HAVE WE CAME TO END OF FILE?
1471 IF(TKNTYP.EQ.0) RETURN
1472 130 CONTINUE
1473 IF(NET2(JG).EQ.NONE) GO TO 140
1474 C... *** DEFINED LOWER, PUSH ENTRY INTO STACK
1475 JSTACK(NPTR)=JG
1476 NPTR=NPTR+1
1477 IF(NPTR.NE.20) GO TO 135
1478 C... *** ERROR - PARSE NET STACK OVERFLOW
1479 CALL ERR(222)
1480 RETURN
1481 135 CONTINUE
1482 JG=NET2(JG)
1483 GO TO 130
1484 140 CONTINUE
1485 IF(NET1(JG).EQ.TKNTYP) GO TO 170
1486 C--- DEBUG...
1487 C IF(IPASS.EQ.0) WRITE(LUOT,881) JG
1488 881 FORMAT('PAR-TST,JG=',I4)
1489 150 CONTINUE
1490 JG=NET3(JG)
1491 IF(JG) 200,160,130
1492 C*** "NONE" FOUND, GET THE LAST ENTRY ON THE STACK
1493 160 NPTR=NPTR-1
1494 IF(NPTR.NE.0) GO TO 165
1495 C... *** ERROR - SYNTAX ERROR
1496 IF(IPASS.GE.0) CALL ERR(204)
1497 IOPC=0
1498 RETURN
1499 165 JG=JSTACK(NPTR)
1500 GO TO 150
1501 C*** TOKEN TYPE FOUND
1502 170 J5=NET5(JG)
1503 IF(J5.EQ.NONE) GO TO 180
1504 IF(IPASS.GE.0) GO TO 175
1505 CALL ACT1(J5)
1506 GO TO 180
1507 175 CONTINUE
1508 CALL ACT2(J5)
1509 180 IF(KOLUMN.LE.0) GO TO 105
1510 TKNTYP=-1
1511 190 JG=NET4(JG)
1512 IF(JG.LT.0) GO TO 200
1513 IF(TKNTYP.LT.0) CALL SCN
1514 GO TO 130
1515 C*** "EXIT" FOUND
1516 200 NPTR=NPTR-1
1517 IF(NPTR.NE.0) GO TO 210
1518 C... *** ASSURE PROPER TERMINATION OF OPERAND
1519 IF(TKNTYP.EQ.0) RETURN
1520 IF(KARD1(KOLUMN).EQ.LSP) RETURN
1521 IF(IPASS.GE.0) CALL ERR(203)
1522 RETURN
1523 210 JG=JSTACK(NPTR)
1524 J5=NET5(JG)
1525 IF(J5.EQ.NONE) GO TO 190
1526 IF(IPASS.GE.0) GO TO 220
1527 CALL ACT1(J5)
1528 GO TO 190
1529 220 CONTINUE
1530 CALL ACT2(J5)
1531 GO TO 190
1532 END
1533 SUBROUTINE SCN
1534 CC NAM: SCN VER: 1.0 DAT: 12/08/78 CMP: PDP-11
1535 CC
1536 CC SYS: MACS
1537 CC
1538 CC ENT: N/A
1539 CC
1540 CC RTN: N/A
1541 CC
1542 CC FNC: ISSUES READ TO 'SOUCIN' TO GET NEXT SOURCE LINE.
1543 CC BREAKS IT INTO 'TOKENS'. STACKS MACROS INTO ARRAYS
1544 CC 'KARD2' AND 'MFLD' FOR PROCESSING.
1545 CC
1546 CC NOTE: THIS ROUTINE IS 16-BIT MACHINE DEPENDENT DUE TO BIT
1547 CC HANDLING IN 'TKNVA2'. IT HOLDS THE 2 MOST SIGNIFICANT
1548 CC BYTES OF A 32-BIT NUMBER.
1549 CC
1550 CC REV: N/A
1551 CC
1552 CCALLS OUTPUT-MPUGTC-ERR-SOUCIN-LKP-REREAD-MPUPTC-KLAS-ASCBIN
1553 CC
1554 CC ERROR NUMBERS CALLED: 201,202,226
1555 CC
1556 C*
1557 IMPLICIT INTEGER (A-Z)
1558 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1559 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1560 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1561 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1562 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1563 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1564 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1565 C
1566 COMMON /A/LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3)
1567 C
1568 DIMENSION KCTB(140)
1569 EQUIVALENCE (MFLD(11,1),MPTR)
1570 DATA MDEP/0/
1571 C*** MULTIPLE CHARACTER ACTION ARRAY
1572 DATA KCTB/1,2,2,2,2,2,2,2,1,2,
1573 & 0,-1,25,24,27,24,25,-1,-1,-1,
1574 & 1,2,2,2,3,2,2,3,1,1,
1575 & 5,2,4,2,6,2,3,1,1,1,
1576 & 1,6,6,6,1,6,6,6,1,1,
1577 & 1,2,1,1,2,1,1,6,1,1,
1578 & 1,2,1,1,2,1,1,6,1,1,
1579 & 1,2,2,2,2,2,1,6,1,1,
1580 & 1,2,1,1,7,1,1,6,1,1,
1581 & 1,2,1,2,2,2,1,6,1,1,
1582 & 1,2,2,2,2,2,2,6,1,1,
1583 & 1,6,6,6,2,6,6,3,1,1,
1584 & 1,2,6,6,2,6,6,6,1,1,
1585 & 1,1,1,1,2,1,1,6,1,1/
1586 DATA LASK/42/,L0/48/
1587 DATA LBS/92/,LAT/64/,LLB/60/,LRB/62/,LCM/44/,LPD/46/
1588 C
1589 JCC=0
1590 IF(ICOL.NE.-2) ICOL=KOLUMN
1591 IF(KOLUMN.GT.0) GO TO 150
1592 C
1593 C*** READ IN THE NEXT SOURCE RECORD
1594 C
1595 100 CONTINUE
1596 101 CONTINUE
1597 IF(KD1BCT.NE.0) CALL OUTPUT
1598 IF(MPTR.EQ.0) GO TO 130
1599 C
1600 C*** MACRO EXPANSION
1601 N1=1
1602 C*** BLANK BUFFER TO REMOVE LAST INSTRCUTION
1603 KD1BCT=1
1604 DO 50 I=1,95
1605 50 KARD1(I)=LSP
1606 102 CONTINUE
1607 CALL MPUGTC(KK,ISYM(MPTR),N1)
1608 IF(KK.GT.1) GO TO 107
1609 IF(KK.EQ.0) GO TO 1020
1610 C*** MEXIT, ARE WE IN IFXX-ENDC?
1611 IF(ICOL.GE.0) GO TO 1020
1612 MPTR=MPTR+1
1613 GO TO 102
1614 C... *** END OF MACRO
1615 1020 MPTR=0
1616 MDEP=MDEP-1
1617 IF(MDEP.EQ.0) GO TO 130
1618 DO 103 J=1,11
1619 MFLD(J,1)=MFLD(J,2)
1620 103 MFLD(J,2)=MFLD(J,3)
1621 DO 104 J=1,80
1622 KARD2(J,1)=KARD2(J,2)
1623 104 KARD2(J,2)=KARD2(J,3)
1624 GO TO 102
1625 107 N1=N1+1
1626 IF(KK.EQ.LBS) GO TO 108
1627 KARD1(KD1BCT)=KK
1628 KD1BCT=KD1BCT+1
1629 IF(KK.NE.IEOT) GO TO 102
1630 C... *** END OF CARD
1631 MPTR=MPTR + (N1 + NBPW - 2) / NBPW
1632 KD1BCT=KD1BCT - 2
1633 GO TO 140
1634 C... *** INSERT ACTUAL PARAMETER
1635 108 CONTINUE
1636 CALL MPUGTC(KK,ISYM(MPTR),N1)
1637 N1=N1+1
1638 IF(KK.NE.LAT) GO TO 110
1639 C... *** USE GENERATED LABEL
1640 N=1
1641 GO TO 116
1642 110 KK=KK-L0
1643 IF(KK.LT.0) GO TO 112
1644 IF(KK.LE.9) GO TO 114
1645 C... *** ERROR - ILLEGAL MACRO PARAMETER
1646 112 CALL ERR(224)
1647 GO TO 102
1648 114 N=MFLD(KK+1,1)
1649 IF(N.NE.0) GO TO 116
1650 IF(KK.NE.0) GO TO 102
1651 IF(KARD1(KD1BCT-1).NE.LPD) GO TO 102
1652 KD1BCT=KD1BCT-1
1653 GO TO 102
1654 116 KK=KARD2(N,1)
1655 N=N+1
1656 IF(KK.EQ.0) GO TO 102
1657 KARD1(KD1BCT)=KK
1658 KD1BCT=KD1BCT+1
1659 GO TO 116
1660 C
1661 130 CALL SOUCIN(I)
1662 C*** I = 0 = EOF
1663 IF(I.EQ.0) GO TO 295
1664 C... *** COMMENT CARD?
1665 IF(KARD1(1).NE.LASK) GO TO 140
1666 135 IOPC=0
1667 CALL OUTPUT
1668 GO TO 130
1669 C
1670 C*** INITIALIZE FOR A NEW CARD
1671 140 KOLUMN=1
1672 C+++ 16-BIT - TKNVA2 = 1ST 2 BYTES IF MORE THAN 2 IN CONSTANT
1673 TKNVA2=0
1674 FLDN=0
1675 DO 145 I=2,5
1676 145 INS(I)=0
1677 JCC=-1
1678 ITOKEN(69)=0
1679 C*** SETUP THE 1ST CHAR OF THE TOKEN
1680 150 TKNSIZ=0
1681 JC=KARD1(KOLUMN)
1682 IF(JC.NE.LSP) GO TO 170
1683 C... *** BLANK DELIMITER(S)
1684 FLDN=FLDN+1
1685 C@@@ CHECK FOR END OF OPERAND FIELD
1686 IF(FLDN.EQ.3) GO TO 295
1687 160 KOLUMN=KOLUMN+1
1688 JC=KARD1(KOLUMN)
1689 IF(JC.EQ.LSP) GO TO 160
1690 C*** IS THIS A NULL LINE? IF SO GO PRINT IT.
1691 IF(JCC.EQ.-1.AND.JC.EQ.4.AND.FLDN.EQ.1) GO TO 135
1692 C*** GET CHAR CLASS
1693 170 JCC=KLAS(JC)
1694 C*** SET THE TOKEN'S TYPE
1695 TKNTYP=KCTB(JCC+10)
1696 IF(TKNTYP.LT.0) TKNTYP=JC
1697 180 J=KCTB(JCC)
1698 GO TO (270,190),J
1699 C*** 1ST CHAR OF A MULTIPLE CHARACTER TOKEN
1700 190 J=KCTB(JCC+20)
1701 GO TO (220,250,200,260,270,280),J
1702 C*** DISCARD CHARACTER AND CONTINUE
1703 200 KOLUMN=KOLUMN+1
1704 C*** CHARACTER ACTION FOR NEXT CHARACTER OF MULTI-CHAR TOKEN
1705 JC=KARD1(KOLUMN)
1706 JCX=KLAS(JC)*10+30+JCC
1707 J=KCTB(JCX)
1708 GO TO (220,250,200,260,270,280,230),J
1709 C*** CHARACTER ACTION ROUTINE.
1710 C*** ERROR '201' ILLEGAL CHARACTER SCANNED
1711 220 IF(IPASS.GE.0) CALL ERR(201)
1712 GO TO 295
1713 C*** ' SCANNED, INCLUDE IT IF THERE ARE 2
1714 230 IF(JC.NE.KARD1(KOLUMN+1)) GO TO 270
1715 C*** SKIP THE NEXT CHAR IN THE RECORD (^ OR ')
1716 KOLUMN=KOLUMN+1
1717 C*** ADD CHARACTER TO TOKEN AND CONTINUE.
1718 250 TKNSIZ=TKNSIZ+1
1719 IF(TKNSIZ.LE.68) GO TO 255
1720 C... *** ERROR '202' TOKEN OVERFLOW (OVER 70 CHARACTERS LONG)
1721 IF(IPASS.GE.0) CALL ERR(202)
1722 GO TO 295
1723 255 ITOKEN(TKNSIZ)=JC
1724 GO TO 200
1725 C*** ADD CHARACTERS TO TOKEN AND STOP.
1726 260 TKNSIZ=TKNSIZ+1
1727 ITOKEN(TKNSIZ)=JC
1728 C*** DISCARD CHARACTER AND STOP
1729 270 KOLUMN=KOLUMN+1
1730 C*** LEAVE CHARACTER IN STRING AND STOP
1731 280 CONTINUE
1732 C*** LAST CHARACTER OF A TOKEN, DO ITS ACTION
1733 290 J=KCTB(JCC+30)
1734 GO TO (900,300,700,800,295,600),J
1735 C*** END OF CARD RETURN
1736 295 TKNTYP=0
1737 RETURN
1738 C
1739 C*** TOKEN ACTION ROUTINES
1740 C
1741 C*** VARIABLE NAME FOUND ***
1742 C... *** STATEMENT LABEL?
1743 300 IF(KARD1(KOLUMN).NE.58) GO TO 305
1744 C*** LABEL:
1745 KOLUMN=KOLUMN + 1
1746 FLDN=0
1747 305 IF(FLDN.NE.0) GO TO 310
1748 C... *** INSIDE A MACRO DEFINITION?
1749 IF(ICOL.LT.0) GO TO 150
1750 TKNTYP=29
1751 GO TO 900
1752 C... *** OPCODE FIELD?
1753 310 IF(FLDN.NE.1) GO TO 390
1754 C... *** OPCODE FIELD - LOOKUP THE OPCODE ***
1755 CALL LKP(-1,JSUC,JPTR)
1756 IF(JSUC.GT.0) GO TO 320
1757 C... *** UNDEFINED OP CODE
1758 IF(ICOL.EQ.-2) GO TO 100
1759 GO TO 900
1760 320 IOPC=ISYM(JPTR)
1761 INS(1)=ISYM(JPTR+1)
1762 C... *** LOOKING FOR ENDC?
1763 IF(ICOL.NE.-2) GO TO 330
1764 INSL=0
1765 IF(IOPC.EQ.18) NEST=NEST+1
1766 IF(IOPC.NE.1) GO TO 100
1767 IF(INS(1).NE.2) GO TO 100
1768 NEST=NEST-1
1769 IF(NEST.GE.0) GO TO 100
1770 ICOL=0
1771 NEST=0
1772 GO TO 100
1773 330 TKNTYP=30
1774 C... *** TEST FOR MACRO CALL
1775 IF(IOPC.NE.0) GO TO 900
1776 C... *** INSIDE A MACRO DEFINITION?
1777 IF(ICOL.LT.0) GO TO 900
1778 C
1779 C... *** MACRO CALL *** - ASSURE NOT TOO DEEP
1780 IF(MDEP.EQ.0) GO TO 351
1781 IF(MDEP.NE.3) GO TO 340
1782 C... *** ERROR - NESTED TOO DEEP
1783 CALL ERR(226)
1784 GO TO 900
1785 340 DO 342 J=1,11
1786 MFLD(J,3)=MFLD(J,2)
1787 342 MFLD(J,2)=MFLD(J,1)
1788 DO 344 J=1,80
1789 KARD2(J,3)=KARD2(J,2)
1790 344 KARD2(J,2)=KARD2(J,1)
1791 351 MDEP=MDEP+1
1792 IP=0
1793 MPTR=JPTR+1
1794 C... *** INCREASE THE GENERATED MACRO NUMBER
1795 MNUM=MNUM+1
1796 CALL REREAD
1797 C*** INITIALIZE THE FIELD POINTERS
1798 DO 352 NF=1,10
1799 352 MFLD(NF,1)=0
1800 N2=6
1801 NF=1
1802 C... *** LOOK FOR OPCODE.SIZE
1803 IF(KARD1(KOLUMN).NE.LPD) GO TO 354
1804 MFLD(1,1)=N2
1805 KOLUMN=KOLUMN+1
1806 353 KK=KARD1(KOLUMN)
1807 KOLUMN=KOLUMN+1
1808 IF(KK.EQ.LSP) KK=0
1809 KARD2(N2,1)=KK
1810 N2=N2+1
1811 IF(KK.EQ.IEOT) GO TO 380
1812 IF(KK.NE.0) GO TO 353
1813 C... *** SKIP TO THE START OF THE OPERAND FIELD
1814 354 DO 355 KOLUMN=KOLUMN,KD1BCT
1815 IF(KARD1(KOLUMN).NE.LSP) GO TO 358
1816 355 CONTINUE
1817 RETURN
1818 C*** MOVE THE OPERAND TO KARD2 AND LOOK FOR COMMAS
1819 358 NF=NF+1
1820 IF(NF.EQ.11) GO TO 101
1821 MFLD(NF,1)=N2
1822 360 KK=KARD1(KOLUMN)
1823 KOLUMN=KOLUMN+1
1824 IF(IP.EQ.0) GO TO 365
1825 IF(KK.NE.LRB) GO TO 370
1826 IP=IP-1
1827 GO TO 360
1828 C... ** IP EQ 0
1829 365 IF(KK.EQ.LSP) KK=IEOT
1830 IF(KK.EQ.LCM) KK=0
1831 IF(KK.NE.LLB) GO TO 370
1832 IP=IP+1
1833 GO TO 360
1834 C... ** NOT < OR >
1835 370 KARD2(N2,1)=KK
1836 N2=N2+1
1837 IF(KK.EQ.0) GO TO 358
1838 IF(KK.NE.4) GO TO 360
1839 C... *** END OF CARD
1840 380 KARD2(N2-1,1)=0
1841 GO TO 101
1842 C
1843 C... *** REGISTER NAME?
1844 390 CALL LKP(1,JSUC,JPTR)
1845 IF(JSUC.LE.0) GO TO 900
1846 IF(ISYM(JPTR).NE.2) GO TO 900
1847 TKNTYP=28
1848 GO TO 900
1849 C
1850 C*** CONSECUTIVE ', PUT IN A BLANK
1851 600 IF(TKNSIZ.GT.0) GO TO 605
1852 TKNSIZ=1
1853 ITOKEN(1)=32
1854 605 CONTINUE
1855 IF(IOPC.EQ.4) GO TO 625
1856 J=2
1857 IF(IPASS.EQ.0) J=64
1858 I=ISIZ
1859 C... *** LEAVE AS A STRING FOR DC.B
1860 IF(IOPC.NE.5) GO TO 610
1861 C... *** DC - LEAVE AS STRING IF DC.B
1862 IF(TKNSIZ.EQ.1) GO TO 610
1863 IF(ISIZ.LE.1) RETURN
1864 610 CONTINUE
1865 IF(I.EQ.0.AND.TKNSIZ.NE.1) I=J
1866 IF(I.EQ.J.AND.TKNSIZ.GT.2) I=I+J
1867 TKNVAL=0
1868 NB=5-I/J*2
1869 IF(NB.EQ.5) NB=4
1870 C*** IF MORE THAN 4 CHARACTERS USE ONLY 4.
1871 IF(TKNSIZ.LT.5) GO TO 615
1872 TKNSIZ=4
1873 CALL ERR(210)
1874 615 CONTINUE
1875 DO 620 J=1,TKNSIZ
1876 CALL MPUPTC(ITOKEN(J),TKNVAL,NB)
1877 620 NB=NB+1
1878 TKNTYP=25
1879 C*** TKNVAL & TKNVA2 ARE REVERSED IN MEMORY HERE AS COMPARED TO 6800
1880 C*** REVERSE THEM.
1881 J=TKNVAL
1882 TKNVAL=TKNVA2
1883 TKNVA2=J
1884 GO TO 900
1885 625 IADM(1,1)= -1
1886 RETURN
1887 C*** BINARY CONVERSION FROM CHARACTER STRING
1888 700 CONTINUE
1889 TKNVAL=0
1890 C*** SET 2 MSB ALSO
1891 TKNVA2=0
1892 CALL ASCBIN
1893 GO TO 900
1894 C
1895 C*** HEXADECIMAL CONVERSION FROM CHARACTER STRING
1896 800 TKNVAL=0
1897 DO 850 J=2,TKNSIZ
1898 JC=ITOKEN(J)
1899 I=JC-L0
1900 IF (I.GT.9) I=I-7
1901 C+++ 16-BIT - PUT MORE THAN 2 BYTES IN TKNVA2
1902 IF(J.LT.6) GO TO 840
1903 TKNVA2=ISHFT(TKNVA2,4)
1904 TKNVA2=TKNVA2 + ISHFT(TKNVAL,-12)
1905 840 CONTINUE
1906 TKNVAL=ISHFT(TKNVAL,4) + I
1907 C
1908 C*** EXIT FROM THE SCAN SUBROUTINE...
1909 850 CONTINUE
1910 900 CONTINUE
1911 RETURN
1912 END
1913 FUNCTION KLAS(KL)
1914 CC NAM: KLAS VER: 1.0 DAT: 12/08/78 CMP: ALL
1915 CC
1916 CC SYS: MACS
1917 CC
1918 CC ENT: KL - CHARACTER FROM INPUT BUFFER 'KARD1'.
1919 CC
1920 CC RTN: KL - N/C
1921 CC KLAS - SET TO CLASS
1922 CC
1923 CC FNC: DETERMINE THE CLASS OF A CHARACTER FROM THE INPUT
1924 CC BUFFER AND RETURN IT.
1925 CC
1926 CC REV: N/A
1927 C*
1928 IMPLICIT INTEGER (A-Z)
1929 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1930 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1931 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1932 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1933 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1934 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1935 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1936 C*** CHARACTER SET BASE OFFSET
1937 DATA JCOFS/31/
1938 JL=KL-JCOFS
1939 C*** 00-1F ARE EOT'S
1940 IF(JL.GT.0) GO TO 925
1941 KLAS=1
1942 RETURN
1943 C*** SPECIAL CHARACTERS
1944 925 IF(JL.LE.64) GO TO 950
1945 KLAS=9
1946 RETURN
1947 950 KLAS=KCLAS(JL)
1948 RETURN
1949 END
1950 SUBROUTINE LKP(NTYP,NSUC,NPTR)
1951 CC NAM: LKP VER: 1.0 DAT: 12/08/78 CMP: ALL
1952 CC
1953 CC SYS: MC68000 ASM
1954 CC
1955 CC ENT: NTYP - TOKEN TYPE (-1, 0 OR 1 SEE STF)
1956 CC NSUC - N/A
1957 CC NPTR - N/A
1958 CC
1959 CC RTN: NTYP - N/C
1960 CC NSUC - -1=> NO ENTRY IN THE HASH TABLE
1961 CC - 0=> ENTRY IN HASH, BUT NO SYMBOL IN THE TABLE
1962 CC - >0=> ENTRY FOUND, INDEX TO SYMBOL ENTRY IN SYM
1963 CC NPTR - NSUC= -1=> INDEX TO HASH TABLE
1964 CC - NSUC= 0=> POINTER TO THE PREVIOUS LINK IN SYM
1965 CC - NSUC= >0=> INDEX TO THE DATA ENTRY OF THE SYMBOL
1966 CC
1967 CC FNC: PACK THE TOKEN INTO COMPUTER WORDS AND SEARCH THE HASH
1968 CC AND SYMBOL TABLE FOR THE SYMBOL.
1969 CC
1970 CC REV: N/A
1971 CC
1972 CCALLS MPUPTC-MPUAND
1973 CC
1974 C*
1975 IMPLICIT INTEGER (A-Z)
1976 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
1977 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
1978 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
1979 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
1980 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
1981 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
1982 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
1983 C
1984 EQUIVALENCE(ITOKEN(70),ITYP1)
1985 C*** TKNSIZ//(NUMBER BYTES PER WORD ***
1986 KPWCT=(TKNSIZ+NBPW-1) / NBPW
1987 KPAC(KPWCT)=0
1988 NTYP1=MPUAND(NTYP,255)+ISHFT(KPWCT,8)
1989 NPTR=0
1990 NSUC=-1
1991 DO 100 J=1,TKNSIZ
1992 NPTR=NPTR+ITOKEN(J)
1993 J1=J
1994 100 CALL MPUPTC(ITOKEN(J),KPAC,J1)
1995 NPTR=MPUAND(NPTR,63)+1
1996 JP=KASH(NPTR)
1997 110 IF(JP.EQ.0) RETURN
1998 IF(ISYM(JP+1).EQ.NTYP1) GO TO 130
1999 120 NSUC=0
2000 NPTR=JP
2001 JP=ISYM(JP+2)
2002 GO TO 110
2003 130 JPP = JP + 2
2004 DO 140 J=1,KPWCT
2005 JPP=JPP + 1
2006 IF(ISYM(JPP).NE.KPAC(J)) GO TO 120
2007 140 CONTINUE
2008 NSUC=JP
2009 NPTR=JP+KPWCT+3
2010 RETURN
2011 END
2012 SUBROUTINE STF(KSUC,KPTR,KSIZ,KTYP)
2013 CC NAM: STF VER: 1.0 DAT: 12/08/78 CMP: ALL
2014 CC
2015 CC SYS: MC68000 ASM
2016 CC
2017 CC ENT: KSUC - -1=> NO ENTRY IN HASH TABLE
2018 CC - 0=> ENTRY IN HASH, BUT CANNOT FIND THE SYMBOL
2019 CC - >0=> SYMBOL FOUND, INDEX TO THE SYMBOL ENTRY
2020 CC KPTR - KSUC= -1=> INDEX TO THE HASH TABLE
2021 CC - KSUC= 0=> POINTER TO THE PREVIOUS LINK
2022 CC - KSUC= >0=> INDEX TO THE DATA ENTRY OF THE SYMBOL
2023 CC KSIZ - REQUIRED SIZE OF THE DATA ENTRY
2024 CC KTYP - -1=> DICTIONARY SYMBOL
2025 CC - 0=> CONSTANT SYMBOL
2026 CC - 1=> VARIABLE SYMBOL
2027 CC
2028 CC RTN: KSUC - INDEX TO THE SYMBOL ENTRY
2029 CC KPTR - INDEX TO THE SYMBOL'S DATA ENTRY
2030 CC KSIZ - N/CC
2031 CC KTYP - N/CC
2032 CC
2033 CC FNC: STORE THE SYMBOL IN 'KPAC' INTO THE SYMBOL TABLE.
2034 CC
2035 CC REV: N/A
2036 CC
2037 CCALLS ERR
2038 CC
2039 CC ERROR NUMBERS CALLED: 221
2040 C*
2041 IMPLICIT INTEGER (A-Z)
2042 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
2043 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
2044 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
2045 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
2046 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
2047 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
2048 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
2049 C
2050 EQUIVALENCE(ITOKEN(70),KTYP1)
2051 K = 0
2052 IF (KSUC .LE. 0) K = KPWCT + 3
2053 260 IF (KSUC) 200,210,250
2054 200 KASH(KPTR)=NXSYM
2055 GO TO 220
2056 210 ISYM(KPTR+2)=NXSYM
2057 220 ISYM(NXSYM)=0
2058 ISYM(NXSYM+1)=MPUAND(KTYP,255)+ISHFT(KPWCT,8)
2059 ISYM(NXSYM+2)=0
2060 JCX = NXSYM + 2
2061 DO 230 J=1,KPWCT
2062 JCX= JCX + 1
2063 230 ISYM(JCX)=KPAC(J)
2064 KSUC=NXSYM
2065 IF (NXSYM + K + KSIZ - 1 .LE. LENSYM) GO TO 250
2066 CALL ERR(221)
2067 C*** SET POINTERS TO USE SCRATCH AREA
2068 KPTR=NXSYM+K
2069 RETURN
2070 250 KPTR=NXSYM+ K
2071 NXSYM=KPTR+KSIZ
2072 RETURN
2073 END
2074 SUBROUTINE ACT1(KMD)
2075 CC NAM: ACT1 VER: 1.0 DAT: 12/08/78 CMP: 16-BIT
2076 CC
2077 CC SYS: MACS
2078 CC
2079 CC ENT: KMD - EQUALS ACTION TO BE TAKEN UPON ENTRY AS DETERMINED
2080 CC FROM PARSE TABLE.
2081 CC
2082 CC RTN: KMD - N/C
2083 CC
2084 CC FNC: P A S S O N E A C T I O N S
2085 CC ------------------------------
2086 CC PERFORM THE ACTIONS FOR THE DIFFERENT "TOKENS"
2087 CC ENCOUNTERED DURING THE STATEMENT SCAN.
2088 CC IT SETS ADDRESS MODE IN 'IADM' TABLE, ENTERS EXPRESSION
2089 CC IN EXPRESSION TABLE, ENTERS NEW SYMBOL IN SYMBOL TABLE.
2090 CC ---------------------------------------------
2091 CC THIS SUBROUTINE IS A MODIFICATION OF "ACT2"
2092 CC THERE MUST NOT BE ANY DIFFERENCE BETWEEN ACT1
2093 CC AND ACT2 THAT COULD AFFECT THE ASSUMED SIZE OF
2094 CC THE INSTRUCTIONS.
2095 CC ----------------------------------------------
2096 CC
2097 CC THIS ROUTINE IS 16-BIT DEPENDENT DUE TO THE CHECK ON
2098 CC 'TKNVA2' FOR THE 2 MOST SIGNIFICANT BYTES OF A 32-BIT #.
2099 CC INTEGER CONSTANT 192=$C0, 128=$80($=HEX).
2100 CC NOTE ALSO INTEGER CONSTANTS 192 & 64 ARE SPECIAL HEX
2101 CC VALUES $C0 AND $40.
2102 CC
2103 CC REV: N/A
2104 CC
2105 CC ERROR NUMBERS CALLED: 221,225
2106 CC
2107 CCALLS ERR-LKP-STF-SCN-MPUPTC-BUILD1-EXP
2108 CC
2109 C*
2110 IMPLICIT INTEGER (A-Z)
2111 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
2112 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
2113 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
2114 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
2115 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
2116 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
2117 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
2118 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
2119 COMMON /A/ NXSYM1
2120 DIMENSION NSZ(40),MREL(40)
2121 EQUIVALENCE (IADM(4,1),SYMTYP),(IADM(5,1),LFRF)
2122 DATA LB/66/,LW/87/,LL/76/,LAP/39/
2123 DATA LS/83/
2124 DATA Z8000/O100000/
2125 C*** OPCODE SIZES 01 02 03 04 05 06 07 08 09 10
2126 C*** 01-10
2127 DATA NSZ/ 0, 2, 0,-1,-1, 2, 2, 2,-1,-1,
2128 & -1,-1,-1,-1, 2,-1,-1,-1, 0,-1,
2129 & -1,-1,-1,-1, 2,-1, 2, 2, 2,-1,
2130 & 0, 2, 2,-1,-1,-1,-1,-1,-1, 0/
2131 C
2132 C*** USE PC REL? 01 02 03 04 05 06 07 08 09 10
2133 C*** 01-10
2134 DATA MREL/ 0, 0, 0, 0,-1, 0, 0, 0, 1, 1,
2135 & 1, 1,-1, 1, 1, 1, 1, 0, 0, 1,
2136 & 1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
2137 & 0,-1, 0, 1, 0, 1, 1, 1, 1, 0/
2138 GO TO(100,200,300,400,500,600,700,800,800,
2139 & 1000,1100,1200,1300,1400,1500,1600,1700),KMD
2140 C*** EXPRESSION ACTION
2141 CALL EXP(KMD)
2142 RETURN
2143 C
2144 C*** STATEMENT LABEL
2145 C
2146 100 CALL LKP(1,LSUC,LPTR)
2147 C*** SAVE AS FLAG FOR FINDING MULT DEF MACRO
2148 N1=0
2149 IF(LSUC.LE.0) GO TO 105
2150 IF(ISYM(LPTR).EQ.0) GO TO 110
2151 C*** ERROR - MULTIPLE DEFINED SYMBOL
2152 ISYM(LPTR)=IADM(7,1) + 192
2153 GO TO 120
2154 C*** CHECK FOR SYMBOL ALREADY USED AS MACRO OR LABEL.
2155 105 CALL LKP(-1,N1,N2)
2156 CALL STF(LSUC,LPTR,2,1)
2157 C*** *** FORWARD REFERENCE
2158 110 ISYM(LPTR)=IADM(7,1) + 64
2159 ISYM(LPTR+1)=IPC
2160 C+++ 16-BIT - PUT M.S.B. OF P-COUNT IN SYM TABLE.
2161 ISYM(LSUC)=IPC2
2162 C*** SAVE FOR BUILD1
2163 120 ITOKEN(69)=LSUC
2164 RETURN
2165 C
2166 C*** OPCODE
2167 C
2168 200 KSYS=1
2169 IF(JSUC.GT.0) GO TO 210
2170 C*** ERROR - UNDEFINED OP-CODE
2171 KOLUMN=0
2172 RETURN
2173 C*** *** MACRO DEFINITION?
2174 210 IF(IOPC.GE.0) GO TO 260
2175 IQ=0
2176 C*** ASSURE OPCODE IS MACRO
2177 IF(INS(1).NE.0) CALL ERR(225)
2178 C*** IS SYMBOL ALREADY DEF?
2179 IF(ISYM(LPTR).EQ.192) GO TO 250
2180 C*** CHECK FOR MULT DEF MACRO
2181 IF(N1.LT.NXSYM1) GO TO 220
2182 C*** SET MULT DEF FLAG
2183 ISYM(LPTR)=192
2184 GO TO 230
2185 220 CONTINUE
2186 C*** TABLE THE MACRO DEFINITION
2187 ISYM(LPTR)=0
2188 C*** MAKE FIRST WORD NON-ZERO FOR SYM TABLE ROUTINE 'PRSYM'
2189 225 ISYM(LSUC)=1
2190 C*** MAKE TYPE 255 & KEEP # OF WORDS IN NAME
2191 ISYM(LSUC+1)=ISYM(LSUC+1)+254
2192 C*** *** CALL FOR OPCODE FIELD
2193 230 KOLUMN=-1
2194 CALL SCN
2195 C*** *** FIND # FIELDS AND CHECK FOR ENDM
2196 NF=3
2197 IF(TKNTYP.NE.30) GO TO 234
2198 IF(IOPC.GT.0) GO TO 232
2199 IF(IOPC.EQ.0) GO TO 234
2200 IF(INS(1).EQ.0) CALL ERR(225)
2201 IF(INS(1).NE.1) GO TO 231
2202 C*** ENDM
2203 ISYM(LPTR+1)=0
2204 KOLUMN=0
2205 RETURN
2206 C
2207 C*** MEXIT
2208 231 LPTR=LPTR+1
2209 CALL MPUPTC(1,ISYM(LPTR),1)
2210 GO TO 230
2211 232 IF(IOPC.LT.4) NF=2
2212 C*** *** PACK THE CARD INTO SYM
2213 234 N1=1
2214 N2=1
2215 236 KK=KARD1(N1)
2216 N1=N1+1
2217 238 CALL MPUPTC(KK,ISYM(LPTR+1),N2)
2218 N2=N2+1
2219 IF(KK.NE.LAP) GO TO 240
2220 C*** *** QUOTE FOUND
2221 IQ=IQ+1
2222 IF(IQ.EQ.2) IQ=0
2223 240 IF(IQ.NE.0) GO TO 244
2224 IF(KK.NE.LSP) GO TO 244
2225 NF=NF-1
2226 IF(NF.NE.0) GO TO 242
2227 KK=4
2228 GO TO 238
2229 242 KK=KARD1(N1)
2230 IF(KK.NE.LSP) GO TO 244
2231 N1=N1+1
2232 GO TO 242
2233 244 IF(KK.NE.4) GO TO 236
2234 C*** *** END OF CARD
2235 NW=(N2 + NBPW -2) / NBPW
2236 LPTR=LPTR+NW
2237 NXSYM=NXSYM+NW
2238 IF(NXSYM.LE.LENSYM-100) GO TO 230
2239 C*** *** SYMBOL TABLE OVERFLOW
2240 CALL ERR(221)
2241 RETURN
2242 C*** MULT DEF MACRO AND LABEL-FLUSH OUT MACRO AND LEAVE SYBOL
2243 C*** TABLE DEFINED AS LABEL INSTEAD OF MACRO
2244 250 CONTINUE
2245 KOLUMN= -1
2246 CALL SCN
2247 IF(INS(1).NE.1) GO TO 250
2248 KOLUMN=0
2249 RETURN
2250 C*** LOOKUP TENTATIVE INST. LENGTH
2251 260 IF(IOPC.LE.0) RETURN
2252 INSL=NSZ(IOPC)
2253 ISIZ=2
2254 IADM(5,2)=0
2255 LFRF=0
2256 IADM(1,1)=0
2257 IF(INSL.GE.0) GO TO 265
2258 C*** *** VARIABLE SIZE
2259 CALL EXP(21)
2260 RETURN
2261 C*** *** FIXED SIZE
2262 265 KOLUMN=0
2263 RETURN
2264 C
2265 C*** DATA SIZE
2266 C
2267 300 IF(ITOKEN(1).EQ.LB) ISIZ=0
2268 IF(ITOKEN(1).EQ.LL) ISIZ=4
2269 IF(ITOKEN(1).EQ.LS) ISIZ=0
2270 RETURN
2271 C
2272 C*** COMMA STARTING FIELD-2 OPERAND ***
2273 C
2274 C
2275 400 CALL EXP(21)
2276 IF(IOPC.NE.4) GO TO 410
2277 C*** DC - FORCE DATA OUT
2278 CALL BUILD1
2279 RETURN
2280 410 IF(IOPC.GE.19) GO TO 420
2281 C*** *** OPCODE REQUIRES ONLY ONE OPERAND
2282 KOLUMN=0
2283 RETURN
2284 420 IF(KSYS.EQ.2) KOLUMN=0
2285 KSYS=2
2286 TKNVA2=0
2287 RETURN
2288 C
2289 C*** OPERAND - REGISTER
2290 C
2291 500 IADM(1,KSYS)=0
2292 C*** *** ADDR REGISTER?
2293 IF(ISYM(JPTR+1).GT.7) IADM(1,KSYS)=8
2294 RETURN
2295 C
2296 C*** REGISTER INDIRECT MODE ***
2297 C
2298 600 CONTINUE
2299 IADM(1,KSYS)=16
2300 RETURN
2301 C
2302 C*** POST INCREMENT ***
2303 C
2304 700 CONTINUE
2305 IADM(1,KSYS)=24
2306 RETURN
2307 C
2308 C*** PRE DECREMENT ***
2309 C
2310 800 CONTINUE
2311 IADM(1,KSYS)=32
2312 RETURN
2313 C
2314 C*** IMMEDIATE OPERAND ***
2315 C
2316 C
2317 1000 CALL EXP(37)
2318 KK=ISIZ
2319 IF(KK.EQ.0) KK=2
2320 IADM(1,KSYS)=60
2321 IF(INSL.GT.0) GO TO 1010
2322 C*** *** FIRST FIELD
2323 INSL=2
2324 1010 INS(3)=TKNVAL
2325 C+++ 16-BIT - MOST SIGNIFICANT BYTE OF P-COUNT
2326 INS(2)=TKNVA2
2327 INSL=INSL + KK
2328 RETURN
2329 C
2330 C*** DISPLACEMENT ***
2331 C
2332 1100 IADM(1,KSYS)=56
2333 CALL EXP(37)
2334 C
2335 K=2
2336 C*** PC REL?
2337 IF(IADM(4,KSYS).EQ.1) GO TO 1110
2338 IF(IADM(5,KSYS).EQ.0) GO TO 1105
2339 C*** DEFAULT FORWARD REFERENCES TO 2 OR 4 BYTES
2340 IF(IADM(7,2).EQ.1) K=4
2341 GO TO 1110
2342 C+++ 16-BIT
2343 1105 IF(TKNVA2.EQ.-1) GO TO 1110
2344 C*** CHECK FOR ADDRESS FROM FF8000-FFFFFF
2345 I=MPUAND(TKNVAL,Z8000)
2346 IF(I.EQ.Z8000.AND.TKNVA2.EQ.KCFF) GO TO 1110
2347 IF(TKNVA2.NE.0) K=4
2348 C*** ADDR >$7FFF IS LONG ADDR.
2349 IF(I.NE.0.AND.TKNVA2.EQ.0) K=4
2350 1110 IF(INSL.LT.0) GO TO 1120
2351 C*** *** SECOND FIELD
2352 INSL=INSL + K
2353 1115 IF(K.EQ.4) IADM(1,KSYS)=57
2354 RETURN
2355 C*** *** FIRST FIELD
2356 1120 INSL=K + 2
2357 INS(3)=TKNVAL
2358 C+++ 16-BIT - MOST SIGNIFICANT BYTE OF P-COUNT
2359 INS(2)=TKNVA2
2360 GO TO 1115
2361 C
2362 C*** REGISTER FOR 3(A1) ADDRESSING MODE ***
2363 C
2364 1200 CONTINUE
2365 C*** TEST FOR ORG.L ALREADY SET ADDR MODE
2366 IF(IADM(1,KSYS).EQ.57) INSL=INSL-2
2367 RETURN
2368 C
2369 C*** .L FOR 3(A1.L) ADDRESSING MODE ***
2370 C
2371 1300 RETURN
2372 C
2373 C*** SECOND REGISTER FOR 3(A1,A2) ADDRESSING MODE ***
2374 C
2375 1400 RETURN
2376 C
2377 C*** SECOND REGISTER OF R1-R2 FOR LDM,STM
2378 C
2379 1500 RETURN
2380 C
2381 C*** 'STRING' GT 4 BYTES (DC ONLY)
2382 C
2383 1600 INS(3)=TKNSIZ
2384 IADM(1,1)=-1
2385 RETURN
2386 C
2387 C*** CONSTANT OR VARIABLE OPERAND ***
2388 C
2389 1700 CONTINUE
2390 IADM(4,KSYS)=0
2391 C
2392 IF(TKNTYP.EQ.24) GO TO 1710
2393 C*** CONSTANT OPERAND
2394 IF(TKNTYP.NE.42) GO TO 1730
2395 C*** ASTERISK
2396 IADM(4,KSYS)=IADM(7,1)
2397 TKNVAL=IPC
2398 TKNVA2=IPC2
2399 GO TO 1730
2400 C*** DEFINED PREVIOUSLY?
2401 1710 IF(JSUC.GT.0) GO TO 1720
2402 C*** NEW DEFINITION, PUT IN SY.
2403 CALL STF(JSUC,JPTR,2,1)
2404 ISYM(JPTR)=0
2405 ISYM(JPTR+1)= 0
2406 1720 IF(MPUAND(ISYM(JPTR),192).EQ.0) IADM(5,KSYS)=1
2407 TKNVAL=ISYM(JPTR+1)
2408 TKNVA2=ISYM(JSUC)
2409 C*** PC REL?
2410 IF(MPUAND(ISYM(JPTR),7).EQ.1) IADM(4,KSYS)=1
2411 C*** *** GIVE OPERAND TO EXP
2412 1730 CALL EXP(22)
2413 RETURN
2414 END
2415 SUBROUTINE BUILD1
2416 CC NAM: BUILD1 VER: 10.0 DAT: 12/08/78 CMP: 16-BIT
2417 CC
2418 CC SYS: MACS
2419 CC
2420 CC ENT: N/A
2421 CC
2422 CC RTN: N/A
2423 CC
2424 CC FNC: BUILD THE INSTRUCTION FOR PASS ONE
2425 CC USES INFORMATION IN TABLE 'IADM', AND 'INS' ARRAY.
2426 CC
2427 CC REV: N/A
2428 CC
2429 CCALLS MPUAND-ERR-MOD2-IABS-PAGE
2430 CC
2431 CC ERROR NUMBERS CALLED: 223,229,239,240
2432 C*
2433 IMPLICIT INTEGER (A-Z)
2434 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
2435 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
2436 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
2437 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
2438 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
2439 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
2440 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,PLEN
2441 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
2442 COMMON /A/ NXSYM1
2443 DIMENSION IMCD(6),NIMM(40)
2444 EQUIVALENCE (IADM(4,1),SYMTYP)
2445 DATA MASK2/0/,Z7000/O70000/,Z8000/O100000/,Z7100/O70400/
2446 DATA ZB001/O130001/,ZD001/O150001/,ZD002/O150002/
2447 DATA Z9001/O110001/,Z9002/O110002/,ZF000/O170000/
2448 C ORI SUBI EORI CMPI ANDI ADDI
2449 DATA IMCD/ 0000, 1024, 2560, 3072, 512, 1536/
2450 DATA NIMM/
2451 & 0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,
2452 & 1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0/
2453 C
2454 IF(ISIZ.EQ.0) ISIZ=1
2455 C
2456 C*** PERFORM ACTIONS FOR THE OPCODE CLASS
2457 IF(IOPC.GT.0) GO TO 1620
2458 INSL=0
2459 RETURN
2460 1620 IF(INSL.LT.0) INSL=2
2461 GO TO(100, 200,9223,400,500, 600, 700, 800, 900, 1000,
2462 & 1100,1200,1300,1400,1500,1600,1700,1800,1900),IOPC
2463 J=IOPC-19
2464 GO TO(2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,
2465 & 9223,3200,9223,3400,3500,3600,3700,3800),J
2466 J=J-19
2467 GO TO(3900),J
2468 GO TO 9223
2469 C
2470 C*** PSEUDO OPS WITHOUT OPERANDS
2471 100 INS1=INS(1)
2472 GO TO(110,120,120,130,140,150,170,180,120,120,120,197),INS1
2473 C... *** END
2474 110 IPASS=0
2475 IPC2=0
2476 IPC=0
2477 MNUM=0
2478 C*** SLEW & PRINT HEADER IF PASS 1 ERRORS
2479 CALL PAGE(82)
2480 KD1LNO=0
2481 REWIND LUSI
2482 C*** RESET TO START OF PASS 1
2483 LIST=1
2484 RETURN
2485 120 RETURN
2486 C*** LIST ***
2487 130 LIST=1
2488 RETURN
2489 C
2490 C*** NOLIST ***
2491 140 LIST=0
2492 RETURN
2493 C*** TTL
2494 150 CONTINUE
2495 RETURN
2496 C*** NOPAGE
2497 170 CONTINUE
2498 NOP=0
2499 RETURN
2500 C
2501 C*** NOOBJ - NO OBJECT OUTPUT
2502 C
2503 180 CONTINUE
2504 IOBJ=0
2505 RETURN
2506 197 CONTINUE
2507 C*** MASK2 DIRECTIVE
2508 MASK2=1
2509 TKNSIZ=4
2510 C*** FIND ROOM FOR 'DCNT'
2511 ITOKEN(1)=68
2512 ITOKEN(2)=67
2513 ITOKEN(3)=78
2514 ITOKEN(4)=84
2515 CALL LKP(-1,LSUC,LPTR)
2516 C*** PUT 'DCNT' IN SYMM TABLE
2517 CALL STF(LSUC,LPTR,2,-1)
2518 ISYM(LPTR)=32
2519 C*** SET OPCODE
2520 ISYM(LPTR+1)=Z7100
2521 NXSYM1=NXSYM
2522 C*** FIND 'DBRA'
2523 ITOKEN(1)=68
2524 ITOKEN(2)=66
2525 ITOKEN(3)=82
2526 ITOKEN(4)=65
2527 CALL LKP(-1,LSUC,LPTR)
2528 IF(LSUC.LE.0) GO TO 199
2529 DO 198 I=1,16
2530 ISYM(LSUC+3)=LSP
2531 LSUC=LSUC+ISHFT(ISYM(LSUC+1),-8)+5
2532 198 CONTINUE
2533 C*** CHANGE OPCODE OF 'STOP' TO 2
2534 ITOKEN(1)=83
2535 ITOKEN(2)=84
2536 ITOKEN(3)=79
2537 ITOKEN(4)=80
2538 CALL LKP(-1,LSUC,LPTR)
2539 IF(LSUC.LE.0) GO TO 199
2540 ISYM(LPTR)=2
2541 RETURN
2542 9900 FORMAT(' SYMBOL DBRA NOT FOUND')
2543 199 WRITE(LULT,9900)
2544 RETURN
2545 C
2546 C
2547 C*** OP CODES WITHOUT OPERANDS
2548 200 RETURN
2549 C
2550 400 INSL=0
2551 C
2552 C*** DC
2553 IF(IADM(1,1).GE.0) GO TO 410
2554 C*** 'STRING'
2555 KK=INS(3)
2556 I=MOD(INS(3),ISIZ)
2557 IF(I.NE.0) KK=KK-I+ISIZ
2558 GO TO 415
2559 410 KK=ISIZ
2560 415 I=0
2561 GO TO 545
2562 C
2563 C*** PSEUDO OPS WITH OPERANDS
2564 500 INSL=0
2565 INS1=INS(1)
2566 GO TO(510,520,520,540,550,560,570),INS1
2567 GO TO 9223
2568 C... *** ORG
2569 510 IPC=INS(3)
2570 C+++ 16-BIT - GET MOST SIGNIFICANT BYTE
2571 IPC2=INS(2)
2572 IADM(7,1)=0
2573 IADM(7,2)=0
2574 IF(ISIZ.EQ.4) IADM(7,2)=1
2575 GO TO 530
2576 C... *** EQU
2577 520 IF(LPTR.GT.0) GO TO 522
2578 C... *** ERROR - NO LABEL ON STATEMENT
2579 CALL ERR(229)
2580 RETURN
2581 522 ISYM(LPTR)=MPUAND(ISYM(LPTR),192) + SYMTYP
2582 ISYM(LPTR+1)=INS(3)
2583 IF(INS(1).EQ.2) GO TO 525
2584 C... *** 'SET' DIRECTIVE, ALLOW REDEFINITION
2585 ISYM(LPTR)= SYMTYP + 64
2586 C+++ 16 BIT PUT M.S.B. OF ADDRESS IN SYM TABLE.
2587 C*** LSUC HAS BEEN SAVE IN 'ACT1'
2588 525 KK=ITOKEN(69)
2589 ISYM(KK)=INS(2)
2590 C*** FORWARD REF ILLEGAL
2591 530 IF(IADM(5,1).EQ.1) GO TO 9240
2592 RETURN
2593 C
2594 C*** DS
2595 C
2596 C*** KK=INS(3)*ISIZ
2597 540 I=0
2598 KK=ISIZ
2599 CALL MUL(I,KK,INS(2),INS(3))
2600 C*** CHECK FOR A FORWARD REFERERENCE WHICH IS ILLEGAL
2601 IF(IADM(5,1).EQ.1) GO TO 9240
2602 545 LPTR=0
2603 C*** IPC=IPC + KK
2604 CALL ADD(IPC2,IPC,I,KK)
2605 IF(ISIZ.NE.1) CALL MOD2
2606 RETURN
2607 C
2608 C*** RORG
2609 C
2610 550 IPC=INS(3)
2611 C+++ 16-BIT - GET MOST SIGNIFICANT BYTE
2612 IPC2=INS(2)
2613 IADM(7,1)=1
2614 IADM(7,2)=0
2615 RETURN
2616 C
2617 C*** FAIL
2618 C
2619 560 RETURN
2620 C
2621 C*** SPC ***
2622 C
2623 570 CONTINUE
2624 RETURN
2625 C
2626 C*** LINK/UNLK - ADDRESS REGISTER TO BITS 2-0
2627 C
2628 600 CONTINUE
2629 C*** CHECK FOR LINK - 20048 = $4E50 = LINK
2630 IF(INS(1).EQ.20048) INSL=4
2631 RETURN
2632 C
2633 C*** SWAP - DATA REGISTER TO BITS 2-0
2634 C
2635 700 RETURN
2636 C
2637 C*** TRAP - ESTABLISH DISPLACEMENT IN BITS 3-0
2638 C
2639 800 RETURN
2640 C
2641 C*** ABS/CLR/NEG/NOT/TST - BUILD EA
2642 C
2643 900 RETURN
2644 C
2645 C*** NBCD
2646 C
2647 1000 RETURN
2648 C
2649 C*** PEA
2650 C
2651 1100 RETURN
2652 C
2653 C*** JSR,JMP
2654 C
2655 1200 CONTINUE
2656 RETURN
2657 C
2658 C*** BCC
2659 C
2660 1300 CONTINUE
2661 IF(INSL.EQ.6) INSL=4
2662 IF(ISIZ.NE.1) GO TO 1310
2663 C*** FORCE SHORT FORM
2664 INSL=2
2665 RETURN
2666 1310 IF(INS(3).EQ.-1) RETURN
2667 C*** IS IT A FORWARD REFERENCE?
2668 IF(IADM(5,1).EQ.1) RETURN
2669 C... *** BACKWARD REFERENCE
2670 IOFS=INS(3)-IPC-2
2671 IF(IABS(IOFS).LE.127) INSL=2
2672 RETURN
2673 C
2674 C*** NEGX
2675 C
2676 1400 RETURN
2677 C
2678 C*** EXT
2679 C
2680 1500 RETURN
2681 C
2682 C*** TAS
2683 C
2684 1600 RETURN
2685 C
2686 C*** SCC
2687 1700 RETURN
2688 C
2689 C*** CONDITIONAL ASSEMBLY
2690 C
2691 1800 INSL=0
2692 INS1=INS(1)
2693 GO TO(1810,1820),INS1
2694 C... *** EQ
2695 C
2696 1810 IF(INS(3).NE.0) GO TO 1890
2697 IF(INS(2).NE.0) GO TO 1890
2698 RETURN
2699 C... *** NE
2700 1820 IF(INS(3).EQ.0.AND.INS(2).EQ.0) GO TO 1890
2701 RETURN
2702 C... *** SKIP TO ENDC
2703 1890 ICOL=-2
2704 RETURN
2705 C
2706 C*** PAGE LENGTH(PLEN) - LINE LENGTH(LLEN)
2707 C
2708 1900 CONTINUE
2709 IF(INS(1).GT.2) INSL=4
2710 RETURN
2711 C
2712 C*** MULTIPLY,DIVIDE
2713 C
2714 2000 RETURN
2715 C
2716 C*** ADD/SUB PROCESSING
2717 C
2718 2100 CONTINUE
2719 IF(IADM(1,2).EQ.8.AND.ISIZ.EQ.1) RETURN
2720 C*** ADD1/SUBQ? IF SO FORCE QUICK
2721 C*** 20480=$5000 - 20736 = $ 5100
2722 IF(INS(1).EQ.20480.OR.INS(1).EQ.20736) GO TO 2120
2723 IF(INS(3).LE.0) RETURN
2724 IF(INS(3).GT.8) RETURN
2725 C*** TEST FOR IMMEDIATE SOURCE
2726 IF(IADM(1,1).NE.60) RETURN
2727 C*** ADD1/SUBI? IF SO FORCE IT
2728 IF(INS(1).EQ.ZD001.OR.INS(1).EQ.Z9001) RETURN
2729 C*** ADDA/SUBA?
2730 IF(INS(1).EQ.ZD002.OR.INS(1).EQ.Z9002) RETURN
2731 C... *** QUICK MODE
2732 2120 INSL=INSL - 2
2733 IF(ISIZ.EQ.4) INSL= INSL - 2
2734 RETURN
2735 C
2736 C*** AND,OR
2737 C
2738 2200 RETURN
2739 C
2740 C*** EOR
2741 2300 RETURN
2742 C
2743 C*** CMP
2744 C
2745 2400 RETURN
2746 C
2747 C*** EXG
2748 C
2749 2500 RETURN
2750 C
2751 C*** CHK
2752 C
2753 2600 RETURN
2754 C
2755 C*** CMPM
2756 C
2757 2700 RETURN
2758 C
2759 C*** ADDX,SUBX
2760 C
2761 2800 RETURN
2762 C
2763 C*** ABCD,SBCD
2764 C
2765 2900 RETURN
2766 C
2767 C*** MOVEP
2768 C
2769 3000 RETURN
2770 C
2771 C*** DCNT
2772 C
2773 3200 IF(MASK2.EQ.0) INSL=4
2774 RETURN
2775 C
2776 C*** LEA
2777 C
2778 3400 RETURN
2779 C
2780 C*** SHIFTS
2781 C
2782 3500 CONTINUE
2783 IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.4) INSL=INSL-2
2784 C*** ALLOW #BIT NUMBER ALSO
2785 IF(IADM(1,1).EQ.60) IADM(1,1)=56
2786 IF(IADM(1,1).EQ.56) INSL=INSL-2
2787 RETURN
2788 C
2789 C*** BIT INSTRUCTIONS
2790 C
2791 3600 CONTINUE
2792 IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.4) INSL=INSL-2
2793 IF(MASK2.NE.1) RETURN
2794 I=MPUAND(INS(5),1)
2795 IF(I.EQ.0) RETURN
2796 GO TO 3930
2797 3900 IF(MASK2.NE.0) RETURN
2798 IF(INS(3).GT.7) RETURN
2799 3930 CONTINUE
2800 IF(IADM(1,2).NE.16) RETURN
2801 INSL=INSL+2
2802 IADM(1,2)=40
2803 IADM(3,2)=1
2804 RETURN
2805 C
2806 C*** MOVE INSTRUCTION
2807 C*-* TEST FOR IMMEDIATE SOURCE AND D SINK
2808 3700 CONTINUE
2809 C*** MOVEQ?
2810 IF(INS(1).EQ.Z7000) GO TO 3705
2811 IF(IADM(1,1).NE.60) RETURN
2812 IF(IADM(1,2).NE.0) RETURN
2813 C *-* MOVE #,D - CAN W USE LDQ?
2814 C
2815 IF(ISIZ.NE.4) GO TO 3710
2816 C*** FORWARD REFERENCE?
2817 IF(IADM(5,1).EQ.1) RETURN
2818 IF(INS(3).LT. -127) RETURN
2819 IF(INS(3).GT.127) RETURN
2820 C*** IS VALUE TO BIG FOR MOVEQ DEFAULT?
2821 IF(INS(2).NE.0.AND.INS(2).NE.-1) RETURN
2822 C*** DON'T DEFAULT TO MOVEQ FOR VALID 16 BIT POSITIVE #
2823 IF(INS(2).EQ.0.AND.MPUAND(TKNVAL,Z8000).NE.0) RETURN
2824 C * -* USE LDQ
2825 3705 INSL=2
2826 RETURN
2827 C
2828 C*** USE 4 BYTES FOR MOVE #,REG
2829 3710 CONTINUE
2830 INSL=4
2831 RETURN
2832 C
2833 C*** LDM,STM
2834 C
2835 3800 INSL=INSL+2
2836 RETURN
2837 C
2838 C*** ERROR RETURNS
2839 C
2840 C... *** UNDEFINED ACTION (INTERNAL ERROR)
2841 C
2842 9223 CALL ERR(223)
2843 RETURN
2844 C
2845 C*** ILLEGAL FORWARD REFERENCE
2846 C
2847 9240 CONTINUE
2848 CALL ERR(240)
2849 RETURN
2850 END
2851 SUBROUTINE EXP(NACT)
2852 CC
2853 CC NAM: EXP VER:1.00 DATE: 12/11/78 CMP: PDP-11
2854 CC SYS: MACS
2855 CC
2856 CC ENT: NACT - 1 = INITIALIZE
2857 CC 2 = OPERAND (VALUE IN TKNVAL)
2858 CC 3 = RESERVED
2859 CC 4 = OPERATOR: UNARY MINUS
2860 CC 5 = >> (SHIFT RIGHT)
2861 CC 6 = << (SHIFT LEFT)
2862 CC 7 = & (AND)
2863 CC 8 = ^ (OR)
2864 CC 9 = % (EOR)
2865 CC 10 = * (MPY)
2866 CC 11 = YMTYP/IADM(4,K (DIV)
2867 CC 12 = + (ADD)
2868 CC 13 = - (SUB)
2869 CC 14 = ( (OPEN PREN)
2870 CC 15 = ) (CLOSE PAREN)
2871 CC 16 = I- (BGN EXPR)
2872 CC 17 = -I (END EXPR)
2873 CC
2874 CC RTN: TKNVAL = VALUE OF THE EXPRESSION
2875 CC IADM(4,KSYS) = MODE OF THE RESULT
2876 CC 0 = ABSOLUTE
2877 CC 1 = RELATIVE
2878 CC KSYS=1=1ST OPERAND
2879 CC KSYS=2=2ND OPERAND
2880 CC
2881 CC FNC: PERFORMS EXPRESSION RECOGNIZE BY BOTTOM UP OPERATOR
2882 CC PRECEDENT.
2883 CC
2884 CC REV: NYMTYP/IADM(4,KA
2885 CC
2886 CCALLS MPUIOR-ERR-ISHFT-MPUAND
2887 CC
2888 CC ERROR NUMBERS CALLED: 223,237
2889 CC
2890 C*
2891 IMPLICIT INTEGER (A-Z)
2892 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
2893 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
2894 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
2895 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
2896 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
2897 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
2898 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
2899 C
2900 DIMENSION STK1(20),STK2(20),FVTAB(17),ACTAB(17)
2901 DIMENSION STK11(20)
2902 C
2903 C - > < & ^ % * / + - ( ) 4 5
2904 DATA FVTAB/0,0,0,7,6,6,5,5,5,4,4,3,3,2,2,1,1/
2905 DATA ACTAB/0,0,0,3,4,4,4,4,4,4,4,4,4,2,2,1,1/
2906 C
2907 KACT=NACT-20
2908 C 1 2 3 4 5 6 7 8 9 10
2909 GO TO ( 10, 20,999,200,200,200,200,200,200,200,
2910 & 200,200,200,240,200,999,200),KACT
2911 C
2912 C*** INITIALIZE
2913 C
2914 10 NDX=1
2915 LOP=16
2916 STK1(1)=LOP
2917 RETURN
2918 C
2919 C*** OPERAND
2920 C
2921 20 NDX=NDX+1
2922 STK1(NDX)=TKNVAL
2923 STK2(NDX)=IADM(4,KSYS)
2924 C*** SAVE UPPER 2 BYTES
2925 STK11(NDX)=TKNVA2
2926 TKNVA2=0
2927 RETURN
2928 C
2929 C*** OPERATORS
2930 C
2931 200 FVOP1=FVTAB(KACT)
2932 205 IF(FVOP1.LE.FVTAB(LOP)) GO TO 1000
2933 240 LOP=KACT
2934 NDX=NDX +1
2935 STK1(NDX)=KACT
2936 RETURN
2937 C
2938 C*** UNSTACK THE OPERATION
2939 C
2940 1000 J=ACTAB(LOP)
2941 GO TO (1010,1020,1030,1040),J
2942 C
2943 C*** BEGIN EXPRESSION - END EXPRESSION
2944 C
2945 1010 TKNVAL=STK1(2)
2946 IADM(4,KSYS)=STK2(2)
2947 C*** SET POSSIBLE NUMBER >$FFFF
2948 TKNVA2=STK11(2)
2949 RETURN
2950 C
2951 C*** LEFT PAREN - RIGHT PAREN
2952 C
2953 1020 NDX=NDX-1
2954 STK1(NDX)=STK1(NDX+1)
2955 STK11(NDX)=STK11(NDX+1)
2956 STK2(NDX)=STK2(NDX+1)
2957 LOP=STK1(NDX-1)
2958 RETURN
2959 C
2960 C*** UNARY MINUS
2961 C
2962 1030 KK= STK1(NDX)
2963 S1= STK2(NDX)
2964 S2= 0
2965 KK1= STK11(NDX)
2966 C*** COMPLEMENT THE #
2967 CALL NEGATE(KK1,KK)
2968 NDX=NDX-1
2969 GO TO 3000
2970 C
2971 C** ARITHMETIC OPERATOR
2972 C
2973 1040 NDX=NDX-2
2974 A= STK1(NDX)
2975 A1=STK11(NDX)
2976 S1=STK2(NDX)
2977 B= STK1(NDX+2)
2978 B1=STK11(NDX+2)
2979 S2=STK2(NDX+2)
2980 C
2981 C*** PERFORM THE OPERATION
2982 C
2983 GO TO ( 999, 999, 999, 999,2050,2060,2070,2080, 999,
2984 & 2100,2110,2120,2130),LOP
2985 C
2986 C*** SHIFT RIGHT
2987 2050 B= -B
2988 C
2989 C***
2990 C
2991 2060 KK=ISHFT(A,B)
2992 GO TO 3000
2993 C
2994 C*** AND
2995 C
2996 2070 KK=MPUAND(A,B)
2997 GO TO 3000
2998 C
2999 C*** OR
3000 C
3001 2080 KK=MPUIOR(A,B)
3002 GO TO 3000
3003 C
3004 C*** MPY
3005 C
3006 2100 CONTINUE
3007 C*** USE REG MPY IF NEG #'S
3008 IF(B1.EQ.-1.AND.A1.EQ.-1) GO TO 2108
3009 C*** GO MPY
3010 2102 CALL MUL(A1,A,B1,B)
3011 KK=A
3012 KK1=A1
3013 GO TO 3000
3014 2108 A1=0
3015 B1=0
3016 GO TO 2102
3017 C
3018 C*** DIV
3019 C
3020 2110 CONTINUE
3021 IF(A1.EQ.-1.AND.B1.EQ.-1) GO TO 2118
3022 C*** IS IT DIV BY ZERO?
3023 IF(B.EQ.0.AND.B1.EQ.0) GO TO 2900
3024 CALL DIV(A1,A,B1,B)
3025 KK=A
3026 KK1=A1
3027 GO TO 3000
3028 2118 KK=A/B
3029 KK1=0
3030 GO TO 3000
3031 C
3032 C*** ADD
3033 C
3034 2120 CALL ADD(A1,A,B1,B)
3035 KK=A
3036 KK1=A1
3037 GO TO 3100
3038 C
3039 C*** SUB
3040 C
3041 2130 CALL SUB(A1,A,B1,B)
3042 KK=A
3043 KK1=A1
3044 IF(S1.EQ.S2) S1 =0
3045 GO TO 3200
3046 2900 KK=0
3047 KK1=0
3048 C
3049 C*** ASSURE VALID OPERATION FOR OPERAND MODES
3050 C
3051 C... *** DISALLOW REL,XXX
3052 3000 IF(S1.EQ.0) GO TO 3100
3053 IF(IPASS.GE.0) CALL ERR(237)
3054 C... *** DISALLOW XXX,REL
3055 3100 IF(S2.EQ.0) GO TO 3200
3056 IF(IPASS.GE.0) CALL ERR(237)
3057 C
3058 C... *** ALLOW ANY MODE
3059 C
3060 3200 STK1(NDX)=KK
3061 STK2(NDX)=S1
3062 STK11(NDX)=KK1
3063 LOP=STK1(NDX-1)
3064 GO TO 205
3065 C
3066 C*** ERROR EXIT
3067 C
3068 999 CALL ERR(223)
3069 RETURN
3070 END
3071 SUBROUTINE RANGE(KK)
3072 CC NAM: RANGE VER: 1.0 DAT: 12/08/78 CMP: 16-BIT
3073 CC
3074 CC SYS: MACS
3075 CC
3076 CC ENT: KK - NUMERIC VALUE TO BE CHECKED FOR SIZE
3077 CC
3078 CC RTN: KK - N/C
3079 CC
3080 CC FNC: VALIDATE NUMERIC RANGE VALUES IN #N TYPE STATEMENTS
3081 CC
3082 CC REL: N/A
3083 CC
3084 CCALLS ERR-ISHFT
3085 CC
3086 CC ERROR NUMBERS CALLED: 210
3087 CC
3088 C*
3089 IMPLICIT INTEGER (A-Z)
3090 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
3091 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
3092 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
3093 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
3094 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
3095 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
3096 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
3097 KKK=KK
3098 IF(ISIZ.EQ.128) RETURN
3099 C*** WORD OR BYTE?
3100 IF(ISIZ.EQ.0) GO TO 100
3101 C*** CHECK UPPER 2 BYTES
3102 IF(TKNVA2.EQ.0) RETURN
3103 IF(TKNVA2.NE.-1) GO TO 210
3104 RETURN
3105 100 CONTINUE
3106 C
3107 IF(TKNVA2.GT.0) GO TO 210
3108 JJ=ISHFT(KKK,-8)
3109 IF(JJ.EQ.0) RETURN
3110 IF(JJ.EQ.255) RETURN
3111 210 CALL ERR(210)
3112 RETURN
3113 END
3114 SUBROUTINE ACT2(KMD)
3115 CC NAM: ACT2 VER: 1.0 DAT: 12/08/78 CMP: 16-BIT
3116 CC
3117 CC SYS: MACS
3118 CC
3119 CC ENT: KMD - EQUALS ACTION TO BE TAKEN AS FOUND
3120 CC IN THE PARSE TABLE.
3121 CC
3122 CC RTN: N/C
3123 CC
3124 CC FNC: P A S S T W O A C T I O N S
3125 CC ------------------------------
3126 CC PERFORM THE ACTIONS FOR THE DIFFERENT "TOKENS"
3127 CC ENCOUNTERED DURING THE STATEMENT SCAN.
3128 CC SETS UP 'IADM' TABLE, ENTERS EXP IN EXP TABLE.
3129 CC
3130 CC THIS ROUTINE IS 16-BIT DEPENDENT DUE TO THE CHECK ON
3131 CC 'TKNVA2' FOR THE 2 MOST SIGNIFICANT BYTES OF A 32-BIT #.
3132 CC INTEGER CONSTANT 192=$C0, 128=$80($=HEX).
3133 CC
3134 CC REV: N/A
3135 CC
3136 CCALLS ERR-LKP-SCN-OUTPUT-RANGE-MASK-EXP-MPUGTC
3137 CC IABS-ISHFT-MPUAND-MPUIOR
3138 CC
3139 CC ERROR NUMBERS CALLED: 205,206,207,208,209,212,213,214,219,227
3140 CC 228,231,234,235
3141 C*
3142 IMPLICIT INTEGER (A-Z)
3143 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
3144 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
3145 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
3146 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
3147 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
3148 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
3149 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
3150 COMMON /A/LIST,ICOL,NEST
3151 DIMENSION NSZF(40),NSZ(40),MREL(40)
3152 EQUIVALENCE(IADM(4,1),SYMTYP),(IADM(5,1),LFRF)
3153 DATA LB/66/,LW/87/,LL/76/,LAP/39/
3154 DATA LS/83/
3155 C*** 0 = UNSIZED INSTRUCTION
3156 C*** 1 = B,W,L ALLOWED
3157 C*** 2 = B ONLY
3158 C*** 66 = W ONLY
3159 C*** 130 = L ONLY
3160 C*** SIZE SUBFIELD ALLOWED? ***
3161 DATA NSZF/
3162 & 0,0,0,1,1,0,66,0,1,2,130,0,-1,1,1,2,0,0,0,66,
3163 & 1,1,1,1,130,66,1,1,2,1,0,0,1,130,1,1,1,1,1,0/
3164 C OPCODE SIZES 01 02 03 04 05 06 07 08 09 10
3165 C*** 01-10
3166 DATA NSZ/ 0, 2, 0,-1,-1,-1, 2,-1,-1,-1,
3167 & -1,-1,-1,-1, 2,-1,-1, 0, 0,-1,
3168 & -1,-1,-1,-1, 2,-1, 2, 2, 2,-1,
3169 & 0,-1, 2,-1,-1,-1,-1,-1,-1, 0/
3170 C USE PC REL? 01 02 03 04 05 06 07 08 09 10
3171 C*** 01-10
3172 DATA MREL/ 0, 0, 0, 0,-1, 0, 0, 0, 1, 1,
3173 & 1, 1,-1, 1, 1, 1, 1, 0, 0, 1,
3174 & 1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
3175 & 0,-1, 0, 1, 0, 1, 1, 1, 1, 0/
3176 DATA Z8000/O100000/
3177 C
3178 GO TO(100,200,300,400,500,600,700,800,800,
3179 & 1000,1100,1200,1300,1400,1500,1600,1700),KMD
3180 C*** EXPRESSION ACTION
3181 CALL EXP(KMD)
3182 RETURN
3183 C
3184 C*** STATEMENT LABEL
3185 C
3186 100 CALL LKP(1,LSUC,LPTR)
3187 IF(LSUC.LE.0) RETURN
3188 IR=ISYM(LPTR)
3189 KR=MPUAND(IR,192)
3190 C
3191 C*** SAVE FOR BUILD2
3192 ITOKEN(69)=LSUC
3193 IF(KR.NE.192) GO TO 110
3194 C*** REDEFINED SYMBOL
3195 CALL ERR(206)
3196 RETURN
3197 C
3198 C*** DEFINE FOR PASS TWO
3199 110 ISYM(LPTR)= MPUAND(IR,63) + 128
3200 C
3201 RETURN
3202 C
3203 C*** OPCODE
3204 C
3205 200 KSYS=1
3206 IF(JSUC.GT.0) GO TO 210
3207 C*** ERROR 207 - UNDEFINED OP-CODE
3208 CALL ERR(207)
3209 KOLUMN=0
3210 RETURN
3211 C *** MACRO DEFINITION?
3212 210 IF(IOPC.GT.0) GO TO 260
3213 IF(IOPC.EQ.0) GO TO 265
3214 C *** LOOK FOR ENDM
3215 230 KOLUMN=-1
3216 LPTR=0
3217 IOPC=0
3218 CALL SCN
3219 IF(TKNTYP.NE.30) GO TO 230
3220 IF(IOPC.GE.0) GO TO 230
3221 C*** ASSURE NOT MEXIT
3222 IF(INS(1).EQ.2) GO TO 230
3223 KOLUMN=0
3224 RETURN
3225 C *** NEED OPERAND FIELD?
3226 260 CONTINUE
3227 INSL=NSZ(IOPC)
3228 JNSL=INSL
3229 IF(IOPC.GE.4) GO TO 270
3230 C *** OPERAND FIELD NOT NEEDED
3231 265 KOLUMN=0
3232 RETURN
3233 270 IADM(1,1)=-1
3234 IADM(3,2)=0
3235 IADM(1,2)=-1
3236 IADM(6,1)=0
3237 IADM(6,2)=0
3238 ISIZ=64
3239 C*** ALLOW .B ONLY FOR BIT INSTRUCTIONS
3240 IF(IOPC.EQ.36) ISIZ=0
3241 IADM(4,1)=0
3242 IADM(4,2)=0
3243 IADM(5,2)=0
3244 LFRF=0
3245 CALL EXP(21)
3246 RETURN
3247 C
3248 C*** DATA SIZE
3249 C
3250 C
3251 300 KK=NSZF(IOPC)
3252 C
3253 IF(KK.GT.0) GO TO 310
3254 C
3255 C*** IS "S" ALLOWED?
3256 IF(KK.EQ.0) GO TO 305
3257 C
3258 IF(ITOKEN(1).NE.LS) GO TO 390
3259 C*** ALLOW "S"
3260 ISIZ=0
3261 RETURN
3262 C
3263 C *** ERROR - SIZE SUBFIELD NOT ALLOWED FOR THIS OPCODE
3264 305 CALL ERR(205)
3265 RETURN
3266 310 IF(TKNSIZ.NE.1) GO TO 390
3267 IF(ITOKEN(1).NE.LB) GO TO 320
3268 ISIZ=0
3269 GO TO 395
3270 320 IF(ITOKEN(1).NE.LL) GO TO 330
3271 ISIZ=128
3272 GO TO 395
3273 330 IF(ITOKEN(1).EQ.LW) GO TO 392
3274 C *** ERROR - UNKNOWN DATA SIZE SPECIFIED
3275 390 CALL ERR(212)
3276 RETURN
3277 392 ISIZ=64
3278 395 CONTINUE
3279 C*** IF ALL 3 SIZES ALLOWED, SKIP
3280 IF(KK.EQ.1) RETURN
3281 IF(ISIZ.NE.KK-2) CALL ERR(238)
3282 RETURN
3283 C
3284 C*** COMMA STARTING FIELD-2 OPERAND ***
3285 C
3286 C
3287 400 CALL EXP(21)
3288 IF(IOPC.NE.4) GO TO 410
3289 C*** DC - FORCE OUT
3290 CALL OUTPUT
3291 INSL=-1
3292 RETURN
3293 C
3294 410 CONTINUE
3295 IF(KSYS.EQ.2) GO TO 420
3296 C*** CHECK FOR 'LINK' - 20048 = $4E50 = LINK
3297 IF(IOPC.EQ.6.AND.INS(1).EQ.20048) GO TO 430
3298 IF(IOPC.GE.19) GO TO 430
3299 C *** OPCODE REQUIRES ONLY ONE OPERAND
3300 420 CALL ERR(219)
3301 KOLUMN=0
3302 RETURN
3303 C+++ MOVE REG,MODE TO SS 2
3304 430 KSYS=2
3305 TKNVA2=0
3306 RETURN
3307 C
3308 C*** OPERAND - REGISTER
3309 C
3310 500 IADM(1,KSYS)=0
3311 JR=ISYM(JPTR+1)
3312 IADM(2,KSYS)=JR
3313 C
3314 C *** STATUS REGISTER?
3315 IF(JR.LE.15) GO TO 510
3316 C *** DEFINE AS STATUS REGISTER
3317 IADM(1,KSYS)=64
3318 RETURN
3319 C *** ADDR REGISTER?
3320 510 IF(JR.GT.7) IADM(1,KSYS)=8
3321 IF(IOPC.EQ.38) CALL MASK(JR)
3322 RETURN
3323 C
3324 C*** REGISTER INDIRECT MODE ***
3325 C
3326 600 IADM(1,KSYS)=16
3327 GO TO 900
3328 C
3329 C*** POST INCREMENT ***
3330 C
3331 700 IADM(1,KSYS)=24
3332 RETURN
3333 C
3334 C*** PRE DECREMENT ***
3335 C
3336 800 IADM(1,KSYS)=32
3337 C
3338 C*** REGISTER OF (A1) ADDRESSING MODE ***
3339 C
3340 900 JR=ISYM(JPTR+1)
3341 910 IF(JR.GT.7) GO TO 920
3342 C *** ERROR - REGISTER INDIRECT SPECIFIES DATA REGISTER.
3343 CALL ERR(213)
3344 RETURN
3345 920 IADM(2,KSYS)=JR
3346 RETURN
3347 C
3348 C*** IMMEDIATE OPERAND ***
3349 C
3350 1000 IADM(1,KSYS)=60
3351 CALL EXP(37)
3352 C
3353 CALL RANGE(TKNVAL)
3354 1006 IF(INSL.GT.0) GO TO 1010
3355 C *** DETERMINE OPERAND SIZE
3356 INSL=4
3357 IF(ISIZ.NE.128) GO TO 1008
3358 INSL=6
3359 C+++ 16-BIT - GET NEXT 2 BYTES
3360 INS(2)=TKNVA2
3361 1008 INS(3)=TKNVAL
3362 RETURN
3363 C *** SECOND OPERAND FIELD
3364 1010 IF(JNSL.GE.0) GO TO 1190
3365 IADM(3,2)=2
3366 IF(ISIZ.EQ.128) IADM(3,2)=4
3367 INSL=INSL+ IADM(3,2)
3368 C+++ IN CASE 16-BITS GET REST OF #
3369 INS(4)=TKNVA2
3370 INS(5)=TKNVAL
3371 RETURN
3372 C
3373 C*** DISPLACEMENT ***
3374 C
3375 C
3376 1100 CALL EXP(37)
3377 KM=56
3378 KL=2
3379 C*** RELOCATABLE SYMBOL
3380 RTYP=MREL(IOPC)
3381 C
3382 IF(RTYP.LE.0) GO TO 1110
3383 C *** IS EXPRESSION ABSOLUTE?
3384 IF(IADM(4,KSYS).EQ.0) GO TO 1110
3385 C
3386 IF(IADM(7,2).EQ.1.AND.IADM(5,KSYS).GT.0) CALL ERR(231)
3387 K=INSL
3388 IF(K.LT.0) K=2
3389 C*** TKNVAL=TKNVAL - IPC - K
3390 C*** SUBTRACT IPC FROM TKNVAL
3391 CALL SUB(TKNVA2,TKNVAL,IPC2,IPC)
3392 C*** NOW SUBTRACT K
3393 CALL SUB(TKNVA2,TKNVAL,0,K)
3394 KM=58
3395 C*** TEST FOR VALID NEG#
3396 IF(TKNVA2.EQ.-1) GO TO 1120
3397 C
3398 C*** TEST FOR GREATER THAN 2 BYTES INSTEAD OF ONE(32767 NOT 127)
3399 IF(TKNVA2.NE.0) CALL ERR(208)
3400 GO TO 1120
3401 C*** ABSOLUTE SYMBOL, FIND ITS SIZE
3402 1110 CONTINUE
3403 C*** BACK OR FORWARD REF?
3404 IF(IADM(5,KSYS).EQ.0) GO TO 1112
3405 C*** IS LONG OR SHORT FWD REF IN USE - ORG.L?
3406 IF(IADM(7,2).EQ.1) GO TO 1115
3407 C*:: NOT ORG.L, CHECK SIZE OF FORWARD ADDRESS
3408 IF(TKNVA2.EQ.0) GO TO 1120
3409 C*** DON'T GIVE ERROR FOR BCC, IT WILL BE CAUGHT LATER IF VALID ERR.
3410 IF(IOPC.EQ.13) GO TO 1120
3411 C*** VALID NEGATIVE #?
3412 IF(TKNVA2.EQ.-1) GO TO 1120
3413 C*** DC?
3414 IF(IOPC.EQ.4) GO TO 1120
3415 C*** ERROR - FORWARD REFERENCE IS LONG ABSOLUTE
3416 CALL ERR(210)
3417 GO TO 1120
3418 C*** BAKWARDS REF, CHECK SIZE OF VALUE
3419 C*** VALID NEG #?
3420 1112 IF(TKNVA2.EQ.-1) GO TO 1120
3421 C*** CHECK FOR ADDRESS FF8000-FFFFFF
3422 I=MPUAND(TKNVAL,Z8000)
3423 IF(I.EQ.Z8000.AND.TKNVA2.EQ.KCFF) GO TO 1120
3424 IF(TKNVA2.NE.0) GO TO 1115
3425 C*** ADDRESS >$7FFF IS LONG
3426 IF(I.EQ.0) GO TO 1120
3427 1115 KM=57
3428 KL=4
3429 C *** SAVE ADDRESS MODE AND VALUE
3430 1120 IADM(1,KSYS)=KM
3431 IF(INSL.GT.0) GO TO 1130
3432 C *** FIRST FIELD
3433 INSL=KL + 2
3434 C+++ 16-BIT - TKNVA2 IS ALWAYS ZEROED AT START OF SOURCE LINE
3435 C IN CASE CURRENT # IS NOT BIG ENOUGH TOGO THERE
3436 INS(2)=TKNVA2
3437 C
3438 INS(3)=TKNVAL
3439 KOPN=3
3440 RETURN
3441 C
3442 C
3443 C *** SECOND FIELD
3444 1130 IF(JNSL.GE.0) GO TO 1190
3445 C
3446 INSL=INSL + KL
3447 IADM(3,2)=KL
3448 INS(4)=TKNVA2
3449 C
3450 INS(5)=TKNVAL
3451 KOPN=5
3452 RETURN
3453 C
3454 C*** ERROR - INSTRUCTION DOESN'T ALLOW THIS MODE
3455 1190 CALL ERR(234)
3456 C
3457 RETURN
3458 C
3459 C
3460 C
3461 C*** REGISTER FOR 3(A1) ADDRESSING MODE ***
3462 C
3463 1200 JR=ISYM(JPTR+1)
3464 C
3465 C*** IN CASE UJNDEFINEDS ARE PRESENT COUNT MAY BE OFF
3466 IF(INSL.EQ.10.AND.IADM(7,2).EQ.0) INSL=8
3467 C*** SWITCH VALUE TO PRINT IF ORG.L IN SOME CASES
3468 IF(IADM(3,2).EQ.4) IADM(3,2)=2
3469 C*** HAS LONG FORWARD REF BEEN SET?
3470 IF(IADM(1,KSYS).EQ.57) INSL=INSL-2
3471 IF(IADM(1,KSYS).EQ.58) GO TO 1220
3472 C*** ABSOLUTE SYMBOL
3473 IF(TKNVA2.EQ.0) GO TO 1210
3474 C*** VALID NEG #?
3475 IF(TKNVA2.EQ.-1) GO TO 1210
3476 C *** ERROR - 32 BIT DISPLACEMENT
3477 CALL ERR(208)
3478 C*** RESET TO SHORT ADDRESS
3479 IADM(1,KSYS)=56
3480 RETURN
3481 1210 IADM(1,KSYS)=40
3482 GO TO 910
3483 C *** (PC) RELATIVE ADDRESS MODE - USE (PC)+X+D
3484 1220 IADM(1,KSYS)=59
3485 GO TO 1410
3486 C
3487 C*** .L FOR 3(A1.L) ADDRESSING MODE ***
3488 C
3489 1300 IF(TKNSIZ.NE.1) GO TO 1310
3490 C*** ALLOW WORD .W
3491 IF(ITOKEN(1).EQ.LW) RETURN
3492 IF(ITOKEN(1).EQ.LL) GO TO 1310
3493 C *** ERROR - SIZE FOR TAG(A1.L) IS NOT L
3494 CALL ERR(214)
3495 RETURN
3496 1310 IF(IADM(1,KSYS).EQ.48) GO TO 1320
3497 IF(IADM(1,KSYS).EQ.59) GO TO 1320
3498 C *** ERROR - ILLEGAL ADDRESS MODE
3499 CALL ERR(209)
3500 RETURN
3501 1320 INS(KOPN)=INS(KOPN) + 2048
3502 RETURN
3503 C
3504 C*** SECOND REGISTER FOR 3(A1,A2) ADDRESSING MODE ***
3505 C
3506 1400 JR=ISYM(JPTR+1)
3507 IF(IADM(4,KSYS).NE.0) CALL ERR(231)
3508 IADM(1,KSYS)=48
3509 1410 IF(IABS(TKNVAL).GT.128) CALL ERR(208)
3510 INS(KOPN)=ISHFT(JR,12) + MPUAND(TKNVAL,255)
3511 RETURN
3512 C
3513 C*** SECOND REGISTER OF R1-R2 FOR LDM,STM
3514 C
3515 1500 IF(IOPC.EQ.38) GO TO 1510
3516 C *** ERROR - NOT LDM,STM
3517 CALL ERR(227)
3518 RETURN
3519 1510 KR=ISYM(JPTR+1)
3520 IF(JR.GT.KR) GO TO 1530
3521 DO 1520 J=JR,KR
3522 JJ=J
3523 1520 CALL MASK(JJ)
3524 RETURN
3525 1530 DO 1540 J=KR,JR
3526 JJ=J
3527 1540 CALL MASK(JJ)
3528 RETURN
3529 C
3530 C*** 'STRING' OVER 4 BYTES LONG
3531 C
3532 1600 INS(3)=TKNSIZ
3533 RETURN
3534 C
3535 C*** CONSTANT OR VARIABLE OPERAND ***
3536 C
3537 1700 CONTINUE
3538 IADM(4,KSYS)=0
3539 IF(TKNTYP.EQ.24) GO TO 1710
3540 C *** CONSTANT OPERAND
3541 C
3542 IF(TKNTYP.NE.42) GO TO 1730
3543 C*** ASTERISKS
3544 TKNVAL=IPC
3545 C+++ 16-BIT - UPPER BYTE.
3546 TKNVA2=IPC2
3547 IADM(4,KSYS)=IADM(7,1)
3548 GO TO 1730
3549 C *** DEFINED PREVIOUSLY?
3550 1710 IF(JSUC.GT.0) GO TO 1720
3551 C *** INTERNAL ERROR - MISSING SYMBOL
3552 CALL ERR(228)
3553 GO TO 1730
3554 1720 TKNVAL=ISYM(JPTR+1)
3555 KK=ISYM(JPTR)
3556 C+++ 16-BIT - GET M.S.B.
3557 TKNVA2=ISYM(JSUC)
3558 C
3559 C*** IS SYMBOL RELOCATABLE?
3560 IF(MPUAND(KK,7).EQ.1) IADM(4,KSYS)=1
3561 KK=MPUAND(KK,192)
3562 C
3563 C*** UNDEFINED SYMBOL?
3564 IF(KK.NE.0) GO TO 1725
3565 CALL ERR(207)
3566 C*** FORCE LONG ADDR FOR UNDEF A DISPLACEMENT CALC TO AVOID PHASE PROB
3567 KK=64
3568 C*** SET UNDEFINED FLAG
3569 IADM(5,KSYS)=2
3570 1725 CONTINUE
3571 C*** REDEFINED SYMBOL?
3572 IF(KK.EQ.192) CALL ERR(206)
3573 C*** FORWARD REFERENCE?
3574 IF(KK.EQ.64) IADM(5,KSYS)=MPUIOR(IADM(5,KSYS),1)
3575 C*** GIVE OPERAND TO EXP
3576 1730 CALL EXP(22)
3577 RETURN
3578 END
3579 SUBROUTINE MASK(JR)
3580 CC NAM: MASK VER: 1.0 DAT: 12/08/78 CMP: ALL
3581 CC
3582 CC SYS: MACS
3583 CC
3584 CC ENT: JR - MASK TO BE SHIFTED
3585 CC
3586 CC RTN: JR - N/C
3587 CC
3588 CC FNC: FORMAT REGISTER BIT MASK FOR LDM,STM
3589 CC
3590 CC REV: N/A
3591 CC
3592 CCALLS ISHFT-MPUIOR
3593 CC
3594 C*
3595 IMPLICIT INTEGER (A-Z)
3596 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
3597 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
3598 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
3599 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
3600 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
3601 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
3602 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
3603 C
3604 IB=ISHFT(1,JR)
3605 IADM(6,1)=MPUIOR(IADM(6,1),IB)
3606 C
3607 KR=15 -JR
3608 IB=ISHFT(1,KR)
3609 IADM(6,2)=MPUIOR(IADM(6,2),IB)
3610 RETURN
3611 END
3612 SUBROUTINE MOD2
3613 CC NAM: MOD2 VER: 1.0 DAT: 12/08/78 CMP: PDP-11
3614 CC
3615 CC SYS: MACS
3616 CC
3617 CC ENT: N/A
3618 CC
3619 CC RTN: N/A
3620 CC
3621 CC FNC: FORCE TO AN EVEN WORD BOUNDARY
3622 CC
3623 CC REV: N/A
3624 CC
3625 CCALLS MPUAND-ADD
3626 CC
3627 C*
3628 IMPLICIT INTEGER (A-Z)
3629 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
3630 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
3631 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
3632 C
3633 IF(MPUAND(IPC,1).EQ.0) RETURN
3634 C*** IPC=IPC+1 - ADD ALL 24 BITS
3635 CALL ADD(IPC2,IPC,0,1)
3636 IF(LPTR.EQ.0) RETURN
3637 ISYM(LPTR+1)=IPC
3638 I=ITOKEN(69)
3639 ISYM(I)=IPC2
3640 C*** FORWARD REF IS ON ODD BYTE
3641 CALL ERR(230)
3642 RETURN
3643 END
3644 SUBROUTINE OUTPUT
3645 CC NAM: OUTPUT VER: 1.0 DAT: 12/08/78 CMP: PDP-11
3646 CC
3647 CC SYS: MACS
3648 CC
3649 CC ENT: N/A
3650 CC
3651 CC RTN: N/C
3652 CC
3653 CC FNC: OUTPUT THE CURRENT INSTRUCTION.
3654 CC
3655 CC REV: N/A
3656 CC
3657 CCALLS BUILD1-BUILD2-PAGE-PCOUNT-OBJ-MPUCA1-MPUAND-ERR-MOD2
3658 CC HEXASC
3659 CC
3660 CC ERROR NUMBERS CALLED: 230
3661 CC
3662 C*
3663 IMPLICIT INTEGER (A-Z)
3664 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
3665 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
3666 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
3667 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
3668 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
3669 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
3670 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
3671 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW
3672 EQUIVALENCE(INS(1),INS1)
3673 DIMENSION KRDOUT(95)
3674 DIMENSION INS1A(4),INS2(4),INS3(4),INS4(4),INS5(4),IPC22(2),
3675 & IPC1(4)
3676 DATA LSPHEX/' ' /
3677 C*** PUT OUT INSTRUCTION OR SPECIAL PRINT.
3678 C*** REGULAR INSTRUCTION
3679 1 CONTINUE
3680 C
3681 C*** ARE WE IN A MACRO DEFINITION?
3682 IF(ICOL.EQ. -1) INSL=0
3683 C... *** FINISH BUILDING THE INSTRUCTION.
3684 IF(IPASS.GE.0) GO TO 3
3685 C*** ARE WE IN IFXX?
3686 IF(ICOL.LT.0) GO TO 17
3687 CALL BUILD1
3688 17 CONTINUE
3689 C
3690 C*** DEBUG
3691 C
3692 I=2
3693 CALL DEBUG(I)
3694 IF(I.EQ.1) GO TO 5
3695 C*** END DEBUG
3696 18 IF(JERR.GT.0) GO TO 5
3697 GO TO 900
3698 3 CONTINUE
3699 C*** ARE WE IN IFXX?
3700 IF(ICOL.LT.0) GO TO 5
3701 CALL BUILD2
3702 CALL OBJ
3703 5 II=1
3704 C*** HAS THE LINE ALREADY BEEN PRINTED?
3705 IF(KARD1(1).EQ.0) GO TO 1000
3706 KD1BCT=LLEN-25
3707 C*** NOLIST ON?
3708 6 IF(LIST.EQ.0) GO TO 500
3709 C*** SKIP ADJUSTMENT IF REMARK
3710 IF(KARD1(1).EQ.42) GO TO 8000
3711 C*** SHOULD OUTPUT BE PRETTILY ADJUSTED??
3712 IF(LLENSW.EQ.0) GO TO 8000
3713 C*** ADJUST OUTPUT TO SPECIFIC COLUMNS
3714 C*** IS THERE A LABEL?
3715 DO 7000 I=1,KD1BCT
3716 7000 KRDOUT(I)=LSP
3717 I=1
3718 IPOS=1
3719 IF(KARD1(1).EQ.LSP) GO TO 7050
3720 DO 7010 I=1,31
3721 KRDOUT(I)=KARD1(I)
3722 IPOS=I+1
3723 IF(KARD1(I).EQ.LSP) GO TO 7050
3724 7010 CONTINUE
3725 C*** IF HERE 31ST CHAR NOT BLANK
3726 KRDOUT(32)=LSP
3727 C*** FIND END OF LABEL
3728 J=I
3729 DO 7020 I=J,KD1BCT
3730 IF(KARD1(I).EQ.LSP) GO TO 7050
3731 7020 CONTINUE
3732 GO TO 8100
3733 7050 CONTINUE
3734 C*** FIND MNEMONIC
3735 J=I+1
3736 DO 7100 I=J,KD1BCT
3737 IF(KARD1(I).NE.LSP) GO TO 7150
3738 7100 CONTINUE
3739 GO TO 8100
3740 C*** MNEMONIC
3741 7150 CONTINUE
3742 IF(IPOS.LT.10) IPOS=10
3743 DO 7200 K=IPOS,KD1BCT
3744 KRDOUT(K)=KARD1(I)
3745 IF(KARD1(I).EQ.LSP) GO TO 7250
3746 I=I+1
3747 7200 CONTINUE
3748 GO TO 8100
3749 7250 CONTINUE
3750 IPOS=K+1
3751 C*** OPCODE
3752 C*** REMOVE ANY EXCESS BLANKS BETWEEN MNEMONIC & OPERAND.
3753 DO 7260 K=I,KD1BCT
3754 IF(KARD1(K).NE.LSP) GO TO 7280
3755 7260 CONTINUE
3756 GO TO 8100
3757 7280 I=K
3758 J=0
3759 IF(IPOS.LT.18) IPOS=18
3760 DO 7300 K=IPOS,KD1BCT
3761 IF(KARD1(I).EQ.IEOT) GO TO 8100
3762 C*** CHECK FOR ' '
3763 IF(KARD1(I).EQ.39) J=J+1
3764 C*** IS IT 1ST '?
3765 IF(MOD(J,2).NE.0) GO TO 7290
3766 IF(KARD1(I).EQ.LSP) GO TO 7350
3767 7290 KRDOUT(K)=KARD1(I)
3768 I=I+1
3769 7300 CONTINUE
3770 GO TO 8100
3771 7350 CONTINUE
3772 C*** REMARKS
3773 C*** REMOVE ANY EXCESS BLANKS BETWEEN OPERAND AND REMARKS.
3774 DO 7360 J=I,KD1BCT
3775 IF(KARD1(J).NE.LSP) GO TO 7380
3776 7360 CONTINUE
3777 GO TO 8100
3778 7380 CONTINUE
3779 I=J
3780 IF(J.LT.40) J=40
3781 IF(K.GT.40) J=K+1
3782 DO 7400 K=J,KD1BCT
3783 IF(KARD1(I).EQ.IEOT) GO TO 8100
3784 KRDOUT(K)=KARD1(I)
3785 I=I+1
3786 7400 CONTINUE
3787 GO TO 8100
3788 8000 DO 8 J=1,KD1BCT
3789 8 KRDOUT(J)=KARD1(J)
3790 8100 CONTINUE
3791 C WRITE(LUOT,9999) INSL,(INS(I),I=1,5)
3792 9999 FORMAT(' OUTPUT-INSL,INS=',I3,5O8)
3793 CALL HEXASC(INS(1),INS1A,4,1)
3794 CALL HEXASC(INS(2),INS2,4,1)
3795 CALL HEXASC(INS(3),INS3,4,1)
3796 CALL HEXASC(INS(4),INS4,4,1)
3797 CALL HEXASC(INS(5),INS5,4,1)
3798 CALL HEXASC(IPC2,IPC22,2,1)
3799 CALL HEXASC(IPC,IPC1,4,1)
3800 IF(INSL.EQ.0) GO TO 10
3801 IF(INSL.LT.0) GO TO 20
3802 C*** 20 = SPC
3803 IF(INSL.EQ.20) GO TO 950
3804 GO TO(100,200,200,400,400,600,600,880,80),INSL
3805 C*** 5 WORD INSTRUCTION
3806 WRITE(LUOT,999) KD1LNO,IPC22,IPC1,INS1A,INS2,INS3,INS4,INS5
3807 & , (KRDOUT(J),J=1,KD1BCT)
3808 GO TO 690
3809 C*** FOUR WORD INSTRUCTION
3810 880 IF(IADM(3,2).EQ.2) GO TO 770
3811 C... *** LONG INTEGER IN INS(5)
3812 WRITE(LUOT,2999) KD1LNO,IPC22,IPC1,INS1A,INS3,INS4,INS5,
3813 & (KRDOUT(J),J=1,KD1BCT)
3814 GO TO 690
3815 C.. *** SHORT INTEGER IN INS(5)
3816 770 WRITE(LUOT,1999) KD1LNO,IPC22,IPC1,INS1A,INS2,INS3,INS5,
3817 & (KRDOUT(J),J=1,KD1BCT)
3818 GO TO 690
3819 C*** THREE WORD INSTRUCTION
3820 600 IF(IADM(3,2).EQ.0) GO TO 660
3821 C... *** SHORT INTEGER IN INS(5)
3822 WRITE(LUOT,1998) KD1LNO,IPC22,IPC1,INS1A,INS3,INS5,
3823 & (KRDOUT(J),J=1,KD1BCT)
3824 GO TO 700
3825 C... *** NO INTEGER IN INS(5) - INS(3) ONLY
3826 660 WRITE(LUOT,998) KD1LNO,IPC22,IPC1,INS1A,INS2,INS3,
3827 & (KRDOUT(J),J=1,KD1BCT)
3828 GO TO 700
3829 C
3830 500 CONTINUE
3831 IF(INSL.EQ.0) GO TO 800
3832 IF(INSL.LT.0) GO TO 540
3833 C*** CHECK FOR SPC
3834 IF(INSL.EQ.20) GO TO 980
3835 GO TO (800,700,700,700,700,700,700,700,78),INSL
3836 GO TO 700
3837 540 IF(INSL.NE.-1) GO TO 35
3838 GO TO 800
3839 C*** TWO WORD INSTRUCTION
3840 400 WRITE(LUOT,997) KD1LNO,IPC22,IPC1,INS1A,INS3,
3841 & (KRDOUT(J),J=1,KD1BCT)
3842 GO TO 700
3843 C*** ONE WORD INSTRUCTION
3844 200 WRITE(LUOT,996) KD1LNO,IPC22,IPC1,INS1A,(KRDOUT(J),J=1,KD1BCT)
3845 GO TO 700
3846 C*** ONE BYTE VALUE
3847 100 WRITE(LUOT,995) KD1LNO,IPC22,IPC1,INS3(3),INS3(4),
3848 & (KRDOUT(J),J=1,KD1BCT)
3849 GO TO 800
3850 80 CONTINUE
3851 C*** CONVERT VALUE TO ASCII
3852 CALL HEXASC(ITOKEN(1),INS2,2,1)
3853 WRITE(LUOT,995) KD1LNO,IPC22,IPC1,INS2(1),INS2(2),
3854 & (KRDOUT(J),J=1,KD1BCT)
3855 CALL PAGE(1)
3856 78 INSL=1
3857 IF(INS1.EQ.1) GO TO 75
3858 DO 70 J=2,INS1
3859 CALL PCOUNT
3860 IF(LIST.EQ.0) GO TO 70
3861 C*** IS OPTION G- OR G?
3862 IF(LUDI.EQ.0) GO TO 70
3863 C*** CONVERT HEX TO ASCII
3864 CALL HEXASC(IPC,IPC1,4,1)
3865 CALL HEXASC(IPC2,IPC22,2,1)
3866 CALL HEXASC(ITOKEN(J),KRDOUT,2,1)
3867 WRITE(LUOT,991) IPC22,IPC1,KRDOUT(1),KRDOUT(2)
3868 CALL PAGE(1)
3869 70 CONTINUE
3870 75 CALL PCOUNT
3871 C*** DON'T 0 MOD 2 IF DC.B
3872 LPTR=0
3873 IF(ISIZ.EQ.0) GO TO 72
3874 I=2
3875 IF(ISIZ.EQ.128) I=4
3876 C*** IF NOT 0 MOD 2 FOR .W OR 0 MOD 4 FOR .L PUT OUT FIILER OF 0
3877 IF(INS1.LT.5) INS1=INS1+4
3878 J=MOD(INS1,I)
3879 IF(J.EQ.0) GO TO 72
3880 I=I-J
3881 DO 71 J=1,I
3882 CALL PNCH(4,0)
3883 IF(LIST.EQ.0) GO TO 71
3884 C*** IS OPTION G- OR G?
3885 IF(LUDI.EQ.0) GO TO 71
3886 C*** 'LPTR' MUST = 0
3887 CALL HEXASC(IPC,IPC1,4,1)
3888 CALL HEXASC(IPC2,IPC22,2,1)
3889 CALL HEXASC(LPTR,KRDOUT,2,1)
3890 WRITE(LUOT,991) IPC22,IPC1,KRDOUT(1),KRDOUT(2)
3891 CALL PAGE(1)
3892 71 CALL PCOUNT
3893 72 KARD1(1)=0
3894 INSL=0
3895 GO TO 800
3896 C*** PSUEDO OP
3897 10 WRITE(LUOT,994) KD1LNO,(KRDOUT(J),J=1,KD1BCT)
3898 GO TO 800
3899 C*** PSEUDO OP WITH A VALUE
3900 20 IF(INSL.NE.-1) GO TO 30
3901 C... *** PRINT W/O PC
3902 WRITE(LUOT,993) KD1LNO,INS2,INS3,(KRDOUT(J),J=1,KD1BCT)
3903 GO TO 800
3904 C... *** DS - PRINT WITH PC
3905 30 WRITE(LUOT,997) KD1LNO,IPC22,IPC1,INS2,INS3,(KRDOUT(J),J=1,KD1BCT)
3906 35 CALL ADD(IPC2,IPC,INS(2),INS(3))
3907 INSL=0
3908 GO TO 800
3909 999 FORMAT(I5,1X,2A1,4A1,1X,12A1/16X,8A1,1X,100A1)
3910 1999 FORMAT(I5,1X,6A1,1X,12A1/16X,4A1,5X,100A1)
3911 2999 FORMAT(I5,1X,6A1,1X,8A1/16X,8A1,1X,100A1)
3912 1998 FORMAT(I5,1X,6A1,1X,12A1,1X,100A1)
3913 998 FORMAT(I5,1X,6A1,1X,12A1,1X,100A1)
3914 997 FORMAT(I5,1X,6A1,1X,8A1,5X,100A1)
3915 996 FORMAT(I5,1X,6A1,1X,4A1,9X,100A1)
3916 995 FORMAT(I5,1X,6A1,1X,2A1,11X,100A1)
3917 994 FORMAT(I5,21X,100A1)
3918 993 FORMAT(I5,8X,8A1,5X,100A1)
3919 991 FORMAT(6X,6A1,1X,2A1)
3920 9920 FORMAT(A1)
3921 C*** INCREMENT LINE COUNT BY 2
3922 690 II=2
3923 C*** ASSURE EVEN BOUNDARY
3924 700 IF(MPUAND(IPC,1).EQ.0) GO TO 800
3925 CALL ERR(230)
3926 CALL PNCH(4,0)
3927 CALL MOD2
3928 C*** PRINT THE ERRORS IF ANY
3929 800 CALL ERR(0)
3930 IF(KARD1(1).NE.0) CALL PAGE(II)
3931 C*** COMPUTE NEW PC ADDRESS
3932 C
3933 900 KARD1(1)=0
3934 IF(INSL.LE.0) RETURN
3935 C*** INCREMENT THE P-COUNTER.
3936 CALL PCOUNT
3937 RETURN
3938 C*** SPC ***
3939 950 CONTINUE
3940 I=INS(3)
3941 C
3942 DO 960 J=1,I
3943 CALL PAGE(1)
3944 960 WRITE(LUOT,9920) LSPHEX
3945 C
3946 980 KARD1(1)=0
3947 INSL=0
3948 GO TO 800
3949 1000 CONTINUE
3950 C*** IF DC FINISH OUTPUT IF REQUIRED & INCREMENT THE PCOUNT
3951 IF(IOPC.NE.4) GO TO 800
3952 IF(INSL.EQ.9.AND.LUDI.EQ.0) GO TO 78
3953 IF(LUDI.EQ.0) GO TO 800
3954 KARD1(1)=LSP
3955 KD1BCT=1
3956 GO TO 6
3957 END
3958 SUBROUTINE BUILD2
3959 CC NAM: BUILD2 VER: 1.0 DAT: 12/08/78 CMP: 16-BIT
3960 CC
3961 CC SYS: MACS
3962 CC
3963 CC ENT: N/A
3964 CC
3965 CC RTN: N/A
3966 CC
3967 CC FNC: BUILD THE INSTRUCTION FOR PASS TWO
3968 CC
3969 CC THIS ROUTINE IS 16-BIT DEPENDENT DUE TO THE
3970 CC 24-BIT ADDRESS WHICH MUST BE MANIPULATED.
3971 CC
3972 CC REV: N/A
3973 CC
3974 CCALLS ERR-MOD2-ISHFT-MPUAND-MPUIOR-PAGE
3975 CC
3976 CC ERROR NUMBERS CALLED: 205,208,209,210,212,213,215,216,217,218
3977 CC 220,223,229,232,233,234,236,238
3978 C*
3979 IMPLICIT INTEGER (A-Z)
3980 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
3981 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
3982 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
3983 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
3984 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
3985 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
3986 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
3987 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
3988 COMMON /A/ NXSYM1,LIST1,MASK2
3989 DIMENSION IMCD(6),NIMM(40)
3990 EQUIVALENCE(IADM(4,1),SYMTYP),(IADM(5,1),LFRF)
3991 EQUIVALENCE (INS(1),INS1)
3992 C ORI SUBI EORI CMPI ANDI ADDI
3993 DATA IMCD/ 0000, 1024, 2560, 3072, 512, 1536/
3994 C
3995 C*** THE FOLLOWING DATA STATEMENTS DEFINE HEX CONSTANTS
3996 C*** LOCAL TO THIS ROUTINE.
3997 C
3998 DATA IH4E60/O47140/,IH40C0/O40300/
3999 DATA IH44C0/O42300/,IH46C0/O43300/
4000 DATA IH48C0/O44300/
4001 C
4002 C*** END HEX DATA CONSTANTS.
4003 C
4004 C*** 01-20 NO IMM - 2ND ROW IS 21 04
4005 DATA NIMM/
4006 & 0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,
4007 & 1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0/
4008 C
4009 C*** HEX 7000
4010 DATA I7KH/O70000/
4011 DATA IHA0C0/O120300/
4012 DATA IH5K/O50000/,IH5100/O50400/
4013 DATA IH4100/O40400/
4014 DATA ZB001/O130001/,ZD001/O150001/,ZD002/O150002/,Z9001/O110001/
4015 DATA Z9002/O110002/,ZF000/O170000/,Z8000/O100000/
4016 DATA ZB140/O130500/
4017 DATA CMP/0/,MASK2/0/
4018 C*** ERROR 220 ???
4019 C***
4020 IF(IOPC.EQ.0) GO TO 45
4021 C*** CHECK FOR DC WITH A LABEL, IS SO SKIP ERR 220 CHECK
4022 IF(IOPC.EQ.4) GO TO 50
4023 IF(IOPC.EQ.5) GO TO 50
4024 C... *** NOT SET,EQU ASSURE NO PHASE ERROR
4025 IF(LPTR.EQ.0) GO TO 40
4026 IF(ISYM(LPTR+1).NE.IPC) CALL ERR(220)
4027 C*** PERFORM ACTIONS FOR THE OPCODE CLASS
4028 40 IF(IOPC.GT.0) GO TO 50
4029 45 INSL=0
4030 RETURN
4031 50 IF(INSL.LT.0) INSL=2
4032 GO TO(100, 200,9223,400,500, 600, 700, 800, 900, 950,
4033 & 1100,1100,1300,1400,1500, 950, 950,1800,1900),IOPC
4034 J=IOPC-19
4035 GO TO(2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,
4036 & 9223,3200,9223,3400,3500,3600,3700,3800),J
4037 J=J-19
4038 GO TO(3900),J
4039 GO TO 9223
4040 C
4041 C*** PSEUDO OPS WITHOUT OPERANDS
4042 100 CONTINUE
4043 GO TO(110,120,130,140,150,160,170,180,190,195,196,197),INS1
4044 C... *** END
4045 110 IPASS=1
4046 120 RETURN
4047 C*** PAGE
4048 130 CONTINUE
4049 CALL PAGE(84)
4050 RETURN
4051 C
4052 C*** LIST
4053 140 LIST=1
4054 145 KARD1(1)=0
4055 RETURN
4056 C
4057 C*** NOLIST ***
4058 150 LIST=0
4059 RETURN
4060 C*** TTL
4061 160 CALL PAGE(80)
4062 GO TO 145
4063 C*** NO PAGE(NOP)
4064 170 CONTINUE
4065 NOP=0
4066 RETURN
4067 C
4068 C*** NOOBJ -NO OBJECT OUTPUT, SET IN PASS 1
4069 C
4070 180 RETURN
4071 C
4072 C*** CMPL - CMP DESTINATION,SOURCE
4073 C
4074 190 CMP=1
4075 RETURN
4076 C
4077 C*** CMPR - CMP S,D
4078 C
4079 195 CMP=0
4080 RETURN
4081 C
4082 C*** 'G' DIRECTIVE
4083 C
4084 196 LUDI=1
4085 RETURN
4086 C
4087 C*** 'MASK2' DIRECTIVE
4088 C
4089 197 MASK2=1
4090 RETURN
4091 C
4092 C*** OP CODES WITHOUT OPERANDS
4093 200 RETURN
4094 C
4095 C*** DC
4096 400 GO TO 540
4097 C
4098 C*** PSEUDO OPS WITH OPERANDS
4099 500 IF(IADM(1,1).EQ.56) GO TO 505
4100 IF(IADM(1,1).NE.57) CALL ERR(234)
4101 505 INSL=-1
4102 GO TO(510,520,520,540,508,560,570),INS1
4103 GO TO 9223
4104 C*** RORG
4105 508 IADM(7,1)=1
4106 GO TO 512
4107 C... *** ORG AND RORG
4108 510 IADM(7,1)=0
4109 512 IPC=INS(3)
4110 C+++ 16-BIT - GET MOST SIGNIFICANT BYTE
4111 IPC2=INS(2)
4112 IADM(7,2)=0
4113 IF(ISIZ.EQ.128) IADM(7,2)=1
4114 CALL PNCH(3,IPC)
4115 RETURN
4116 C... *** EQU
4117 520 IF(LPTR.GT.0) GO TO 522
4118 C... *** ERROR - NO LABEL ON STATEMENT
4119 CALL ERR(229)
4120 RETURN
4121 522 ISYM(LPTR)=MPUAND(ISYM(LPTR),192) + SYMTYP
4122 ISYM(LPTR+1)=INS(3)
4123 C
4124 C*** IS THIS "SET"?
4125 IF(INS(1).NE.2)
4126 & ISYM(LPTR)=128
4127 C*** SAVED IN 'ACT2'
4128 KK=ITOKEN(69)
4129 IF(KK.EQ.0) RETURN
4130 ISYM(KK)=INS(2)
4131 RETURN
4132 C... *** DC AND DS
4133 540 INSL=1
4134 IF(ISIZ.EQ.0) GO TO 545
4135 C*** IF PCOUNT ODD, PUT OUT FILL BYTE(A ZERO) IN 'S' RECORD
4136 IF(MPUAND(IPC,1).NE.0) CALL PNCH(4,0)
4137 CALL MOD2
4138 INSL=2
4139 IF(ISIZ.EQ.128) INSL=4
4140 545 IF(IOPC.NE.4) GO TO 550
4141 C... *** DC
4142 C
4143 INS1=INS(3)
4144 IF(IADM(1,1).GE.0) GO TO 547
4145 C*** INSL=9 TELLS OUTPUT TO PRINT STRING BYTE AT A TIME
4146 INSL=9
4147 C... *** 'STRING' OVER 4 BYTES
4148 C
4149 DO 546 J=1,INS1
4150 CALL PNCH(4,ITOKEN(J))
4151 546 CONTINUE
4152 RETURN
4153 C*** NUMERIC TYTE,WORD, OR LONG DC CONSTANT
4154 547 IF(INSL.EQ.4) GO TO 548
4155 C... *** BYTE OR WORD - ASSURE NOT TOO BIG
4156 C
4157 CALL RANGE(INS(3))
4158 RETURN
4159 C
4160 C+++ 16-BIT - GET 1ST 2 BYTES
4161 548 INS(1)=TKNVA2
4162 RETURN
4163 C... *** DS
4164 C*** INS(3)=INS(3)*INSL
4165 550 CONTINUE
4166 CALL MUL(INS(2),INS(3),0,INSL)
4167 555 INSL=-2
4168 C*** IPC=IPC+INS(3)
4169 CALL PNCH(5,INS(3))
4170 RETURN
4171 C
4172 C*** FAIL
4173 560 CALL ERR(INS(3))
4174 RETURN
4175 C*** SPC ***
4176 570 CONTINUE
4177 INSL=20
4178 RETURN
4179 C
4180 C*** LINK/UNLK - ADDRESS REGISTER TO BITS 2-0
4181 600 IF(IADM(1,1).NE.8) GO TO 9213
4182 C*** 2 BYTE LINK INSTRUCTION ILLEGAL
4183 IF(INSL.EQ.2.AND.INS(1).EQ.20048) GO TO 12340
4184 C*** CHECK FOR UNLK - 20056 = $4E58
4185 IF(INS(1).EQ.20056) INSL=2
4186 INS(1)=INS(1)+IADM(2,1)-8
4187 RETURN
4188 C
4189 C*** SWAP - DATA REGISTER TO BITS 2-0
4190 700 IF(IADM(1,1).NE.0) GO TO 9215
4191 INS(1)=INS(1)+IADM(2,1)
4192 RETURN
4193 C
4194 C*** TRAP - ESTABLISH DISPLACEMENT IN BITS 3-0
4195 800 INSL=2
4196 IF(IADM(1,1).EQ.60) IADM(1,1)=56
4197 IF(IADM(1,1).NE.56) GO TO 9209
4198 IF(INS(3).GT.15) GO TO 9210
4199 IF(INS(3).LT.0) GO TO 9216
4200 INS(1)=INS(1)+INS(3)
4201 RETURN
4202 C
4203 C*** ABS/CLR/NEG/NOT/TST - BUILD EA
4204 C
4205 900 INS(1)=INS(1)+ISIZ
4206 C*** CHECK FOR ADDRESS REG
4207 950 IF(IADM(1,1).EQ.8) GO TO 9215
4208 C*** *** ERROR IF IMMEDIATE MODE
4209 IF(IADM(1,1).GT.57.AND.IADM(1,1).LT.61) GO TO 9209
4210 GO TO 8300
4211 C
4212 C*** PEA-JSR-JMP
4213 C
4214 1100 CONTINUE
4215 C*** PEA (AN)+ AND PEA -(AN) ILLEGAL, CHECK FOR THEM
4216 IF(IADM(1,1).EQ.16) GO TO 8300
4217 IF(IADM(1,1).LT.40) GO TO 9209
4218 IF(IADM(1,1).EQ.60) GO TO 9209
4219 GO TO 8300
4220 C
4221 C*** BCC
4222 C
4223 1300 IOFS=INS(3) - IPC - 2
4224 C
4225 MAG=IABS(IOFS)
4226 C*** ALLOW ABSOLUTE ADDRESS ONLY
4227 IF(IADM(1,1).LT.56) CALL ERR(234)
4228 C*** IN CASE BIT 16 SET INSTRUCTION TO LONG, RESET
4229 IF(INSL.EQ.6) INSL=4
4230 C
4231 IF(ISIZ.NE.0) GO TO 1310
4232 C*** FORCE SHORT FORM
4233 IF(MAG.GT.127) CALL ERR(208)
4234 GO TO 1320
4235 1310 IF(LFRF.NE.0) GO TO 1330
4236 C... *** BACKWARD REFERENCE
4237 IF(MAG.GT.127) GO TO 1330
4238 C... *** USE SHORT FORM
4239 1320 INS(1)=INS(1) + MPUAND(IOFS,255)
4240 INSL=2
4241 C*** IF OFFSET IS ZERO IT WILL CAUSE HARDWARE TO EXPECT LONG BRANCH AND
4242 C*** USE NEXT 2 BYTES FOR OFFSET SO FLAG AS ERROR. THIS IS CAUSED BY
4243 C*** A BRA TO NEXT INSTRUCTION.
4244 IF(IOFS.EQ.0) GO TO 9208
4245 RETURN
4246 C... *** USE LONG FORMAT
4247 1330 IF(MAG.GT.32767) CALL ERR(208)
4248 INS(3)=IOFS
4249 RETURN
4250 C
4251 C*** NEGX
4252 1400 GO TO 900
4253 C
4254 C*** EXT
4255 1500 IF(ISIZ.EQ.0) GO TO 9217
4256 C
4257 IF(ISIZ.EQ.128) INS(1)=IH48C0
4258 INS(1)=MPUIOR(INS(1),IADM(2,1))
4259 IF(IADM(1,1).EQ.8) CALL ERR(215)
4260 RETURN
4261 C
4262 C*** CONDITIONAL ASSEMBLY
4263 1800 INSL=0
4264 INS1=INS(1)
4265 GO TO(1810,1820),INS1
4266 C... *** EQ
4267 1810 IF(INS(3).NE.0) GO TO 1890
4268 IF(INS(2).NE.0) GO TO 1890
4269 RETURN
4270 C... *** NE
4271 1820 IF(INS(3).EQ.0.AND.INS(2).EQ.0) GO TO 1890
4272 RETURN
4273 C... *** SKIP TO ENDC
4274 1890 ICOL=-2
4275 RETURN
4276 C
4277 C*** PAGE LENGTH(PLEN) - LINE LENGTH(LLEN)
4278 C
4279 1900 CONTINUE
4280 C*** IS IT PLEN?
4281 IF(INS1.EQ.2) GO TO 1980
4282 C*** CHECK FOR NEW MASK SET - STOP
4283 IF(INS1.EQ.1) GO TO 1910
4284 INSL=4
4285 IF(IADM(1,1).NE.60) CALL ERR(232)
4286 RETURN
4287 1910 CONTINUE
4288 C*** LLEN
4289 LLENSW=1
4290 LLEN=INS(3)
4291 IF(LLEN.GT.120) LLEN=120
4292 IF(LLEN.LT.26) LLEN=26
4293 INSL=0
4294 RETURN
4295 C*** PLEN
4296 1980 IPLEN=INS(3)
4297 RETURN
4298 C*** MULTIPLY,DIVIDE
4299 2000 ISIZ=0
4300 GO TO 8110
4301 C
4302 C*** ADD/SUB PROCESSING
4303 C
4304 C... *** TEST FOR IMMEDIATE SOURCE
4305 2100 CONTINUE
4306 C*** BYTE ADD ON AN ILLEGAL
4307 IF(IADM(1,2).EQ.8.AND.ISIZ.EQ.0) GO TO 9217
4308 C*** ADD.B AN,DN ILLEGAL
4309 IF(IADM(1,1).EQ.8.AND.ISIZ.EQ.0) GO TO 9217
4310 C*** DESINATION PC REL & PC REL + INDEX ILLEGAL
4311 IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
4312 C*** CHECK FOR ADDI/SUBI - IF SO SKIP QUICK
4313 IF(INS(1).EQ.ZD001.OR.INS(1).EQ.Z9001) GO TO 6980
4314 C*** IF ADDQ/SUBQ FORCE IT
4315 IF(INS(1).EQ.IH5K.OR.INS(1).EQ.IH5100) GO TO 2108
4316 C*** ADDA/SUBA?
4317 IF(INS(1).EQ.ZD002.OR.INS(1).EQ.Z9002) GO TO 2125
4318 IF(IADM(1,1).NE.60) GO TO 2120
4319 C... *** POSSIBLE QUICK MODE?
4320 IF(INS(3).LE.0) GO TO 2110
4321 IF(INS(3).GT.8) GO TO 2110
4322 C*** CHECK FORWARD REF CANNOT BE 'Q'
4323 IF(LFRF.GT.0.AND.IADM(5,2).GT.0) GO TO 2110
4324 IF(LFRF.GT.0.AND.IADM(1,2).LT.56) GO TO 2110
4325 C... *** QUICK MODE
4326 2105 INSL=INSL - 2
4327 IF(ISIZ.EQ.128) INSL=INSL - 2
4328 IF(INS(3).GT.8) GO TO 9210
4329 KK=IH5K
4330 C*** IH5100=$5100
4331 IF(INS(1).EQ.IHEX9K.OR.INS(1).EQ.IH5100) KK=IH5100
4332 C
4333 INS(1)=ISHFT(INS(3),9) + ISIZ
4334 INS(1)=MPUIOR(INS(1),KK)
4335 IADM(3,2)=0
4336 INS(3)=INS(5)
4337 C*** INCASE LONG WORD
4338 INS(2)=INS(4)
4339 GO TO 8600
4340 C*** ADDQ/SUBQ MUST BE IMM
4341 2108 IF(IADM(1,1).NE.60) CALL ERR(234)
4342 GO TO 2105
4343 C... *** USE IMMEDIATE OP-CODE?
4344 2110 IF(IADM(1,2).NE.8) GO TO 7000
4345 C... *** CREATE MODE FIELD
4346 2120 IF(IADM(1,2).EQ.0) GO TO 8110
4347 IF(IADM(1,2).NE.8) GO TO 2130
4348 C... *** SINK IS A REGISTER - ASSURE NOT BYTE
4349 IF(ISIZ.EQ.0) GO TO 9217
4350 2125 ISIZ=ISIZ*2
4351 C*** DN AS DEST INVALID
4352 IF(IADM(1,2).EQ.0) GO TO 9213
4353 C*** ADDA/SUBA INST.
4354 INS(1)=MPUAND(INS(1),ZF000)
4355 C***
4356 INS(1)=INS(1) + MPUIOR(ISIZ,192)
4357 GO TO 8210
4358 C... *** SINK TO MEMORY - ASSURE SOURCE IS D REGISTER
4359 2130 ISIZ=ISIZ+256
4360 GO TO 8400
4361 C
4362 C*** AND,OR
4363 C
4364 C
4365 2200 IF(IADM(1,1).EQ.8) GO TO 9215
4366 IF(IADM(1,1).NE.0) GO TO 2310
4367 C*** POSSIBLE D->EA
4368 IF(IADM(1,2).EQ.0) GO TO 8100
4369 IF(IADM(1,2).EQ.8) GO TO 9215
4370 ISIZ=MPUIOR(ISIZ,256)
4371 GO TO 8400
4372 C
4373 C*** EOR
4374 C*** 8192 = $2000
4375 2300 IF(IADM(1,1).NE.60) GO TO 8400
4376 C*** IMMEDIATE MODE
4377 INS(1)=8192
4378 C... *** TEST FOR CCR/SR DESTINATION
4379 2310 IF(IADM(1,2).EQ.64) GO TO 2320
4380 C... *** NOT CCR/SR - TRY IMM MODE
4381 IF(IADM(1,1).EQ.60) GO TO 7000
4382 GO TO 8100
4383 C... *** CCR/SR DESTINATION - ASSURE IMMEDIATE
4384 2320 IF(IADM(1,1).NE.60) CALL ERR(232)
4385 C... ***CREATE IMM BIT PATTERM
4386 KK=ISHFT(INS(1),-12)
4387 KK=MPUAND(KK,7)
4388 INS(1)=IMCD(KK+1) + IADM(2,2)
4389 RETURN
4390 C
4391 C*** CMP
4392 C*** SWITCH INFO ON CMP
4393 2380 KK=IADM(1,1)
4394 IADM(1,1)=IADM(1,2)
4395 IADM(1,2)=KK
4396 KK=IADM(2,1)
4397 IADM(2,1)=IADM(2,2)
4398 IADM(2,2)=KK
4399 C*** IF 6 OR MORE BYTE INST, SWITCH 'INS' ALSO
4400 IF(INSL.LT.6) GO TO 2390
4401 IF(IADM(1,1).LT.40) GO TO 2390
4402 KK=INS(2)
4403 INS(2)=INS(4)
4404 INS(4)=KK
4405 KK=INS(3)
4406 INS(3)=INS(5)
4407 INS(5)=KK
4408 2390 GO TO (2406,2620,2720),I
4409 C... *** IS COMPARE WITH A REGISTER?
4410 2400 CONTINUE
4411 C*** IS IT CMP S,D?
4412 I=1
4413 IF(CMP.EQ.0) GO TO 2380
4414 C*** CMPA?
4415 2406 IF(INS(1).EQ.ZB001.AND.IADM(1,1).NE.8) GO TO 9213
4416 IF(IADM(1,1).NE.8) GO TO 2410
4417 C*** *** YES, USE CMPA(BYTE MODE ILLEGAL)
4418 IF(ISIZ.EQ.0) GO TO 9217
4419 ISIZ=ISIZ*2
4420 INS(1)=MPUIOR(IHA0C0,ISIZ)
4421 GO TO 8510
4422 C... *** CAN WE USE CMPI?
4423 2410 IF(IADM(1,2).NE.60) GO TO 8400
4424 INS(1)=3072 + ISIZ
4425 IF(IADM(1,1).LT.40) GO TO 8300
4426 C... *** MEMORY MODE
4427 KK=INS(3)
4428 INS(3)= INS(5)
4429 INS(5)=KK
4430 C+++ 16-BIT
4431 KK=INS(2)
4432 INS(2)= INS(4)
4433 INS(4)=KK
4434 IADM(3,2)=2
4435 IF(IADM(1,1).EQ.57) IADM(3,2)=4
4436 C*** 3=UNDEFINED SYMBOL/LABEL
4437 IF(IADM(5,2).EQ.3) IADM(3,2)=3
4438 GO TO 8300
4439 C
4440 C*** EXG
4441 2500 CONTINUE
4442 C*** EXG DN,DM
4443 IF(IADM(1,1).EQ.0.AND.IADM(1,2).EQ.0) GO TO 2530
4444 C*** EXG AN,DM
4445 IF(IADM(1,1).EQ.8.AND.IADM(1,2).EQ.0) GO TO 2505
4446 C*** EXG DN,AM
4447 IF(IADM(1,1).EQ.0.AND.IADM(1,2).EQ.8) GO TO 2510
4448 C*** EXG AN,AM
4449 IF(IADM(1,1).EQ.8.AND.IADM(1,2).EQ.8) GO TO 2520
4450 GO TO 9209
4451 2505 CONTINUE
4452 C*** EXG AN,DM
4453 I=IADM(2,1)
4454 IADM(2,1)=IADM(2,2)
4455 IADM(2,2)=I
4456 2510 CONTINUE
4457 C*** DN,AM - 64=$40
4458 INS(1)=INS(1)+64
4459 GO TO 2530
4460 C*** AN,AM
4461 2520 CONTINUE
4462 INS(1)=ZB140
4463 2530 INS(1)=INS(1)+ISHFT(IADM(2,1),9)+IADM(2,2)
4464 RETURN
4465 C
4466 C*** CHK
4467 2600 I=2
4468 C*** IS IT CHK S,D?
4469 IF(CMP.EQ.0) GO TO 2380
4470 2620 GO TO 8500
4471 C
4472 C*** CMPM
4473 2700 I=3
4474 C*** IS IT CMPM D,S?
4475 IF(CMP.EQ.1) GO TO 2380
4476 2720 IF(IADM(1,1).NE.24) GO TO 9209
4477 IF(IADM(1,2).NE.24) GO TO 9209
4478 GO TO 7100
4479 C
4480 C*** ADDX,SUBX
4481 2800 GO TO 2910
4482 C
4483 C*** ABCD,SBCD
4484 2900 ISIZ=0
4485 2910 IF(IADM(1,1).NE.0) GO TO 2920
4486 IF(IADM(1,2).NE.0) GO TO 9209
4487 GO TO 7100
4488 C... *** -(A1),-(A1) MODE
4489 2920 IF(IADM(1,1).NE.32) GO TO 9209
4490 IF(IADM(1,2).NE.32) GO TO 9209
4491 IADM(2,2)=IADM(2,2)-8
4492 GO TO 7100
4493 C
4494 C*** MOVEP
4495 C
4496 3000 CONTINUE
4497 C*** CHECK FOR CORRECT BYTE SIZE - .B ILLEGAL
4498 IF(ISIZ.EQ.0) GO TO 9205
4499 C*** ENTER LONG WORD FLAG?
4500 IF(ISIZ.EQ.128) INS(1)=INS(1) + 64
4501 C*** FIND ADDRESS MODE
4502 IF(IADM(1,1).EQ.40) GO TO 3020
4503 C*** REG TO MEMORY INSTRUCTION
4504 IF(IADM(1,2).NE.40) GO TO 9209
4505 C*** RESET ADDRESS MODE FLAG TO ADD IN A FLAG LATER
4506 IADM(1,2)=8
4507 C*** SET REG -> MEMORY FLAG - 128=$80
4508 INS(1)=MPUIOR(INS(1),128)
4509 GO TO 8500
4510 C*** MEMORY -> REG INSTRUCTION
4511 3020 IADM(1,1)=8
4512 GO TO 8200
4513 C
4514 C*** DCNT
4515 C
4516 3200 INSL=2
4517 IF(IADM(1,2).EQ.57) IADM(1,2)=56
4518 IF(IADM(1,1).NE.0) GO TO 9215
4519 IF(IADM(1,2).NE.56) GO TO 9209
4520 IOFS=INS(3) - IPC -2
4521 IF(MASK2.EQ.0) GO TO 3201
4522 IF(IOFS.GE.0.OR.IOFS.LT.-128) CALL ERR(208)
4523 INS(1)=INS(1) + ISHFT(IADM(2,1),9) + MPUAND(IOFS,255)
4524 RETURN
4525 C*** DBCC
4526 3201 CONTINUE
4527 INS(1)=INS(1)+IADM(2,1)
4528 INSL=4
4529 INS(3)=IOFS
4530 RETURN
4531 C
4532 C*** LEA
4533 C
4534 3400 CONTINUE
4535 C*** DESTINATION MUST BE ADDRESS ONLY
4536 IF(IADM(1,2).NE.8) GO TO 9213
4537 IADM(2,2)=MPUAND(IADM(2,2),7)
4538 C*** CHECK FOR VALID MODES
4539 IF(IADM(1,1).EQ.16) GO TO 8210
4540 IF(IADM(1,1).LT.40) GO TO 9213
4541 C*** IMM INVALID
4542 IF(IADM(1,1).EQ.60) GO TO 9234
4543 GO TO 8210
4544 C
4545 C*** SHIFTS
4546 3500 CONTINUE
4547 IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.128) INSL=INSL-2
4548 C*** MAKE #BITNO LOOK LIKE BITNO
4549 IF(IADM(1,1).EQ.60) IADM(1,1)=56
4550 IF(IADM(1,1).EQ.56) INSL=INSL-2
4551 C*** ADDRESS REG IS ILLEGAL
4552 IF(IADM(1,2).EQ.8) GO TO 9215
4553 IF(IADM(1,2).NE.0) GO TO 3520
4554 C... *** REGISTER SHIFT
4555 IF(IADM(1,1).EQ.0) GO TO 3510
4556 C... *** STATIC SHIFT
4557 IF(IADM(1,1).NE.56) GO TO 9209
4558 IF(INS(3).LT.1) GO TO 9216
4559 IF(INS(3).GT.8) GO TO 9208
4560 IF(INS(3).EQ.8) INS(3)=0
4561 INS(1)=INS(1)+ISHFT(INS(3),9)+ISIZ+IADM(2,2)
4562 RETURN
4563 C... *** DYNAMIC SHIFT
4564 3510 ISIZ=ISIZ + LSP
4565 GO TO 8400
4566 C... *** MEMORY SHIFT
4567 3520 KK=MPUAND(INS(1),24)
4568 INS(1)=INS(1) - KK + 192 + ISHFT(KK,6)
4569 C*** 192 = $C0
4570 C
4571 C*** ALLOW SHIFT 1,MEMORY
4572 IF(IADM(1,1).NE.56) GO TO 9209
4573 IF(INS(3).NE.1) CALL ERR(236)
4574 C*** WORD SIZE ONLY ALLOWED.
4575 IF(ISIZ.NE.64) CALL ERR(238)
4576 INS(3)=INS(5)
4577 IF(IADM(7,2).EQ.0) GO TO 8600
4578 IF(LFRF.GT.0.OR.TKNVA2.NE.0) INS(3)=INS(4)
4579 GO TO 8600
4580 C
4581 C*** BIT INSTRUCTIONS
4582 3600 CONTINUE
4583 IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.128) INSL=INSL-2
4584 J=8
4585 C*** AN DESTINATION ILLEGAL
4586 IF(IADM(1,2).EQ.8) GO TO 9209
4587 C*** IMM DESTINATION ILLEGAL
4588 IF(IADM(1,2).EQ.60) GO TO 9209
4589 C*** WORD ILLEGAL IN THIS CASE, MASK 3
4590 IF(ISIZ.EQ.64.AND.MASK2.LT.2) CALL ERR(238)
4591 C*** IF MASK 2 AND BX GO ADJUST IT
4592 IF(MASK2.EQ.1) GO TO 3920
4593 3605 IF(IADM(1,1).NE.0) GO TO 3610
4594 C*** DYNAMIC - IS IT BTST?
4595 IF(INS(1).EQ.256) GO TO 8510
4596 C*** PC REL & PC REL + INDEX ILLEGAL FOR OTHERS
4597 IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
4598 GO TO 8510
4599 C*** STATIC
4600 3610 IF(IADM(1,1).EQ.56.OR.IADM(1,1).EQ.60) GO TO 3620
4601 GO TO 9209
4602 C*** 1792=$700
4603 3620 INS(1)=INS(1)+1792
4604 IF(IADM(1,2).EQ.0) J=32
4605 INS(3)=MOD(INS(3),J)
4606 GO TO 3680
4607 3640 INS(3)=INS(3)-8
4608 GO TO 3680
4609 C*** MASK2=1 - AND WE HAVE BX.BB - ADJUST FOR MASK 2
4610 3660 CONTINUE
4611 C*** ODD ADDRESS?
4612 I=MPUAND(INS(5),1)
4613 IF(I.EQ.0) GO TO 3670
4614 INS(5)=INS(5)-1
4615 GO TO 3930
4616 3670 INS(3)=INS(3)+8
4617 C*** TEST PC REL - PC REL + INDEX - VALID FOR BTST ONLY
4618 3680 CONTINUE
4619 C*** BTST+$700 AT THIS POINT
4620 IF(INS(1).EQ.2048) GO TO 8600
4621 IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
4622 GO TO 8600
4623 3900 IF(IADM(1,2).EQ.8) GO TO 9209
4624 IF(IADM(1,2).EQ.60) GO TO 9209
4625 IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.128) INSL=INSL-2
4626 J=16
4627 IF(MASK2.NE.0) GO TO 3605
4628 3920 IF(IADM(1,1).EQ.0.AND.IADM(1,2).EQ.0) GO TO 8510
4629 IF(IADM(1,1).EQ.0) GO TO 9209
4630 C*** (AN)+ -(AN)
4631 IF(IADM(1,2).EQ.24.OR.IADM(1,2).EQ.32) GO TO 9209
4632 IF(IADM(1,2).EQ.0) J=32
4633 INS(1)=INS(1)+1792
4634 INS(3)=MOD(INS(3),J)
4635 IF(IADM(1,2).EQ.0) GO TO 3680
4636 IF(IOPC.EQ.36) GO TO 3660
4637 IF(INS(3).GT.7) GO TO 3640
4638 C*** ADJ ADDR BY
4639 INS(5)=INS(5)+1
4640 C*** IF (AN) SET UP DISPLACEMENT OF 1
4641 3930 IF(IADM(1,2).NE.16) GO TO 3680
4642 INSL=INSL+2
4643 IADM(3,2)=1
4644 IADM(1,2)=40
4645 GO TO 3680
4646 C
4647 C*** MOVE INSTRUCTION
4648 C... *** TEST FOR IMMEDIATE SOURCE AND D SINK
4649 3700 CONTINUE
4650 C*** CHECK FOR 2ND OPERAND PRESENT
4651 IF(IADM(1,2).EQ.-1) GO TO 9209
4652 C*** MOVE S,PC REL OR PC REL+INDEX ILLEGAL
4653 IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
4654 C*** MOVEQ?
4655 IF(INS(1).EQ.I7KH) GO TO 3705
4656 IF(IADM(1,1).NE.60) GO TO 3710
4657 C*** IMM PC REL INVALID
4658 IF(SYMTYP.EQ.1) CALL ERR(231)
4659 IF(IADM(1,2).NE.0) GO TO 3710
4660 C... *** MOVE #,0 - CAN WE USE LDQ?
4661 C*** 128 = $80
4662 IF(ISIZ.NE.128) GO TO 3710
4663 C*** FORWARD REFERENCE?
4664 IF(IADM(5,1).GT.0) GO TO 3710
4665 IF(INS(3).LT. -127) GO TO 3710
4666 IF(INS(3).GT.127) GO TO 3710
4667 IF(INS(2).NE.0.AND.INS(2).NE.-1) GO TO 3710
4668 IF(INS(2).EQ.0.AND.MPUAND(TKNVAL,Z8000).NE.0) GO TO 3710
4669 C... *** USE LDQ
4670 3705 INS(1)= I7KH + ISHFT(IADM(2,2),9) + MPUAND(INS(3),255)
4671 INSL=2
4672 C*** ONLY DN DEST ALLOWED
4673 IF(IADM(1,2).NE.0) GO TO 9209
4674 IF(IABS(INS(3)).GT.KCFF) GO TO 9210
4675 RETURN
4676 3710 IF(ISIZ.NE.0) GO TO 3720
4677 C... *** BYTE MODE
4678 IF(IADM(1,1).EQ.8) GO TO 9217
4679 IF(IADM(1,2).EQ.8) GO TO 9217
4680 3720 INS(1)=ISHFT(ISIZ,6)+4096
4681 C*** MOVE.W= OPCODE 3 - MOVE.L = OPCODE 2
4682 C*** 12288=$3000 - 8192=$2000
4683 IF(ISIZ.EQ.0) GO TO 3726
4684 IF(INS(1).EQ.12288) GO TO 3722
4685 INS(1)=12288
4686 GO TO 3726
4687 3722 INS(1)=8192
4688 3726 CONTINUE
4689 KM=MPUAND(IADM(1,2),56)
4690 IF(KM.EQ.56) GO TO 3730
4691 C... *** REGISTER MODE (00-60)
4692 KR=MPUAND(IADM(2,2),7)
4693 GO TO 3740
4694 C... *** MEMORY MODE (7X)
4695 3730 KR=MPUAND(IADM(1,2),7)
4696 C... *** FORM FIELD-1 REG,MODE
4697 3740 INS(1)=INS(1)+ISHFT(KR,9)+ISHFT(KM,3)
4698 C... *** FORM FIELD-2 EA
4699 C
4700 C... *** TEST FOR CONTROL REGISTER SOURCE
4701 IF(IADM(1,1).NE.64) GO TO 3760
4702 C... *** SOURCE IS CONTROL REGISTER - ASSURE USP -> A
4703 IF(IADM(2,1).NE.16) GO TO 3750
4704 IF(IADM(1,2).NE.8) GO TO 9213
4705 C
4706 INS(1)=IH4E60 + IADM(2,2)
4707 RETURN
4708 C
4709 C... *** MOVE SR,EA?
4710 3750 IF(IADM(2,1).NE.124) GO TO 9233
4711 C... *** 124 = $7C
4712 INS(1)=IH40C0
4713 GO TO 8600
4714 C... *** TEST FOR CONTROL REGISTER DESTINATION
4715 3760 IF(IADM(1,2).NE.64) GO TO 8300
4716 C... *** DESTINATION IS CONTROL REGISTER A-> USP?
4717 IF(IADM(2,2).NE.16) GO TO 3770
4718 C
4719 IF(IADM(1,1).NE.8) GO TO 9213
4720 INS(1)=(IH4E60 - 8) + IADM(2,1)
4721 RETURN
4722 C... *** ASSUME EA -> CC/SR
4723 3770 INS(1)=IH44C0
4724 IF(IADM(2,2).EQ.124) INS(1)=IH46C0
4725 GO TO 8300
4726 C
4727 C*** LDM,STM - MOVEM
4728 C*** 19456 = $4C00
4729 3800 INSL=INSL+2
4730 C
4731 C*** CHECK FOR ILLEGAL LDM
4732 IF(IADM(1,1).LT.9.AND.INS(1).EQ.19456) GO TO 9209
4733 INS(5)=INS(3)
4734 INS(4)=INS(2)
4735 KM=2
4736 KK=1
4737 C*** IS IT STM PART OF MOVEM?
4738 IF(IADM(1,1).LT.9) GO TO 3810
4739 INS(1)=19456
4740 C*** LDM - ASSURE NOT -1(A)
4741 IF(IADM(1,1).EQ.32) GO TO 9209
4742 C*** PUT IN BIT 7 FOR LDM
4743 INS(1)=INS(1) + 128
4744 C*** SET THE MASK A0-D7 IN
4745 INS(3)=IADM(6,1)
4746 GO TO 3820
4747 C*** STM - ASSURE NOT (A)+ OR PC RELATIVE
4748 3810 CONTINUE
4749 KK=2
4750 KM=1
4751 C*** SET IN D0-A7 BIT MASK
4752 INS(3)=IADM(6,2)
4753 IF(IADM(1,2).EQ.24) GO TO 9209
4754 IF(IADM(1,2).GE.58) GO TO 9208
4755 C*** ASSURE NOT BYTE MODE
4756 3820 IF(ISIZ.EQ.0) GO TO 9217
4757 ISIZ=ISIZ-64
4758 C
4759 C*** DISALLOW REGISTER DIRECT MODES
4760 IF(IADM(1,KK).LE.8) GO TO 9209
4761 C*** ASSURE MASK IS FIRST FIELD
4762 IF(IADM(1,KM).GT.8) GO TO 9209
4763 IF(INSL.EQ.6) IADM(3,2)=2
4764 IF(INSL.EQ.8) IADM(3,2)=4
4765 INS(1)=INS(1) + ISIZ
4766 C*** IF CONTROL MODE (AN), MASK MUST APPEAR SAME AS LDM MASK FOR (AN).
4767 IF(IADM(1,2).EQ.16.OR.IADM(1,2).EQ.40) INS(3)=IADM(6,1)
4768 IF(IADM(1,2).EQ.56.OR.IADM(1,2).EQ.57) INS(3)=IADM(6,1)
4769 IF(IADM(1,2).EQ.48) INS(3)=IADM(6,1)
4770 C*** LDM STM
4771 GO TO (8300,8600),KK
4772 C
4773 C*** --- STANDARD ACTIONS --
4774 C
4775 C*** IMMEDIATE OPCODE
4776 C*** ADDI/SUBI TO AN ILLEGAL
4777 6980 IF(IADM(1,2).EQ.8) GO TO 9209
4778 C*** MUST BE IMM
4779 IF(IADM(1,1).NE.60) GO TO 9209
4780 7000 IF(IADM(1,2).EQ.60) GO TO 9209
4781 KK=ISHFT(INS(1),-12)
4782 KK=MPUAND(KK,7)
4783 INS(1)=IMCD(KK+1)+ISIZ
4784 IF(IADM(1,2).EQ.8) GO TO 9215
4785 GO TO 8610
4786 C
4787 C*** REGISTER-REGISTER OPCODES
4788 7100 KK=ISHFT(IADM(2,2),9)
4789 INS(1)=MPUIOR(INS(1),KK)+ISIZ
4790 INS(1)=MPUIOR(INS(1),IADM(2,1))
4791 RETURN
4792 C
4793 C -------- FIELD 1 --> FIELD 2 -------
4794 C
4795 C*** ESTABLISH SIZE IN BITS 7-6
4796 C... *** IS IMMEDIATE EA ALLOWED?
4797 8100 IF(IADM(1,1).NE.60) GO TO 8110
4798 IF(NIMM(IOPC).NE.0) GO TO 9218
4799 8110 INS(1)=INS(1)+ISIZ
4800 C
4801 C*** ESTABLISH REGISTER(2) IN BITS 11-9
4802 8200 IF(IADM(1,2).NE.0) GO TO 9215
4803 8210 KK=ISHFT(IADM(2,2),9)
4804 INS(1)=MPUIOR(INS(1),KK)
4805 C
4806 C*** ESTABLISH EA(1) IN BITS 5-0
4807 8300 IF(IADM(1,1).LT.0) GO TO 9209
4808 INS(1)=INS(1)+IADM(1,1)
4809 IF(IADM(1,1).NE.0) GO TO 8320
4810 C... *** DATA REGISTER MODE
4811 INS(1)=INS(1)+IADM(2,1)
4812 RETURN
4813 8320 IF(IADM(1,1).LT.56) INS(1)=INS(1)+IADM(2,1)-8
4814 C... *** ASSURE NOT SR DESTINATION
4815 IF(IADM(1,1).EQ.64) GO TO 9233
4816 RETURN
4817 C
4818 C -------- FIELD 2 --> FIELD 1 -------
4819 C*** ESTABLISH SIZE IN BITS 7-6
4820 8400 INS(1)=INS(1)+ISIZ
4821 C
4822 C*** ESTABLISH DATA REGISTER(1) IN BITS 11-9
4823 8500 IF(IADM(1,1).NE.0) GO TO 9215
4824 8510 INS(1)=INS(1)+ISHFT(IADM(2,1),9)
4825 C
4826 C*** ESTABLISH EA(2) IN BITS 5-0
4827 C... *** IS IMMEDIATE EA ALLOWED?
4828 8600 IF(IADM(1,2).NE.60) GO TO 8610
4829 IF(NIMM(IOPC).NE.0) GO TO 9218
4830 8610 IF(IADM(1,2).LT.0) GO TO 9209
4831 INS(1)=INS(1)+IADM(1,2)
4832 IF(IADM(1,2).NE.0) GO TO 8620
4833 C... *** DATA REGISTER MODE
4834 INS(1)=INS(1)+IADM(2,2)
4835 RETURN
4836 8620 IF(IADM(1,2).LT.56) INS(1)=INS(1)+IADM(2,2)-8
4837 C... *** ASSURE NOT SR DESTINATION
4838 IF(IADM(1,2).EQ.64) GO TO 9233
4839 RETURN
4840 C
4841 C*** ERROR STOPS
4842 C
4843 C*** BYTE SIZE ERROR
4844 9205 CALL ERR(205)
4845 RETURN
4846 C... *** RANGE ERROR
4847 9208 CALL ERR(208)
4848 RETURN
4849 C... *** ILLEGAL ADDRESS MODE
4850 9209 CALL ERR(209)
4851 RETURN
4852 C*** VALUE TO BIG
4853 9210 CALL ERR(210)
4854 RETURN
4855 C*** DATA SIZE INVALID
4856 9212 CALL ERR(212)
4857 RETURN
4858 C... *** REGISTER MUST BE ADDRESS REGISTER
4859 9213 CALL ERR(213)
4860 RETURN
4861 C... *** REGISTER MUST BE DATA REGISTER
4862 9215 CALL ERR(215)
4863 RETURN
4864 C... *** NEGATIVE NOT ALLOWED
4865 9216 CALL ERR(216)
4866 RETURN
4867 C... *** BYTE MODE NOT ALLOWED
4868 9217 CALL ERR(217)
4869 RETURN
4870 C... *** DESTINATION MUST BE ALTERABLE
4871 9218 CALL ERR(218)
4872 RETURN
4873 C... *** UNDEFINED ACTION (INTERNAL ERROR)
4874 9223 CALL ERR(223)
4875 RETURN
4876 C... *** ILLEGAL REGISTER FOR THIS INSTRUCTION
4877 9233 CALL ERR(233)
4878 RETURN
4879 12340 INSL=4
4880 9234 CALL ERR(234)
4881 RETURN
4882 END
4883 SUBROUTINE OBJ
4884 CC NAM: OBJ VER: 1.0 DAT: 12/08/78 CMP: 16-BIT
4885 CC
4886 CC SYS: MACS
4887 CC
4888 CC ENT: N/A
4889 CC
4890 CC RTN: N/A
4891 CC
4892 CC FNC: CREATE THE OBJECT FILE OUTPUT
4893 CC STUFFS EACH BYTE INTO A BUFFER, CALCULATES CHECKSUM.
4894 CC
4895 CC REV: N/A
4896 CC
4897 CCALLS PNCH
4898 CC
4899 C*
4900 IMPLICIT INTEGER (A-Z)
4901 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
4902 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
4903 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
4904 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
4905 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
4906 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
4907 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
4908 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ
4909 C
4910 C*** RETURN IF NO PUNCH OUTPUT DESIRED
4911 IF(IOBJ.EQ.0) RETURN
4912 IF(INSL.LE.0) RETURN
4913 C*** IF LONG 'STRING' DO NOT PUT OUT AGAIN
4914 IF(INSL.EQ.9) RETURN
4915 C*** SPC?
4916 IF(INSL.EQ.20) RETURN
4917 IF(INSL.NE.1) CALL PNCH(4,ISHFT(INS(1),-8))
4918 CALL PNCH(4,INS(1))
4919 GO TO (100,100,200,200,300,300,400,400,500,500),INSL
4920 C... *** ONE WORD
4921 100 RETURN
4922 C... *** THREE WORD OR LARGER
4923 C
4924 300 IF(IADM(3,2).EQ.0) GO TO 500
4925 GO TO 200
4926 400 IF(IADM(3,2).NE.2) GO TO 200
4927 C... *** PUNCH INS(2)
4928 500 CALL PNCH(4,ISHFT(INS(2),-8))
4929 CALL PNCH(4,INS(2))
4930 C... *** TWO WORD
4931 200 CALL PNCH(4,ISHFT(INS(3),-8))
4932 CALL PNCH(4,INS(3))
4933 IF(INSL.LT.6) RETURN
4934 IF(IADM(3,2).EQ.0) RETURN
4935 C... *** FOUR/FIVE WORD
4936 C
4937 IF(IADM(3,2).NE.4) GO TO 1000
4938 C... *** PUNCH INS(4)
4939 CALL PNCH(4,ISHFT(INS(4),-8))
4940 CALL PNCH(4,INS(4))
4941 C... *** FIVE WORD
4942 1000 CALL PNCH(4,ISHFT(INS(5),-8))
4943 CALL PNCH(4,INS(5))
4944 RETURN
4945 END
4946 SUBROUTINE PNCH(JTYP,JVAL)
4947 CC NAM: PNCH VER: 1.0 DAT: 02/19/79 CMP: PDP-11
4948 CC
4949 CC SYS: MACS
4950 CC
4951 CC ENT: JTYP - FUNCTION TYPE
4952 CC 1 - OUTPUT HEADER
4953 CC 2 - OUTPUT TRAILER
4954 CC 3 - NEW ORIGIN
4955 CC 4 - NEXT BYTE IN SEQUENCE
4956 CC 5 - ADJUST COUNT FOR A 'DS'
4957 CC JVAL - DATA BYTE
4958 CC
4959 CC RTN: JTYP - N/C
4960 CC JVAL - N/C
4961 CC
4962 CC FNC: WRITE THE OBJECT RECORDS TO DEVICE 'LUOO'
4963 CC IF NO OUTPUT DESIRED(IOBJ=0) IT RETURNS.
4964 CC S1 RECORD = 2 BYTE ADDRESS
4965 CC S2 RECORD = 3 BYTE ADDRESS
4966 CC
4967 CCALLS MPUAND-HEXASC-ISHFT-ADD
4968 CC
4969 C*
4970 IMPLICIT INTEGER (A-Z)
4971 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
4972 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
4973 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
4974 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
4975 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
4976 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
4977 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
4978 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
4979 DIMENSION LIN(17)
4980 DIMENSION LIN2(50)
4981 DATA JX/0/
4982 DATA CKSM/0/
4983 DATA JPC/0/,JPC1/0/
4984 DATA ISREC/1/
4985 9900 FORMAT('S',I1,50A1)
4986 C*** CHECK FOR NO OBJECT OUT
4987 IF(IOBJ.EQ.0) RETURN
4988 JVAL1=JVAL
4989 GO TO(100,200,300,400,250),JTYP
4990 C
4991 C*** OUTPUT HEADER
4992 100 WRITE(LUOO,110)
4993 110 FORMAT('S00600004844521B')
4994 RETURN
4995 C
4996 200 CONTINUE
4997 C*** OUTPUT TRAILER
4998 C*** ASSURE LAST RECORD IS OUT
4999 IF(JX.NE.0) GO TO 410
5000 220 WRITE(LUOO,210)
5001 210 FORMAT('S9030000FC')
5002 RETURN
5003 C*** INCREMENT FOR A 'DS'
5004 250 NPC1=IPC2
5005 NPC=IPC
5006 CALL ADD(NPC1,NPC,INS(2),JVAL1)
5007 GO TO 320
5008 C
5009 C*** NEW ORIGIN
5010 300 NPC=JVAL1
5011 NPC1=IPC2
5012 320 IF(JX.NE.0) GO TO 410
5013 GO TO 430
5014 C
5015 C*** NEXT BYTE IN SEQUENCE
5016 400 CONTINUE
5017 JX=JX+1
5018 LIN(JX)=JVAL1
5019 C*** IS THIS FIRST TIME THRU?
5020 IF(CKSM.NE.0) GO TO 405
5021 C*** ADD 2 BYTE ADDRESS TO COUNT
5022 J=ISHFT(JPC,-8)
5023 CKSM=IPC2 + J + MPUAND(JPC,KCFF)
5024 405 CKSM=CKSM+JVAL1
5025 IF(JX.NE.16) RETURN
5026 C*** OUTPUT THE FULL LINE
5027 C*** NPC=NPC+JX - USE 'ADD' TO GET 32 BITS.
5028 CALL ADD(NPC1,NPC,0,JX)
5029 410 JX=JX+1
5030 C*** JXX= # BYTES IN RECORD INCLUDING CHECK SUM
5031 JXX=JX + 2 + ISREC - 1
5032 J=CKSM + JXX
5033 C*** CALCULATE THE CHECK SUM.
5034 CKSM=KCFF - MPUAND(J,KCFF)
5035 LIN(JX) = CKSM
5036 C*** CONVERT THE WHOLE MESS TO ASCII
5037 CALL HEXASC(JXX,LIN2,2,1)
5038 CALL HEXASC(JPC,LIN2,4,5)
5039 J=7
5040 DO 415 I=1,JX
5041 J=J+2
5042 CALL HEXASC(LIN(I),LIN2,2,J)
5043 415 CONTINUE
5044 J=J+1
5045 C*** IS IT 16 OR 24 BIT ADDRESS?
5046 IF(ISREC.EQ.1) GO TO 425
5047 CALL HEXASC(JPC1,LIN2,2,3)
5048 WRITE(LUOO,9900) ISREC,(LIN2(I),I=1,J)
5049 GO TO 430
5050 C*** 2 BYTE ADDRESS.
5051 425 WRITE(LUOO,9900) ISREC,LIN2(1),LIN2(2),(LIN2(I),I=5,J)
5052 430 JX=0
5053 C*** OUTPUT TRAILER?
5054 IF(JTYP.EQ.2) GO TO 220
5055 CKSM = 0
5056 C*** INCREMENT THE P-COUNT
5057 JPC=NPC
5058 JPC1=NPC1
5059 IF(JPC1.NE.0) ISREC=2
5060 IF(JPC1.EQ.0) ISREC=1
5061 RETURN
5062 END
5063 SUBROUTINE PRSYM
5064 CC NAM: PRSYM VER: 1.0 DAT: 01/31/79 CMP: PDP-11
5065 CC
5066 CC SYS:MACS
5067 CC
5068 CC ENT: N/A
5069 CC
5070 CC RTN: N/A
5071 CC
5072 CC FNC: FIND SYMBOL NAME AND ADDRESS IN SYMBOL TABLE,
5073 CC STUFF IN LOW 'ISYM', SORT, THEN OUTPUT TO 'LUOT'.
5074 CC
5075 CCALLS MPUGTC-MPUPTC-MPUAND-PAGE-ISHFT
5076 CC
5077 C*
5078 IMPLICIT INTEGER (A-Z)
5079 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
5080 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
5081 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
5082 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
5083 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
5084 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
5085 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
5086 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
5087 COMMON /A/ NXSYM1
5088 DATA LSN/1/
5089 DATA LSPP/' '/
5090 C*** SHOULD TABLE BE LISTED?
5091 IF(LIST.EQ.0) RETURN
5092 9900 FORMAT(//' SYMBOL TABLE - APPROX',I5,' SYMBOL ENTRIES LEFT'/)
5093 NX=(LENSYM-NXSYM)/9
5094 WRITE(LUOT,9900) NX
5095 CALL PAGE(4)
5096 NX=NXSYM1
5097 10 ISIZ=ISHFT(ISYM(NX+1),-8)
5098 ITYP=MPUAND(ISYM(NX+1),255)
5099 C*** CHECK FOR MACRO
5100 IF(ITYP.EQ.255) GO TO 1000
5101 IF(ITYP.NE.1) GO TO 850
5102 C*** SYMBOL IS A LABEL
5103 JPTR=NX+ISIZ+3
5104 ITYP=MPUAND(ISYM(JPTR),7)
5105 IF(ITYP.GT.1) GO TO 850
5106 C*** GET CHAR SYMBOL 2 BY 2
5107 I=ISIZ*2
5108 CALL MPUGTC(J,ISYM(NX+3),I)
5109 C*** IF LAST CHAR IS BINARY ZERO, REPLACE WITH ASCII BLANK
5110 IF(J.EQ.0) CALL MPUPTC(LSP,ISYM(NX+3),I)
5111 I=ISYM(NX+3)
5112 J=LSPP
5113 IF(ISIZ.GT.1) J=ISYM(NX+4)
5114 K=LSPP
5115 IF(ISIZ.GT.2) K=ISYM(NX+5)
5116 L=LSPP
5117 IF(ISIZ.GT.3) L=ISYM(NX+6)
5118 JJ=LSN
5119 IF(LSN.EQ.1) GO TO 800
5120 70 II=LSN/6
5121 C*** NEGATIVE DO LOOP VALUE
5122 M= -1
5123 C*** FIND WHERE THIS SYMBOL GOES ALPHABETICALLY & INSERT
5124 C*** NEXT HIGH LOCATION IN TABLE
5125 KK=1
5126 IF(II.EQ.2) KK=7
5127 IF(II.LT.3) GO TO 100
5128 II=(II+1)/2
5129 KK=LSN - II*6
5130 C*** UPPER HALF OF ARRAY?
5131 100 CONTINUE
5132 KKK=KK
5133 IF(ISYM(KK).LT.I) GO TO 200
5134 C*** LOWER HALF?
5135 IF(ISYM(KK).GT.I) GO TO 400
5136 IF(ISYM(KK+1).LT.J) GO TO 200
5137 IF(ISYM(KK+1).GT.J) GO TO 400
5138 IF(ISYM(KK+2).LT.K) GO TO 200
5139 IF(ISYM(KK+2).GT.K) GO TO 400
5140 IF(ISYM(KK+3).LT.L) GO TO 200
5141 IF(ISYM(KK+3).GT.L) GO TO 400
5142 C*** UPPER HALF OF ARRAY, FIND WHICH HALF OF THIS HALF SYMBOL FALLS IN
5143 C*** ARE WE DONE?
5144 200 IF(II.EQ.1) GO TO 500
5145 C*** NOT DONE, CUT IN HALF AGAIN
5146 KK=KK + (II/2)*6
5147 II=(II+1)/2
5148 C*** ARE WE AT TOP OF TABLE?
5149 IF(KK.GE.LSN) GO TO 800
5150 GO TO 100
5151 C*** LOWER HALF, CUT IT IN HALF
5152 400 IF(II.EQ.1) GO TO 450
5153 KK=KK - (II/2)*6
5154 II=(II+1)/2
5155 GO TO 100
5156 C*** CHECK FOR POSSIBILITY CURRENT VALUE IS LESS THAN
5157 C*** NEXT LOWEST ONE BEING POINTED AT.
5158 450 IF(KK.EQ.1) GO TO 550
5159 C*** CHECK NEXT LOWER VALUE.
5160 KK=KK-6
5161 GO TO 100
5162 500 KKK=KKK+6
5163 550 CONTINUE
5164 C*** MOVE SYMBOLS UP IN TABLE
5165 JJ=LSN
5166 600 ISYM(JJ+6)=ISYM(JJ)
5167 C*** IS LOOP DONE?
5168 IF(JJ.EQ.KKK) GO TO 800
5169 JJ=JJ-1
5170 GO TO 600
5171 C*** INSERT CURRENT SYMBOL
5172 C*** SET NEXT SYMBOL IN ALPHABETICAL ORDER
5173 800 ISYM(JJ)=I
5174 ISYM(JJ+1)=J
5175 ISYM(JJ+2)=K
5176 ISYM(JJ+3)=L
5177 C*** INSERT ADDRESS OF SYMBOL.
5178 ISYM(JJ+4)=ISYM(NX)
5179 ISYM(JJ+5)=ISYM(JPTR+1)
5180 C*** FIND BYTE POSITION TO CHECK FOR ZERO IF ODD # OF CHAR IN NAME.
5181 LSN=LSN+6
5182 C*** ADVANCE TOTHE NEXT SYMBOL
5183 850 NX=NX+ISIZ+5
5184 IF(NX.LT.NXSYM) GO TO 10
5185 C*** IF NO ENTRIES DON'T OUTPUT.
5186 870 IF(LSN.EQ.1) GO TO 900
5187 LSN=LSN-1
5188 C*** PRINT SYMBOL TABLE
5189 DO 300I=1,LSN,24
5190 NX=I+23
5191 IF(NX.GT.LSN) NX=LSN
5192 II=1
5193 DO 250 J=I,NX,6
5194 JBUF(II)=ISHFT(ISYM(J),8)+ISHFT(ISYM(J),-8)
5195 JBUF(II+1)=ISHFT(ISYM(J+1),8)+ISHFT(ISYM(J+1),-8)
5196 JBUF(II+2)=ISHFT(ISYM(J+2),8)+ISHFT(ISYM(J+2),-8)
5197 JBUF(II+3)=ISHFT(ISYM(J+3),8)+ISHFT(ISYM(J+3),-8)
5198 C*** CONVERT HEX TO ASCII
5199 CALL HEXASC(ISYM(J+4),JBUF,2,II+4)
5200 CALL HEXASC(ISYM(J+5),JBUF,4,II+6)
5201 II=II+10
5202 250 CONTINUE
5203 II=II-1
5204 WRITE(LUOT,998) (JBUF(J),J=1,II)
5205 CALL PAGE(1)
5206 300 CONTINUE
5207 998 FORMAT(4(1X,4A2,3X,6A1))
5208 900 CONTINUE
5209 RETURN
5210 C*** FIND END OF MACRO AND START WITH SYMBOL FOLLOWING IT.
5211 1000 CONTINUE
5212 NX=NX+ISIZ+5
5213 1040 K=1
5214 IF(NX.GE.NXSYM) GO TO 870
5215 1050 CALL MPUGTC(I,ISYM(NX),K)
5216 K=K+1
5217 C*** END OF MACRO DEFINITION IS A 04 FOLLOWED BY WORD OF ZEROS
5218 IF(I.NE.4) GO TO 1050
5219 NX=NX+(K+2)/2-1
5220 IF(ISYM(NX).NE.0) GO TO 1040
5221 NX=NX+1
5222 GO TO 10
5223 END
5224 SUBROUTINE PAGE(LCNT)
5225 CC NAM: PAGE VER: 1.0 DAT: 02/02/79 CMP: PDP-11
5226 CC
5227 CC SYS: MC6800 ASM
5228 CC
5229 CC ENT: LCNT - NUMBER OF LINES JUST OUTPUT, OR IF > 79 THEN
5230 CC - 80 = SET TTL IN BUFFER
5231 CC - 81 = OUTPUT HEADER TO DEVICE 'LULT'
5232 CC - 82 = OUTPUT HEADER TO DEVICE 'LUOT'
5233 CC - 83 = SAME AS 82 FOR PDP-11
5234 CC - 84 = 'PAGE', SLEW TO TOP OF PAGE IF 'LUOT'=PRINTER
5235 CC - 85 = SKIP TO BOTTOM OF PAGE, DONOT PRINT HEADER
5236 CC
5237 CC RTN: N/C
5238 CC
5239 CC FNC: THIS ROUTINE INCREMENTS THE LINE COUNTER AND OUTPUTS A
5240 CC TOP OF PAGE HEADER AT PROPER TIME. IT PUTS
5241 CC HEADER INTO OUTPUT BUFFER WHEN ENCOUNTERING THE 'TTL'
5242 CC COMMAND. PAGING IS EFFECTIVE FOR PRINTER OUTPUT ONLY.
5243 CC THIS ROUTINE CONTAINS THE RELEASE # AND COPYRIGHT
5244 CC MESSAGE IN A DATA STATEMENT, THE ONLY PLACE IT APPEARS
5245 CC IN THE PROGRAM.
5246 CC NOTE: THIS ROUTINE CAN POSSIBLY BE CHANGED TO CALL ADD ROUTINE
5247 CC THIS WOULD HELP DECREASE ASSEMBLE TIME. TRY:
5248 CC CALL ADD(IPC2,IPC,0,INSL)
5249 CC THEN REMOVE ALL OTHER INSTRUCTIONS FROM DATA IO1
5250 CC TO STATEMENT 240.
5251 CC
5252 CCALLS MPUPTC
5253 CC
5254 C*
5255 IMPLICIT INTEGER (A-Z)
5256 COMMON /A/ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
5257 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
5258 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
5259 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
5260 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
5261 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
5262 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
5263 COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
5264 DIMENSION ITTL(30)
5265 C*** RELEASE AND COPYRIGHT MESSAGE..
5266 DATA ITTL/'MC','68','00','0 ','AS','M ','RE'
5267 & ,'V=',' 1','.4',' -',' C','OP','YR','IG','HT'
5268 & ,' B','Y ','MO','TO','RO','LA',' 1','97','8 ',' ',
5269 & ' ',' ',' ',' '/
5270 DATA IPAGE/1/,LINENO/0/
5271 DATA ITTLSZ/30/
5272 C*** ITTLSZ IS SIZE OF 'ITTL'
5273 DATA ISW/0/
5274 998 FORMAT(2X,30A2,' PAGE',I3//)
5275 9900 FORMAT(80A1)
5276 9910 FORMAT(5X,40A2)
5277 9920 FORMAT(1X,30A2)
5278 9930 FORMAT(2X,30A2)
5279 C*** ALWAYS SET TTL
5280 IF(LCN.EQ.80) GO TO 500
5281 C** IS LISTING REQUIRED?
5282 IF(LIST.EQ.0) RETURN
5283 C*** IS PAGING REQUIRED?
5284 IF(NOP.EQ.0) RETURN
5285 LCN=LCNT
5286 IF(LCN.GT.79) GO TO 500
5287 C*** INCREMENT LINE COUNT
5288 LINENO=LINENO+LCN
5289 IF(LINENO.LT.IPLEN-6) RETURN
5290 C*** PAGE IT
5291 GO TO 8400
5292 500 CONTINUE
5293 LCN=LCN-79
5294 GO TO(8000,8100,8200,8300,8400,8400),LCN
5295 RETURN
5296 C*** PUT TTL IN BUFFER
5297 8000 CONTINUE
5298 DO 8020 I=1,30
5299 8020 ITTL(I)=' '
5300 J=1
5301 C*** FIND 'TTL' IN BUFFER
5302 DO 8030 I=LCN,72
5303 C*** LOOK FOR 'L' IN 'TTL'
5304 IF(KARD1(I).EQ.76) GO TO 8040
5305 8030 CONTINUE
5306 8040 LCN= I+1
5307 C*** INSERT THE TITLE.
5308 DO 8050 I=LCN,64
5309 CALL MPUPTC(KARD1(I),ITTL,J)
5310 J=J+1
5311 8050 CONTINUE
5312 C*** REVERSE THE LETTERS IN TITLE
5313 DO 8060 I=1,30
5314 ITTL(I)=ISHFT(ITTL(I),8) + ISHFT(ITTL(I),-8)
5315 8060 CONTINUE
5316 RETURN
5317 C*** OUTPUT TO 'LULT'
5318 8100 WRITE(LULT,9920) (ITTL(I),I=1,ITTLSZ)
5319 RETURN
5320 C*** OUTPUT TO LUOT
5321 8200 CONTINUE
5322 C*** IF ERRORS IN PASS1 SLEW TO TOP OF PAGE FOR PASS2
5323 IF(LINENO.EQ.3) RETURN
5324 IF(LINENO.EQ.0) GO TO 8220
5325 GO TO 8400
5326 8220 IF(LUOT.NE.LULT) WRITE(LUOT,998) (ITTL(I),I=1,ITTLSZ),IPAGE
5327 IPAGE=IPAGE+1
5328 LINENO=3
5329 RETURN
5330 8300 CONTINUE
5331 GO TO 8200
5332 8400 CONTINUE
5333 C*** SKIP TO TOP OF PAGE
5334 IF(LUOT.EQ.LULT) RETURN
5335 DO 8450 I=LINENO,IPLEN
5336 WRITE(LUOT,9900) LSP
5337 8450 CONTINUE
5338 LINENO=3
5339 IF(LCN.EQ.6) RETURN
5340 GO TO 8220
5341 9000 RETURN
5342 END
5343 SUBROUTINE PCOUNT
5344 CC NAM: PCOUNT VER: 1.0 DAT: 01/29/79 CMP: PDP-11
5345 CC
5346 CC SYS: MACS
5347 CC
5348 CC ENT: 'IPC' CONTAINS 2 LEAST SIGNIFICANT BYTES OF P-COUNT.
5349 CC 'IPC2' = MOST SIGNIFICANT BYTE OF P-COUNTER.
5350 CC 'INSL' = AMOUNT TO INCREMENT P-COUNT BY.
5351 CC
5352 CC RTN: 'IPC' AND 'IPC2' HAVE NEXT P-COUNT.
5353 CC
5354 CC FNC: THE CURRENT INSTRUCTION LENGTH IN 'INSL' IS ADDED
5355 CC TO 'IPC' & 'IPC2' TO GIVE NEXT INSTRUCTION ADDRESS.
5356 CC
5357 CC REV: N/A
5358 CC
5359 C*
5360 IMPLICIT INTEGER (A-Z)
5361 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
5362 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
5363 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
5364 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
5365 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
5366 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
5367 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
5368 COMMON /A/ LIST,ICOL,NEST
5369 DATA IO1/O100000/,IO7/O77777/
5370 C*** SAVE M.S. BIT
5371 K=IPC .AND. IO1
5372 C*** REMOVE M.S. BIT SO CARRY ON ADD CAN BE DETECTED
5373 IPC=IPC .AND. IO7
5374 IPC=IPC + INSL
5375 C*** DID ADD PUT A BIT IN 16TH POSITION?
5376 J=IPC .AND. IO1
5377 IF(J.NE.0) GO TO220
5378 C*** NO CARRY ON ADD, PUT 16TH BIT BACK IN CASE IT IS 1.
5379 IPC=IPC .OR. K
5380 GO TO 240
5381 220 CONTINUE
5382 C*** ADD HAD CARRY, INCREMENT 2ND WORD IF PREVIOUS UPPER BIT NOT ZERO.
5383 IF(K.NE.0) K=1
5384 IPC2=IPC2+K
5385 C*** J NE 0 AND K NE 0 THERE IS ROLL OVER AND 16TH BIT MUST BE ZERO.
5386 IF(K.EQ.1) IPC=IPC .AND. IO7
5387 240 CONTINUE
5388 RETURN
5389 END
5390 SUBROUTINE HEXASC(IHEX,IB,KNT,IPOS)
5391 CC NAM: HEXASC VER: 1.0 DATE: 05/18/19 CMP: PDP-11
5392 CC
5393 CC SYS: MACS
5394 CC
5395 CC ENT: IHEX - CONTAINS HEX CHARACTERS TO CONVERT
5396 CC IB - N/A
5397 CC KNT - NUMBER OF HEX CHAR TO CONVERT
5398 CC MAX OF 4 HEX CHARS, ONE WORD, CAN BE CONVERTED AT A TI
5399 CC IPOS - POSITION IN 'IB' TO PUT THE CONVERTED CHARS.
5400 CC
5401 CC RTN: IHEX - N/C
5402 CC IB - CONTAINS THE HEX CHARS IN ASCII, 1 PER WORD
5403 CC KNT - N/C
5404 CC IPOS - N/C
5405 CC
5406 CC REV: N/A
5407 CC
5408 CC
5409 CC FNC: CHANGE HEX VALUES TO ASCII AND STORE ONE CONVERTED HEX VALUE
5410 CC PER ARRAY WORD.
5411 CC
5412 CCALLS MPUAND-ISHFT
5413 C*
5414 IMPLICIT INTEGER (A-Z)
5415 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
5416 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
5417 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
5418 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
5419 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
5420 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
5421 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
5422 COMMON /A/ LIST,ICOL,NEST
5423 DIMENSION IB(120)
5424 IPOS2=IPOS+KNT-1
5425 K=IHEX
5426 DO 100 I=1,KNT
5427 C*** GET 1ST 4 BITS
5428 J=MPUAND(K,15)
5429 C*** CHECK 0-9 & A-F
5430 IF(J.GT.9) GO TO 50
5431 C*** 0-9
5432 IB(IPOS2)=J+48
5433 GO TO 80
5434 C*** A-F
5435 50 CONTINUE
5436 IB(IPOS2)=J + 55
5437 80 IPOS2=IPOS2-1
5438 C*** GET THE NEXT 4 BITS TO THE RIGHT, LEAST SIGNIFICANT.
5439 K=ISHFT(K,-4)
5440 100 CONTINUE
5441 RETURN
5442 END
5443 FUNCTION MPUAND (JA,JB)
5444 CC NAM: MPUAND VER: 1.0 DATE: 04/16/79 CMP: PDP-11
5445 CC
5446 CC SYS: MACS
5447 CC
5448 CC ENT: JA - VALUE TO BE ANDED
5449 CC JB - VALUE TO AND WITH
5450 CC
5451 CC RTN: JA - N/C
5452 CC JB - N/C
5453 CC
5454 CC FNC: 'AND' JA WITH JB
5455 CC
5456 CC REV: N/A
5457 C*
5458 MPUAND=JA .AND. JB
5459 RETURN
5460 END
5461 FUNCTION MPUIOR (JA,JB)
5462 CC NAM: MPUIOR VER: 1.0 DATE: 04/16/79 CMP:PDP-11
5463 CC
5464 CC SYS: MACS
5465 CC
5466 CC ENT: JA - VALUE TO BE 'ORED'
5467 CC JB - VALUE TO USE IN THE 'OR'
5468 CC
5469 CC RTN: JA - N/C
5470 CC JB - N/C
5471 CC
5472 CC FNC: THE VALUE OF JB IS 'ORED' INTO JA
5473 CC
5474 CC REV: N/A
5475 CC
5476 C*
5477 MPUIOR= JA .OR. JB
5478 RETURN
5479 END
5480 FUNCTION ISHFT(K1,K2)
5481 CC NAM: ISHFT VER: 1.0 DATE: 04/16/79 CMP: PDP-11
5482 CC
5483 CC SYS: MACS
5484 CC
5485 CC ENT: K1 - VALUE TO BE SHIFTED
5486 CC K2 - AMOUNT TO SHIFT K1
5487 CC = MINUS VALUE, SHIFT RIGHT TO LSB.
5488 CC = POSITIVE VALUE, SHIFT LEFT, HIGH ORDER BIT.
5489 CC
5490 CC RTN: K1 - N/C
5491 CC K2 - N/C
5492 CC
5493 CC FNC: SHIFT A 16-BIT WORD RIGHT OR LEFT.
5494 CC
5495 CC REV: N/A
5496 CC
5497 CCALLS IABS
5498 DATA IO7/O37777/
5499 DATA IO57S/O77777/
5500 DATA IO4/O40000/
5501 DATA IO1/O100000/
5502 K=K1
5503 C***
5504 C*** ASSEMBLY ROUTINE SHIFT MAY NOT BE RETURNING RIGHT
5505 C**
5506 C*** USE MULT AND DIVIDE FOR NOW
5507 C
5508 KK=K2
5509 50 CONTINUE
5510 C*** IF SHIFT VALUE IS ZERO, RETURN
5511 IF(KK.EQ.0) GO TO 300
5512 IF(KK.LT.0) GO TO 100
5513 DO 80 I=1,KK
5514 C*** SAVE 15TH BIT IN CASE ON. IF SO IT CAUSES A RUNTIME
5515 C*** MULTIPLY ERROR. IF ON IT MUST BE OR'ED IN LATER SO IT ISN'T LOST
5516 KKK=K .AND. IO4
5517 K=K .AND. IO7
5518 80 K=K*2
5519 C*** IF THE 15TH BIT WAS ON BEFORE LAST SHIFT, OR IT IN HERE, IT IS
5520 C*** THE 16TH BIT.
5521 IF(KKK.NE.0) K=K .OR. IO1
5522 ISHFT=K
5523 RETURN
5524 100 KK=IABS(KK)
5525 C*** STATEMENT: KK= -KK APEARS TO CAUSE F342 ERROR, SO USED IABS
5526 DO 250 I=1,KK
5527 C*** KEEP UPPER BIT IN CASE ON. IF IT IS ON IT MUST BE OR'ED
5528 C*** IN. IF LEFT ON # IS MINUS AND DIVIDE WILL NOT WORK FOR SHIFTING
5529 C*** DATA.
5530 KKK=K .AND. IO1
5531 K=K .AND. IO57S
5532 K=K/2
5533 C*** IF 16TH BIT WAS ON PUT IT IN 15TH POSITION .
5534 IF(KKK.NE.0) K=K .OR. IO4
5535 250 CONTINUE
5536 300 CONTINUE
5537 ISHFT=K
5538 RETURN
5539 END
5540 SUBROUTINE MPUPTC(JBYT,JBUF,JBIX)
5541 CC NAM: MPUPTC VER: 1.0 DATE: 04/19/79 CMP: 16-BIT
5542 CC
5543 CC SYS: MACS
5544 CC
5545 CC ENT: JBYT - BYTE IN THE RIGHT 8 BITS OF THE WORD(LOW ORDER BITS)
5546 CC JBUF - N/A
5547 CC JBIX - BYTE INDEX LOCATION TO PLACE JBYT IN JBUF, LEFT BYTE
5548 CC IS BYTE 1 ETC.
5549 CC
5550 CC RTN: JBYT - N/C
5551 CC JBUF - CONTAINS BYTE FROM JBYT IN THE JBIX POSITION
5552 CC JBIX - N/C
5553 CC
5554 CC FNC: TAKE THE RIGHT JUSTIFIED, ZERO FILLED BYTE FROM
5555 CC JBYT AND PLACE IT IN THE JBIX POSITION OF JBUF.
5556 CC
5557 CC REV: N/A
5558 CC
5559 CCALLS MPUAND-ISHFT-MOD
5560 CC
5561 C*
5562 DIMENSION JBUF(10)
5563 DATA IOV1/O177400/
5564 K1=JBIX
5565 J1=JBYT
5566 KK=MOD(K1,2)
5567 IF(KK.EQ.0) GO TO 500
5568 C*** M.S. BYTE - UPPER BYTE OF WORD
5569 K1=K1/2+1
5570 KK=JBUF(K1)
5571 JBUF(K1)=MPUAND(KK,255) + ISHFT(J1,8)
5572 RETURN
5573 C*** L.S. BYTE - LOWER BYTE OF WORD
5574 500 CONTINUE
5575 K1=K1/2
5576 KK=JBUF(K1)
5577 JBUF(K1)=MPUAND(KK,IOV1) + J1
5578 RETURN
5579 END
5580 SUBROUTINE MPUGTC(JBYT,JBUF,JBIX)
5581 CC NAM: MGUPTC VER: 1.0 DATE: 04/19/79 CMP: 16-BIT
5582 CC
5583 CC SYS: MACS
5584 CC
5585 CC ENT: JBYT - N/A
5586 CC JBUF - WORD OR ARRAY CONTAINING DESIRED BYTE(CHAR)
5587 CC JBIX - INDEX, POSITION IN JBUF TO GET BYTE(CHAR) FROM
5588 CC
5589 CC RTN: JBYT - BYTE(CHAR) FROM JBUF, RIGHT JUSTIFIED, ZERO FILLED
5590 CC JBUF - N/C
5591 CC JBIX - N/C
5592 CC
5593 CC FNC: TAKE THE JBIX BYTE(CHAR) FROM JBUF AND STORE IT
5594 CC RIGHT JUSTIFIED, ZERO FILLED IN JBYT, THE LOWER 8 BITS.
5595 CC
5596 CC REV: N/A
5597 CC
5598 CCALLS MPUAND-ISHFT-MOD
5599 CC
5600 C*
5601 DIMENSION JBUF(1)
5602 K1=JBIX
5603 KK=MOD(K1,2)
5604 IF(KK.EQ.0) GO TO 500
5605 C*** M.S. BYTE - UPPER BYTE OF WORD
5606 K1=K1/2+1
5607 KK=JBUF(K1)
5608 JBYT=ISHFT(KK,-8)
5609 RETURN
5610 C*** L.S. BYTE - LOWER BYTE OF WORD
5611 500 CONTINUE
5612 K1=K1/2
5613 KK=JBUF(K1)
5614 JBYT=MPUAND(KK,255)
5615 RETURN
5616 END
5617 SUBROUTINE ASCBIN
5618 CC NAM: ASCBIN VER: 1.0 DATA@E: 04-23/79 CMP: PDP-11
5619 CC
5620 CC SYS: MACS
5621 CC
5622 CC ENT: 'ITOKEN' = THE ARRAY WHICH CONTAINS THE RIGHT JUSTIFIED
5623 CC ZERO FILLED ASCII NUMBER.
5624 CC 'TKNSIZ' = NUMBER OF CHARACTERS IN 'ITOKEN'
5625 CC 'TKNVAL AND 'TKNVA2'= 0
5626 CC
5627 CC RTN: 'TKNVAL' = 2 LEAST SIGNIFICANT BYTES.
5628 CC 'TKNVA2' = 2 M.S.B.
5629 CC
5630 CC FNC: THIS ROUTINE TAKES A RIGHT JUSTIFIED, ZERO FILLED ASCII
5631 CC ARRAY AND CONVERTS IT TO A BINARY # UP TO 4 BYTES LONG.
5632 CC
5633 CC REV: N/A
5634 CC
5635 CCALLS ISHFT
5636 CC
5637 C*
5638 C*
5639 IMPLICIT INTEGER (A-Z)
5640 COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
5641 & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
5642 & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
5643 COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
5644 COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
5645 COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
5646 COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
5647 COMMON /A/ LIST,ICOL,NEST
5648 C***
5649 DATA IO1/O100000/
5650 DATA IO7/O77777/
5651 DO 600 I=1,TKNSIZ
5652 C*** REMOVE ASCII BITS
5653 ITOKEN(I)=ITOKEN(I) - 48
5654 C*** SAVE FOR LATER
5655 TKNVA3=TKNVAL
5656 TKNVA4=TKNVA2
5657 C*** SHIFT TWICE
5658 DO 100 J=1,2
5659 C*** IS M.S. BIT ON?
5660 K=TKNVAL .AND. IO1
5661 C*** SHOULD M.S. BIT BE MOVED INTO 2ND WORD, 1ST BIT.
5662 IF(K.NE.0) K=1
5663 TKNVA2=ISHFT(TKNVA2,1)+K
5664 50 TKNVAL=ISHFT(TKNVAL,1)
5665 100 CONTINUE
5666 C*** ADD IN THE # WE HAD BEFORE SHIFTING STARTED
5667 C
5668 C*** SAVE M.S. BIT
5669 K=TKNVAL .AND. IO1
5670 C*** REMOVE M.S. BITSO CARRY ON ADD CAN BE DETECTED
5671 TKNVAL=TKNVAL .AND. IO7
5672 200 TKNVAL=TKNVAL+TKNVA3
5673 C*** DID ADD PUT A BIT IN 16TH POSITION?
5674 J=TKNVAL .AND.IO1
5675 C*** NO CARRY ON ADD, PUT 16TH BIT BACK IN CASE IT IS 1
5676 IF(J.EQ.0)
5677 1 TKNVAL=TKNVAL .OR. K
5678 220 CONTINUE
5679 C*** ADD HAD CARRY, INCREMENT 2ND WORD IF PREVIOUS UPPER BIT NOT ZERO.
5680 IF(K.NE.0) K=1
5681 IF(J.EQ.0) K=0
5682 TKNVA2=TKNVA2+K+TKNVA4
5683 C*** IF J NE 0 AND K NE 0 THERE IS ROLL OVER & 16TH BIT MUST BE ZERO
5684 IF(K.EQ.1) TKNVAL=TKNVAL .AND. IO7
5685 240 CONTINUE
5686 C*** SHIFT LEFT ONE MORE BIT
5687 K=TKNVAL .AND. IO1
5688 IF(K.NE.0) K=1
5689 TKNVA2=ISHFT(TKNVA2,1)+K
5690 250 TKNVAL=ISHFT(TKNVAL,1)
5691 C*** SAVE M.S. BIT
5692 K=TKNVAL .AND. IO1
5693 C*** REMOVE M.S. BIT SO CARRY ON ADD CAN BE DETECTED
5694 TKNVAL=TKNVAL .AND. IO7
5695 C*** ADD IN THE NEW #.
5696 TKNVAL=TKNVAL+ITOKEN(I)
5697 C*** DID ADD PUT A BIT IN 16TH POSITION?
5698 J=TKNVAL .AND. IO1
5699 IF(J.NE.0) GO TO 300
5700 C*** NO CARRY ON ADD, PUT 16TH BIT BACK IN CASE IT IS 1
5701 TKNVAL=TKNVAL .OR. K
5702 GO TO 400
5703 300 CONTINUE
5704 C*** ADD HAD CARRY, INCREMENT 2ND WORD IF PREVIOUS UPPER BIT NOT ZERO.
5705 IF(K.NE.0) K=1
5706 TKNVA2=TKNVA2+K
5707 C*** IF J NE 0 & K NE 0 THERE IS CARRY OVER, ZERO 16TH BIT.
5708 IF(K.EQ.1) TKNVAL=TKNVAL .AND. IO7
5709 400 CONTINUE
5710 600 CONTINUE
5711 RETURN
5712 END
\f
programunit missng page 1
error messages
6. line 438 . 3 statement structure
line 439 . 0 statement sequence
line 442 . 0 statement sequence
line 443 . 0 statement sequence
line 444 . 0 statement sequence
line 445 . 0 statement sequence
line 446 . 0 statement sequence
line 447 . 0 statement sequence
line 448 . 0 statement sequence
line 449 . 0 statement sequence
line 453 . 0 statement sequence
line 474 . 4 type
line 477 . 3 type
line 505 . 3 type
line 506 . 3 type
line 508 . 3 type
line 509 . 3 type
line 510 . 3 type
line 511 . 3 type
line 512 . 3 type
line 525 . 1 label not referred
line 528 . 1 label not referred
line 548 . 3 type
line 549 . 3 type
line 550 . 3 type
line 551 . 3 type
line 552 . 3 type
line 565 . 1 label not referred
line 570 . 3 call
line 570 . 4 type
line 572 illegal number of main programs
***fortran sorry 90
▶EOF◀