1 /2 PAL8 ASSEMBLER FOR OS/8 MONITOR VERSION 10
11 /COPYRIGHT (C) 1970,1971,1972,1973,1974,1975 BY DIGITAL EQUIPMENT CORPORATION
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
45 \f/1-OCT-75 MB/MB/SM/MB/RL/JR/SR
54 /PAL8 IS AN 8K THREE PASS ASSEMBLER DESIGNED
55 /TO BE COMPATIBLE WITH THE OS/8 SYSTEM.
57 /PASS 1 READS THE INPUT (SOURCE) FILE AND CONSTRUCTS
60 /PASS 2 GENERATES THE BINARY (OBJECT) FILE, WHICH
61 /MAY BE LOADED WITH THE ABSOLUTE (BINARY) LOADER.
63 /PASS 3 GENERATES THE OCTAL SYMBOLIC ASSEMBLY
66 /PAL8 IS COMPATIBLE IN MOST RESPECTS WITH PAL III, MACRO-8
67 /4K PAL-D, AND 8K PAL-D, AS WELL AS THE CROSS-ASSEMBLER PAL10.
69 IFNDEF HASH<HASH=1> /DEFINE FOR HASH SYMBOL TABLE
70 /SET HASH=0 TO GET OLD PAL8 WAY OF HANDLING SYMBOL TABLE
72 /MAINTENANCE RELEASE CHANGES:
74 /1. INCLUDED JIM ROTH'S HASH TABLE MODIFICATIONS
75 /2. ALLOWED /B TO WORK PROPERLY [SEQ #2 PATCH FROM AUG '74 DSN]
76 /3. PUT CREFLS.TM ON SYS: NOT DSK: [PATCH SEQ #3, SEP '74 DSN]
77 /4. FIXED 7TH LEVEL CHECKSUM BIT [PATCH SEQ #7, MARCH '75 DSN]
78 /5. ALLOWED PAL8 TO RESTART BEFORE CD EXECUTED [DSN APR '75, SEQ #8]
79 /6. FIXED /F SO IT WORKS [PATCH SEQ #9, DSN APRIL 1975]
80 /7. FIXED /W SO IT DOESN'T REMEMBER TOP OF PAGE [DSN OCT '75]
81 /8. FIXED BUG RE MULTIPLE NON-RES INPUT HANDLERS
82 /9. CHANGED VERSION # TO V10, EDIT 1, 1975 COPYRIGHT
83 /10. ADDED DOCUMENTATION ON LOCATION OF HANDLERS AND BUFFERS
85 / WITHOUT /K, ALL CORE BUT 10000-11777 USED FOR SYMBOLS
86 / WITH /K, USES ALL CORE (AND SWAPS USR BETWEEN PASSES)
87 / UNDER BATCH, N5000-N7777 IS RESERVED FOR BATCH RESIDENT AS WELL
88 /12. /7 WITH HASH FEATURES PRINTS 7 COLUMN SYMBOL TABLE
89 /13. 14-DEC-75 JR: FIXED TYPO IN /W CODE IN LITERAL DUMP ROUTINE
91 /JR 14-APR-77 ADDED STANDARD DATE FORMAT TO HEADING
92 \f/COMMAND DECODER RULES:
94 /*BINARY(.BN),LISTING(.LS),CREF(.LS)<SOURCE(.PA),.../OPTIONS
97 /B BYTE SHIFT - ! IS 6 BIT SHIFT (!=^100+)
98 /C CREF AFTER - "CREFLS.TM" CREATED IF NO CREF
99 /D DDT TYPE SYMBOL - ONLY IF LISTING
100 /E 'LG' ERROR - LINKS ARE ERRORS
101 /F NO TEXT FILL - NO EXTRA 0 FILL IN 'TEXT'
102 /G LOAD+GO AFTER - SAME AS /L, BUT /G PASSED TO ABSLDR
103 /H NO PAGING - ONLY IF LISTING
104 /J JUST WHAT LOADS - INHIBITS LISTING OF UNASSEMBLED CODE
105 /K CHECK FOR MORE THAN 8K OF CORE (DEFAULT IS 8K)
106 /L LOAD AFTER - "PAL8BN.TM" CREATED IF NO BINARY
107 /N NO LISTING - ONLY IF LISTING
108 /O NO 200 ORG - NO AUTOMATIC 200 ORIGIN AFTER 'FIELD'
109 /S NO SYMBOL TABLE - ONLY IF LISTING
110 /T CR-LF NOT FF - ONLY IF LISTING
111 /W WIPE LITERALS - INHIBITS REMEMBERING OF LITERAL BOUNDS
113 /PERMANENT PATCH LOCATIONS FOR THE ABOVE SWITCHES ARE SYMBOLS
114 /OF THE FORM Z(SW)(PATCH) - E.G. ZT7640 IS THE LOC TO PATCH TO 7640
115 /TO REVERSE THE POLARITY OF THE "T" SWITCH.
118 /DECIMAL RADIX TO BASE 10
119 /DEVICE 2 WORD DEVICE CODE
120 /DTORG TYPESETTING TAPE ORIGIN
121 /EJECT SKIPS TO A NEW PAGE, AND IF ANY TEXT FOLLOWS,
122 / THAT TEXT BECOMES THE NEW HEADER LINE
123 /ENPUNCH ENABLE PUNCHING
124 /EXPUNGE REMOVE ALL SYMBOLS
126 /FILENAME 4 WORD FILE CODE
127 /FIXMRI DEFINE MEMORY REFERENCE INSTRUCTION
128 /FIXTAB MAKE ALL SYMBOLS PERMANENT
129 /IFDEF CONDITIONAL ON DEFINITION
130 /IFNDEF CONDITIONAL ON UNDEFINED
131 /IFNZRO CONDITIONAL ON NON-ZERO
132 /IFZERO CONDITIONAL ON ZERO
133 /NOPUNCH DISABLE PUNCHING
134 /OCTAL RADIX TO BASE 8
135 /PAGE RE-ORIGIN TO BEGINNING OF NEXT PAGE OR PAGE N
136 /PAUSE ALTERNATE END-OF-FILE
137 /RELOC ASSEMBLE FOLLOWING CODE AS IF LOC = ARG OF RELOC
139 /XLIST LISTING INHIBIT UNLESS THE XLIST IS
140 / FOLLOWED BY AN EXPRESSION. THEN IF THE EXPRESSION
141 / IS 0 START LISTING, OR NON-0 THEN INHIBIT LISTING
142 /ZBLOCK RESERVE BLOCK OF ZEROS
145 / WORD 1 BIT 0=1 PERMANENT SYMBOL
147 / BITS 3-11 CHARS 1 AND 2
149 / WORD 2 BIT 0=1 MEMORY REFERENCE INSTRUCTION
150 / BITS 2-11 CHARS 3 AND 4
152 / WORD 3 BIT 0=1 PSEUDO-OP
153 / BITS 2-11 CHARS 5 AND 6
155 / WORD 4 BITS 0-11 OCTAL VALUE
156 /CHARS ARE STORED AS:
157 / A TO Z ARE 01 TO 32
158 / 0 TO 9 ARE 33 TO 44
163 /+ TWO'S COMPLEMENT ADD
164 /- TWO'S COMPLEMENT SUBTRACT
166 /! BOOLEAN INCLUSIVE 'OR' OR BYTE SHIFT
167 / (SPACE) DELIMITER OR INCLUSIVE OR
168 /^ MULTIPLY (REPEATED ADDITION)
169 /% DIVIDE (REPEATED SUBTRACTION)
172 ASWAP= 40 /WATCH THIS SWAP AREA!!
173 MDATE= 7666 /MONITOR DATE
174 BIPCCL= 7777 /DATE EXTENSION AND BATCH IN PROG FLG IN FIELD 0
175 MPARAM= 7643 /COMMAND DECODER OPTION LIST
176 DCB= 7760 /DEVICE CONTROL BLOCK
177 JSBITS= 7746 /JOB STATUS WORD
178 BATOUT= 7400 /BATCH LOG OUTPUT ROUTINE IN BATCH RESIDENT
179 LNPRPG= 70 /56 LINES PER PAGE
180 HEDLEN= 50 /40 CHARACTERS IN PAGE TITLE
181 /(MUST BE A MULTIPLE OF 8)
191 /TABLE OF ERROR MESSAGE DEFINITIONS
194 IZ= "I-240^100+"Z-240 /ILLEGAL PAGE ZERO REFERENCE
195 CF= "C-240^100+"F-240 /CREF.SV NOT FOUND
196 US= "U-240^100+"S-240 /UNDEFINED SYMBOL
197 IP= "I-240^100+"P-240 /ILLEGAL PSEUDO-OP USAGE
198 SE= "S-240^100+"E-240 /SYMBOL TABLE EXCEEDED
199 ZE= "Z-240^100+"E-240 /PAGE ZERO EXCEEDED
200 PE= "P-240^100+"E-240 /CURRENT PAGE EXCEEDED
201 IC= "I-240^100+"C-240 /ILLEGAL CHARACTER
202 ID= "I-240^100+"D-240 /ILLEGAL DEFINITION
203 BE= "B-240^100+"E-240 /PUSH-DOWN OVERFLOW
204 DE= "D-240^100+"E-240 /DEVICE ERROR
205 DF= "D-240^100+"F-240 /DEVICE FULL
206 LD= "L-240^100+"D-240 /ABSLDR.SV NOT FOUND
207 IE= "I-240^100+"E-240 /ILLEGAL EQUATE
208 PH= "P-240^100+"H-240 /PHASE ERROR
209 II= "I-240^100+"I-240 /ILLEGAL INDIRECT
210 RD= "R-240^100+"D-240 /REDEFINITION
211 UO= "U-240^100+"O-240 /UNDEFINED ORIGIN
212 LG= "L-240^100+"G-240 /LINK GENERATED
217 /CR/LF CARRIAGE RETURN/LINE FEED (215,212)
222 FORMF6, 0 /USED IN DECIMAL PRINT ROUTINE
223 ERROR5, 0 /USED BY PACKED ASCII PRINT ROUTINE
225 KNTR, 0 /INPUT ROUTINE
228 /PRESET FOR ONCE ONLY CODE
231 PDLXR, PDLST /PUSH-DOWN AUTO INDEX REGISTER
232 TAGXR, SWAP1-1 /TAG AUTO INDEX REGISTER
233 XREG1, DSWIT1-1 /GENERAL AUTO INDEX REGISTER
234 XREG2, DSWIT2-1 /GENERAL AUTO INDEX REGISTER
236 /NOT USED AS AUTO INDEX REGISTERS
237 /EXCEPT DURING ONCE ONLY CODE
239 LAST1, DATE-1 /LAST DEFINED SYMBOL
241 LAST3, IFZERO HASH <SYMPRT+4-1>
242 IFNZRO HASH <SYMNWP-1>
243 LAST4, IFZERO HASH <SYMPR9-2-1>
244 IFNZRO HASH <SYMDDT-1>
251 LITPTR, 200 /LITERAL POINTER
253 RADIX, 0 /7777 IF DECIMAL MODE
254 PUNCHX, 0 /NON-ZERO IF NO PUNCHING
255 XLISTX, 0 /NON-ZERO IF NO LISTING
256 /*NOTE* PUNCHX AND XLISTX MUST BE TOGETHER
259 LOC, 200 /CURRENT LOCATION
260 OFFSET, 0 /LOCATION COUNTER OFFSET FROM "LOC"
261 OFSBUF, 0 /LOCATION COUNTER OFFSET BUFFER
262 STARSW, 0 /-1 IF NEXT ORIGIN SHOULD BE INHIBITED
264 OP, 0 /LAST OPERATOR CODE (0-6)
265 VALUE, 0 /EXPRESSION VALUE
266 VALUE2, 0 /EXPRESSION OPERAND
268 TXTSWT, 0 /SPACE SWITCH
269 TXTPTR, LINBUF+120 /TEXT POINTER
270 CHAR, 0 /CURRENT CHARACTER
272 THISPG, 0 /OVERFLOW PAGE
273 EDITPG, 0 /EDITOR PAGE
274 \fTEMP, 0 /TEMPORARY REGISTERS
279 OCHAR, OUTPUT /OUTPUT ROUTINE
280 OERROR, OTYPEO /PASS 1=OTYPEO; 2=OTYPEO; 3=LISOUT
281 PASS, -2 /-1 IF PASS 1, 0 IF PASS 2, 1 IF PASS 3
282 IOMON, 200 /USER SERVICE ROUTINES
283 CONDSW, 0 /NUMBER OF NESTED CONDITIONALS
284 EXPIND, 0 /0 IF MRI OK HERE
285 /NOT 0 IF MRI NOT OK HERE
286 CHKSUM, 0 /BINARY CHECK SUM
287 IZIND, 0 /"I" AND "Z" INDICATOR
288 /IF I, LEFT 6 BITS ARE NON-ZERO
289 /IF Z, RIGHT 6 BITS ARE NON-ZERO
290 THISTG, 0 /ASSIGNED NUMBER OF CURRENT TAG
291 HIGHTG, SYME-SYMS%4-1 /ASSIGNED NUMBER OF LAST TAG
292 LINCNT, 0 /LINE COUNT
293 ALPHAI, 0 /UNDEFINED TAG INDICATOR
295 GETCI, 0 /NOT=0 IF ONLY CARRIAGE RETURN ENDS LINE
296 /OTHERWISE /,;, OR CARRIAGE RETURN ENDS
297 LSTCNT, 0 /TAB COUNTER
298 UNDFSW, 0 /UNDEFINED SWITCH
299 INCTL, 601 /CONTROL WORD - FOR OS/8 I/O
300 LINKSW, 0 /OFF-PAGE LINK SWITCH
301 /0 IF NO LINK GENERATED, 0700 IF LINK
302 LININD, 0 /BACK-UP FOR LINKSW
303 PERROR, PERRO1 /DUMMY ERROR ROUTINE TO SUPPRESS CERTAIN
304 /MESSAGES DURING PASS 1
305 FLDIND, "0 /CURRENT FIELD IN ASCII DIGIT FORM
306 BINSRT, 0 /BINARY OR LISTING STARTING
307 ERCNT, 0 /ERROR COUNTER
308 LINK, 0 /LINK COUNTER
310 TAGMAX, 0 /SET TO PRIME # EQ TO MAX # SYMS
313 \f/STARTING ADDRESS OF PAL8 (0200)
314 /CHAINING ADDRESS (0201)
316 NAME1, JMP I NAME3 /NAME1-NAME3 USED LATER
317 NAME2, JMP I GETTA2 /TO STORE TAGS AS THEY ARE BUILT
319 GETTA2, NOCD /BUILDING SWITCH AND OVERFLOW PROTECT
322 /HANDLERS FOR NOPUNCH AND ENPUNCH PSEUDO-OPS
324 NOPUNX, CLA IAC /NON-ZERO FOR NO PUNCHING
325 ENPUNX, DCA PUNCHX /ZERO FOR PUNCHING
326 JMP I [LOOKEX /--EXIT TO MAIN--
329 /HANDLERS FOR DECIMAL AND OCTAL PSEUDO-OPS
331 DECIMX, STA /7777 FOR DECIMAL RADIX
332 OCTALX, DCA RADIX /ZERO FOR OCTAL RADIX
333 JMP I [LOOKEX /--EXIT TO MAIN--
335 /PICKS UP A TAG AND SEARCHES FOR IT
336 /"THISTG" HAS NUMBER OF TAG
338 /AC=7777 ON RETURN IF TAG NOT FOUND, 0 IF FOUND
341 DCA NAME1 /CLEAR BUILD AREA
345 DCA GETTA4 /SET POINTER FOR BUILDING
346 DCA GETTA2 /ZERO SWITCH
347 GETTG1, TAD CHAR /GET THE CHARACTER
348 AND [77 /MAKE IT 01-32 OR 60-71
349 TAD (-32 /WAS IT A TO Z?
351 TAD (-25 /NO - MAKE 60-71 INTO 33-44
352 TAD (32 /YES - IT IS NOW 01-32 OR 33-44
353 ISZ GETTA2 /LEFT SIDE?
355 TAD I GETTA4 /NO - RIGHT SIDE
356 DCA I GETTA4 /BUILD THE WORD
357 ISZ GETTA4 /BUMP TO NEXT WORD
358 GETTA1, JMS I [GETC /GET NEXT CHARACTER
359 JMS I [TSTALN /IS IT ALPHANUMERIC?
360 JMP GETTG1 /YES - KEEP BUILDING
362 TAD HIGHTG /NO - GET NUMBER OF HIGHEST TAG
364 DCA TEMP2 /SAVE DIFFERENCE
365 DCA THISTG /START AT TAG ZERO
366 CLL CML /LINK MUST BE ON INITIALLY
370 /GETTA4 IS POINTER TO NAME1-NAME3
371 /FOR DEPOSITING TAG AS IT IS BUILT
373 /TEMP2 IS # OF TAGS TO SKIP BETWEEN CHECKS FOR MATCH
374 /DURING BINARY SEARCHING
375 \fGETTG2, SZL /IS THISTG HIGHER THAN TAG?
377 GETTG4, DCA TEMP1 /CLEAR LAST TIME SWITCH
379 ISZ TEMP1 /SET LAST TIME SWITCH TO 1
380 TAD TEMP2 /GET # OF TAGS TO SKIP
383 TAD THISTG /INCREASE OR DECREASE TAG NUMBER
385 TAD TEMP2 /GET NUMBER
388 ISZ TEMP1 /YES-BUMP LAST TIME SWITCH
390 IAC /IF RESULT WAS 1, MAKE IT 2
391 DCA TEMP2 /SAVE IT FOR NEXT TIME
392 JMS I [FINDTG /GET THE TAG
396 TAD NAME1 /DOES IT MATCH?
398 JMP GETTG2 /NO - TRY NEXT TAG
400 AND TAG2 /YES - GET WORD 2
402 TAD NAME2 /DOES IT MATCH?
404 JMP GETTG2 /NO - TRY NEXT TAG
406 AND TAG3 /YES - DOES IT MATCH?
410 JMP GETTG2 /NO - TRY NEXT TAG
411 JMP I GETTAG /YES--RETURN--
413 TAD TEMP1 /LAST TIME SWITCH = 2?
415 JMP GETTG4 /NO-KEEP TRYING
416 ISZ THISTG /YES-QUIT SEARCHING
420 DCA TAG3 /TAG NOT FOUND
421 STA /AC=7777 MEANS NOT FOUND
422 JMP I GETTAG /--RETURN--
427 GETTGH,/JMS I [TLYREF /HACK ONLY
428 TAD NAME1 /HASH OUR NAME
435 JMS PROBE /NOW PROBE THE TABLE
436 TAD NAME1 /RE HASH THE NAME FOR A STEPSIZE
440 CLL /CALC MODULO PRIME INLINE
446 IAC /STEPSIZE MUST BE NON ZERO!
449 TAD THISTG /BUMP THE POINTER RANDOMLY
451 SZL /PROTECT AGAINST WRAP AROUND
452 TAD MPRIME /PROBABLY UNOPTIMAL SOLUTION
462 DCA THISTG /THISTG MODULO PRIME
463 / JMS I [TLYPRB /HACK ONLY
464 JMS I [FINDTG /GO GET IT
465 TAD [1777 /MASK THE TYPE BITS OUT
466 AND TAG1 /IS THERE ONE?
468 JMP NOTFND /NO EXIT POINTING AT IT
469 CIA /YES, DO A COMPARE
484 JMP I PROBE /FOUND EXIT WITH AC CLEAR
486 NOTFND, STA /NOT FOUND EXIT WITH AC SET
490 MPRIME, 0 /INITIALIZED BY ONCE ONLY CODE FOR MACHINE AT HAND
494 GETTA3, DCA GETTA2 /SAVE CHAR
501 DCA I GETTA4 /SET LEFT SIDE
504 SZA CLA /IS THIS AN OVERFLOW (>6) CHAR?
505 STA /NO - SET SWITCH TO RIGHT HALF
506 DCA GETTA2 /YES - LEAVE SWITCH AT LEFT HALF
510 \f/IGNORE SPACES ROUTINE
513 TAD CHAR /GET THE CHARACTER
514 TAD [-240 /IS IT A SPACE?
516 JMP I SPNOR /NO --RETURN--
517 JMS I [GETC /YES - GET NEXT CHARACTER
521 /HANDLER FOR PAUSE PSEUDO-OP
522 /END-OF-TAPE OR END-OF-FILE
525 DCA CHAR /SET END-OF-LINE CHARACTER
526 TAD [LINBUF+120 /REINITIALIZE TEXT POINTER
529 DCA I (INCHCT /INDICATE EMPTY BUFFER
530 ISZ I (INEOF /SET END-OF-FILE
531 JMP I [LOOKEX /--EXIT TO MAIN--
533 \f/OUTPUT 2 CHARACTER ERROR CODE
541 TAD [240 /CONVERT SIXBIT TO ASCII
542 JMS I OERROR /OUTPUT FIRST CHAR
546 JMS I OERROR /OUTPUT SECOND CHAR
547 JMP I ERROR1 /--RETURN--
549 /HANDLER FOR FIELD PSEUDO-OP
551 FIELDX, JMS I [SPNOR /IGNORE SPACES
552 JMS I [DUMPS /DUMP CURRENT PAGE LITERALS
553 JMS I [DUMPZ /DUMP PAGE ZERO LITERALS
554 JMS I [EXP /GET EXPRESSION
555 TAD VALUE /TRIM TO RIGHT 3 BITS
557 DCA FLDIND /STORE FOR LISTING
558 TAD PASS /IS THIS PASS 2?
560 JMP FIELDY /NO - PREPARE TO EXIT
561 TAD FLDIND /YES - GET FIELD NUMBER
563 RAL /AND CHANNELS 7 AND 8
565 JMS I OCHAR /OUTPUT FIELD SETTING
566 FIELDY, JMS I [CLEAN /CLEAN UP THINGS
567 TAD [200 /RESET ORIGIN TO 200
570 /CHANGE LAST 2 LOCATIONS TO:
573 /FOR INDAC GROUP TO OMIT RE-ORIGIN
574 \f/HANDLER FOR PAGE PSEUDO-OP
576 PAGEX, JMS I [DUMPS /DUMP SAME PAGE LITERALS
577 JMS I (XLISTZ /ANY EXPRESSION?
579 JMS I [EXP /YES - GET EXPRESSION
585 PAGEY, TAD LOC /NO ARGUMENT - FIND NEXT PAGE
589 TAD VALUE /GET START OF PAGE
590 STAR1, JMS I [PUNORG /PUNCH ORIGIN
592 TAD [LITBUF /RESET POINTERS
595 DCA LITPTR /INITIALIZE LITERAL POINTER FOR NEW PAGE
597 JMP I [PUNVAL /SEE ABOUT DUMPING SOURCE CODE
599 /HANDLER FOR FIXMRI PSEUDO-OP
601 FIXMRX, JMS I [SPNOR /IGNORE SPACES
602 JMS I [TSTALP /IS CHARACTER ALPHABETIC?
603 JMP FIXMR1 /YES-CONTINUE
604 JMS I [ICMESG /NO - GENERATE IC MESSAGE, GET NEXT CHAR
605 JMP FIXMRX+1 /KEEP LOOKING FOR ALPHABETIC CH. OR END OF LINE
606 FIXMR1, JMS I [GETTAG /PICK UP TAG
607 DCA ALPHAI /STORE UNDEFINED SWITCH
609 FIXMR2, JMS I [ICMESG
610 JMS I [SPNOR /IGNORE SPACES
611 TAD CHAR /WAS CHARACTER = ?
614 JMP FIXMR2 /NO - PRINT IC MESSAGE AND KEEP LOOKING
615 /FALL INTO EQUALS PROCESSOR
618 AC4000 /FALL INTO HERE FROM FIXMRI
619 EQUAL, JMS I [PUSHA /PUSH FIXMRI FLAG
620 JMS I [GETC /GET NEXT CHARACTER
621 TAD I (NAME1 /STORE THE SYMBOL NAME
622 JMS I [PUSHA /ON THE PUSH DOWN LIST
627 TAD THISTG /AND ITS PRESENT (OR FUTURE)
628 JMS I [PUSHA /POSITION IN THE SYMTAB
630 JMS I [PUSHA /STORE UNDEFINED INDICATOR
631 JMS I [SPNOR /IGNORE SPACES
632 JMS I [EXP /GET EXPRESSION TO RIGHT OF =
634 DCA ALPHAI /RESTORE UNDEFINED INDICATOR
636 DCA THISTG /RESTORE SYMBOL TABLE POSITION
637 TAD I PDLXR /RESTORE TAG NAME
643 ISZ UNDFSW /WAS ANY PART OF DEFINITION UNDEFINED?
645 JMS I PERROR /YES - GENERATE IE ERROR MESSAGE
647 ISZ PDLXR /CLEAR EXTRA WORD FROM PDL
648 JMP I [PUNVAL /FORGET ABOUT DEFINING TAG
651 EQUAL3, ISZ ALPHAI /WAS TAG DEFINED BEFORE?
652 JMP .+3 /YES - CHECK FOR ILLEGAL REDEFINITION
653 JMS I [INSRTG /NO - INSERT TAG INTO SYMBOL TABLE
654 JMP EQUAL2 /AND BYPASS ILLEGAL REDEF CHECK
655 JMS I [FINDTG /PUT TAG IN TAG1-TAGE AND VALUE2
659 SZA CLA /WERE DEFINITIONS THE SAME?
660 TAD TAG1 /NO - IS IT A PERMANENT SYMBOL?
662 JMP EQUAL2 /NO - OK TO REDEFINE
663 JMS I [ERROR /YES - GENERATE RD ERROR MESSAGE FIRST
665 EQUAL2, TAD VALUE /DEFINE OR REDEFINE
668 AND TAG2 /CLEAR OLD FIXMRI BIT
669 TAD I PDLXR /INSERT NEW ONE
671 JMS I [PUTTAG /STORE TAG
672 JMP I [PUNVAL /SEE ABOUT DUMPING SOURCE CODE
680 JMP I RTL6 /--RETURN--
683 /GET NEXT CHARACTER ROUTINE
684 /READS FROM THE INPUT FILES AND PASSES THE MODIFIED CHARACTERS
686 /IT ALSO PRINTS THE LATEST LINE IF IT HAS NOT BEEN PRINTED
689 ISZ TXTPTR /POINT TO NEXT CHARACTER
690 GETC7, TAD I TXTPTR /GET NEXT CHARACTER
692 JMP GETC8 /NO - MORE ARE IN THIS LINE
693 TAD PASS /IS THIS PASS 3?
697 DCA TXTPTR /RESET POINTER TO BEGINNING
698 TAD I TXTPTR /GET 1ST CHARACTER
700 JMP GETC1 /YES - LINE HAS BEEN PRINTED
701 TAD [-215 /IS IT 215?
703 JMP GETC2 /YES - DO NOT PRINT THE SPACES
704 TAD [211 /NO-OUTPUT 2 TABS
708 GETC2, JMS LINPRT /NOW PRINT THE LINE
712 DCA TXTPTR /RESET POINTER
714 GETC6, JMS I (INPUT /GET NEXT CHARACTER
716 DCA I TXTPTR /STORE THE CHARACTER
717 ISZ TXTSWT /TOO MANY?
722 \fGETC4, DCA I TXTPTR /SET END
724 DCA I TXTPTR /SET END OF LINE
726 DCA TXTPTR /RESET POINTER
728 DCA TXTSWT /RESET SWITCH
729 JMP GETC7 /GET THAT CHARACTER
731 GETC8, TAD [-215 /IS IT A CARRIAGE RETURN?
733 JMP GETC12 /YES-END OF LINE
735 TAD (215-"/ /IS IT A /?
737 JMP GETC13 /"/" IS END
738 TAD ("/-"; /IS IT A ;?
740 JMP GETC12 /";" IS END
741 TAD (";-211 /IS IT A TAB?
743 TAD (211-240 /OR A SPACE?
745 JMP GETC9 /NO-NOT ANYTHING SPECIAL
746 ISZ TXTSWT /YES-2ND OCCURANCE?
747 JMP GETC+1 /YES - IGNORE
749 DCA CHAR /NO - GIVE A SPACE
750 JMP I GETC /--RETURN--
752 GETC16, ISZ CONDSW /DECREMENT CONDITIONAL COUNTER
754 GETC17, TAD [LINBUF+120
758 DCA CHAR /STORE CHARACTER
760 DCA TXTSWT /SET THE SWITCH
761 JMP I GETC /--RETURN--
762 \fGETC13, TAD CONDSW /CURRENTLY IN CONDITIONALS?
765 DCA CONDSW /STORE UPDATED CONDITIONAL LEVEL
766 GETC15, ISZ TXTPTR /YES-SCAN LINE FOR < AND >
768 TAD [-215 /IS CHARACTER A CARRIAGE RETURN?
771 TAD (215-"> /NO IS IT A >?
774 TAD (">-"< /NO-IS IT <?
776 STA /YES - INCREMENT CONDITIONAL COUNTER
777 JMP GETC13 /NO - KEEP LOOKING
780 /CHAR IS NEGATIVE IF LOGICAL END OF LINE:
785 /CHAR MAY BE ZERO IF PHYSICAL END OF LINE:
787 \f/PRINT A LINE OF SOURCE CODE
791 DCA XREG1 /SET POINTER TO LINE
792 LINPR1, TAD I XREG1 /GET CHARACTER
793 SNA /IS IT END OF LINE?
794 JMP I LINPRT /YES - END LINE
795 JMS I OERROR /NO - OUTPUT CHARACTER
796 DCA I [LINBUF /CLEAR OUT 1ST CHAR IN LINE AS "PRINTED" FLAG
800 /AND ALL ERROR EXITS TO MONITOR
803 TAD (SE /SYMBOL TABLE EXCEEDED MESSAGE
804 MONERR, DCA MONER1 /ERROR IS SERIOUS ENOUGH TO
805 PHASE, TAD (OTYPEO / CAUSE IMMEDIATE RETURN TO
808 MONER1, PH /STORE ERROR TYPE HERE
809 JMP I [7600 /***EXIT TO MONITOR***
812 /FIND CURRENT PAGE NUMBER
813 /EXIT WITH NUMBER IN AC
819 JMP I FINDSP /--RETURN--
821 \f/**********************************************************
822 /THIS AREA IS SWAPPED OUT DURING PASS 1 AND 2
823 /** NO LITERALS IN THIS PAGE, AS THERE IS A PAGE OVERLAYING IT **
827 /PASS 3 LISTING OUTPUT
831 TAD XLISTX /IS THIS COVERED BY XLIST?
833 JMP I LISOUT /YES--RETURN--
834 ISZ LISCNT /NO-WAS PREVIOUS CHARACTER A 215?
836 ISZ LINCNT /WAS IT END OF PAGE?
838 ISZ THISPG /YES-START OVERFLOW PAGE
839 BEGIAB, JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED
840 HSWIT1, JMS I [FORMFD /0 IF /H SWITCH OPTION TO SUPRESS PAGING
842 LISOU1, TAD LISOU2 /IS CHARACTER A CARRIAGE RETURN?
845 JMP LISOU3 /YES - OUTPUT CR/LF
846 TAD [215 /NO - RESTORE CHARACTER
847 JMS I OCHAR /OUTPUT CHARACTER
848 JMP I LISOUT /--RETURN--
851 DCA LISCNT /REMEMBER THE 215 FOR NEXT TIME
852 JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED
853 JMP I LISOUT /--RETURN--
857 \f/FORM FEED OUTPUT ROUTINES
860 TAD LINCNT /GET LINE COUNTER
862 SNA CLA /ARE WE AT TOP OF PAGE?
863 JMP I FORMFD /YES - NO NEED FOR FORM FEED
864 TAD XLISTX /IS THIS COVERED BY XLIST?
866 JMP I FORMFD /YES--RETURN--
867 HSWITC, JMP FORMF1 /0 IF /T OR TTY:; JMP FORMF3 IF /H
868 /OUTPUT IF TTY:OR /T OPTION
872 JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED
874 JMP CRLF1 /OUTPUT LINE FEED
875 /CRLF1 WILL RETURN TO
876 /JMP-1 UNTIL LINCNT HAS
877 /BEEN BUMPED SUFFICIENTLY
880 TAD MINUS /OUTPUT ------
882 ISZ LINCNT /* NEXT 3 LOCS CHANGED IF NO /T OR TTY:
883 FORMF1, JMP .-3 /* STA
884 TAD [-4 /* DCA LINCNT /GENERATE ONE FORM FEED
885 DCA LINCNT /* STA /TURN CR INTO FF
886 JMS CRLF /OUTPUT CR/LF OR FF/LF
888 JMP CRLF1 /OUTPUT LINE FEED
892 FORM22, TAD [HEADER-1 /OUTPUT HEADER
895 FORM30, TAD I XREG2 /GET NEXT CHARACTER OF HEADING
898 JMS I OCHAR /NO-OUTPUT IT
900 TAD [-HEDLEN /DONE "HEDLEN" CHARACTERS YET?
902 JMP FORM30 /NO-CONTINUE
903 TAD FORMHD /YES-START SYSTEM HEADER
904 JMP FORM22 /WHICH STARTS AT HEADER+HEDLEN
909 \f/TTY: OR /T OUTPUTS FORM FEED AS
910 /CARRIAGE RETURN, MULTIPLE LINE FEEDS TO END OF PAGE
912 /CARRIAGE RETURN, 5 LINE FEEDS
914 /NO OPTIONS TREATS F/F AS
918 / /H OPTION TREATS F/F AS 2 CR/LF
920 /USER HEADER IS "HEDLEN" CHARACTERS WIDE
921 /ASSEMBLER HEADER ENDS WITH 0
926 FORM20, TAD EDITPG /OUTPUT EDITOR PAGE NUMBER
928 TAD THISPG /IS THERE PAGE OVERFLOW?
930 FORM21, JMP FORMF3 /NO
932 JMS I OCHAR /OUTPUT -
933 TAD THISPG /OUTPUT NUMBER OF OVERFLOW PAGE
936 FORMF3, JMS CRLF /OUTPUT 2 CR/LF
938 JMP I FORMFD /--RETURN--
939 \f/DECIMAL PRINT ROUTINE
942 DCA FORMF6 /SAVE NUMBER
944 DCA CRLF /POINT TO DIVISION LIST
945 FORM12, DCA FORMF7 /START WITH 0
948 ISZ FORMF7 /ADD 1 TO DIGIT
949 TAD I CRLF /SUBTRACT 1000, 100, OR 10
951 JMP FORM11 /0 IS END OF TABLE - NO MORE DIGITS
954 JMP FORMF5 /NO-KEEP SUBTRACTING
956 ISZ CRLF /BUMP LIST POINTER
957 TAD FORMF7 /WAS DIGIT A 0?
960 TAD ["0 /NO-MAKE IT ASCII
961 JMS I OCHAR /OUTPUT DIGIT
963 JMP FORM12 /4000 IN AC FORCES SIGNIFICANCE
965 FORM11, TAD FORMF6 /GET LAST DIGIT (UNITS PLACE)
967 JMS I OCHAR /OUTPUT DIGIT
968 JMP I FORMF4 /--RETURN--
972 \f/OUTPUT CARRIAGE RETURN/LINE FEED
973 /ENTER WITH AC=-1 TO GENERATE F/F LF
979 CRLF1, TAD [212 /RE-ENTRY FOR MULTIPLE LINE FEEDS
981 JMP I CRLF /--RETURN--
983 /CLEAR PAGE HEADING BUFFER
987 TAD [-HEDLEN /SET HEADING BUFFER
995 JMP I HEDCLR /--RETURN--
997 \f/SYMBOL TABLE OUTPUT (COLUMNAR)
998 /*CODE TO GENERATE DDT COMPATIBLE*
999 /**SYMBOL TABLE--SUBSTITUTED WITH*
1000 /**ONCE ONLY CODE IF NEEDED*******
1004 ISZ EDITPG /NEW PAGE
1007 TAD SMIN67 /DCA I SYMPR6-1
1008 DCA SYMPR7 /JMS SYMPR9+6
1009 SYMPR8, DCA SYMPR2 /TAD [377 //RUBOUT
1010 CLA CMA /JMS I OERROR
1012 TAD SYMPR2 /DCA THISTG
1013 CMA /TAD [215 //CARRIAGE RETURN
1014 DCA SYMPR3 /JMS I OERROR
1015 SYMPR5, ISZ SYMPR3 /JMS SYMPPP
1016 JMP SYMPR4 /JMP SYMPR9-1
1017 TAD [-4 /JMP SYMPR6+2
1019 SYMPR6, JMS SYMPPP /204 //EOT
1022 AND TAG1 /OUTPUT TAG
1029 JMS I OERROR /OUTPUT SPACE
1031 JMS OCTPRT /OUTPUT OCTAL VALUE
1032 ISZ SYMPR3 /JMP SYMPR5-2
1033 JMP SYMPR0 /TAD SYMPR6
1034 SYMPR9, TAD [215 /JMS I OERROR /CARRIAGE RETURN
1035 JMS I OERROR /TAD [377 //RUBOUT
1036 SYMPRB, ISZ SYMPR7 /JMS I OERROR
1037 JMP SYMPRA /JMS SYMPR9+6
1038 HSWIT2, JMS I [FORMFD /DCA LINCNT /0 IF NOT /H
1039 TAD SMIN67 /JMP I SYMPRT //--RETURN--
1041 TAD SYMOFS /TAD [-200
1042 SYMPRA, IAC /DCA SYMPR2
1043 TAD SYMPR2 /TAD [200 //LEADER-TRAILER
1044 JMP SYMPR8 /JMS I OERROR
1046 SYMPR4, JMS SYMPPP /ISZ SYMPR2
1047 JMP I SYMPRT /JMP SYMPR4-2 /--RETURN--
1048 JMP SYMPR5 /JMP I SYMPR9+6
1052 \fSYMPR0, TAD SMIN67
1054 JMS SYMPPP /SKIP 67(8) SYMBOLS
1061 JMP SYMPR1 /GO PRINT THE 67TH(8) SYMBOL
1075 JMP I SYMPPP /--RETURN--
1083 JMP I SYMPPP /--RETURN--
1084 /SYMNCL, -4 /DEFAULT IN LIU OF =N OPTION
1085 /SYMOFS, 245 /OFFSET TO FIRST SYM ON NEXT PAGE
1093 JMS I [FORMFD /OUTPUT A HEADING
1094 JMS I SYMHND /NOW READ THE SYMBOL TABLE SORT OVERLAY
1096 SYMSRT, OUDEVH+400 /TO HERE
1099 JMS I SYMSRT /SORT THEM AND SET LINK
1100 SYMNWP, DCA SYMTAG /POINT TO SYMBOL
1101 SZL /LINK OFF IF ANY SYMBOLS TO LIST
1102 JMP I SYMPRT /NONE --RETURN--
1103 TAD SMIN67 /SET LINE/PAGE COUNT
1109 JMP I SYMPRT /NO MORE IF AT HIGHTAG NOW
1111 DCA THISTG /PREPARE TO PRINT LEFTMOST SYMBOL
1112 TAD SYMNCL /4 PER LINE (DEFAULT)
1113 DCA SYMCCT /TO COLLUMS/LINE CNTR
1115 SYMLIN, JMS I [ERROR1
1122 JMP SYMNXL /SKIP TO NEXT LINE IF OFF TABLE
1123 \fSYMGO, JMS I [FINDTG /OK, GET IT
1132 TAD VALUE2 /PRINT VALUE NOW
1139 JMP SYMNXL /SKIP IF WRAP AROUND
1140 ISZ SYMCCT /ELSE DO NEXT COLUMN
1144 ISZ SYMTAG /POINT TO NEXT SYMBOL
1147 HSWIT2, JMS I [FORMFD
1150 TAD SYMOFS /OFFSET TO NEXT SYMBOL
1151 JMP SYMNWP /DO THE NEXT PAGE
1157 SYMOFS, 245 /DEFAULT
1162 ZBLOCK 4 /WASTE SOME SPACE
1166 /END OF AREA WHICH MAY BE SWAPPED OUT
1167 /DURING PASSES 1 AND 2
1168 /**********************************************************************
1171 \f/OCTAL PRINT ROUTINE
1172 /ENTER WITH # TO BE OUTPUT IN AC
1173 /** DO NOT USE TEMPS BELOW THIS LOC!
1179 OCTPR2, TAD OCTPR1 /GET EACH DIGIT SEPARATELY
1186 TAD ["0 /MAKE IT INTO AN ASCII CHARACTER
1187 JMS I OERROR /OUTPUT IT
1190 JMP I OCTPRT /--RETURN--
1194 \f/OUTPUT ONE REGISTER
1197 TAD PASS /WHICH PASS IS THIS?
1199 JMP PUNON2 /PASS 2--OUTPUT BINARY
1201 JMP PUNON3 /PASS 1--EXIT
1202 TAD FLDIND /GET FIELD NUMBER
1203 TAD ["0 /CONVERT TO ASCII
1204 JMS I OERROR /PRINT IT
1205 TAD LOC /GET LOW ORDER 4 DIGITS (LOC CTR)
1206 JMS OCTPRT /PRINT IT TOO
1207 TAD OFFSET /IF THIS CODE IS IN A RELOC SECTION,
1209 TAD (1200 /FLAG THE LOCATION COUNTER WITH A *
1210 DTORG1, JMS I [ERROR1 /OUTPUT 2 SPACES
1212 JMS OCTPRT /OUTPUT CONTENTS
1213 TAD I [LINBUF /IS THERE SOURCE CODE TO DUMP?
1215 JMP PUNON1 /NO-OUTPUT CARRIAGE RETURN
1216 TAD LINKSW /YES-DUMP LINK SWITCH (' ) OR ( )
1218 JMS I [LINPRT /DUMP SOURCE CODE
1219 JMP PUNON3 /AND EXIT
1221 PUNON1, TAD LINKSW /NO LINE - OUTPUT LINK SWITCH ANYWAY
1222 SZA /IF THERE IS ONE
1224 TAD [215 /OUTPUT CARRIAGE RETURN
1226 PUNON3, DCA LINKSW /CLEAR LINK SWITCH
1227 JMP I PUNONE /--RETURN--
1229 /PASS 2-OUTPUT ONE REGISTER
1231 PUNON2, TAD VALUE /GET CONTENTS
1233 JMS I [PUNOUT /OUTPUT AS 2 FRAMES
1234 JMP PUNON3 /AND EXIT
1236 \f/**CURRENT PAGE LITERALS ON THIS PAGE WILL BE LOST**
1237 /***WHEN OVERLAYED BY PUSHDOWN LIST**
1239 /ARRANGE TO OUTPUT ONE REGISTER
1243 JMS I [FINDSP /FIND CURRENT PAGE NUMBER
1245 DCA TEMP2 /POINT TO NUMBER OR LITERALS
1249 TAD I TEMP2 /IS PAGE FULL?
1254 JMP ONEOK /NO-OK TO ADD ONE MORE REGISTER
1257 JMS I [FINDSP /FIND CURRENT PAGE NUMBER
1258 JMS I PPEZE /GENERATE PE OR ZE ERROR
1259 ONEOK, JMS I [FINDSP /FIND CURRENT PAGE NUMBER
1262 TAD TEMP /IS THIS ADDRESS HIGHER THAN PREVIOUS
1263 CIA /HIGH INSTRUCTION PAGE?
1267 TAD TEMP /YES-THIS IS NEW HIGH INSTRUCTION
1270 PUNMOD, JMS I [PUNONE /OUTPUT THIS REGISTER
1271 ISZ LOC /GET NEXT LOCATION
1272 TAD LOC /IF THE "ISZ" SKIPS IT IS O.K. (A 0)
1273 AND [177 /IS THIS FIRST INSTRUCTION ON NEXT PAGE?
1275 JMP I PUNBIN /NO--RETURN--
1276 JMS I [FINDSP /YES-FIND CURRENT PAGE NUMBER
1277 TAD [LITBUF /RESET POINTERS
1281 JMP I PUNBIN /--RETURN--
1284 \fHEADER, "S;"Y;"M;"B;"O;"L;"S
1285 211;211;211;211;211 /FOR /N HEADER
1287 /************************************************************
1288 /CODE OVERLAYED ON PASS 3
1289 /BY USER HEADER BUFFER
1291 /CONTINUATION OF EXPUNGE HANDLER
1292 /ENTER ON PASS 1 ONLY
1294 EXPUNW, IFZERO HASH<
1296 DCA EXPUN2 /CLEAR NEW HIGH TAG COUNTER
1299 DCA TEMP3 /SAVE NUMBER OF SYM TBL ENTRIES
1302 JMS I [FINDTG /GET A SYMBOL
1303 TAD TAG1 /ONLY SAVE THE SYMBOL IF
1305 CLA /IT WAS A PSEUDO-OP, OR
1306 TAD TAG3 /THE SYMBOLS I OR Z
1308 JMP EXPUA4 /NO-FORGET TAG
1309 TAD EXPUN2 /YES-RETURN TAG TO SYMBOL TABLE
1314 ISZ TEMP3 /DONE YET?
1315 JMP EXPUNY /NO- TRY NEXT TAG
1317 TAD EXPUN2 /RESET HIGH TAG
1319 JMP I [LOOKEX /--EXIT TO MAIN--
1324 /HASH TABLE EXPUNGE - DEPENDS ON PSEUDO OPS
1325 /BEING HASHED FIRST. SCANS WHOLE TABLE (SLOW AS HELL!)
1327 DCA THISTG /POINT TO FIRST ENTRY
1328 TAD TAGMAX /SET THE COUNT
1331 EXPUNL, JMS I [FINDTG /GO GET ONE
1336 SPA SZL CLA /PSEUDO OP?
1337 JMP EXPUNS /YES, SKIP DELETION
1338 DCA TAG1 /NO, WIPE IT
1341 JMS I [PUTTAG /AND PUT IT BACK
1344 DCA HIGHTG /DECREMENT SYMBOL COUNT
1345 EXPUNS, ISZ THISTG /POINT TO NEXT ENTRY
1346 ISZ TEMP1 /TALLY COUNT
1347 JMP EXPUNL /GET ANOTHER
1348 JMP I [LOOKEX /DONE --RETURN--
1351 /***************************************************************
1352 \f/ASSEMBLER HEADER BUFFER
1354 ZBLOCK HEADER+HEDLEN-.
1356 " ;" ;"P;"A;"L;"8;"-
1357 "V;"1;VERSION-12+"0;SUBVERSION
1359 DATE, "N;"O;" ;"D;"A;"T;"E;" /GETS SET TO DD-MMM-YY IF DATE PRESENT
1360 " ;" ;"P;"A;"G;"E;" ;0
1362 /OCCUPIES NEXT 43(8) LOCATIONS
1367 /*********************************************************
1368 /ONCE ONLY CODE FOR /D OPTION
1369 /PUT INTO SYMLST FOR DDT COMPATIBLE SYMBOL TABLE
1370 /OVERLAYED DURING ASSEMBLY BY PUSHDOWN LIST
1372 DSWIT1, IFZERO HASH<
1411 /**********************************************************
1413 \f/*************************************************************
1415 /PAL8 TABLES - LOAD OVER INITIALIZATION CODE
1417 PDLST= PDLND+42 /PUSHDOWN LIST 43(8) LOCS LONG
1420 LINBUF= PDLST+1 /LINE BUFFER OCCUPIES 122(8) LOCATIONS
1422 LITBUF= LINBUF+122 /LITERAL TABLE IS 40(8) LOCATIONS (ONE PER PAGE)
1423 / SHOWING LOWEST PAGE ADDRESS USED FOR LITERALS
1425 TPINST= LITBUF+40 /TOP INSTRUCTION TABLE IS 40(8) LOCTIONS
1426 / SHOWING HIGHEST PAGE ADDRESS USED FOR INSTRUCTIONS
1428 LITBF2= TPINST+40-17 /LITERAL BUFFER 2 CONTAINS UP TO 160(8)
1429 /PAGE 0 LITERALS, SUBSCRIPTS 20-177
1431 LITBF1= LITBF2+200-100 /LITERAL BUFFER 1 CONTAINS UP TO 100(8)
1432 /CURRENT PAGE LITERALS, SUBSCRIPTS 100-177
1434 /*************************************************************
1435 \f/ONCE ONLY CODE FOR ASSEMBLER START UP
1436 /OVERLAYED BY BUFFERS
1438 /HANDLES SWITCH OPTIONS
1441 JMS I IOMON /CALL USER SERVICE ROUTINES
1442 5 /*COMMAND DECODER*
1443 2001 /DEFAULT INPUT EXTENSION IS .PA
1444 NOCD, CDF 10 /RETURN
1445 TAD I (7604 /IS THERE A BINARY FILE EXTENSION?
1447 TAD (216 /NO - DEFAULT EXTENSION IS .BN
1449 TAD I (7611 /IS THERE A LISTING FILE EXTENSION?
1451 TAD (1423 /NO - DEFAULT EXTENSION IS .LS
1453 TAD I (MPARAM+1 /WAS THE /T OPTION SELECTED?
1458 BEGIAA, DCA I (HSWITC /YES - GENERATE CR/LF IN PLACE OF F/F
1461 BEGINA, TAD [7605 /WAS TTY THE PASS 3 DEVICE?
1465 JMP BEGIAA /YES - GENERATE CR/LF IN PLACE OF F/F
1466 DCA I (BEGIAB /NOT /T OR TTY:
1469 TAD I (MPARAM+1 /WAS THE /S OPTION SELECTED?
1473 DCA I (SSWITC /YES -OMIT SYMBOL TABLE
1478 SNA CLA /WAS THE /N OPTION SELECTED?
1480 TAD BEGSKP /SET SWITCH
1481 DCA I (NSWITC /YES -SYMBOL TABLE BUT NO LISTING
1483 TAD I (MPARAM /WAS THE /H OPTION SELECTED?
1488 BEGHSW, TAD I (FORM21 /YES -SUPPRESS LISTING PAGE FORMAT
1492 BEGINB, DCA I (HSWIT2
1494 TAD I (MPARAM /WAS THE /D OPTION SELECTED?
1499 TAD I XREG1 /YES -DDT COMPATIBLE SYMBOL TABLE
1500 DCA I LAST3 /SUBSTITUTE ALTERNATE CODE
1501 ISZ DSWIT3 /INTO SYMBOL TABLE OUTPUT ROUTINE
1508 BEGIN1, TAD I (JSBITS /RESET JOB STATUS WORD TO
1509 AND (6777 /INDICATE PAL8 NOT RESTARTABLE
1513 JMS I (FMTDAT /CALL ROUTINE IN FIELD 1 TO SETUP DATE
1514 JMP I (BEGINZ /CONTINUE ON
1516 DSWIT3, DSWIT1-DSWITA
1517 DSWIT4, DSWIT2-DSWITB
1519 \f/ONCE ONLY CODE CONTINUED
1520 /ASSEMBLER INITIALIZATION PROCEDURES
1523 BEGINZ, TAD [7600 /WHAT DEVICE FOR BINARY OUTPUT?
1526 TAD (-70 /STAND-ALONE
1528 DCA I (SWAPR2+LEADER /SET AMOUNT OF LEADER TRAILER
1529 DCA LAST1 /NO DEFINED TAG
1530 BEGIN5, IFZERO HASH<
1532 TAD I BLK1 /MOVE SYMBOL TABLE TO FIELD 1
1541 DCA I [LINBUF+120 /SET BUFFER POINTERS
1543 TAD [7600 /IS PTP BINARY OUTPUT DEVICE?
1550 DCA I (PTPSW /YES - SET PTP SWITCH
1551 TAD BLK1 /NO - IS IT A DIRECTORY DEVICE?
1554 TAD (TAD [77 /YES - SET DIRECTORY SWITCH
1556 TAD [7605 /IS PTP GETTING LISTING OUTPUT?
1561 DCA I (SWAPR2+PTPSW1 /YES - SET PASS 3 PTP SWITCH
1562 TAD [7605 /NO - IS DIRECTORY DEVICE GETTING
1563 JMS I (OTYPE /LISTING OUTPUT?
1566 TAD (TAD [77 /YES - SET PASS 3 DIRECTORY SWITCH
1567 DCA I (SWAPR2+DIRSW1
1569 \fMONLST, TEXT /JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC/
1572 /CONTINUED CHECK OF COMMAND DECODER OPTIONS
1575 TAD I (MPARAM /WAS THE /G OR /L OPTION CHOSEN?
1582 SZA CLA /WAS THERE A BINARY OUTPUT FILE?
1584 BINLOP, TAD PALBIN /NO - CREATE FILE PAL8BN.TM
1585 DCA I PALBIX /ON SYSTEM DEVICE
1591 TAD (-10 /SET AMOUNT OF LEADER TRAILER
1592 DCA I (SWAPR2+LEADER
1593 \f/SET UP FOR LOAD OR LOAD AND GO
1598 JMS I IOMON /CALL USER SERVICE ROUTINES
1599 2 /* LOOKUP PERMANENT FILE *
1600 LOAD, PLOAD /FILENAME ABSLDR.SV
1601 BINCNT, -5 /FILE LENGTH
1602 JMP NOLOAD /ABSLDR.SV NOT FOUND
1603 TAD LOAD /NORMAL RETURN
1604 DCA I (CHAIN /SET STARTING BLOCK NUMBER
1605 DCA I (LSWITC /FOR CHAIN CALL
1608 NOLOAD, JMS I [ERROR /GENERATE LD ERROR MESSAGE
1610 JMP I (BEGISW /ASSEMBLE BUT DO NOT CHAIN TO LOADER
1613 BLK2, 7600+SYMS-SYME
1620 \fCCC, TAD I CC231 /FINAL PIECE OF STARTUP ONCE-ONLY CODE
1623 DCA I CC231 /"HSWITC"=JMP FORMF1 IF WAS 0
1628 ZJ7640, SNA CLA /WAS /J OPTION SPECIFIED?
1629 DCA I CCJLOC /NO - PRINT UNASSEMBLED CONDITIONAL CODE
1634 ZW7640, SNA CLA /WAS /W OPTION SPECIFIED?
1639 SZA CLA /ARE WE OUTPUTTING FF'S IN LISTING?
1641 TAD CC24 /YES - SUBSTITUTE SOME CODE
1647 BEGIS3, JMS I OVLL7 /CALL SYSTEM DEVICE
1650 ASWAP /INTO TEMP AREA
1651 JMP I OVLL8 /ERROR?!
1652 TAD I LAST2 /MOVE PASS 1&2 ONLY CODE
1653 DCA I TAGXR /OVER PASS3 SWAPPED OUT CODE
1657 JMS I CCHSH /FINALLY HASH OUT THE TABLE
1661 START2-1 /OK - NOW GO DO SOME ASSEMBLING!
1662 D4, DCA I CCWLOC /NO - DON'T WIPE LITERALS AS YOU DUMP THEM
1669 CC23, FORMF1&177+5200
1686 PLOAD, FILENAME ABSLDR.SV
1688 CKBAT, TAD I CC7777 /GET BATCH FLAG WORD
1690 SNL CLA /BATCH RUNNING?
1691 JMP I CCOPTM /NO, GO WITH LINK OFF
1693 AND CC0070 /GET BATCH FIELD
1694 TAD CCCIF0 /FORM CIF TO BATCH FIELD
1695 DCA OTYPB1 /MODIFY TTY OUTPUT ROUTINE TO GO TO BATCH
1696 TAD CCJMSB /LOG INSTEAD
1700 JMP I CCOPTM /RETURN TO CORE DETERMINER, LINK SET
1706 CCJMSB, JMS I [BATOUT
1707 \f/THIS CODE SITS AFTER THE END OF THE LITERAL TABLE
1709 IFNZRO .-LITBF1-200&4000 <*LITBF1+200>
1711 OTYPEO, 0 /TYPE A CHARACTER, CHECKING FOR ^O AND ^C
1712 DCA OTYPEC /SAVE CHAR
1713 JMS CTCCHK /CHECK FOR ^C - RETURN CHAR-203 IN AC
1720 OTYPB3, JMP .-1 /WAIT FOR TTY
1722 OTYPCR, SZA CLA /SET TO CLA DURING "ERRORS DETECTED" STUFF
1724 TAD [212 /IF CHAR WAS CR, TYPE LF
1728 CTCCHK, 0 /CHECK FOR ^C
1730 KRS /OR IN KEYBOARD CHAR
1733 KSF /3B BUT WAS CHAR REALLY THERE?
1734 JMP I CTCCHK /NO ^C - RETURN
1735 JMP I [7600 /RETURN TO OS/8
1737 TTLMSG, "E-240^100+"R-240 /ERRORS DETECTED:
1747 "L-240^100+"I-240 /LINKS GENERATED:
1757 \f/OUTPUT A CHARACTER TO OUTPUT DEVICE
1758 /CALLED BY JMS I OCHAR
1759 /WITH CHARACTER IN 8-BIT ASCII IN AC
1761 OUTPT1, PUNCHX /PASS 2=PUNCHX; 3=XLISTX
1764 AND [377 /MASK OUT LEFT 4 BITS
1766 TAD I OUTPT1 /IS THIS PASS 3 AND
1768 TAD OUTINH /IS THIS COVERED BY XLIST?
1770 JMP I OUTPUT /YES--RETURN--
1771 TAD OUTPT2 /NO - GET CHARACTER
1774 TAD OUTPT2 /IF LESS THAN 200, THEN
1775 TAD CHKSUM /ADD IT TO CHECKSUM
1777 TAD OUTPT2 /GET CHARACTER
1778 TAD (-211 /IS IT A TAB?
1780 JMP OUTPT3 /YES - OUTPUT SPACES
1781 JMS OUTPUX /NO - OUTPUT CHARACTER
1782 TAD OUTPT2 /IS IT LINE FEED?
1785 JMP I OUTPUT /NO--RETURN--
1786 TAD [7773 /YES - RESET LSTCNT
1788 JMP I OUTPUT /--RETURN--
1790 \f/OUTPUT SPACES INSTEAD OF TAB
1794 JMS OUTPUX /OUTPUT SPACE
1795 TAD LSTCNT /TAB STOPS ARE EVERY 8 SPACES
1799 JMP I OUTPUT /--RETURN--
1801 /OUTPUT THE CHARACTER
1802 /PACKS CHARACTERS IN STANDARD OS/8 FORMAT
1805 ISZ OUJMP /BUMP 3-WAY SWITCH
1806 OUJMP, HLT /WILL BE CHANGED - SHOULD NEVER HALT
1807 JMP OCHAR1 /CHARACTER #1
1808 JMP OCHAR2 /CHARACTER #2
1809 OCHAR3, TAD OUTPT2 /CHARACTER #3
1813 TAD I OUPOLD /ADD 4 BITS TO WORD 1
1820 TAD I OUPTR /ADD 4 BITS TO WORD 2
1823 DCA OUJMP /RESET SWITCH
1825 ISZ OUDWCT /BUFFER FULL?
1828 JMS I (OUTDMP /DUMP BUFFER
1829 JMS OUSETP /RESET POINTERS
1832 \fOCHAR2, TAD OUPTR /SAVE POINTER
1836 DCA I OUPTR /SET 8 BIT WORD
1839 AND [100 /CHECK FOR PRINTABLE CHAR
1841 ISZ LSTCNT /BUMP TAB COUNT
1842 OUTINH, 0 /ALWAYS 0 OR 1!
1843 JMP I OUTPUX /--RETURN--
1852 TAD [7600 /SET OUTPUT WORD COUNT
1855 DCA OUPTR /RESET POINTER
1857 DCA OUJMP /RESET SWITCH
1858 CLL /MUST CLEAR LINK!!
1859 JMP I OUSETP /--RETURN--
1860 \f/HANDLER FOR DEVICE PSEUDO-OP
1862 DEVICX, JMS I [SPNOR /IGNORE TRAILING SPACES
1864 JMP DEVIC1 /PACK 4 CHARACTERS
1867 /HANDLER FOR FILENAME PSEUDO-OP
1869 FILENX, JMS I [SPNOR /IGNORE TRAILING SPACES
1871 JMS FILE1 /PACK 6 CHARACTERS
1873 TAD [-". /WAS CHARACTER . ?
1875 JMS I [GETC /YES-SKIP TO EXTENSION
1877 DEVIC1, JMS FILE1 /PACK 2 CHARACTERS
1878 JMP I [LOOKEX /--EXIT TO MAIN--
1881 /NEGATIVE OF # OF CHARACTERS TO BE PACKED IN AC ON ENTRY
1884 DCA FILE6 /SAVE # OF CHARACTERS TO PACK
1885 DCA I (TEXT6 /RESET PACK SWITCH
1886 FILE4, JMS I [TSTALN /IS CHARACTER IN CHAR ALPHANUMERIC?
1888 JMP FILE5 /NO-DONE PACKING
1889 ISZ FILE6 /YES-TOO MANY CHARACTERS?
1892 DCA FILE6 /RESET # OF CHARACTERS AND IGNORE
1896 JMS I (TEXT2 /PACK A CHARACTER
1897 FILE2, JMS I [GETC /GET A CHARACTER
1900 JMS I (TEXT2 /PACK A ZERO CHAR
1901 FILE5, ISZ FILE6 /ARE WE DONE?
1902 JMP .-2 /NO - PAD WITH ZEROES
1903 JMP I FILE1 /YES--RETURN--
1906 \f/HANDLER FOR TEXT PSEUDO-OP
1907 /SPACES ARE IGNORED TO DELIMITER
1908 /DELIMITER IS FIRST PRINTING CHARACTER
1910 /NON-PRINTING CHARACTERS ARE ILLEGAL
1911 /A PRINTING CHARACTER HAS EITHER BIT 5
1912 /OR BIT 6 SET, BUT NOT BOTH
1914 TEXT8, JMS I [GETC /GET NEXT CHARACTER
1915 TEXTX, CLL CLA CML RAR /AC=4000
1916 DCA GETCI /; AND / ARE NOT END OF LINE
1917 JMS TEXT1A /CHECK FOR PRINTING CHARACTER
1918 JMP TEXT8 /NON PRINTING - IGNORE
1919 TAD [-240 /IGNORE SPACES UNTIL DELIMITER
1922 TAD [240 /RESTORE CHARACTER
1924 DCA VALUE2 /STORE NEGATIVE DELIMITER
1925 DCA TEXT6 /SET PACKING SWITCH
1926 TEXT3, JMS I [GETC /GET NEXT CHARACTER
1927 JMS TEXT1A /IS IT A PRINTING CHARACTER?
1929 TAD VALUE2 /YES - IS IT DELIMITER?
1931 JMP TEXT4 /YES - TERMINATE
1932 TAD CHAR /NO - PACK AND OUTPUT
1936 TEXT4, DCA GETCI /RESET GETCI TO CALL ; AND / END OF LINE
1937 JMS I [GETC /SKIP DELIMITER
1938 TEXT4X, JMS TEXT2 /OUTPUT 0 TO FILE
1942 /FOR NO EXTRA WORD OF ZEROS
1943 DCA GETCI /RESET GETCI IN CASE WE HIT CR
1944 JMP I [LOOKEX /--EXIT TO MAIN--
1945 \fTEXT9, JMS I [ERROR /GENERATE IC ERROR MESSAGE
1949 /SKIP ON PRINTING CHARACTER
1953 SPA SNA CLA /IS CHARACTER -
1958 SZA CLA /IS THE CHAR PRINTING?
1959 ISZ TEXT1A /YES - INCREMENT RETURN
1960 TAD CHAR /WITH CHARACTER IN AC
1961 JMP I TEXT1A /--RETURN--
1963 /OUTPUT 2 TEXT CHARACTERS (ONE REGISTER)
1964 /ENTER WITH CHARACTERS IN AC
1967 AND [77 /GET RIGHT 6 BITS
1968 ISZ TEXT6 /WHICH HALF OF WORD?
1970 TAD TEXT7 /RIGHT--ADD IN LEFT HALF
1971 JMS I [PUNBIN /OUTPUT IT
1972 JMP I TEXT2 /--RETURN--
1974 TEXT5, JMS I [RTL6 /GET LEFT HALF OF WORD
1976 CLA CMA /SET SWITCH FOR RIGHT HALF
1978 JMP I TEXT2 /--RETURN--
1982 \f/HANDLER FOR EXPUNGE PSEUDO-OP
1984 EXPUNX, TAD PASS /IS THIS PASS 1
1986 JMP I [LOOKEX /NO--EXIT TO MAIN--
1987 JMP I (EXPUNW /YES-CONTINUE AT EXPUNW
1994 TAD I (OUTINH /OUTPUT INHIBITED?
1996 JMP I OCLOSE /YES--RETURN--
1997 PTPSW, TAD [232 /NO-0 IF PTP: - OUTPUT ^Z
1999 JMS I OCHAR /AND ZEROS
2001 DIRSW, TAD [177 /TAD [77 IF NOT DIRECTORY
2002 AND I (OUDWCT /FILL OUT BUFFER OR HALF BUFFER
2005 TAD I (OUDWCT /IS THERE OUTPUT TO BE DUMPED?
2008 JMS OUTDMP /YES - DUMP IT
2009 TAD OUFILE /GET DEVICE NUMBER IN AC
2011 JMS I IOMON /CALL USER SERVICE ROUTINES
2012 4 /*CLOSE OUTPUT FILE*
2013 OUCNAM, 0 /POINTER TO FILENAME TO BE DELETED
2014 OUCCNT, 0 /LENGTH OF NEW PERMANENT FILE
2015 JMP SYSER3 /DE**FATAL ERROR**
2016 JMP I OCLOSE /--RETURN--
2020 /AC CONTAINS CONTROL WORD FOR DUMP
2023 TAD [4000 /BE SURE CONTROL WORD IS
2024 DCA OUCTLW /A WRITE OPERATION
2025 TAD OUBLK /GET STARTING BLOCK NUMBER
2026 TAD OUCCNT /ADD IN COUNT
2027 DCA OUREC /SET THIS BLOCK NUMBER
2029 TAD [100 /ROUND HALF-BLOCK, IF ANY
2033 AND [17 /GET THIS COUNT
2035 DCA OUCCNT /ADD TO TOTAL COUNT
2036 TAD OUCCNT /IS OUTPUT DEVICE FULL?
2038 TAD OUELEN /CHECK AGAINST MAXIMUM LENGTH
2040 JMP SYSER2 /DF**FATAL ERROR**
2041 JMS I OUHNDL /CALL OUTPUT DEVICE HANDLER
2042 OUCTLW, 0 /CONTROL WORD
2043 OUBUF /BEGINNING OF OUTPUT BUFFER
2044 OUREC, 0 /STARTING BLOCK NUMBER
2045 SYSER3, CLA SKP /ERROR RETURN
2046 JMP I OUTDMP /--RETURN--
2047 SYSERR, TAD (DE /DE **FATAL ERROR**
2054 SYSER2, TAD (DF /GENERATE DF ERROR MESSAGE
2055 JMP I [MONERR /**FATAL ERROR**
2059 LOOKE2, 0 /WAS THIS END OF LINE
2060 TAD CHAR / OR END OF CONDITIONAL?
2063 JMP CONEND /END OF CONDITIONAL
2066 JMP I LOOKE2 /NOT END OF LINE--RETURN--
2067 LOOKE1, JMS I [GETC /GET A CHARACTER
2068 MAIN, JMS I (CTCCHK /CHECK FOR ^C
2069 CLA /** CTCCHK RETURNS AC NON-ZERO!
2070 JMS I [SPNOR /IGNORE SPACES
2072 TAD (-"$ /WAS IT $ ?
2074 JMP I (ENDPAS /NO-END THIS PASS
2077 JMP STAR /YES-HANDLE *
2078 JMS I [TSTALP /NO-WAS IT ALPHABETIC?
2081 TOEXP, JMS I [EXP /GET REST OF EXPRESSION
2083 DCA LINKSW /STORE LINK SWITCH
2085 JMS I [PUNBIN /OUTPUT THE REGISTER
2086 LOOKEX, JMS I [SPNOR /IGNORE TRAILING SPACES
2087 JMS LOOKE2 /IS LINE ENDED?
2088 ILCHAR, JMS I [ERROR /NO-GENERATE IC ERROR MESSAGE
2092 CONEND, TAD CONDSW /ARE WE INTO CONDITIONALS?
2094 JMP ILCHAR /NO - > IS ILLEGAL
2095 IAC /ONE LESS CONDITIONAL
2097 CONEN1, JMS I [GETC /GET NEXT CHARACTER
2098 JMP LOOKEX /AND TRY FOR END AGAIN
2101 STAR, JMS I [GETC /GET NEXT CHARACTER AFTER *
2102 JMS I [SPNOR /IGNORE SPACES
2103 JMS I [EXP /GET REST OF EXPRESSION
2104 STAR0, DCA STARSW /ENTER HERE FROM RELOC WITH AC = -1
2105 ISZ UNDFSW /WAS ANYTHING UNDEFINED?
2107 JMS I [ERROR /YES-GENERATE UO ERROR MESSAGE
2111 TAD LOC /IS THIS THE SAME PAGE AS
2112 AND [7600 /THE PREVIOUS CODE?
2117 JMP STAR2 /YES-PUNCH ORIGIN
2118 JMS I [DUMPS /NO-DUMP LITERALS
2119 TAD OFSBUF /SET OFFSET TO NEW VALUE
2120 DCA OFFSET /AFTER LITERALS ARE DUMPED.
2121 TAD OP /PUNCH NEW ORIGIN, SET "VALUE"
2122 JMP I (STAR3 /FOR LISTING, AND SET UP IN NEW PAGE
2124 STAR2, TAD OFSBUF /SET OFFSET TO NEW VALUE
2127 JMS I [PUNORG /PUNCH ORIGIN
2128 DCA LAST1 /CLEAR LAST DEFINED SYMBOL
2131 ALPHA, JMS I [GETTAG /PICK UP TAG-IS IT IN TABLE?
2132 DCA ALPHAI /STORE UNDEFINED TAG SWITCH
2133 TAD TAG3 /IS IT A PSEUDO-OP?
2135 JMP I VALUE2 /YES-GO TO ITS HANDLER
2137 TAD (-", /WAS IT TERMINATED BY , ?
2139 JMP COMMA /YES-DEFINE THE SYMBOL
2140 TAD (",-"= /NO-WAS IT TERMINATED BY = ?
2142 JMP I (EQUAL /YES-EQUATE THE SYMBOL
2144 JMP TOEXP /TREAT AS AN EXPRESSION
2147 COMMA, JMS I [GETC /GET NEXT CHARACTER
2148 ISZ ALPHAI /WAS TAG DEFINED PREVIOUSLY?
2150 TAD LOC /NO-STORE CURRENT ADDRESS FOR DEFINITION
2152 JMS I [INSRTG /PUT TAG IN SYMBOL TABLE
2153 COMMA1, TAD TAG1 /STORE FOR ERROR MESSAGE OUTPUT
2161 JMP MAIN /--EXIT TO MAIN--
2163 COMMA2, TAD LOC /DO NEW AND OLD DEFINITIONS AGREE?
2167 JMP COMMA1 /YES-ALLOW REDEFINITION
2168 JMS I [ERROR /NO-GENERATE ID ERROR MESSAGE
2170 JMP MAIN /--EXIT TO MAIN--
2176 OPEXPL, OP5 /! - CHANGED TO OP3 IF /B ON
2179 \f/EXPRESSION PROCESSOR
2180 /POSSIBLE RECURSIVE ENTRY
2181 /ENTER WITH CHARACTER IN CHAR
2184 DCA EXPIND /SET INDICATOR (NOT 0 IF NO MRI FOUND)
2185 DCA LININD /CLEAR LINK GENERATED SWITCH (' )
2186 DCA VALUE /START WITH "VALUE" = 0
2187 DCA UNDFSW /CLEAR UNDIFINED SWITCH
2189 JMS I [PUSHA /SAVE RETURN ADDRESS
2194 TAD CHAR /IS CHARACTER A + ?
2196 CLL RTR /PUT THE 2 BIT IN THE LINK
2197 SZA CLA /WAS CHAR 53(+) OR 55(-)?
2199 RAL /YES - OP IS 0 OR 1, DEPENDING
2201 JMS I [GETC /GET NEXT CHARACTER
2202 ISZ EXPIND /MRI NO LONGER LEGAL ON THIS LINE
2203 EXP1A, TAD CHAR /IS CHARACTER A . ?
2206 JMP PERIOD /YES-GO TO . HANDLER
2207 TAD (".-"" /NO-IS IT " ?
2209 JMP QUOTE /YES-GO TO " HANDLER
2210 TAD (""-"[ /NO-IS IT [ ?
2215 JMP I (LIT /YES - LITERAL - LINK HOLDS WHICH KIND
2216 JMS I [TSTALP /NO-IS IT ALPHABETIC?
2217 JMP I (ALPHA1 /YES-HANDLE SYMBOL
2218 JMS I [TSTNUM /NO-IS IT NUMERIC?
2219 JMP NUMBER /YES-HANDLE NUMBER
2221 EXP2, JMS ENDCHK /NO-CHECK FOR END
2222 JMP EXP1A /NOGO - TRY AGAIN
2224 TAD [-4 /IS OP SPACE (4)
2226 JMP I (EXPXIT /YES-EXIT
2228 IC /GIVE IC MESSAGE ON ILLEGAL OPERATOR
2229 JMP I (EXPINT /EXIT ANYWAY
2230 \f/END OF EXPRESSION CHECK
2235 TAD (-"] /IS CHARACTER A ] ?
2236 SZA /YES-SKIP A EXIT
2237 TAD ("]-") /IS CHARACTER A ) ?
2238 SZA /YES-SKIP A EXIT
2239 TAD (")-"> /IS CHARACTER A > ?
2240 SZA /YES-SKIP AND EXIT
2241 TAD (">-"< /IS CHARACTER A < ?
2243 JMP ENDCH1 /YES-SKIP AND EXIT
2245 SPA CLA /IS IT END-OF-LINE?
2246 JMP ENDCH1 /YES-SKIP AND EXIT
2247 JMS I [ICMESG /NO - GENERATE IC MESSAGE AND GET NEXT CHAR
2248 JMP I ENDCHK /--RETURN--
2250 ENDCH1, ISZ ENDCHK /INCREMENT RETURN ADDRESS
2251 JMP I ENDCHK /--RETURN--
2254 NUMBE2, TAD RADIX /IS THE CURRENT RADIX OCTAL?
2256 TAD CHAR /YES-IS THE DIGIT GREATER THAN 7?
2259 JMP NUMBE3 /YES-ILLEGAL CHARACTER
2260 TAD TEMP /NO-ADD IT TO THE PREVIOUS
2261 CLL RAL /ACCUMULATED VALUE
2264 TAD RADIX /IS RADIX OCTAL?
2271 JMS I [GETC /GET NEXT CHARACTER
2272 NUMBE4, JMS I [TSTNUM /IS IT NUMERIC?
2273 JMP NUMBE2 /YES-CONTINUE ACCUMULATING NUMBER
2274 TAD TEMP /NO-STORE NUMBER
2276 NUMBE5, TAD OP /GO COMBINE IT VIA LAST OPERATION
2278 DCA TEMP /FIND THE OPERATOR HANDLER
2281 JMP I TEMP /GO TO THE HANDLER
2282 \f/8 OR 9 FOUND DURING OCTAL RADIX
2284 NUMBE3, JMS I [ICMESG /GENERATE IC ERROR MESSAGE AND
2285 JMP NUMBE4 /IGNORE CHARACTER
2290 PERIOD, JMS I [GETC /GET NEXT CHARACTER
2291 TAD LOC /MAKE CURRENT LOCATION
2292 JMP NUMBE1 /INTO VALUE OF NUMBER
2297 TAD I TXTPTR /GET CHARACTER FROM TEXT BUFFER
2298 TAD [-215 /WAS IT CARRIAGE RETURN?
2300 JMP QUOTE1 /YES-IT IS IC-IGNORE "
2301 TAD I TXTPTR /NO-PUT ASCII CODE INTO
2302 DCA VALUE2 /VALUE WORD
2303 JMS I [GETC /GET NEXT CHARACTER
2304 JMP NUMBE5 /RETURN TO EXPRESSION PROCESSOR
2306 /CARRIAGE RETURN FOUND IN SINGLE CHARACTER TEXT
2308 QUOTE1, JMS I [ERROR /GENERATE IC ERROR MESSAGE
2314 \f/COME HERE IF FIRST THING IN EXPRESSION IS ALPHA CHARACTER
2316 ALPHA1, JMS I [GETTAG /PICK UP TAG
2317 DCA ALPHAI /STORE UNDEFINED INDICATOR
2318 ALPHA3, TAD TAG3 /IS IT A PSEUDO-OP?
2321 JMS I [ERROR /YES-GENERATE IP ERROR MESSAGE
2323 ISZ ALPHAI /NO-WAS IT UNDEFINED?
2325 ISZ UNDFSW /YES-SET UNDEFINED SWITCH
2326 TAD PASS /IS THIS PASS 1?
2328 JMP ALPHA0 /YES-SUPPRESS ERROR MAESSAGE
2329 JMS I [ERROR /NO-GENERATE US ERROR MESSAGE
2331 ALPHA0, TAD TAG2 /NO-WAS IT A MEMORY REFERENCE INSTRUCTION?
2333 TAD CHAR /YES-GET TERMINATING CHARACTER
2334 TAD [-240 /WAS IT SPACE?
2336 JMP I (NUMBE5 /NOT MEMREF FOLLOWED BY SPACE
2337 JMS I [SPNOR /YES-IGNORE SPACES
2341 TAD EXPIND /IS MEMORY REFERENCE INSTRUCTION OK?
2344 DCA IZIND /YES-CLEAR I AND Z INDICATOR
2345 TAD VALUE2 /STORE MRI ON PUSHDOWN LIST
2348 JMS I [PUSHA /PUSH THE I AND Z INDICATOR
2349 JMS I [TSTALP /WAS TERMINATING CHARACTER ALPHABETIC?
2352 JMS I [GETTAG /YES-PICK UP TAG
2353 DCA ALPHAI /STORE UNDEFINED INDICATOR
2355 AND TAG1 /WAS IT AN I OR Z?
2358 TAD VALUE2 /YES-WAS IT I?
2360 IAC /NO - SET LOW ORDER
2361 TAD I PDLXR /GET OLD IZIND FROM PDL
2362 DCA IZIND /SET NEW IZIND
2363 JMS I [SPNOR /IGNORE SPACES
2373 JMS I [EXP /GET REST OF EXPRESSION
2374 TAD I PDLXR /RETRIEVE MRI
2378 /FALL INTO NEXT PAGE
2379 \f/COMBINE ADDRESS WITH MEMORY REFERENCE INSTRUCTION
2381 TAD VALUE /GET ADDRESS
2385 CIA /NO-IS IT ON CURRENT PAGE?
2390 TAD VALUE /NO-SET UP LINK
2393 TAD FIXMD0 /SET ' IN LISTING
2395 ISZ LINK /BUMP NUMBER OF LINKS GENERATED
2396 FIXMD0, 0700 /PROTECTION FOR ISZ
2397 LGERR, SKP /JMS I PERROR IF /E SPECIFIED
2399 JMS ADDIND /SET INDIRECT BIT IN INSTRUCTION
2400 FIX2, TAD [200 /SET CURRENT PAGE BIT
2404 AND [77 /WAS Z SPECIFIED?
2407 JMS I [ERROR /YES - ILLEGAL REFERENCE
2409 FIX4, TAD IZIND /WAS THERE AN I?
2412 JMS ADDIND /YES - ADD INDIRECT BIT TO INSTRUCTION
2413 TAD VALUE /GET ADDRESS
2415 TAD VALUE2 /GET OP CODE
2418 DCA TEMP /POP A WORD OFF THE STACK
2419 JMP I TEMP /JUMP THROUGH IT.
2420 \fADDIND, 0 /ROUTINE TO ADD INDIRECT BIT TO AN INSTR
2424 SZA /WAS THERE ONE ALREADY?
2426 JMS I [ERROR /YES - ILLEGAL INDIRECT
2432 / ALLOWS MULTIPLE NON-RESIDENT INPUT HANDLERS TO NOT BOMB
2434 PTCH, 0 /RUNS IN DF 10
2435 TAD (7647 /POINT TO DEVICE
2436 DCA PTR /HANDLER RESIDENCY TABLE
2437 TAD [-17 /IT HAS 15 ENTRIES
2439 KLOOP, TAD I PTR /GET HANDLER ENTRY POINT
2440 AND [7600 /LOOK AT PAGE IT'S ON
2441 TAD [-INDEVH /IS IT ON THE PAGE WE PUT BUFFER OVER?
2443 DCA I PTR /YES IT IS, WIPE IT FROM RESIDENCY
2444 ISZ PTR /LOOK AT NEXT ENTRY
2445 ISZ KNTR /ANY MORE ENTRIES?
2446 JMP KLOOP /YES, MIGHT HAVE TO WIPE SEVERAL GUYS
2447 TAD [200 /INCREASE INPUT BUFFER SIZE
2450 \f/COMBINE CURRENT VALUE WITH PREVIOUS VALUE
2451 /ACCORDING TO LAST OPERATOR
2453 OP0, TAD VALUE2 /HANDLER FOR +
2454 TAD VALUE /** OP0+1 AND OP0+2 JUMPED TO **
2456 EXP3, TAD CHAR /GET LAST OPERATOR
2457 TAD [-"+ /WAS IT A + OR - ?
2460 JMP PLSMIN /YES - LINK=0 FOR +, 1 FOR -
2464 SNA /IS THE CHAR % OR &?
2465 JMP DIVAND /YES - LINK=0 FOR %, 1 FOR &
2469 SNA /IS THE CHAR SPACE OR !?
2470 JMP BLKEXP /YES - LINK=0 FOR SPACE, 1 FOR !
2473 SNA CLA /IS THE CHAR ^?
2474 JMP MUL /YES - LINK IRRELEVANT
2475 JMS I (ENDCHK /NO-SEE IF END OF LINE FOUND
2476 JMP EXP3 /NO-TRY AGAIN
2477 EXPXIT, TAD UNDFSW /EXIT FROM EXP
2478 SNA CLA /RESTORE EXIT POINT
2479 JMP I (POPJ /--EXIT VIA POPJ--
2481 DCA UNDFSW /SET UNDEFINED SWITCH
2482 DCA VALUE /RESULT IS 0
2483 JMP I (POPJ /--EXIT VIA POPJ--
2484 \fMUL, CLL IAC /LINK DOESN'T COUNT FOR ^
2485 BLKEXP, IAC /** BLANK ASSUMED TO BE 4 ELSEWHERE **
2488 JMP I (EXP1 /GET REST OF EXPRESSION
2498 /MULTIPLY BY REPEATED ADDITION
2508 OP1, TAD VALUE2 /- OPERATOR
2510 JMP I (OP0+1 /JUMP INTO ADD OPERATOR
2512 /OPTIONAL HANDLER FOR ! AS 6 BIT LEFT SHIFT AND THEN OR:
2516 AND [7700 /ISOLATE 6 BITS AND FALL INTO "OR"
2519 /HANDLER FOR ! AND SPACE AS INCLUSIVE OR
2525 \f/CHARACTER INPUT CHECK
2526 /ENTER WITH CHARACTER IN AC
2528 LSTCH9, SZA /IGNORE NULL (0)
2530 SZA /IGNORE RUBOUT (377)
2532 SZA /IGNORE VERTICAL TAB (213)
2535 JMP I (INPUT+1 /IGNORE LINE FEED (212)
2536 TAD [12-32 /WAS IT ^Z (END-OF-FILE=232)?
2538 JMP I (ENDCHR /YES - GET NEXT FILE
2539 TAD (32-15 /NO - WAS IT CARRIAGE RETURN?
2541 JMP LSTCHR /YES - LAST CHARACTER OF LINE
2543 SNA /WAS IT FORM FEED (214)?
2544 JMP FORCHR /YES - HANDLER FORM FEED
2547 DCA LSTCH5 /STORE CHARACTER
2548 TAD PASS /IS THIS PASS 3?
2551 ISZ LSTCH6 /YES - FILLING HEADER AREA?
2553 CLA CMA /NO - RESET SWITCH
2555 LSTCH4, TAD I (INPUT
2557 TAD LSTCH5 /GET CHARACTER IN AC
2558 JMP I TEMP /-EXIT FROM INPUT-
2560 LSTCH3, ISZ LSTCH7 /FILLING HEADER
2561 TAD LSTCH5 /STORE CHARACTER IN HEADER AREA
2568 \fLSTCHR, TAD FORMSW /CARRIAGE RETURN WAS FOUND
2569 SNA CLA /HAS THERE BEEN A FORM FEED?
2571 DCA FORMSW /YES - CLEAR FORM FEED SWITCH
2572 ISZ EDITPG /GO TO NEXT EDITOR PAGE
2573 DCA THISPG /CLEAR OVERFLOW PAGE
2574 TAD PASS /IS THIS PASS 3?
2576 JMS I [FORMFD /YES - GENERATE FORM FEED
2577 LSTCH1, TAD [215 /NO - CARRIAGE RETURN IS CHARACTER
2581 FORCHR, ISZ FORMSW /SET FORM FEED SWITCH
2582 JMP I (INPUT+1 /GET ANOTHER CHARACTER
2586 \f/ERROR MESSAGE OUTPUT
2591 ISZ ERCNT /COUNT THE ERRORS
2592 ERPLUS, "+ /PROTECTION
2593 TAD I ERROR /GET ERROR MESSAGE
2594 ISZ ERROR /INCREMENT RETURN ADDRESS
2595 JMS I [ERROR1 /OUTPUT 2 CHARACTER ERROR MESSAGE
2596 TAD (JMP I [7600 /PUT EXIT TO MONITOR
2597 CSWIT1, DCA I (LSWITC /IN SWITCH - "CLA" IF /C
2598 TAD PASS /IS THIS PASS 3?
2600 JMP ERROR4 /YES - CARRIAGE RETURN/LINE FEED
2601 JMS I [ERROR1 /NO - OUTPUT 2 SPACES
2602 TAD [1777 /IS THERE A TAG SAVED?
2606 JMS I (DIV45 /YES - OUTPUT FIRST 2 CHARACTERS
2607 TAD LAST2 /OUTPUT SECOND 2 CHARACTERS
2610 JMS I (DIV45 /OUTPUT THIRD 2 CHARACTERS
2611 TAD LAST4 /IS ERROR LOCATION SAME AS LAST TAG?
2615 JMP ERROR4 /YES - CARRIAGE RETURN
2620 ERROR3, TAD LOC /OUTPUT 4 DIGIT ADDRESS OR INCREMENT
2622 ERROR4, TAD [215 /OUTPUT CARRIAGE RETURN/LINE FEED
2624 JMP I ERROR /--RETURN--
2625 \f/RESET LITERAL TABLES AND POINTERS
2630 DCA XREG1 /SET LITERAL TABLE POINTER
2632 DCA XREG2 /SET TOP INST. TABLE POINTER
2636 DCA I XREG1 /SET LITERAL TABLE ENTRIES TO 200
2637 DCA I XREG2 /SET TOP INST. TABLE ENTRIES TO 0
2640 DCA LAST1 /CLEAR LAST DEFINED TAG
2641 JMP I CLEAN /--RETURN--
2643 /DUMP CURRENT PAGE LITERALS
2647 SNA /IF THIS IS PAGE 0,
2648 JMP I DUMPS /--RETURN--
2654 DCA DUMPS2 /STORE NUMBER OF LITERALS ON THIS PAGE
2657 DCA STARSW /FORCE ORIGIN PUNCH IF RELOC JUST INVOKED
2661 JMS I [PUNORG /OUTPUT ORIGIN
2665 TAD I [LINBUF /SAVE LINBUF
2668 DUMPS6, TAD I DUMPS5
2670 JMSPUN, JMS I [PUNONE /OUTPUT ONE REGISTER
2673 LITHAK, ISZ I DUMPS1 /DESTROY RECORD OF CURRENT PAGE LITERALS -
2674 /ZEROED IF NO /W OPTION SPECIFIED
2678 DCA I [LINBUF /RESTORE LINBUF
2679 D2, TAD DUMPS1 /WIPE REMEMBRANCE OF TOP OF PAGE (JR)
2683 JMP I DUMPS /--RETURN--
2684 \f/HANDLER FOR ZBLOCK PSEUDO-OP
2685 /RESERVES AS MANY WORDS OF ZERO
2686 /AS VALUE OF EXPRESSION
2688 ZBLOCX, JMS I [SPNOR /IGNORE SPACES
2689 JMS I [EXP /GET THE EXPRESSION
2691 CMA /PROTECT AGAINST ZERO CASE
2692 DCA TEMP3 /STORE NEGATIVE AS COUNTER
2693 JMP ZBLOCZ /JUMP INTO LOOP
2694 ZBLOCY, JMS I [PUNBIN /OUTPUT ONE WORD OF ZERO
2695 TAD PASS /IS THIS PASS 3?
2697 DCA I (PUNMOD /YES - PREVENT OUTPUT
2698 ZBLOCZ, ISZ TEMP3 /NO - DONE YET?
2699 JMP ZBLOCY /NO - CONTINUE
2700 TAD JMSPUN /YES - RESTORE PUNMOD
2702 JMP I [LOOKEX /--EXIT TO MAIN--
2704 /DUMP PAGE 0 LITERALS
2708 TAD DUMPZ /RESET EXIT FROM DUMPS
2712 TAD I [LITBUF /STORE THE NUMBER OF LITERALS ON PAGE 0
2715 JMP I DUMPS /NO - ** DUMPZ IS DESTROYED **
2717 JMS I [PUNORG /OUTPUT ORIGIN
2718 TAD I [LITBUF /SET VALUES FOR DUMPS
2722 \f/ENTER A TAG INTO SYMBOL TABLE
2726 TAD VALUE2 /SAVE VALUE 2
2728 ISZ HIGHTG /COUNT IN THIS TAG
2730 CLL CIA /GET LIMIT OF SYMBOL STORAGE
2731 TAD HIGHTG /IS THERE ROOM FOR ONE MORE?
2733 JMP I (SYMOFL /NO - SE**FATAL ERROR**
2734 TAD TAGMAX /YES - IS USR IN CORE?
2738 TAD [7700 /NO - RESET ADDRESS TO
2739 DCA IOMON /USR NON-RESIDENT
2741 AND I (JSBITS /RESET JOB STATUS WORD TO
2742 DCA I (JSBITS /SAVE CORE WHEN USR CALLED
2743 GETTG5, TAD THISTG /SEARCH SYMBOL TABLE
2751 JMS I [FINDTG /GET NEXT TAG FROM SYMBOL TABLE
2755 TAD TEMP2 /DOES NEW TAG GO WHERE PREVIOUS TAG WAS?
2757 JMP GETTG9 /YES-PUT IT THERE AND EXIT
2758 JMS I [PUTTAG /NO-REPLACE RETRIEVED TAG WHERE PREVIOUS TAG WAS
2761 /THE ABOVE CODE WILL BE OPTIMIZED AT INITIALIZATION
2762 /IF THE ASSEMBLER IS TO BE RESTRICTED TO 8K OF CORE
2764 GETTG9, TAD I (NAME1 /GET CURRENT TAG
2765 DCA TAG1 /PUT IT IN TAG1-TAG3
2770 TAD I PDLXR /RESTORE VALUE 2
2772 JMS I [PUTTAG /PUT TAG1 - TAG3 INTO SYMBOL TABLE
2773 JMP I INSRTG /--RETURN--
2775 TAGMAX, 1740 /12K=3740, ...
2778 / IFNZRO HASH< /***HACK ONLY***
2779 /TLYREF, 0 /TALLY REFS TO SYMBOL TABLE
2785 /TLYPRB, 0 /TALLY PROBES INTO TABLE
2786 / JMS I [FINDTG /FUDGE, OUT OF ROOM
2796 / > /***HACK ONLY***
2799 /INSERT A TAG INTO THE HASH TABLE
2802 ISZ HIGHTG /BUMP SYM NUM (SKIPS ON 0)
2806 SNA SZL CLA /STILL ROOM FOR AT LEAST 2 MORE?
2807 JMP I (SYMOFL /NO SE** FATAL ERROR**
2814 JMS I [PUTTAG /NOW ACTUALLY INSERT IT
2817 \f/OUTPUT 2 CHARACTER WORD
2818 /FROM SYMBOL TABLE FORMAT
2823 CLL RAR /CLEAR SIGN BIT
2836 JMS I [ERROR1 /OUTPUT 2 CHARACTERS
2837 DCA DIV45C /CLEAR DIV45C FOR NEXT GO-ROUND
2838 JMP I DIV45 /--RETURN--
2841 DIV45C, 0 /** MUST BE 0 WHEN DIV45 IS ENTERED **
2850 JMP I DIV45E /--RETURN--
2851 \f/HANDLER FOR FIXTAB PSEUDO-OP
2853 FIXTBX, TAD PASS /IS THIS PASS 1?
2855 JMP I [LOOKEX /NO--EXIT TO MAIN--
2856 JMP I (FIXTAY /YES--DO FIXTAB
2861 CLA CLL /SETFLD CALLED WITH AC RANDOM
2862 DCA SETFL1 /INITIALIZE FIELD
2864 TAD USROFS /FUDGE FOR KEEPING USR AROUND
2869 TAD (-1740 /PUT 1740 SYMBOLS IN EACH FIELD
2870 SNL /IS THE DIVIDE THROUGH?
2871 JMP SETFLP /NO - CONTINUE
2873 CLL CMA RTL /AC CONTAINED REM-1740; THIS MAKES IT INTO
2874 TAD (-1 /7573-4*REM WHICH IS THE ADDRESS WE WANT
2877 CLL RTL /AC GETS 0201 TO 7775
2878 TAD (-202 /AC GETS 7777 TO 7573 FOR TAGXR
2880 DCA TAGXR /TO STICK INTO AN AUTO-XR
2887 JMP I SETFLD /--RETURN--
2889 USROFS, 0 /GETS 400 IF KEEPING USR
2892 /GET TAG FROM SYMBOL TABLE
2893 /PUT IT INTO TAG1-TAG3
2894 /WITH ITS VALUE IN VALUE2
2908 JMP I FINDTG /--RETURN--
2910 /OPTIMIZATION MAY CHANGE SETFLD TO
2911 /REMOVE CLA ON ENTRY
2913 \f/BEGINNING OF PASS CODE
2915 JMS I (IOPEN /SET INPUT ROUTINE TO OPEN FILE
2916 START2, ISZ PASS /SET UP COUNTERS AND POINTERS
2917 DCA XLISTX /CLEAR XLIST SWITCH
2918 DCA FLDIND /SET FIELD TO 0
2934 JMP I (LOOKE1 /--EXIT TO MAIN--
2938 ENDPAS, JMS I [DUMPS /DUMP CURRENT PAGE LITERALS
2939 DCA OFSBUF /CLEAR OFFSET FOR NEXT PASS
2940 TAD PASS /WHAT PASS IS ENDING?
2942 JMP I (ENDPA2 /PASS 2
2944 JMP I (START1 /PASS 1
2945 TAD I [LINBUF /PASS 3
2946 SNA CLA /ANYTHING TO PRINT?
2948 TAD [211 /YES - TAB OVER TWICE
2952 JMS I [LINPRT /PRINT LINE
2953 JMS I [DUMPZ /DUMP PAGE 0 LITERALS
2955 /OUTPUT SYMBOL TABLE
2956 SSWITC, JMS I (SYMPRT /(0 IF /S)
2959 JMS I [FORMFD /OUTPUT FORM FEED
2961 JMS OUTTTL /PRINT "ERRORS DETECTED: N"
2963 JMS OUTTTL /PRINT "LINKS GENERATED: N"
2964 FINLFF, JMS I [FORMFD /PRINT FINAL FF (ZEROED IF NO PASS 3)
2965 JMS I (OCLOSE /AND CLOSE THE OUTPUT FILE
2966 \f/CREF AND LOAD-AND-GO OPTIONS
2967 /****FINAL EXIT TO MONITOR****
2968 LSWITC, JMP I [7605 /0 IF /L OR /G OR /C
2972 CSWITC, TAD I [7600 /"TAD I [7605" IF /C
2974 DCA I XREG1 /SET BINARY DEVICE
2977 /EXIT FROM PAL8 BY CHAINING
2979 /SHOULD BE ABSLDR OR CREF
2981 DCA I XREG1 /SET STARTING BLOCK
2982 DCA I XREG1 /SET 0 TERMINATOR
2984 TAD I (JSBITS /SET BIT 11 OF JOB STATUS WORD
2985 RAR /SO 10000-11777 IS NOT SAVED
2989 JMS I IOMON /CALL USER SERVICE ROUTINES
2990 6 /*CHAIN TO NEXT PROGRAM*
2991 CHAIN, 0 /STARTING BLOCK OF NEXT PROGRAM
2994 DCA LAST1 /SAVE NUMBER TO BE PRINTED
2995 OUTTLL, TAD I TTLPTR /GET A WORD OF MESSAGE
2999 JMS I [ERROR1 /NO - PRINT IT
3000 JMP OUTTLL /AND LOOP
3001 PRTTTL, TAD [240 /PRINT A SPACE
3004 JMS I (FORMF4 /PRINT NUMBER IN DECIMAL
3005 JMS I (CRLF /PRINT CR AND 2 LF'S (1 IF PASS 3)
3006 JMP I OUTTTL /AND RETURN
3009 \f/COME HERE TO LOAD THE PASS 3 OVERLAY AT THE END OF PASS 2
3011 LOADOV, JMS I (7607 /CALL SYSTEM DEVICE HANDLER
3012 0200 /SWAP IN CODE UNIQUE TO PASS 3
3013 SWAP1 /BUFFER ADDRESS
3014 ASWAP /STARTING BLOCK NUMBER
3015 JMP I (SYSER3 /DE**FATAL ERROR**
3016 NSWITC, JMP START2 /(0 IF NO LIST FILE, SKP IF /N) START PASS3
3020 ERMSG1, TAD (OTYPEO /COME HERE IF NO PASS 3 OUTPUT FILE
3025 DCA I (OTYPCR /INHIBIT AUTO-LF ON CARRIAGE RETURN
3026 DCA FINLFF /KILL LAST FORM FEED
3029 /ADD BITS TO PUNCH ORIGIN
3033 TAD PASS /IS THIS PASS 2?
3035 JMP I PUNORG /NO--RETURN--
3036 TAD LOC /YES - OUTPUT ORIGIN SETTING
3037 TAD OFFSET /"LOC" MAY BE FICTITIOUS - MAKE IT REAL
3039 ISZ STARSW /INHIBIT PUNCHING ORIGIN IF NECESSARY
3042 DCA STARSW /RESET SWITCH
3043 JMP I PUNORG /--RETURN--
3045 \f\f/EVALUATE LITERAL
3047 LIT, STA RAL /-2 IF PAGE 0 LITERAL, -1 IF CUR PAGE
3048 DCA FINDS1 /SAVE FLAG
3049 JMS I [GETC /GET NEXT CHARACTER
3050 JMS I [SPNOR /IGNORE SPACES
3051 TAD EXPIND /STORE IMPORTANT VALUES PRIOR TO
3052 JMS I [PUSHA /ENTRANCE INTO EXP
3059 JMS I [EXP /GET EXPRESSION
3060 TAD VALUE /FIND LITERAL IN TABLE
3061 ISZ I PDLXR /PAGE 0?
3066 DCA VALUE2 /STORE ADDRESS
3069 TAD I PDLXR /RESTORE SAVED VALUES
3073 TAD CHAR /IGNORE ) OR ]
3078 JMS I [GETC /GET NEXT CHARACTER
3079 JMP I (NUMBE5 /RETURN TO EXPRESSION PROCESSOR
3082 PEZE, 0 /SUBR TO ISSUE PE OR ZE MESSAGE
3091 \f/FIND LITERAL ON CURRENT PAGE
3097 SNA /IS THIS PAGE 0?
3099 DCA FINDS2 /NO - SAVE PAGE NUMBER
3102 TAD [7700 /ALLOW 100(8) CURRENT PAGE LITERALS
3104 TAD LITPTR /GET PG ADDR OF 1ST LITERAL IN BUFFER
3110 TAD FIND0 /COMPUTE ACTUAL CORE ADDRESS OF LITERAL
3113 TAD FINDS3 /COMPUTE THE NUMBER OF ENTRIES
3115 TAD I TEMP /IN THE LITERAL BUFFER
3119 FINDS4, TAD I TEMP2 /GET LITERAL FROM TABLE
3121 TAD FINDS1 /AND CURRENT LITERAL
3122 SNA CLA /DO THEY MATCH?
3124 ISZ TEMP2 /NO - BUMP COUNTERS
3126 JMP FINDS4 /TRY AGAIN
3131 TAD I TEMP /DOES THIS OVERFLOW PAGE?
3137 \fFIND03, TAD FINDS2 /PAGE FULL - WHICH PAGE?
3138 JMS PEZE /GENERATE PE OR ZE MESSAGE
3142 TAD I TEMP /IS PAGE FULL?
3145 JMP FIND03 /YES - OUTPUT ERROR MESSAGE
3154 FINDS5, TAD FIND0 /GET ADDRESS OF LITERAL
3158 JMP I FINDS /--RETURN--
3161 /FIND LITERAL ON PAGE 0
3165 TAD FIND0 /RESET EXIT FROM FINDS
3167 FIND01, DCA FINDS2 /SET POINTERS
3170 TAD [7760 /ALLOW 160(8) PAGE 0 LITERALS
3179 \f/HANDLER FOR IFZERO PSEUDO-OP
3181 IF0, TAD (10 /IFTST1, SNA CLA
3183 /HANDLER FOR IFNZERO PSEUDO-OP
3185 IFN0, TAD IFSZA /IFTST1, SZA CLA
3187 JMS I [SPNOR /IGNORE SPACES
3188 JMS I [EXP /GET EXPRESSION
3189 IFTST3, TAD CHAR /GET LAST CHARACTER
3193 JMS ICMESG /PRINT IC MESSAGE AND GET NEXT CHAR
3194 IFTST9, JMS I [SPNOR /IGNORE SPACES
3195 JMP IFTST3 /TRY AGAIN
3197 IFTST2, JMS I [GETC /GET NEXT CHARACTER
3200 DCA CONDTM /SET NUMBER OF NESTED CONDITIONALS
3201 CLA CMA /DECREMENT NUMBER OF NESTED CONDITIONALS
3205 IFTST1, HLT /SZA CLA OR SNA CLA
3206 JMP I (MAIN /--EXIT TO MAIN--
3207 IFTST5, TAD CONDSW /DONE WITH ALL CONDITIONALS IN NEST?
3210 JMP I (MAIN /YES --EXIT TO MAIN--
3212 TAD (-"< /NO - GET NEXT CHARACTER
3214 JMP IFTST6 /YES - HANDLE NEXT CONDITIONAL
3215 TAD ("<-"> /NO - IS IT >?
3217 JMP IFTST4 /NO - FINISH THIS CONDITIONAL
3222 IFTST4, DCA I [LINBUF /INHIBIT LISTING OF UNASSEMBLED CODE -
3223 /ZEROED IF /J OPTION NOT SPECIFIED
3224 JMS I [GETC /GET NEXT CHARACTER
3226 \f/HANDLER FOR IFDEF PSEUDO-OP
3228 IFD, TAD (10 /IFTST1, SNA CLA
3230 /HANDLER FOR IFNDEF PSEUDO-OP
3232 IFND, TAD IFSZA /IFTST1, SZA CLA
3234 IFTST7, JMS I [SPNOR /IGNORE SPACES
3235 JMS I [TSTALP /IS NEXT CHARACTER ALPHABETIC
3237 JMS ICMESG /PRINT IC MESSAGE AND GET NEXT CHAR
3238 JMP IFTST7 /KEEP TRYING
3240 IFTST8, JMS I [GETTAG /PICK UP TAG
3241 DCA VALUE /STORE UNDEFINED INDICATOR
3242 TAD TAG3 /WAS IT A PSEUDO-OP?
3245 JMS I [ERROR /YES - GENERATE IP ERROR MESSAGE
3251 IC /IC COMES OUT ON ALL PASSES
3254 JMP I [LOOKEX /END OF LINE - GO AWAY
3255 JMS I [GETC /GET NEXT CHAR
3259 /PUT TAG IN SYMBOL TABLE
3263 JMS I (SETFLD /SET FIELD
3273 JMP I PUTTAG /--RETURN--
3277 /PUT NEW ENTRY ON PUSHDOWN STACK
3286 SPA CLA /IS LIST TOO FULL?
3287 JMP PUSHA1 /BE**FATAL ERROR**
3288 TAD TEMP /NO - MAKE ENTRY
3293 JMP I PUSHA /--RETURN--
3296 JMP I [MONERR /PUSHDOWN OVERFLOW IS FATAL ERROR
3297 \f/TEST NUMERIC ROUTINE
3298 /CALL WITH CHARACTER TO TEST IN "CHAR"
3299 /SKIPS IF THE CHARACTER IS NOT NUMERIC
3302 TAD CHAR /GET THE CHARACTER
3306 SNL CLA /CHECK FOR RANGE 0-9
3307 ISZ TSTNUM /OUT OF RANGE
3308 JMP I TSTNUM /--RETURN--
3310 /TEST ALPHANUMERIC ROUTINE
3311 /CALL WITH CHARACTER IN "CHAR"
3312 /SKIPS IF CHARACTER IS NOT ALPHANUMERIC
3315 JMS I [TSTNUM /IS IT NUMERIC
3316 JMP I TSTALN /YES--RETURN--
3317 JMS I [TSTALP /IS IT ALPHABETIC
3318 JMP I TSTALN /YES--RETURN--
3320 JMP I TSTALN /--RETURN--
3322 /TEST ALPHABETIC ROUTINE
3323 /CALL WITH CHARACTER IN "CHAR"
3324 /SKIPS IF NOT ALPHABETIC
3331 SNL CLA /CHECK FOR RANGE A-Z
3332 ISZ TSTALP /OUT OF RANGE
3333 JMP I TSTALP /--RETURN--
3336 /UNPACKS CHARACTERS FROM BUFFER
3339 ISZ INCHCT /ARE THERE CHARACTERS LEFT IN BUFFER?
3340 JMP I CHARLV /YES - FETCH ONE
3341 TAD INEOF /NO - WAS OLD FILE ENDED?
3343 JMP ENDCHR /YES - START NEW FILE
3344 INGBUF, TAD INCTLA /NO
3352 CLL CML CMA RTR /SET CONTROL WORD
3357 JMS I INHNDL /CALL INPUT DEVICE HANDLER
3358 INCTLW, 0 /CONTROL WORD
3359 INBUFP, INBUF /INPUT BUFFER ADDRESS
3360 INREC, 0 /STARTING BLOCK NUMBER
3361 JMP INERRX /ERROR RETURN
3362 INBREC, TAD INCTLA /NORMAL RETURN
3366 DCA INREC /RESET STARTING BLOCK NUMBER
3373 DCA INCHCT /SET CHARACTER COUNT
3375 DCA INPTR /SET BUFFER POINTER
3376 \f/CHARACTERS ARE FOUND IN BUFFER
3377 /IN STANDARD OS/8 PACKING
3378 /WORD 1: AAA A11 111 111
3379 /WORD 2: BBB B22 222 222
3380 /WHICH REPRESENTS 3 CHARACTERS
3381 /CHARACTER 1: 11 111 111
3382 /CHARACTER 2: 22 222 222
3383 /CHARACTER 3: AA AAB BBB
3386 ICHAR1, TAD I INPTR /PICK UP CHARACTER WORD 1
3387 JMS CHARLV /CHECK RIGHT 8 BITS
3388 ICHAR2, TAD I INPTR /PICK UP WORD 1
3389 ISZ INPTR /(INCREMENT POINTER TO WORD 2)
3390 AND [7400 /WITH WORD 1 IN AC
3391 DCA INCTLW /RETRIEVE LEFT 4 BITS AND SAVE
3392 TAD I INPTR /PICK UP WORD 2
3393 JMS CHARLV /CHECK RIGHT 8 BITS
3394 ICHAR3, TAD I INPTR /PICK UP WORD 2
3395 ISZ INPTR /(POINT TO NEXT WORD 1)
3396 AND [7400 /WITH WORD 2 IN AC
3397 CLL RTR /RETRIEVE LEFT 4 BITS
3399 TAD INCTLW /PUT BOTH SETS OF 4 BITS TOGETHER
3402 JMS CHARLV /CHECK CHARACTER
3403 JMP ICHAR1 /TRY NEXT SET OF 2 WORDS
3406 SMA CLA /EOF OR FATAL ERROR?
3407 JMP INBREC /EOF - UNPACK THIS BUFFER
3408 JMP I (SYSERR /FATAL - GENERATE DE ERROR MESSAGE
3418 ENDCHR, ISZ I (FORMSW /^Z OR EOF SIMULATES FORM FEED
3419 TAD PASS /IS THIS PASS 3?
3422 JMS I (HEDCLR /YES - CLEAR HEADING BUFFER
3428 NXTFLE, TAD (INDEVH+1 /SET ADDRESS OF DEVICE HANDLER
3434 JMP FAKDLR /END OF FILE - FAKE A $
3436 JMS I IOMON /CALL USER SERVICE ROUTINES
3438 INHNDL, 0 /LOADING ADDRESS OF HANDLER
3441 TAD INHNDL /NORMAL RETURN - HANDLER IN CORE
3443 TAD [-INDEVH /SEE IF INPUT HANDLER IS IN 7200
3445 JMS I (PTCH /IT IS - INCREASE SIZE OF BUFFER
3446 /AND REMOVE FROM RESIDENCY ANY HANDLERS THERE
3458 DCA INREC /RESET STARTING BLOCK NUMBER
3464 JMS CHARLV /CALL THE COROUTINE
3465 TAD [215 /WITH $ AND CR
3466 JMS CHARLV /TO END THE ASSEMBLY.
3467 JMP I (PHASE /** DIDN'T WORK - MUST BE IN CONDITIONAL - FATAL
3469 CHARLV, 0 /CHARACTER IN AC
3470 AND [177 /AND OFF LEFT 5 BITS
3471 JMP I (LSTCH9 /RETURN TO LSTCH9
3473 \f/HANDLER FOR DTORG PSEUDO-OP (TYPESETTING)
3474 /PUNCHES 4 DIGIT BLOCK NUMBER IN 2 FRAMES
3475 /FIRST FRAME HAS CHANNELS 7 AND 8 PUNCHED
3478 DTORGX, JMS I [SPNOR /IGNORE SPACES
3479 JMS I [EXP /GET EXPRESSION
3480 TAD PASS /IS THIS PASS 2?
3483 PUNVA1, SPA SNA CLA /NO - IS THIS PASS 3?
3484 JMP I [LOOKEX /NO--EXIT TO MAIN--
3485 TAD LININD /GET LINK SWITCH FROM "EXP"
3487 TAD [LOOKEX /FIX PUNONE TO EXIT TO MAIN
3489 TAD [211 /OUTPUT TAB
3493 DTORG2, TAD VALUE /PASS 2 - GET BLOCK NUMBER
3497 TAD (300 /PICK UP CHANNELS 7 AND 8
3500 TAD CHKSUM /ADD VALUE TO CHECKSUM
3503 JMS I OCHAR /OUTPUT BLOCK NUMBER - FIRST FRAME
3506 JMS I OCHAR /OUTPUT SECOND FRAME
3507 JMP I [LOOKEX /--EXIT TO MAIN--
3510 /DIVIDE BY REPEATED SUBTRACTION
3518 TAD VALUE2 /SUBTRACT DIVISOR FROM DIVIDEND
3520 JMP OP6B /YES - EXIT
3521 ISZ TEMP /NO - COUNT ONE MORE SUBTRACTION
3522 JMP OP6A /SUBTRACT AGAIN
3524 TAD TEMP /RESULT IS # OF SUBTRACTIONS
3526 \f/HANDLER FOR XLIST PSEUDO-OP
3528 XLISTY, JMS XLISTZ /ANY EXPRESSION?
3530 JMS I [EXP /GET EXPRESSION
3531 TAD VALUE /USE THE VALUE
3532 XLIST2, DCA XLISTX /SET SWITCH
3533 DCA I [LINBUF /XLIST NEVER LISTS!
3534 JMP I [LOOKEX /--EXIT TO MAIN--
3541 RELOCY, JMS XLISTZ /RELOCATE PSEUDO-OP - EXPRESSION?
3545 CIA /COMPUTE OFFSET OF REL LOC CTR
3546 TAD LOC /FROM FAKE LOC CTR
3547 TAD OFFSET /OFFSET IS CUMULATIVE!
3548 RELOC2, DCA OFSBUF /SET NEW OFFSET - THIS TAKES EFFECT AFTER
3549 STA /THE LITERALS (IF ANY) ARE DUMPED.
3550 JMP I (STAR0 /FAKE ORIGIN TO NEW LOC,
3551 /ACTUALLY A NO-OP BECAUSE OF OFFSET
3552 RELOC1, TAD OFFSET /SET OFSBUF=0, LOC=LOC+OFFSET -
3553 TAD LOC /THIS CANCELS ALL RELOCATION STUFF.
3555 DCA UNDFSW /JUST IN CASE - "STAR0" CHECKS THIS
3556 JMP RELOC2 /STILL MUST OUTPUT *. TO GET IN SYNCH
3557 \f/HANDLER FOR EJECT PSEUDO-OP
3560 TAD PASS /IS THIS PASS 3?
3563 EJECT1, TAD CHAR /NO - LOOK FOR NEXT NEGATIVE CHARACTER
3565 JMP I [LOOKEX /--EXIT TO MAIN--
3566 JMS I [GETC /GET NEXT CHARACTER
3569 EJECT2, JMS XLISTZ /PASS 3 - IS THERE AN EXPRESSION?
3570 JMP EJECT3 /NO - EXIT
3571 JMS I (HEDCLR /YES - CLEAR HEADING BUFFER
3573 DCA EJECT7 /SET UP FOR 40 NEW CHARACTERS
3575 DCA XREG1 /SET HEADER BUFFER POINTER
3578 EJECT6, ISZ EJECT7 /FILLED 40 CHARACTERS YET?
3579 JMP EJECT4 /NO - KEEP FILLING
3580 CLA CMA /YES - SKIP CHARACTERS TO
3581 DCA EJECT7 /END OF LINE
3584 EJECT4, TAD CHAR /FILL HEADING BUFFER
3588 JMS I [GETC /GET NEXT CHARACTER
3589 TAD CHAR /END OF LINE?
3591 JMP EJECT6 /NO - KEEP FILLING
3592 EJECT3, JMS I [FORMFD /GENERATE FORM FEED
3593 JMP I [LOOKEX /--EXIT TO MAIN--
3594 \fPUNVAL, TAD PASS /IS THIS PASS 3?
3595 JMP PUNVA1 /IF SO, LIST STUFF
3598 /SEE IF EXPRESSION FOLLOWS XLIST
3603 JMS I [SPNOR /IGNORE TRAILING SPACES
3605 TAD [-"> /IS THERE AN EXPRESSION?
3607 JMP I XLISTZ /NO--RETURN--
3610 ISZ XLISTZ /YES - INCREMENT RETURN ADDRESS
3611 JMP I XLISTZ /--RETURN--
3614 /DUMMY ERROR ROUTINE
3615 /TO SUPPRESS CERTAIN ERROR MESSAGES
3619 ISZ PERRO1 /SKIP ERROR MESSAGE POINTER
3620 JMP I PERRO1 /--RETURN--
3623 /CONSTANTS FOR DECIMAL PRINT
3632 \f/*********************************************************************
3634 INBUF=. /INPUT BUFFER
3636 OUBUF=. /OUTPUT BUFFER
3638 OUDEVH=.+400 /OUTPUT DEVICE HANDLER
3640 INDEVH=7200 /INPUT DEVICE HANDLER
3642 /**********************************************************************
3644 / EXPLANATION OF PAL8'S BUFFER ALLOCATION ALGORITHM
3648 / THE INPUT BUFFER STARTS AT 5600 AND ENDS AT 7200
3649 / THE INPUT HANDLER GOES IN 7200-7600.
3650 / THERE IS NO OUTPUT HANDLER.
3651 / HOWEVER, IF THE CURRENT INPUT HANDLER DOES NOT
3652 / LOAD INTO 7200, THEN THE BUFFER SIZE IS INCREASED
3653 / SO THAT THE INPUT BUFFER IS 5600-7600
3657 / THE OUTPUT BUFFER IS ALWAYS 1 BLOCK LONG, LOCATED
3659 / THE OUTPUT HANDLER RESIDES IN 6200-6600.
3660 / THE INPUT HANDLER RESIDES IN 7200-7600.
3661 / THE INPUT BUFFER NORMALLY RESIDES IN 6600-7200
3662 / BUT MAY GROW OVER EITHER THE INPUT HANDLER AREA OR
3663 / THE OUTPUT HANDLER AREA, IF EITHER OR BOTH OF THESE
3666 /WHENEVER A BUFFER GROWS OVER A HANDLER AREA, THE MONITOR
3667 /HANDLER RESIDENCY TABLE IS SEARCHED TO SEE IF THERE
3668 /WERE ANY HANDLERS THERE. IF ANY HANDLERS WERE THERE IN THE PAST,
3669 /THEY ARE NOW MARKED AS BEING NON-RESIDENT.
3670 \f/MORE ONCE ONLY CODE
3676 AND [17 /GET DEVICE NUMBER
3679 TAD I TEMP /GET DCB ENTRY
3681 JMP I OTYPE /--RETURN--
3683 /CHECK TO SEE HOW MUCH CORE EXISTS
3684 /AND STORE SYMBOL TABLE ACCORDINGLY
3687 BEGINF, CDF 10 /WAS THE /K OPTION SELECTED TO
3688 TAD I (MPARAM /CHECK FOR MORE THAN 8K?
3691 ZK7630, SNL CLA /YES
3692 JMP I (CKBAT /NO - CHECK FOR BATCH, USE 8K ONLY
3694 JMS FLD2 /WHAT IS HIGHEST FIELD?
3706 \f TAD [177 /IF FIELD 5, ALLOW 4095 SYMBOLS
3707 FLD1, TAD (1740 /OTHERWISE ALLOW 1740*(NR OF FIELDS)
3711 DCA I (TAGMAX /SET HIGHEST ADDRESS FOR TAGS
3714 OPTIM4, TAD I OPTIM1 /OPTIMIZE SEARCH PATTERN
3715 ISZ OPTIM1 /BY SUBSTITUTING CODE IN SEARCH
3716 DCA I OPTIM2 /ROUTINE
3720 OPTIM8, TAD I OPTIM5
3730 /SIZE CHECK OUR MACHINE
3736 ZK7630, SNL CLA /ALTER FOR COMPLEMENT OF K
3737 TAD [400 /TAD TO KEEP USR
3751 TAD I (7777 /CHECK SOFT CORE SIZE
3754 JMP CKSEV /NOT THERE
3757 DCA HIFLD /THERE, SET HIFLD WITH IT
3758 TAD HIFLD /TAKE MIN(HIFLD,5)
3760 SMA CLA /SMA TO USE HIFLD
3763 DCA HIFLD /STORE 5 IF NECESSARY
3765 TAD I (MPARAM+2 /LOOK AT /7
3768 SNA CLA /SNA IF THERE
3769 JMP I (CKBAT /ELSE CHECK FOR BATCH
3770 TAD (-7 /SET TO PRINT 7 COLUMNS OF STAB
3772 TAD (67^6 /SET OFFSET TO FIRST SYMBOL ON NEXT PAGE
3774 JMP I (CKBAT /OK, CHECK FOR BATCH NOW
3775 OPTIM4, SNL /SNL IF BATCH RUNNING
3776 JMP I (BEGING /ELSE TAKE DEFAULT TABLE SIZE
3777 TAD (BPRIME/SET ALTERNATE TABLE SIZE
3778 DCA I (PRIMES /INTO THE ONCE ONLY CODE
3779 JMP I (BEGING /NOW HIFLD=# OF HIGHEST USABLE FIELD
3780 HIFLD, 1 /8K MINIMUM
3783 /SKIP IF CURRENT DATA FIELD DOES NOT EXIST
3796 SNA CLA /IS FIELD THERE?
3797 JMP I FLD2 /YES--RETURN--
3800 FLD5, ISZ FLD2 /NO-INCREMENT RETURN ADDRESS
3801 JMP I FLD2 /--RETURN--
3804 \f/OVERLAY CODE FOR OPTIMAL SYMBOL TABLE SEARCH
3816 OPTIMA, RELOC SETFLD+1
3827 OPTIMB, RELOC GETTG5
3848 \f/OVERLAY CODE FOR DDT SYMBOL TABLE PRINT
3850 DSWIT2, IFZERO HASH<
3895 JMS I IOMON /CALL THE USR
3896 12 /TO FIND OUT DSK:
3900 /V3C TAD BEGINJ+1 /GET DEVICE NUMBER OF DSK:
3901 /V3C DCA CC7 /AND SET IT
3903 DCA I BEGINL /AND SET IT INTO "PALBIN"
3905 TAD I CC1 /GET PARAMETER WORD 1
3907 CLL RTL /OPTION /B INTO LINK
3910 DCA I CCX1 /YES: /F => NO 0 FILL
3911 ZB7430, SNL /IS IT /B?
3914 DCA I CCX3 /YES: /B => ! IS SHIFT
3916 TAD I CC1 /GET WORD 1 AGAIN
3922 DCA I CCX4 /YES: /E => SET 'LG' ERROR
3924 TAD I CCX5 /GET WORD 2 THIS TIME
3927 ZO7710, SMA CLA /IS IT /O?
3929 DCA I CCX6 /YES: /O => NO 200 ORG
3932 TAD I CC1 /GET WORD 1 AGAIN
3935 JMP I CC3 /NO: TRY FOR /L OR /G
3936 TAD I CC4 /CREF FILE SPECIFIED?
3939 CC6, TAD CC7 /NO: GIVE "CREFLS.TM"
3948 JMS I IOMON /LOOKUP "CREF.SV"
3950 CC13, CC9 /POINT TO NAME - BACK WITH START
3951 CC8, -5 /LENGTH GOES HERE
3952 JMP CC16 /NOT FOUND!
3954 JMS I CC31 /CHECK TYPE FILE
3956 JMP CC16 /NOT DIRECTORY IS ERROR
3958 DCA I CC121 /CSWITC=TAD I [7605
3960 DCA I CC111 /CSWIT1=CLA
3962 DCA I CC101 /CSWIT2=DCA BINSRT
3963 DCA I CC171 /CMOVE=0
3965 DCA I CC131 /CHAIN="CREF.SV"
3966 DCA I CC141 /LSWITC=0
3968 DCA I CC301 /NOPA22=7612
3969 DCA I CC20 /"BEGIAB"=0
3971 DCA I CC211 /"DIRSW1"=TAD [177
3973 DCA I CC221 /"PTPSW1"=TAD [232
3975 CCC /KEEP GOING (SIGH)
3979 JMP I CC3 /TRY FOR /L OR /G
3980 \fCC171, SWAPR2+CMOVE
3987 CC101, SWAPR2+CSWIT2
3989 CC301, SWAPR2+NOPA22
4008 CC9, FILENAME CREF.SV
4012 CC211, SWAPR2+DIRSW1
4014 CC221, SWAPR2+PTPSW1
4018 \f/***********************************************************************
4020 /MOVED BY ASSEMBLER TO FIELD 1
4021 /MUST REMAIN IN ALPHABETICAL ORDER
4022 /***********************************************************************
4024 SYMS, 5777 /TERMINATOR
4025 3777 /IMPOSSIBLE (LIMITING) SYMBOL
4028 IFNZRO HASH< /PSEUDO OPS MUST GO FIRST FOR EXPUNGE
4029 "I-300^45+4000+2000 /I
4034 "P-300^45+"A-300+4000 /PAUSE
4039 "P-300^45+"A-300+4000 /PAGE
4044 "T-300^45+"E-300+4000 /TEXT
4049 "R-300^45+"E-300+4000 /RELOC
4054 "O-300^45+"C-300+4000 /OCTAL
4059 "N-300^45+"O-300+4000 /NOPUNCH
4061 "N-300^45+"C-300+4000
4065 "I-300^45+"F-300+4000 /IFZERO
4067 "R-300^45+"O-300+4000
4069 \f "I-300^45+"F-300+4000 /IFNZRO
4071 "R-300^45+"O-300+4000
4074 "I-300^45+"F-300+4000 /IFNDEF
4076 "E-300^45+"F-300+4000
4079 "I-300^45+"F-300+4000 /IFDEF
4084 "F-300^45+"I-300+4000 /FIXTAB
4086 "A-300^45+"B-300+4000
4089 "F-300^45+"I-300+4000 /FIXMRI
4091 "R-300^45+"I-300+4000
4094 "F-300^45+"I-300+4000 /FILENAME
4096 "N-300^45+"A-300+4000
4099 "F-300^45+"I-300+4000 /FIELD
4104 "E-300^45+"X-300+4000 /EXPUNGE
4106 "N-300^45+"G-300+4000
4109 "E-300^45+"N-300+4000 /ENPUNCH
4111 "N-300^45+"C-300+4000
4114 "E-300^45+"J-300+4000 /EJECT
4118 \f "D-300^45+"T-300+4000 /DTORG
4123 "D-300^45+"E-300+4000 /DEVICE
4125 "C-300^45+"E-300+4000
4128 "D-300^45+"E-300+4000 /DECIMAL
4130 "M-300^45+"A-300+4000
4133 "Z-300^45+"B-300+4000 /ZBLOCK
4135 "C-300^45+"K-300+4000
4138 "Z-300^45+4000+2000 /Z
4143 "X-300^45+"L-300+4000 /XLIST
4148 "T-300^45+"S-300+4000 /TSK
4153 "T-300^45+"S-300+4000 /TSF
4158 "T-300^45+"P-300+4000 /TPC
4163 "T-300^45+"L-300+4000 /TLS
4168 "T-300^45+"F-300+4000 /TFL
4173 "T-300^45+"E-300+4000 /TEXT
4178 "T-300^45+"C-300+4000 /TCF
4183 "T-300^45+"A-300+4000 /TAD
4188 "S-300^45+"Z-300+4000 /SZL
4193 "S-300^45+"Z-300+4000 /SZA
4198 "S-300^45+"W-300+4000 /SWP
4203 "S-300^45+"T-300+4000 /STL
4208 "S-300^45+"T-300+4000 /STA
4213 "S-300^45+"R-300+4000 /SRQ
4218 "S-300^45+"P-300+4000 /SPA
4222 \f "S-300^45+"N-300+4000 /SNL
4227 "S-300^45+"N-300+4000 /SNA
4232 "S-300^45+"M-300+4000 /SMA
4237 "S-300^45+"K-300+4000 /SKP
4242 "S-300^45+"K-300+4000 /SKON
4247 "S-300^45+"G-300+4000 /SGT
4252 "R-300^45+"T-300+4000 /RTR
4257 "R-300^45+"T-300+4000 /RTL
4262 "R-300^45+"T-300+4000 /RTF
4267 "R-300^45+"S-300+4000 /RSF
4271 \f "R-300^45+"R-300+4000 /RRB
4276 "R-300^45+"P-300+4000 /RPE
4281 "R-300^45+"M-300+4000 /RMF
4286 "R-300^45+"I-300+4000 /RIF
4291 "R-300^45+"I-300+4000 /RIB
4296 "R-300^45+"F-300+4000 /RFC
4301 "R-300^45+"E-300+4000 /RELOC
4306 "R-300^45+"D-300+4000 /RDF
4311 "R-300^45+"A-300+4000 /RAR
4316 "R-300^45+"A-300+4000 /RAL
4320 \f "P-300^45+"S-300+4000 /PSF
4325 "P-300^45+"P-300+4000 /PPC
4330 "P-300^45+"L-300+4000 /PLS
4335 "P-300^45+"C-300+4000 /PCF
4340 "P-300^45+"C-300+4000 /PCE
4345 "P-300^45+"A-300+4000 /PAUSE
4350 "P-300^45+"A-300+4000 /PAGE
4355 "O-300^45+"S-300+4000 /OSR
4360 "O-300^45+"P-300+4000 /OPR
4365 "O-300^45+"C-300+4000 /OCTAL
4371 "N-300^45+"O-300+4000 /NOPUNCH
4373 "N-300^45+"C-300+4000
4376 "N-300^45+"O-300+4000 /NOP
4381 "M-300^45+"Q-300+4000 /MQL
4386 "M-300^45+"Q-300+4000 /MQA
4391 "L-300^45+"A-300+4000 /LAS
4396 "K-300^45+"S-300+4000 /KSF
4401 "K-300^45+"R-300+4000 /KRS
4406 "K-300^45+"R-300+4000 /KRB
4411 "K-300^45+"I-300+4000 /KIE
4416 "K-300^45+"C-300+4000 /KCF
4420 \f "K-300^45+"C-300+4000 /KCC
4425 "J-300^45+"M-300+4000 /JMS
4430 "J-300^45+"M-300+4000 /JMP
4435 "I-300^45+"S-300+4000 /ISZ
4440 "I-300^45+"O-300+4000 /IOT
4445 "I-300^45+"O-300+4000 /ION
4450 "I-300^45+"O-300+4000 /IOF
4455 "I-300^45+"F-300+4000 /IFZERO
4457 "R-300^45+"O-300+4000
4460 "I-300^45+"F-300+4000 /IFNZRO
4462 "R-300^45+"O-300+4000
4465 "I-300^45+"F-300+4000 /IFNDEF
4467 "E-300^45+"F-300+4000
4471 "I-300^45+"F-300+4000 /IFDEF
4476 "I-300^45+"A-300+4000 /IAC
4481 "I-300^45+4000+2000 /I
4486 "H-300^45+"L-300+4000 /HLT
4491 "G-300^45+"T-300+4000 /GTF
4496 "G-300^45+"L-300+4000 /GLK
4501 "F-300^45+"I-300+4000 /FIXTAB
4503 "A-300^45+"B-300+4000
4506 "F-300^45+"I-300+4000 /FIXMRI
4508 "R-300^45+"I-300+4000
4511 "F-300^45+"I-300+4000 /FILENAME
4513 "N-300^45+"A-300+4000
4516 "F-300^45+"I-300+4000 /FIELD
4522 "E-300^45+"X-300+4000 /EXPUNGE
4524 "N-300^45+"G-300+4000
4527 "E-300^45+"N-300+4000 /ENPUNCH
4529 "N-300^45+"C-300+4000
4532 "E-300^45+"J-300+4000 /EJECT
4537 "D-300^45+"T-300+4000 /DTORG
4542 "D-300^45+"E-300+4000 /DEVICE
4544 "C-300^45+"E-300+4000
4547 "D-300^45+"E-300+4000 /DECIMAL
4549 "M-300^45+"A-300+4000
4552 "D-300^45+"C-300+4000 /DCA
4557 "C-300^45+"M-300+4000 /CML
4562 "C-300^45+"M-300+4000 /CMA
4567 "C-300^45+"L-300+4000 /CLL
4571 \f "C-300^45+"L-300+4000 /CLA
4576 "C-300^45+"I-300+4000 /CIF
4581 "C-300^45+"I-300+4000 /CIA
4586 "C-300^45+"D-300+4000 /CDF
4591 "C-300^45+"A-300+4000 /CAF
4596 "B-300^45+"S-300+4000 /BSW
4601 "A-300^45+"N-300+4000 /AND
4607 0000 /IMPOSSIBLE (LIMITING) SYMBOL
4613 /**********************************************************************
4614 /TOP OF SYMBOL TABLE
4615 /**********************************************************************
4618 /**********************************************************************
4619 /CODE UNIQUE TO PASSES 1 AND 2
4620 /SWAPPED IN FOR PASSES 1 AND 2
4621 /OVERLAYED DURING PASS 3 *** NO LITERALS ***
4623 RELOC 1000 /ASSEMBLED INTO 1000-1247
4626 SWAPR2= SWAP2-SWAPB2 /RELOCATION FACTOR FOR THIS CODE
4629 TAD OPEN01 /OPEN BINARY AND LISTING FILES
4630 DCA XOUHND /SET ADDRESS OF DEVICE HANDLER
4634 DCA XOUELE /SET NEW OUTPUT FILE LENGTH
4641 ISZ XOUELE /INCREMENT OUTPUT FILE LENGTH
4645 DCA XOUBLK /SET POINTER TO NEW FILENAME
4649 JMS I IOMON /CALL USER SERVICE ROUTINES
4650 13 /*RESET SYSTEM TABLES*
4651 DCA I OPEN05 /DELETE UNCLOSED FILES AND
4652 TAD I OPEN02 /DELETE HANDLERS
4653 AND [17 /GET NEW DEVICE HANDLER #
4654 SNA /OUTPUT INHIBIT?
4657 JMS I IOMON /CALL USER SERVICE ROUTINE
4658 1 /*FETCH DEVICE HANDLER*
4659 XOUHND, 0 /LOADING ADDRESS
4660 HLT /HANDLER NOT AVAILABLE
4661 OUENTR, TAD I OPEN02 /NORMAL RETURN - GET OUTPUT
4662 CIF 10 /DEVICE NUMBER AND FILE LENGTH
4663 \f JMS I IOMON /CALL NEW SERVICE ROUTINES
4664 3 /*ENTER OUTUT FILE
4665 XOUBLK, 0 /POINTER TO FILENAME
4666 XOUELE, 0 /FILE LENGTH
4667 JMP OEFAIL /ERROR RETURN
4668 DCA I OPEN06 /NORMAL RETURN
4671 TAD [200 /LINK IS CLEAR!!
4688 JMP I OOPEN /--RETURN--
4690 OEFAIL, TAD I OPEN02
4693 JMP I OPEN12 /DE**FATAL ERROR**
4699 ONOFIL, ISZ I OPEN05 /SET OUTPUT INHIBIT SWITCH
4700 JMP I OOPEN /--RETURN--
4717 \f/CONTINUATION OF FIXTAB HANDLER
4719 FIXTAY, IFZERO HASH<
4720 TAD HIGHTG /SET POINTERS TO TABLE
4729 FIXTAX, JMS I [FINDTG /GET A TAG
4735 TAD [4000 /SET BIT 0 OF FIRST WORD TO 1
4736 DCA TAG1 /RETURN IT TO TABLE
4739 ISZ TEMP3 /DONE WITH TABLE YET?
4741 JMP I [LOOKEX /YES--EXIT TO MAIN--
4743 /OUTPUT ONE REGISTER - BINARY
4744 /ENTER WITH CONTENTS IN AC
4753 JMS I OCHAR /OUTPUT FIRST FRAME
4756 JMS I OCHAR /OUTPUT SECOND FRAME
4757 JMP I PUNOUT /--RETURN--
4760 IOPEN, 0 /SET UP INPUT ROUTINE
4761 CLA CMA /TO OPEN FILE
4769 JMP I IOPEN /--RETURN--
4777 \f/START PASS 2 *** NO LITERALS HERE EITHER ***
4780 DCA PERROR /RESET PREUDO-ERROR ROUTINE
4781 JMS I ST1OPN /OPEN PASS 2 OUTPUT FILE
4782 JMP NOPA21 /NO PASS 2 IF PASS 3
4783 NOPA23, TAD I ST1OBL
4785 DCA PUNCHX /CLEAR PUNCH INHIBIT
4791 TAD I NOPA22 /IS THERE A PASS 3?
4794 JMP NOPA23 /NO - DO PASS 2
4795 ISZ PASS /SKIP PASS 2
4797 JMP NOPAS2 /CONTINUE TO PASS 3
4801 START3, 0 /GENERATE LEADER/TRAILER
4808 JMP I START3 /--RETURN--
4813 ENDPA2, JMS I [DUMPZ /DUMP PAGE 0 LITERALS
4816 TAD CHKSUM /OUTPUT CHECKSUM
4817 JMS I [PUNOUT /PUNCH THE CHECKSUM
4818 JMS START3 /GENERATE LEADER/TRAILER
4819 JMS I EN2CLS /CLOSE PASS 2 OUTPUT FILE
4821 DCA OERROR /SET NEW OUTPUT TO BE LISTING
4823 CMOVE, JMP CMOVA /ZEROED IF /C
4824 CDF 10 /MOVE CODE FOR /C OPTION
4826 DCA I CMOV2 /MOVE OUTPUT FILE STORAGE
4832 JMS I ST1OPN /OPEN 3RD PASS FILE
4833 DCA I CMOV4 /NO 3RD PASS
4834 TAD I ST1OBL /GET FILE START
4835 CSWIT2, CLA /"DCA BINSRT" IF /C
4837 DCA I EN2PTP /RESET PAPERTAPE SWITCH
4839 DCA I EN2DIR /RESET DIRECTORY SWITCH
4842 LOADOV /OVERLAY THIS AREA WITH PASS3 CODE
4860 IFNZRO ENDOVL-SWAPE2&4000 <OVLERR,__ERROR__>
4864 /ONCE ONLY CODE TO HASH OUT THE PERMANENT SYMBOLS
4867 JMS I (7607 /WRITE THE SYMBOL TABLE SORT OVERLAY
4868 4210 /2 PAGES FROM FIELD 1
4869 OUDEVH+400 /FROM HERE
4871 JMP I (SYSERR/WONDERFUL.
4873 SZA CLA /SZA IF KICKING OUT USR
4874 TAD (12 /ELSE FUDGE POINTER
4875 TAD I (HIFLD /FIRST SET HASH TABLE SIZE
4876 TAD PRIMES /ACCORDING TO CORE SIZE
4885 JMP KPUSR /JMP IF KEEPING USR
4886 CDF 10 /SERVE NOTICE WE'RE OCCUPYING FIELD 1
4891 DCA IOMON /AND POINT AT PROPER MONITOR E.P.
4893 TAD I (MPRIME /HOW MANY SLOTS TO WIPE
4894 DCA LAST3 /TO COUNTER
4897 TAD (7777 /FUDGE THE INITIAL AUTO XR
4898 JMP CLRGO /INTO THE LOOP NOW
4901 SZA CLA /SZA IF NEED TO DO NEXT FIELD
4902 JMP CLCDF0+1/ELSE CLEAR ANOTHER
4905 DCA CLCDF0 /CDF INSTR GETS BUMPED
4907 CLRGO, DCA LAST1 /XRGETS SET
4908 CLCDF0, CDF 10 /INITIALLY CDF 10
4913 ISZ LAST3 /SKP IF NO MORE
4914 JMP CLRLUP /ELSE DO ANOTHER
4915 CDF /THE TABLE IS CLEAN
4919 DCA HIGHTG /HIGHTG=CURRENT SYMBOL INDEX
4920 TAD (SYMS+3 /USE THESE AUTO XR'S NOW
4925 AND [1777 /FIRST, STRIP THE TYPE BITS
4933 ISZ LAST1 /SKIP THE VALUE
4934 JMP I (GETTGH /GO FIND IT'S PLACE
4944 JMS I (INSRTG /AND STORE IT
4948 JMP HSHLP /LOOP IF MORE TO GO
4949 JMP I HSHSMS /--RETURN--
4956 7775 /5 FIELDS (THE LAST MOSTELY WASTE)
4957 BPRIMES=.-1 /ALTERNATE TABLE SIZE FOR BATCH COMPATABILITY
4958 1737 /1 FIELD (MEANS NO BATCH)
4962 7775 /5 FIELDS (SOME OF WASTE FOR BATCH)
4964 1335 /STILL ANOTHER ALTERNATE SET IF KEEPING USR
4978 \f/**************************************************************
4980 /**************************************************************
4983 /SYMBOL TABLE SORT OVERLAY
4984 /ONLY SWAPPED IF TABLE WILL BE LISTED
4986 /FIRST, SOME EQUATES
5006 FIELD 1 /SET THE FIELD NOW
5007 \f *OUDEVH+400 /IT GOES HERE
5009 SORTAB, 0 /FIRST LOC IN PAGE
5012 DCA TEMP /TEMP=#CELLS TO SCAN
5014 /DEFLATE TABLE PRIOR TO SORTING AND LISTING IT
5015 /OUT WITH EMPTIES AND PERMANENTS
5017 DCA HIGHTG /TARGET POINTER
5018 DCA TEMP2 /SOURCE POINTER
5021 JMS I PFINDTG /GET THE NEXT STAB CELL
5024 SNA SZL CLA /AND THERE BUT NOT FIXED?
5025 JMP DEFNUL /NO, DON'T STORE IT
5026 TAD O1777 /YES,DISCARD THE TYPE BITS NOW
5042 JMS I (SORT /NOW SORT THEM
5043 JMP I SORTAB /EXIT TO PRTSTAB
5044 \f /MOVE A SYMBOL THRU THE TABLE
5047 TAD SXR2 /GET SOURCE DF+XREG
5066 /AUXILLIARY FIELD+XREG SETTER
5070 TAD I (USROFS /IF KEEPING USR
5080 TAD (-202 /SETS AS IN SETFLD...
5081 DCA TXR /TENTATIVELY SET TXR
5086 JMP I GETFLD /EXIT WITH AC SET TO CDF INSTR
5087 \f /ROUTINE TO EXCHANGE SYMBOLS LO AND HI
5098 DCA SXR2 /SXR'S FOR HIGH SYMBOL
5103 DCA TXR2 /TXR'S FOR LOW SYMBOL
5108 TAD I SXR /GET HI SYM WORD
5114 DCA I TXR2 /STORE HI IN LOW
5116 TAD SCOM /NOW STORE LO
5122 \f /COMPARE SYMBOLS + SET LINK THEREBY
5125 DCA THISTG /AC=TAG #
5154 \f /SORT ROUTINE HERE
5157 DCA BEG /INITIALIZE PARTITION BOUNDS
5160 DCA END /ARE THERE ANY SYMBOLS?
5162 JMP I SORT /NO EXIT WITH LINK SET
5163 TAD (LITBF1-1+26 /OK, SET STACK NOW
5175 JMP OKCOOL /END.LOS.BEG
5178 DCA MED /MED=BEG+(END-BEG)/2
5181 JMS I PFINDTG /T=A(MED)
5190 JMP JUSTWO /BEG.EQ.MED
5195 JMS I (SMOV /A(MED)=A(LO)
5203 JMS I (SCOM /T.GT.A(LO) TO LINK
5205 JMP BEGLP /T.GT.A(LO)
5206 JMP ENDGO /T.LT.A(LO)
5211 JMP DONE /IF HI.LO.LO
5229 JMS I (SMOV /A(BEG)=A(HI)
5232 JMS I PPUTTAG /A(HI)=T
5242 JMP HIBIGR /DEFER HIGH FOR LATER
5244 DCA I DXR /DEFER LO FOR LATER
5263 SNL /PROTECT AGAINST WRAP AROUND
5270 JMS I (SSWT /SWITCH IF T.GT.A(HI)
5271 OKCOOL, CLA CLL /NOW CONSIDER PREV PARTITIONS
5277 JMP SLOOP2 /REITERATE
5278 JMP I SORT /DONE, RETURN WITH A CLEAR LINK
5282 \f /ROUTINE TO STORE THE DATE OF THE FORM DD-MMM-YY
5291 TAD I (MDATE /PICK UP THE DATE WORD OF THE FORM MMM MDD DDD YYY
5292 CDF /RUN WITH DF = 0
5294 JMP NODATE /EXIT IF NO DATE
5295 DCA DATWD /ELSE STORE DATE WORD
5297 DCA I DATPTR /SET FIRST DIGIT OF DAY
5298 TAD DATWD /NOW GET DAY BITS
5302 JMS DIV10 /DO DAY DIGITS NOW
5304 DCA I DATPTR /STORE DASH
5306 TAD DATWD /NOW GET MONTH BITS
5307 TAD (7400 /REDUCE TO ORIGIN 0
5314 CLL RAR /GENERATE 1.5*MONTH INDEX
5316 TAD (MONLST /INDEX MONTH LIST (SIXBIT)
5319 DCA DIV10 /SET 3 TIMES THRU LOOP
5321 JMP MONGO /IF EVEN START AT RIGHT HALF
5326 JMS MONPUT /PUT LEFT CHAR
5328 JMS MONPUT /PUT RIGHT CHAR
5330 JMP MONLP /LOOP FOR MORE
5334 TAD (40 /CONVERT TO 7BIT
5338 JMP I MONPUT /RETURN TO UNPACK LOOP
5340 DCA I DATPTR /PUT ANOTHER DASH
5343 DCA I DATPTR /SETUP YEAR TENS DIGIT FOR DIVIDE
5345 AND (600 /GET YEAR EXTENSION FROM 600 BITS
5349 TAD DATWD /NOW GET YEAR
5351 TAD DIV10 /ADD EXTENSION
5352 JMS DIV10 /UNPACK IT
5353 NODATE, CIF CDF /NOW RETURN
5360 JMP .-3 /REDUCE MON 10.
5363 DCA I DATPTR /STORE LOW DIGIT
5365 JMP I DIV10 /--RETURN--