Cleaned up more typos and fixed paging issues.
[retro-software/dec/tops10/v4.5.git] / src / eddt.mac
1         IFNDEF EDDT,<\r
2         EDDT=1                  ;MAKE EXEC DDT\r
3 >\r
4 ;ALL OTHER REFERENCES TO VERSION # ARE TAKEN CARE OF BY THIS DEFINITION\r
5 \r
6 DDTVER==22\r
7 \r
8 SUBTTL   2 JUN 69\r
9 REPEAT 0,<\r
10 \r
11         \r
12 DDT ASSEMBLY INSTRUCTIONS\r
13 \r
14 THE SOURCE OF DDT,13 WILL ASSEMBLE INTO SEVERAL DIFFERENT\r
15 VERSIONS; THE ASSEMBY IS CONTROLED BY THE VALUE ASSIGNED\r
16 TO THE SYMBOL "EDDT". THE SYMBOL "EDDT" IS DECODED AS FOLLOWSR:\r
17 \r
18 BIT 35  =0:     ASSEMBLE USER MODE DDT\r
19         =1:     ASSEMBLE AN EXECUTIVE MODE DDT\r
20 \r
21 BIT 34  =0:     DO NOT ASSEMBLE THE PAPER TAPE FEATURE INTO DDT\r
22         =1:     ASSEMBLE THE PAPER TAPE FEATURES BUT ONLY IF\r
23                         ASSEMBLING AN EXECUTIVE MODE DDT\r
24 \r
25 BIT 33  =0;     FOR USER MODE DDT ONLY- ASSEMBLE USING THE\r
26                         "TTCALL" UUO FOR TELETYPE IO\r
27         =1;     FOR USER MODE DDT ONLY- ASSEMBLE USING THE\r
28                         "DDTIN" AND "DDTOUT" UUO'S FOR TELETYPE IO\r
29 \r
30 BIT 32  =1;     ASSEMBLE A FILE DDT\r
31 \r
32 BITS (0-17)\r
33         =0;     ASSEMBLE A RELOCATABLE VERSION OF DDT (RELOC 0)\r
34      NOT=0;     ASSEMBLE AN ABSOLUTE (NON-RELOCATABLE) VERSION\r
35                         OF DDT WITH A STARTING ADDRESS BEING THE\r
36                         NUMBER IN BITS 0-17\r
37 \r
38 (IF THE SYMBOL "EDDT" IS NOT DEFINED AT ALL, DDT WILL BE ASSEMBLED\r
39         WITH EDDT=0.)\r
40 \r
41 EXAMPLES OF "EDDT" DEFINTIONS:\r
42         EDDT=0  ASSEMBLE A RELOCATABLE USER MODE DDT WITH TELETYPE\r
43                 I/O DONE BY THE "TTCALL" UUO\r
44 \r
45         EDDT=1  ASSEMBLE A RELOCATABLE EXECUTIVE MODE DDT\r
46 \r
47         EDDT=<XWD 4000,3>\r
48                 ASSEMBLE AN ABSOLUTE EXECUTIVE MODE DDT\r
49                 WITH PAPER TAPE FEATURES, AND WHOSE STARTING\r
50                 ADDRESS IS LOCATION 4000.\r
51 \r
52 \r
53 \r
54 \r
55 \r
56 \r
57 \r
58 \r
59 \r
60 \r
61 EXAMPLE OF A MACRO ASSEMBLY COMMAND:\r
62 \r
63 .^C\r
64 \r
65 .R MACRO\r
66 \r
67 *DSK:UDDT,/C_TTY:,DTA2:DDT.12\r
68 EDDT=0\r
69 ^Z\r
70 \r
71 END OF PASS 1                   ;THIS LINE TYPED BY MACRO\r
72 \r
73 ^Z\r
74 \r
75 NO ERRORS DETECTED              ;TYPED BY MACRO\r
76 \r
77 PROGRAM BREAK IS 003340         ;TYPED BY MACRO\r
78 \r
79 *                               ;TYPED BY MACRO\r
80 \r
81 \r
82 OTHER VERSION OF DDT ARE ASSEMBLED IN A SIMILAR MANNER\r
83 BY DEFINING "EDDT": A DIFFERENT WAY WHERE THE EXAMPLE\r
84 DEFINED "EDDT=0".\r
85 \r
86 >       ;END OF REPEAT 0\r
87 \f\r
88 IFNDEF EDDT,<EDDT=0>\r
89 \r
90 DEFINE XP (X.,Y.),<\r
91         IF2,<X.=Y.\r
92         INTERN X.>>\r
93 \r
94 \r
95 IFN EDDT&1,<DEFINE HEADER (VERSION),<\r
96         TITLE EDDT      V0'VERSION      -EXEC MODE DDT\r
97         JOBREL=37\r
98         JOBSYM=36\r
99         ZLOW=40\r
100 >>\r
101 \r
102 IFE EDDT&1,<DEFINE HEADER (VERSION),<\r
103 IFE EDDT&10,<\r
104         TITLE UDDT      V0'VERSION      -USER MODE DDT>\r
105 IFN EDDT&10,<\r
106         TITLE FILDDT    V0'VERSION      -FILE DDT>\r
107         EXTERN JOBREL,JOBSYM,JOBSA\r
108         ZLOW=140>>\r
109 \r
110 ;DO NOT SET LOWER CORE IF EXEC DDT(OK USER OR FILDDT)\r
111 IFE EDDT&1,<\r
112 JOBVER=137\r
113         LOC JOBVER\r
114         DDTVER                  ;PUT VERSION # IN JOBVER\r
115 JOBDDT=74\r
116         LOC JOBDDT\r
117         XWD DDTEND,DDT\r
118 RELOC 0\r
119 >\r
120 \r
121 IFN EDDT&<XWD -1,0>,<LOC <EDDT>B53>\r
122 \r
123 HEADER \DDTVER^\r
124                 ;THE HEADER MACRO CONSTRUCTS THE TITLE AND VERSION #\r
125 \fIFN EDDT&10,<  CM=2            ;DEFINE SOFTWARE CHANS.\r
126                 DP=3\r
127 >\r
128 ;DEFINE ACCUMULATORS\r
129 \r
130 F=0             ;FLAGS\r
131 P=1             ;PUSH DOWN\r
132 R=<A=2>         ;POINTERS TO TABLES, CORE, ETC.\r
133 S=<B=3>\r
134 W=<C=4>         ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER\r
135 T=5             ;TRANSFER DATA\r
136 W1=6\r
137 W2=7\r
138 SCH=10          ;MODE CONTROL SWITCH FOR OUTPUT\r
139 AR=11           ;MODE CONTROL SWITCH FOR OUTPUT\r
140 ODF=12          ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX\r
141 TT=13           ;TEMPORARY\r
142 TT1=14  ;TEMPORARY\r
143 \r
144 ;DEFINE I/O DEVICE MNEMONICS FOR DDT USE\r
145 PRS=4\r
146 TTYY=120\r
147 PTRR=104\r
148 PTPP=100\r
149 \r
150 ;DEFINE PUSH DOWN LENGTH\r
151 LPDL=50         ;MAX LENGTH PUSH DOWN LIST\r
152 \r
153 ;DEFINE BITS FOR USE IN LEFT HALF OF ACCUMULATOR F\r
154 COMF=200000             ;COMMA TYPED FLAG\r
155 TIF=100000              ;TRUNCATE TO 18 BITS -  SET BY SPACE OR COMMA\r
156 PTF=100         ; +, -, OR * HAS BEEN TYPED\r
157 CTF=400\r
158 SF=4            ;SYLLABLE FLAG\r
159 QF=1            ;QUANTITY TYPED IN TO WORD ASSEMBLER\r
160 \r
161 CF=40           ; $  TYPED\r
162 CCF=10000       ; $$  TYPED\r
163 MF=2            ;MINUS SIGN TYPED IN\r
164 LTF=20          ;LETTER TYPED IN TO CURRENT SYLLABLE\r
165 ROF=10          ;REGISTER OPEN FLAG\r
166 STF=4000\r
167 FAF=1000                ; < TYPED\r
168 SAF=2000                ; > TYPED\r
169 \r
170 FPF=20000               ; . TYPED IN\r
171 FEF=400000              ; E FLAG\r
172 \r
173 MLF=200                 ;*FLAG\r
174 DVF=40000               ;DIVIDE FLAG\r
175 \r
176 ;PID IS 20 IF SYM TAB POINTER IS INDIRECT JOBSYM\r
177 PID=0           ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM\r
178 \f\r
179 ;DEFINE BITS FOR USE IN RIGHT HALF OF ACCUMULATOR F\r
180 \r
181 ITF=2   ;INSTRUCTION TYPED IF ITF=1\r
182 OUTF=4  ;OUTPUT IF OUTF=1\r
183 CF1=400         ;OUTPUT 1 REGISTER AS CONSTANT\r
184 LF1=2000                ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT\r
185 Q2F=1           ;NUMBER TYPED AFTER ALT MODE \r
186 R20F=10 ;TEMP FLAG USED IN SETUP\r
187 SBF=20\r
188 NAF=200         ;NEGATIVE ADDRESSES PERMISSABLE\r
189 POWF=4000               ;ARGUMENT FOR EXPONENT COMING\r
190 \r
191 ;DEFINE SYMBOL TABLE SYMBOL TYPES\r
192 GLOBAL=040000           ;GLOBAL SYMBOL\r
193 LOCAL=100000\r
194 PNAME=740000            ;PROGRAM NAME\r
195 DELI=200000             ;DELETE INPUT\r
196 DELO=400000             ;DELETE OUTPUT\r
197 \r
198 DDT:    INTERN DDTEND   ;DECLARE END OF DDT AS INTERNAL, FOR\r
199                         ; USER TO SEE (USER MODE) AND ONCE ONLY CODE\r
200                         ; (MONITOR)\r
201         IFE EDDT&1,<    ENTRY DDT\r
202                 >\r
203         IFN EDDT&1,<    INTERNAL DDT\r
204                         DDTX=DDT\r
205                         ENTRY DDTX              ;NEEDED BY MONITOR>\r
206 \r
207 ;DEFINE $ SYMBOLS INTERNAL TO DDT\r
208 OPDEF DDTINT [Z 0,]             ;ADDRESS FLAG FOR INTERNAL REGISTERS\r
209 \r
210 RADIX 10\r
211 NBP=8   ;NUMBER OF BREAKPOINTS\r
212 DEFINE DBPNT (Z.)<XP $'Z.'B,<DDTINT B1ADR+3*Z.-3>>\r
213 ZZ=0\r
214 REPEAT NBP,<DBPNT \<ZZ=ZZ+1>>\r
215 RADIX 8\r
216 \r
217 \r
218 XP $M,MSK\r
219 XP $I,SAVPI\r
220 \r
221 SETUWP=36\r
222 \r
223 \f;DEFINE I/O DEVICE MNEMONICS\r
224 \r
225 IFN EDDT&1,<\r
226 \r
227 XP PI,4B11\r
228 XP PTP,100B11\r
229 XP PTR,104B11\r
230 XP CDR,114B11\r
231 XP TTY,120B11\r
232 XP LPT,124B11\r
233 XP DC,200B11\r
234 XP DIS,130B11\r
235 XP PLT,140B11\r
236 XP CR,150B11\r
237 XP DSK,170B11\r
238 XP UTC,210B11\r
239 XP UTS,214B11\r
240 XP DCSA,300B11\r
241 XP DCSB,304B11\r
242 \r
243 XP DF,270B11\r
244 XP MTC,220B11\r
245 XP MTS,224B11\r
246 XP MTM,230B11\r
247 XP DLS,240B11\r
248 XP MDF,260B11\r
249 XP DTC,320B11\r
250 XP DTS,324B11\r
251 XP TMC,340B11\r
252 XP TMS,344B11   >\r
253 \r
254 ;DEFINE EXTENDED OPERATIONS\r
255 \r
256 XP JOV,2554B11\r
257 XP JEN,2545B11\r
258 XP HALT,2542B11\r
259 \r
260 \fIFE EDDT&10,<\r
261 DDT:    JSR SAVE\r
262         PUSHJ P,REMOVB\r
263         HLRZ T,ESTU             ;THIS SEQUENCE INITS SYM TABLE LOGIC\r
264         SUB T,ESTU\r
265         MOVE W,@SYMP\r
266         ADD T,W         ;IF THE TOP OF THE UNDEFINED SYM TAB DOES\r
267         TRNE T,-1               ; NOT POINT TO BOTTOM OF REGULAR SYM TABLE,THEN\r
268         HRRZM W,ESTU            ; RE-INIT UNDEFINED SYM TABLE POINTER. ESTU.\r
269         MOVE T,PRGM\r
270         SUB T,W         ;IF THE SYM TABLE PNTR AND THE PROGRAM\r
271         TSC T,T         ; NAME (PRGM) PNTR DO NOT END UP IN THE\r
272         MOVE W1,PRGM            ; SAME PLACE. OR THEY DO NOT BOTH START ON\r
273         XOR W1,W                ; AN EVEN (OR BOTH ON ODD) LOCATION. OR\r
274         TRNE W1,1               ; PRGM .GE.0, THEN RE-INIT PRGM.\r
275         JRST DDT0               ;EVEN-ODD PROBLEM\r
276         SKIPN T         ;POINTERS DON'T END TOGETHER\r
277         SKIPL PRGM              ;IF PRGM .GE. 0, THEN RE-INIT\r
278 DDT0:   MOVEM W,PRGM            ;PRGM=C(JOBSYM)\r
279 >\r
280 \fIFN EDDT&10,<\r
281 DDT:    CALLI\r
282         MOVEI T,SYMSET\r
283         MOVEM T,JOBREN          ;SET REENTER ADDRESS\r
284         MOVEI P,PS\r
285         INIT 1,17\r
286         SIXBIT .DSK.\r
287         Z\r
288         HALT .-3\r
289         SETZM CRASH+3           ;CLEAR PPN\r
290         SETZM COMNDS+3          ;CLEARN PPN IN CASE FILDDT SAVED AFTER STARTING\r
291         SETZM SNAP+3            ;ALSO GOOD PRACTICE TO BE SELF INITIALIZING\r
292         SETZM CRASHS            ;ASSUME NO CRASH.SAV(IE. PEEK AT CURRENT MONITOR)\r
293         LOOKUP 1,CRASH\r
294         JRST NOCSH              ;LET USER PASS. HE MAY WANT TO PEEK AT MON.\r
295                                 ; OR JUST WANT TO TYPE OUT VALUE OF SOME SYMBOLS\r
296         SETOM CRASHS            ;FLAG CRASH.SAV EXISTS ON DSK\r
297         USETI 1,1\r
298         INPUT 1,RSILST\r
299 \r
300         STATZ 1,740000\r
301         HALT .-3\r
302         SETOM RSAVE             ;FORCE READING OF "CURRENT" BLOCK\r
303                                 ; ON FIRST EXAMINE\r
304 NOCSH:  INIT CM,0\r
305         SIXBIT .SYS.\r
306         XWD 0,CBUF\r
307         HALT .-3\r
308         SETOM COMAND            ;ASSUME A COMMAND FILE\r
309         LOOKUP CM,COMNDS\r
310 NOLPT:  SETZM COMAND            ;NO FILE IF NOT FOUND\r
311         SKIPM COMAND\r
312         JRST DD1                ;USE TTY I/O\r
313         INIT DP,1\r
314         SIXBIT .,LPT.           ;PREPARE FOR LPT OUTPUT IN AL MODE\r
315         XWD LBUF,0      \r
316         JRST NOLPT              ;TREAT AS THO NO FILE\r
317         ENTER DP,SNAP\r
318         JRST NOLPT              ;TREAT AS NO FILE IF CAN'T ENTER\r
319         JRST DD1\r
320 \r
321 REPEAT 0,<\r
322 HOW TO COPY MONITOR SYMBOL TABLE INTO FILDDT\r
323 1) USE FDDD10 TO LOAD AN UNRUN VERSION OF YOUR MONITOR\r
324    AS SAVED AFTER BUILD OR LOADING.\r
325 2) RENAME IT AS CRASH.SAV\r
326 3) LOAD A PRISTINE VERSION OF FILDDT AND START IT TO SET\r
327    REENTER ADDRESS.\r
328 4) TYPE ^C   REENTER\r
329 5) FILDDT WILL EXPAND AS NECESSARY AND COPY THE SYMBOL\r
330    TABLE FROM CRASH.SAV INTO ITSELF\r
331 6) AFTER CARRIAGE RETURN IS TYPED FILDDT IS DONE.\r
332 7) SAVE FILDDT WITH A NEW NAME SO AS NOT TO CONFUSE IT WITH THE\r
333    ORIGINAL FILDDT.SAV\r
334 \f\r
335 THE MONITOR CAN BE LOADED IN ANY OF THREE WAYS(IN ORDER OF PREFERENCE):\r
336    1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON\r
337    2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER & COMMON\r
338    3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD\r
339 \r
340 THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116) & T30SYM(131) IN DIFFERENT STATES:\r
341 \r
342         DDTSYM          JOBSYM          T30SYM\r
343 \r
344    1.   JUNK            S.T.PTR         JUNK\r
345    2.   JUNK            JUNK(NON-NEG)   S.T.PTR\r
346    3.   S.T.PTR         S.T.PTR         JUNK\r
347 >\r
348 \r
349 DDTSYM=36\r
350 \r
351 T30SYM=131\r
352 \r
353 EXTERNAL JOBFF,JOBREN\r
354 \r
355 SYMSET: MOVEI R,JOBSYM\r
356         PUSHJ P,FETCH\r
357         JRST ERR\r
358         MOVEM T,JOBSYM          ;POSSIBLE SYMBOL POINTER\r
359         MOVEI R,DDTSYM\r
360         PUSHJ P,FETCH\r
361         JRST ERR\r
362         MOVEM T,DDTSTP          ;YET ANOTHER CANIDATE\r
363         MOVEI R,T30SYM          ;ASSUME LOADED BY 10/30\r
364         PUSHJ P,FETCH\r
365         JRST ERR\r
366         SKIPL JOBSYM            ;OR IS JOBSYM A POINTER (-VE)?\r
367         JRST REGT30             ;LOADED BY 10/30\r
368         SKIPL DDTSTP            ;DDTSYM A VALID POINTER (-VE)?\r
369         MOVE T,JOBSYM           ;NO TAKE JOBSYM AS THE POINTER\r
370 REGT30: MOVEM T,JOBSYM          ;SAVE IT OVER OLD JOBSYM\r
371         HLRES T,T\r
372         MOVMS T,T               ;LENGTH OF SYMBOL TABLE\r
373         MOVE W,JOBFF\r
374         ADDI W,1300             ;LEAVE SPAVE FOR COMMAND & LPT BUFFERS.\r
375                                 ; OR DSK BUFFERS AND EXTRA SYMBOL DEFNS.\r
376         HRRZ W1,W               ;SAVE LOC FOR COPY\r
377         ADD W,T                 ;ADD TABLE LENGTH\r
378         IORI W,1777             ;REQUEST INTEGRAL # OF K.\r
379         CALLI W,11              ;GET CORE\r
380         HALT                    ;UGH!\r
381         MOVE R,JOBSYM           ;WHEREABOUTS OF MONITOR SYMBOLS\r
382         HRRM W1,JOBSYM          ;NOW POINT TO FILDDT SYMBOLS\r
383 TCOPY:  PUSHJ P,FETCH           ;GET A WORD\r
384         JRST ERR\r
385         MOVEM T,0(W1)           ;STASH IT\r
386         AOS W1\r
387         AOBJN R,TCOPY   \r
388         JRST NOLPT              ;GO TRY IT\r
389 DDTSTP: Z                       ;SAVE POSSIBLE SYMBOL POINTER\r
390 >\r
391 \f\r
392 \r
393 DD1:    PUSHJ P,CRF\r
394 DD1.5:  TLZ F,ROF               ;CLOSE ANY OPEN REGISTER\r
395         MOVE T,[XWD SCHM,SCH]\r
396         BLT T,ODF               ;LOAD ACS\r
397 DD2:    CLEARM PRNC             ;PARENTHESES COUNT\r
398         MOVEI P,PS\r
399 LIS:    MOVE T,ESTU\r
400         MOVEM T,ESTUT           ;INIT UNDEFINED SYM ASSEM\r
401         TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F]\r
402 LIS0:   TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF]\r
403         CLEARM,WRD\r
404 LIS1:   CLEARM,FRASE\r
405 LIS2:   MOVEI T,1\r
406         MOVEM T,FRASE1\r
407         TLZ F,MLF+DVF\r
408 L1:     TLZ F,CF+CCF+SF+FPF             ;TURN OFF CONTROL, SYL, PERIOD FLAG\r
409         CLEARM,SYL\r
410 L1RPR:  CLEARM,SYM\r
411         MOVEI T,6\r
412         MOVEM T,TEM             ;INIT SYMBOL COUNTER\r
413         MOVE T,[POINT 7,TXT]\r
414         MOVEM T,CHP             ;SETUP FOR OPEVAL SYMBOL\r
415         CLEARM,DEN\r
416         CLEARM,WRD2\r
417 \r
418 L2:     PUSHJ P,TIN             ;PICK UP CHARACTER\r
419         CAIL T,"A"+40           ;LOWER CASE A\r
420         CAILE T,"Z"+40          ;LOWER CASE Z\r
421         JRST .+2\r
422         TRC T,40                ;CHANGE LOWER CASE TO UPPER CASE\r
423         TLNE F,CF               ;CONTROL FLAG\r
424         JRST L21\r
425         CAIG T,"Z"              ;Z\r
426         CAIGE T,"A"             ;A\r
427         JRST .+2\r
428         JRST LET\r
429 L21:    MOVE R,T\r
430         CAILE T,137     ;DISPATCH TABLE HAS ENTRIES ONLY .LE. 137\r
431         JRST ERR\r
432         IDIVI R,3               ;REMAINDER GIVES COLUMN, QUOTIENT GIVES ROW\r
433         LDB W,BDISP(R+1)        ;GET 12 BIT ADDRESS FROM DISPATCH TABLE\r
434         CAIGE W,MULT-DDT        ;FIRST EVAL ROUTINE\r
435         JRST DDT(W)\r
436 \f       MOVE T,SYL\r
437         TLZN F,LTF\r
438         JRST POWER\r
439         MOVE T,[XWD OPEVAL,EVAL]        ;GET ADDRESSES OF LOOKUP ROUTINES\r
440         SKIPN WRD               ;IF C(WRD)=0, CALL OPEVAL FIRST, OTHERWISE EVAL FIRST\r
441         MOVSS T\r
442         MOVEM T,SAVE\r
443         JRST L213\r
444 \r
445 L212:   HLRZS T,SAVE            ;GET ADDRESS OF THE OTHER LOOKUP ROUTINE\r
446         JUMPE T,UND1            ;IF ADR=0, THEN SYMBOL UNDEFINED\r
447 L213:   PUSHJ P,(T)     ;CALL OPEVAL OR EVAL\r
448         JRST L212               ;SYMBOL NOT FOUND\r
449 L4:     TLZE F,MF\r
450         MOVN T,T\r
451         TLNN F,SF\r
452         CAIE W,LPRN-DDT\r
453         JRST .+2\r
454         JRST LPRN\r
455 \r
456         EXCH T,FRASE1\r
457         TLNN F,DVF\r
458         IMULB T,FRASE1\r
459         TLZE F,DVF\r
460         IDIVB T,FRASE1\r
461         CAIGE W,ASSEM-DDT\r
462         JRST DDT(W)             ;MULTIPLY OR DIVIDE\r
463         ADDB T,FRASE\r
464         CAIGE W,SPACE-DDT\r
465         JRST DDT(W)             ; + - @ ,\r
466 \r
467         ADD T,WRD\r
468         TLNE F,TIF              ;TRUNCATE INDICATOR FLAG\r
469         HLL T,WRD               ;TRUNCATE\r
470         MOVEM T,WRD\r
471         TLNN F,QF\r
472         MOVE T,LWT\r
473         CLEARM,R\r
474         MOVE W1,ESTUT\r
475         CAMN W1,ESTU\r
476         JRST L5\r
477         CAILE W,CARR-DDT\r
478         JRST ERR\r
479 L5:     CAIG W,RPRN-DDT\r
480         JRST DDT(W)\r
481         PUSH P,KILRET\r
482         SKIPN PRNC\r
483         JRST DDT(W)\r
484 \f\r
485 ERR:    MOVEI W1,"?"\r
486         JRST WRONG1\r
487 UNDEF:  MOVEI W1,"U"\r
488         JRST WRONG1\r
489 WRONG:  MOVE W1,[ASCII /XXX/]\r
490 WRONG1: MOVEI P,PS\r
491         PUSHJ P,TEXT\r
492         PUSHJ P,LCT             ;TYPE TAB\r
493         PUSHJ P,LISTEN          ;GOBBLE ANY INPUT CHARACTER\r
494         JFCL\r
495         JRST DD2\r
496 RET:    MOVEI P,PS\r
497         PUSHJ P,LCT             ;COMMON RETURN FOR TAB;,JRST LIS\r
498         JRST DD2\r
499 \f\r
500 UND1:   MOVE R,ESTUT            ;UNDEFINED SYM ASSEMBLER\r
501         HLRE S,ESTUT\r
502         ASH S,-1                ;SETUP EVAL END TEST\r
503         PUSHJ P,EVAL2\r
504         CAIN W,ASSEM-DDT\r
505         TLNN F,ROF\r
506         JRST UNDEF\r
507         SKIPE PRNC\r
508         JRST UNDEF\r
509         MOVEI T,"#"\r
510         CAIE W,ASSEM-DDT\r
511         PUSHJ P,TOUT\r
512 \r
513         MOVN R,[XWD 2,2]\r
514         ADDB R,ESTUT\r
515         MOVE T,SYM\r
516         TLO T,GLOBAL\r
517         MOVEM T,(R)\r
518 \r
519         HRRZ T,LLOCO\r
520         TLNE F,MF\r
521         TLO T,400000\r
522         MOVEM T,1(R)\r
523         MOVEI T,0\r
524         JRST L4\r
525 \r
526 QUESTN: PUSHJ P,CRF             ;LIST UNDEFINED SYMBOLS\r
527         MOVE R,ESTU\r
528 QUEST1: JUMPGE R,DD1\r
529         MOVE T, (R)\r
530         SKIPA W1,ESTU\r
531 \r
532 QUEST2: ADD W1,[XWD 2,2]\r
533         CAME T,(W1)\r
534         JRST QUEST2\r
535         CAME R,W1\r
536         JRST QUEST4\r
537         PUSHJ P,SPT\r
538         PUSHJ P,CRF\r
539 QUEST4: ADD R,[XWD 2,2]\r
540         JRST QUEST1\r
541 \fNUM:   ANDI T,17               ;T HOLDS CHARACTER\r
542         TLNE F,CF+FPF\r
543         JRST NM1\r
544         MOVE W,SYL\r
545         LSH W,3\r
546         ADD W,T\r
547         MOVEM W,SYL\r
548         MOVE W,DEN\r
549         IMULI W,12              ;CONVERT TO DECIMAL\r
550         ADD W,T\r
551         MOVEM W,DEN\r
552         AOJA T,LE1A\r
553 \r
554 DOLLAR: SKIPA T,[46+101-13]     ;RADIX 50 $ TO BE\r
555 PERC:   MOVEI T,47+101-13       ;PERCENT SIGN\r
556 LET:    TLC F,SF+FPF            ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1\r
557         TLZN F,LTF+FEF+SF+FPF\r
558         CAIE T,105              ; E\r
559         TLOA F,LTF\r
560         TLOA F,FEF\r
561         JRST LET1\r
562         TLZN F,MF\r
563         SKIPA W1,SYL\r
564         MOVN W1,SYL\r
565         MOVEM W1,FSV\r
566         CLEARM DEN\r
567 LET1:   SUBI T,101-13           ;FORM RADIX 50 SYMBOL\r
568 LE1A:   TLO F,SF+QF\r
569 LE2:    MOVE W,SYM\r
570         MOVEI R,101-13(T)\r
571         IMULI W,50              ;CONVERT TO RADIX 50\r
572         ADD W,T\r
573         SOSGE TEM               ;IGNORE CHARACS AFTER 6\r
574         JRST L2\r
575         MOVEM W,SYM\r
576         IDPB R,CHP\r
577         MOVEM W,SYM\r
578         JRST L2\r
579 \fNUM1:  EXCH T,WRD2             ;FORM NUMBER AFTER $\r
580         IMULI T,12\r
581         ADDM T,WRD2\r
582         TRO F,Q2F\r
583         JRST L2\r
584 \r
585 NM1:    TLNE F,CF\r
586         JRST NUM1\r
587         MOVEI W1,6              ;FORM FLOATING POINT NUMBER\r
588         AOS NM1A\r
589 NM1A:   MOVEI W2,0\r
590         MOVSI R,201400\r
591 NM1A1:  TRZE W2,1\r
592         FMPR R,FT(W1)\r
593         JUMPE W2,NM1B\r
594         LSH W2,-1\r
595         SOJG W1,NM1A1\r
596 NM1B:   MOVSI W1,211000(T)\r
597         FMPR    R,W1            ;COMPUTE VALUE OF NEW DIGIT\r
598 \r
599         FADRB   R,FH            ;ADD VALUE INTO FLOATING NO.\r
600         MOVEM R,SYL\r
601         AOJA T,LE1A\r
602 \r
603 POWER:  TLNN F,FEF\r
604         JRST L4         ;NO EXPONENT\r
605         CAIE W,PLUS\r
606         CAIN W,MINUS\r
607         TROE F,POWF\r
608         TRZA F,POWF\r
609         JRST (W)                ; E+-\r
610 \r
611         MOVE W2,DEN\r
612         CLEARM FRASE\r
613         MOVEI W1,FT-1\r
614         TLZE F,MF\r
615         MOVEI W1,FT01\r
616         SKIPA T,FSV\r
617 POW2:   LSH W2,-1\r
618         TRZE W2,1\r
619         FMPR T,(W1)\r
620         JUMPE W2,L4\r
621         SOJA W1,POW2\r
622 \fPERIOD:        MOVE T,LLOC\r
623         TLNE F,SF               ;SYLLABLE STARTED\r
624         MOVE T,DEN\r
625         MOVEM T,SYL\r
626         TLNE    F,FPF           ;HAS A PERIOD BEEN SEEN BEFORE?\r
627         TLO     F,LTF           ;YES, TWO PERIODS MAKES A SYMBOL\r
628         TLON F,FPF+SF+QF\r
629         MOVEI T,0\r
630         IDIVI T,400\r
631         SKIPE T\r
632         TLC T,243000\r
633         TLC W1,233000\r
634         FAD     T,[0]           ;NORMALIZE T AND W1\r
635         FAD     W1,[0]\r
636         FADR    T,W1\r
637         MOVEM T,FH\r
638         HLLZS NM1A\r
639         MOVEI T,45              ;RADIX 50 PERIOD\r
640         JRST LE2\r
641 \r
642 PILOC:  MOVEI T,SAVPI           ;ADR SETUP FOR $I\r
643 QUANIN: TLOA T,(DDTINT) ;MARK FOR ADR INTERNAL TO DDT\r
644 QUAN:   MOVE T, LWT             ;PICK UP LAST QUANTITY TYPED\r
645 QUAN1:  MOVEM T,SYL\r
646 QUAN2:  TLO F,SF+QF             ;WRD,SYL STARTED\r
647         TLZ F,CF+CCF\r
648         JRST L2\r
649 \r
650 CONTRO:                         ;SOME KIND OF ALTMODE\r
651 IFN EDDT&1,<    MOVEI T,"$"     ;$\r
652         PUSHJ P,TOUT            ;TYPE OUT $\r
653 >\r
654         TLOE F,CF\r
655         TLO F,CCF\r
656         JRST L2\r
657 \fEVAL:  MOVE R,PRGM             ;LOOK UP SYMBOL\r
658 EVAL0:  HRLOI W1,37777+DELI\r
659         HLRE S,@SYMP\r
660         ASH S,-1        ;SETUP END TEST\r
661         JRST EVAL3\r
662 \r
663 EVAL1:  ADD R,[XWD 2,2]\r
664 EVAL2:  SKIPL R\r
665         MOVE R,@SYMP\r
666         AOJG S,CPOPJ            ;TRNASFER IF NO SYMBOL FOUND\r
667 EVAL3:  MOVE T,(R)\r
668         XOR T,SYM\r
669         TLNN T,PNAME\r
670         TLOA W1,LOCAL\r
671         TDNE T,W1\r
672         JRST EVAL1\r
673         TLNN T,340000\r
674         JRST EVAL1\r
675         MOVE T,1(R)\r
676 \r
677 CPOPJ1: AOS (P)         ;FOUND SYMBOL, SKIP\r
678 CPOPJ:  POPJ P,\r
679 \r
680 ;BIT 40 - DELETE OUTPUT\r
681 ; 20 - DELETE INPUT\r
682 ; 10 - LOCAL\r
683 ; 04 -GLOBAL\r
684 ; NO BITS - PROGRAM NAME\r
685 \r
686 TEXI:   PUSHJ P,TEXIN           ;INPUT TEXT\r
687         MOVEM T,SYL\r
688         MOVEI W1,5\r
689         MOVEI T-1,0\r
690         PUSHJ P,TEXIN\r
691         CAIN T,33               ;NEW ALT MODE, ESCAPE\r
692         JRST QUAN2\r
693         TLNE F,CF\r
694         JRST SIXBIN\r
695         SKIPA\r
696 TEXI2:  PUSHJ P,TEXIN\r
697         CAMN T,SYL\r
698         SOJA W1,TEXI3\r
699         ROT T,-7\r
700         LSHC T-1,7\r
701         SOJA W1,TEXI2\r
702 \r
703 TEXI3:  LSHC T-1,-43\r
704         JUMPL W1,QUAN1\r
705         LSH T,7\r
706         SOJA W1,.-2\r
707 \fSIXBI1:        PUSHJ P,TEXIN    ; INPUT TEXT (SIXBIT)\r
708 SIXBIN: CAMN T,SYL\r
709         JRST SIXBI2\r
710         ANDI T,77\r
711         TRC T,40\r
712         ROT T,-6\r
713         LSHC T-1,6\r
714         SOJA W1,SIXBI1\r
715 SIXBI2: MOVE T,T-1\r
716         JUMPL W1,QUAN1\r
717         LSH T,6\r
718         SOJA W1,.-2\r
719 \r
720 KILL:   TLNN F,LTF              ;DELETE SYMBOLS\r
721         JRST ERR\r
722         PUSHJ P,EVAL\r
723         JRST KILL1\r
724         MOVEI T,DELO/200000             ;DELETE OUTPUT\r
725         TLNE F,CCF\r
726         MOVEI T,DELI/200000             ;NO INPUT OR OUTPUT\r
727         DPB T,[POINT 2,(R),1]   ;LEFT 2 BITS IN SYMBOL\r
728 KILRET: JRST RET                ;USED AS A CONSTANT\r
729 \r
730 \r
731 KILL1:  MOVE R,ESTU             ;REMOVE UNDEFINED SYMS\r
732         JUMPGE R,UNDEF\r
733 KILL2:  PUSHJ P,EVAL0\r
734         JRST RET\r
735         PUSHJ P,REMUN\r
736         JRST KILL2\r
737 \r
738 REMUN:  MOVE S,[XWD 2,2]        ;REMOVE ONE UNDEFINED SYMBOL\r
739         ADDB S,ESTU\r
740         MOVE W,-2(S)\r
741         MOVEM W,(R)\r
742         MOVE W,-1(S)\r
743         MOVEM W,1(R)\r
744         POPJ P,\r
745 \fTAG:   TLNN F,LTF   ; NO LETTERS IS ERROR\r
746         JRST ERR   ; GO SAY ERROR\r
747         TLNE F,FAF   ; DEFINE SYMBOLS\r
748         JRST DEFIN              ;A<B:\r
749         TLNE F,CF               ;DEFINE SYMBOL AS OPEN REGISTER\r
750         JRST SETNAM\r
751         MOVE W,LLOCO\r
752         HRRZM W,DEFV\r
753 \r
754 DEFIN:  PUSHJ P,EVAL            ;DEFINED SYMBOL?\r
755         JRST DEF1               ;NO - DEFINE\r
756         JRST DEF2               ;YES, REDEFINE\r
757 DEF1:   MOVN R,[XWD 2,2]\r
758         ADDB R,@SYMP    ;MOVE UNDEFINED TABLE 2 REGISTERS\r
759         HRRZ T,ESTU\r
760         SUBI T,2\r
761         HRL T,ESTU\r
762         HRRM T,ESTU\r
763         SKIPGE ESTU\r
764 \r
765         BLT T,-1(R)\r
766 DEF2:   MOVE T,DEFV\r
767         MOVEM T,1(R)            ;PUT IN NEW VALUE\r
768         MOVSI T,GLOBAL\r
769         IORB T,SYM\r
770         MOVEM T,(R)             ;PUT IN NEW SYM AS GLOBAL\r
771         MOVE R,ESTU\r
772 \r
773 DEF3:   JUMPGE R,RET            ;PATCH IN VALUE FOR UNDEF SYM ENTRY\r
774         MOVE T,SYM\r
775         CAME T,(R)\r
776         JRST DEF4\r
777         MOVE S,DEFV\r
778         SKIPGE, 1(R)\r
779         MOVN S,S\r
780         PUSH P,R\r
781         MOVE R,1(R)\r
782         PUSHJ P,FETCH\r
783         JRST ERR\r
784         ADD S,T\r
785         HRRM S,T\r
786         PUSHJ P,DEP\r
787         POP P,R\r
788         PUSHJ P,REMUN\r
789 DEF4:   ADD R,[XWD 2,2]         ;REMOVE THE NOW DEFINED SYMBOL\r
790         JRST DEF3\r
791 \fSETNAM:        MOVE R,@SYMP            ;SET PROGRAM NAME - DOLLAR COLON\r
792 SET1:   MOVE W,R\r
793 SET2:   JUMPGE R,UNDEF\r
794         MOVE T,(R)\r
795         ADD R,[XWD 2,2]\r
796         TLNE T,PNAME\r
797         JRST SET2\r
798         CAME T,SYM\r
799         JRST SET1\r
800         MOVEM W,PRGM\r
801         JRST RET\r
802 \r
803 ;***ROUTINES BEYOND HERE EVALUATE THEIR ARGUMENT***\r
804 MULT:   TLOA F,PTF+MLF          ;*\r
805 DIVD:   TLO F,DVF+PTF           ;SINGLE QUOTE\r
806         JRST L1\r
807 \r
808 ASSEM:  JRST PLUS               ;#\r
809 MINUS:  TLO F,MF\r
810 PLUS:   TLO F,PTF\r
811         JRST LIS2\r
812 \r
813 LPRN:   CAML P,[XWD LPDL-4,0]   ;LEFT PARENTHESIS\r
814         JRST ERR\r
815         PUSH P,F                ;RECURSE FOR OPEN PAREN\r
816         PUSH P,WRD\r
817         PUSH P,FRASE\r
818         PUSH P,FRASE1\r
819         AOS,PRNC\r
820         JRST LIS\r
821 \r
822 INDIRECT:       HRLZI W,20              ;@\r
823         IORB W,WRD\r
824         TLO F,QF\r
825         JRST LIS2\r
826 \r
827 ACCF:   MOVE R,T                ;COMMA PROCESSOR\r
828 ACCCF:  MOVSI T,.-.             ;LEFT HALF OF A,,B\r
829         TLOE F,COMF             ;COMMA TYPED BEFORE?\r
830         JRST ACCF1              ;YES\r
831         HRRM R,ACCCF            ;NO, SAVE LEFT HALF OF A,,B\r
832         HLLZ T,R\r
833         LDB W1,[POINT 3,WRD,2]  ;CHECK FOR IO INSTRUCTION\r
834         IDIVI W1,7\r
835         LSH R,27(W1)\r
836         ADD T,R\r
837         ADDB T,WRD\r
838         JRST SPACE+1\r
839 \r
840 \fACCF1: MOVEM T,WRD             ;SET LEFT HALF OF A,,B\r
841         JRST SPACE+1\r
842 \r
843 SPACE:  TLNE F,QF\r
844         TLO F,TIF\r
845         TLZ F,MF+PTF\r
846         JRST LIS1\r
847 \r
848 RPRN:   TLNN F,QF               ;)\r
849         MOVEI T,0\r
850         MOVS T,T\r
851         SOSGE,PRNC\r
852         JRST ERR\r
853         POP P,FRASE1\r
854         POP P,FRASE\r
855         POP P,WRD\r
856         POP P,F\r
857         TLNE F,PTF\r
858         TLNE F,SF\r
859 \r
860         JRST RPRN1\r
861         MOVEM T,SYL\r
862         TLO F,QF+SF\r
863         JRST L1RPR\r
864 RPRN1:  ADDB T,WRD\r
865         TLO F,QF\r
866         JRST L1RPR-1\r
867 \f;REGISTER EXAMINATION LOGIC\r
868 \r
869 LINEF:  PUSHJ P,DEPRA   ;NEXT REGISTER\r
870 IFE EDDT&1,<PUSHJ P,CRNRB\r
871         JRST .+2>\r
872 LI0:    PUSHJ P,CRF\r
873         AOS T,LLOC\r
874 LI1:            ;PUSHJ P,LINCHK         ;TRUNCATE ADRS (UNLESS INSIDE DDT)\r
875         HRRZM T,LLOC\r
876         HRRZM T,LLOCO\r
877         PUSHJ P,PAD\r
878         MOVEI T,"/"\r
879         TLNE F,STF\r
880         MOVEI T,"!"\r
881         PUSHJ P,TOUT\r
882 LI2:    TLZ F,ROF\r
883         PUSHJ P,LCT\r
884         MOVE R,LLOCO\r
885         PUSHJ P,FETCH\r
886         JRST ERR\r
887         TLO F,ROF\r
888         TLNE F,STF\r
889         JRST DD2\r
890         JRST CONSYM             ;RETURN IS A POPJ\r
891 \r
892 REPEAT 0,<\r
893 LINCHK: CAML T,[DDTINT SAVPI]   ;TRUNCATE ADDRESSES\r
894         CAMLE T,[DDTINT BNADR+2]\r
895         HRRZS T\r
896         MOVEM T,LLOC\r
897         MOVEM T,LLOC0\r
898         POPJ P,\r
899 >\r
900 \r
901 VARRW:  PUSHJ P,DEPRA           ;^\r
902         PUSHJ P,CRF\r
903         SOS T,LLOC\r
904         JRST LI1\r
905 \r
906 CARR:   PUSHJ P,DEPRA           ;CLOSE REGISTER\r
907         IFN EDDT&1,<JRST DD1>\r
908         IFE EDDT&1,<    PUSHJ P,TIN\r
909         CAIN T,15\r
910         JRST .-2\r
911         JRST DD1.5>\r
912 \fOCON:  TROA F,LF1+CF1          ;OPEN AS CONSTANT\r
913 OSYM:   TRZ F,CF1               ;OPEN SYMBOLICALLY\r
914         TROA F,LF1\r
915 SUPTYO: TLOA F,STF              ;SUPPRESS TYPEOUT\r
916 SLASH:  TLZ F,STF               ;TYPE OUT REGISTER\r
917         TLNN F,QF               ;WAS ANY QUANTITY TYPED?\r
918         JRST SLAS1              ;NO. DO NOT CHANGE MAIN SEQUENCE\r
919         MOVE R,LLOC             ;YES. SAVE OLD SEQUENCE AND\r
920         MOVEM R,SAVLOC\r
921         HRRZM T,LLOC    ;PUSHJ P,LINCHK         ;TRUNCATE ADRS- SET UP NEW SEQUENCE\r
922 SLAS1:  HRRZM T,LLOCO\r
923         JRST LI2\r
924 \r
925 ICON:   TLNN F,ROF      ;REGISTER OPENED OR ERR\r
926         JRST ERR\r
927         PUSHJ P,DEPRS\r
928         JRST SLAS1\r
929 \fTAB:   PUSHJ P,DEPRS   ;OPEN REGISTER OF Q\r
930         MOVEI T,-1(T)\r
931         EXCH T,LLOC             ;SET UP NEW SEQUENCE AND\r
932         MOVEM T,SAVLOC          ;SAVE OLD SEQUENCE\r
933         HRROI T,700000  ;3 RUBOUTS\r
934         PUSHJ P,TEXTT\r
935         JRST LI0\r
936 \r
937 DEPRA:  MOVE R,SAVLOC\r
938         TLNE F,CF               ;RESTORE OLD SEQUENCE IF $CR,$CF, OR\r
939         EXCH R,LLOC             ;IF $^ OR $BS WAS TYPED\r
940         MOVEM R,SAVLOC          ;SETUP "NEW" OLD SEQUENCE\r
941         TLNE F,ROF              ;IF REGISTER IS BEING CHANGED\r
942         TLNN F,QF               ;REMOVE ALL PREVIOUS UNDEFINED\r
943         JRST DEPRS              ;SYMBOL REFERENCES TO IT\r
944         MOVE R,ESTU\r
945         MOVEM W1,ESTU\r
946 DEPRA2: JUMPGE R,DEPRS\r
947         HRRZ W,1(R)\r
948         CAMN W,LLOCO\r
949         PUSHJ P,REMUN\r
950         ADD R,[XWD 2,2]\r
951         JRST DEPRA2\r
952 \r
953 EQUAL:  TROA F,LF1+CF1          ;=\r
954 PSYM:   TRZ F,CF1               ;@\r
955         TRO F,LF1\r
956         PUSHJ P,CONSYM\r
957         JRST RET\r
958 \r
959 R50PNT: LSH T,-36       ;RADIX 50 SYMBOL PRINTER\r
960         TRZ T,3\r
961         PUSHJ P,TOC\r
962         PUSHJ P,TSPC\r
963         MOVEI W1,LWT    ;SETUP FOR SPT\r
964         JRST SPT\r
965 \r
966 SIXBP:  MOVNI W2,6              ;SIXBIT PRINTER\r
967         MOVE W1,LWT\r
968 SIXBP1: MOVEI T,0\r
969         ROTC T,6\r
970         ADDI T,40\r
971         PUSHJ P,TOUT\r
972         AOJL W2,SIXBP1\r
973         POPJ P,\r
974 \f;MODE CONTROL SWITCHES\r
975 \r
976 TEXO:   MOVEI R,TEXTT-HLFW      ;$T ASSUME 7 BIT ASCII\r
977         MOVE T,WRD2\r
978         CAIN T,6                ;CHECK FOR $6T\r
979         MOVEI R,SIXBP-HLFW      ;SET MODE SWITCH FOR SIXBIT\r
980         CAIN T,5                ;CHECK FOR $5T\r
981         MOVEI R,R50PNT-HLFW     ;SET MODE SWITCH FOR RADIX 50\r
982 HWRDS:  ADDI R,HLFW-TFLOT               ;H\r
983 SFLOT:  ADDI R,TFLOT-PIN                ;F\r
984 SYMBOL: ADDI R,PIN-FTOC         ;S\r
985 CON:    ADDI R,FTOC             ;C\r
986         HRRZM R,SCH\r
987         JRST BASE1\r
988 \r
989 RELA:   TRZE F,Q2F              ;CHANGE ADDRESS MODE TO RELATIE\r
990         JRST BASECH\r
991         MOVEI R,PADSO-TOC\r
992 ABSA:   ADDI R,TOC              ;A\r
993         HRRZM R,AR\r
994         JRST BASE1\r
995 \r
996 BASECH: MOVE T,WRD2             ;$NR  CHANGE OUTPUT RADIX TO N, N>1\r
997         CAIGE T,2\r
998         JRST ERR\r
999         HRRZM T,ODF\r
1000 BASE1:  MOVS S,[XWD SCHM,SCH]\r
1001         TLNN F,CCF\r
1002         JRST LIS1\r
1003         BLT S,ODFM      ;WITH $$, MAKE MODES PERMANENT\r
1004         JRST RET\r
1005 \r
1006 SEMIC:  MOVEM T,LWT             ;SEMICOLON TYPES IN CURRENT MODE\r
1007         JRST @SCH\r
1008 \f;GO AND EXECUTE LOGIC\r
1009 \r
1010 GO:     HRLI T,(JRST)             ;G\r
1011 IFE EDDT&1,<\r
1012         TLON F,QF\r
1013         HRR T,JOBSA>    ;GET STARTING ADDRESS\r
1014 \r
1015 XEC:    TLNN F,QF               ;X\r
1016         JRST ,ERR\r
1017 XEC0:   MOVEM T,TEM\r
1018         PUSHJ P,CRF\r
1019         PUSHJ P,TTYLEV\r
1020         PUSHJ P,INSRTB\r
1021         JSP T,RESTORE\r
1022         XCT,TEM\r
1023 XEC1:   JRST DDT                ;USED  AT PROC0\r
1024         JSR,SAVE\r
1025         PUSHJ P,REMOVB\r
1026         PUSHJ P,CRF\r
1027         JRST DD1\r
1028 \f;BREAK POINT LOGIC\r
1029 BP1:    REPEAT NBP,<    0               ;JSR TO HERE FOR BREAKPOINT\r
1030         JSA T, BCOM\r
1031         0               ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE\r
1032 >\r
1033 \r
1034 B1INS=BP1+2\r
1035 BPN=.-3\r
1036 \fBCOM:  0\r
1037         POP T,LEAV              ;MOVE INSTRUCTION TO LEAV\r
1038         MOVEI T,B1SKP-B1INS+1(T)\r
1039         HRRM T,BCOM3            ;CONDITIONAL BREAK SETUP\r
1040         MOVEI T,B1CNT-B1SKP(T)\r
1041         HRRM T,BCOM2            ;PROCEDE COUNTER SETUP\r
1042         MOVE T,BP1-B1CNT(T)\r
1043 IFN EDDT&1,<    TLZ T,010000            ;TURN OFF USER MODE BIT>\r
1044         HLLM T,LEAV1            ;SAVE FLAGS FOR RESTORING\r
1045         EXCH T,BCOM\r
1046 \r
1047 BCOM3:  SKIPE B1SKP             ;ADDR MOD TO LOOK AT COND. INST.\r
1048         XCT @.-1\r
1049 BCOM2:  SOSG B1CNT              ;ADDR MOD TO LOOK AT PROCEED COUNTER\r
1050         JRST BREAK\r
1051 \r
1052         MOVEM T,AC0+T\r
1053         LDB T,[POINT 9,LEAV,8]  ;GET INSTRUCTION\r
1054         CAIL T,264      ;JSR\r
1055         CAILE T,266     ;JSA,JSP\r
1056         TRNN T,700      ;UUO\r
1057         JRST PROC1              ;MUST BE INTERPRETED\r
1058         CAIE T,260      ;PUSHJ\r
1059         CAIN T,256      ;XCT\r
1060         JRST PROC1              ;MUST BE INTERPRETED\r
1061         MOVE T,AC0+T\r
1062         JRST 2,@LEAV1           ;RESTORE FLAGS, GO TO LEAV\r
1063 \r
1064 LEAV1:  XWD 0,LEAV\r
1065 \fBREAK: JSR SAVE                ;SAVE THE WORLD\r
1066         PUSHJ P,REMOVB          ;REMOVE BREAKPOINTS\r
1067         SOS T,BCOM3\r
1068         HRRZS T                 ;GET ADDR OF BREAKPOINT JUST HIT\r
1069         SUBI T,B1ADR-3          ;CHANGE TO ADDRESS OF $0B\r
1070         IDIVI T,3               ;QUOTIENT IS BREAK POINT NUMBER\r
1071         HRRM T,BREAK2           ;SAVE BREAK POINT #\r
1072         MOVE W1,[ASCII /$0B>/]  ;PRELIMINARY TYPEOUT MESSAGE\r
1073         SKIPG @BCOM2            ;TEST PROCEED COUNTER\r
1074         TRO W1,">"_1            ;CHANGE T TO /$0B>>/\r
1075         DPB T,[POINT 4,W1,13]   ;INSERT BREAK POINT # IN MESSAGE\r
1076         PUSHJ P,TEXT2\r
1077         MOVE T,BCOM\r
1078         HLLM T, SAVPI           ;SAVE PROCESSOR FLAGS\r
1079         MOVEI T,-1(T)\r
1080         PUSHJ P,PAD             ;TYPE PC AT BREAK\r
1081         HRRZ T,@BCOM3\r
1082         HRRM T,PROC0            ;SETUP ADDRESS OF BREAK\r
1083         HLRZ T,@BCOM3\r
1084 \r
1085         JUMPE T,BREAK1          ;TEST FOR REGISTER TO EXAMINE\r
1086         PUSHJ P,LCT             ;PRINT TAB\r
1087         HLRZ T,@BCOM3\r
1088         PUSHJ P,LI1             ;EXAMINE REGISTER C($NB)LEFT\r
1089 BREAK1: MOVSI S,400000\r
1090 BREAK2: ROT S,.-.               ;ROT BY # OF BREAK POINT\r
1091         PUSHJ P,LISTEN          ;DONT PROCEED IF TTY KEY HIT\r
1092         TDNN S,AUTOPI           ;DONT PROCEED IF NOT AUTOMATIC\r
1093         JRST RET                ;DONT PROCEED\r
1094         JRST PROCD1\r
1095 \r
1096 PROCEDE: TLNN F,QF              ;N$P    ;PROCEED AT A BREAKPOINT\r
1097         MOVEI T,1\r
1098         MOVEM T,@BCOM2\r
1099         HRRZ R,BCOM3\r
1100         PUSHJ P,AUTOP\r
1101 PROCD1: PUSHJ P,CRF\r
1102         PUSHJ P,TTYLEV\r
1103 PROC0:  HRRZI R,XEC1            ;MODIFIED TO ADDR OF BREAKPOINT\r
1104         PUSHJ P,FETCH\r
1105         JRST BPLUP1             ;ONLY GET HERE IF MEMORY SHRANK\r
1106         MOVEM T,LEAV\r
1107         PUSHJ P,INSRTB\r
1108         JRST PROC2\r
1109 \r
1110 PROC1:  MOVE T,AC0+T\r
1111         JSR SAVE\r
1112         JFCL\r
1113 PROC2:  MOVEI W,100\r
1114         MOVEM W,TEM1            ;SETUP MAX LOOP COUNT\r
1115         JRST IXCT5\r
1116 \fIXCT4: IFE EDDT&1,<    SUBI T,041\r
1117         JUMPE T,BPLUP\r
1118         AOJGE T,IXCT6>                          ;DONT PROCEDE FOR INIT\r
1119                                 ;DONT INTERPRET FOR SYSTEM UUOS\r
1120         MOVEM R,40              ;INTERPRET FOR NON-SYSTEM UUOS\r
1121         MOVEI R,41\r
1122 IXCT:   SOSL TEM1\r
1123         PUSHJ P,FETCH\r
1124         JRST BPLUP              ;BREAKPOINT LOOPING OR FETCH FAILED\r
1125         MOVEM T,LEAV\r
1126 IXCT5:  IFN EDDT&1,<\r
1127         LDB T,[POINT 9,LEAV,8]  ;GET INSTRUCTION\r
1128         CAIN T,254              ;DON'T DO ANYTHING TO JRST IN EXEC MODE\r
1129         JRST IXCT6>\r
1130         HRLZI 17,AC0\r
1131         BLT 17,17\r
1132         MOVEI T,@LEAV\r
1133         DPB T,[POINT 23,LEAV,35]        ;STORE EFFECTIVE ADDRESS\r
1134         LDB W1,[POINT 4,LEAV,12]        ;PICK UP AC FIELD\r
1135         LDB T,[POINT 9,LEAV,8]          ;PICK UP INSTRUCTION FIELD\r
1136         MOVEI P,PS\r
1137         CAIN T,260\r
1138         JRST  IPUSHJ            ;INTERPRET PUSHJ\r
1139 \r
1140         CAIN T,264\r
1141         JRST IJSR               ;INTERPRET JSR\r
1142         CAIN T,265\r
1143         JRST IJSP               ;INTERPRET JSP\r
1144         CAIN T,266\r
1145         JRST IJSA               ;INTERPRET JSA\r
1146         MOVE R,LEAV\r
1147         TRNN T,700\r
1148         JRST IXCT4              ;INTERPRET UUO\r
1149         CAIN T,256\r
1150         JRST IXCT               ;INTERPRET XCT\r
1151 \r
1152 IXCT6:  JSP T,RESTORE\r
1153 LEAV:   0                       ;INSTRUCTION MODIFIED\r
1154         JRST @BCOM\r
1155         AOS BCOM\r
1156         JRST @BCOM\r
1157 \r
1158 BPLUP:  PUSHJ P,REMOVB          ;BREAKPOINT PROCEED ERROR\r
1159 BPLUP1: JSR SAVE\r
1160         JFCL\r
1161         JRST ERR\r
1162 \fIPUSHJ:        DPB W1,[POINT 4,CPUSHP,12]      ;STORE AC FIELD INTO A PUSH\r
1163         CLEARM,TEM3\r
1164         MOVE T,LEAV\r
1165         JRST RESTR1\r
1166 \r
1167 IJSA:   MOVE T,BCOM             ;INTERPRET JSA\r
1168         HRL T,LEAV\r
1169         EXCH T,AC0(W1)\r
1170         JRST IJSR2\r
1171 \r
1172 IJSR:   MOVE T,BCOM             ;INTERPRET JSR\r
1173         HLL T,SAVPI\r
1174 IJSR2:  MOVE R,LEAV\r
1175         PUSHJ P,DEP\r
1176          JRST BPLUP             ;ERROR, CAN'T STORE\r
1177         AOSA T,LEAV\r
1178 IJSR3:  MOVE T,LEAV\r
1179         JRST RESTORE\r
1180 \r
1181 IJSP:   MOVE W,BCOM             ;INTERPRET JSP\r
1182         HLL T,SAVPI\r
1183         MOVEM W,AC0(W1)\r
1184         JRST IJSR3\r
1185 \r
1186 ;INSERT BREAKPOINTS\r
1187 \r
1188 INSRTB: MOVE S,[JSR BP1]\r
1189 INSRT1: SKIPE R,B1ADR-BP1(S)\r
1190         PUSHJ P,FETCH\r
1191         JRST INSRT3\r
1192         MOVEM T,B1INS-BP1(S)\r
1193         MOVE T,S\r
1194         PUSHJ P,DEP\r
1195          JFCL                   ;HERE ONLY IF CAN'T WRITE IN HIGH SEG\r
1196 INSRT3: ADDI S,3\r
1197         CAMG S,[JSR BPN]\r
1198         JRST INSRT1\r
1199         POPJ P,\r
1200 \r
1201 ;REMOVE BREAKPOINTS\r
1202 \r
1203 REMOVB: MOVEI S,BNADR\r
1204 REMOV1: MOVE T,B1INS-B1ADR(S)\r
1205         SKIPE R,(S)\r
1206         PUSHJ P,DEP\r
1207          JFCL                   ;HERE ONLY IF NO WRITE IN HIGH SEG\r
1208         SUBI S,3\r
1209         CAIL S,B1ADR\r
1210         JRST REMOV1\r
1211         IFN EDDT&1,<JRST TTYRET>\r
1212         IFE EDDT&1,<POPJ P,>\r
1213 \r
1214 ;IN EXEC MODE, SAVE UP TTY STATUS       ;IN USER MODE, DONE BY SAVE\r
1215 \f;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B\r
1216 \r
1217 \r
1218 BPS:    TLZE F,QF               ;HAS <A> BEEN TYPED?\r
1219         JRST BPS1               ;YES\r
1220         TRZE F,Q2F              ;NO, HAS <N> BEEN TYPED?\r
1221         JRST BPS2               ;YES\r
1222         MOVE T,[XWD B1ADR,B1ADR+1]      ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS\r
1223         CLEARM B1ADR\r
1224         BLT T,AUTOPI            ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER\r
1225         JRST RET\r
1226 \r
1227 BPS1:   TRZN F,Q2F              ;HAS <N> BEEN TYPED?\r
1228         JRST BPS3               ;NO\r
1229         MOVE R,T                ;YES, PROCESS THE COMMAND A$NB\r
1230         TRO F,2\r
1231 BPS2:   MOVE T,WRD2\r
1232         CAIL T,1\r
1233         CAILE T,NBP\r
1234         JRST ERR\r
1235         IMULI T,3\r
1236         ADDI T,B1ADR-3\r
1237         TRZN F,2\r
1238         JRST MASK2\r
1239         EXCH R,T\r
1240         JRST BPS5\r
1241 \r
1242 BPS3:   MOVEI R,B1ADR           ;PROCESS THE COMMAND A$B\r
1243 BPS4:   HRRZ W,(R)\r
1244         CAIE W,(T)\r
1245         SKIPN (R)\r
1246         JRST BPS5\r
1247         ADDI R,3\r
1248         CAIG R,BNADR\r
1249         JRST BPS4\r
1250         JRST ERR\r
1251 BPS5:   MOVEM T,(R)\r
1252         CLEARM,1(R)\r
1253         CLEARM,2(R)\r
1254 \r
1255 AUTOP:  SUBI R,B1ADR            ;AUTO PROCEDE SETUP SUBROUTINE\r
1256         IDIVI R,3\r
1257         MOVEI S,1\r
1258         LSH S,(R)\r
1259         ANDCAM S,AUTOPI\r
1260         TLNE F,CCF\r
1261         IORM S,AUTOPI\r
1262         POPJ P,\r
1263 \f;FETCH AND DEPOSIT INTO MEMORY\r
1264 \r
1265 \r
1266 DEPRS:  MOVEM T,LWT             ;DEPOSIT REGISTER AND SAVE AS LWT\r
1267         MOVE R,LLOCO            ;QUAN TYPED IN REGIS EXAM\r
1268         TLZE F,ROF\r
1269         TLNN F,QF\r
1270         POPJ P,0\r
1271                 ;CAIL R,DDT\r
1272                 ;CAILE R,DDREND-1\r
1273         PUSHJ P,DEP             ;STORE AWAY\r
1274         JRST ERR                ;CAN'T STORE (IN DDT OR OUT OF BOUNDS)\r
1275         POPJ P,                 ;RETURN\r
1276 \r
1277 ;DEPOSIT INTO MEMORY SUBROUTINE\r
1278 \r
1279 IFE EDDT&10,<\r
1280 DEP:    IFE EDDT&1,<\r
1281         JSP TT1,CHKADR          ;LEGAL ADDRESS?\r
1282 \r
1283         JRST DEP4               ;YES BUT IN HI SEGMENT>\r
1284         TRNN R,777760\r
1285         JRST DEPAC              ;DEPOSIT IN AC\r
1286 \r
1287 IFE EDDT&10,<   MOVE T,(R) >\r
1288         JRST CPOPJ1             ;SKIP RETURN\r
1289 \r
1290 DEPAC:  MOVEM T,AC0(R)          ;DEPOSIT IN AC\r
1291         JRST CPOPJ1             ;SKIP RETURN\r
1292 \r
1293 IFE EDDT&1,<\r
1294 DEP4:   MOVEI W,0\r
1295         CALLI W,SETUWP          ;IS HI SEGMENT PROTECTED? TURN OFF\r
1296         POPJ P,                 ;PROTECTED, NO SKIP RETURN\r
1297         MOVEM T,(R)             ;STORE WORD IN HI SEGMENT\r
1298         TRNE W,1                ;WAS WRITE PROTECT ON?\r
1299         CALLI W,SETUWP          ;YES, TURN IT BACK ON\r
1300         JFCL\r
1301         JRST CPOPJ1             ;SKIP RETURN\r
1302 >\r
1303 >       ;END NOT-FILDDT COND.\r
1304 \r
1305 IFN EDDT&10,<DEP=CPOPJ>         ;ALWAYS OK NO-OP IF FILE DDT\r
1306 \f;FETCH FROM MEMORY SUBROUTINE\r
1307 \r
1308 FETCH:  IFE EDDT&10,<IFE EDDT&1,\r
1309         <JSP TT1,CHKADR         ;LEGAL ADDRESS?\r
1310         JFCL>                   ;HIGH OR LOW OK FOR FETCH\r
1311         TRNN R,777760           ;ACCUMULATOR?\r
1312         SKIPA T,AC0(R)          ;YES\r
1313         MOVE T,(R)              ;NO\r
1314         JRST CPOPJ1             ;SKIP RETURN FOR LEGAL ADDRESS>\r
1315 \r
1316 IFN EDDT&10,<   SKIPN CRASHS            ;CRASH.SAV EXISTS?\r
1317         JRST MONPEK             ;NO - GO PEEK AT RUNNING MONITOR\r
1318         MOVEM R,TEM4            ;SAVE THE AOBJN POINTER\r
1319         HRRZ R,R                ;STRIP OFF POSSIBLE COUNT\r
1320         ADD R,OFFSET\r
1321         IDIVI R,4000            ;R HAS LOCATION\r
1322         CAIL R,30               ;R=NO. OF INPTS  R+1=LOCATION\r
1323         POPJ  P,                ;LARGER THAN 48K\r
1324         TRNN S,777000           ;S=R+1\r
1325         JUMPE R,RSDNT           ;LOC IS IN RESIDENT BLOCKJ\r
1326         CAMN R,RSAVE            ;IS LOC INCORE ?\r
1327         JRST INCORE             ;S=LOC\r
1328         MOVEM R,RSAVE           ;INPT NO.\r
1329         IMULI R,20              ;16/INPT\r
1330         USETI 1,1(R)            ;BLOK 0 DOES NOT EXIST\r
1331         INPUT 1,CURLST          ;GET 16 BLKS\r
1332         STATZ 1,740000  \r
1333         HALT .-2                ;YEP\r
1334 INCORE: SKIPA T,CURENT(S)\r
1335 RSDNT:  MOVE T,RSIDNT(S)\r
1336         MOVE R,TEM4             ;RESTORE AOBJN POINTER\r
1337         JRST CPOPJ1\r
1338 TEM4:   0                       ;HOLD AOBJN POINTER\r
1339 MONPEK: HRRZ T,4                ;REMOVE COUNT\r
1340         CALLI T,33              ;DO PEEK UUO\r
1341         JRST CPOPJ1             ;RETURN VALUE IN AC T\r
1342 >\r
1343 IFE EDDT&1,<    ;DO ADDRESS CHECKS ONLY IN USER MODE\r
1344 CHKADR: HRRZ TT,JOBREL          ;GET HIGHEST ADDRESS IN LOW SEGMENT\r
1345         CAIL TT,(R)             ;CHECK FOR WITHIN LOW SEGMENT\r
1346         JRST 1(TT1)             ;ADDRESS IS OK IN LOW SEGMENT, SKIP RETURN\r
1347         HRRZ T,JOBHRL           ;GET HIGHEST ADDRESS IN HIGH SEGEMENT\r
1348         TRNE R,400000           ;IS THE ADDRESS IN HIGH SEGMENT?\r
1349         CAIGE TT,(R)            ;IS THE ADR TO BIG FOR HIGH SEGMENT?\r
1350         POPJ P,                 ;NO, YES- ILL. ADR.\r
1351         JRST 0(TT1)\r
1352 >       ;END OF IFE EDDT&1\r
1353 \r
1354 IFN EDDT&1,<CHKADR==CPOPJ>      ;NO ADDRESS CHECKS IN EXEC MODE\r
1355 \fFIRARG:        MOVEM T,DEFV\r
1356         TLO F,FAF\r
1357         JRST ULIM1\r
1358 ULIM:   TLO F,SAF\r
1359         HRRZM T,ULIMIT\r
1360 ULIM1:  TLNN F,QF\r
1361         JRST ERR\r
1362         JRST LIS0\r
1363 \r
1364 \r
1365 LOOK:   SKIPL R,PRGM    ;LOOK UP SYMBOL\r
1366         MOVE R,@SYMP\r
1367         HLRE S,@SYMP\r
1368         ASH S,-1        ;SETUP COUNT FOR LENGTH OF SYM TABLE\r
1369         TLZ F,400000\r
1370         HRLZI W2,DELO+DELI\r
1371         MOVEM T,TEM\r
1372 \r
1373 LOOK1:  TDNE W2,(R)\r
1374 \r
1375         JRST LOOK3\r
1376         MOVE T,(R)\r
1377         TLNN T,PNAME    ;NAME\r
1378         TLOA W2,LOCAL\r
1379         SKIPA T,TEM\r
1380         JRST LOOK3\r
1381         MOVE W,1(R)\r
1382         XOR W,T\r
1383         JUMPL W,LOOK3\r
1384         SUB T,1(R)\r
1385         JUMPL T,LOOK3\r
1386         JUMPGE F,LOOK2\r
1387         MOVE W,1(R)\r
1388         SUB W,1(W1)\r
1389         JUMPLE W,LOOK3\r
1390 LOOK2:  HRR W1,R                ;POINTER BEST VALUE SO FAR\r
1391         TLO F,400000\r
1392         JUMPE T,SPT0\r
1393 LOOK3:  ADD R,[XWD 2,2]\r
1394         SKIPL R\r
1395         MOVE R, @SYMP\r
1396         AOJLE S,LOOK1   ;TERMINATING CONDITION\r
1397         MOVE T,TEM\r
1398         TLNE F,400000\r
1399         SUB T,1(W1)\r
1400         JRST CPOPJ1\r
1401 \fCONSYM:        MOVEM T,LWT\r
1402         TRNN F,LF1\r
1403         JRST @SCH               ;PIN OR FTOC\r
1404         TRNE F,CF1\r
1405         JRST  FTOC\r
1406 \r
1407 PIN:                            ;PRINT INSTRUCTION\r
1408         TLC T,700000\r
1409         TLCN T,700000\r
1410         JRST INOUT              ;IN-OUT INSTRUCTION OR NEG NUM\r
1411         AND T,[XWD 777000,0]    ;EXTRACT OPCODE BITS\r
1412         JUMPE T,HLFW            ;TYPE AS HALF WORDS\r
1413         PUSHJ P,OPTYPE\r
1414         MOVSI   T,777000\r
1415         AND     T,LWT\r
1416         TRNN F,ITF              ;HAS INSTRUCTION BEEN TYPED?\r
1417         PUSHJ P,LOOK            ;NO, LOOK IN SYMBOL TABLE\r
1418         TROA F,NAF              ;INSTRUCTION TYPED, ALLOW NEG ADDRESSES\r
1419         JRST HLFW               ;NOT FOUND, OUTPUT AS HALFWORDS\r
1420         PUSHJ P,TSPC\r
1421         LDB T,[XWD 270400,LWT]  ;GET AC FIELD\r
1422         JUMPE T,PI4\r
1423         PUSHJ P,PAD\r
1424 PI3A:   MOVEI W1,","\r
1425         PUSHJ P,TEXT\r
1426 PI4:    MOVE W1,LWT\r
1427         MOVEI T,"@"\r
1428         TLNE W1,20              ;CHECK FOR INDIRECT BIT\r
1429         PUSHJ P,TOUT\r
1430         HRRZ T,LWT\r
1431         LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS\r
1432         CAIL W1,240\r
1433         CAILE W1,247\r
1434         JRST PI8                ;ALL (EXECPT ASH,ROT,LSH) HAVE SYMBOLIC ADRS\r
1435         TLNN W1,20\r
1436         CAIN W,<JFFO>_-33\r
1437         JRST PI8                ;JFFO AND @ GET SYMBOLIC ADDRESSES\r
1438         PUSHJ P,PADS3A  ;ONLY ABSOLUTE ADDRESSING FOR LSH, ASH, AND ROT\r
1439 PI7:    TRZ F,NAF       \r
1440         LDB R,[XWD 220400,LWT]  ;INDEX REGISTER CHECK\r
1441         JUMPE R,PADS1           ;EXIT\r
1442         MOVEI T,"("\r
1443         PUSHJ P,TOUT\r
1444         MOVE T,R\r
1445         PUSHJ P,PAD\r
1446         MOVEI T,")"\r
1447         JRST TOUT               ;EXIT\r
1448 \r
1449 PI8:    PUSHJ P,PAD\r
1450         JRST PI7\r
1451 \fHLFW:  REPEAT 0,<      MOVE T,LWT\r
1452         CAML T,[DDTINT SAVPI]\r
1453         CAMLE T,[DDTINT BNADR+2]\r
1454         SKIPA\r
1455         JRST PAD>\r
1456         HLRZ T,LWT              ;PRINT AS HALF WORDS\r
1457         JUMPE T,HLFW1           ;TYPE ONLY RIGHT ADR IF LEFT ADR=0\r
1458         TRO F,NAF               ;ALLOW NEGATIVE ADDRESSES\r
1459         PUSHJ P,PAD\r
1460         MOVSI W1,(ASCII /,,/)\r
1461         PUSHJ P,TEXT2           ;TYPE ,,\r
1462 HLFW1:  HRRZ T,LWT\r
1463 \r
1464 ;PRINT ADDRESSES (ARG USUALLY 18 BITS BUT CAN BE 36 BITS:\r
1465 \r
1466 PAD:    ANDI T,-1\r
1467         JRST @AR                ;PADSO OR PAD1\r
1468 PADSO:  JUMPE T,FP7B            ;PRINT A ZERO\r
1469         PUSHJ P,LOOK\r
1470 \r
1471 PADS1:  POPJ P,0\r
1472         MOVE W2,1(W1)\r
1473         CAIGE T,100\r
1474         CAIGE W2,60\r
1475         JRST PADS3\r
1476         MOVEM T,TEM\r
1477         JUMPGE F,PAD1\r
1478         PUSHJ P,SPT0\r
1479         MOVEI T,"+"\r
1480 PADS1A: PUSHJ P,TOUT\r
1481         HRRZ T,TEM\r
1482 PAD1:   JRST TOC                ;EXIT\r
1483 \r
1484 PADS3:  MOVE T,TEM\r
1485 PADS3A: TRNE F,NAF\r
1486         CAIGE T,776000\r
1487         JRST TOC\r
1488 PADS3B: MOVNM T,TEM\r
1489         MOVEI T,"-"\r
1490         JRST PADS1A\r
1491 \r
1492 INOUT:  TDC T,[XWD -1,400000]   ;IO INSTRUCTION OR NEG NUM\r
1493         TDCN T,[XWD -1,400000]\r
1494         JRST PADS3B             ;TYPE AS NEG NUM\r
1495         LDB R,[POINT 7,T,9]     ;PICK OUT IO DEVICE BITS\r
1496         CAIL R,774_-2           ;IF DEVICE <774, THEN TYPE\r
1497         JRST HLFW               ;TYPE AS HALF WORDS\r
1498         LDB R,[POINT 3,T,12]\r
1499         DPB R,[POINT 6,T,8]     ;MOVE IO BITS OVER FOR OP DECODER\r
1500         PUSHJ P,OPTYPE\r
1501         PUSHJ P,TSPC\r
1502         MOVSI T,077400\r
1503         AND T,LWT\r
1504         JUMPE T,PI4\r
1505         PUSHJ P,LOOK            ;LOOK FOR DEVICE NUMBER\r
1506         JRST PI3A\r
1507         MOVE T,TEM\r
1508         LSH T,-30\r
1509         PUSHJ P,TOC\r
1510         JRST PI3A\r
1511 MASK:   TLNE F,QF\r
1512         JRST MASK1\r
1513         MOVEI T,MSK\r
1514 MASK2:  MOVEI W,1\r
1515         MOVEM W,FRASE1\r
1516         JRST QUAN1\r
1517 MASK1:  MOVEM T,MSK\r
1518         JRST RET\r
1519 \fEFFEC: TLO F,LTF\r
1520         HRRZ T,T\r
1521 WORD:   MOVEI R,322000-326000   ;JUMPE-JUMPN\r
1522 NWORD:  ADDI R,326000+40*T      ;JUMPN T,\r
1523         HRLM R,SEAR2\r
1524         TLZN F,QF\r
1525         JRST ERR\r
1526         SETCAM T,WRD\r
1527         MOVSI T,FRASE-DEN-1             ;PREVENT TYPE OUT OF DDT PARTS\r
1528         SETCMM FRASE(T)\r
1529         AOBJN T,.-1\r
1530         MOVE T,ULIMIT\r
1531         TLNE F,SAF\r
1532         TLO F,QF                ;SIMULATE A $Q TYPED\r
1533         PUSHJ P,SETUP\r
1534         PUSHJ P,CRF\r
1535 SEAR1:  PUSHJ P,FETCH\r
1536         JRST SEAR2A\r
1537         TLNE F,LTF      ;CHECK FOR EFFECTIVE ADDRESS SEARCH\r
1538 \r
1539         JRST EFFEC0\r
1540         EQV T,WRD\r
1541         AND T,MSK\r
1542 SEAR2:  JUMPE T,SEAR3           ;OR JUMPN T\r
1543 SEAR2A: AOS R,DEFV      ;GET NEXT LOCATION\r
1544         PUSHJ P,LISTEN  ;ANYTHING TYPED?\r
1545         CAMLE R,ULIMIT  ;OR END OF SEARCH?\r
1546         JRST SEARFN     ;YES\r
1547         JRST SEAR1      ;NO, LOOK SOME MORE\r
1548 \r
1549 SEAR2B: MOVEI R,400000-1        ;MOVE UP TO HI SEGMENT\r
1550         IORB R,DEFV             ;PUT IN MEMORY TOO\r
1551         TRNN R,400000           ;ALREAY IN HI SEGMENT?\r
1552         JRST SEAR2A             ;NO\r
1553 SEARFN: SETCMM LWT              ;COMPLEMENT BITS BACK AND STOP SEARCH\r
1554         JRST DD1\r
1555 \fSEAR3: MOVE R,DEFV\r
1556         PUSHJ P,FETCH\r
1557         JRST ERR\r
1558         TLZ F,STF       ;GET RID OF SUPPRESS TYPEOUT MODE\r
1559         MOVE T,DEFV\r
1560         PUSHJ P,LI1     ;CALL REGISTER EXAMINATION LOGIC TO TYPE OUT\r
1561         PUSHJ P,CRF\r
1562         SETCMM LWT\r
1563         SETCMM TEM\r
1564 SEAR4:  JRST  SEAR2A\r
1565 \r
1566 EFFEC0: MOVEI W,100\r
1567         MOVEM W,TEM\r
1568 EFFEC1: MOVE W,T\r
1569         LDB R,[POINT 4,T,17]    ;GET IR FIELD\r
1570         JUMPE R,EFFEC2\r
1571         PUSHJ P,FETCH\r
1572         JRST ERR\r
1573         ADD T,W\r
1574 EFFEC2: HRR R,T\r
1575         TLNN W,20               ;INDIRECT BIT CHECK\r
1576         JRST EFFEC3\r
1577         SOSE,TEM\r
1578         PUSHJ P,FETCH\r
1579         JRST SEAR4\r
1580         JRST EFFEC1\r
1581 EFFEC3: EQV T,WRD\r
1582         ANDI T,777777\r
1583         JRST SEAR2\r
1584 \fSETUP: TLNN F,QF               ;QUANTITY TYPED?\r
1585 \r
1586 IFN EDDT&10,<MOVEI T,137777     ;DON'T SEARCH BEYOND 48K>\r
1587 IFE EDDT&10,<\r
1588 IFE EDDT&1,<MOVEI T,777777      ;NO, GET LAST ADR>\r
1589 IFN EDDT&1,<HRRZ T,@SYMP        ;NO, GET 1ST ADR SYM TABLE>\r
1590 >\r
1591 \r
1592         HRRZM T,ULIMIT          ;SAVE HIGH LIMIT INCREMENTED BY ONE\r
1593         HRRZS R,DEFV            ;GET 1ST ADDRESS\r
1594         TLNN F,FAF              ;WAS A 1ST ADR SPECIFIED?\r
1595         SETZB R,DEFV            ;NO, MAKE IT ZERO\r
1596         CAML R,ULIMIT           ;LIMITS IN A REASONABLE ORDER?\r
1597         JRST ERR\r
1598         POPJ P,0\r
1599 \r
1600 ZERO:   TLNN F,CCF\r
1601         JRST ERR\r
1602         PUSHJ P,SETUP\r
1603 \r
1604         HRRZ S,@SYMP    ;GET 1ST ADR OF SYMBOL TABLE\r
1605         HLRE W1,@SYMP   ;GET LENGTH OF SYM TABLE\r
1606         SUB W1,S        ;GET NEG OF LAST ADR\r
1607         MOVNS W1        ;GET POS LAST ADR\r
1608         MOVEI T,0       ;0 TO STORE IN MEMORY\r
1609 ZERO1:  TRNE R,777760\r
1610         JRST ZEROR      ;OK TO ZERO AC'S\r
1611         CAIGE R,ZLOW\r
1612         MOVEI R,ZLOW    ;DON'T ZERO 20 THRU ZLOW\r
1613         CAIL R,DDT\r
1614         CAILE R,DDTEND\r
1615         JRST .+2\r
1616         MOVEI R,DDTEND  ;DON'T ZERO DDT\r
1617         CAML R,S\r
1618         CAMLE R,W1\r
1619         JRST .+2\r
1620         HRRZ R,W1       ;DON'T ZERO SYMBOL TABLE\r
1621 ZEROR:  CAMLE R,ULIMIT  ;ABOVE LIMITS?\r
1622         JRST DD1        ;YES, STOP\r
1623         PUSHJ P,DEP     ;DEPOSIT T\r
1624          TROA R,377777  ;\r
1625         AOJA R,ZERO1\r
1626         TRNN R,400000   ;HI SEGMENT?\r
1627         AOJA R,ZERO1    ;NO, KEEP GOING\r
1628         JRST DD1        ;FINISH\r
1629 \fFTOC:          ;NUMERIC OUTPUT SUBROUTINE\r
1630 TOC:    HRRZ W1,ODF\r
1631         CAIN W1,10              ;IS OUPUT RADIX NOT OCTAL, OR\r
1632         TLNN T,-1               ;ARE THERE  NO LEFT HALF BITS?\r
1633         JRST TOCA               ;YES, DO NOTHING SPECIAL\r
1634         HRRM T,TOCS             ;NO, TYPE AS HALF WORD CONSTANT\r
1635         HLRZS T                 ;GET LEFT HALF\r
1636         PUSHJ P,TOCA            ;TYPE LEFT HALF\r
1637         MOVSI W1,(ASCII /,,/)\r
1638         PUSHJ P,TEXT2           ;TYPE ,,\r
1639 TOCS:   MOVEI T,.-.             ;GET RIGHT HALF BACK\r
1640 TOCA:   LSHC T,-43\r
1641         LSH W1,-1               ;W1=T+1\r
1642 TOC1:   DIVI T,@ODF\r
1643         HRLM W1,0(P)\r
1644         JUMPE T,TOC2\r
1645         PUSHJ P,TOCA\r
1646 TOC2:   HLRZ T,0(P)\r
1647         ADDI T,"0"\r
1648         JRST TOUT\r
1649 \r
1650 TOC4:   MOVM W1,T               ;TYPE AS SIGNED DECIMAL INTEGER\r
1651         JUMPGE T,TOC5\r
1652         MOVEI T,"-"\r
1653         PUSHJ P,TOUT\r
1654 TOC5:   PUSHJ P,FP7             ;DECIMAL PRINT ROUTINE\r
1655 TOC6:   MOVEI T,"."\r
1656         JRST TOUT\r
1657 \r
1658 ;SYMBOL OUTPUT SUBROUTINE\r
1659 \r
1660 SPT0:   HRRZM W1,SPSAV          ;SAVE POINTER TO TYPED SYM\r
1661 SPT:            ;RADIX 50 SYMBOL PRINT\r
1662         LDB T,[POINT 32,0(W1),35]       ;GET SYMBOL\r
1663 SPT1:   IDIVI T,50\r
1664         HRLM W1,0(P)\r
1665         JUMPE T,SPT2\r
1666         PUSHJ P,SPT1\r
1667 SPT2:   HLRZ T,0(P)\r
1668         JUMPE T,CPOPJ           ;FLUSH NULL CHARACTERS\r
1669         ADDI T,260-1\r
1670         CAILE T,271\r
1671         ADDI T,301-272\r
1672         CAILE T,332\r
1673         SUBI T,334-244\r
1674         CAIN T,243\r
1675         MOVEI T,256\r
1676         JRST TOUT\r
1677 \fSYMD:  MOVEI T,DELO/200000     ;$D ;DELETE LAST SYM & PRINT NEW\r
1678         HRRZ R,SPSAV            ;PICK UP POINTER TO LAST SYM\r
1679         JUMPE R,ERR\r
1680         DPB T,[POINT 2,(R),1]   ;STORE SEMI-DELETE BITS IN SYMBOL\r
1681         MOVE T,LWT\r
1682         JRST CONSYM             ;PRINT OUT NEXT BEST SYMBOL\r
1683 \f;FLOATING POINT OUTPUT\r
1684 \r
1685 TFLOT:  MOVE A,T\r
1686         JUMPG A, TFLOT1\r
1687         JUMPE A,FP1A\r
1688         MOVNS A\r
1689         MOVEI T,"-"\r
1690         PUSHJ P,TOUT\r
1691         TLZE A,400000\r
1692         JRST FP1A\r
1693 TFLOT1: TLNN A, 400     \r
1694         JRST TOC5               ;IF UNNORMALIZED, TYPE AS DECIMAL INTEGER\r
1695 \r
1696 FP1:    MOVEI B,0\r
1697         CAMGE A,FT01\r
1698         JRST FP4\r
1699         CAML A,FT8\r
1700         AOJA B,FP4\r
1701 FP1A:   MOVEI C,0\r
1702 \r
1703 FP3:    MULI A,400\r
1704         ASHC B,-243(A)\r
1705         MOVE A,B\r
1706         SETZM TEM1              ;INIT 8 DIGIT COUNTER\r
1707         SKIPE A,B               ;DON'T TYPE A LEADING 0\r
1708         PUSHJ P,FP7             ;PRINT INTEGER PART OF 8 DIGITS\r
1709         PUSHJ P,TOC6                    ;PRINT DECIMAL POINT\r
1710         MOVNI A,10\r
1711         ADD A,TEM1\r
1712         MOVE W1,C\r
1713 FP3A:   MOVE T,W1\r
1714         MULI T,12\r
1715         PUSHJ P,FP7B\r
1716         SKIPE,W1\r
1717         AOJL A,FP3A\r
1718         POPJ P,\r
1719 \r
1720 FP4:    MOVNI C,6\r
1721         MOVEI W2,0\r
1722 FP4A:   ASH W2,1\r
1723         XCT,FCP(B)\r
1724         JRST FP4B\r
1725         FMPR A,@FCP+1(B)\r
1726         IORI W2,1\r
1727 FP4B:   AOJN C,FP4A\r
1728         PUSH P,W2       ;SAVE EXPONENT\r
1729         PUSH P,FSGN(B)  ;SAVE "E+" OR "E-"\r
1730         PUSHJ P,FP3     ;PRINT OUT FFF.FFF PART OF NUMBER\r
1731         POP P,W1        ;GET "E+" OR "E-" BACK\r
1732         PUSHJ P,TEXT\r
1733         POP P,A         ;GET EXPONENT BACK\r
1734 \fFP7:   IDIVI A,12      ;DECIMAL OUTPUT SUBROUTINE\r
1735         AOS,TEM1\r
1736         HRLM B,(P)\r
1737         JUMPE A,FP7A1\r
1738         PUSHJ P,FP7\r
1739 \r
1740 FP7A1:  HLRZ T,(P)\r
1741 FP7B:   ADDI T,260\r
1742         JRST TOUT\r
1743 \r
1744         353473426555    ;1.0E32\r
1745         266434157116    ;1.0E16\r
1746 FT8:    233575360400    ;1.0E8\r
1747         216470400000    ;1.0E4\r
1748         207620000000    ;1.0E2\r
1749         204500000000    ;1.0E1\r
1750 FT:     201400000000    ;1.0E0\r
1751         026637304365    ;1.0E-32\r
1752         113715126246    ;1.0E-16\r
1753         146527461671    ;1.0E-8\r
1754         163643334273    ;1.0E-4\r
1755         172507534122    ;1.0E-2\r
1756 FT01:   175631463146    ;1.0E-1\r
1757 FT0=FT01+1\r
1758 \r
1759 FCP:    CAMLE A, FT0(C)\r
1760         CAMGE A, FT(C)\r
1761         Z FT0(C)\r
1762 \r
1763 FSGN:   ASCII .E-.\r
1764         ASCII .E+.\r
1765 \r
1766 TEXTT:  MOVE W1,T\r
1767 TEXT:   TLNN W1,774000          ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL\r
1768         LSH W1,35\r
1769 TEXT2:  MOVEI T,0               ;7 BIT ASCII TEXT OUTPUT SUBROUTINE\r
1770         LSHC T,7\r
1771         PUSHJ P,TOUT\r
1772         JUMPN W1,TEXT2\r
1773         POPJ P,\r
1774 \fWRD:   0\r
1775 WRD2:   0\r
1776 PRNC:   0\r
1777 \r
1778 FRASE:  0       ;DONT CHANGE ORDER, SEE  SEARC+3\r
1779 SYL:    0\r
1780 LWT:    0\r
1781 TEM2:   0\r
1782 FRASE1:\r
1783 TEM3:   0\r
1784 DEN:    0\r
1785 \r
1786 PRGM:   0\r
1787 ESTU:   0\r
1788 ESTUT:  0\r
1789 FSV:    0\r
1790 FH:     0\r
1791 SYM:    0\r
1792 SPSAV:  0       ;POINTER TO LAST SYMBOL TYPED\r
1793 DEFV:   0\r
1794 ULIMIT: 0\r
1795 LLOC:   0\r
1796 LLOCO:  0\r
1797 SAVLOC: 0               ;THE ADR OF OLD REGISTER EXAMINATION SEQUENCE\r
1798 SYMP:   XWD PID,JOBSYM\r
1799 \fSAVPI: 0\r
1800         1177\r
1801 SAVTTY: 0\r
1802 MSK:    XWD -1,-1\r
1803 B1ADR:  0\r
1804 B1SKP:  0\r
1805 B1CNT:  0\r
1806 \r
1807 REPEAT NBP*3-3, <       0>\r
1808 \r
1809 BNADR=.-3\r
1810 AUTOPI: 0\r
1811 \r
1812 IFE EDDT&10,<\r
1813 AC0:    BLOCK 17\r
1814 \r
1815 AC17:   0\r
1816 >\r
1817 \r
1818 SCHM:   EXP PIN         ;DO NOT CHANGE ORDER\r
1819 ARM:    EXP PADSO\r
1820 ODFM:   EXP 10\r
1821 \r
1822 SARS:   0\r
1823 TEM:    0\r
1824 TEM1:   0\r
1825 IFN EDDT&10,< OFFSET:   0 >\r
1826 \fIFN EDDT&1&<EDDT>B36,<\r
1827 \r
1828 PUNCH:  TLC F,FAF+QF\r
1829         TLCE F,FAF+QF\r
1830         JRST ERR                ;ONE ARGUMENT MISSING\r
1831 PUN2:   ADDI T,1\r
1832         HRRZM T,TEM1\r
1833         SUB T,DEFV\r
1834         JUMPLE T,ERR\r
1835 \r
1836 PUN1:   MOVEI T,4               ;PUNCH 4 FEED HOLES\r
1837         PUSHJ P,FEED\r
1838         TLNE F,CF               ;PUNCH NON-ZERO BLOCKS?\r
1839         JRST PUNZ               ;YES\r
1840         HRRZ R,DEFV\r
1841         IORI R,37\r
1842         ADDI R,1\r
1843         CAMLE R,TEM1\r
1844         MOVE R,TEM1\r
1845         EXCH R,DEFV\r
1846         MOVE T,R\r
1847         SUB T,DEFV\r
1848         HRL R,T\r
1849         JUMPGE R,RET            ;EXIT OR PUNCH\r
1850 \r
1851 PBLK:   MOVE T,R\r
1852         SOS W,T         ;INIT CHECKSUM\r
1853         PUSHJ P,PWRD\r
1854 PBLK1:  PUSHJ P,FETCH\r
1855         JRST ERR\r
1856         ADD W,T\r
1857         PUSHJ P,PWRD\r
1858         AOBJN R,PBLK1\r
1859         MOVE T,W\r
1860         PUSHJ P,PWRD\r
1861         JRST PUN1\r
1862 \r
1863 ;PUNCH NON-ZERO BLOCKS\r
1864 \r
1865 PUNZ0:  AOS DEFV                ;LOOK AT NEXT WORD\r
1866 PUNZ:   HRRZ W,DEFV             ;ENTER HERE - GET STARTING ADDRESS\r
1867         MOVE R,W\r
1868         SUB W,TEM1              ;CALCULATE NEGATIVE LENGTH\r
1869         HRL R,W                 ;SET UP AOBJN POINTER\r
1870         JUMPGE R,RET            ;FINISHED?\r
1871         CAMG R,[XWD -40,0]      ;BLOCK LONGER THAN 40?\r
1872         HRLI R,-40              ;YES, FIX IT UP\r
1873         MOVSI W1,400000         ;W1 NEGATIVE MEANS FLUSH 0 WORDS\r
1874 PUNZ2:  PUSHJ P,FETCH           ;GET WORD FROM MEMORY\r
1875         JRST ERR\r
1876         JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER\r
1877         MOVEI W1,0              ;CLEAR 0 WORD COUNTER\r
1878 PUNZ4:  JUMPL W1,PUNZ0          ;FLUSH 0 WORD, GET ANOTHER\r
1879         CAIL W1,3               ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD\r
1880         AOSA R                  ;ADVANCE R TO LAST ADR+1\r
1881         AOBJN R,PUNZ2\r
1882         ADD W1,DEFV             ;CALCULATE DEFV-R+W1=-WORD COUNT\r
1883         SUB W1,R\r
1884         HRLM W1,DEFV            ;PUT -WC IN LEFT HALF OF FA\r
1885         EXCH R,DEFV             ;SAVE ADR FOR NEXT BLOCK, GET POINTER\r
1886         JRST PBLK\r
1887 \r
1888 \r
1889 \r
1890 \r
1891 LOADER: TLNE F,QF\r
1892         JRST ERR\r
1893         MOVEI T,400\r
1894         PUSHJ P,FEED\r
1895         MOVE R,LOADE\r
1896 \r
1897 LOAD1:  MOVE T,0(R)\r
1898         PUSHJ P,PWRD\r
1899         AOBJN R,LOAD1\r
1900         MOVEI T,100\r
1901 LOAD2:  PUSHJ P,FEED\r
1902         JRST RET\r
1903 \r
1904 BLKEND: TLNN F,QF               ;BLOCK END\r
1905         MOVE T,[JRST 4,DDT]\r
1906         TLNN T,777000           ;INSERT JRST IF NO OPCODE\r
1907         TLO T,(JRST)\r
1908         PUSH P,T\r
1909         MOVEI T,100\r
1910         PUSHJ P,FEED\r
1911         POP P,T\r
1912         PUSHJ P,PWRD\r
1913         PUSHJ P,PWRD    ;EXTRA WORD FOR READER TO STOP ON\r
1914         MOVEI T,500\r
1915         JRST LOAD2\r
1916 \r
1917 PWRD:   MOVEI W1,6\r
1918 PWRD2:  ROT T,6\r
1919         CONSZ PTPP,20\r
1920         JRST .-1\r
1921         CONO PTPP,50\r
1922         DATAO PTPP,T\r
1923         SOJG W1,PWRD2\r
1924         POPJ P,0\r
1925 \r
1926 FEED:   CONSZ PTPP,20\r
1927         JRST .-1\r
1928         CONO PTPP,10\r
1929         DATAO PTPP,FEED1\r
1930         SOJN T,FEED\r
1931 FEED1:  POPJ P,0        ;ADDRESS USED AS A CONSTANT\r
1932 \r
1933 \r
1934 LOADB:\r
1935 \r
1936 PHASE 0                 ;RIM10B CHECKSUM LOADER\r
1937         XWD -16,0\r
1938 BEG:    CONO PTRR,60\r
1939         HRRI AA,RD+1\r
1940 RD:     CONSO PTRR,10\r
1941         JRST .-1\r
1942         DATAI PTRR,@TBL1-RD+1(AA)\r
1943         XCT     TBL1-RD+1(AA)\r
1944         XCT     TBL2-RD+1(AA)\r
1945 AA:     SOJA AA,\r
1946 \r
1947 TBL1:   CAME CKSM,ADR\r
1948         ADD CKSM,1(ADR)\r
1949         SKIPL CKSM,ADR\r
1950 \r
1951 TBL2:   JRST 4,BEG\r
1952         AOBJN ADR,RD\r
1953 ADR:    JRST BEG+1\r
1954 CKSM=ADR+1\r
1955 \r
1956 DEPHASE\r
1957 \r
1958 LOADE:  XWD LOADB-.,LOADB\r
1959 >       ;END OF IFN EDDT$1&<EDDT>B36\r
1960         ;FOR PAPER TAPE IO\r
1961 \r
1962 \fSAVE:  0               ;SAVE THE ACS AND PI SYSTEM\r
1963         SKIPN SARS\r
1964         JRST SAV1\r
1965         AOS SAVE\r
1966         JRST SAV5\r
1967 SAV1:   IFN EDDT&1,<\r
1968         CONI PRS,SAVPI\r
1969         CONO PRS, @SAVPI+1>\r
1970         MOVEM 17,AC17\r
1971         HRRZI 17,AC0\r
1972         BLT 17,AC0+16\r
1973         MOVE T, SAVE\r
1974         HLLM T, SAVPI\r
1975 SAV5:\r
1976 ;IFE EDDT&1,<HRRZS SAVUWP               ;ASSUME UWP WILL BE ZEROED\r
1977 ;       SETZB T,F               ;T=F=0\r
1978 ;       CALLIU T,SETUWP                 ;REQUEST TO CLEAR UWP\r
1979 ;       HRROS SAVUWP                    ;FAILED, UWP (BIT 0) STILL 1\r
1980 ;       SKIPN SARS                      ;USER'S SATE SAVED ALREADY?\r
1981 \r
1982 ;       HRRM T,SAVUWP>                  ;NO, SAVE STATE OF UWP\r
1983 \r
1984         SETOM,SARS                      ;FLAG PROTECTING SAVED REGISTERS\r
1985         MOVEI P,PS\r
1986         IFE EDDT&1,<PUSHJ P,TTYRET>     ;IN USER MODE, GET INTO DDT MODE\r
1987         MOVE T,[XWD SCHM,SCH]\r
1988         BLT T,ODF               ;LOAD THE ACS WITH MODE SWITCHES\r
1989         JRST @SAVE\r
1990 \r
1991 RESTORE: SETOM TEM3     ;RESTORE ACS AND PI SYSTEM\r
1992 RESTR1: HRRM T,SAVE\r
1993         MOVE T,SAVPI\r
1994         HLLM T, SAVE\r
1995 IFN EDDT&1,<\r
1996         AND T, SAVPI+1\r
1997         IORI T, 2000    ;TURN ON CHANNELS\r
1998         MOVEM T, SAVPI>\r
1999 ;IFE EDDT&1,<HRRZ T,SAVUWP              ;GET OLD UWP\r
2000 ;       CALLI T,SETUWP          ;CHANGE IT TO OLD\r
2001 ;        JFCL>                  ;EX MACHT NICHTS\r
2002         HRLZI 17,AC0\r
2003         BLT 17,17\r
2004         SETZM SARS\r
2005         SKIPL,TEM3\r
2006 CPUSHP: PUSH BCOM       ;PROGRAM MODIFIED AT IPUSHJ\r
2007 IFN EDDT&1,<    CONO PRS,@SAVPI>\r
2008         JRST 2,@SAVE\r
2009 \fCRN:   MOVEI T,15              ;CARRIAGE RETURN\r
2010         JRST TOUT\r
2011 \r
2012 IFE EDDT&1,<\r
2013 CRNRB:  PUSHJ P,CRN\r
2014         MOVEI T,177\r
2015         JRST TOUT>\r
2016 \r
2017 CRF:    PUSHJ P,CRN\r
2018         MOVEI T,12              ;LINE FEED\r
2019         JRST TOUT\r
2020 \r
2021 LCT:    IFN EDDT&1,<PUSHJ P,TSPC\r
2022         PUSHJ P,TSPC>\r
2023         IFE EDDT&1,<MOVEI T,11\r
2024         JRST TOUT>              ;TYPE A TAB\r
2025 \r
2026 TSPC:   MOVEI T,40              ;SPACE\r
2027         JRST TOUT\r
2028 \fIFN EDDT&1,<   ;EXECUTIVE MODE TELETYPE I/O\r
2029 \r
2030 TIN:    PUSHJ P,LISTEN          ;TELETYPE CHARACTER INPUT\r
2031          JRST .-1\r
2032         CAIE T,175\r
2033         CAIN T,176\r
2034         MOVEI T,33      ;CHANGE ALL ALT MODES TO NEW\r
2035         CAIN T,177      ;RUBOUT?\r
2036         JRST WRONG      ;YES, TYPE XXX\r
2037         TRNE T,140      ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC\r
2038 TOUT:   CAIG T,04       ;DON'T TYPE EOT OR LOWER CHARS\r
2039         POPJ P,\r
2040         HRLM T,(P)\r
2041         IMULI T,200401          ;GENERATE PARITY\r
2042         AND T,[11111111]\r
2043         IMUL T,[11111111]\r
2044         HLR T,(P)\r
2045         TLNE T,10\r
2046         TRC T,200               ;MAKE PARITY EVEN\r
2047         CONSZ TTYY,20\r
2048         JRST .-1\r
2049         DATAO TTYY,T\r
2050         ANDI T,177              ;FLUSH PARITY\r
2051         POPJ P,0\r
2052 \r
2053 LISTEN: CONSO TTYY,40   ;LISTEN FOR TTY\r
2054         POPJ P,\r
2055         DATAI TTYY,T\r
2056         ANDI T,177\r
2057         JRST CPOPJ1\r
2058 \r
2059 TTYRET: MOVEI  T,3410\r
2060 TTY1:   MOVEI W2,40000\r
2061         CONSZ TTYY,120\r
2062         SOJG W2,.-1\r
2063         CONI TTYY,SAVTTY\r
2064         DATAI TTYY,W2\r
2065         HRLM W2,SAVTTY\r
2066         CONO TTYY,(T)\r
2067         POPJ P,\r
2068 TTYLEV: MOVE T,SAVTTY\r
2069         TRZ T,160\r
2070         TRO T,3600\r
2071         TRNE T,10\r
2072         TRZ T,200\r
2073         JRST TTY1\r
2074 \r
2075 \r
2076 TEXIN:  PUSHJ P,TIN     ;INPUT SUBROUTINE FOR TEXT MODES\r
2077         TRNN T,140\r
2078         JRST TOUT       ;ECHO CHARACTERS (0-37) NOT ECHOED\r
2079         POPJ P,\r
2080 >\r
2081 \fIFE EDDT&1,<   ;USER MODE TELETYPE I/O\r
2082   IFN EDDT&4,<  ;ASSEMBLE WITH OLD DDT MODE IO\r
2083 \r
2084 \r
2085 TIN:    MOVE T,POUTBF           ;GET NEXT CHARACTER ROUTINE\r
2086         CAME T,[POINT 7,INBFF]\r
2087         PUSHJ P,FINOUT\r
2088 \r
2089 IFE EDDT&10,<   ILDB T,PINBFF >\r
2090 IFN EDDT&10,<   PUSHJ P,INCHR >\r
2091 \r
2092         CAIE T,176\r
2093         CAIN T,175\r
2094         MOVEI T,33      ;CHANGE TO NEW ALT MODE\r
2095         CAIN    T,177   ;RUBOUT?\r
2096         JRST    WRONG   ;YES PRINT XXX\r
2097         JUMPN T,CPOPJ\r
2098         MOVE T,[POINT 7,INBFF]\r
2099         MOVEM T,PINBFF\r
2100         CALL T,[SIXBIT /DDTIN/]\r
2101         JRST TIN\r
2102 \r
2103 TOUT:   JUMPE   T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS\r
2104 \r
2105 IFN EDDT&10,<   SKIPE COMAND\r
2106         JRST PUTCHR >\r
2107 \r
2108         IDPB T,POUTBF\r
2109         CAIE T,12\r
2110         POPJ P,\r
2111 TTYLEV:\r
2112 FINOUT: MOVEI T,0\r
2113         IDPB T,POUTBF\r
2114         MOVE T,[POINT 7,INBFF]\r
2115         MOVEM T,PINBFF\r
2116         MOVEM T,POUTBF\r
2117         CALL T,[SIXBIT /DDTOUT/]\r
2118         CLEARM INBFF\r
2119         POPJ P,\r
2120 \r
2121 PINBFF: POINT 7,INBFF\r
2122 POUTBF: POINT 7,INBFF\r
2123 \r
2124 LISTEN=CPOPJ\r
2125 INBFF:  BLOCK 21\r
2126 \r
2127 TTYRET: MOVE T,[POINT 7,INBFF]\r
2128         MOVEM T,POUTBF\r
2129         MOVEM T,PINBFF\r
2130         CLEARM INBFF\r
2131         POPJ P,\r
2132 \r
2133 TEXIN=TIN       ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE\r
2134 >\r
2135 \f  IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO\r
2136 \r
2137 OPDEF TTCALL [51B8]\r
2138 \r
2139 TEXIN:\r
2140 TIN:\r
2141 \r
2142 IFE EDDT&10,<   TTCALL 0,T              ;GET NEXT CHARACTER INTO T >\r
2143 IFN EDDT&10,<   PUSHJ P,INCHR >\r
2144 \r
2145         CAIE T,175\r
2146         CAIN T,176\r
2147         MOVEI T,33              ;CHANGE OLD ALT MODES TO NEW\r
2148         CAIN T,177\r
2149         JRST WRONG              ;TYPE XXX FOR A RUBOUT          \r
2150         POPJ P,\r
2151 \r
2152 \r
2153 TOUT:\r
2154 \r
2155 IFN EDDT&10,<   SKIPE COMAND            ;IS THERE A COMMAND FILE?\r
2156         JRST PUTCHR                     ;YES >\r
2157 \r
2158         TTCALL 1,T              ;OUTPUT A CHARACTER\r
2159         POPJ P,\r
2160 \r
2161 LISTEN: TTCALL 2,T              ;GET NEXT CHAR, NO IO WAIT\r
2162         POPJ P,                 ;NO CHARACTER EXISTED, RETURN\r
2163         JRST CPOPJ1             ;CHARACTER WAS THERE, SKIP RETURN\r
2164 \r
2165 TTYRET: TTCALL 6,               ;WHEN RETURNING TO DDT, FLUSH ALL\r
2166         POPJ P,                 ;WAITING INPUT CHARACTERS\r
2167 \r
2168 TTYLEV==CPOPJ                   ;NOTHING SPECIAL TO DO WHEN LEAVING DDT\r
2169 >       ;END OF IFN DDT&4\r
2170 \r
2171 IFN EDDT&10,<\r
2172 INCHR:  SKIPE COMAND\r
2173         JRST GETCHR\r
2174 \r
2175 IFN EDDT&4,<    ILDB T,PINBFF           ;NO COMMAND FILE>\r
2176 IFE EDDT&4,<    TTCALL 0,T              ;O/P CHAR, >\r
2177 \r
2178         POPJ P,\r
2179 \r
2180 GETCHR: SOSLE CBUF+2            ;ANY REMAINING\r
2181         JRST GETOK              ;YES.\r
2182         INPUT CM,\r
2183         STATZ CM,740000\r
2184         HALT .+1\r
2185         STATZ CM,20000          ;END-OF-FILE?\r
2186         JRST GETEND\r
2187 \r
2188 GETOK:  ILDB T,CBUF+1\r
2189         JUMPE T,GETCHR          ;BYPASS ZERO CHARACTERS\r
2190         PUSHJ P,PUTCHR          ;COPY INPUT TO OUTPUT FILE\r
2191         POPJ P,\r
2192 \r
2193 GETEND: CLOSE DP,               ;CLOSE OUTPUT WHEN INPUT EXHAUSTED\r
2194         RELEASE DP,\r
2195         RELEASE CM,\r
2196         JRST NOLPT              ;REVERT TO TTY WHEN COMMAND EXHAUSTED\r
2197 \r
2198 PUTCHR: SOSLE LBUF+2            ;ANY ROOM?\r
2199         JRST PUTOK              ;YES\r
2200         OUTPUT DP,\r
2201         STATZ DP,740000         ;ERRORS?\r
2202         HALT .+1\r
2203 \r
2204 PUTOK:\r
2205         IDPB T,LBUF+1   ;DEPOSIT CHAR.\r
2206         POPJ P,\r
2207 \r
2208 >       ;END OF IFN EDDT&10\r
2209 >       ;END OF IFE EDDT&1\r
2210 \fBDISP: POINT 12,DISP(R),11\r
2211         POINT 12,DISP(R),23\r
2212         POINT 12,DISP(R),35\r
2213 DISP:   \r
2214 DEFINE D (Z1,Z2,Z3)<    <Z1-DDT>_30+<Z2-DDT>_14+Z3-DDT>\r
2215         ;THIS MACRO PACKS 3 ADDRESSES INTO ONE WORD; EACH ADR IS 12 BITS\r
2216 \r
2217 IFE EDDT&1&<EDDT>B36,<  PUNCH=ERR\r
2218         BLKEND=ERR\r
2219         LOADER=ERR>\r
2220 \r
2221 D ERR,ERR,ERR\r
2222 D ERR,ERR,ERR\r
2223 D ERR,ERR,VARRW\r
2224 D TAB,LINEF,ERR\r
2225 D ERR,CARR,ERR\r
2226 D ERR,ERR,ERR\r
2227 D PUNCH,ERR,ERR\r
2228 D ERR,ERR,ERR\r
2229 \r
2230 D ERR,ERR,ERR\r
2231 D CONTROL,ERR,ERR\r
2232 D ERR,ERR,SPACE\r
2233 D SUPTYO,TEXI,ASSEM\r
2234 D DOLLAR,PERC,ERR\r
2235 D DIVD,LPRN,RPRN\r
2236 D MULT,PLUS,ACCF\r
2237 D MINUS,PERIOD,SLASH\r
2238 D NUM,NUM,NUM\r
2239 D NUM,NUM,NUM\r
2240 D NUM,NUM,NUM\r
2241 D NUM,TAG,SEMIC\r
2242 D FIRARG,EQUAL,ULIM\r
2243 D QUESTN,INDIRECT,ABSA\r
2244 D BPS,CON,SYMD\r
2245 D EFFEC,SFLOT,GO\r
2246 D HWRDS,PILOC,BLKEND\r
2247 D KILL,LOADER,MASK\r
2248 D NWORD,BITO,PROCEDE\r
2249 D QUAN,RELA,SYMBOL\r
2250 D TEXO,ERR,ERR\r
2251 D WORD,XEC,ERR\r
2252 D ZERO,OCON,ICON\r
2253 D OSYM,VARRW,PSYM\r
2254 \r
2255 ;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE\r
2256 ; ARE DETECTED AS ERRORS NEAR L21:\r
2257 \fBITO:  MOVEI   R,BITT  ;BYTE OUTPUT SUBROUTINE\r
2258         HRRZI   AR,TOC\r
2259         TRZN    F,Q2F\r
2260         JRST    ERR\r
2261         MOVE    T,WRD2\r
2262         MOVEM   T,SVBTS\r
2263         MOVEI   T,^D36\r
2264         IDIV    T,WRD2\r
2265         SKIPE   T+1\r
2266         ADDI    T,1\r
2267         MOVEM   T,SVBTS2\r
2268         HRRZ    SCH,R\r
2269         JRST    BASE1\r
2270 \r
2271 BITT:   MOVE    T,SVBTS2\r
2272         MOVEM   T,SVBT2\r
2273         MOVE    T+1,LWT\r
2274         MOVEM   T+1,SVBT3\r
2275         PUSH P,LWT\r
2276 BITT2:  MOVEI   T,0\r
2277         MOVE    T+2,SVBTS\r
2278         LSHC    T,(T+2)\r
2279         MOVEM   T,LWT\r
2280         MOVEM   T+1,SVBT3\r
2281         CAIE    AR,PADSO\r
2282         PUSHJ   P,TOCA\r
2283         CAIE    AR,TOC\r
2284         PUSHJ   P,PIN\r
2285         SOSG    SVBT2\r
2286         JRST BITT4\r
2287         MOVEI   T,","\r
2288         PUSHJ   P,TOUT\r
2289         MOVE    T+1,SVBT3\r
2290         JRST    BITT2\r
2291 \r
2292 BITT4:  POP P,LWT\r
2293         POPJ P,\r
2294 \r
2295 SVBTS:  0\r
2296 SVBTS2: 0\r
2297 SVBT3:  0\r
2298 SVBT2:  0\r
2299 \f\r
2300 ;DESCRIPTION OF OP DECODER FOR DDT:\r
2301 ;\r
2302 ;         THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO\r
2303 ;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL.  THIS OCCURS\r
2304 ;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN\r
2305 ;FOR THE PDP-6.  FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL\r
2306 ;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY\r
2307 ;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH\r
2308 ;BEGIN WITH 110(2).\r
2309 ;\r
2310 ;       THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD.\r
2311 ;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE:\r
2312 ;0-37(8):       THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER.\r
2313 ;       LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS\r
2314 ;       EQUAL P.\r
2315 ;\r
2316 ;       THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT\r
2317 ;       MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION.\r
2318 ;       P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER\r
2319 ;       WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS\r
2320 ;       OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE\r
2321 ;       POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS.\r
2322 ;\r
2323 ;       EXAMPLE: P = 6\r
2324 ;                N = 2\r
2325 ;\r
2326 ;;      C(INST) = .010 101 100(2)\r
2327 ;\r
2328 ;       THE RESULT = D = 010(2) = 2(8)\r
2329 ;\r
2330 ;       D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE.\r
2331 ;       IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH\r
2332 ;       PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES\r
2333 ;       THE INTERPRETATION.\r
2334 ;\r
2335 ;40(8)  THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION\r
2336 ;       IS FINISHED.\r
2337 \f\r
2338 ;41(8)-72(8)      THE ALPHABET IS ENCODED INTO THIS RANGE.\r
2339 ;               41- A\r
2340 ;               42- B\r
2341 ;               72- Z\r
2342 ;               WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING\r
2343 ;               LETTER IS TYPED.\r
2344 ;\r
2345 ;73(8)-777(8)     THIS IS A TRANSFER BYTE.  IF THE BYTE IN THIS RANGE IS\r
2346 ;               CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD\r
2347 ;               BYTE IN THE TABLE.\r
2348 ;\r
2349 ;MACROS ASSEMBLE THE TABLE TBL:\r
2350 ; 1.   A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE.  THE FIRST\r
2351 ;      DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE.\r
2352 ; 2.   A POINT (.) ASSEMBLES A STOP CODE.\r
2353 ; 3.   A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE\r
2354 ;      SYMBOLICALLY NAMED BYTE.\r
2355 ; 4.   A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT,\r
2356 ;      ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER.\r
2357 ;\r
2358 ;EXAMPLE OF BINARY TO SYMBOLIC DECODING:\r
2359 ;      THE MACHINE CODE FOR JRST IS 254\r
2360 ;          INST    0  1  0  1  0  1  1  0  0\r
2361 ;      THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^).\r
2362 ;      THE RESULT OF APPLYING THIS TO C(INST) GIVES 2.  SKIPPING OVER\r
2363 ;      2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN\r
2364 ;      HAK/ BEING INTERPRETED.  AT HAK:, THERE IS A 33^.  APPLYING\r
2365 ;      THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED\r
2366 ;      OVER:\r
2367 ;          1.  MV/\r
2368 ;               MOV      PRINTING TEXT\r
2369 ;          2.  MO/\r
2370 ;          3.  ML/\r
2371 ;          4.  DV/\r
2372 ;          5.  SH/\r
2373 ;\r
2374 ;H1/ IS THE NEXT BYTE INTERPRETER.  AT H1: 03^ IS FOUND SO\r
2375 ;4 BYTES ARE SKIPPED OVER:\r
2376 ;              EXC      PRINTING TEXT\r
2377 ;          1.  S3/\r
2378 ;              BL       PRINTING TEXT\r
2379 ;              T        PRINTING TEXT\r
2380 ;          2.  .\r
2381 ;          3.  AO/\r
2382 ;          4.  AOB/\r
2383 ;          THE NEXT LETTERS JRS ARE TYPED OUT.  THEN T/ IS FOUND.  AT\r
2384 ;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS.\r
2385 ;\r
2386 ;          THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A\r
2387 ;       TREE SEARCH METHOD IS USED.\r
2388 \f\f\f\f\fREPEAT 0,<\r
2389 \r
2390 DEFINE REDEF (XX)<\r
2391 DEFINE INFO (AA,BB)<\r
2392 AA XX'BB>>\r
2393 \r
2394 \r
2395 DEFINE BYT9 (L)<\r
2396 XLIST\r
2397 REDEF %\r
2398  ZZ==0\r
2399  ZZZ==0\r
2400  ZZM==1\r
2401 \r
2402  IRPC L,<\r
2403         Z=="L"\r
2404         IFE Z-":",<INFO <>,<==CLOC>\r
2405                 IFNDEF FIR.,<FIR.==CLOC>\r
2406                 IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG>\r
2407                 Z==0>\r
2408         IFE Z-"/",<IF1 <OUTP 1>\r
2409                 IF2,<INFO OUTP,+73-FIR.>\r
2410                 Z==0>\r
2411  IFE Z-"^",<OUTP <ZZ&74/2+ZZ&7-1>\r
2412         Z==0>\r
2413  IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,<\r
2414                                 REPEAT 5,<ZZ==ZZZ&77\r
2415                                         IFN ZZ,<OUTP ZZ>\r
2416                                         ZZZ==ZZZ/100>>\r
2417                                 IFE Z-".",<OUTP 40>\r
2418                                 Z==0>\r
2419  IFN Z,<INFO REDEF,L\r
2420         ZZ==ZZ*10+Z&7\r
2421         ZZZ==ZZZ+<Z-40>*ZZM\r
2422         ZZM==ZZM*100>\r
2423  IFE Z,<REDEF %\r
2424         ZZ==0\r
2425         ZZZ==0\r
2426         ZZM==1>>\r
2427 LIST>\r
2428 \r
2429 DEFINE OUTP (A)<\r
2430         BINRY==BINRY*400+BINRY*400+A\r
2431         BINC==BINC-1\r
2432         IFE BINC,<EXP BINRY\r
2433                 BINRY==0\r
2434                 BINC==4>\r
2435         CLOC==CLOC+1>\r
2436 \r
2437 \r
2438 \r
2439 TBL:            ;OPDECODER BYTE TABLE\r
2440 \r
2441 BINRY==0\r
2442 CLOC==0         ;SET BYTE LOCATION COUNTER TO 0\r
2443 BINC==4         ;INIT BYTES/WORD COUNTER\r
2444 \r
2445 BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/>\r
2446 \r
2447 ;IO INSTRUCTIONS\r
2448 BYT9 <21^BD/CON,11^OI/S,01^Z/O/>\r
2449 BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/>\r
2450 \r
2451 ;UUOS\r
2452 BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^>\r
2453 BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/>\r
2454 BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/>\r
2455 BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/>\r
2456 BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/>\r
2457 ;BYTE AND FLOATING INSTRUCTIONS\r
2458 \r
2459 BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:>\r
2460 BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/>\r
2461 BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/>\r
2462 \r
2463 ;FWT,FIXED POINT ARITH,MISC.\r
2464 \r
2465 BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/>\r
2466 BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^>\r
2467 BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,>\r
2468 BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:>\r
2469 BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,>\r
2470 BYT9 <AOB/JRS T/JFC L/XC T/.AOB:01^P/N/>\r
2471 BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,>\r
2472 BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:>\r
2473 BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/JFF O/S1:21^.,C:C.,>\r
2474 \r
2475 ;ARITH COMP,SKIP,JUMP\r
2476 \r
2477 BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^>\r
2478 BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/>\r
2479 BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:>\r
2480 BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,>\r
2481 \r
2482 \r
2483 ;HALF WORDS\r
2484 \r
2485 BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:>\r
2486 BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/>\r
2487 \r
2488 ;TEST INSTRUCTIONS\r
2489 \r
2490 BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,>\r
2491 BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/>\r
2492 \r
2493 \r
2494 ;BOOLEAN\r
2495 \r
2496 BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/>\r
2497 BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/>\r
2498 BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/>\r
2499 BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/>\r
2500 BYT9 <CA/CM/CM/CB/O IMB/>\r
2501 \r
2502 ;MORE UUO'S\r
2503 BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/>\r
2504 BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/>\r
2505 \r
2506 REPEAT BINC,<BINRY=BINRY*400+BINRY*400>\r
2507 IFN BINRY,<EXP BINRY>\r
2508 >       ;END OF REPEAT 0\r
2509 \r
2510 \r
2511 \fIFN EDDT&10,<                  ;FILDDT STUFF\r
2512 CRASH:  SIXBIT .CRASH.          ;CANONICAL NAME FOR CRASH\r
2513         SIXBIT .SAV.\r
2514         Z\r
2515         Z\r
2516 COMNDS: SIXBIT .FILDDT.         ;CANNONICAL NAME FOR COMMAND LIST\r
2517         SIXBTI .TXT.\r
2518         Z\r
2519         Z\r
2520 SNAP:   SIXBIT .SNAP.           ;NAME FOR OUTPUT IF TO RETRIEVABLE DEVCE\r
2521         SIXBIT .LST.\r
2522         Z\r
2523         Z\r
2524 CBUF:   BLOCK 3                 ;RING HEADERS\r
2525 LBUF:   BLOCK 3 \r
2526 COMAND: Z                       ;-1 IF COMMAND FILE ,0 IF NOT\r
2527 CRASHS: Z                       ;-1 IF CRASH.SAV ON DISK ,0 IF PEEK AT MONITOR\r
2528 AC0=.\r
2529 AC17=.+17\r
2530 RSIDNT: BLOCK 1000              ;LOCS 0-777 ALWAYS IN CORE\r
2531 CURENT: BLOCK 4000              ;WINDOW TO THE FILE ON DISK\r
2532 RSAVE:  IOWD 1000,RSIDT         ;INDEX OF THE CUFRRENT BLOCK, 0,1,...\r
2533         Z\r
2534 CURLST: IOWD 4000,CURENT\r
2535         Z\r
2536 >\r
2537 \r
2538 \fSUBTTL OP DECODER\r
2539 \r
2540 DEFINE BYT9 (A) <IRP A,<\r
2541 A>>\r
2542 \r
2543 IF1,<\r
2544 \r
2545 DEFINE  .ADR    (A) <\r
2546 %'A==   CLOC\r
2547 FIR.==  CLOC\r
2548 DEFINE  .ADR    (B) <\r
2549 %'B==   CLOC\r
2550 IFGE    <LASTB==CLOC+73-FIR.>-1000, <PRINTX OPTABLE TO LONG>>>\r
2551 \r
2552 DEFINE  .TRA    <\r
2553 CLOC==  CLOC+1  ;>\r
2554 \r
2555 SYN     .TRA,   .DIS\r
2556 \r
2557 DEFINE  .TXT    (A) <\r
2558 IFNB    <A>,    <IRPC A,<CLOC==CLOC+1>>>\r
2559 \r
2560 DEFINE .END     (A) <\r
2561 IFNB    <A>,    <IRPC A,<CLOC==CLOC+1>>\r
2562 CLOC==  CLOC+1>\r
2563 \r
2564 >       ;END OF IF1\r
2565 IF2,<\r
2566 \r
2567 DEFINE  .ADR (A)<IFN %'A-CLOC,<PRINTX PHASE ERR AT: %'A>>\r
2568 \r
2569 DEFINE  .TRA    (A) <\r
2570 OUTP    %'A+73-FIR.>\r
2571 \r
2572 DEFINE  .DIS    (A) <\r
2573 OUTP    A&70/2+A&7-1>\r
2574 \r
2575 DEFINE  .TXT    (A) <\r
2576 IFNB    <A>,    <IRPC A,<OUTP "A"-40>>>\r
2577 \r
2578 DEFINE  .END    (A) <\r
2579 IFNB    <A>,    <IRPC A,<OUTP "A"-40>>\r
2580 OUTP    40>\r
2581 \r
2582 DEFINE  OUTP (A)<\r
2583 BINRY== BINRY+<A>_<BINC==BINC-9>\r
2584 IFE BINC, <\r
2585                 +BINRY\r
2586 BINRY==0\r
2587 BINC==^D36 >\r
2588 CLOC==CLOC+1 >\r
2589 \r
2590 >\r
2591 \fTBL:           ;OPDECODER BYTE TABLE\r
2592 \r
2593 BINRY== 0\r
2594 CLOC==  0       ;SET BYTE LOCATION COUNTER TO 0\r
2595 BINC==  ^D36    ;INIT BYTES/WORD COUNTER\r
2596 \r
2597 BYT9 <\r
2598 \r
2599 .DIS 63,.TRA UUO,.TRA FLO,.TRA HAK,.TRA ACCP,.TRA BOOLE\r
2600         .TXT H,.TRA HWT,.TXT T,.TRA ACBM\r
2601 \r
2602 ;IO INSTRUCTIONS\r
2603 \r
2604 .DIS 21,.TRA BD,.TXT CON,.DIS 11,.TRA OI,.TXT S,.DIS 01,.TRA Z,.TRA O\r
2605 .ADR BD,.DIS 01,.TXT BLK,.TRA IO,.TXT DATA,.ADR IO,.DIS 11,.TRA I,.TRA O\r
2606         .ADR OI,.DIS 01,.TRA O,.TRA I\r
2607 ;UUOS\r
2608 \r
2609 .ADR UUO,.DIS 51,.END,.TXT,.DIS 32,.TRA U40,.TRA U50,.TRA U60\r
2610         .DIS 21,.TRA U703,.DIS 11.,.TRA USET,.DIS 01\r
2611 .TXT LOOKU,.TRA P,.TXT ENTE,.TRA R,.ADR USET,.TXT USET,.DIS 01,.TRA I,.TRA O\r
2612 .ADR U40,.DIS 03,.TRA CAL,.TXT INI,.TRA T,.END,.END,.END,.END,.END,.TXT CALL,.TRA I\r
2613 .ADR U60,.DIS 21,.TRA U603,.DIS 01,.TXT IN,.TRA BPUT,.TXT OUT\r
2614         .ADR BPUT,.DIS 11,.TXT BU,.ADR F,.END F,.TXT,.TXT PU,.TRA T\r
2615 .ADR U603,.DIS 01,.TRA U6062,.TXT STAT,.DIS 11,.ADR O,.END O,.TXT,.ADR Z,.END Z,.TXT\r
2616         .ADR U6062,.DIS 11,.TXT S,.TRA U62,.TXT G,.ADR U62,.TXT ETST,.TRA S\r
2617 \r
2618 ;BYTE AND FLOATING INSTRUCTIONS\r
2619 \r
2620 .ADR FLO,.DIS 51,.TRA BYTE,.TXT F,.DIS 32,.TXT,.TXT AD,.TRA A,.TXT SB\r
2621         .TRA A,.TXT MP,.TRA A,.TXT DV,.ADR A\r
2622 .DIS 21,.TRA LMB,.TXT R,.TRA IMB,.ADR LMB,.DIS 02,.END,.TXT\r
2623         .ADR L,.END L,.TXT,.ADR M,.END M,.TXT\r
2624 .ADR B,.END B,.TXT,.ADR BYTE,.DIS 32,.END,.END,.END,.TXT\r
2625         .DIS 03,.TXT UF,.TRA PA,.TXT DF,.TRA N\r
2626 .TXT FS,.TRA C,.TXT IB,.ADR P,.END P,.TXT,.TXT I,.TRA LD\r
2627         .ADR LD,.TXT LD,.TRA B,.TXT I,.TRA DP,.ADR DP,.TXT DP,.TRA B\r
2628 \r
2629 ;FWT-FIXED POINT ARITH-MISC\r
2630 \r
2631 .ADR HAK,.DIS 33,.TRA MV,.ADR MV,.TXT MOV,.TRA MO,.TRA ML,.TRA DV\r
2632         .TRA SH,.TRA H1,.TRA JP\r
2633 .DIS 21,.TXT ADD,.TRA IMB,.TXT SU,.ADR BIMB,.TXT B,.ADR IMB,.DIS 02,.END,.TXT\r
2634         .ADR I,.END I,.TXT,.TRA M,.TRA B,.ADR MO,.DIS 22\r
2635 .ADR EIMS,.TXT E,.TRA IMS,.TXT S,.TRA IMS,.TXT N,.TRA IMS,.TXT M\r
2636         .ADR IMS,.DIS 02,.END,.TXT,.TRA I,.TRA M,.ADR S,.END S,.TXT\r
2637 .ADR ML,.DIS 21,.TXT I,.TRA ML1,.ADR ML1,.TXT MUL,.TRA IMB\r
2638         .ADR DV,.DIS 21,.TXT I,.TRA DV1\r
2639 .ADR DV1,.TXT DI,.ADR DV2,.TXT V,.TRA IMB,.ADR H1,.DIS 03,.TXT EXC,.TRA S3,.TXT BL\r
2640         .ADR T,.END T,.TXT,.TRA AO,.ADR AO,.TXT AOBJ\r
2641 .TRA AOB,.TXT JRS,.TRA T,.TXT JFC,.TRA L,.TXT XC,.TRA T,.END\r
2642         .ADR AOB,.DIS 01,.TRA P,.TRA N\r
2643 .ADR JP,.DIS 03,.TRA PU,.ADR PU,.TXT PUSH,.TRA PUS,.TRA PO\r
2644         .ADR PO,.TXT POP,.TRA POP,.TXT JS,.ADR R,.END R,.TXT\r
2645 .TXT JS,.TRA P,.TXT JS,.ADR PA,.END A,.TXT,.TXT JR,.TRA PA\r
2646         .ADR PUS,.DIS 01,.ADR J,.END J,.END,.TXT,.ADR POP\r
2647 .DIS 01,.END,.TXT,.TRA J,.ADR SH,.DIS 02,.TXT A,.TRA S2,.TXT ROT,.TRA S1,.TXT L\r
2648         .ADR S2,.TXT S,.ADR S3,.TXT H,.TRA S1,.TXT JFF,.TRA O\r
2649         .ADR S1,.DIS 21,.END,.TXT,.ADR C,.END C,.TXT\r
2650 \r
2651 ;ARITH COMP-SKIP-JUMP\r
2652 \r
2653 .ADR ACCP,.DIS 42,.TXT CA,.TRA CA1,.TRA SJ,.TXT A,.TRA JS,.TXT S\r
2654         .ADR JS,.TXT O,.DIS 31\r
2655 .TXT J,.TRA COMP,.TXT S,.TRA COMP,.ADR CA1,.DIS 31,.TXT I,.TRA COMP,.TXT M,.TRA COMP\r
2656 .ADR SJ,.DIS 31,.TXT JUM,.TRA PSJ,.TXT SKI,.ADR PSJ,.TXT P,.ADR COMP\r
2657 .DIS 03,.END,.TXT,.TRA L,.ADR E,.END E,.TXT,.TXT L,.TRA E,.TRA PA,.TXT G,.TRA E\r
2658         .ADR N,.END N,.TXT,.END G,.TXT\r
2659 \r
2660 ;HALF WORDS\r
2661 \r
2662 .ADR HWT,.DIS 51,.TRA HW1,.DIS 21,.TXT R,.TRA HW2,.TXT L,.ADR HW2,.TXT R,.TRA HW3\r
2663 .ADR HW1,.DIS 21,.TXT L,.TRA HW4,.TXT R,.ADR HW4,.TXT L\r
2664         .ADR HW3,.DIS 32,.TRA IMS,.TXT Z,.TRA IMS,.TXT O,.TRA IMS,.TRA EIMS\r
2665 \r
2666 ;TEST INSTRUCTIONS\r
2667 \r
2668 .ADR ACBM,.DIS 31,.TRA AC1,.DIS 01,.TXT D,.TRA AC2,.TXT S,.TRA AC2\r
2669         .ADR AC1,.DIS 01,.TXT R,.TRA AC2,.TXT L\r
2670 .ADR AC2,.DIS 42,.TXT N,.TRA EAN,.TXT Z,.TRA EAN,.TXT C,.TRA EAN,.TXT O\r
2671         .ADR EAN,.DIS 12,.END,.TXT,.TRA E,.TRA PA,.TRA N\r
2672 \r
2673 ;BOOLEAN\r
2674 \r
2675 .ADR BOOLE,.DIS 24,.TRA ST,.ADR AN,.TXT AND,.TRA B2,.TRA AN,.TRA ST,.TRA AN,.TRA ST\r
2676 .TXT X,.ADR OR,.TXT OR,.TRA B2,.TXT I,.TRA OR,.TRA AN,.TXT EQ\r
2677         .TRA DV2,.TRA ST,.TRA OR,.TRA ST,.TRA OR,.TRA OR\r
2678 .ADR ST,.TXT SET,.ADR B2,.DIS 24,.TXT Z,.TRA IMB,.TRA IMB\r
2679         .ADR CA,.TXT C,.TRA TA,.ADR TM,.TXT M,.TRA IMB\r
2680 .ADR CM,.TXT C,.TRA TM,.ADR TA,.TXT A,.TRA IMB,.TRA IMB,.TRA IMB\r
2681         .ADR CB,.TXT C,.TRA BIMB,.TRA IMB,.TRA CA\r
2682 .TRA CA,.TRA CM,.TRA CM,.TRA CB,.TXT O,.TRA IMB\r
2683 \r
2684 ;MORE UUO'S\r
2685 \r
2686 .ADR U50,.DIS 03,.TXT OPE,.TRA N,.TXT TT,.ADR CAL,.TXT CAL,.TRA L,.END,.END,.END\r
2687         .TXT,.TXT RENAM,.TRA E,.TXT I,.TRA N,.TXT OU,.TRA T\r
2688 .ADR U703,.DIS 02,.TXT CLOS,.TRA E,.TXT RELEA,.TRA S\r
2689         .TXT MTAP,.TRA E,.TXT UGET,.TRA F\r
2690 \r
2691 ;**********THIS TERMINATES THE "BYT9" MACRO ARGUMENT******\r
2692 >\r
2693 \r
2694 IF1,<   BLOCK   <CLOC+3>/4>\r
2695 \r
2696 IF2,<   IFN BINC-^D36,< +BINRY>>\r
2697 \r
2698 IFNDEF CLOC.,<CLOC.==CLOC>\r
2699 IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE>\r
2700 \f\r
2701 PNTR:   EXP INST        ;POINTER TO BITS IN INST\r
2702 INST:   0               ;BINARY FOR INSTRUCTION\r
2703 CHP:    0               ;CHAR POINTER INTO TXT, TXT+1\r
2704 TXT:    BLOCK 2         ;STORE INPUT TEXT FOR OPEVAL\r
2705 SAVPDL: 0               ;SAVE PUSH DOWN LIST POINTER\r
2706 \r
2707 BTAB:   POINT 9,TBL     ;TABLE USED TO GET NEXT BYTE POINTER\r
2708         POINT 9,TBL,8   ;FOR TRANSFER BYTE\r
2709         POINT 9,TBL,17\r
2710         POINT 9,TBL,26\r
2711 \r
2712 OPEVAL: MOVEI T,0               ;EVALUATE FOR AN OP CODE\r
2713         IDPB T,CHP              ;INSERT NULL IN TEXT FOR SYMBOL\r
2714         MOVEM P,SAVPDL\r
2715         TRZA F,OUTF\r
2716 OPTYPE: TRO F,OUTF              ;TYPE AN OPCODE SYMBOLICALLY\r
2717         LSH T,-33\r
2718         MOVEM T,INST            ;GET OPCODE INTO RIGHT 9 BITS\r
2719 \r
2720         MOVE T,[XWD 440700,TXT]\r
2721         MOVEM T,CHP             ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT\r
2722         TRZ F,ITF               ;CLEAR INSTRUCTION TYPED FLAG\r
2723         CLEARB R,W1\r
2724         MOVE W2,BTAB\r
2725 DC1:    ILDB T,W2               ;GET NEXT BYTE IN TBL\r
2726         CAILE T,40\r
2727         CAIL T,73\r
2728         SOJGE R,DC1             ;SKIP OVER # BYTES = C(R)\r
2729         JUMPG R,DC1             ;SKIP OVER ALPHA TEXT WITHOUT COUNTING\r
2730         SUBI T,40\r
2731         JUMPE T,DECX            ;TRANSFER ON ASTOP CODE\r
2732         JUMPG T,DC2\r
2733         DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE\r
2734         TRZ T,-4\r
2735         AOS T\r
2736         DPB T,[XWD 300600,PNTR]\r
2737         TRNN F,OUTF\r
2738         JRST DC6                ;FOR OPEVAL ONLY\r
2739         LDB R,PNTR              ;GET # BYTES TO SKIP OVER\r
2740         JRST DC1\r
2741 \r
2742 DC2:    HRREI T,-33(T)\r
2743         JUMPL T,DECT            ;TYPE OUT A LETTER\r
2744         MOVEI W1,FIR.(T)                ;BYTE IS A TRANSFER\r
2745         IDIVI W1,4\r
2746         MOVE W2,BTAB(W2)        ;CALCULATE POINTER TO NEXT BYTE\r
2747         ADDI W2,(W1)\r
2748         JRST DC1\r
2749 \r
2750 \f\r
2751 DECT:   TRNE F,OUTF\r
2752         JRST DC8        ;TYPE OUT A LETTER\r
2753         ILDB W1,CHP     ;GET NEXT INPUT LETTER\r
2754         CAIE W1,133(T)  ;COMPARE WITH ASSUMED NEXT LETTER\r
2755         JRST NOMAT      ;DOESNT MATCH\r
2756         JRST DC1        ;MATCHES, TRY NEXT\r
2757 \r
2758 DECX:   TRNE F,OUTF     ;STOP (CODE 40) HAS BEEN SEEN\r
2759         POPJ P,         ;IF FOR OUTPUT, RETURN\r
2760         ILDB W1,CHP     ;GET NEXT INPUT CHAR IF ANY\r
2761         JUMPE W1,DC7    ;DOES # OF CHARS MATCH\r
2762 NOMAT:  POP P,R         ;NO, BACK UP AND TRY SOME MORE\r
2763         POP P,W2\r
2764         POP P,PNTR\r
2765         POP P,CHP\r
2766 NOMAT1: AOS R           ;ASSUME NEXT NUMBER FOR BIN VALUE\r
2767         DPB R,PNTR      ;STUFF INTO ANSWER\r
2768         LDB R,PNTR\r
2769         JUMPN R,DC6AA   ;IF =0, BYTE WAS TOO BIG\r
2770         CAME P,SAVPDL\r
2771         JRST NOMAT      ;NOT AT TOP LEVEL\r
2772         POPJ P,         ;UNDEFINED, FINALLY\r
2773 \r
2774 DC6:    MOVEI R,0       ;ASSUME 0 FOR INITIAL BINARY VALUE\r
2775         DPB R,PNTR\r
2776 DC6AA:  CAMN P,SAVPDL\r
2777         JRST DC6BB\r
2778         LDB T,-2(P)     ;OLD VALUE OF PNTR\r
2779         CAME T,(P)\r
2780         JRST NOMAT1\r
2781 DC6BB:  PUSH P,CHP\r
2782         PUSH P,PNTR\r
2783         PUSH P,W2\r
2784         PUSH P,R\r
2785         JRST DC1\r
2786 \r
2787 DC7:    MOVE P,SAVPDL           ;RESTORE PUSH DOWN POINTER\r
2788         MOVE T,INST\r
2789         LSH T,33                ;PUSH BINARY INTO POSITION FOR OPEVAL\r
2790         LDB R,[POINT 3,T,8]\r
2791         TLC T,700000\r
2792         TLCN T,700000\r
2793         DPB R,[POINT 10,T,12]   ;ONLY DONE FOR IO INSTRUCTIONS\r
2794         JRST CPOPJ1             ;SYMBOL FOUND, SKIP RETURN\r
2795 \r
2796 DC8:    TRO F,ITF               ;SET INSTRUCTION TYPED FLAG\r
2797         MOVEI T,133(T)\r
2798         PUSHJ P,TOUT            ;OUTPUT A LETTER\r
2799         CLEARM SPSAV            ;SO $D WONT TRY TO DELETE OP CODES\r
2800         JRST DC1\r
2801 \fLIT\r
2802 \r
2803 \r
2804 PS:     BLOCK LPDL\r
2805 \r
2806 \r
2807 DDTEND:         ;ONLY STARTING ADDRESS FOR FILDDT\r
2808                 ;NO START EDDRESS FOR EXEC OR USER DDT\r
2809                 ;BECUASE MONITOR IS LOADED WITH BOTH EXEC AND USER DDTS\r
2810                 ;BUT STILL WANTS TO BE STARTED AT ITS OWN STARTING ADDRESS\r
2811                 ;USER DDT IS LOADED LAST. - T.H.\r
2812 IFN EDDT&10,<END DDT>\r
2813         END                                                                                                                                                                                                                                                                                                                                                                                                                    \r