Consolidate license copies
[its.git] / system / ddt.51
1 ;-*-MIDAS-*-
2 ;;; Copyright (c) 1999 Massachusetts Institute of Technology
3 ;;;
4 ;;; This program is free software; you can redistribute it and/or
5 ;;; modify it under the terms of the GNU General Public License as
6 ;;; published by the Free Software Foundation; either version 3 of the
7 ;;; License, or (at your option) any later version.
8 ;;;
9 ;;; This program is distributed in the hope that it will be useful,
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 ;;; General Public License for more details.
13 ;;;
14 ;;; You should have received a copy of the GNU General Public License
15 ;;; along with this program; if not, write to the Free Software
16 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18
19 subttl ddt conditional assembly
20
21 define setf text,flg
22 ifdef flg,.stop
23 .tag foobar 
24 printc "text
25 flg="
26 .ttymac flag
27 .ttyflg==.ttyflg+1
28 printx/flag
29 /
30 .ttyflg==.ttyflg-1
31 ifse flag,YES,flg==1
32 ifse flag,NO,flg==0
33 ifse flag,Y,flg==1
34 ifse flag,N,flg==0
35 ifndef flg,flg==flag
36 termin
37 ifndef flg,.go foobar
38 termin
39
40 setf [CPU (0 KA, 1 KI, 2 KL, 3 KS)]cpusw   ;KI not supported
41         define ka
42         ife cpusw!termin
43         define ki
44         ife cpusw-1!termin
45         define kl
46         ife cpusw-2!termin
47         define ks
48         ife cpusw-3!termin
49
50 setf 340?,dpysw         ;0 no display
51                         ;1 340 display
52         define nodpy
53         ife dpysw!termin
54         define dpy340
55         ife dpysw-1!termin
56
57 setf Number of disks? (0 no swapping and file system goodies),ndsk
58         define swap
59         ifn ndsk!termin
60         define noswap
61         ife ndsk!termin
62         swap,lowlen==2200       ;disk routines take a little extra room
63
64 setf [Type of disk? (0 none, 1 Systems Concepts, 2 RP-10, 3 RH-10)]dsksw
65         define nodsk
66         ife dsksw!termin
67         define scdsk
68         ife dsksw-1!termin
69         define rp10
70         ife dsksw-2!termin
71         define rh10
72         ife dsksw-3!termin
73
74 ifndef moby,    moby==740000    ;256k ddt (memsiz-40000)
75 ifndef lowlen,  lowlen==1000    ;size of low code
76 setf Old Type Data Products Line Printer?,lptp
77 ;setf [Assemble for MACDMP? (If no, DSKDMP)]mcdmpf
78 MCDMPF==0
79 ;setf One Proceed?,1PRSW                ;DOESN'T WORK!
80 1PRSW==0
81 \f
82 subttl assignments and definitions
83
84 TITLE DDT
85
86 LOC 34000+MOBY
87
88 DDT:
89
90 MEMSIZ=40000+MOBY       ;INITIAL $I-2
91 NLEVS==7        ;LENGTH OF RING BUFFER OF .
92
93 F=0     ;FLAGS
94 P=1     ;PUSH DOWN
95 R=2     ;POINTERS TO TABLES, CORE, ETC.
96 S=3
97 W=4     ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER
98 T=5     ;TRANSFER DATA
99 W1=6
100 W2=7
101 I=10    ;SWAP TYPEOUT VARIABLES BETWEEN DISPLAY AND TTY
102 A=R
103 B=S
104 C=W
105 D=T
106
107 NBP==10 ;NUMBER OF BREAK POINTS
108 PRS==4
109 LPDL==50        ;MAX LENGTH PUSH DOWN LIST
110 \f
111 KS,     .INSRT DSK:SYSTEM;KSDEFS >
112
113         ;GET DEFINITIONS OF DTE20 LOCATIONS IN LOW CORE
114 KL,     .INSRT SYSTEM; EPT >
115 KL,     SWPUA=701540,,  ;SWEEP-CACHE INSTRUCTION
116
117 IF2    LOC LOW
118
119         SQUOZE 0,DDT            ;initial symbols are for program name "DDT"
120         -NSYMS,,1
121
122 NUMSYM==1
123 IRP A,,[CLEAR,CLEARI,CLEARM
124 CLEARB,CONSZ,CONSO,DATAI,DATAO,BLKI,BLKO,CONI,CONO]
125         SQUOZE 4,A
126         A
127         NUMSYM==NUMSYM+1
128 TERMIN
129
130 MTC==340        ;magtape control
131 MTS==344        ;magtape status
132 PI==004
133
134 ka,[
135 DC0==610        ;THIS STUFF REALLY WANTS TO CONDITONALIZED ON DISK CONTROL
136 DC1==614
137 DPK==604
138 DPC==250
139
140 PTP==100        ;paper tape punch
141 PTR==104        ;paper tape reader
142 TTY==120        ;console terminal
143 LPT==124        ;line printer
144 DIS==130        ;340 display
145 DC==200         ;deselection device?
146 UTC==210        ;dectape control
147 UTS==214        ;dectape status
148
149 IRP A,,[PI,PTP,PTR,TTY,LPT,DIS,DC,UTC,UTS,DC0,DC1,DPK,MTC,MTS,DPC]
150         SQUOZE 4,A
151         <BLKI A,>-BLKI
152         NUMSYM==NUMSYM+1
153         TERMIN
154 ];ka
155
156 kl,[
157 PAG==10         ;"PAGER"
158 CCA==14         ;"CACHE SWEEPER"
159 TIM==20         ;"TIMER"
160 MTR==24         ;"METER"
161 DSK==270        ;RH10
162
163 IRP A,,[PI,PAG,CCA,TIM,MTR,MTC,MTS,DSK]
164         SQUOZE 4,A
165         <BLKI A,>-BLKI
166         NUMSYM==NUMSYM+1
167         TERMIN
168 ];kl
169
170 KS,[
171 PAG==10         ; Paging
172 .RD.==20        ; Read various kludges
173 .WR.==24        ; Write various kludges
174
175 IRP A,,[PI,PAG,.RD.,.WR.]
176         SQUOZE 4,A
177         <BLKI A,>-BLKI
178         NUMSYM==NUMSYM+1
179         TERMIN
180 ];KS
181
182 SWAP,[  SQUOZE 4,$QACT          ;DDT'S DISK-ACTIVE FLAG WORDS
183         QACT
184         NUMSYM==NUMSYM+1
185 ]
186
187 DEFINE BUST A
188         SQUOZE 4,$!A!B
189         B1ADR+A*3-3
190         NUMSYM==NUMSYM+1
191         TERMIN
192
193         SQUOZE 4,..START
194         STARTA
195         SQUOZE 4,$M
196         MSK
197         SQUOZE 4,$I
198         SAVPI
199         SQUOZE 4,DDT
200         DDT
201
202 NUMSYM==NUMSYM+4
203
204 RADIX 10.
205 REPEAT NBP+1,BUST \.RPCNT
206 RADIX 8
207
208 DEFINE INFORM A,B
209 IF1,[   PRINTX /A = B
210 /]
211         TERMIN
212
213 INFORM [INITIAL SYMS]\NUMSYM*2
214         LOC DDT-LOWLEN
215 LOWCOD: INFORM [LOWCODE]\.
216 \f
217 SWAP,[
218 .insrt ddtdsk >
219 ]
220
221 subttl display routines
222
223 dpy340,[
224 NREGS=10.
225 NUMREG=11.
226
227         ;INITIALIZE DISPLAY (CALLED UNCONDITIONALLY WHEN DDT FIRST STARTED UP)
228
229 DISINI: PUSH P,R
230         SKIPN DISON     ;SKIP IF DISPLAY ON
231         SKIPA R,CJLP1   ;JRST LLUP1
232         MOVSI R,(TRNA)
233         MOVEM R,LLUPI1
234         JUMPGE R,DISIN1 ;JUMP IF <JRST LLUP1> JUST MUNGED INTO LLUPI1
235                 ;FOLLOWING CIDING SKIPPED IF DISPLAY OFF
236         HRRZ T,ESTUT
237         SUBI T,NUMREG*<NREGS*2+1>+3
238         HRRM T,DISWD
239         MOVE R,[REPEAT 6,[35]]
240         MOVEM R,(T)
241         HRLI R,(T)
242         HRRI R,1(T)
243         BLT R,NUMREG*<2*NREGS+1>-1+1(T)
244         MOVNI R,NREGS+1
245         MOVEM R,DISCNT
246         PUSHJ P,RECYC
247         MOVEI T,DISBEG
248         MOVEM T,DISPDL
249         SETCM T,.-1
250         MOVNM T,DISACS+P
251 DISIN1: POP P,R
252         POPJ P,
253
254 DISDON: 0
255 DISPTR: 0       ;BLKO POINTER FOR DISPLAY
256 DISCC:  0
257 DISPNR: 0
258 DISON:  -1      ;DISPLAY FEATURE INITIALLY ON
259 DISWD:  -NUMREG*<2*NREGS+1>,,
260 DTOC:   IDIVI T,8       ;CANT CALL TOC OR TOUT.  SCREWS DISPLAY.
261         HRLM W1,(P)
262         SKIPE T
263         PUSHJ P,DTOC
264         HLRZ T,(P)
265         ADDI T,"0
266
267 DISAD:  PUSH P,T
268         ANDI T,177
269         CAIL T,40
270         CAILE T,132
271         JRST DISAD2
272 DISAD0: IDPB T,DISPNR
273         AOS DISCC
274         HRRI T,-10.
275         SKIPGE T
276         MOVEM T,DISCC
277         JRST POPTJ
278 \f
279
280 DISAD2: PUSH P,W1
281         CAIL T,40
282         CAILE T,140
283         JRST DISAD5
284         MOVEI W1,36
285         IDPB W1,DISPNR
286         MOVE W1,BLOBS-133(T)
287         IDPB W1,DISPNR
288         MOVEI T,35
289         POP P,W1
290         JRST DISAD0
291
292 DISAD3: MOVEI T,34
293         PUSH P,T
294         JRST DISAD0
295
296 DISAD7: PUSHJ P,DISAD3
297 DISAD4: MOVNI T,-33
298         PUSH P,T
299         JRST DISAD0
300
301 DISAD6: MOVEI T,35
302         PUSH P,T
303         JRST DISAD0
304
305 BLOBS:  53
306         52
307         54
308         46
309         51
310         50
311
312 DISAD5: PUSHJ P,DIS69
313         PUSHJ P,DTOC
314         PUSHJ P,DIS69
315         POP P,W1
316         JRST POPTJ
317
318 DIS69:  IRP X,,[36,50,35]
319         MOVEI W1,X
320         IDPB W1,DISPNR
321         TERMIN
322         POPJ P,
323 \fDISLP: AOS T,DISCNT
324         CAILE T,NREGS
325 DISBEG: MOVNI T,NREGS
326         MOVEM T,DISCNT
327         ADDI T,NREGS
328         IMULI T,NUMREG
329         ADD T,DISWD
330         HRLI T,600
331         MOVEM T,DISPNR
332         MOVEM T,DISPN1
333         MOVE R,DISCNT
334         PUSHJ P,DISAD7
335         JUMPE R,.+2
336         SOJN R,.+2
337         PUSHJ P,DISAD4
338         MOVE T,DISCNT
339         ADD T,LLOC
340         PUSH P,T
341         PUSHJ P,PAD
342         XCT "/,CRF
343         XCT CRF
344         SKIPG DISCC
345         JRST .-2
346         POP P,R
347         PUSHJ P,FETCH
348         JRST DISL1
349         PUSHJ P,CONSYM
350 DISL2:  PUSHJ P,DISAD6
351         MOVE T,DISPNR
352         TLNE T,770000
353         JRST DISL2
354         SUB T,DISPN1
355         HRREI T,-NUMREG(T)
356         JUMPL T,DISL2
357         PUSHJ P,CHECK
358         AOSE DISDON
359         JRST .-2
360         JRST DISLP
361 DISL1:  XCT "-,CRF
362         JRST DISL2
363 \fDISCFT:        SOS (P)
364         SOS (P)
365         SKIPN DISON
366         POPJ P,
367 DPYSWP: PUSH P,LLUP1
368         MOVEI 17,ACSTG(I)
369         BLT 17,ACSTG+7(I)
370         XCT DISSW(I)
371         TLC T,(CONSO#CONSZ)
372         MOVEM T,LLUPI1
373         XORI I,DIS2-DIS1
374         MOVSI 17,ACSTG(I)
375         BLT 17,7
376         POP P,LLUP1
377         POPJ P,
378
379 CHECK:  CONSO DIS,200
380         JRST CHECK1
381         BLKO DIS,DISPTR
382         PUSHJ P,RECYC
383 CHECK1: XCT LLUPI1      ;JRST LLUP1 (IF OFF) OR TRNA (ALWAYS SKIP, VALUE OF WORD NEGATIVE)
384         JRST DPYSWP
385         POPJ P,
386 RECYC:  MOVEM T,DISPTR
387         MOVEI T,40
388         SOJG T,.
389         CONO DIS,100
390         DATAO DIS,[20157,,261777]
391         MOVE T,DISWD
392         EXCH T,DISPTR
393         SETOM DISDON
394         POPJ P,
395 ];dpy340
396 \f
397 subttl ddt low code
398
399 IIN:    PUSHJ P,IN
400         CAIE T,177
401         POPJ P,
402         JRST ERR
403
404 LCT:    PUSHJ P,TSPC
405         PUSHJ P,TSPC
406 TSPC:   MOVEI T,40      ;SPACE
407         JRST TOUT
408
409 TYOI:   0
410         MOVE T,TYOI
411         LDB T,[270600+T,,-1]
412         PUSH P,TYOI
413         JRST TOUT
414
415 LISTEN: SKIPN INSW
416         PUSHJ P,TYI
417         POPJ P,
418         CAIE T,^B
419         CAIN T,^E
420         JRST TYO2
421         CAIE T,^V
422         CAIN T,^W
423         JRST TYO2
424         JRST CPOPJ1
425 \f
426 IN:     SKIPE INSW
427         JRST @INSW      ;ANOTHER IO ROUTINE PROVIDED, USE IT. (IT SHOULD POPJ 1,)
428         ILDB T,MACCR
429         JUMPN T,IN2
430         SETZM MACCR
431 dpy340,[
432         CONSO TTY,40
433         PUSHJ P,DISCFT
434         PUSHJ P,TYI
435         JFCL
436 ];dpy340
437 nodpy,[
438         PUSHJ P,TYI
439         JRST .-1
440 ];nodpy
441
442 IN2:    CAIE T,175
443         CAIN T,176
444         MOVEI T,33
445         SKIPE OUTSW(I)
446         JRST @OUTSW(I)
447         CAIL T,^I
448         CAILE T,^M
449         JRST IN3
450         SKIPE TTYFLG
451         POPJ P,
452         PUSH P,T
453         MOVEI T,15
454         PUSHJ P,TYO2
455         MOVEI T,12
456         PUSHJ P,TYO2
457 POPTJ:  POP P,T
458         POPJ P,
459
460 IN3:    PUSHJ P,TYO2
461
462 LPTR:   SKIPN LPTFLG
463         POPJ P,
464 IFN LPTP,[
465         CAIE T,15
466         JRST .+3
467         CONO LPT,10
468         POPJ P,
469         PUSH P,T
470         CAIN T,12
471         MOVEI T,440
472         CAIN T,14
473         MOVEI T,441
474         CAIN T,33
475         MOVEI T,"$
476         SUBI T,40
477 dpy340,[
478         CONSZ LPT,10
479         PUSHJ P,DISCFT
480 ];dpy340
481 nodpy,[
482         CONSZ LPT,10
483         JRST .-1
484 ];nodpy
485         DATAO LPT,T
486         POP P,T
487 ]
488         POPJ P,
489 \f
490 TOUT:
491 dpy340,[
492         SKIPE DISON     ;IF DISPLAY ON,
493         PUSHJ P,CHECK
494 ];dpy340
495 TOUT2:  SKIPE OUTSW(I)
496         JRST @OUTSW(I)
497         PUSHJ P,LPTR
498 TYO:    SKIPN TTYFLG
499         POPJ P,
500 TYO2:   CAIL T,"        ;SPACE
501         JRST TYO3
502         CAIN T,177
503         POPJ P,
504         CAIL T,^I
505         CAILE T,^M
506         CAIN T,^G
507         JRST TYO3
508         PUSH P,T
509         CAIE T,33
510         MOVEI T,"^
511         CAIN T,33
512         MOVEI T,"$
513         PUSHJ P,TYO3
514         POP P,T
515         CAIN T,33
516         POPJ P,
517         TRO T,100
518         PUSHJ P,TYO3
519         TRZ T,100
520         POPJ P,
521
522 TYO3:
523 ka,[
524         CONSZ TTY,20
525 dpy340, PUSHJ P,DISCFT
526 nodpy,          JRST .-1
527         DATAO TTY,T
528 ];ka
529 kl,[
530         PUSH P,T
531         ANDI T,177
532         PUSHJ P,XDTCM
533         POP P,T
534 ];kl
535 KS,[    PUSH P,T
536         ANDI T,177
537         TRO T,400               ;Set CTY-char-pending
538         MOVEM T,8CTYOT          ;Store in comm area
539         CONI T                  ;Read 8080
540         TRO T,80INT             ;Hey you! Get this!
541         CONO (T)                ;Interrupt 8080
542         SKIPE 8CTYOT            ;Wait for completion
543          JRST .-1
544         POP P,T
545 ];KS
546         POPJ P,
547
548
549 TYI:
550 ka,[
551         CONSO TTY,40
552         POPJ P,
553         DATAI TTY,T
554 ];ka
555 kl,[
556         MOVEI T,3400            ;DDT MODE INPUT REQ
557         PUSHJ P,XDTCM
558         JUMPE T,CPOPJ           ;NOTHING AVAILABLE
559 ];kl
560
561 KS,[    SKIPN T,8CTYIN          ;Chars stored here by 8080.
562          POPJ P,
563         SETZM 8CTYIN            ;Remember to clear it.
564 ];KS
565         ANDI T,177
566         CAIGE T,175
567         CAIG T,137
568         SKIPA
569         SUBI T,40       ;UPPERCASIFY
570         CAIE T,^B
571         JRST LPTON1
572         SETOM LPTFLG
573 IFN LPTP,       CONO LPT,10
574 LPTON1: CAIN T,^E
575         SETZM LPTFLG
576         CAIN T,^V
577         SETOM TTYFLG
578         CAIN T,^W
579         SETZM TTYFLG
580         JRST CPOPJ1
581
582
583 kl,[
584 XDTCM:  SETZM DTEFLG            ;SEND ARG IN T TO 11, GET RESPONSE IN T
585         MOVEM T,DTECMD
586         CONO DTE,%DBL11
587         SKIPN DTEFLG
588          JRST .-1
589         MOVE T,DTEF11
590         SETZM DTEFLG
591         POPJ P,
592 ];kl
593
594 \f
595 RESTORE:SETOM TEM3
596 RESTR1: HRRM T,SAVE
597         CLEARM SARS
598         MOVE T,SAVPI
599         HLLM T,SAVE
600         ANDI T,177      ;CHANNELS THAT WERE ON
601         IORI T,2000     ;TURN ON CHANNELS
602         MOVEM T,SAVPI
603 RES1:   HRLZI 17,AC0
604         BLT 17,17
605         SKIPL TEM3
606 CPUSHP:  PUSH BCOM
607         CONO PRS,@SAVPI
608         JRST 2,@SAVE
609
610 CRF:    JSR 15,TYOI
611 LF:     MOVEI T,12      ;LINE FEED
612         JRST TOUT
613 \f
614 ;FLOATING POINT OUTPUT
615
616 TFLOT:  MOVE A,T
617         JUMPG A,TFL1
618         JUMPE A,FP1A
619         MOVNS A
620         XCT "-,CRF
621         TLZE A,400000
622         JRST FP1A
623
624 TFL1:   TLNN A,400
625         XCT "#,CRF      ;NOT NORMALIZED
626
627 FP1:    MOVEI B,0
628         CAMGE A,FT01
629         JRST,FP4
630         CAML A,FT8
631         AOJA B,FP4
632 FP1A:   MOVEI C,0
633
634 FP3:    MULI A,400
635         ASHC B,-243(A)
636         MOVE A,B
637         CLEARM,TEM1(I)
638         PUSHJ P,FP7
639         XCT ".,CRF
640         MOVNI A,10
641         ADD A,TEM1(I)
642         MOVE W1,C
643 FP3A:   MOVE T,W1
644         MULI T,12
645         PUSHJ P,FP7B
646         SKIPE,W1
647         AOJL A,FP3A
648         POPJ P,
649
650 FP4:    MOVNI C,6
651         MOVEI W2,0
652 FP4A:   ADDI W2,1(W2)
653         XCT,FCP(B)
654         SOSA W2
655         FMPR A,@FCP+1(B)
656 FP4B:   AOJN C,FP4A
657         MOVNI B,-2(B)
658         PUSH P,B
659         PUSHJ P,FP3
660         MOVEI T,105
661         PUSHJ P,TOUT
662         POP P,T
663         DPB T,[300200,,.+1]
664         XCT "+,CRF
665         MOVE A,W2
666 \f
667 FP7:    JUMPE A,FP7A1
668         IDIVI A,12
669         AOS,TEM1(I)
670 FP7A:   HRLM B,(P)
671         JUMPE A,FP7A1
672         PUSHJ P,FP7
673
674 FP7A1:  HLRZ T,(P)
675 FP7B:   ADDI T,260
676         JRST,TOUT
677
678         1.0^32.
679         1.0^16.
680 FT8:    1.0^8
681         1.0^4
682         1.0^2
683         1.0^1
684 FT:     1.0^0
685         1.0^-32.
686         1.0^-16.
687         1.0^-8
688         1.0^-4
689         1.0^-2
690 FT01:   1.0^-1
691 FT0=FT01+1
692
693 FCP:    CAMLE A, FT0(C)
694         CAMGE A, FT(C)
695         0, FT0(C)
696
697 PS:     BLOCK LPDL
698
699 dpy340,DISPDL:  BLOCK LPDL
700
701         INFORM [END OF LOWCODE]\.-1
702 \f
703 subttl communication with DSKDMP and ITS
704
705 IF1, IFG .-LOWCOD+6-LOWLEN,.ERR LOW CODE DOESN'T FIT, MAKE LOWLEN BIGGER
706
707 LOC DDT-6
708         ALTPC           ;-6  PLACE WHERE PC TO PROCEED THROUGH IS STORED
709         -20,,AC0        ;-5  PNTR TO SAVED LOW CORE (ESPECIALLY ACS)
710 STARTA: 0               ;-4  START ADDRESS
711 KILC:   -NSYMS,,LOW     ;-3  INITIAL SYMBOLS PNTR
712         -NSYMS,,LOW     ;-2  ALL SYMBOLS PNTR
713 JOBSYM: .-1             ;-1  BIT 4.9=1 => SYMBOL TABLE CLOBBERED
714                         ;+0  DDT STARTS HERE
715
716 NSYMS==NUMSYM*2
717 LOW=LOWCOD-NSYMS-2
718
719 IFN MCDMPF,     MACDMP=37400+MOBY
720 .ELSE [
721  noswap,        MACDMP=37700+MOBY       ;FOR DSKDMP
722  swap,          IF2 MACDMP==ERR         ;if neither dskdmp nor magdmp
723 ]
724
725 MACCR=37777+MOBY
726 \f
727 subttl flag register assignments
728
729 ;LEFT HALF FLAGS
730 TIF==100000     ;TRUNCATE TO 18 BITS -  SET BY SPACE OR COMMA
731 PTF==100                ; +, -, OR * HAS BEEN TYPED
732 COMF==200000    ;COMMA FLAG
733 CTF==400
734 SF==4           ;SYLLABLE FLAG
735 QF==1           ;QUANTITY TYPED IN TO WORD ASSEMBLER
736
737 CF==40          ;ALTMODE TYPED
738 CCF==400000     ;2 ALTMODES TYPED
739 MF==2           ;MINUS SIGN TYPED IN
740 LTF==20         ;LETTER TYPED IN TO CURRENT SYLLABLE
741 ROF==10         ;REGISTER OPEN FLAG
742 STF==4000       ;! MODE
743 FAF==1000       ; < TYPED
744 SAF==2000       ; > TYPED
745
746 FPF==20000      ; . TYPED IN
747 FEF==10000      ; E FLAG
748
749 MLF==200        ;*FLAG
750 DVF==40000      ;DIVIDE FLAG
751
752 ;RIGHT HALF FLAGS
753 1RF==10
754 OUTPUT==4       ;OPDECODER FLAGS
755
756 CF1==400        ;OUTPUT 1 REGISTER AS CONSTANT
757 LF1==2000       ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT
758 Q2F==1          ;NUMBER TYPED AFTER \e
759 SBF==20
760 NAF==200        ;NEGATIVE ADDRESSES PERMISSABLE
761 POWF==4000      ;ARGUMENT FOR EXPONENT COMING
762 SLL==10000      ;STOP LOOKING FOR LOCALS
763
764 GLOBAL==040000  ;GLOBAL SYMBOL
765 LOCAL==100000
766 PNAME==740000   ;PROGRAM NAME
767 DELI==200000    ;DELETE INPUT
768 DELO==400000    ;DELETE OUTPUT
769 \f
770 subttl ddt starts here
771
772 INFORM DDT,\.
773
774
775 DDT:    CLEARM INSW     ;IF C(INSW) .NE. 0 THEN INPUT ROUTINE JRST'S @INSW
776         CLEARM OUTSW
777         JSR SAVE        ;SAVE PROCESSOR CONDITION
778         PUSHJ P,BRKRET  ;DIDN'T SKIP, PI STATUS AND AC'S WERE SAVED
779         SKIPGE JOBSYM   ;IF SYMTAB MUNGED,
780         JRST IFIX       ;THEN GO FIX IT
781 DD1A:
782 dpy340,[
783         PUSHJ P,DISINI  ;INITIALIZE DISPLAY
784 ]
785 DD1:    TLZ F,ROF       ;INDICATE NO REGISTER OPEN
786         PUSHJ P,CRF     ;TYPE CRLF (AND RUN SCOPE IF ON)
787         MOVE T,[SCHM,,SCH]
788         BLT T,ODF
789 DD2:    MOVEI P,PS
790         CLEARM PRNC     ;PARENTHESES COUNT
791 LIS:    MOVE T,ESTU
792         MOVEM T,ESTUT
793 LISA:   TDZ F,[(,-1-ROF-STF)LF1+CF1+SBF+2]      ;LEAVE REGISTER OPENED,TYPEOUT SUPPRESSED
794 LISB:   TDZ F,[(,-1-ROF-STF-FAF-SAF)NAF]
795         CLEARM,WRD
796 LIS1:   CLEARM,FRASE
797 LIS2:   MOVEI T,1
798         MOVEM T,FRASE1
799         TLZ F,MLF+DVF
800 L1:     TLZ F,CF+CCF+SF+FPF     ;TURN OFF CONTROL, SYL, PERIOD FLAG
801         CLEARM,SYL
802 L1RPR:  CLEARM,SYM
803         MOVSI T,(50*50*50*50*50*50)
804         MOVEM T,TEM(I)  ;INIT SYMBOL COUNTER
805         CLEARM,DEN
806         CLEARM,WRD2
807
808 L2:     PUSHJ P,IN      ;PICK UP CHARACTER
809         TLNE F,CF       ;CONTROL FLAG
810         JRST,L21
811         CAIG T,"Z       ;Z
812         CAIGE T,"A      ;A
813         JRST,.+2
814         JRST,LET
815 L21:    MOVE R,T
816         CAIN T,177
817         JRST WRONG
818         CAILE T,"_
819         JRST ERR
820         IDIVI R,3
821         LDB W,BDISP(R+1)
822         CAIGE W,MULT-DDT        ;LOCATIONS BEFORE MULT DON'T HAVE ARG EVALUATED
823         JRST DDT(W)
824 \f
825 L211:   MOVE T,SYL
826         TLZN F,LTF
827         JRST POWER
828 L4A:    PUSHJ P,EVAL
829         JRST,UND1
830 L4:     TLZE F,MF
831         MOVN T,T
832         TLNN F,SF
833         CAIE W,LPRN-DDT
834         JRST,.+2
835         JRST,LPRN
836
837         EXCH T,FRASE1
838         TLNN F,DVF
839         IMULB T,FRASE1
840         TLZE F,DVF
841         IDIVB T,FRASE1
842         CAIGE W,ASSEM-DDT
843         JRST DDT(W)     ;MULTIPLY OR DIVIDE
844         ADDB T,FRASE
845         CAIGE W,SPACE-DDT
846         JRST DDT(W)     ; + - @ ,
847
848         ADD T,WRD
849         TLNE F,TIF      ;TRUNCATE INDICATOR FLAG
850         HLL T,WRD       ;TRUNCATE
851         MOVEM T,WRD
852         TLNN F,QF
853         MOVE T,LWT(I)
854         CLEARM,R
855         MOVE W1,ESTUT
856         CAMN W1,ESTU
857         JRST L5
858         CAILE W,CARR-DDT
859         JRST ERR
860 L5:     CAIG W,RPRN-DDT
861         JRST DDT(W)
862         PUSH P,KILRET
863         SKIPN PRNC
864         JRST DDT(W)
865
866 UNDEF:  MOVEI T,"U      ;U
867         JRST WRONG1
868 ERR:
869 WRONG:  MOVEI T,"?
870 WRONG1: MOVEI P,PS
871         PUSHJ P,TOUT
872 RET:    MOVEI P,PS
873         PUSHJ P,LCT     ;COMMON RETURN FOR TAB;,JRST,LIS
874         JRST DD2
875 \f
876 UND1:   MOVE R,ESTUT    ;UNDEFINED SYM ASSEMBLER
877         PUSHJ P,EVAL2
878         CAIN W,ASSEM-DDT
879         TLNN F,ROF
880         JRST OPLOOK
881         LDB T,[(100)PRNC]
882         JUMPN T,UNDEF
883         CAIE W,ASSEM-DDT
884         XCT "#,CRF
885         MOVN R,[(2)2]
886         ADDB R,ESTUT
887 dpy340, PUSHJ P,DISINI
888         MOVE T,SYM
889         TLO T,GLOBAL
890         MOVEM T,(R)
891         HRRZ T,LLOCO
892         TLNE F,MF
893         TLO T,400000
894         MOVEM T,1(R)
895         SETZI T,
896         JRST L4
897
898 QUESTN: PUSHJ P,CRF     ;LIST UNDEFINED SYMBOLS
899         MOVE R,ESTU
900 QUEST1: JUMPGE R,DD1
901         MOVE T, (R)
902         SKIPA W1,ESTU
903
904 QUEST2: ADD W1,[(2)2]
905         CAME T,(W1)
906         JRST QUEST2
907
908 QUEST3: CAME R,W1
909         JRST QUEST4
910         PUSHJ P,SPT
911         PUSHJ P,CRF
912 QUEST4: ADD R,[(2)2]
913         JRST QUEST1
914
915 OPLOOK: MOVE T,OPLK1
916         MOVEI W1,SYM
917         MOVE R,[(440700)TXT]
918         PUSHJ P,SPT+1
919 OPLK1:  IDPB T,R
920 \f
921 ;OPDECODER
922
923 OPEVAL: MOVEM P,SAVPDL
924         TRZA F,OUTPUT
925 OPTYPE: TRO F,OUTPUT
926         LSH T,-27.
927         MOVEM T,INST(I)
928         MOVE T,[(440700)TXT]
929         MOVEM T,CHP
930 DEC:    TRZ F,1RF
931         CLEARB R,W1
932         MOVE W2,BTAB
933 OPDC1:  ILDB T,W2
934         CAILE T,40
935          CAIL T,73
936           SOJGE R,OPDC1
937         JUMPG R,OPDC1
938         SUBI T,40
939         JUMPE T,DECX
940         JUMPG T,DC2
941         DPB T,[(340500)PNTR]
942         TRZ T,-4
943         AOS T
944         DPB T,[(300600)PNTR]
945         TRNN F,OUTPUT
946          JRST DC6
947         LDB R,PNTR
948         JRST OPDC1
949
950 DC2:    HRREI T,-33(T)
951         JUMPL T,DECT
952         MOVE W1,T
953         IDIVI W1,3
954         MOVE W2,BTAB(W2)
955         ADDI W2,(W1)
956         JRST OPDC1
957 \f
958 DECT:   TRNE F,OUTPUT
959          JRST O1CZ
960         ILDB W1,CHP
961         CAIE W1,133(T)
962          JRST LOSE
963         JRST OPDC1
964
965 DECX:   TRNE F,OUTPUT
966          POPJ P,
967         ILDB W1,CHP
968         JUMPE W1,DC7
969 LOSE:   POP P,R
970         POP P,W2
971         POP P,PNTR
972         POP P,CHP
973 LOSE1:  AOS R
974         DPB R,PNTR
975         LDB R,PNTR
976         JUMPN R,DC6AA
977         CAME P,SAVPDL
978          JRST LOSE
979         MOVSI T,DELO    ;LOOK FOR HALF-KILLED AND DIFFERENT PROGRAMS' LOCALS
980         IORM T,SYM      ;NOTE SETTING DELO HACKS EVAL3+2 TO IGNORE PROGRAM NAMES
981         PUSHJ P,EVAL
982          JRST UNDEF     ;NOT DEFINED AT ALL
983         PUSH P,R
984         PUSHJ P,EVAL1   ;LOOK FOR DUPLICATE INSTANCES
985          XCT "',CRF     ;DIFFERENT PROGRAM SELECTED
986         CAME R,PRGM
987          XCT "",CRF     ;MULTIPLY DEFINED
988         POP P,R
989 LOSE2:  MOVEM R,PRGM    ;BACK UP TO PRECEDING PROGRAM NAME+2
990         SUB R,[2,,2]
991         MOVE W1,(R)
992         TLNE W1,PNAME
993          JRST LOSE2
994         JRST L4A        ;SELECT APPROPRIATE PROGRAM
995
996 DC6:    MOVEI R,0
997         DPB R,PNTR
998 DC6AA:  CAMN P,SAVPDL
999          JRST DC6BB
1000         LDB T,-2(P)
1001         CAME T,(P)
1002          JRST LOSE1
1003 DC6BB:  PUSH P,CHP
1004         PUSH P,PNTR
1005         PUSH P,W2
1006         PUSH P,R
1007         JRST OPDC1
1008
1009 DC7:    MOVE P,SAVPDL
1010         MOVE T,INST(I)
1011         LSH T,27.
1012         JRST L4
1013
1014 O1CZ:   TRO F,1RF
1015         MOVEI T,133(T)
1016         PUSHJ P,TOUT
1017         JRST OPDC1
1018 \f
1019 PNTR:   INST(I)
1020 CHP:    0
1021 TXT:    BLOCK 2
1022
1023 SAVPDL: 0
1024 BTAB:   FOO=44
1025 REPEAT 3,[(FOO_12.+1400)TBL
1026         FOO=FOO-14
1027 ]
1028
1029 DEFINE BARF A
1030 AWRD=AWRD+<A>_CC
1031 CC=CC-12.
1032 IFL CC,[AWRD
1033 AWRD=0
1034 CC=24.
1035 ]
1036 CLOC=CLOC+1
1037 TERMIN
1038
1039 DEFINE HACK A
1040 IRPS B,D,[A]
1041 Z="D
1042 IFE Z-">,Y!B==CLOC
1043 IF1 IFE Z-"/, BARF 1
1044 IF2 IFE Z-"/, BARF Y!B+73
1045 IFE Z-"^,BARF <B&70>_-1+B&7-1
1046 IFE <Z-40>*<Z-15>,[
1047 IRPC Q,,B
1048 Z="Q
1049 IFE Z-".,Z=100
1050 BARF Z-40
1051 TERMIN
1052 ]
1053 TERMIN
1054 TERMIN
1055 \f
1056 subttl opcode dispatch table
1057
1058 TBL:    AWRD=0
1059         CLOC=0
1060         CC=24.
1061
1062 KA,[
1063 ;INITIAL DISPATCH
1064         HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ]
1065
1066 ;BYTE AND FLOATING INST
1067         HACK [FLO> 33^ ... BYTE/ FAD A/ FSB A/ FMP A/ FDV A>
1068         21^ LMB/ R IMB/ LMB> 02^ . L>L. M>M. B>B. BYTE> 03^ .. 
1069         FS C/ IB P> P. I LD/ LD> LD B/ I DP/ DP> DP B/]
1070 ];KA
1071
1072 KL,[
1073 ;INITIAL DISPATCH
1074         HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ]
1075
1076 ;BYTE AND FLOATING INST
1077         HACK [FLO> 33^ ADJ/ D DBL/ KI/ BYTE/ FAD A/ FSB A/ FMP A/ FDV A>
1078         21^ LMB/ R IMB/ LMB> 02^ . L>L. M>M. B>B. BYTE> 03^ UFA. DFN.
1079         FS C/ IB P> P. I LD/ LD> LD B/ I DP/ DP> DP B/
1080         ADJ> 03^ . . . . . ADJSP. . .]
1081
1082 ;DOUBLE PRECISION
1083         HACK [DBL> 03^ FAD . FSB . FMP . FDV . ADD . SUB . MUL . DIV .]
1084
1085 ;MISC KI/KL INSTRS
1086         HACK [KI> 12^ DMV/ FIXEX/ DMV/ F 01^ IX R/ LT R> R .
1087         DMV> DMOV 01^ E DMV2/ N DMV2> 21^ . M/
1088         FIXEX> 01^ FIX . EXTEND .]
1089 ];KL
1090
1091 KS,[
1092 ;INITIAL DISPATCH
1093         HACK [63^ . FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ IO/ ]
1094
1095 ;BYTE AND FLOATING INST
1096         HACK [FLO> 33^ XCAD/ D DBL/ KI/ BYTE/ FAD A/ FSB A/ FMP A/ FDV A>
1097         21^ LMB/ R IMB/ LMB> 02^ . L>L. M>M. B>B. BYTE> 03^ UFA. DFN. 
1098         FS C/ IB P> P. I LD/ LD> LD B/ I DP/ DP> DP B/
1099         XCAD> 03^ . . XCTR/ XCTR/ . ADJSP. . .
1100         XCTR> XCTR 01^ I. .]
1101
1102 ;DOUBLE PRECISION
1103         HACK [DBL> 03^ FAD . FSB . FMP . FDV . ADD . SUB . MUL . DIV .]
1104
1105 ;MISC KI/KL INSTRS
1106         HACK [KI> 12^ DMV/ FIXEX/ DMV/ F 01^ IX R/ LT R> R .
1107         DMV> DMOV 01^ E DMV2/ N DMV2> 21^ . M/
1108         FIXEX> 01^ FIX . EXTEND .]
1109
1110 ;ITS KS IO INSTRUCTIONS
1111         HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
1112         IO0> 12^ . . UMV/ .
1113         UMV> UMOVE 01^ . M/
1114         IO1> IO2> 12^ IORD/ IOXX/ IOWR/ BLTX/
1115         IOXX> 01^ IORD/ IOWR> IOWR IOBY/
1116         IORD> IORD IOBY> 41^ IOIQ/ B IOIQ> 02^ I/ Q. . .
1117         BLTX> 41^ BLTXX/ . BLTXX> BLT 01^ BU. UB.]
1118
1119 ;DEC KS IO INSTRUCTIONS
1120 ;       HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
1121 ;       IO0> 12^ . . UMV/ .
1122 ;       UMV> UMOVE 01^ . M/
1123 ;       IO1> IO2> 03^ TIO/ TIO/ RD IOB/ WR IOB/ BS IOB/ BC IOB/ . .
1124 ;       TIO> TIO 01^ E IOBP/ N IOBP/
1125 ;       IOB> IO IOBP> 41^ . B/ ]
1126
1127 ];KS
1128
1129 ;FWT, FIXED POINT ARITH, MISC.
1130         HACK [HAK> 33^ MV/ MV> MOV MO/ ML/ DV/ SH/ H1/ JP/
1131         21^ ADD IMB/ SU BIMB> B IMB> 02^ . I>I. M/ B/ MO> 22^
1132         EIMS> E IMS/ S IMS/ N IMS/ M IMS> 02^ . I/ M/ S> S. 
1133         ML> 21^ I ML1/ ML1> MUL IMB/ DV> 21^ I DV1/ DV1>
1134         DI DV2> V IMB/ H1> 03^ EXC S3/ BL T> T. AO/ AO> AOBJ
1135         AOB/ JRS T/ JFC L/ XC T/ . AOB> 01^ P/ N/
1136         JP> 03^ PU/ PU> PUSH PUS/ PO/ PO> POP POP/ JSR. 
1137         JS P/ JS PA> A. JR PA/ PUS> 01^  J> J.. POP>
1138         01^ . J/  SH> 02^ A S2/ ROT S1/ L S2> S S3> H S1/ 21^ JFFO. CIR C/ 
1139         S1> 21^ . C> C. ]
1140
1141 ;ARITH COMP, SKIP, JUMP
1142         HACK [ACCP> 42^ CA CA1/ SJ/ A JS/ S JS> O 31^
1143         J COMP/ S COMP/ CA1> 31^ I COMP/ M COMP/
1144          SJ> 31^ JUM PSJ/ SKI PSJ> P COMP>
1145         03^ . L/ E> E. L E/ PA/ G E/ N> N. G. ]
1146
1147 ;BOOLEAN
1148         HACK [BOOLE> 24^ ST/ AN> AND B2/ AN/ ST/ AN/ ST/
1149         X OR> OR B2/ I OR/ AN/ EQ DV2/ ST/ OR/ ST/ OR/ OR/
1150         ST> SET B2> 24^ Z IMB/ IMB/ CA> C TA/ TM> M IMB/
1151         CM> C TM/ TA> A IMB/ IMB/ IMB/ CB> C BIMB/ IMB/ CA/
1152         CA/ CM/ CM/ CB/ O IMB/ ]
1153
1154 ;HALF WORDS
1155         HACK [HWT> 51^ HW1/ 21^ R HW2/ L HW2> R HW3/ HW1>
1156         21^ L HW4/ R HW4> L HW3> 32^ IMS/ Z IMS/ O IMS/
1157         EIMS/ ]
1158
1159 ;TEST INST
1160         HACK [ACBM> 31^ AC1/ 01^ D AC2/ S AC2/ AC1> 01^ R AC2/ L 
1161         AC2> 42^ N EAN/ Z EAN/ C EAN/ O EAN> 12^ . E/ PA/ N/ ]
1162
1163 IFN AWRD,AWRD
1164 \f
1165 subttl command action routines
1166
1167 NUM:    ANDI T,17       ;T HOLDS CHARACTER
1168         TLNE F,CF+FPF
1169         JRST NM1
1170         MOVEI W,10
1171         IMULM W,SYL
1172         ADDM T,SYL
1173         MOVEI W,10.     ;ALSO MAINTAIN DECIMAL WORD
1174         IMULM W,DEN
1175         ADDM T,DEN
1176 LE1:    AOJA T,LE1A     ;FOR SQUOZE SYM
1177
1178 DOLLAR:
1179 PERC:   MOVEI T,47+101-13-45(T) ;PERCENT SIGN
1180 LET:    TLC F,SF+FPF    ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
1181         TLZN F,LTF+FEF+SF+FPF
1182         CAIE T,"E
1183         TLOA F,LTF
1184         TLOA F,FEF
1185         JRST LET1
1186         TLZN F,MF
1187         SKIPA W1,SYL
1188         MOVN W1,SYL
1189         MOVEM W1,FSV
1190         CLEARM DEN
1191 LET1:   SUBI T,101-13   ;FORM RADIX 50 SYMBOL
1192 LE1A:   TLO F,SF+QF
1193 LE2:    MOVEI W,50
1194         EXCH W,TEM(I)
1195         IDIVM W,TEM(I)
1196         IMUL T,TEM(I)
1197         ADDM T,SYM
1198         JRST L2
1199
1200 NUM1:   EXCH T,WRD2     ;FORM NUMBER AFTER DOLLAR SIGN
1201         IMULI T,10.
1202         ADDM T,WRD2
1203         TRO F,Q2F
1204         JRST,L2
1205 \f
1206 NM1:    TLNE F,CF
1207         JRST NUM1
1208         MOVEI W1,6      ;FORM FLOATING POINT NUMBER
1209         AOS NM1A
1210 NM1A:   MOVEI W2,0
1211         MOVSI R,201400
1212 NM1A1:  TRZE W2,1
1213         FMPR R,FT(W1)
1214         JUMPE W2,NM1B
1215         LSH W2,-1
1216         SOJG W1,NM1A1
1217 NM1B:   MOVSI W1,211000(T)
1218         FMPR R,W1       ;COMPUTE VALUE OF NEW DIGIT
1219         FADRB R,FH      ;ADD VALUE INTO FLOATING NO.
1220 REPEAT 0,[      ;I THINK THIS HAIRY ROUNDING IS UNNEC.  ALSO KL HAS NO "FMPL".
1221         FMPL R,W1
1222         SKIPN FH
1223         JRST NM1C
1224         LDB W2,[(331000)R]
1225         LDB W1,[(331000)FH]
1226         TLZ R,377000
1227         SUB W2,W1
1228         ASHC R,(W2)
1229         ADD S,FL
1230         TLZE S,400000
1231         AOS R
1232         MOVE W2,FH
1233         TLZ W2,377000
1234         ADD R,W2
1235         TLNN R,1000
1236         SOSA W1
1237         ASHC R,-1
1238         FSC R,1(W1)
1239 NM1C:   MOVEM R,FH
1240         MOVEM S,FL
1241         JUMPE R,NM1D
1242         TLNE S,200000
1243         AOS R   ; ROUND
1244         TLO R,400       ; NORMALIZE
1245 NM1D:
1246 ]               ;END REPEAT 0
1247         MOVEM R,SYL
1248         AOJA T,LE1A
1249 \f
1250 POWER:  TLNN F,FEF
1251         JRST L4 ;NO EXPONENT
1252         CAIE W,PLUS-DDT
1253         CAIN W,MINUS-DDT
1254         TROE F,POWF
1255         TRZA F,POWF
1256         JRST DDT(W)     ; E+-
1257
1258         MOVE W2,DEN
1259         MOVEI W1,FT-1
1260         TLZE F,MF
1261         MOVEI W1,FT01
1262         SKIPA T,FSV
1263 POW2:   LSH W2,-1
1264         TRZE W2,1
1265         FMPR T,(W1)
1266         JUMPE W2,L4
1267         SOJA W1,POW2
1268
1269 PERIOD: MOVE T,LLOC
1270         TLNE F,SF       ;SYLLABLE STARTED
1271         MOVE T,DEN
1272         MOVEM T,SYL
1273         TLON F,FPF+SF+QF
1274         MOVEI T,0
1275         IDIVI T,400
1276         SKIPE T
1277         TLC T,243000
1278         TLC W1,233000
1279         FSC T,0         ;NORMALIZE
1280         FSC W1,0
1281         FADR T,W1
1282 REPEAT 0,[              ;I THINK THIS DOUBLE PRECISION IS UNNEC.  ALSO KL HAS NO "FADL"
1283         FADL T,W1
1284         MOVEM W1,FL
1285 ]               ;END REPEAT 0
1286         MOVEM T,FH
1287         HLLZS NM1A
1288         MOVEI T,45      ;RADIX 50 PERIOD
1289         JRST LE2
1290
1291 QUAN:   SKIPA T,LWT(I)  ;LAST QUANTITY TYPED
1292 PILOC:  MOVEI T, SAVPI
1293 QUAN1:  MOVEM T,SYL
1294 QUAN2:  TLO F,SF+QF     ;WRD,SYL STARTED
1295         TLZ F,CF+CCF
1296         JRST,L2
1297
1298 CONTROL:        TLOE F,CF
1299         TLO F,CCF
1300         JRST,L2
1301 \f
1302 EVAL:   MOVE R,PRGM     ;LOOK UP SYMBOL
1303 EVAL0:  HRLOI W1,37777+DELI     ;W1 BITS MUST BE OFF
1304         JRST EVAL3
1305
1306 EVAL1:  ADD R,[(2)2]    ;NEXT SYMBOL
1307 EVAL2:  SKIPL R
1308          MOVE R,@JOBSYM ;WRAP AROUND
1309         CAMN R,PRGM     ;SKIP UNLESS SCANNED ENTIRE SYMBOL TABLE
1310          POPJ P,        ;NO SYMBOL FOUND
1311 EVAL3:  MOVE T,(R)
1312         XOR T,SYM
1313         TLNN T,PNAME    ;SKIP UNLESS SYMBOL IS PROGRAM NAME
1314          TLOA W1,LOCAL  ;PROGRAM NAME, FROM NOW ON IGNORE LOCALS
1315           TDNE T,W1
1316            JRST EVAL1   ;PROGRAM NAME OR NO MATCH, TRY NEXT
1317         TLNN T,340000
1318          JRST EVAL1     ;PROGRAM NAME, SKIP IT (CAN HAPPEN IF GOT HERE FROM LOSE1)
1319         MOVE T,1(R)     ;GOT IT, RETURN VALUE IN T, SYMBOL TABLE PNTR IN R.
1320
1321 CPOPJ1: AOS (P)         ;FOUND SYMBOL, SKIP
1322 CPOPJ:  POPJ P,
1323
1324
1325 ;BIT 40 - DELETE OUTPUT
1326 ; 20 - DELETE INPUT
1327 ; 10 - LOCAL
1328 ; 04 -GLOBAL
1329 ; NO BITS - PROGRAM NAME
1330 \f
1331 KILL:   TLNN F,LTF      ;DELETE SYMBOLS
1332         JRST,KILLA
1333         PUSHJ P,EVAL
1334         JRST KILL1
1335         MOVEI T,DELO_-16.       ;DELETE OUTPUT
1336         TLNE F,CCF
1337         MOVEI T,DELI_-16.       ;NO INPUT OR OUTPUT
1338         DPB T,[(420200+R)]
1339 KILRET: JRST,RET
1340
1341 KILLA:  TLNN F,QF
1342         TLNN F,CCF
1343         JRST ERR
1344         MOVE R,KILC
1345         MOVEM R,@JOBSYM ;RESTORE INIT SYMS
1346         HRRZM R,ESTU
1347         MOVEM R,PRGM
1348         HRLZI T,DELO+DELI
1349         ANDCAM T,(R)    ;GET RID OF DELETE BITS IN INITIAL TABLE
1350         AOBJN R,.+1
1351         AOBJN R,.-2
1352         JRST,DD1
1353
1354 KILL1:  MOVE R,ESTU     ;REMOVE UNDEFINED SYMS
1355         JUMPGE R,UNDEF
1356 KILL2:  PUSHJ P,EVAL0
1357         JRST RET
1358         PUSHJ P,REMUN
1359         JRST KILL2
1360
1361 REMUN:  MOVE S,[(2)2]   ;REMOVE ONE UNDEFINED SYM
1362         ADDB S,ESTU
1363         MOVE W,-2(S)
1364         MOVEM W,(R)
1365         MOVE W,-1(S)
1366         MOVEM W,1(R)
1367         POPJ P,
1368
1369 DS:     MOVE R,DSSAV(I)
1370         MOVEI T,DELO_-16.
1371         DPB T,[(420200+R)]
1372         MOVE T,1(R)
1373         PUSHJ P,LOOK
1374         JRST RET
1375         JRST RET
1376 \f
1377 TAG:    TLNE F,CF       ;DEFINE SYMBOL AS OPEN REGISTER
1378         JRST SETNAM
1379         MOVE W,LLOCO
1380         HRRZM W,DEFV
1381         TLOE F,FAF
1382         JRST ERR
1383 DEFIN:  TLNE F,FAF
1384         TLNN F,LTF
1385         JRST ERR
1386 ADEFIN: PUSHJ P,EVAL
1387         JRST DEF1
1388         CAMGE R,KILC
1389         JRST DEF2       ;REDEFINE
1390         MOVEI T,DELI_-16.
1391         DPB T,[(420200+R)]
1392 DEF1:   MOVN R,[(2)2]
1393         ADDB R,@JOBSYM
1394         HRRZ T,ESTU
1395         SUBI T,2
1396         HRL T,ESTU
1397         HRRM T,ESTU
1398         SKIPGE ESTU
1399         BLT T,-1(R)
1400 dpy340, PUSHJ P,DISINI
1401 DEF2:   MOVE T,DEFV
1402         MOVEM T,1(R)
1403         MOVSI T,GLOBAL
1404         IORB T,SYM
1405         MOVEM T,(R)
1406         MOVE R,ESTU
1407
1408 DEF3:   JUMPGE R,RET    ;PATCH IN UNDEFINED SYM
1409         MOVE T,SYM
1410         CAME T,(R)
1411         JRST DEF4
1412         MOVE S,DEFV
1413         SKIPGE 1(R)
1414         MOVNS S
1415         PUSH P,R
1416         MOVE R,1(R)
1417         PUSHJ P,FETCH
1418         JRST ERR
1419         ADD S,T
1420         HRRM S,T
1421         PUSHJ P,DEP
1422         POP P,R
1423         PUSHJ P,REMUN
1424 DEF4:   ADD R,[(2)2]
1425         JRST DEF3
1426
1427 ;DISK COMMANDS HERE SO NO EVAL ARG
1428
1429 SWAP,[
1430 LISTF0: JRST LISTF
1431
1432 LOAD0:  JRST LOAD
1433
1434 DUMP0:  JRST DUMP
1435 ];SWAP
1436
1437 NOSWAP,[
1438 LISTF0==ERR
1439 LOAD0==ERR
1440 DUMP0==ERR
1441 ];NOSWAP
1442 \f
1443 SETNAM: MOVE R,@JOBSYM
1444 SET2:   JUMPGE R,UNDEF
1445         MOVE T,(R)
1446         ADD R,[(2)2]
1447         CAME T,SYM
1448         JRST SET2
1449         MOVEM R,PRGM
1450         JRST RET
1451
1452 MULT:   TLOA F,PTF+MLF  ;*
1453 DIVD:   TLO F,DVF+PTF   ;SINGLE QUOTE
1454         JRST L1
1455
1456 ASSEM:  JRST PLUS       ;#
1457 MINUS:  TLO F,MF
1458 PLUS:   TLO F,PTF
1459         JRST LIS2
1460
1461 LPRN:   CAML P,[(LPDL-32)]
1462         JRST,ERR
1463         PUSH P,F        ;RECURSE FOR OPEN PAREN
1464         PUSH P,WRD
1465         PUSH P,FRASE
1466         PUSH P,FRASE1
1467         AOS,PRNC
1468         JRST,LISA
1469
1470 INDIRECT:       MOVSI W,(@)
1471         IORB W,WRD
1472         TLO F,QF
1473         JRST,LIS2
1474
1475 ACCF:   TLNN F,COMF
1476         HRRM T,COMWD    ;COMMA
1477         MOVE R,T
1478         HLLZS T
1479
1480         LDB W1,[(331100)WRD]    ; Get top 9 bits of opcode
1481         LSH R,27                ; Shift into AC field
1482         CAIN W1,700             ; Old-style IO instruction?
1483          LSH R,1                ; Yes:  Shift into device field
1484
1485 ;Used to be:
1486 ;       LDB W1,[(410300)WRD]
1487 ;       IDIVI W1,7
1488 ;       LSH R,27(W1)
1489
1490         ADD T,R
1491         ADD T,WRD
1492         TLOE F,COMF
1493 COMWD:  HRLI T,.
1494         MOVEM T,WRD
1495         JRST SPACE+1
1496
1497 SPACE:  TLNE F,QF
1498         TLO F,TIF
1499 SPAC1:  TLZ F,MF+PTF
1500         JRST,LIS1
1501 \f
1502 RPRN:   MOVS T,WRD      ;)
1503         SOSGE,PRNC
1504         JRST,ERR
1505         POP P,FRASE1
1506         POP P,FRASE
1507         POP P,WRD
1508         POP P,F
1509         TLO F,QF
1510         TLNE F,PTF
1511         TLOE F,SF
1512         JRST,RPRN1
1513         MOVEM T,SYL
1514         JRST,L1RPR
1515 RPRN1:  ADDB T,WRD
1516         JRST,L1RPR-1
1517 \f
1518 VARRW:  SOSA LLOC       ;^
1519 TAB:    PUSHJ P,PLOC
1520 LI1B:   SOS LLOC
1521
1522 LINEF:  PUSHJ P,DEPRA   ;NEXT REGISTER
1523         TLZN F,CF
1524         JRST LI0
1525 LI1A:   MOVE R,PLCR     ;MOVE BACK IN RING BUFFER
1526         MOVE T,LOCBF(R)
1527         SOSGE R
1528         MOVEI R,NLEVS-1
1529         MOVEM R,PLCR
1530         HRRZM T,LLOC
1531         JRST DDT(W)
1532 LI0:    PUSHJ P,CRF
1533         AOS T,LLOC
1534 LI1:    HRRZM T,LLOC
1535         HRRZM T,LLOCO
1536         PUSHJ P,PAD
1537         MOVEI T,"/      ;SLASH
1538         TLNE F,STF
1539         MOVEI T,"!      ;EXCLAMATION MARK
1540         PUSHJ P,TOUT
1541 LI2:    TLZ F,ROF
1542         PUSHJ P,LCT
1543         MOVE R,LLOCO
1544         PUSHJ P,FETCH
1545         JRST ERR
1546         TLO F,ROF
1547         TLNE F,STF
1548         JRST DD2
1549         JRST CONSYM
1550
1551
1552 CARR:   PUSHJ P,DEPRA
1553         MOVEI W,LI1B-DDT
1554         TLZE F,CF
1555         JRST LI1A
1556         JRST DD1
1557 \f
1558 OCON:   TROA F,LF1+CF1  ;OPEN AS CONSTANT
1559 OSYM:   TRZ F,CF1       ;OPEN SYMBOLICALLY
1560         TROA F,LF1
1561 SLASH:  TLZ F,STF       ;TYPE OUT REGISTER
1562         TLZE F,CF       ;ALTMODE SLASH SUPPRESSES TYPEOUT
1563          TLO F,STF
1564         TLNE F,QF
1565         PUSHJ P,PLOC    ;QUANTITY TYPED
1566 SLAS1:  HRRZM T,LLOCO
1567         JRST LI2
1568
1569 ICON:   TLZE F,CF
1570         JRST IKON
1571         PUSHJ P,DEPRA   ;\
1572         JRST SLAS1
1573
1574 PLOC:   CAMN T,LLOC
1575         POPJ P,
1576         AOS R,PLCR      ;ADVANCE RING POINTER
1577         CAIL R,NLEVS
1578         CLEARB R,PLCR
1579         EXCH T,LLOC
1580         MOVEM T,LOCBF(R)
1581         MOVE T,LLOC
1582         HRRZS LLOC
1583         POPJ P,
1584
1585 ASLASH: TLNN F,QF
1586         JRST QUESTN
1587         PUSH P,T
1588         MOVEI T,"/
1589         PUSHJ P,TOUT
1590         POP P,T
1591         JRST SLASH
1592
1593 IKON:   MOVEM T,LWT(I)
1594         PUSHJ P,EFFEC0
1595         JRST ERR
1596         MOVE R,T
1597         PUSHJ P,FETCH
1598         JRST ERR
1599         JRST OVRD2
1600 \f
1601 DEPRA:  TLNE F,ROF      ;IF REGISTER IS BEING CHANGED
1602         TLNN F,QF       ;REMOVE ALL PREVIOUS UNDEFINED
1603         JRST DEPRS      ;SYMBOL REFERENCES TO IT
1604         MOVE R,ESTU
1605         MOVEM W1,ESTU
1606 DEPRA2: JUMPGE R,DEPRS
1607         HRRZ W,1(R)
1608         CAMN W,LLOCO
1609         PUSHJ P,REMUN
1610         ADD R,[(2)2]
1611         JRST DEPRA2
1612
1613 EQUAL:  TROA F,LF1+CF1  ;=
1614 PSYM:   TRZ F,CF1       ;@
1615         TRO F,LF1
1616         JRST CONSYM
1617
1618 R50PNT: MOVEM T,LWT(I)  ;AMPERSANT
1619         LSH T,-36
1620         TRZ T,3
1621         PUSHJ P,TOC
1622         PUSHJ P,TSPC
1623         MOVEI W1,LWT(I)
1624         JRST SPT
1625
1626 HWRDS:  MOVEI R,HLFW-TFLOT      ;H
1627 SFLOT:  ADDI R,TFLOT-SATP       ;F
1628 RATP:   ADDI R,SATP-IASCO       ;T
1629 ASCSET: ADDI R,IASCO-ISIXO      ;"
1630 SIXSET: ADDI R,ISIXO-PIN        ;'
1631 SYMBOL: ADDI R,PIN-FTOC ;S
1632 CON:    ADDI R,FTOC     ;C
1633         JSP W,SET
1634
1635 RELA:   TLZE F,QF       ;R
1636         JRST,BASECH
1637         MOVEI R,PADSO-TOC
1638 ABSA:   ADDI R,TOC      ;A
1639         JSP W,SET
1640
1641 BASECH: SOJLE T,ERR     ;CHANGE RADIX
1642         MOVEI R,1-10.(T)
1643 SDEC:   ADDI R,2        ;D
1644 SOCT:   ADDI R,10       ;O
1645         JSP W,SET
1646
1647 SET:    MOVEI W,-RELA(W)
1648         IDIVI W,5
1649         HRRZM R,SCH(W)
1650         JUMPGE F,LIS1
1651         HRRZM R,SCHM(W)
1652         JRST RET
1653 \f
1654 GO:     HRLI T,(JRST)
1655         TLC F,QF+CCF
1656         TLCN F,QF+CCF
1657          MOVEM T,STARTA
1658         TLOE F,QF
1659          JRST XEC0
1660         SKIPE T,STARTA
1661
1662 XEC:    TLNN F,QF       ;X
1663          JRST ,ERR
1664 XEC0:   MOVEM T,TEM
1665         SETZM ALTPC
1666         PUSHJ P,CRF
1667         PUSHJ P,TTYLEV
1668         PUSHJ P,INSRTB
1669 KS,[    ;Compensate for DEC brain death: XCT of JRST 2, gets wrong flags
1670         MOVE T,TEM
1671         LSH T,-33
1672         CAIE T,JRST_-33
1673          JRST XECKS
1674         JSP T,RESTORE
1675         JRST TEM
1676
1677 XECKS:
1678 ];KS
1679         JSP T,RESTORE
1680         XCT TEM
1681 XEC1:   JRST DDT        ;USED BY BCOM
1682         JSR SAVE
1683         PUSHJ P,BRKRET
1684         PUSHJ P,CRF
1685         JRST DD1
1686
1687 DQUOTE: TLNE F,CF       ;IF ALTMODE TYPED,
1688          JRST DQOT2     ;THEN SET TYPEOUT MODE
1689         MOVEM T,LWT(I)  ;DOUBLE QUOTE
1690                 ;DISPATCH ENTRY FOR IN DOUBLEQUOTE MODE
1691 IASCO:  SETZM TEM2
1692         MOVE W1,T
1693         TDNE W1,[-200]  ;SKIP IF ONLY ONE CHARACTER IN WORD
1694         JRST TEXO1
1695         LSH W1,1        ;THEN ASSUME IT'S RIGHT JUSTIFIED
1696 TEXO1:  MOVEI T,0
1697 TEXO10: JUMPE W1,CPOPJ
1698 TEXO11: LSHC T,7
1699 TEXO12: SKIPN TEM2
1700         JUMPE T,TEXO1
1701         SETOM TEM2
1702         PUSHJ P,TOUT
1703         JRST TEXO1
1704
1705 SQUOTE: TLNE F,CF       ;IF ALTMODE TYPED
1706          JRST SQOT2     ;THEN SET TYPEOUT MODE
1707         MOVEM T,LWT(I)  ;SINGLE QUOTE
1708                 ;DISPATCH ENTRY FOR IN SINGLEQUOTE MODE
1709 ISIXO:  MOVE W1,T
1710 SIXO1:  MOVEI T,0
1711         JUMPE W1,CPOPJ
1712         LSHC T,6
1713         JUMPE T,SIXO1
1714         ADDI T,40
1715         PUSHJ P,TOUT
1716         JRST SIXO1
1717
1718                 ;ENTRY FROM ALTMODE DOUBLEQUOTE
1719 DQOT2:  TRZN F,Q2F      ;IF NUMBER NOT TYPED AFTER ALTMODE,
1720          JRST ASCSET    ;THEN SET TYPEOUT MODE
1721         MOVSI W1,440700 ;OTHERWISE, DO ASCII TYPEIN
1722         HLLZS SASEM
1723         JRST ISTRING
1724
1725                 ;ENTRY FROM ALTMODE SINGLEQUOTE
1726 SQOT2:  TRZN F,Q2F      ;IF NUMBER NOT TYPED AFTER ALTMODE
1727          JRST SIXSET    ;THEN SET TYPEOUT MODE
1728         MOVEI W1,40     ;OTHERWISE, DO ASCII TYPEIN
1729         HRRM W1,SASEM
1730         MOVSI W1,440600
1731
1732 ISTRING:
1733         MOVE T,WRD2     ;SO \e1" DOES RIGHT THING
1734         MOVEM T,TEM
1735 ISTR1:  PUSHJ P,IIN
1736         CAIN T,33
1737          JRST ISTR2
1738         CAIN T,^Q
1739          PUSHJ P,IN
1740         PUSHJ P,SASEM
1741         JRST ISTR1
1742
1743 ISTR2:  MOVE T,TEM
1744         SETZM WRD2
1745         JRST MASK2
1746
1747 SASEM:  SUBI T,0                ;CLOBBERED TO 0 OR 40
1748 SASME:  HRRI W1,TEM
1749         IDPB T,W1
1750         POPJ P,
1751 \f
1752 ;ALTMODE V
1753
1754 DISF:
1755 dpy340,[
1756         SETCMM DISON    ;COMPLEMENT STATUS FLAG
1757         JRST DISINI     ;INITIALIZE DISPLAY AND RETURN
1758 ];dpy340
1759 nodpy,  POPJ P,
1760
1761 BP0:    REPEAT NBP+1,[
1762         0
1763         JSA T, BCOM
1764         0
1765 ]
1766 IFN 1PRSW,[
1767 TBP1:   0 ? JSA T,BCOM ? 0      ;TEMPORARY BREAK 1
1768 TBP2:   0 ? JSA T,BCOM ? 0      ;TEMPORARY BREAK 2
1769 ];1PRSW
1770
1771 BP1=BP0+3
1772 B1INS=BP1+2
1773 BPN=.-3
1774
1775         ;BREAKPOINT 0 LIKE OTHERS EXCEPT DOESN'T GET CHECKED ON LOC$B OR CLEARED BY $B
1776
1777 BCOM:   0
1778         HRRM T,LEAV
1779         MOVEI T,B1SKP-B1INS(T)
1780         HRRM T,BCOM3    ;CONDITIONAL BREAK SETUP
1781         MOVEI T,B1CNT-B1SKP(T)
1782         HRRM T,BCOM2    ;PROCEDE COUNTER SETUP
1783         MOVE T,BP1-B1CNT(T)
1784         HLLM T,LEAV1    ;SAVE FLAGS FOR RESTORING
1785         EXCH T,BCOM     ;RESTORE FORMER CONTENTS OF ACCUMULATOR
1786
1787 BCOM3:  SKIPE B1SKP     ;ADDRESS MODIFIED, POINTS TO CONDITIONAL BPT INSTRUCTION
1788         XCT @.-1
1789 BCOM2:  SOSG B1CNT      ;ADDRESS MODIFIED, POINTS TO COUNT OF CURRENT BPT
1790         JRST BREAK
1791
1792         MOVEM T,AC0+T
1793         LDB T,[(331100)@LEAV]
1794         CAIL T,264      ;JSR
1795         CAILE T,266     ;JSA,JSP
1796         TRNN T,700      ;UUO
1797         JRST PROC1
1798         CAIE T,260      ;PUSHJ
1799         CAIN T,256      ;XCT
1800         JRST PROC1
1801         MOVE T,AC0+T
1802         JRST 2,@LEAV1   ;RESTORE FLAGS AND JUMP TO .+1
1803
1804 LEAV:   XCT B1INS       ;ADDRESS MODIFIED
1805         JRST @BCOM
1806         AOS BCOM
1807         JRST @BCOM
1808
1809 LEAV1:  LEAV
1810 \f
1811 BREAK:  JSR SAVE
1812         PUSHJ P,BRKRET
1813         SOS T,BCOM3
1814         HRRZS T
1815 IFN 1PRSW, CAIGE T,TB1ADR
1816         PUSHJ P,PADSO
1817         MOVEI T,">
1818         PUSHJ P,TOUT
1819         SKIPG @BCOM2
1820         PUSHJ P,TOUT    ;TYPE OUT SECOND ">" IF COUNT EXHAUSTED
1821         MOVE T,BCOM
1822         HLLM T, SAVPI
1823         MOVEI T,-1(T)
1824         PUSHJ P,PAD
1825         HRRZ T,@BCOM3
1826         HRRM T,PROC0
1827         HLRZ T,@BCOM3
1828         JUMPE T,BREAK1
1829         PUSHJ P,LCT
1830         HLRZ T,@BCOM3
1831         PUSHJ P,PLOC
1832         PUSHJ P,LI1
1833 BREAK1: HRRZ R,BCOM3
1834         SUBI R,B1ADR
1835         IDIVI R,3
1836         MOVEI S,1
1837         LSH S,1(R)
1838         TDNN S,AUTOPI
1839         JRST RET
1840         PUSHJ P,LISTEN
1841         JRST PROCD1
1842         JRST RET
1843
1844 PROCEDE:
1845         SKIPN T,ALTPC           ;TURN INTO <ALT>G?
1846          JRST PROCD0
1847         MOVEM T,ALTPC1          ;YES
1848         MOVE T,[JRST 2,@ALTPC1]
1849         JRST XEC0
1850
1851 PROCD0: TLNN F,QF
1852          MOVEI T,1      ;NO COUNT SPECIFIED, USE 1
1853         MOVEM T,@BCOM2  ;MOVE TO COUNT OF SPECIFIED BPT
1854         HRRZ R,BCOM3
1855         PUSHJ P,AUTOP
1856 PROCD1: PUSHJ P,CRF
1857         PUSHJ P,TTYLEV
1858 PROC0:  HRRZI R,XEC1    ;ADDRESS MODIFIED
1859         PUSHJ P,FETCH
1860         JRST ERR
1861         MOVEM T,WRD
1862         PUSHJ P,INSRTB
1863         MOVE T,WRD      ;BREAKPOINTED INSTRUCTION TO XCT
1864         JRST PROC2
1865
1866 PROC1:  MOVE T,AC0+T
1867         JSR SAVE
1868         MOVE T,@LEAV
1869 PROC2:  MOVE R,BCOM
1870         MOVEI W,100
1871         MOVEM W,TEM1
1872         JRST IXCT5
1873 \f
1874 IXCT4:  MOVEM R,40
1875         MOVEI R,41
1876 IXCT:   SOSL TEM1
1877         PUSHJ P,FETCH
1878         JRST BPLUP
1879 IXCT5:  MOVEM T,TEM
1880         LSH T,-33
1881         CAIN T,254
1882         JRST IXCT6
1883         HRLZI 17,AC0
1884         BLT 17,17
1885         MOVEI T,@TEM
1886         DPB T,[(2700)TEM]
1887         LDB W1,[(270400)TEM]
1888         LDB T,[(331100)TEM]
1889         MOVEI P,PS
1890         CAIN T,260
1891         JRST, IPUSHJ
1892
1893         CAIN T,264
1894         JRST,IJSR
1895         CAIN T,265
1896         JRST,IJSP
1897         CAIN T,266
1898         JRST,IJSA
1899         MOVE R,TEM
1900 KA,     CAIGE T,100
1901 KL,     CAIGE T,74      ;LPMR,SPM,XCTR,XCTRI
1902 KS,     CAIGE T,100
1903         JRST,IXCT4
1904         CAIN T,256
1905         JRST,IXCT
1906
1907 IXCT6:  MOVEI T,TEM
1908         HRRM T,LEAV
1909         MOVEI T,LEAV
1910         JRST,RESTORE
1911
1912 BPLUP:  PUSHJ P,BRKRET
1913         JSR SAVE        ;ALWAYS SKIPS
1914 INC1:   JSR BP0         ;USED AS "CONSTANT" IN SETTING UP FOR INSERTING BREAKPOINTS
1915         JRST ERR
1916 \f
1917 IPUSHJ: DPB W1,[(270400)CPUSHP]
1918         CLEARM,TEM3
1919         MOVE T,TEM
1920         JRST,RESTR1
1921
1922 IJSA:   MOVE T,BCOM
1923         HRL T,TEM
1924         EXCH T,AC0(W1)
1925         JRST,IJSR2
1926
1927 IJSR:   MOVE T,BCOM
1928         HLL T,SAVPI
1929 IJSR2:  MOVE R,TEM
1930         PUSHJ P,DEP
1931         AOS,TEM
1932 IJSR3:  MOVE T,TEM
1933         JRST,RESTORE
1934
1935 IJSP:   MOVE W,BCOM
1936         HLL W,SAVPI
1937         MOVEM W,AC0(W1)
1938         JRST,IJSR3
1939
1940 ;INSERT BREAKPOINTS
1941
1942 INSRTB: MOVE S,INC1
1943 INSRT1: SKIPE R,B1ADR-BP1(S)    ;GET C(B<N>ADR) IN R
1944         PUSHJ P,FETCH   ;GET CONTENTS OF LOC ADDRESSED BY R INTO T
1945         JRST INSRT3     ;LOCATION OUTSIDE OF MEMORY OR BREAKPOINT EMPTY
1946         MOVEM T,B1INS-BP1(S)    ;PUT CONTENTS IN B<N>INS
1947         MOVE T,S        ;JSR BP<N>
1948         PUSHJ P,DEP     ;DEPOSIT T IN LOCATION SPECIFIED BY R
1949 INSRT3: ADDI S,3
1950         CAMG S,[JSR BPN]
1951         JRST INSRT1
1952         POPJ P,
1953
1954 ;REMOVE BREAKPOINTS
1955
1956 REMOVB: MOVEI S,BNADR   ;POINTER TO B<N>ADR
1957 REMOV1: MOVE T,B1INS-B1ADR(S)   ;INSTRUCTION AT BREAKPOINT <N>
1958         SKIPE R,(S)     ;IF THERE'S REALLY A BREAKPOINT THERE,
1959         PUSHJ P,DEP     ;THEN DEPOSIT INSTRUCTION IN USER'S CORE (SPECIFIED BY R)
1960 REMOV3: SUBI S,3
1961         CAIL S,B0ADR
1962         JRST REMOV1
1963 IFN 1PRSW,[
1964         SETZM TB1ADR    ;FLUSH TEMPORARY BREAKS
1965         SETZM TB2ADR
1966 ]
1967         POPJ P,
1968 \f
1969 ;ALTMODE B
1970
1971 BPS:    TLZE F,QF
1972         JRST BPS1       ;LOCATION SPECIFIED
1973         TRZE F,Q2F
1974         JRST BPS2       ;REMOVE SPECIFIED BREAKPOINT
1975         MOVE T,[(B1ADR)B1ADR+1] ;REMOVE ALL BREAKPOINTS
1976         CLEARM B1ADR
1977         BLT T,BNADR+2
1978         JRST DD1
1979
1980         ;LOC$B, LOC$NB
1981
1982 BPS1:   TRZN F,Q2F
1983         JRST,BPS3       ;NUMBER NOT TYPED AFTER ALTMODE
1984         MOVE R,T
1985         TRO F,2 ;USED LATER
1986
1987         ;GET HERE WHEN NUMBER TYPED AFTER ALTMODE
1988
1989 BPS2:   SKIPL T,WRD2    ;BPT # NOT LEGAL...
1990         CAILE T,10      ;IF NOT BETWEEN 0 AND 8 INCLUSIVE
1991         JRST,ERR
1992         IMULI T,3       ;AMOUNT OF STG PER BREAKPOINT
1993         ADDI T,B1ADR-3  ;MAKE T POINT TO STG AREA OF SPECIFIED BREAKPOINT
1994         TRZN F,2
1995         JRST MASK2      ;LOCATION NOT SPECIFIED, TREAT AS SYM
1996         EXCH R,T        ;R NOW IS POINTER TO BP STG AREA, T SPECIFIED LOCATION
1997         JRST BPS5
1998
1999         ;LOC$B
2000
2001 BPS3:   MOVEI R,B1ADR
2002 BPS4:   HRRZ W,(R)      ;GET BPN LOCATION
2003         CAIE W,(T)      ;IF SPECIFIED LOCATION,
2004         SKIPN (R)       ;OR IF ZERO,
2005         JRST,BPS5       ;THEN USE IT,
2006         ADDI R,3        ;OTHERWISE INCREMENT R TO POINT TO STG OF NEXT BPT
2007         CAIG R,BNADR    ;SKIP IF TOO MANY
2008         JRST,BPS4       ;GO LOOK AT NEXT ONE
2009         JRST,ERR        ;ALL FULL
2010
2011 BPS5:   MOVEM T,(R)     ;SET BP TO SPECIFIED LOCATION (0 MEANS NOT IN USE)
2012         CLEARM,1(R)
2013         CLEARM,2(R)
2014 AUTOP:  SUBI R,B1ADR    ;NOW MUNG R,
2015         IDIVI R,3       ;INTO BP NUMBER
2016         MOVEI S,1
2017         LSH S,1(R)      ;C(S):=1_<1+BP#>
2018         ANDCAM S,AUTOPI
2019         TLNE F,CCF
2020         IORM S,AUTOPI   ;ALTMODE ALTMODE TYPED MEANS BPT ENCOUNTER => TYPE MESSAGE
2021                 ;BUT CONTINUE (UNTIL CHARACTER TYPED AT TTY)
2022         POPJ P,
2023
2024 IFN 1PRSW,[
2025
2026 ;CONTROL-N
2027
2028 CTLN:   TLZN F,CF
2029          JRST ONEPRO
2030         MOVE T,BCOM
2031         HRLI T,1(T)
2032         TLZE F,QF
2033          MOVE T,WRD     ;T HAS TB2ADR,,TB1ADR
2034         HRRZM T,TB1ADR
2035         HLRZM T,TB2ADR
2036         JRST PROCEDE
2037
2038 ONEPRO: JRST ERR        ;NOT HACKED YET
2039 ];1PRSW
2040 IFE 1PRSW, CTLN==ERR
2041 \f
2042 DEPRS:  MOVEM T,LWT(I)
2043 DEPR:   MOVE R,LLOCO    ;QUAN TYPED IN REGIS EXAM
2044         TLZE F,ROF
2045         TLNN F,QF
2046         POPJ P,0
2047 DEP:    TRNN R,777760
2048         JRST,DEP1       ;BPT LOCATION IS AN ACCUMULATOR
2049         MOVEM T,0(R)
2050         POPJ P,0
2051 DEP1:   MOVEM T,AC0(R)
2052         POPJ P,0
2053
2054 FETCH:  MOVE T,HIGH
2055         CAIGE T,(R)
2056         POPJ P,
2057         MOVE T,(R)
2058         TRNN R,777760
2059         MOVE T,AC0(R)
2060         JRST CPOPJ1
2061
2062 FIRARG: MOVEM T,DEFV
2063         TLO F,FAF
2064         JRST,ULIM1
2065 ULIM:   TLO F,SAF
2066         HRRZM T,ULIMIT
2067 ULIM1:  TLNE F,CF
2068         JRST OVRD
2069         TLNN F,QF
2070         JRST,ERR
2071         JRST,LISB
2072
2073 LOOK:   SETZB W1,S
2074         MOVSI W1,DELI+DELO
2075         MOVE R,PRGM
2076         MOVEM R,PRGM(I)
2077         MOVSI W2,PNAME
2078         SKIPGE T
2079         MOVSI S,400000
2080         MOVE W,[444400,,ENDT]
2081         MOVEM W,TEM(I)
2082 LEND1A: ILDB W,TEM(I)
2083         MOVEM W,LLUP1
2084         JRST LLUP1
2085 ENDT:   TDNN W2,(R)
2086         TLO W1,LOCAL
2087         SKIPL R
2088         MOVE R,@JOBSYM
2089         CAMN R,PRGM(I)
2090         TLZA W1,-1
2091 LLUP:   ADD R,[2,,2]
2092 LLUPI1: JRST LLUP1      ;OR TRNA
2093 dpy340,[
2094         PUSHJ P,DPYSWP
2095         CONSZ DIS,200
2096         JRST LLUPD
2097 ];dpy340
2098 LLUP1:  0
2099         JRST LEND1
2100         CAML T,1(R)
2101         CAML S,1(R)
2102         JRST LLUP
2103         HLRZ W,W1
2104         TSNN W,(R)
2105         TDNN W2,(R)
2106         JRST LLUP
2107         HRR W1,R
2108         CAMN T,1(R)
2109         JRST SPT
2110         MOVE S,1(R)
2111         JRST LLUP
2112
2113 dpy340,[
2114 LLUPD:  BLKO DIS,DISPTR
2115         PUSHJ P,RECYC
2116 CJLP1:  JRST LLUP1
2117 ];dpy340
2118
2119 LEND1:  AOS W,TEM(I)
2120         XCT (W)
2121         JRST LEND1A
2122 LOOK1:  MOVEM T,TEM(I)
2123         TRNE W1,-1
2124         SUB T,S
2125         JRST CPOPJ1
2126 \f
2127 CONSYM: MOVEM T,LWT(I)
2128 CONSM:  TRNN F,LF1
2129 CONS1:  JRST @SCH
2130         TRNE F,CF1
2131         JRST, FTOC
2132
2133 PIN:    TRZ F,NAF
2134
2135         PUSHJ P,OPTYPE          ; Look it up in the opcode table first
2136         TRNE F,1RF              ; Anything typed?
2137          JRST PI3.1             ; Yes: proceed
2138         MOVE T,LWT(I)
2139         TLNN T,777000           ; Opcode 0?
2140          JRST PI3+1             ; Yes: skip this stuff
2141         TLC T,700000
2142         TLCN T,700000           ; Traditional IO instruction?
2143          JRST INOUT             ; Yes:  Go do it that way
2144         PUSHJ P,LOOK            ; No: look it up
2145
2146 ;Used to be:
2147 ;       TLC T,700000
2148 ;       TLCN T,700000
2149 ;       JRST,INOUT
2150 ;       PUSHJ P,OPTYPE
2151 ;       MOVSI T,777000
2152 ;       AND T,LWT(I)
2153 ;       JUMPE T,PI3+1
2154 ;       TRNN F,1RF
2155 ;        PUSHJ P,LOOK
2156
2157 PI3.1:   TROA F,NAF
2158           JRST HLFW
2159 PI3:    PUSHJ P,TSPC
2160         LDB T,[(270400)LWT(I)]  ;AC
2161         JUMPE T,PI4
2162         PUSHJ P,PAD
2163 PI3A:   XCT ",,CRF
2164 PI4:    MOVE W1,LWT(I)
2165         MOVEI T,"@      ;AT SIGN
2166         TLNE W1,20      ;CHECK FOR INDIRECT BIT
2167         PUSHJ P,TOUT
2168 PI5:    HRRZ T,LWT(I)
2169         LDB W1,[(331100)LWT(I)]
2170         CAIL W1,240
2171         CAILE W1,247
2172         PUSHJ P,SPAD
2173         PUSHJ P,PADS3A
2174 PI7:    TRZ F,NAF
2175         LDB R,[(220400)LWT(I)]  ;INDEX REGISTER CHECK
2176         JUMPE R,PADS1   ;EXIT
2177 PI7.1:  XCT "(,CRF
2178         MOVE T,R
2179         PUSHJ P,PAD
2180         MOVEI T,")
2181         JRST,TOUT       ;EXIT
2182 \f
2183 HLFW:   TRO F,NAF
2184         HLRZ T,LWT(I)
2185         PUSHJ P,PAD
2186         XCT ",,CRF
2187         XCT ",,CRF
2188         SKIPA T,LWT(I)
2189 SPAD:   AOS (P)
2190 PAD:    ANDI T,777777   ;PRINT ADDRESS
2191         JRST @AR        ;PADSO OR PAD1
2192 PADSO:  JUMPE T,TOC2+1
2193         PUSHJ P,LOOK
2194 PADS1:  POPJ P,0
2195         MOVE W2,1(W1)
2196         CAIGE T,100
2197         CAIGE W2,60
2198         JRST,PADS3
2199         MOVEM T,TEM(I)
2200         JUMPE W1,PAD1
2201         PUSHJ P,SPT
2202         XCT "+,CRF
2203 PADS2:  HRRZ T,TEM(I)
2204 PAD1:   JRST,TOC        ;EXIT
2205
2206 PADS3:  MOVE T,TEM(I)
2207 PADS3A: TRNE F,NAF
2208         CAIGE T,776000
2209         JRST TOC
2210 PADS3B: MOVNM T,TEM(I)
2211 PADS4:  XCT "-,CRF
2212         JRST,PADS2
2213
2214 INOUT:  TDC T,[(,-1)400000]
2215         TDCN T,[(,-1)400000]
2216         JRST PADS3B
2217         HLRZ R,T
2218         CAILE R,(CONO 774,@)
2219         JRST HLFW
2220         AND T,[(700340)]
2221         PUSHJ P,LOOK
2222         JRST,.+2
2223         JRST,HLFW
2224         PUSHJ P,TSPC
2225         MOVE T,LWT(I)
2226         AND T,[(77400)]
2227 INOUT1: JUMPE T,PI4     ;USED BY "WORD"
2228         PUSHJ P,LOOK    ;LOOK FOR DEVICE NUMBER
2229         JRST,PI3A
2230         MOVE T,TEM(I)
2231         LSH T,-30
2232         PUSHJ P,TOC
2233         JRST,PI3A
2234 \f
2235 MASK:   TLNE F,QF
2236         JRST,MASK1
2237         MOVEI T,MSK
2238         ;$NB ENTRY (WHERE N SPECIFIED, LOCATION NOT)
2239 MASK2:  MOVEI W,1
2240         MOVEM W,FRASE1
2241         JRST QUAN1
2242 MASK1:  MOVEM T,MSK
2243         JRST,RET
2244
2245 OVRD:   MOVSI B,-5
2246 OVRD1:  MOVE R,MSKTB(B)
2247         AND R,LWT(I)
2248         TDNN T,MSKTB(B)
2249         IOR T,R
2250         AOBJN B,OVRD1
2251 OVRD2:  CLEARM FRASE
2252         TLZ F,TIF
2253         CLEARM WRD
2254         JRST MASK2
2255
2256 MSKTB:  777000,,
2257         0 17,0
2258         @
2259         (17)
2260         ,-1
2261
2262 EFFEC:  TLO F,LTF
2263         HRRZ T,T
2264 AWORD:  SKIPA W,INOUT1  ;JUMPE T,
2265 NWORD:  MOVSI W,(JUMPN T,)
2266         HLLM W,SEAR2
2267
2268 SEARC:  TLZN F,QF
2269         JRST,ERR
2270         SETCAM T,WRD
2271         MOVE T,[EQV T,WRD]
2272         TLNE F,LTF
2273         MOVE T,[JRST SEAR2B]
2274         MOVEM T,SEARMD
2275         MOVSI T,-5
2276         SETCMM FRASE(T) ;PREVENT TYPEOUT
2277         AOBJN T,.-1
2278         MOVE T,ULIMIT
2279         TLNE F,SAF
2280         TLO F,QF
2281         PUSHJ P,SETUP1
2282         PUSHJ P,CRF
2283 SEAR1:  TRNN R,777760           ; Looking at ACs?
2284          JRST SEAR1A            ; Yes:  Be slow
2285         MOVE T,(R)              ; No:  Be fast
2286 SEAR1B:
2287 SEARMD: EQV T,WRD
2288         AND T,MSK
2289 SEAR2:  JUMPE T,SEAR3   ;OR JUMPN T
2290 SEAR2A: TRNN R,77               ; LISTEN every 100 times
2291          JRST SEAR2D
2292 SEAR2E: AOBJN R,SEAR1           ; Loop until LH positive...
2293         TLNE R,-1               ; And just how did that happen?
2294          JRST SEAR1             ; It was already positive
2295 SEAR2C: SETCMM LWT(I)           ; Counted up to 0:  Done
2296         JRST,DD1
2297
2298 SEAR2D: PUSHJ P,LISTEN
2299         JRST SEAR2E
2300         JRST SEAR2C
2301
2302 SEAR1A: PUSHJ P,FETCH
2303         JRST SEAR2A
2304         JRST SEAR1B
2305 SEAR2B: PUSHJ P,EFFEC0
2306         JRST SEAR2A
2307         EQV T,WRD
2308         ANDI T,777777
2309         JRST SEAR2
2310 \f
2311 SEAR3:  PUSHJ P,FETCH
2312         JRST ERR
2313         MOVEM T,LWT(I)
2314         MOVEM R,TEM2
2315         MOVEM R,T
2316         HRRZM R,LLOCO
2317         PUSHJ P,PLOC
2318         PUSHJ P,PAD
2319         XCT "/,CRF      ;SLASH
2320         PUSHJ P,LCT
2321         MOVE T,LWT(I)
2322         PUSHJ P,CONSYM
2323         PUSHJ P,CRF
2324         SETCMM LWT(I)
2325         SETCMM TEM(I)
2326 SEAR4:  MOVE R,TEM2
2327         JRST, SEAR2D
2328
2329 EFFEC0: MOVEM R,TEM2    ;CALLED BY SEARCH AND $\
2330         MOVEI W,100
2331         MOVEM W,TEM(I)
2332 EFFEC1: MOVE W,T
2333         LDB R,[(220400)T]
2334         JUMPE R,EFFEC2
2335         HRRZ T,AC0(R)
2336         ADD T,W
2337 EFFEC2: HRR R,T
2338         TLNN W,20       ;INDIRECT BIT CHECK
2339         JRST EFFEC3
2340         SOSE TEM(I)
2341         PUSHJ P,FETCH
2342         JRST EFFEC4
2343         JRST EFFEC1
2344 EFFEC3: AOS (P)
2345 EFFEC4: MOVE R,TEM2
2346         POPJ P,
2347 \f
2348 SETUP:  TLO F,LTF       ;ZERO
2349 SETUP1: MOVEI T,1(T)
2350         TLNN F,QF
2351 SETUP2: HRRZ T,ESTU
2352         HRRM T,ULIMIT
2353         HRRZ R,DEFV
2354         TLNN F,FAF
2355         MOVEI R,0
2356         CAML R,ULIMIT
2357         JRST ERR
2358         MOVEM R,DEFV
2359         MOVE W,R
2360         SUB W,ULIMIT
2361         HRLM W,R
2362         POPJ P,0
2363
2364 ZERO:   JUMPGE F,ERR
2365         PUSHJ P,SETUP
2366 ZERO1:  TRNE R,777740   ;R AOBJN PNTR TO CORE TO CLEAR
2367         JRST,ZERO2      ;T UPPER LIMIT (LAST LOC TO CLEAR+1)
2368         TRNN R,20       ;DONT Z 20-37
2369         CLEARM,AC0(R)
2370         AOBJN R,ZERO1
2371         TLNE R,-1
2372         JRST ZERO1
2373         JRST,DD1A
2374 ZERO2:  HRRZ S,@JOBSYM  ;ONLY CLEAR CORE BELOW SYMBOL TABLE
2375         CAILE T,(S)     ;(JUST ASSUME IT'S A MOBY DDT)
2376          MOVEI T,(S)
2377         SETZM (R)
2378         HRLS R
2379         AOS R
2380         BLT R,-1(T)
2381
2382 ;       HRRZ S,T
2383 ;       HRRZ W,@JOBSYM
2384 ;       CAIL S,(W)
2385 ;       MOVEI S,(W)
2386 ;       CAILE S,(R)
2387 ;       JSP W,ZEROR
2388 ;       HRRZ R,R
2389 ;       CAIG R, PS
2390 ;       MOVEI R, PS
2391 ;       HRRZ S,T
2392 ;       CAMLE S, R
2393 ;       JSP W,ZEROR
2394         JRST,DD1A
2395
2396 ;ZEROR: HRL R,R
2397 ;       CLEARM,(R)
2398 ;       ADDI  R, 1
2399 ;       BLT R, -1(S)
2400 ;       JRST,(W)
2401 \f
2402 FTOC:
2403 TOC:    HRRZ W1,ODF
2404         CAIN W1,12
2405         JRST, TOC4
2406 TOCA:   LSHC T,-43
2407         LSH W1,-1       ;W1=T+1
2408 TOC1:   DIVI T,@ODF
2409         HRLM W1,0(P)
2410 TOC3:   JUMPE T,TOC2
2411         PUSHJ P,TOCA
2412 TOC2:   HLRZ T,0(P)
2413         ADDI T,"0
2414 CJTOUT: JRST,TOUT       ;DOES POPJ TO TOC2 OR EXIT
2415
2416 TOC4:   MOVM W1,T
2417         JUMPGE T,TOC5
2418         XCT "-,CRF
2419 TOC5:   MOVEI T,0
2420         PUSHJ P,TOC1
2421 TPER:   MOVEI T,".
2422         JRST TOUT
2423
2424 SPT:    MOVE T,CJTOUT
2425         MOVEM T,SPTS(I)
2426         MOVE T,0(W1)    ;SYMBOL PRINT
2427         MOVEM W1,DSSAV(I)
2428         TLZ T,740000
2429 SPT1:   IDIV T,[50*50*50*50*50]
2430         PUSHJ P,SPT2
2431         MOVE T,W1
2432         IMULI T,50
2433         JUMPN T,SPT1
2434         POPJ P,
2435
2436 SPT2:   ADDI T,260-1
2437         CAILE T,271
2438         ADDI T,301-272
2439         CAILE T,332
2440         SUBI T,334-244
2441         CAIN T,243
2442         MOVEI T,256
2443         XCT SPTS(I)
2444         POPJ P,
2445 \f
2446 BRKRET: PUSHJ P,REMOVB
2447 TTYRET:
2448 dpy340,[
2449         CONI DIS,T
2450         DPB T,[600,,DRESET]
2451 ];dpy340
2452 IFN LPTP,[
2453         CONI LPT,T
2454         DPB T,[300,,LPTRST]
2455         SKIPE LPTFLG
2456         CONO LPT,10
2457 ]
2458 TTYRT:  MOVEI  T,10
2459 dpy340, MOVSM T,DISDON
2460 ka,[
2461         CONI TTY,SAVTTY
2462         CONO TTY,400000(T)
2463 ];ka
2464 dpy340, PUSHJ P,DISINI
2465         XCT TTYRT
2466 TTY1:
2467 ka,[
2468         MOVEI W2,40000          ;WAIT FOR LAST CHR TO BE TYPED (SO LOSERS PRGM DOESNT
2469         CONSZ TTY,120           ;GET AN INTERRUPT..
2470         SOJG W2,.-1
2471         CONI TTY,W2
2472         XOR W2,SAVTTY
2473         ANDI W2,10              ;ATTEMPT TO RESTORE STATE OF OUTPUT DONE FLAG
2474         XORM W2,SAVTTY
2475         DATAI TTY,W2
2476         HRLM W2,SAVTTY
2477         CONO TTY,3400(T)
2478 ;       CONO TTY,400000(T)      ;MORE PDP6 TK KLUDGE WINNAGE
2479 ];ka
2480         POPJ P,
2481
2482 TTYLEV:
2483 dpy340,[
2484         MOVS T,DISDON
2485         CAIN T,@TTYRT
2486         JRST .+3
2487 DRESET: CONO DIS,100
2488         DATAO DIS,[3000]
2489 ];dpy340
2490 IFN LPTP,[
2491         SKIPE T,LPTRST
2492         CONO LPT,10(T)
2493 ]
2494 ka,[
2495         MOVE T,SAVTTY
2496         ANDI T,17
2497         TRNN T,10
2498         TRO T,200
2499 ];ka
2500         JRST TTY1
2501 \f
2502 subttl variable area
2503
2504 WRD:    0
2505 WRD2:   0
2506 PRNC:   0
2507 FRASE:  0
2508 SYL:    0
2509 DEN:    0
2510 ZLWT:   0
2511 TEM2:   0
2512 LPTRST: 0
2513 LPTFLG: 0
2514 TTYFLG: -1
2515 ESTU:   LOW
2516 ESTUT:  LOW
2517 FSV:    0
2518 FRACT:  0
2519 FPWR:   0
2520 FTERM:  0
2521 FH:     0
2522 ;FL:    0
2523 SYM:    0
2524 DEFV:   0
2525 ULIMIT: 0
2526 LLOC:   112     ;CURRENT LOCATION
2527 LLOCO:  0
2528 PLCR:   0
2529 LOCBF:  BLOCK NLEVS
2530
2531 DIS1:
2532 ACSTG:  BLOCK 10
2533 INST:   0
2534 LWT:    0
2535 TEM:    0
2536 TEM1:   0
2537 PRGM:   -NSYMS+2,,LOW+2
2538 DSSAV:  SYM
2539 OUTSW:  0
2540 SPTS:   JRST TOUT
2541 ALTPC:  0       ;NON-ZERO MEANS ALT-P JUMPS THERE
2542 ALTPC1: 0
2543
2544 dpy340,[
2545 DISSW:  MOVE T,@-1(P)
2546 ];dpy340
2547
2548 SATPP:  .+1
2549 SATPT:  0
2550
2551 dpy340,[
2552 DIS2:
2553 DISACS: BLOCK DIS2-DIS1-6
2554         SYM
2555         DISAD
2556         JRST TOUT
2557         MOVSI T,(TRNA#CONSZ#CONSO)
2558         .+1
2559         0
2560 ];dpy340
2561 \f
2562 HIGH:   MEMSIZ-1
2563
2564 SAVPI:  0
2565         1177
2566 SAVTTY: 0
2567
2568 MSK:    -1      ;INITIAL MASK FOR WORD SEARCHES
2569 B0ADR:  REPEAT 3,0      ;FOR $0B, MUST BE SPECIFIED TO BE USED (NOT SET BY LOC$B, NOT CLEARED BY $B)
2570 B1ADR:  0
2571 B1SKP:  0
2572 B1CNT:  0       ;ONE MORE THEN # TIMES TO IGNORE ENCOUNTER OF THIS BPT
2573
2574 REPEAT NBP*3-3, 0
2575
2576 IFN 1PRSW,[
2577 TB1ADR: 0 ? 0 ? 0
2578 TB2ADR: 0 ? 0 ? 0
2579 ]
2580 BNADR=.-3
2581 AUTOPI: 0       ;1_N ON IF LOC$$B TYPED, ON MEANS PRECEED AFTER TYPING BPT MSG, UNTIL CHAR. TYPED AT TTY
2582
2583 INFORM SAVED ACS AREA,\.        ;FOR CRASH XFILE
2584 AC0:    BLOCK 17
2585 AC17:   0
2586 SWAP,TWENTY:    BLOCK LOWFIX-20         ;DON'T MOVE FROM HERE
2587
2588 SCH:    0
2589 AR:     0
2590 ODF:    0
2591 SCHM:    PIN    ;THESE 3 LOCATIONS BLT'D INTO PRECEDING 3 LOCATIONS DURING SAVE
2592 ARM:     PADSO
2593 ODFM:    10
2594 SARS:   0       ;NON-ZERO IF STUFF SAVED (USED BY SAVE)
2595 FRASE1:
2596 TEM3:   0
2597 INSW:   0
2598
2599 dpy340,[
2600 DISCNT: 0
2601 DISPN1: 0
2602 ];dpy340
2603 \f
2604 subttl save
2605
2606 SAVE:   0
2607         SKIPN SARS      ;IF CRUD NOT ALREADY SAVED,
2608          JRST SAV1      ;THEN GO SAVE IT,
2609         AOS SAVE        ;OTHERWISE AOS RETURN POINT,
2610         JRST SAV5       ;AND SAVE MINIMALLY
2611
2612 SAV1:   CONI PRS,SAVPI
2613         CONO PRS,@SAVPI+1
2614         MOVEM 17,AC17
2615         HRRZI 17,AC0
2616         BLT 17,AC0+16
2617         MOVE T,SAVE
2618         HLLM T,SAVPI
2619 SAV5:   SETOM SARS      ;INDICATE CRUD SAVED
2620         MOVEI P,PS      ;INITIALIZE PDL POINTER
2621         MOVE F,[SCHM,,SCH]
2622         BLT F,ODF
2623         CLEARB F,I      ;CLEAR FLAGS AND I
2624         JRST @SAVE
2625
2626
2627         ;SEE LOW CODE FOR RESTORE
2628 \f
2629 TATP:   TLZE F,QF
2630         SKIPN T
2631         JRST ERR
2632         MOVEI W,36.
2633         DPB T,[300600,,SATPP]
2634 dpy340, DPB T,[300600,,SATPP+DIS2-DIS1]
2635         IDIV W,T
2636         MOVEM W,SATPC
2637         JRST RATP
2638
2639 SATP:   MOVEI W,44
2640         DPB W,[360600,,SATPP(I)]
2641         MOVE W,SATPC
2642         MOVEM T,SATPT(I)
2643 SATPL:  ILDB T,SATPP(I)
2644         PUSHJ P,TOC
2645         PUSHJ P,TSPC
2646         SOJG W,SATPL
2647         POPJ P,
2648
2649 SATPC:  0
2650 \f
2651 subttl command dispatch table
2652
2653 BDISP:  (301400+R)DISP
2654         (141400+R)DISP
2655         (1400+R)DISP
2656
2657 DISP:   .BYTE 12.       
2658 DEFINE ZD A,B,C
2659         A-DDT
2660         B-DDT
2661         -DDT+C
2662 TERMIN
2663
2664 ZD ERR,ERR,L2           ;\0\ 1\ 2
2665 ZD DS,ERR,L2            ;^C,\ 4,\ 5
2666 ZD LISTF0,ERR,ERR       ;\ 6,\a,\b
2667 ZD TAB,LINEF,ERR        ;TAB,LF,\v
2668 ZD ERR,CARR,CTLN        ;FORMF,CR,\ e
2669 ZD ERR,ERR,ERR          ;\ f,\10,\11
2670 ZD ERR,ERR,ERR          ;\12,\13,\14
2671 ZD ERR,L2,L2            ;\15,\16,\17
2672 ZD ERR,ERR,ERR          ;\18,\19,\1a
2673 ZD CONTROL,ERR,ERR      ;\e,^\,^]
2674 ZD ERR,ERR,SPACE        ;^^,^_,SP
2675 ZD DIVD,DQUOTE,ASSEM    ;!,",#
2676 ZD DOLLAR,PERC,R50PNT   ;$,%,&
2677 ZD SQUOTE,LPRN,RPRN     ;',(,)
2678 ZD MULT,PLUS,ACCF       ;*,+,,
2679 ZD MINUS,PERIOD,SLASH   ;-,.,/
2680 ZD NUM,NUM,NUM          ;0,1,2
2681 ZD NUM,NUM,NUM          ;3,4,5
2682 ZD NUM,NUM,NUM          ;6,7,8
2683 ZD NUM,TAG,DEFIN        ;9,:,;
2684 ZD FIRARG,EQUAL,ULIM    ;<,=,>
2685 ZD ASLASH,INDIRECT,ABSA ;?,@,A
2686 ZD BPS,CON,SDEC         ;B,C,D
2687 ZD EFFEC,SFLOT,GO       ;E,F,G
2688 ZD HWRDS,PILOC,ERR      ;H,I,J
2689 ZD KILL,LOAD0,MASK      ;K,L,M
2690 ZD NWORD,SOCT,PROCEDE   ;N,O,P
2691 ZD QUAN,RELA,SYMBOL     ;Q,R,S
2692 ZD TATP,DECDMP,DISF     ;T,U,V
2693 ZD AWORD,XEC,DUMP0      ;W,X,Y
2694 ZD ZERO,OCON,ICON       ;Z,[,\
2695 ZD OSYM,VARRW,PSYM      ;],^,_
2696
2697         .BYTE
2698 \f
2699 DECDMP: 
2700 ka,[
2701         CONSZ TTY,20    ;ALLOW LAST CHAR TYPED TO APPEAR ON PAPER SO  CANT BE CLOBBERED
2702 dpy340, PUSHJ P,DISCFT  ;BY IO RESET
2703 nodpy,  JRST .-1
2704 ];ka
2705 KL,[    CONSO PAG,600000        ;FLUSH CACHE IF NECC.
2706          JRST MACDMP
2707         SWPUA
2708         CONSZ 200000
2709          JRST .-1
2710         CONO PAG,0
2711 ]
2712         JRST MACDMP
2713
2714 IFIX:   SKIPLE T,JOBSYM ;IF JOBSYM POSITIVE,
2715          JRST DDT       ;THEN CONTROL SHOULDN'T HAVE COME TO HERE TO BEGIN WITH
2716         MOVE R,(T)      ;GET POINTER TO SYMS
2717         JUMPN T,IFIX1   ;JUMP IF SYMS ADDED
2718         MOVE R,KILC     ;INITIAL SYMS POINTER
2719         MOVEM R,DDT-2   ;SET UP SYM POINTER
2720         MOVEI T,DDT-2
2721 IFIX1:  HRRZM T,JOBSYM  ;INDICATE LOCATION OF SYMS POINTER
2722         HRRZM R,ESTU
2723         HRRZM R,ESTUT
2724         MOVSI T,PNAME
2725         TDNN T,(R)
2726          ADD R,[(2)2]
2727         MOVEM R,PRGM
2728 ;       CONI TTY,T      ;THIS HACK IS FOR THE KNIGHT MULTIPLE TTY KLUDGE ON THE PDP6!!
2729 ;       ANDI T,170000   ;MAY IT REST IN PEACE
2730 ;       IORI T,10
2731 ;       HRRM T,TTYRT    ;CONO TO TTY
2732         JRST DDT
2733
2734 CONSTANTS
2735
2736 DDTEND:
2737 INFORM [HIGHEST USED]\.-1
2738
2739 END DDT