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