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