547c3c0ded201580803399606529bb77e71f4945
[its.git] / system / ddt.49
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 2 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/ .
1115         IOXX> 01^ IORD/ IOWR> IOWR IOBY/
1116         IORD> IORD IOBY> 41^ IOIQ/ B IOIQ> 02^ I/ Q. . .]
1117
1118 ;DEC KS IO INSTRUCTIONS
1119 ;       HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
1120 ;       IO0> 12^ . . UMV/ .
1121 ;       UMV> UMOVE 01^ . M/
1122 ;       IO1> IO2> 03^ TIO/ TIO/ RD IOB/ WR IOB/ BS IOB/ BC IOB/ . .
1123 ;       TIO> TIO 01^ E IOBP/ N IOBP/
1124 ;       IOB> IO IOBP> 41^ . B/ ]
1125
1126 ];KS
1127
1128 ;FWT, FIXED POINT ARITH, MISC.
1129         HACK [HAK> 33^ MV/ MV> MOV MO/ ML/ DV/ SH/ H1/ JP/
1130         21^ ADD IMB/ SU BIMB> B IMB> 02^ . I>I. M/ B/ MO> 22^
1131         EIMS> E IMS/ S IMS/ N IMS/ M IMS> 02^ . I/ M/ S> S. 
1132         ML> 21^ I ML1/ ML1> MUL IMB/ DV> 21^ I DV1/ DV1>
1133         DI DV2> V IMB/ H1> 03^ EXC S3/ BL T> T. AO/ AO> AOBJ
1134         AOB/ JRS T/ JFC L/ XC T/ . AOB> 01^ P/ N/
1135         JP> 03^ PU/ PU> PUSH PUS/ PO/ PO> POP POP/ JSR. 
1136         JS P/ JS PA> A. JR PA/ PUS> 01^  J> J.. POP>
1137         01^ . J/  SH> 02^ A S2/ ROT S1/ L S2> S S3> H S1/ 21^ JFFO. CIR C/ 
1138         S1> 21^ . C> C. ]
1139
1140 ;ARITH COMP, SKIP, JUMP
1141         HACK [ACCP> 42^ CA CA1/ SJ/ A JS/ S JS> O 31^
1142         J COMP/ S COMP/ CA1> 31^ I COMP/ M COMP/
1143          SJ> 31^ JUM PSJ/ SKI PSJ> P COMP>
1144         03^ . L/ E> E. L E/ PA/ G E/ N> N. G. ]
1145
1146 ;BOOLEAN
1147         HACK [BOOLE> 24^ ST/ AN> AND B2/ AN/ ST/ AN/ ST/
1148         X OR> OR B2/ I OR/ AN/ EQ DV2/ ST/ OR/ ST/ OR/ OR/
1149         ST> SET B2> 24^ Z IMB/ IMB/ CA> C TA/ TM> M IMB/
1150         CM> C TM/ TA> A IMB/ IMB/ IMB/ CB> C BIMB/ IMB/ CA/
1151         CA/ CM/ CM/ CB/ O IMB/ ]
1152
1153 ;HALF WORDS
1154         HACK [HWT> 51^ HW1/ 21^ R HW2/ L HW2> R HW3/ HW1>
1155         21^ L HW4/ R HW4> L HW3> 32^ IMS/ Z IMS/ O IMS/
1156         EIMS/ ]
1157
1158 ;TEST INST
1159         HACK [ACBM> 31^ AC1/ 01^ D AC2/ S AC2/ AC1> 01^ R AC2/ L 
1160         AC2> 42^ N EAN/ Z EAN/ C EAN/ O EAN> 12^ . E/ PA/ N/ ]
1161
1162 IFN AWRD,AWRD
1163 \f
1164 subttl command action routines
1165
1166 NUM:    ANDI T,17       ;T HOLDS CHARACTER
1167         TLNE F,CF+FPF
1168         JRST NM1
1169         MOVEI W,10
1170         IMULM W,SYL
1171         ADDM T,SYL
1172         MOVEI W,10.     ;ALSO MAINTAIN DECIMAL WORD
1173         IMULM W,DEN
1174         ADDM T,DEN
1175 LE1:    AOJA T,LE1A     ;FOR SQUOZE SYM
1176
1177 DOLLAR:
1178 PERC:   MOVEI T,47+101-13-45(T) ;PERCENT SIGN
1179 LET:    TLC F,SF+FPF    ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
1180         TLZN F,LTF+FEF+SF+FPF
1181         CAIE T,"E
1182         TLOA F,LTF
1183         TLOA F,FEF
1184         JRST LET1
1185         TLZN F,MF
1186         SKIPA W1,SYL
1187         MOVN W1,SYL
1188         MOVEM W1,FSV
1189         CLEARM DEN
1190 LET1:   SUBI T,101-13   ;FORM RADIX 50 SYMBOL
1191 LE1A:   TLO F,SF+QF
1192 LE2:    MOVEI W,50
1193         EXCH W,TEM(I)
1194         IDIVM W,TEM(I)
1195         IMUL T,TEM(I)
1196         ADDM T,SYM
1197         JRST L2
1198
1199 NUM1:   EXCH T,WRD2     ;FORM NUMBER AFTER DOLLAR SIGN
1200         IMULI T,10.
1201         ADDM T,WRD2
1202         TRO F,Q2F
1203         JRST,L2
1204 \f
1205 NM1:    TLNE F,CF
1206         JRST NUM1
1207         MOVEI W1,6      ;FORM FLOATING POINT NUMBER
1208         AOS NM1A
1209 NM1A:   MOVEI W2,0
1210         MOVSI R,201400
1211 NM1A1:  TRZE W2,1
1212         FMPR R,FT(W1)
1213         JUMPE W2,NM1B
1214         LSH W2,-1
1215         SOJG W1,NM1A1
1216 NM1B:   MOVSI W1,211000(T)
1217         FMPR R,W1       ;COMPUTE VALUE OF NEW DIGIT
1218         FADRB R,FH      ;ADD VALUE INTO FLOATING NO.
1219 REPEAT 0,[      ;I THINK THIS HAIRY ROUNDING IS UNNEC.  ALSO KL HAS NO "FMPL".
1220         FMPL R,W1
1221         SKIPN FH
1222         JRST NM1C
1223         LDB W2,[(331000)R]
1224         LDB W1,[(331000)FH]
1225         TLZ R,377000
1226         SUB W2,W1
1227         ASHC R,(W2)
1228         ADD S,FL
1229         TLZE S,400000
1230         AOS R
1231         MOVE W2,FH
1232         TLZ W2,377000
1233         ADD R,W2
1234         TLNN R,1000
1235         SOSA W1
1236         ASHC R,-1
1237         FSC R,1(W1)
1238 NM1C:   MOVEM R,FH
1239         MOVEM S,FL
1240         JUMPE R,NM1D
1241         TLNE S,200000
1242         AOS R   ; ROUND
1243         TLO R,400       ; NORMALIZE
1244 NM1D:
1245 ]               ;END REPEAT 0
1246         MOVEM R,SYL
1247         AOJA T,LE1A
1248 \f
1249 POWER:  TLNN F,FEF
1250         JRST L4 ;NO EXPONENT
1251         CAIE W,PLUS-DDT
1252         CAIN W,MINUS-DDT
1253         TROE F,POWF
1254         TRZA F,POWF
1255         JRST DDT(W)     ; E+-
1256
1257         MOVE W2,DEN
1258         MOVEI W1,FT-1
1259         TLZE F,MF
1260         MOVEI W1,FT01
1261         SKIPA T,FSV
1262 POW2:   LSH W2,-1
1263         TRZE W2,1
1264         FMPR T,(W1)
1265         JUMPE W2,L4
1266         SOJA W1,POW2
1267
1268 PERIOD: MOVE T,LLOC
1269         TLNE F,SF       ;SYLLABLE STARTED
1270         MOVE T,DEN
1271         MOVEM T,SYL
1272         TLON F,FPF+SF+QF
1273         MOVEI T,0
1274         IDIVI T,400
1275         SKIPE T
1276         TLC T,243000
1277         TLC W1,233000
1278         FSC T,0         ;NORMALIZE
1279         FSC W1,0
1280         FADR T,W1
1281 REPEAT 0,[              ;I THINK THIS DOUBLE PRECISION IS UNNEC.  ALSO KL HAS NO "FADL"
1282         FADL T,W1
1283         MOVEM W1,FL
1284 ]               ;END REPEAT 0
1285         MOVEM T,FH
1286         HLLZS NM1A
1287         MOVEI T,45      ;RADIX 50 PERIOD
1288         JRST LE2
1289
1290 QUAN:   SKIPA T,LWT(I)  ;LAST QUANTITY TYPED
1291 PILOC:  MOVEI T, SAVPI
1292 QUAN1:  MOVEM T,SYL
1293 QUAN2:  TLO F,SF+QF     ;WRD,SYL STARTED
1294         TLZ F,CF+CCF
1295         JRST,L2
1296
1297 CONTROL:        TLOE F,CF
1298         TLO F,CCF
1299         JRST,L2
1300 \f
1301 EVAL:   MOVE R,PRGM     ;LOOK UP SYMBOL
1302 EVAL0:  HRLOI W1,37777+DELI     ;W1 BITS MUST BE OFF
1303         JRST EVAL3
1304
1305 EVAL1:  ADD R,[(2)2]    ;NEXT SYMBOL
1306 EVAL2:  SKIPL R
1307          MOVE R,@JOBSYM ;WRAP AROUND
1308         CAMN R,PRGM     ;SKIP UNLESS SCANNED ENTIRE SYMBOL TABLE
1309          POPJ P,        ;NO SYMBOL FOUND
1310 EVAL3:  MOVE T,(R)
1311         XOR T,SYM
1312         TLNN T,PNAME    ;SKIP UNLESS SYMBOL IS PROGRAM NAME
1313          TLOA W1,LOCAL  ;PROGRAM NAME, FROM NOW ON IGNORE LOCALS
1314           TDNE T,W1
1315            JRST EVAL1   ;PROGRAM NAME OR NO MATCH, TRY NEXT
1316         TLNN T,340000
1317          JRST EVAL1     ;PROGRAM NAME, SKIP IT (CAN HAPPEN IF GOT HERE FROM LOSE1)
1318         MOVE T,1(R)     ;GOT IT, RETURN VALUE IN T, SYMBOL TABLE PNTR IN R.
1319
1320 CPOPJ1: AOS (P)         ;FOUND SYMBOL, SKIP
1321 CPOPJ:  POPJ P,
1322
1323
1324 ;BIT 40 - DELETE OUTPUT
1325 ; 20 - DELETE INPUT
1326 ; 10 - LOCAL
1327 ; 04 -GLOBAL
1328 ; NO BITS - PROGRAM NAME
1329 \f
1330 KILL:   TLNN F,LTF      ;DELETE SYMBOLS
1331         JRST,KILLA
1332         PUSHJ P,EVAL
1333         JRST KILL1
1334         MOVEI T,DELO_-16.       ;DELETE OUTPUT
1335         TLNE F,CCF
1336         MOVEI T,DELI_-16.       ;NO INPUT OR OUTPUT
1337         DPB T,[(420200+R)]
1338 KILRET: JRST,RET
1339
1340 KILLA:  TLNN F,QF
1341         TLNN F,CCF
1342         JRST ERR
1343         MOVE R,KILC
1344         MOVEM R,@JOBSYM ;RESTORE INIT SYMS
1345         HRRZM R,ESTU
1346         MOVEM R,PRGM
1347         HRLZI T,DELO+DELI
1348         ANDCAM T,(R)    ;GET RID OF DELETE BITS IN INITIAL TABLE
1349         AOBJN R,.+1
1350         AOBJN R,.-2
1351         JRST,DD1
1352
1353 KILL1:  MOVE R,ESTU     ;REMOVE UNDEFINED SYMS
1354         JUMPGE R,UNDEF
1355 KILL2:  PUSHJ P,EVAL0
1356         JRST RET
1357         PUSHJ P,REMUN
1358         JRST KILL2
1359
1360 REMUN:  MOVE S,[(2)2]   ;REMOVE ONE UNDEFINED SYM
1361         ADDB S,ESTU
1362         MOVE W,-2(S)
1363         MOVEM W,(R)
1364         MOVE W,-1(S)
1365         MOVEM W,1(R)
1366         POPJ P,
1367
1368 DS:     MOVE R,DSSAV(I)
1369         MOVEI T,DELO_-16.
1370         DPB T,[(420200+R)]
1371         MOVE T,1(R)
1372         PUSHJ P,LOOK
1373         JRST RET
1374         JRST RET
1375 \f
1376 TAG:    TLNE F,CF       ;DEFINE SYMBOL AS OPEN REGISTER
1377         JRST SETNAM
1378         MOVE W,LLOCO
1379         HRRZM W,DEFV
1380         TLOE F,FAF
1381         JRST ERR
1382 DEFIN:  TLNE F,FAF
1383         TLNN F,LTF
1384         JRST ERR
1385 ADEFIN: PUSHJ P,EVAL
1386         JRST DEF1
1387         CAMGE R,KILC
1388         JRST DEF2       ;REDEFINE
1389         MOVEI T,DELI_-16.
1390         DPB T,[(420200+R)]
1391 DEF1:   MOVN R,[(2)2]
1392         ADDB R,@JOBSYM
1393         HRRZ T,ESTU
1394         SUBI T,2
1395         HRL T,ESTU
1396         HRRM T,ESTU
1397         SKIPGE ESTU
1398         BLT T,-1(R)
1399 dpy340, PUSHJ P,DISINI
1400 DEF2:   MOVE T,DEFV
1401         MOVEM T,1(R)
1402         MOVSI T,GLOBAL
1403         IORB T,SYM
1404         MOVEM T,(R)
1405         MOVE R,ESTU
1406
1407 DEF3:   JUMPGE R,RET    ;PATCH IN UNDEFINED SYM
1408         MOVE T,SYM
1409         CAME T,(R)
1410         JRST DEF4
1411         MOVE S,DEFV
1412         SKIPGE 1(R)
1413         MOVNS S
1414         PUSH P,R
1415         MOVE R,1(R)
1416         PUSHJ P,FETCH
1417         JRST ERR
1418         ADD S,T
1419         HRRM S,T
1420         PUSHJ P,DEP
1421         POP P,R
1422         PUSHJ P,REMUN
1423 DEF4:   ADD R,[(2)2]
1424         JRST DEF3
1425
1426 ;DISK COMMANDS HERE SO NO EVAL ARG
1427
1428 SWAP,[
1429 LISTF0: JRST LISTF
1430
1431 LOAD0:  JRST LOAD
1432
1433 DUMP0:  JRST DUMP
1434 ];SWAP
1435
1436 NOSWAP,[
1437 LISTF0==ERR
1438 LOAD0==ERR
1439 DUMP0==ERR
1440 ];NOSWAP
1441 \f
1442 SETNAM: MOVE R,@JOBSYM
1443 SET2:   JUMPGE R,UNDEF
1444         MOVE T,(R)
1445         ADD R,[(2)2]
1446         CAME T,SYM
1447         JRST SET2
1448         MOVEM R,PRGM
1449         JRST RET
1450
1451 MULT:   TLOA F,PTF+MLF  ;*
1452 DIVD:   TLO F,DVF+PTF   ;SINGLE QUOTE
1453         JRST L1
1454
1455 ASSEM:  JRST PLUS       ;#
1456 MINUS:  TLO F,MF
1457 PLUS:   TLO F,PTF
1458         JRST LIS2
1459
1460 LPRN:   CAML P,[(LPDL-32)]
1461         JRST,ERR
1462         PUSH P,F        ;RECURSE FOR OPEN PAREN
1463         PUSH P,WRD
1464         PUSH P,FRASE
1465         PUSH P,FRASE1
1466         AOS,PRNC
1467         JRST,LISA
1468
1469 INDIRECT:       MOVSI W,(@)
1470         IORB W,WRD
1471         TLO F,QF
1472         JRST,LIS2
1473
1474 ACCF:   TLNN F,COMF
1475         HRRM T,COMWD    ;COMMA
1476         MOVE R,T
1477         HLLZS T
1478
1479         LDB W1,[(331100)WRD]    ; Get top 9 bits of opcode
1480         LSH R,27                ; Shift into AC field
1481         CAIN W1,700             ; Old-style IO instruction?
1482          LSH R,1                ; Yes:  Shift into device field
1483
1484 ;Used to be:
1485 ;       LDB W1,[(410300)WRD]
1486 ;       IDIVI W1,7
1487 ;       LSH R,27(W1)
1488
1489         ADD T,R
1490         ADD T,WRD
1491         TLOE F,COMF
1492 COMWD:  HRLI T,.
1493         MOVEM T,WRD
1494         JRST SPACE+1
1495
1496 SPACE:  TLNE F,QF
1497         TLO F,TIF
1498 SPAC1:  TLZ F,MF+PTF
1499         JRST,LIS1
1500 \f
1501 RPRN:   MOVS T,WRD      ;)
1502         SOSGE,PRNC
1503         JRST,ERR
1504         POP P,FRASE1
1505         POP P,FRASE
1506         POP P,WRD
1507         POP P,F
1508         TLO F,QF
1509         TLNE F,PTF
1510         TLOE F,SF
1511         JRST,RPRN1
1512         MOVEM T,SYL
1513         JRST,L1RPR
1514 RPRN1:  ADDB T,WRD
1515         JRST,L1RPR-1
1516 \f
1517 VARRW:  SOSA LLOC       ;^
1518 TAB:    PUSHJ P,PLOC
1519 LI1B:   SOS LLOC
1520
1521 LINEF:  PUSHJ P,DEPRA   ;NEXT REGISTER
1522         TLZN F,CF
1523         JRST LI0
1524 LI1A:   MOVE R,PLCR     ;MOVE BACK IN RING BUFFER
1525         MOVE T,LOCBF(R)
1526         SOSGE R
1527         MOVEI R,NLEVS-1
1528         MOVEM R,PLCR
1529         HRRZM T,LLOC
1530         JRST DDT(W)
1531 LI0:    PUSHJ P,CRF
1532         AOS T,LLOC
1533 LI1:    HRRZM T,LLOC
1534         HRRZM T,LLOCO
1535         PUSHJ P,PAD
1536         MOVEI T,"/      ;SLASH
1537         TLNE F,STF
1538         MOVEI T,"!      ;EXCLAMATION MARK
1539         PUSHJ P,TOUT
1540 LI2:    TLZ F,ROF
1541         PUSHJ P,LCT
1542         MOVE R,LLOCO
1543         PUSHJ P,FETCH
1544         JRST ERR
1545         TLO F,ROF
1546         TLNE F,STF
1547         JRST DD2
1548         JRST CONSYM
1549
1550
1551 CARR:   PUSHJ P,DEPRA
1552         MOVEI W,LI1B-DDT
1553         TLZE F,CF
1554         JRST LI1A
1555         JRST DD1
1556 \f
1557 OCON:   TROA F,LF1+CF1  ;OPEN AS CONSTANT
1558 OSYM:   TRZ F,CF1       ;OPEN SYMBOLICALLY
1559         TROA F,LF1
1560 SLASH:  TLZ F,STF       ;TYPE OUT REGISTER
1561         TLZE F,CF       ;ALTMODE SLASH SUPPRESSES TYPEOUT
1562          TLO F,STF
1563         TLNE F,QF
1564         PUSHJ P,PLOC    ;QUANTITY TYPED
1565 SLAS1:  HRRZM T,LLOCO
1566         JRST LI2
1567
1568 ICON:   TLZE F,CF
1569         JRST IKON
1570         PUSHJ P,DEPRA   ;\
1571         JRST SLAS1
1572
1573 PLOC:   CAMN T,LLOC
1574         POPJ P,
1575         AOS R,PLCR      ;ADVANCE RING POINTER
1576         CAIL R,NLEVS
1577         CLEARB R,PLCR
1578         EXCH T,LLOC
1579         MOVEM T,LOCBF(R)
1580         MOVE T,LLOC
1581         HRRZS LLOC
1582         POPJ P,
1583
1584 ASLASH: TLNN F,QF
1585         JRST QUESTN
1586         PUSH P,T
1587         MOVEI T,"/
1588         PUSHJ P,TOUT
1589         POP P,T
1590         JRST SLASH
1591
1592 IKON:   MOVEM T,LWT(I)
1593         PUSHJ P,EFFEC0
1594         JRST ERR
1595         MOVE R,T
1596         PUSHJ P,FETCH
1597         JRST ERR
1598         JRST OVRD2
1599 \f
1600 DEPRA:  TLNE F,ROF      ;IF REGISTER IS BEING CHANGED
1601         TLNN F,QF       ;REMOVE ALL PREVIOUS UNDEFINED
1602         JRST DEPRS      ;SYMBOL REFERENCES TO IT
1603         MOVE R,ESTU
1604         MOVEM W1,ESTU
1605 DEPRA2: JUMPGE R,DEPRS
1606         HRRZ W,1(R)
1607         CAMN W,LLOCO
1608         PUSHJ P,REMUN
1609         ADD R,[(2)2]
1610         JRST DEPRA2
1611
1612 EQUAL:  TROA F,LF1+CF1  ;=
1613 PSYM:   TRZ F,CF1       ;@
1614         TRO F,LF1
1615         JRST CONSYM
1616
1617 R50PNT: MOVEM T,LWT(I)  ;AMPERSANT
1618         LSH T,-36
1619         TRZ T,3
1620         PUSHJ P,TOC
1621         PUSHJ P,TSPC
1622         MOVEI W1,LWT(I)
1623         JRST SPT
1624
1625 HWRDS:  MOVEI R,HLFW-TFLOT      ;H
1626 SFLOT:  ADDI R,TFLOT-SATP       ;F
1627 RATP:   ADDI R,SATP-IASCO       ;T
1628 ASCSET: ADDI R,IASCO-ISIXO      ;"
1629 SIXSET: ADDI R,ISIXO-PIN        ;'
1630 SYMBOL: ADDI R,PIN-FTOC ;S
1631 CON:    ADDI R,FTOC     ;C
1632         JSP W,SET
1633
1634 RELA:   TLZE F,QF       ;R
1635         JRST,BASECH
1636         MOVEI R,PADSO-TOC
1637 ABSA:   ADDI R,TOC      ;A
1638         JSP W,SET
1639
1640 BASECH: SOJLE T,ERR     ;CHANGE RADIX
1641         MOVEI R,1-10.(T)
1642 SDEC:   ADDI R,2        ;D
1643 SOCT:   ADDI R,10       ;O
1644         JSP W,SET
1645
1646 SET:    MOVEI W,-RELA(W)
1647         IDIVI W,5
1648         HRRZM R,SCH(W)
1649         JUMPGE F,LIS1
1650         HRRZM R,SCHM(W)
1651         JRST RET
1652 \f
1653 GO:     HRLI T,(JRST)
1654         TLC F,QF+CCF
1655         TLCN F,QF+CCF
1656          MOVEM T,STARTA
1657         TLOE F,QF
1658          JRST XEC0
1659         SKIPE T,STARTA
1660
1661 XEC:    TLNN F,QF       ;X
1662          JRST ,ERR
1663 XEC0:   MOVEM T,TEM
1664         SETZM ALTPC
1665         PUSHJ P,CRF
1666         PUSHJ P,TTYLEV
1667         PUSHJ P,INSRTB
1668 KS,[    ;Compensate for DEC brain death: XCT of JRST 2, gets wrong flags
1669         MOVE T,TEM
1670         LSH T,-33
1671         CAIE T,JRST_-33
1672          JRST XECKS
1673         JSP T,RESTORE
1674         JRST TEM
1675
1676 XECKS:
1677 ];KS
1678         JSP T,RESTORE
1679         XCT TEM
1680 XEC1:   JRST DDT        ;USED BY BCOM
1681         JSR SAVE
1682         PUSHJ P,BRKRET
1683         PUSHJ P,CRF
1684         JRST DD1
1685
1686 DQUOTE: TLNE F,CF       ;IF ALTMODE TYPED,
1687          JRST DQOT2     ;THEN SET TYPEOUT MODE
1688         MOVEM T,LWT(I)  ;DOUBLE QUOTE
1689                 ;DISPATCH ENTRY FOR IN DOUBLEQUOTE MODE
1690 IASCO:  SETZM TEM2
1691         MOVE W1,T
1692         TDNE W1,[-200]  ;SKIP IF ONLY ONE CHARACTER IN WORD
1693         JRST TEXO1
1694         LSH W1,1        ;THEN ASSUME IT'S RIGHT JUSTIFIED
1695 TEXO1:  MOVEI T,0
1696 TEXO10: JUMPE W1,CPOPJ
1697 TEXO11: LSHC T,7
1698 TEXO12: SKIPN TEM2
1699         JUMPE T,TEXO1
1700         SETOM TEM2
1701         PUSHJ P,TOUT
1702         JRST TEXO1
1703
1704 SQUOTE: TLNE F,CF       ;IF ALTMODE TYPED
1705          JRST SQOT2     ;THEN SET TYPEOUT MODE
1706         MOVEM T,LWT(I)  ;SINGLE QUOTE
1707                 ;DISPATCH ENTRY FOR IN SINGLEQUOTE MODE
1708 ISIXO:  MOVE W1,T
1709 SIXO1:  MOVEI T,0
1710         JUMPE W1,CPOPJ
1711         LSHC T,6
1712         JUMPE T,SIXO1
1713         ADDI T,40
1714         PUSHJ P,TOUT
1715         JRST SIXO1
1716
1717                 ;ENTRY FROM ALTMODE DOUBLEQUOTE
1718 DQOT2:  TRZN F,Q2F      ;IF NUMBER NOT TYPED AFTER ALTMODE,
1719          JRST ASCSET    ;THEN SET TYPEOUT MODE
1720         MOVSI W1,440700 ;OTHERWISE, DO ASCII TYPEIN
1721         HLLZS SASEM
1722         JRST ISTRING
1723
1724                 ;ENTRY FROM ALTMODE SINGLEQUOTE
1725 SQOT2:  TRZN F,Q2F      ;IF NUMBER NOT TYPED AFTER ALTMODE
1726          JRST SIXSET    ;THEN SET TYPEOUT MODE
1727         MOVEI W1,40     ;OTHERWISE, DO ASCII TYPEIN
1728         HRRM W1,SASEM
1729         MOVSI W1,440600
1730
1731 ISTRING:
1732         MOVE T,WRD2     ;SO \e1" DOES RIGHT THING
1733         MOVEM T,TEM
1734 ISTR1:  PUSHJ P,IIN
1735         CAIN T,33
1736          JRST ISTR2
1737         CAIN T,^Q
1738          PUSHJ P,IN
1739         PUSHJ P,SASEM
1740         JRST ISTR1
1741
1742 ISTR2:  MOVE T,TEM
1743         SETZM WRD2
1744         JRST MASK2
1745
1746 SASEM:  SUBI T,0                ;CLOBBERED TO 0 OR 40
1747 SASME:  HRRI W1,TEM
1748         IDPB T,W1
1749         POPJ P,
1750 \f
1751 ;ALTMODE V
1752
1753 DISF:
1754 dpy340,[
1755         SETCMM DISON    ;COMPLEMENT STATUS FLAG
1756         JRST DISINI     ;INITIALIZE DISPLAY AND RETURN
1757 ];dpy340
1758 nodpy,  POPJ P,
1759
1760 BP0:    REPEAT NBP+1,[
1761         0
1762         JSA T, BCOM
1763         0
1764 ]
1765 IFN 1PRSW,[
1766 TBP1:   0 ? JSA T,BCOM ? 0      ;TEMPORARY BREAK 1
1767 TBP2:   0 ? JSA T,BCOM ? 0      ;TEMPORARY BREAK 2
1768 ];1PRSW
1769
1770 BP1=BP0+3
1771 B1INS=BP1+2
1772 BPN=.-3
1773
1774         ;BREAKPOINT 0 LIKE OTHERS EXCEPT DOESN'T GET CHECKED ON LOC$B OR CLEARED BY $B
1775
1776 BCOM:   0
1777         HRRM T,LEAV
1778         MOVEI T,B1SKP-B1INS(T)
1779         HRRM T,BCOM3    ;CONDITIONAL BREAK SETUP
1780         MOVEI T,B1CNT-B1SKP(T)
1781         HRRM T,BCOM2    ;PROCEDE COUNTER SETUP
1782         MOVE T,BP1-B1CNT(T)
1783         HLLM T,LEAV1    ;SAVE FLAGS FOR RESTORING
1784         EXCH T,BCOM     ;RESTORE FORMER CONTENTS OF ACCUMULATOR
1785
1786 BCOM3:  SKIPE B1SKP     ;ADDRESS MODIFIED, POINTS TO CONDITIONAL BPT INSTRUCTION
1787         XCT @.-1
1788 BCOM2:  SOSG B1CNT      ;ADDRESS MODIFIED, POINTS TO COUNT OF CURRENT BPT
1789         JRST BREAK
1790
1791         MOVEM T,AC0+T
1792         LDB T,[(331100)@LEAV]
1793         CAIL T,264      ;JSR
1794         CAILE T,266     ;JSA,JSP
1795         TRNN T,700      ;UUO
1796         JRST PROC1
1797         CAIE T,260      ;PUSHJ
1798         CAIN T,256      ;XCT
1799         JRST PROC1
1800         MOVE T,AC0+T
1801         JRST 2,@LEAV1   ;RESTORE FLAGS AND JUMP TO .+1
1802
1803 LEAV:   XCT B1INS       ;ADDRESS MODIFIED
1804         JRST @BCOM
1805         AOS BCOM
1806         JRST @BCOM
1807
1808 LEAV1:  LEAV
1809 \f
1810 BREAK:  JSR SAVE
1811         PUSHJ P,BRKRET
1812         SOS T,BCOM3
1813         HRRZS T
1814 IFN 1PRSW, CAIGE T,TB1ADR
1815         PUSHJ P,PADSO
1816         MOVEI T,">
1817         PUSHJ P,TOUT
1818         SKIPG @BCOM2
1819         PUSHJ P,TOUT    ;TYPE OUT SECOND ">" IF COUNT EXHAUSTED
1820         MOVE T,BCOM
1821         HLLM T, SAVPI
1822         MOVEI T,-1(T)
1823         PUSHJ P,PAD
1824         HRRZ T,@BCOM3
1825         HRRM T,PROC0
1826         HLRZ T,@BCOM3
1827         JUMPE T,BREAK1
1828         PUSHJ P,LCT
1829         HLRZ T,@BCOM3
1830         PUSHJ P,PLOC
1831         PUSHJ P,LI1
1832 BREAK1: HRRZ R,BCOM3
1833         SUBI R,B1ADR
1834         IDIVI R,3
1835         MOVEI S,1
1836         LSH S,1(R)
1837         TDNN S,AUTOPI
1838         JRST RET
1839         PUSHJ P,LISTEN
1840         JRST PROCD1
1841         JRST RET
1842
1843 PROCEDE:
1844         SKIPN T,ALTPC           ;TURN INTO <ALT>G?
1845          JRST PROCD0
1846         MOVEM T,ALTPC1          ;YES
1847         MOVE T,[JRST 2,@ALTPC1]
1848         JRST XEC0
1849
1850 PROCD0: TLNN F,QF
1851          MOVEI T,1      ;NO COUNT SPECIFIED, USE 1
1852         MOVEM T,@BCOM2  ;MOVE TO COUNT OF SPECIFIED BPT
1853         HRRZ R,BCOM3
1854         PUSHJ P,AUTOP
1855 PROCD1: PUSHJ P,CRF
1856         PUSHJ P,TTYLEV
1857 PROC0:  HRRZI R,XEC1    ;ADDRESS MODIFIED
1858         PUSHJ P,FETCH
1859         JRST ERR
1860         MOVEM T,WRD
1861         PUSHJ P,INSRTB
1862         MOVE T,WRD      ;BREAKPOINTED INSTRUCTION TO XCT
1863         JRST PROC2
1864
1865 PROC1:  MOVE T,AC0+T
1866         JSR SAVE
1867         MOVE T,@LEAV
1868 PROC2:  MOVE R,BCOM
1869         MOVEI W,100
1870         MOVEM W,TEM1
1871         JRST IXCT5
1872 \f
1873 IXCT4:  MOVEM R,40
1874         MOVEI R,41
1875 IXCT:   SOSL TEM1
1876         PUSHJ P,FETCH
1877         JRST BPLUP
1878 IXCT5:  MOVEM T,TEM
1879         LSH T,-33
1880         CAIN T,254
1881         JRST IXCT6
1882         HRLZI 17,AC0
1883         BLT 17,17
1884         MOVEI T,@TEM
1885         DPB T,[(2700)TEM]
1886         LDB W1,[(270400)TEM]
1887         LDB T,[(331100)TEM]
1888         MOVEI P,PS
1889         CAIN T,260
1890         JRST, IPUSHJ
1891
1892         CAIN T,264
1893         JRST,IJSR
1894         CAIN T,265
1895         JRST,IJSP
1896         CAIN T,266
1897         JRST,IJSA
1898         MOVE R,TEM
1899 KA,     CAIGE T,100
1900 KL,     CAIGE T,74      ;LPMR,SPM,XCTR,XCTRI
1901 KS,     CAIGE T,100
1902         JRST,IXCT4
1903         CAIN T,256
1904         JRST,IXCT
1905
1906 IXCT6:  MOVEI T,TEM
1907         HRRM T,LEAV
1908         MOVEI T,LEAV
1909         JRST,RESTORE
1910
1911 BPLUP:  PUSHJ P,BRKRET
1912         JSR SAVE        ;ALWAYS SKIPS
1913 INC1:   JSR BP0         ;USED AS "CONSTANT" IN SETTING UP FOR INSERTING BREAKPOINTS
1914         JRST ERR
1915 \f
1916 IPUSHJ: DPB W1,[(270400)CPUSHP]
1917         CLEARM,TEM3
1918         MOVE T,TEM
1919         JRST,RESTR1
1920
1921 IJSA:   MOVE T,BCOM
1922         HRL T,TEM
1923         EXCH T,AC0(W1)
1924         JRST,IJSR2
1925
1926 IJSR:   MOVE T,BCOM
1927         HLL T,SAVPI
1928 IJSR2:  MOVE R,TEM
1929         PUSHJ P,DEP
1930         AOS,TEM
1931 IJSR3:  MOVE T,TEM
1932         JRST,RESTORE
1933
1934 IJSP:   MOVE W,BCOM
1935         HLL W,SAVPI
1936         MOVEM W,AC0(W1)
1937         JRST,IJSR3
1938
1939 ;INSERT BREAKPOINTS
1940
1941 INSRTB: MOVE S,INC1
1942 INSRT1: SKIPE R,B1ADR-BP1(S)    ;GET C(B<N>ADR) IN R
1943         PUSHJ P,FETCH   ;GET CONTENTS OF LOC ADDRESSED BY R INTO T
1944         JRST INSRT3     ;LOCATION OUTSIDE OF MEMORY OR BREAKPOINT EMPTY
1945         MOVEM T,B1INS-BP1(S)    ;PUT CONTENTS IN B<N>INS
1946         MOVE T,S        ;JSR BP<N>
1947         PUSHJ P,DEP     ;DEPOSIT T IN LOCATION SPECIFIED BY R
1948 INSRT3: ADDI S,3
1949         CAMG S,[JSR BPN]
1950         JRST INSRT1
1951         POPJ P,
1952
1953 ;REMOVE BREAKPOINTS
1954
1955 REMOVB: MOVEI S,BNADR   ;POINTER TO B<N>ADR
1956 REMOV1: MOVE T,B1INS-B1ADR(S)   ;INSTRUCTION AT BREAKPOINT <N>
1957         SKIPE R,(S)     ;IF THERE'S REALLY A BREAKPOINT THERE,
1958         PUSHJ P,DEP     ;THEN DEPOSIT INSTRUCTION IN USER'S CORE (SPECIFIED BY R)
1959 REMOV3: SUBI S,3
1960         CAIL S,B0ADR
1961         JRST REMOV1
1962 IFN 1PRSW,[
1963         SETZM TB1ADR    ;FLUSH TEMPORARY BREAKS
1964         SETZM TB2ADR
1965 ]
1966         POPJ P,
1967 \f
1968 ;ALTMODE B
1969
1970 BPS:    TLZE F,QF
1971         JRST BPS1       ;LOCATION SPECIFIED
1972         TRZE F,Q2F
1973         JRST BPS2       ;REMOVE SPECIFIED BREAKPOINT
1974         MOVE T,[(B1ADR)B1ADR+1] ;REMOVE ALL BREAKPOINTS
1975         CLEARM B1ADR
1976         BLT T,BNADR+2
1977         JRST DD1
1978
1979         ;LOC$B, LOC$NB
1980
1981 BPS1:   TRZN F,Q2F
1982         JRST,BPS3       ;NUMBER NOT TYPED AFTER ALTMODE
1983         MOVE R,T
1984         TRO F,2 ;USED LATER
1985
1986         ;GET HERE WHEN NUMBER TYPED AFTER ALTMODE
1987
1988 BPS2:   SKIPL T,WRD2    ;BPT # NOT LEGAL...
1989         CAILE T,10      ;IF NOT BETWEEN 0 AND 8 INCLUSIVE
1990         JRST,ERR
1991         IMULI T,3       ;AMOUNT OF STG PER BREAKPOINT
1992         ADDI T,B1ADR-3  ;MAKE T POINT TO STG AREA OF SPECIFIED BREAKPOINT
1993         TRZN F,2
1994         JRST MASK2      ;LOCATION NOT SPECIFIED, TREAT AS SYM
1995         EXCH R,T        ;R NOW IS POINTER TO BP STG AREA, T SPECIFIED LOCATION
1996         JRST BPS5
1997
1998         ;LOC$B
1999
2000 BPS3:   MOVEI R,B1ADR
2001 BPS4:   HRRZ W,(R)      ;GET BPN LOCATION
2002         CAIE W,(T)      ;IF SPECIFIED LOCATION,
2003         SKIPN (R)       ;OR IF ZERO,
2004         JRST,BPS5       ;THEN USE IT,
2005         ADDI R,3        ;OTHERWISE INCREMENT R TO POINT TO STG OF NEXT BPT
2006         CAIG R,BNADR    ;SKIP IF TOO MANY
2007         JRST,BPS4       ;GO LOOK AT NEXT ONE
2008         JRST,ERR        ;ALL FULL
2009
2010 BPS5:   MOVEM T,(R)     ;SET BP TO SPECIFIED LOCATION (0 MEANS NOT IN USE)
2011         CLEARM,1(R)
2012         CLEARM,2(R)
2013 AUTOP:  SUBI R,B1ADR    ;NOW MUNG R,
2014         IDIVI R,3       ;INTO BP NUMBER
2015         MOVEI S,1
2016         LSH S,1(R)      ;C(S):=1_<1+BP#>
2017         ANDCAM S,AUTOPI
2018         TLNE F,CCF
2019         IORM S,AUTOPI   ;ALTMODE ALTMODE TYPED MEANS BPT ENCOUNTER => TYPE MESSAGE
2020                 ;BUT CONTINUE (UNTIL CHARACTER TYPED AT TTY)
2021         POPJ P,
2022
2023 IFN 1PRSW,[
2024
2025 ;CONTROL-N
2026
2027 CTLN:   TLZN F,CF
2028          JRST ONEPRO
2029         MOVE T,BCOM
2030         HRLI T,1(T)
2031         TLZE F,QF
2032          MOVE T,WRD     ;T HAS TB2ADR,,TB1ADR
2033         HRRZM T,TB1ADR
2034         HLRZM T,TB2ADR
2035         JRST PROCEDE
2036
2037 ONEPRO: JRST ERR        ;NOT HACKED YET
2038 ];1PRSW
2039 IFE 1PRSW, CTLN==ERR
2040 \f
2041 DEPRS:  MOVEM T,LWT(I)
2042 DEPR:   MOVE R,LLOCO    ;QUAN TYPED IN REGIS EXAM
2043         TLZE F,ROF
2044         TLNN F,QF
2045         POPJ P,0
2046 DEP:    TRNN R,777760
2047         JRST,DEP1       ;BPT LOCATION IS AN ACCUMULATOR
2048         MOVEM T,0(R)
2049         POPJ P,0
2050 DEP1:   MOVEM T,AC0(R)
2051         POPJ P,0
2052
2053 FETCH:  MOVE T,HIGH
2054         CAIGE T,(R)
2055         POPJ P,
2056         MOVE T,(R)
2057         TRNN R,777760
2058         MOVE T,AC0(R)
2059         JRST CPOPJ1
2060
2061 FIRARG: MOVEM T,DEFV
2062         TLO F,FAF
2063         JRST,ULIM1
2064 ULIM:   TLO F,SAF
2065         HRRZM T,ULIMIT
2066 ULIM1:  TLNE F,CF
2067         JRST OVRD
2068         TLNN F,QF
2069         JRST,ERR
2070         JRST,LISB
2071
2072 LOOK:   SETZB W1,S
2073         MOVSI W1,DELI+DELO
2074         MOVE R,PRGM
2075         MOVEM R,PRGM(I)
2076         MOVSI W2,PNAME
2077         SKIPGE T
2078         MOVSI S,400000
2079         MOVE W,[444400,,ENDT]
2080         MOVEM W,TEM(I)
2081 LEND1A: ILDB W,TEM(I)
2082         MOVEM W,LLUP1
2083         JRST LLUP1
2084 ENDT:   TDNN W2,(R)
2085         TLO W1,LOCAL
2086         SKIPL R
2087         MOVE R,@JOBSYM
2088         CAMN R,PRGM(I)
2089         TLZA W1,-1
2090 LLUP:   ADD R,[2,,2]
2091 LLUPI1: JRST LLUP1      ;OR TRNA
2092 dpy340,[
2093         PUSHJ P,DPYSWP
2094         CONSZ DIS,200
2095         JRST LLUPD
2096 ];dpy340
2097 LLUP1:  0
2098         JRST LEND1
2099         CAML T,1(R)
2100         CAML S,1(R)
2101         JRST LLUP
2102         HLRZ W,W1
2103         TSNN W,(R)
2104         TDNN W2,(R)
2105         JRST LLUP
2106         HRR W1,R
2107         CAMN T,1(R)
2108         JRST SPT
2109         MOVE S,1(R)
2110         JRST LLUP
2111
2112 dpy340,[
2113 LLUPD:  BLKO DIS,DISPTR
2114         PUSHJ P,RECYC
2115 CJLP1:  JRST LLUP1
2116 ];dpy340
2117
2118 LEND1:  AOS W,TEM(I)
2119         XCT (W)
2120         JRST LEND1A
2121 LOOK1:  MOVEM T,TEM(I)
2122         TRNE W1,-1
2123         SUB T,S
2124         JRST CPOPJ1
2125 \f
2126 CONSYM: MOVEM T,LWT(I)
2127 CONSM:  TRNN F,LF1
2128 CONS1:  JRST @SCH
2129         TRNE F,CF1
2130         JRST, FTOC
2131
2132 PIN:    TRZ F,NAF
2133
2134         PUSHJ P,OPTYPE          ; Look it up in the opcode table first
2135         TRNE F,1RF              ; Anything typed?
2136          JRST PI3.1             ; Yes: proceed
2137         MOVE T,LWT(I)
2138         TLNN T,777000           ; Opcode 0?
2139          JRST PI3+1             ; Yes: skip this stuff
2140         TLC T,700000
2141         TLCN T,700000           ; Traditional IO instruction?
2142          JRST INOUT             ; Yes:  Go do it that way
2143         PUSHJ P,LOOK            ; No: look it up
2144
2145 ;Used to be:
2146 ;       TLC T,700000
2147 ;       TLCN T,700000
2148 ;       JRST,INOUT
2149 ;       PUSHJ P,OPTYPE
2150 ;       MOVSI T,777000
2151 ;       AND T,LWT(I)
2152 ;       JUMPE T,PI3+1
2153 ;       TRNN F,1RF
2154 ;        PUSHJ P,LOOK
2155
2156 PI3.1:   TROA F,NAF
2157           JRST HLFW
2158 PI3:    PUSHJ P,TSPC
2159         LDB T,[(270400)LWT(I)]  ;AC
2160         JUMPE T,PI4
2161         PUSHJ P,PAD
2162 PI3A:   XCT ",,CRF
2163 PI4:    MOVE W1,LWT(I)
2164         MOVEI T,"@      ;AT SIGN
2165         TLNE W1,20      ;CHECK FOR INDIRECT BIT
2166         PUSHJ P,TOUT
2167 PI5:    HRRZ T,LWT(I)
2168         LDB W1,[(331100)LWT(I)]
2169         CAIL W1,240
2170         CAILE W1,247
2171         PUSHJ P,SPAD
2172         PUSHJ P,PADS3A
2173 PI7:    TRZ F,NAF
2174         LDB R,[(220400)LWT(I)]  ;INDEX REGISTER CHECK
2175         JUMPE R,PADS1   ;EXIT
2176 PI7.1:  XCT "(,CRF
2177         MOVE T,R
2178         PUSHJ P,PAD
2179         MOVEI T,")
2180         JRST,TOUT       ;EXIT
2181 \f
2182 HLFW:   TRO F,NAF
2183         HLRZ T,LWT(I)
2184         PUSHJ P,PAD
2185         XCT ",,CRF
2186         XCT ",,CRF
2187         SKIPA T,LWT(I)
2188 SPAD:   AOS (P)
2189 PAD:    ANDI T,777777   ;PRINT ADDRESS
2190         JRST @AR        ;PADSO OR PAD1
2191 PADSO:  JUMPE T,TOC2+1
2192         PUSHJ P,LOOK
2193 PADS1:  POPJ P,0
2194         MOVE W2,1(W1)
2195         CAIGE T,100
2196         CAIGE W2,60
2197         JRST,PADS3
2198         MOVEM T,TEM(I)
2199         JUMPE W1,PAD1
2200         PUSHJ P,SPT
2201         XCT "+,CRF
2202 PADS2:  HRRZ T,TEM(I)
2203 PAD1:   JRST,TOC        ;EXIT
2204
2205 PADS3:  MOVE T,TEM(I)
2206 PADS3A: TRNE F,NAF
2207         CAIGE T,776000
2208         JRST TOC
2209 PADS3B: MOVNM T,TEM(I)
2210 PADS4:  XCT "-,CRF
2211         JRST,PADS2
2212
2213 INOUT:  TDC T,[(,-1)400000]
2214         TDCN T,[(,-1)400000]
2215         JRST PADS3B
2216         HLRZ R,T
2217         CAILE R,(CONO 774,@)
2218         JRST HLFW
2219         AND T,[(700340)]
2220         PUSHJ P,LOOK
2221         JRST,.+2
2222         JRST,HLFW
2223         PUSHJ P,TSPC
2224         MOVE T,LWT(I)
2225         AND T,[(77400)]
2226 INOUT1: JUMPE T,PI4     ;USED BY "WORD"
2227         PUSHJ P,LOOK    ;LOOK FOR DEVICE NUMBER
2228         JRST,PI3A
2229         MOVE T,TEM(I)
2230         LSH T,-30
2231         PUSHJ P,TOC
2232         JRST,PI3A
2233 \f
2234 MASK:   TLNE F,QF
2235         JRST,MASK1
2236         MOVEI T,MSK
2237         ;$NB ENTRY (WHERE N SPECIFIED, LOCATION NOT)
2238 MASK2:  MOVEI W,1
2239         MOVEM W,FRASE1
2240         JRST QUAN1
2241 MASK1:  MOVEM T,MSK
2242         JRST,RET
2243
2244 OVRD:   MOVSI B,-5
2245 OVRD1:  MOVE R,MSKTB(B)
2246         AND R,LWT(I)
2247         TDNN T,MSKTB(B)
2248         IOR T,R
2249         AOBJN B,OVRD1
2250 OVRD2:  CLEARM FRASE
2251         TLZ F,TIF
2252         CLEARM WRD
2253         JRST MASK2
2254
2255 MSKTB:  777000,,
2256         0 17,0
2257         @
2258         (17)
2259         ,-1
2260
2261 EFFEC:  TLO F,LTF
2262         HRRZ T,T
2263 AWORD:  SKIPA W,INOUT1  ;JUMPE T,
2264 NWORD:  MOVSI W,(JUMPN T,)
2265         HLLM W,SEAR2
2266
2267 SEARC:  TLZN F,QF
2268         JRST,ERR
2269         SETCAM T,WRD
2270         MOVE T,[EQV T,WRD]
2271         TLNE F,LTF
2272         MOVE T,[JRST SEAR2B]
2273         MOVEM T,SEARMD
2274         MOVSI T,-5
2275         SETCMM FRASE(T) ;PREVENT TYPEOUT
2276         AOBJN T,.-1
2277         MOVE T,ULIMIT
2278         TLNE F,SAF
2279         TLO F,QF
2280         PUSHJ P,SETUP1
2281         PUSHJ P,CRF
2282 SEAR1:  TRNN R,777760           ; Looking at ACs?
2283          JRST SEAR1A            ; Yes:  Be slow
2284         MOVE T,(R)              ; No:  Be fast
2285 SEAR1B:
2286 SEARMD: EQV T,WRD
2287         AND T,MSK
2288 SEAR2:  JUMPE T,SEAR3   ;OR JUMPN T
2289 SEAR2A: TRNN R,77               ; LISTEN every 100 times
2290          JRST SEAR2D
2291 SEAR2E: AOBJN R,SEAR1           ; Loop until LH positive...
2292         TLNE R,-1               ; And just how did that happen?
2293          JRST SEAR1             ; It was already positive
2294 SEAR2C: SETCMM LWT(I)           ; Counted up to 0:  Done
2295         JRST,DD1
2296
2297 SEAR2D: PUSHJ P,LISTEN
2298         JRST SEAR2E
2299         JRST SEAR2C
2300
2301 SEAR1A: PUSHJ P,FETCH
2302         JRST SEAR2A
2303         JRST SEAR1B
2304 SEAR2B: PUSHJ P,EFFEC0
2305         JRST SEAR2A
2306         EQV T,WRD
2307         ANDI T,777777
2308         JRST SEAR2
2309 \f
2310 SEAR3:  PUSHJ P,FETCH
2311         JRST ERR
2312         MOVEM T,LWT(I)
2313         MOVEM R,TEM2
2314         MOVEM R,T
2315         HRRZM R,LLOCO
2316         PUSHJ P,PLOC
2317         PUSHJ P,PAD
2318         XCT "/,CRF      ;SLASH
2319         PUSHJ P,LCT
2320         MOVE T,LWT(I)
2321         PUSHJ P,CONSYM
2322         PUSHJ P,CRF
2323         SETCMM LWT(I)
2324         SETCMM TEM(I)
2325 SEAR4:  MOVE R,TEM2
2326         JRST, SEAR2D
2327
2328 EFFEC0: MOVEM R,TEM2    ;CALLED BY SEARCH AND $\
2329         MOVEI W,100
2330         MOVEM W,TEM(I)
2331 EFFEC1: MOVE W,T
2332         LDB R,[(220400)T]
2333         JUMPE R,EFFEC2
2334         HRRZ T,AC0(R)
2335         ADD T,W
2336 EFFEC2: HRR R,T
2337         TLNN W,20       ;INDIRECT BIT CHECK
2338         JRST EFFEC3
2339         SOSE TEM(I)
2340         PUSHJ P,FETCH
2341         JRST EFFEC4
2342         JRST EFFEC1
2343 EFFEC3: AOS (P)
2344 EFFEC4: MOVE R,TEM2
2345         POPJ P,
2346 \f
2347 SETUP:  TLO F,LTF       ;ZERO
2348 SETUP1: MOVEI T,1(T)
2349         TLNN F,QF
2350 SETUP2: HRRZ T,ESTU
2351         HRRM T,ULIMIT
2352         HRRZ R,DEFV
2353         TLNN F,FAF
2354         MOVEI R,0
2355         CAML R,ULIMIT
2356         JRST ERR
2357         MOVEM R,DEFV
2358         MOVE W,R
2359         SUB W,ULIMIT
2360         HRLM W,R
2361         POPJ P,0
2362
2363 ZERO:   JUMPGE F,ERR
2364         PUSHJ P,SETUP
2365 ZERO1:  TRNE R,777740   ;R AOBJN PNTR TO CORE TO CLEAR
2366         JRST,ZERO2      ;T UPPER LIMIT (LAST LOC TO CLEAR+1)
2367         TRNN R,20       ;DONT Z 20-37
2368         CLEARM,AC0(R)
2369         AOBJN R,ZERO1
2370         TLNE R,-1
2371         JRST ZERO1
2372         JRST,DD1A
2373 ZERO2:  HRRZ S,@JOBSYM  ;ONLY CLEAR CORE BELOW SYMBOL TABLE
2374         CAILE T,(S)     ;(JUST ASSUME IT'S A MOBY DDT)
2375          MOVEI T,(S)
2376         SETZM (R)
2377         HRLS R
2378         AOS R
2379         BLT R,-1(T)
2380
2381 ;       HRRZ S,T
2382 ;       HRRZ W,@JOBSYM
2383 ;       CAIL S,(W)
2384 ;       MOVEI S,(W)
2385 ;       CAILE S,(R)
2386 ;       JSP W,ZEROR
2387 ;       HRRZ R,R
2388 ;       CAIG R, PS
2389 ;       MOVEI R, PS
2390 ;       HRRZ S,T
2391 ;       CAMLE S, R
2392 ;       JSP W,ZEROR
2393         JRST,DD1A
2394
2395 ;ZEROR: HRL R,R
2396 ;       CLEARM,(R)
2397 ;       ADDI  R, 1
2398 ;       BLT R, -1(S)
2399 ;       JRST,(W)
2400 \f
2401 FTOC:
2402 TOC:    HRRZ W1,ODF
2403         CAIN W1,12
2404         JRST, TOC4
2405 TOCA:   LSHC T,-43
2406         LSH W1,-1       ;W1=T+1
2407 TOC1:   DIVI T,@ODF
2408         HRLM W1,0(P)
2409 TOC3:   JUMPE T,TOC2
2410         PUSHJ P,TOCA
2411 TOC2:   HLRZ T,0(P)
2412         ADDI T,"0
2413 CJTOUT: JRST,TOUT       ;DOES POPJ TO TOC2 OR EXIT
2414
2415 TOC4:   MOVM W1,T
2416         JUMPGE T,TOC5
2417         XCT "-,CRF
2418 TOC5:   MOVEI T,0
2419         PUSHJ P,TOC1
2420 TPER:   MOVEI T,".
2421         JRST TOUT
2422
2423 SPT:    MOVE T,CJTOUT
2424         MOVEM T,SPTS(I)
2425         MOVE T,0(W1)    ;SYMBOL PRINT
2426         MOVEM W1,DSSAV(I)
2427         TLZ T,740000
2428 SPT1:   IDIV T,[50*50*50*50*50]
2429         PUSHJ P,SPT2
2430         MOVE T,W1
2431         IMULI T,50
2432         JUMPN T,SPT1
2433         POPJ P,
2434
2435 SPT2:   ADDI T,260-1
2436         CAILE T,271
2437         ADDI T,301-272
2438         CAILE T,332
2439         SUBI T,334-244
2440         CAIN T,243
2441         MOVEI T,256
2442         XCT SPTS(I)
2443         POPJ P,
2444 \f
2445 BRKRET: PUSHJ P,REMOVB
2446 TTYRET:
2447 dpy340,[
2448         CONI DIS,T
2449         DPB T,[600,,DRESET]
2450 ];dpy340
2451 IFN LPTP,[
2452         CONI LPT,T
2453         DPB T,[300,,LPTRST]
2454         SKIPE LPTFLG
2455         CONO LPT,10
2456 ]
2457 TTYRT:  MOVEI  T,10
2458 dpy340, MOVSM T,DISDON
2459 ka,[
2460         CONI TTY,SAVTTY
2461         CONO TTY,400000(T)
2462 ];ka
2463 dpy340, PUSHJ P,DISINI
2464         XCT TTYRT
2465 TTY1:
2466 ka,[
2467         MOVEI W2,40000          ;WAIT FOR LAST CHR TO BE TYPED (SO LOSERS PRGM DOESNT
2468         CONSZ TTY,120           ;GET AN INTERRUPT..
2469         SOJG W2,.-1
2470         CONI TTY,W2
2471         XOR W2,SAVTTY
2472         ANDI W2,10              ;ATTEMPT TO RESTORE STATE OF OUTPUT DONE FLAG
2473         XORM W2,SAVTTY
2474         DATAI TTY,W2
2475         HRLM W2,SAVTTY
2476         CONO TTY,3400(T)
2477 ;       CONO TTY,400000(T)      ;MORE PDP6 TK KLUDGE WINNAGE
2478 ];ka
2479         POPJ P,
2480
2481 TTYLEV:
2482 dpy340,[
2483         MOVS T,DISDON
2484         CAIN T,@TTYRT
2485         JRST .+3
2486 DRESET: CONO DIS,100
2487         DATAO DIS,[3000]
2488 ];dpy340
2489 IFN LPTP,[
2490         SKIPE T,LPTRST
2491         CONO LPT,10(T)
2492 ]
2493 ka,[
2494         MOVE T,SAVTTY
2495         ANDI T,17
2496         TRNN T,10
2497         TRO T,200
2498 ];ka
2499         JRST TTY1
2500 \f
2501 subttl variable area
2502
2503 WRD:    0
2504 WRD2:   0
2505 PRNC:   0
2506 FRASE:  0
2507 SYL:    0
2508 DEN:    0
2509 ZLWT:   0
2510 TEM2:   0
2511 LPTRST: 0
2512 LPTFLG: 0
2513 TTYFLG: -1
2514 ESTU:   LOW
2515 ESTUT:  LOW
2516 FSV:    0
2517 FRACT:  0
2518 FPWR:   0
2519 FTERM:  0
2520 FH:     0
2521 ;FL:    0
2522 SYM:    0
2523 DEFV:   0
2524 ULIMIT: 0
2525 LLOC:   112     ;CURRENT LOCATION
2526 LLOCO:  0
2527 PLCR:   0
2528 LOCBF:  BLOCK NLEVS
2529
2530 DIS1:
2531 ACSTG:  BLOCK 10
2532 INST:   0
2533 LWT:    0
2534 TEM:    0
2535 TEM1:   0
2536 PRGM:   -NSYMS+2,,LOW+2
2537 DSSAV:  SYM
2538 OUTSW:  0
2539 SPTS:   JRST TOUT
2540 ALTPC:  0       ;NON-ZERO MEANS ALT-P JUMPS THERE
2541 ALTPC1: 0
2542
2543 dpy340,[
2544 DISSW:  MOVE T,@-1(P)
2545 ];dpy340
2546
2547 SATPP:  .+1
2548 SATPT:  0
2549
2550 dpy340,[
2551 DIS2:
2552 DISACS: BLOCK DIS2-DIS1-6
2553         SYM
2554         DISAD
2555         JRST TOUT
2556         MOVSI T,(TRNA#CONSZ#CONSO)
2557         .+1
2558         0
2559 ];dpy340
2560 \f
2561 HIGH:   MEMSIZ-1
2562
2563 SAVPI:  0
2564         1177
2565 SAVTTY: 0
2566
2567 MSK:    -1      ;INITIAL MASK FOR WORD SEARCHES
2568 B0ADR:  REPEAT 3,0      ;FOR $0B, MUST BE SPECIFIED TO BE USED (NOT SET BY LOC$B, NOT CLEARED BY $B)
2569 B1ADR:  0
2570 B1SKP:  0
2571 B1CNT:  0       ;ONE MORE THEN # TIMES TO IGNORE ENCOUNTER OF THIS BPT
2572
2573 REPEAT NBP*3-3, 0
2574
2575 IFN 1PRSW,[
2576 TB1ADR: 0 ? 0 ? 0
2577 TB2ADR: 0 ? 0 ? 0
2578 ]
2579 BNADR=.-3
2580 AUTOPI: 0       ;1_N ON IF LOC$$B TYPED, ON MEANS PRECEED AFTER TYPING BPT MSG, UNTIL CHAR. TYPED AT TTY
2581
2582 INFORM SAVED ACS AREA,\.        ;FOR CRASH XFILE
2583 AC0:    BLOCK 17
2584 AC17:   0
2585 SWAP,TWENTY:    BLOCK LOWFIX-20         ;DON'T MOVE FROM HERE
2586
2587 SCH:    0
2588 AR:     0
2589 ODF:    0
2590 SCHM:    PIN    ;THESE 3 LOCATIONS BLT'D INTO PRECEDING 3 LOCATIONS DURING SAVE
2591 ARM:     PADSO
2592 ODFM:    10
2593 SARS:   0       ;NON-ZERO IF STUFF SAVED (USED BY SAVE)
2594 FRASE1:
2595 TEM3:   0
2596 INSW:   0
2597
2598 dpy340,[
2599 DISCNT: 0
2600 DISPN1: 0
2601 ];dpy340
2602 \f
2603 subttl save
2604
2605 SAVE:   0
2606         SKIPN SARS      ;IF CRUD NOT ALREADY SAVED,
2607          JRST SAV1      ;THEN GO SAVE IT,
2608         AOS SAVE        ;OTHERWISE AOS RETURN POINT,
2609         JRST SAV5       ;AND SAVE MINIMALLY
2610
2611 SAV1:   CONI PRS,SAVPI
2612         CONO PRS,@SAVPI+1
2613         MOVEM 17,AC17
2614         HRRZI 17,AC0
2615         BLT 17,AC0+16
2616         MOVE T,SAVE
2617         HLLM T,SAVPI
2618 SAV5:   SETOM SARS      ;INDICATE CRUD SAVED
2619         MOVEI P,PS      ;INITIALIZE PDL POINTER
2620         MOVE F,[SCHM,,SCH]
2621         BLT F,ODF
2622         CLEARB F,I      ;CLEAR FLAGS AND I
2623         JRST @SAVE
2624
2625
2626         ;SEE LOW CODE FOR RESTORE
2627 \f
2628 TATP:   TLZE F,QF
2629         SKIPN T
2630         JRST ERR
2631         MOVEI W,36.
2632         DPB T,[300600,,SATPP]
2633 dpy340, DPB T,[300600,,SATPP+DIS2-DIS1]
2634         IDIV W,T
2635         MOVEM W,SATPC
2636         JRST RATP
2637
2638 SATP:   MOVEI W,44
2639         DPB W,[360600,,SATPP(I)]
2640         MOVE W,SATPC
2641         MOVEM T,SATPT(I)
2642 SATPL:  ILDB T,SATPP(I)
2643         PUSHJ P,TOC
2644         PUSHJ P,TSPC
2645         SOJG W,SATPL
2646         POPJ P,
2647
2648 SATPC:  0
2649 \f
2650 subttl command dispatch table
2651
2652 BDISP:  (301400+R)DISP
2653         (141400+R)DISP
2654         (1400+R)DISP
2655
2656 DISP:   .BYTE 12.       
2657 DEFINE ZD A,B,C
2658         A-DDT
2659         B-DDT
2660         -DDT+C
2661 TERMIN
2662
2663 ZD ERR,ERR,L2           ;\0\ 1\ 2
2664 ZD DS,ERR,L2            ;^C,\ 4,\ 5
2665 ZD LISTF0,ERR,ERR       ;\ 6,\a,\b
2666 ZD TAB,LINEF,ERR        ;TAB,LF,\v
2667 ZD ERR,CARR,CTLN        ;FORMF,CR,\ e
2668 ZD ERR,ERR,ERR          ;\ f,\10,\11
2669 ZD ERR,ERR,ERR          ;\12,\13,\14
2670 ZD ERR,L2,L2            ;\15,\16,\17
2671 ZD ERR,ERR,ERR          ;\18,\19,\1a
2672 ZD CONTROL,ERR,ERR      ;\e,^\,^]
2673 ZD ERR,ERR,SPACE        ;^^,^_,SP
2674 ZD DIVD,DQUOTE,ASSEM    ;!,",#
2675 ZD DOLLAR,PERC,R50PNT   ;$,%,&
2676 ZD SQUOTE,LPRN,RPRN     ;',(,)
2677 ZD MULT,PLUS,ACCF       ;*,+,,
2678 ZD MINUS,PERIOD,SLASH   ;-,.,/
2679 ZD NUM,NUM,NUM          ;0,1,2
2680 ZD NUM,NUM,NUM          ;3,4,5
2681 ZD NUM,NUM,NUM          ;6,7,8
2682 ZD NUM,TAG,DEFIN        ;9,:,;
2683 ZD FIRARG,EQUAL,ULIM    ;<,=,>
2684 ZD ASLASH,INDIRECT,ABSA ;?,@,A
2685 ZD BPS,CON,SDEC         ;B,C,D
2686 ZD EFFEC,SFLOT,GO       ;E,F,G
2687 ZD HWRDS,PILOC,ERR      ;H,I,J
2688 ZD KILL,LOAD0,MASK      ;K,L,M
2689 ZD NWORD,SOCT,PROCEDE   ;N,O,P
2690 ZD QUAN,RELA,SYMBOL     ;Q,R,S
2691 ZD TATP,DECDMP,DISF     ;T,U,V
2692 ZD AWORD,XEC,DUMP0      ;W,X,Y
2693 ZD ZERO,OCON,ICON       ;Z,[,\
2694 ZD OSYM,VARRW,PSYM      ;],^,_
2695
2696         .BYTE
2697 \f
2698 DECDMP: 
2699 ka,[
2700         CONSZ TTY,20    ;ALLOW LAST CHAR TYPED TO APPEAR ON PAPER SO  CANT BE CLOBBERED
2701 dpy340, PUSHJ P,DISCFT  ;BY IO RESET
2702 nodpy,  JRST .-1
2703 ];ka
2704 KL,[    CONSO PAG,600000        ;FLUSH CACHE IF NECC.
2705          JRST MACDMP
2706         SWPUA
2707         CONSZ 200000
2708          JRST .-1
2709         CONO PAG,0
2710 ]
2711         JRST MACDMP
2712
2713 IFIX:   SKIPLE T,JOBSYM ;IF JOBSYM POSITIVE,
2714          JRST DDT       ;THEN CONTROL SHOULDN'T HAVE COME TO HERE TO BEGIN WITH
2715         MOVE R,(T)      ;GET POINTER TO SYMS
2716         JUMPN T,IFIX1   ;JUMP IF SYMS ADDED
2717         MOVE R,KILC     ;INITIAL SYMS POINTER
2718         MOVEM R,DDT-2   ;SET UP SYM POINTER
2719         MOVEI T,DDT-2
2720 IFIX1:  HRRZM T,JOBSYM  ;INDICATE LOCATION OF SYMS POINTER
2721         HRRZM R,ESTU
2722         HRRZM R,ESTUT
2723         MOVSI T,PNAME
2724         TDNN T,(R)
2725          ADD R,[(2)2]
2726         MOVEM R,PRGM
2727 ;       CONI TTY,T      ;THIS HACK IS FOR THE KNIGHT MULTIPLE TTY KLUDGE ON THE PDP6!!
2728 ;       ANDI T,170000   ;MAY IT REST IN PEACE
2729 ;       IORI T,10
2730 ;       HRRM T,TTYRT    ;CONO TO TTY
2731         JRST DDT
2732
2733 CONSTANTS
2734
2735 DDTEND:
2736 INFORM [HIGHEST USED]\.-1
2737
2738 END DDT