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