2 ;;; Copyright (c) 1999 Massachusetts Institute of Technology
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.
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.
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.
19 subttl ddt conditional assembly
40 setf [CPU (0 KA, 1 KI, 2 KL, 3 KS)]cpusw ;KI not supported
50 setf 340?,dpysw ;0 no display
57 setf Number of disks? (0 no swapping and file system goodies),ndsk
62 swap,lowlen==2200 ;disk routines take a little extra room
64 setf [Type of disk? (0 none, 1 Systems Concepts, 2 RP-10, 3 RH-10)]dsksw
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
79 ;setf One Proceed?,1PRSW ;DOESN'T WORK!
82 subttl assignments and definitions
90 MEMSIZ=40000+MOBY ;INITIAL $I-2
91 NLEVS==7 ;LENGTH OF RING BUFFER OF .
95 R=2 ;POINTERS TO TABLES, CORE, ETC.
97 W=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER
101 I=10 ;SWAP TYPEOUT VARIABLES BETWEEN DISPLAY AND TTY
107 NBP==10 ;NUMBER OF BREAK POINTS
109 LPDL==50 ;MAX LENGTH PUSH DOWN LIST
111 KS, .INSRT DSK:SYSTEM;KSDEFS >
113 ;GET DEFINITIONS OF DTE20 LOCATIONS IN LOW CORE
114 KL, .INSRT SYSTEM; EPT >
115 KL, SWPUA=701540,, ;SWEEP-CACHE INSTRUCTION
119 SQUOZE 0,DDT ;initial symbols are for program name "DDT"
123 IRP A,,[CLEAR,CLEARI,CLEARM
124 CLEARB,CONSZ,CONSO,DATAI,DATAO,BLKI,BLKO,CONI,CONO]
130 MTC==340 ;magtape control
131 MTS==344 ;magtape status
135 DC0==610 ;THIS STUFF REALLY WANTS TO CONDITONALIZED ON DISK CONTROL
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
149 IRP A,,[PI,PTP,PTR,TTY,LPT,DIS,DC,UTC,UTS,DC0,DC1,DPK,MTC,MTS,DPC]
158 CCA==14 ;"CACHE SWEEPER"
163 IRP A,,[PI,PAG,CCA,TIM,MTR,MTC,MTS,DSK]
172 .RD.==20 ; Read various kludges
173 .WR.==24 ; Write various kludges
175 IRP A,,[PI,PAG,.RD.,.WR.]
182 SWAP,[ SQUOZE 4,$QACT ;DDT'S DISK-ACTIVE FLAG WORDS
205 REPEAT NBP+1,BUST \.RPCNT
213 INFORM [INITIAL SYMS]\NUMSYM*2
215 LOWCOD: INFORM [LOWCODE]\.
221 subttl display routines
227 ;INITIALIZE DISPLAY (CALLED UNCONDITIONALLY WHEN DDT FIRST STARTED UP)
230 SKIPN DISON ;SKIP IF DISPLAY ON
231 SKIPA R,CJLP1 ;JRST LLUP1
234 JUMPGE R,DISIN1 ;JUMP IF <JRST LLUP1> JUST MUNGED INTO LLUPI1
235 ;FOLLOWING CIDING SKIPPED IF DISPLAY OFF
237 SUBI T,NUMREG*<NREGS*2+1>+3
239 MOVE R,[REPEAT 6,[35]]
243 BLT R,NUMREG*<2*NREGS+1>-1+1(T)
255 DISPTR: 0 ;BLKO POINTER FOR DISPLAY
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.
272 DISAD0: IDPB T,DISPNR
296 DISAD7: PUSHJ P,DISAD3
312 DISAD5: PUSHJ P,DIS69
318 DIS69: IRP X,,[36,50,35]
323 \fDISLP: AOS T,DISCNT
325 DISBEG: MOVNI T,NREGS
350 DISL2: PUSHJ P,DISAD6
383 CHECK1: XCT LLUPI1 ;JRST LLUP1 (IF OFF) OR TRNA (ALWAYS SKIP, VALUE OF WORD NEGATIVE)
386 RECYC: MOVEM T,DISPTR
390 DATAO DIS,[20157,,261777]
406 TSPC: MOVEI T,40 ;SPACE
427 JRST @INSW ;ANOTHER IO ROUTINE PROVIDED, USE IT. (IT SHOULD POPJ 1,)
492 SKIPE DISON ;IF DISPLAY ON,
495 TOUT2: SKIPE OUTSW(I)
500 TYO2: CAIL T," ;SPACE
525 dpy340, PUSHJ P,DISCFT
537 TRO T,400 ;Set CTY-char-pending
538 MOVEM T,8CTYOT ;Store in comm area
540 TRO T,80INT ;Hey you! Get this!
541 CONO (T) ;Interrupt 8080
542 SKIPE 8CTYOT ;Wait for completion
556 MOVEI T,3400 ;DDT MODE INPUT REQ
558 JUMPE T,CPOPJ ;NOTHING AVAILABLE
561 KS,[ SKIPN T,8CTYIN ;Chars stored here by 8080.
563 SETZM 8CTYIN ;Remember to clear it.
569 SUBI T,40 ;UPPERCASIFY
573 IFN LPTP, CONO LPT,10
584 XDTCM: SETZM DTEFLG ;SEND ARG IN T TO 11, GET RESPONSE IN T
600 ANDI T,177 ;CHANNELS THAT WERE ON
601 IORI T,2000 ;TURN ON CHANNELS
611 LF: MOVEI T,12 ;LINE FEED
614 ;FLOATING POINT OUTPUT
625 XCT "#,CRF ;NOT NORMALIZED
699 dpy340,DISPDL: BLOCK LPDL
701 INFORM [END OF LOWCODE]\.-1
703 subttl communication with DSKDMP and ITS
705 IF1, IFG .-LOWCOD+6-LOWLEN,.ERR LOW CODE DOESN'T FIT, MAKE LOWLEN BIGGER
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
719 IFN MCDMPF, MACDMP=37400+MOBY
721 noswap, MACDMP=37700+MOBY ;FOR DSKDMP
722 swap, IF2 MACDMP==ERR ;if neither dskdmp nor magdmp
727 subttl flag register assignments
730 TIF==100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA
731 PTF==100 ; +, -, OR * HAS BEEN TYPED
732 COMF==200000 ;COMMA FLAG
735 QF==1 ;QUANTITY TYPED IN TO WORD ASSEMBLER
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
746 FPF==20000 ; . TYPED IN
750 DVF==40000 ;DIVIDE FLAG
754 OUTPUT==4 ;OPDECODER FLAGS
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
760 NAF==200 ;NEGATIVE ADDRESSES PERMISSABLE
761 POWF==4000 ;ARGUMENT FOR EXPONENT COMING
762 SLL==10000 ;STOP LOOKING FOR LOCALS
764 GLOBAL==040000 ;GLOBAL SYMBOL
766 PNAME==740000 ;PROGRAM NAME
767 DELI==200000 ;DELETE INPUT
768 DELO==400000 ;DELETE OUTPUT
770 subttl ddt starts here
775 DDT: CLEARM INSW ;IF C(INSW) .NE. 0 THEN INPUT ROUTINE JRST'S @INSW
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
783 PUSHJ P,DISINI ;INITIALIZE DISPLAY
785 DD1: TLZ F,ROF ;INDICATE NO REGISTER OPEN
786 PUSHJ P,CRF ;TYPE CRLF (AND RUN SCOPE IF ON)
790 CLEARM PRNC ;PARENTHESES COUNT
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]
800 L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG
803 MOVSI T,(50*50*50*50*50*50)
804 MOVEM T,TEM(I) ;INIT SYMBOL COUNTER
808 L2: PUSHJ P,IN ;PICK UP CHARACTER
809 TLNE F,CF ;CONTROL FLAG
822 CAIGE W,MULT-DDT ;LOCATIONS BEFORE MULT DON'T HAVE ARG EVALUATED
843 JRST DDT(W) ;MULTIPLY OR DIVIDE
846 JRST DDT(W) ; + - @ ,
849 TLNE F,TIF ;TRUNCATE INDICATOR FLAG
873 PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST,LIS
876 UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER
887 dpy340, PUSHJ P,DISINI
898 QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS
904 QUEST2: ADD W1,[(2)2]
923 OPEVAL: MOVEM P,SAVPDL
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
982 JRST UNDEF ;NOT DEFINED AT ALL
984 PUSHJ P,EVAL1 ;LOOK FOR DUPLICATE INSTANCES
985 XCT "',CRF ;DIFFERENT PROGRAM SELECTED
987 XCT "",CRF ;MULTIPLY DEFINED
989 LOSE2: MOVEM R,PRGM ;BACK UP TO PRECEDING PROGRAM NAME+2
994 JRST L4A ;SELECT APPROPRIATE PROGRAM
1025 REPEAT 3,[(FOO_12.+1400)TBL
1043 IF1 IFE Z-"/, BARF 1
1044 IF2 IFE Z-"/, BARF Y!B+73
1045 IFE Z-"^,BARF <B&70>_-1+B&7-1
1056 subttl opcode dispatch table
1064 HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ]
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/]
1074 HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ]
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. . .]
1083 HACK [DBL> 03^ FAD . FSB . FMP . FDV . ADD . SUB . MUL . DIV .]
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 .]
1093 HACK [63^ . FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ IO/ ]
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. .]
1103 HACK [DBL> 03^ FAD . FSB . FMP . FDV . ADD . SUB . MUL . DIV .]
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 .]
1110 ;ITS KS IO INSTRUCTIONS
1111 HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
1114 IO1> IO2> 12^ IORD/ IOXX/ IOWR/ BLTX/
1115 IOXX> 01^ IORD/ IOWR> IOWR IOBY/
1116 IORD> IORD IOBY> 41^ IOIQ/ B IOIQ> 02^ I/ Q. . .
1117 BLTX> 41^ BLTXX/ . BLTXX> BLT 01^ BU. UB.]
1119 ;DEC KS IO INSTRUCTIONS
1120 ; HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
1121 ; IO0> 12^ . . UMV/ .
1122 ; UMV> UMOVE 01^ . M/
1123 ; IO1> IO2> 03^ TIO/ TIO/ RD IOB/ WR IOB/ BS IOB/ BC IOB/ . .
1124 ; TIO> TIO 01^ E IOBP/ N IOBP/
1125 ; IOB> IO IOBP> 41^ . B/ ]
1129 ;FWT, FIXED POINT ARITH, MISC.
1130 HACK [HAK> 33^ MV/ MV> MOV MO/ ML/ DV/ SH/ H1/ JP/
1131 21^ ADD IMB/ SU BIMB> B IMB> 02^ . I>I. M/ B/ MO> 22^
1132 EIMS> E IMS/ S IMS/ N IMS/ M IMS> 02^ . I/ M/ S> S.
1133 ML> 21^ I ML1/ ML1> MUL IMB/ DV> 21^ I DV1/ DV1>
1134 DI DV2> V IMB/ H1> 03^ EXC S3/ BL T> T. AO/ AO> AOBJ
1135 AOB/ JRS T/ JFC L/ XC T/ . AOB> 01^ P/ N/
1136 JP> 03^ PU/ PU> PUSH PUS/ PO/ PO> POP POP/ JSR.
1137 JS P/ JS PA> A. JR PA/ PUS> 01^ J> J.. POP>
1138 01^ . J/ SH> 02^ A S2/ ROT S1/ L S2> S S3> H S1/ 21^ JFFO. CIR C/
1141 ;ARITH COMP, SKIP, JUMP
1142 HACK [ACCP> 42^ CA CA1/ SJ/ A JS/ S JS> O 31^
1143 J COMP/ S COMP/ CA1> 31^ I COMP/ M COMP/
1144 SJ> 31^ JUM PSJ/ SKI PSJ> P COMP>
1145 03^ . L/ E> E. L E/ PA/ G E/ N> N. G. ]
1148 HACK [BOOLE> 24^ ST/ AN> AND B2/ AN/ ST/ AN/ ST/
1149 X OR> OR B2/ I OR/ AN/ EQ DV2/ ST/ OR/ ST/ OR/ OR/
1150 ST> SET B2> 24^ Z IMB/ IMB/ CA> C TA/ TM> M IMB/
1151 CM> C TM/ TA> A IMB/ IMB/ IMB/ CB> C BIMB/ IMB/ CA/
1152 CA/ CM/ CM/ CB/ O IMB/ ]
1155 HACK [HWT> 51^ HW1/ 21^ R HW2/ L HW2> R HW3/ HW1>
1156 21^ L HW4/ R HW4> L HW3> 32^ IMS/ Z IMS/ O IMS/
1160 HACK [ACBM> 31^ AC1/ 01^ D AC2/ S AC2/ AC1> 01^ R AC2/ L
1161 AC2> 42^ N EAN/ Z EAN/ C EAN/ O EAN> 12^ . E/ PA/ N/ ]
1165 subttl command action routines
1167 NUM: ANDI T,17 ;T HOLDS CHARACTER
1173 MOVEI W,10. ;ALSO MAINTAIN DECIMAL WORD
1176 LE1: AOJA T,LE1A ;FOR SQUOZE SYM
1179 PERC: MOVEI T,47+101-13-45(T) ;PERCENT SIGN
1180 LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
1181 TLZN F,LTF+FEF+SF+FPF
1191 LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL
1200 NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER DOLLAR SIGN
1208 MOVEI W1,6 ;FORM FLOATING POINT NUMBER
1217 NM1B: MOVSI W1,211000(T)
1218 FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT
1219 FADRB R,FH ;ADD VALUE INTO FLOATING NO.
1220 REPEAT 0,[ ;I THINK THIS HAIRY ROUNDING IS UNNEC. ALSO KL HAS NO "FMPL".
1244 TLO R,400 ; NORMALIZE
1251 JRST L4 ;NO EXPONENT
1270 TLNE F,SF ;SYLLABLE STARTED
1282 REPEAT 0,[ ;I THINK THIS DOUBLE PRECISION IS UNNEC. ALSO KL HAS NO "FADL"
1288 MOVEI T,45 ;RADIX 50 PERIOD
1291 QUAN: SKIPA T,LWT(I) ;LAST QUANTITY TYPED
1292 PILOC: MOVEI T, SAVPI
1294 QUAN2: TLO F,SF+QF ;WRD,SYL STARTED
1302 EVAL: MOVE R,PRGM ;LOOK UP SYMBOL
1303 EVAL0: HRLOI W1,37777+DELI ;W1 BITS MUST BE OFF
1306 EVAL1: ADD R,[(2)2] ;NEXT SYMBOL
1308 MOVE R,@JOBSYM ;WRAP AROUND
1309 CAMN R,PRGM ;SKIP UNLESS SCANNED ENTIRE SYMBOL TABLE
1310 POPJ P, ;NO SYMBOL FOUND
1313 TLNN T,PNAME ;SKIP UNLESS SYMBOL IS PROGRAM NAME
1314 TLOA W1,LOCAL ;PROGRAM NAME, FROM NOW ON IGNORE LOCALS
1316 JRST EVAL1 ;PROGRAM NAME OR NO MATCH, TRY NEXT
1318 JRST EVAL1 ;PROGRAM NAME, SKIP IT (CAN HAPPEN IF GOT HERE FROM LOSE1)
1319 MOVE T,1(R) ;GOT IT, RETURN VALUE IN T, SYMBOL TABLE PNTR IN R.
1321 CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP
1325 ;BIT 40 - DELETE OUTPUT
1329 ; NO BITS - PROGRAM NAME
1331 KILL: TLNN F,LTF ;DELETE SYMBOLS
1335 MOVEI T,DELO_-16. ;DELETE OUTPUT
1337 MOVEI T,DELI_-16. ;NO INPUT OR OUTPUT
1345 MOVEM R,@JOBSYM ;RESTORE INIT SYMS
1349 ANDCAM T,(R) ;GET RID OF DELETE BITS IN INITIAL TABLE
1354 KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS
1356 KILL2: PUSHJ P,EVAL0
1361 REMUN: MOVE S,[(2)2] ;REMOVE ONE UNDEFINED SYM
1377 TAG: TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER
1386 ADEFIN: PUSHJ P,EVAL
1400 dpy340, PUSHJ P,DISINI
1408 DEF3: JUMPGE R,RET ;PATCH IN UNDEFINED SYM
1427 ;DISK COMMANDS HERE SO NO EVAL ARG
1443 SETNAM: MOVE R,@JOBSYM
1444 SET2: JUMPGE R,UNDEF
1452 MULT: TLOA F,PTF+MLF ;*
1453 DIVD: TLO F,DVF+PTF ;SINGLE QUOTE
1461 LPRN: CAML P,[(LPDL-32)]
1463 PUSH P,F ;RECURSE FOR OPEN PAREN
1470 INDIRECT: MOVSI W,(@)
1480 LDB W1,[(331100)WRD] ; Get top 9 bits of opcode
1481 LSH R,27 ; Shift into AC field
1482 CAIN W1,700 ; Old-style IO instruction?
1483 LSH R,1 ; Yes: Shift into device field
1486 ; LDB W1,[(410300)WRD]
1522 LINEF: PUSHJ P,DEPRA ;NEXT REGISTER
1525 LI1A: MOVE R,PLCR ;MOVE BACK IN RING BUFFER
1539 MOVEI T,"! ;EXCLAMATION MARK
1558 OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT
1559 OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY
1561 SLASH: TLZ F,STF ;TYPE OUT REGISTER
1562 TLZE F,CF ;ALTMODE SLASH SUPPRESSES TYPEOUT
1565 PUSHJ P,PLOC ;QUANTITY TYPED
1566 SLAS1: HRRZM T,LLOCO
1576 AOS R,PLCR ;ADVANCE RING POINTER
1593 IKON: MOVEM T,LWT(I)
1601 DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED
1602 TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED
1603 JRST DEPRS ;SYMBOL REFERENCES TO IT
1606 DEPRA2: JUMPGE R,DEPRS
1613 EQUAL: TROA F,LF1+CF1 ;=
1618 R50PNT: MOVEM T,LWT(I) ;AMPERSANT
1626 HWRDS: MOVEI R,HLFW-TFLOT ;H
1627 SFLOT: ADDI R,TFLOT-SATP ;F
1628 RATP: ADDI R,SATP-IASCO ;T
1629 ASCSET: ADDI R,IASCO-ISIXO ;"
1630 SIXSET: ADDI R,ISIXO-PIN ;'
1631 SYMBOL: ADDI R,PIN-FTOC ;S
1641 BASECH: SOJLE T,ERR ;CHANGE RADIX
1647 SET: MOVEI W,-RELA(W)
1669 KS,[ ;Compensate for DEC brain death: XCT of JRST 2, gets wrong flags
1681 XEC1: JRST DDT ;USED BY BCOM
1687 DQUOTE: TLNE F,CF ;IF ALTMODE TYPED,
1688 JRST DQOT2 ;THEN SET TYPEOUT MODE
1689 MOVEM T,LWT(I) ;DOUBLE QUOTE
1690 ;DISPATCH ENTRY FOR IN DOUBLEQUOTE MODE
1693 TDNE W1,[-200] ;SKIP IF ONLY ONE CHARACTER IN WORD
1695 LSH W1,1 ;THEN ASSUME IT'S RIGHT JUSTIFIED
1697 TEXO10: JUMPE W1,CPOPJ
1705 SQUOTE: TLNE F,CF ;IF ALTMODE TYPED
1706 JRST SQOT2 ;THEN SET TYPEOUT MODE
1707 MOVEM T,LWT(I) ;SINGLE QUOTE
1708 ;DISPATCH ENTRY FOR IN SINGLEQUOTE MODE
1718 ;ENTRY FROM ALTMODE DOUBLEQUOTE
1719 DQOT2: TRZN F,Q2F ;IF NUMBER NOT TYPED AFTER ALTMODE,
1720 JRST ASCSET ;THEN SET TYPEOUT MODE
1721 MOVSI W1,440700 ;OTHERWISE, DO ASCII TYPEIN
1725 ;ENTRY FROM ALTMODE SINGLEQUOTE
1726 SQOT2: TRZN F,Q2F ;IF NUMBER NOT TYPED AFTER ALTMODE
1727 JRST SIXSET ;THEN SET TYPEOUT MODE
1728 MOVEI W1,40 ;OTHERWISE, DO ASCII TYPEIN
1733 MOVE T,WRD2 ;SO
\e1" DOES RIGHT THING
1747 SASEM: SUBI T,0 ;CLOBBERED TO 0 OR 40
1756 SETCMM DISON ;COMPLEMENT STATUS FLAG
1757 JRST DISINI ;INITIALIZE DISPLAY AND RETURN
1767 TBP1: 0 ? JSA T,BCOM ? 0 ;TEMPORARY BREAK 1
1768 TBP2: 0 ? JSA T,BCOM ? 0 ;TEMPORARY BREAK 2
1775 ;BREAKPOINT 0 LIKE OTHERS EXCEPT DOESN'T GET CHECKED ON LOC$B OR CLEARED BY $B
1779 MOVEI T,B1SKP-B1INS(T)
1780 HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP
1781 MOVEI T,B1CNT-B1SKP(T)
1782 HRRM T,BCOM2 ;PROCEDE COUNTER SETUP
1784 HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING
1785 EXCH T,BCOM ;RESTORE FORMER CONTENTS OF ACCUMULATOR
1787 BCOM3: SKIPE B1SKP ;ADDRESS MODIFIED, POINTS TO CONDITIONAL BPT INSTRUCTION
1789 BCOM2: SOSG B1CNT ;ADDRESS MODIFIED, POINTS TO COUNT OF CURRENT BPT
1793 LDB T,[(331100)@LEAV]
1795 CAILE T,266 ;JSA,JSP
1802 JRST 2,@LEAV1 ;RESTORE FLAGS AND JUMP TO .+1
1804 LEAV: XCT B1INS ;ADDRESS MODIFIED
1815 IFN 1PRSW, CAIGE T,TB1ADR
1820 PUSHJ P,TOUT ;TYPE OUT SECOND ">" IF COUNT EXHAUSTED
1833 BREAK1: HRRZ R,BCOM3
1845 SKIPN T,ALTPC ;TURN INTO <ALT>G?
1848 MOVE T,[JRST 2,@ALTPC1]
1852 MOVEI T,1 ;NO COUNT SPECIFIED, USE 1
1853 MOVEM T,@BCOM2 ;MOVE TO COUNT OF SPECIFIED BPT
1858 PROC0: HRRZI R,XEC1 ;ADDRESS MODIFIED
1863 MOVE T,WRD ;BREAKPOINTED INSTRUCTION TO XCT
1887 LDB W1,[(270400)TEM]
1901 KL, CAIGE T,74 ;LPMR,SPM,XCTR,XCTRI
1912 BPLUP: PUSHJ P,BRKRET
1913 JSR SAVE ;ALWAYS SKIPS
1914 INC1: JSR BP0 ;USED AS "CONSTANT" IN SETTING UP FOR INSERTING BREAKPOINTS
1917 IPUSHJ: DPB W1,[(270400)CPUSHP]
1943 INSRT1: SKIPE R,B1ADR-BP1(S) ;GET C(B<N>ADR) IN R
1944 PUSHJ P,FETCH ;GET CONTENTS OF LOC ADDRESSED BY R INTO T
1945 JRST INSRT3 ;LOCATION OUTSIDE OF MEMORY OR BREAKPOINT EMPTY
1946 MOVEM T,B1INS-BP1(S) ;PUT CONTENTS IN B<N>INS
1948 PUSHJ P,DEP ;DEPOSIT T IN LOCATION SPECIFIED BY R
1956 REMOVB: MOVEI S,BNADR ;POINTER TO B<N>ADR
1957 REMOV1: MOVE T,B1INS-B1ADR(S) ;INSTRUCTION AT BREAKPOINT <N>
1958 SKIPE R,(S) ;IF THERE'S REALLY A BREAKPOINT THERE,
1959 PUSHJ P,DEP ;THEN DEPOSIT INSTRUCTION IN USER'S CORE (SPECIFIED BY R)
1964 SETZM TB1ADR ;FLUSH TEMPORARY BREAKS
1972 JRST BPS1 ;LOCATION SPECIFIED
1974 JRST BPS2 ;REMOVE SPECIFIED BREAKPOINT
1975 MOVE T,[(B1ADR)B1ADR+1] ;REMOVE ALL BREAKPOINTS
1983 JRST,BPS3 ;NUMBER NOT TYPED AFTER ALTMODE
1987 ;GET HERE WHEN NUMBER TYPED AFTER ALTMODE
1989 BPS2: SKIPL T,WRD2 ;BPT # NOT LEGAL...
1990 CAILE T,10 ;IF NOT BETWEEN 0 AND 8 INCLUSIVE
1992 IMULI T,3 ;AMOUNT OF STG PER BREAKPOINT
1993 ADDI T,B1ADR-3 ;MAKE T POINT TO STG AREA OF SPECIFIED BREAKPOINT
1995 JRST MASK2 ;LOCATION NOT SPECIFIED, TREAT AS SYM
1996 EXCH R,T ;R NOW IS POINTER TO BP STG AREA, T SPECIFIED LOCATION
2002 BPS4: HRRZ W,(R) ;GET BPN LOCATION
2003 CAIE W,(T) ;IF SPECIFIED LOCATION,
2004 SKIPN (R) ;OR IF ZERO,
2005 JRST,BPS5 ;THEN USE IT,
2006 ADDI R,3 ;OTHERWISE INCREMENT R TO POINT TO STG OF NEXT BPT
2007 CAIG R,BNADR ;SKIP IF TOO MANY
2008 JRST,BPS4 ;GO LOOK AT NEXT ONE
2011 BPS5: MOVEM T,(R) ;SET BP TO SPECIFIED LOCATION (0 MEANS NOT IN USE)
2014 AUTOP: SUBI R,B1ADR ;NOW MUNG R,
2015 IDIVI R,3 ;INTO BP NUMBER
2017 LSH S,1(R) ;C(S):=1_<1+BP#>
2020 IORM S,AUTOPI ;ALTMODE ALTMODE TYPED MEANS BPT ENCOUNTER => TYPE MESSAGE
2021 ;BUT CONTINUE (UNTIL CHARACTER TYPED AT TTY)
2033 MOVE T,WRD ;T HAS TB2ADR,,TB1ADR
2038 ONEPRO: JRST ERR ;NOT HACKED YET
2040 IFE 1PRSW, CTLN==ERR
2042 DEPRS: MOVEM T,LWT(I)
2043 DEPR: MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM
2048 JRST,DEP1 ;BPT LOCATION IS AN ACCUMULATOR
2051 DEP1: MOVEM T,AC0(R)
2062 FIRARG: MOVEM T,DEFV
2080 MOVE W,[444400,,ENDT]
2082 LEND1A: ILDB W,TEM(I)
2092 LLUPI1: JRST LLUP1 ;OR TRNA
2114 LLUPD: BLKO DIS,DISPTR
2122 LOOK1: MOVEM T,TEM(I)
2127 CONSYM: MOVEM T,LWT(I)
2135 PUSHJ P,OPTYPE ; Look it up in the opcode table first
2136 TRNE F,1RF ; Anything typed?
2137 JRST PI3.1 ; Yes: proceed
2139 TLNN T,777000 ; Opcode 0?
2140 JRST PI3+1 ; Yes: skip this stuff
2142 TLCN T,700000 ; Traditional IO instruction?
2143 JRST INOUT ; Yes: Go do it that way
2144 PUSHJ P,LOOK ; No: look it up
2160 LDB T,[(270400)LWT(I)] ;AC
2166 TLNE W1,20 ;CHECK FOR INDIRECT BIT
2169 LDB W1,[(331100)LWT(I)]
2175 LDB R,[(220400)LWT(I)] ;INDEX REGISTER CHECK
2190 PAD: ANDI T,777777 ;PRINT ADDRESS
2191 JRST @AR ;PADSO OR PAD1
2192 PADSO: JUMPE T,TOC2+1
2203 PADS2: HRRZ T,TEM(I)
2204 PAD1: JRST,TOC ;EXIT
2206 PADS3: MOVE T,TEM(I)
2210 PADS3B: MOVNM T,TEM(I)
2214 INOUT: TDC T,[(,-1)400000]
2215 TDCN T,[(,-1)400000]
2218 CAILE R,(CONO 774,@)
2227 INOUT1: JUMPE T,PI4 ;USED BY "WORD"
2228 PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER
2238 ;$NB ENTRY (WHERE N SPECIFIED, LOCATION NOT)
2246 OVRD1: MOVE R,MSKTB(B)
2264 AWORD: SKIPA W,INOUT1 ;JUMPE T,
2265 NWORD: MOVSI W,(JUMPN T,)
2273 MOVE T,[JRST SEAR2B]
2276 SETCMM FRASE(T) ;PREVENT TYPEOUT
2283 SEAR1: TRNN R,777760 ; Looking at ACs?
2284 JRST SEAR1A ; Yes: Be slow
2285 MOVE T,(R) ; No: Be fast
2289 SEAR2: JUMPE T,SEAR3 ;OR JUMPN T
2290 SEAR2A: TRNN R,77 ; LISTEN every 100 times
2292 SEAR2E: AOBJN R,SEAR1 ; Loop until LH positive...
2293 TLNE R,-1 ; And just how did that happen?
2294 JRST SEAR1 ; It was already positive
2295 SEAR2C: SETCMM LWT(I) ; Counted up to 0: Done
2298 SEAR2D: PUSHJ P,LISTEN
2302 SEAR1A: PUSHJ P,FETCH
2305 SEAR2B: PUSHJ P,EFFEC0
2311 SEAR3: PUSHJ P,FETCH
2329 EFFEC0: MOVEM R,TEM2 ;CALLED BY SEARCH AND $\
2338 TLNN W,20 ;INDIRECT BIT CHECK
2348 SETUP: TLO F,LTF ;ZERO
2349 SETUP1: MOVEI T,1(T)
2366 ZERO1: TRNE R,777740 ;R AOBJN PNTR TO CORE TO CLEAR
2367 JRST,ZERO2 ;T UPPER LIMIT (LAST LOC TO CLEAR+1)
2368 TRNN R,20 ;DONT Z 20-37
2374 ZERO2: HRRZ S,@JOBSYM ;ONLY CLEAR CORE BELOW SYMBOL TABLE
2375 CAILE T,(S) ;(JUST ASSUME IT'S A MOBY DDT)
2414 CJTOUT: JRST,TOUT ;DOES POPJ TO TOC2 OR EXIT
2426 MOVE T,0(W1) ;SYMBOL PRINT
2429 SPT1: IDIV T,[50*50*50*50*50]
2446 BRKRET: PUSHJ P,REMOVB
2459 dpy340, MOVSM T,DISDON
2464 dpy340, PUSHJ P,DISINI
2468 MOVEI W2,40000 ;WAIT FOR LAST CHR TO BE TYPED (SO LOSERS PRGM DOESNT
2469 CONSZ TTY,120 ;GET AN INTERRUPT..
2473 ANDI W2,10 ;ATTEMPT TO RESTORE STATE OF OUTPUT DONE FLAG
2478 ; CONO TTY,400000(T) ;MORE PDP6 TK KLUDGE WINNAGE
2487 DRESET: CONO DIS,100
2502 subttl variable area
2526 LLOC: 112 ;CURRENT LOCATION
2537 PRGM: -NSYMS+2,,LOW+2
2541 ALTPC: 0 ;NON-ZERO MEANS ALT-P JUMPS THERE
2545 DISSW: MOVE T,@-1(P)
2553 DISACS: BLOCK DIS2-DIS1-6
2557 MOVSI T,(TRNA#CONSZ#CONSO)
2568 MSK: -1 ;INITIAL MASK FOR WORD SEARCHES
2569 B0ADR: REPEAT 3,0 ;FOR $0B, MUST BE SPECIFIED TO BE USED (NOT SET BY LOC$B, NOT CLEARED BY $B)
2572 B1CNT: 0 ;ONE MORE THEN # TIMES TO IGNORE ENCOUNTER OF THIS BPT
2581 AUTOPI: 0 ;1_N ON IF LOC$$B TYPED, ON MEANS PRECEED AFTER TYPING BPT MSG, UNTIL CHAR. TYPED AT TTY
2583 INFORM SAVED ACS AREA,\. ;FOR CRASH XFILE
2586 SWAP,TWENTY: BLOCK LOWFIX-20 ;DON'T MOVE FROM HERE
2591 SCHM: PIN ;THESE 3 LOCATIONS BLT'D INTO PRECEDING 3 LOCATIONS DURING SAVE
2594 SARS: 0 ;NON-ZERO IF STUFF SAVED (USED BY SAVE)
2607 SKIPN SARS ;IF CRUD NOT ALREADY SAVED,
2608 JRST SAV1 ;THEN GO SAVE IT,
2609 AOS SAVE ;OTHERWISE AOS RETURN POINT,
2610 JRST SAV5 ;AND SAVE MINIMALLY
2612 SAV1: CONI PRS,SAVPI
2619 SAV5: SETOM SARS ;INDICATE CRUD SAVED
2620 MOVEI P,PS ;INITIALIZE PDL POINTER
2623 CLEARB F,I ;CLEAR FLAGS AND I
2627 ;SEE LOW CODE FOR RESTORE
2633 DPB T,[300600,,SATPP]
2634 dpy340, DPB T,[300600,,SATPP+DIS2-DIS1]
2640 DPB W,[360600,,SATPP(I)]
2643 SATPL: ILDB T,SATPP(I)
2651 subttl command dispatch table
2653 BDISP: (301400+R)DISP
2664 ZD ERR,ERR,L2 ;
\0\ 1\ 2
2665 ZD DS,ERR,L2 ;^C,
\ 4,
\ 5
2666 ZD LISTF0,ERR,ERR ;
\ 6,
\a,
\b
2667 ZD TAB,LINEF,ERR ;TAB,LF,
\v
2668 ZD ERR,CARR,CTLN ;FORMF,CR,
\ e
2669 ZD ERR,ERR,ERR ;
\ f,
\10,
\11
2670 ZD ERR,ERR,ERR ;
\12,
\13,
\14
2671 ZD ERR,L2,L2 ;
\15,
\16,
\17
2672 ZD ERR,ERR,ERR ;
\18,
\19,
\1a
2673 ZD CONTROL,ERR,ERR ;
\e,^\,^]
2674 ZD ERR,ERR,SPACE ;^^,^_,SP
2675 ZD DIVD,DQUOTE,ASSEM ;!,",#
2676 ZD DOLLAR,PERC,R50PNT ;$,%,&
2677 ZD SQUOTE,LPRN,RPRN ;',(,)
2678 ZD MULT,PLUS,ACCF ;*,+,,
2679 ZD MINUS,PERIOD,SLASH ;-,.,/
2680 ZD NUM,NUM,NUM ;0,1,2
2681 ZD NUM,NUM,NUM ;3,4,5
2682 ZD NUM,NUM,NUM ;6,7,8
2683 ZD NUM,TAG,DEFIN ;9,:,;
2684 ZD FIRARG,EQUAL,ULIM ;<,=,>
2685 ZD ASLASH,INDIRECT,ABSA ;?,@,A
2686 ZD BPS,CON,SDEC ;B,C,D
2687 ZD EFFEC,SFLOT,GO ;E,F,G
2688 ZD HWRDS,PILOC,ERR ;H,I,J
2689 ZD KILL,LOAD0,MASK ;K,L,M
2690 ZD NWORD,SOCT,PROCEDE ;N,O,P
2691 ZD QUAN,RELA,SYMBOL ;Q,R,S
2692 ZD TATP,DECDMP,DISF ;T,U,V
2693 ZD AWORD,XEC,DUMP0 ;W,X,Y
2694 ZD ZERO,OCON,ICON ;Z,[,\
2695 ZD OSYM,VARRW,PSYM ;],^,_
2701 CONSZ TTY,20 ;ALLOW LAST CHAR TYPED TO APPEAR ON PAPER SO CANT BE CLOBBERED
2702 dpy340, PUSHJ P,DISCFT ;BY IO RESET
2705 KL,[ CONSO PAG,600000 ;FLUSH CACHE IF NECC.
2714 IFIX: SKIPLE T,JOBSYM ;IF JOBSYM POSITIVE,
2715 JRST DDT ;THEN CONTROL SHOULDN'T HAVE COME TO HERE TO BEGIN WITH
2716 MOVE R,(T) ;GET POINTER TO SYMS
2717 JUMPN T,IFIX1 ;JUMP IF SYMS ADDED
2718 MOVE R,KILC ;INITIAL SYMS POINTER
2719 MOVEM R,DDT-2 ;SET UP SYM POINTER
2721 IFIX1: HRRZM T,JOBSYM ;INDICATE LOCATION OF SYMS POINTER
2728 ; CONI TTY,T ;THIS HACK IS FOR THE KNIGHT MULTIPLE TTY KLUDGE ON THE PDP6!!
2729 ; ANDI T,170000 ;MAY IT REST IN PEACE
2731 ; HRRM T,TTYRT ;CONO TO TTY
2737 INFORM [HIGHEST USED]\.-1