6 ;THIS CAUSES A RELOCATABLE VERSION OF EXEC DDT WITH THE
7 ; PAPER TAPE I/O OPTION TO BE ASSEMBLED (AS OPPOSED TO
8 ; RELOCATABLE AND/OR ABSOLUTE VERSIONS OF USER DDT
9 ; AND/OR NON-PAPER TAPE I/O EXEC DDT, ALL OF WHICH CAN
10 ; BE ASSEMBLED FROM THE SAME SOURCE CODE WITH A
11 ; DIFFERENT DEFINITION OF "EDDT").
18 THE SOURCE OF DDT WILL ASSEMBLE INTO SEVERAL DIFFERENT
19 VERSIONS; THE ASSEMBLE IS CONTROLED BY THE VALUES
20 ASSIGNED TO THE SYMBOL EDDT. THIS SYMBOL MUST BE
21 DEFINED AS A SEPARATE FILE PRECEDING THE DDT SOURCE FILE.
22 THE SYMBOL EDDT IS DECODED IN THE FOLLOWING MANNER:
23 BIT 35 A ZERO: ASSEMBLE USER MODE DDT
24 BIT 35 A ONE: ASSEMBLE AN EXECUTIVE MODE DDT
25 BIT 34 A ZERO: DO NOT ASSEMBLE THE PAPER TAPE
27 BIT 34 A ONE: THIS IS IGNORED FOR USER DDT.
28 FOR AN EXEC DDT, ASSEMBLE
29 THE PAPER TAPE FEATURE
30 BITS 0-17: IF THESE BITS ARE ALL ZERO THE
31 ASSEMBLY WILL BE RELOCATABLE
32 IF THEY ARE NON-ZERO, THE ASSEMBLY IS
33 ABSOLUTE STARTING AT THE VALUE IN BITS
37 1.) IF EDDT IS NOT DEFINED BY A PARAMETER ASSIGNMENT,
38 DDT WILL ASSIGN EDDT=0 AND A USER MODE RELOCATABLE
41 2.) EDDT=1; A RELOCATABLE EXEC DDT WITHOUT PAPER
42 TAPE FEATURE WILL RESULT.
44 3.) EDDT=3; A RELOCATABLE EXEC DDT WITH PAPER
45 TAPE FEATURE WILL RESULT
47 4.) EDDT=<XWD 4000,1>; AN ABSOLUTE DDT (STARTING
48 ADRESS 4000) WITHOUT PAPER TAPE FEATURE WILL RESULT
50 5.) EDDT=<XWD 4000,3>; AN ABSOLUTE DDT
51 (STARTING ADDRESS 4000) WITH ALL THE PAPER TAPE
67 NSYMS=0 ;INITIAL SYMBOL COUNTER
73 IFN EDDT&<XWD -1,0>,<LOC <EDDT>B53>
75 IFN EDDT&1,<TITLE EDDT V.005A - EXEC MODE VERSION
82 IFE EDDT&1,<TITLE UDDT V.005 - USER MODE DDT
83 EXTERN JOBREL,JOBSYM,JOBSA
88 R=2 ;POINTERS TO TABLES, CORE, ETC.
90 W=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER
94 SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT
95 AR=11 ;MODE CONTROL SWITCH FOR OUTPUT
96 ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX
106 LPDL=50 ;MAX LENGTH PUSH DOWN LIST
108 \fTIF=100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA
109 PTF=100 ; +, -, OR * HAS BEEN TYPED
112 QF=1 ;QUANTITY TYPED IN TO WORD ASSEMBLER
116 MF=2 ;MINUS SIGN TYPED IN
117 LTF=20 ;LETTER TYPED IN TO CURRENT SYLLABLE
118 ROF=10 ;REGISTER OPEN FLAG
123 FPF=20000 ; . TYPED IN
127 DVF=40000 ;DIVIDE FLAG
129 PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM
133 ITF=2 ;INSTRUCTION TYPED IF ITF=1
134 OUTF=4 ;OUTPUT IF OUTF=1
135 CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT
136 LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT
137 Q2F=1 ;NUMBER TYPED AFTER ALT MODE
139 NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE
140 POWF=4000 ;ARGUMENT FOR EXPONENT COMING
141 SLL=10000 ;STOP LOOKING FOR LOCALS
143 GLOBAL=040000 ;GLOBAL SYMBOL
145 PNAME=740000 ;PROGRAM NAME
146 DELI=200000 ;DELETE INPUT
147 DELO=400000 ;DELETE OUTPUT
155 NBP=8 ;NUMBER OF BREAKPOINTS
156 DEFINE DBPNT (Z.)<XP $'Z.'B,B1ADR+3*Z.-3>
158 REPEAT NBP,<DBPNT \<ZZ=ZZ+1>>
219 DD1: TLZ F,ROF ;CLOSE ANY OPEN REGISTER
221 DD1.5: MOVE T,[XWD SCHM,SCH]
223 DD2: CLEARM PRNC ;PARENTHESES COUNT
226 MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEM
227 TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F]
228 LIS0: TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF]
234 L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG
238 MOVEM T,TEM ;INIT SYMBOL COUNTER
242 L2: PUSHJ P,TIN ;PICK UP CHARACTER
243 CAIL T,"A"+40 ;LOWER CASE A
244 CAILE T,"Z"+40 ;LOWER CASE Z
246 TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE
247 TLNE F,CF ;CONTROL FLAG
256 CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE
277 JRST DDT(W) ;MULTIPLY OR DIVIDE
280 JRST DDT(W) ; + - @ ,
283 TLNE F,TIF ;TRUNCATE INDICATOR FLAG
304 WRONG: MOVE W1,[ASCII /XXX/]
307 IFN EDDT&1,<PUSHJ P,LISTEN
310 PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS
313 UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER
315 ASH S,-1 ;SETUP EVAL END TEST
338 QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS
344 QUEST2: ADD W1,[XWD 2,2]
352 QUEST4: ADD R,[XWD 2,2]
355 NUM: ANDI T,17 ;T HOLDS CHARACTER
363 IMULI W,12 ;CONVERT TO DECIMAL
368 PERC: MOVEI T,47+101-13 ;PERCENT SIGN
369 LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
370 TLZN F,LTF+FEF+SF+FPF
380 LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL
383 IMULI W,50 ;CONVERT TO RADIX 50
385 SOSL,TEM ;IGNORE CHARACS AFTER 6
389 NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $
397 MOVEI W1,6 ;FORM FLOATING POINT NUMBER
406 NM1B: MOVSI W1,211000(T)
407 FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT
408 FADRB R,FH ;ADD VALUE INTO FLOATING NO.
434 TLNE F,SF ;SYLLABLE STARTED
437 TLNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE?
438 TLO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL
445 FAD T,[0] ;NORMALIZE T AND W1
450 MOVEI T,45 ;RADIX 50 PERIOD
453 QUAN: SKIPA T,LWT ;LAST QUANTITY TYPED
454 PILOC: MOVEI T, SAVPI
456 QUAN2: TLO F,SF+QF ;WRD,SYL STARTED
460 CONTRO: ;SOME KIND OF ALTMODE
461 IFN EDDT&1,< MOVEI T,"$" ;$
462 PUSHJ P,TOUT ;TYPE OUT $
469 EVAL: MOVE R,PRGM ;LOOK UP SYMBOL
470 EVAL0: HRLOI W1,37777+DELI
472 ASH S,-1 ;SETUP END TEST
475 EVAL1: ADD R,[XWD 2,2]
478 AOJG S,CPOPJ ;TRNASFER IF NO SYMBOL FOUND
488 CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP
491 ;BIT 40 - DELETE OUTPUT
495 ; NO BITS - PROGRAM NAME
497 TEXI: PUSHJ P,TEXIN ;INPUT TEXT
502 CAIN T,33 ;NEW ALT MODE, ESCAPE
519 \fSIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT)
532 KILL: TLNN F,LTF ;DELETE SYMBOLS
536 MOVEI T,DELO/200000 ;DELETE OUTPUT
538 MOVEI T,DELI/200000 ;NO INPUT OR OUTPUT
539 DPB T,[POINT 2,(R),1] ;LEFT 2 BITS IN SYMBOL
540 KILRET: JRST RET ;USED AS A CONSTANT
546 MOVEM R,@SYMP ;RESTORE INIT SYMS
550 ANDCAM T,(R) ;GET RID OF DELETE BITS IN INITIAL TABLE
555 KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS
562 REMUN: MOVE S,[XWD 2,2] ;REMOVE ONE UNDEFINED SYMBOL
571 TAG: TLNN F,LTF ; NO LETTERS IS ERROR
572 JRST ERR ; GO SAY ERROR
573 TLNE F,FAF ; DEFINE SYMBOLS
575 TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER
582 CAMGE R,KILC ;INITIAL SYMBOL?
583 JRST DEF2 ;NO, REDEFINE
584 MOVEI T,DELI/200000 ;YES, DELETE AND DEFINE NEW ONE
585 DPB T,[POINT 2,(R),1] ;LEFT 2 BITS OF SYMBOL
\r
586 DEF1: MOVN R,[XWD 2,2]
587 ADDB R,@SYMP ;MOVE UNDEFINED TABLE 2 REGISTERS
595 MOVEM T,1(R) ;PUT IN NEW VALUE
598 MOVEM T,(R) ;PUT IN NEW SYM AS GLOBAL
601 DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY
617 DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL
620 SETNAM: MOVE R,@SYMP ;SET PROGRAM NAME - DOLLAR COLON
632 MULT: TLOA F,PTF+MLF ;*
633 DIVD: TLO F,DVF+PTF ;SINGLE QUOTE
641 LPRN: CAML P,[XWD LPDL-4,0] ;LEFT PARENTHESIS
643 PUSH P,F ;RECURSE FOR OPEN PAREN
650 INDIRECT: HRLZI W,20 ;@
655 ACCF: MOVE R,T ;COMMA
657 LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION
688 ;REGISTER EXAMINATION LOGIC
690 LINEF: PUSHJ P,DEPRA ;NEXT REGISTER
691 IFE EDDT&1,<PUSHJ P,CRNRB
710 JRST CONSYM ;RETURN IS A POPJ
712 VARRW: PUSHJ P,DEPRA ;^
717 CARR: PUSHJ P,DEPRA ;CLOSE REGISTER
718 IFN EDDT&1,<JRST DD1>
719 IFE EDDT&1,< PUSHJ P,TIN
724 OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT
725 OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY
727 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT
728 SLASH: TLZ F,STF ;TYPE OUT REGISTER
730 HRRZM T,LLOC ;QUANTITY TYPED
734 ICON: TLNN F,ROF ;REGISTER OPENED OR ERR
740 TAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q
743 HRROI T,700000 ;3 RUBOUTS
747 DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED
748 TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED
749 JRST DEPRS ;SYMBOL REFERENCES TO IT
752 DEPRA2: JUMPGE R,DEPRS
759 EQUAL: TROA F,LF1+CF1 ;=
765 R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER
769 MOVEI W1,LWT ;SETUP FOR SPT
772 SIXBP: MOVNI W2,6 ;SIXBIT PRINTER
781 ;MODE CONTROL SWITCHES
783 TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII
785 CAIN T,6 ;CHECK FOR $6T
786 MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT
787 CAIN T,5 ;CHECK FOR $5T
788 MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50
789 HWRDS: ADDI R,HLFW-TFLOT ;H
790 SFLOT: ADDI R,TFLOT-PIN ;F
791 SYMBOL: ADDI R,PIN-FTOC ;S
796 RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIE
803 BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N>1
807 BASE1: MOVS S,[XWD SCHM,SCH]
810 BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT
813 SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE
815 \f;GO AND EXECUTE LOGIC
820 IFN EDDT&1,< SKIPE T,STARTA> ;LOAD TAPE START ADDRESS
821 IFE EDDT&1,< HRR T,JOBSA> ;GET STARTING ADDRESS
831 XEC1: JRST DDT ;USED AT PROC0
838 BP1: REPEAT NBP,< 0 ;JSR TO HERE FOR BREAKPOINT
840 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE
847 POP T,LEAV ;MOVE INSTRUCTION TO LEAV
848 MOVEI T,B1SKP-B1INS+1(T)
849 HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP
850 MOVEI T,B1CNT-B1SKP(T)
851 HRRM T,BCOM2 ;PROCEDE COUNTER SETUP
853 IFN EDDT&1,< TLZ T,010000 ;TURN OFF USER MODE BIT>
854 HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING
857 BCOM3: SKIPE B1SKP ;ADDR MOD TO LOOK AT COND. INST.
859 BCOM2: SOSG B1CNT ;ADDR MOD TO LOOK AT PROCEED COUNTER
863 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION
867 JRST PROC1 ;MUST BE INTERPRETED
870 JRST PROC1 ;MUST BE INTERPRETED
872 JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAV
875 \fBREAK: JSR SAVE ;SAVE THE WORLD
876 PUSHJ P,REMOVB ;REMOVE BREAKPOINTS
878 HRRZS T ;GET ADDR OF BREAKPOINT JUST HIT
879 PUSHJ P,PADSO ;PRINT ITS NAME- $NB
880 MOVSI W1,(ASCII />/) ;TYPE > FOR COND BREAK
881 SKIPG @BCOM2 ;TEST PROCEED COUNTER
882 MOVSI W1,(ASCII />>/) ;TYPE >> FOR PROCEED COUNTER BREAK
885 HLLM T, SAVPI ;SAVE PROCESSOR FLAGS
887 PUSHJ P,PAD ;TYPE PC AT BREAK
889 HRRM T,PROC0 ;SETUP ADDRESS OF BREAK
891 JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE
892 PUSHJ P,LCT ;PRINT TAB
894 PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT
897 IDIVI R,3 ;GET BREAKPOINT NUMBER-1 INTO R
900 PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT
901 TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC
902 JRST RET ;DONT PROCEED
905 PROCEDE: TLNN F,QF ;N$P ;PROCEED AT A BREAKPOINT
912 PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT
914 JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK
923 MOVEM W,TEM1 ;SETUP MAX LOOP COUNT
925 \fIXCT4: IFE EDDT&1,< SUBI T,041
927 AOJGE T,IXCT6> ;DONT PROCEDE FOR INIT
928 ;DONT INTERPRET FOR SYSTEM UUOS
929 MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS
933 JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED
936 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION
937 CAIN T,254 ;DON'T DO ANYTHING TO JRST IN EXEC MODE
942 DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS
943 LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD
944 LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD
947 JRST IPUSHJ ;INTERPRET PUSHJ
950 JRST IJSR ;INTERPRET JSR
952 JRST IJSP ;INTERPRET JSP
954 JRST IJSA ;INTERPRET JSA
957 JRST IXCT4 ;INTERPRET UUO
959 JRST IXCT ;INTERPRET XCT
962 LEAV: 0 ;INSTRUCTION MODIFIED
967 BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR
972 IPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH
977 IJSA: MOVE T,BCOM ;INTERPRET JSA
982 IJSR: MOVE T,BCOM ;INTERPRET JSR
990 IJSP: MOVE W,BCOM ;INTERPRET JSP
997 INSRTB: MOVE S,[JSR BP1]
998 INSRT1: SKIPE R,B1ADR-BP1(S)
1001 MOVEM T,B1INS-BP1(S)
1011 REMOVB: MOVEI S,BNADR
1012 REMOV1: MOVE T,B1INS-B1ADR(S)
1018 IFN EDDT&1,<JRST TTYRET>
1019 IFE EDDT&1,<POPJ P,>
1021 ;IN EXEC MODE, SAVE UP TTY STATUS
1022 ;IN USER MODE, DONE BY SAVE
1024 ;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B
1027 BPS: TLZE F,QF ;HAS <A> BEEN TYPED?
1029 TRZE F,Q2F ;NO, HAS <N> BEEN TYPED?
1031 MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS
1033 BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER
1036 BPS1: TRZN F,Q2F ;HAS <N> BEEN TYPED?
1038 MOVE R,T ;YES, PROCESS THE COMMAND A$NB
1051 BPS3: MOVEI R,B1ADR ;PROCESS THE COMMAND A$B
1064 AUTOP: SUBI R,B1ADR ;AUTO PROCEDE SETUP SUBROUTINE
1073 \f;FETCH AND DEPOSIT INTO MEMORY
1076 DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT
1077 DEPR: MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM
1083 IFE EDDT&1,< HRRZ W,JOBREL
1088 DEP1: MOVEM T,AC0(R)
1091 FETCH: IFE EDDT&1,<HRRZ T,JOBREL
1098 \fFIRARG: MOVEM T,DEFV
1108 LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL
1111 ASH S,-1 ;SETUP COUNT FOR LENGTH OF SYM TABLE
1132 LOOK2: HRR W1,R ;POINTER BEST VALUE SO FAR
1135 LOOK3: ADD R,[XWD 2,2]
1138 AOJLE S,LOOK1 ;TERMINATING CONDITION
1146 CONS1: JRST @SCH ;PIN OR FTOC
1150 PIN: ;PRINT INSTRUCTION
1153 JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM
1154 AND T,[XWD 777000,0]
1159 TRNN F,ITF ;HAS INSTRUCTION BEEN TYPED?
1160 PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE
1161 TROA F,NAF ;INSTRUCTION TYPED, ALOOW NEG ADDRESSES
1162 JRST HLFW ;NOT FOUND, OUTPUT AS HALFWORDS
1164 PI3: LDB T,[XWD 270400,LWT] ;GET AC FIELD
1171 TLNE W1,20 ;CHECK FOR INDIRECT BIT
1174 LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS
1180 LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK
1193 HLFW: MOVEI T,"(" ;PRINT AS HALF WORDS
1199 PAD: ANDI T,777777 ;PRINT ADDRESS
1200 JRST @AR ;PADSO OR PAD1
1201 PADSO: JUMPE T,TOC2+1
1212 PADS1A: PUSHJ P,TOUT
1214 PAD1: JRST TOC ;EXIT
1224 INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM
1225 TDCN T,[XWD -1,400000]
1226 JRST PADS3B ;TYPE AS NEG NUM
1227 LDB R,[POINT 3,T,12]
1228 DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER
1234 PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER
1252 WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN
1253 NWORD: ADDI R,326000+40*T ;JUMPN T,
1259 MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS
1267 SEAR1: PUSHJ P,FETCH
1269 TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH
1273 SEAR2: JUMPE T,SEAR3 ;OR JUMPN T
1274 SEAR2A: PUSHJ P,LISTEN ;QUIT ON TELETYPE
1278 \fSEAR3: PUSHJ P,FETCH
1297 EFFEC0: MOVEM R,TEM2
1301 LDB R,[POINT 4,T,17] ;GET IR FIELD
1306 TLNN W,20 ;INDIRECT BIT CHECK
1318 SETUP: TLO F,20 ;ZERO
1319 SETUP1: ADDI T,1 ;YANK,VERIFY,SEARCHES
1321 SETUP2: MOVE T,@SYMP
1327 IFE EDDT&1,< CAML T,JOBREL>
1328 IFN EDDT&1,< JRST .+2>
1345 ZERO1: TRNE R,777760
1352 MOVEI R,ZLOW ;DON'T ZERO 20-ZLOW
1359 CAIG R, DDTEND ; DON'T ZERO OUT
1360 MOVEI R, DDTEND ; DDT
1373 FTOC: ;NUMERIC OUTPUT SUBROUTINE
1385 CJTOUT: JRST TOUT ;DOES POPJ TO TOC2 OR EXIT
1396 ;SYMBOL OUTPUT SUBROUTINE
1398 SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM
1399 SPT: MOVE T,CJTOUT ;RADIX 50 SYMBOL PRINT
1400 SPT4: MOVEM T,SPTX ;SETUP OUTPUT DESTINATION
1401 LDB T,[POINT 32,0(W1),35] ;GET SYMBOL
1407 JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS
1415 SPTX: 0 ;JRST TOUT, OR IDPB T,R FROM OPEVAL
1418 SYMD: MOVEI T,DELO/200000 ;$D ;DELETE LAST SYM & PRINT NEW
1419 HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM
1421 DPB T,[POINT 2,(R),1] ;STORE SEMI-DELETE BITS IN SYMBOL
1423 JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL
1425 ;FLOATING POINT OUTPUT
1435 TFLOT1: MOVEI T,"#" ; IF UNNORMALIZED FLOATING
1436 TLNN A, 400 ; POINT NUMBER, SO INDICATE
1437 PUSHJ P, TOUT ; WITH "#" BEFORE NUMBER
1451 PUSHJ P,TOC6 ;PRINT DECIMAL POINT
1476 \fFP7: JUMPE A,FP7A1
1487 353473426555 ;1.0E32
1488 266434157116 ;1.0E16
1489 FT8: 233575360400 ;1.0E8
1493 FT: 201400000000 ;1.0E0
1494 026637304365 ;1.0E-32
1495 113715126246 ;1.0E-16
1496 146527461671 ;1.0E-8
1497 163643334273 ;1.0E-4
1498 172507534122 ;1.0E-2
1499 FT01: 175631463146 ;1.0E-1
1502 FCP: CAMLE A, FT0(C)
1510 TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL
1512 TEXT2: MOVEI T, ;7 BIT ASCII TEXT OUTPUT SUBROUTINE0
1520 KILC: XWD -NSYMS,LOW
1526 FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3
1543 SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED
1548 SYMP: XWD PID,JOBSYM
1553 IFN EDDT&1,<STARTA: 0> ;START ADR FROM PTR
1559 REPEAT NBP*3-3, < 0>
1568 SCHM: EXP PIN ;DO NOT CHANGE ORDER
1577 IFN EDDT&1&<EDDT>B36,<
1584 HRRZM R,DEFV ;R CONTAINS LLOCO
1590 JRST ERR ;ONE ARGUMENT MISSING
1596 PUN1: MOVEI T,4 ;PUNCH 4 FEED HOLES
1598 TLNE F,CF ;PUNCH NON-ZERO BLOCKS?
1609 JUMPGE R,RET ;EXIT OR PUNCH
1612 SOS W,T ;INIT CHECKSUM
1614 PBLK1: PUSHJ P,FETCH
1623 ;PUNCH NON-ZERO BLOCKS
1625 PUNZ0: AOS DEFV ;LOOK AT NEXT WORD
1626 PUNZ: HRRZ W,DEFV ;ENTER HERE - GET STARTING ADDRESS
1628 SUB W,TEM1 ;CALCULATE NEGATIVE LENGTH
1629 HRL R,W ;SET UP AOBJN POINTER
1630 JUMPGE R,RET ;FINISHED?
1631 CAMG R,[XWD -40,0] ;BLOCK LONGER THAN 40?
1632 HRLI R,-40 ;YES, FIX IT UP
1633 MOVSI W1,400000 ;W1 NEGATIVE MEANS FLUSH 0 WORDS
1634 PUNZ2: PUSHJ P,FETCH ;GET WORD FROM MEMORY
1636 JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER
1637 MOVEI W1,0 ;CLEAR 0 WORD COUNTER
1638 PUNZ4: JUMPL W1,PUNZ0 ;FLUSH 0 WORD, GET ANOTHER
1639 CAIL W1,3 ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD
1640 AOSA R ;ADVANCE R TO LAST ADR+1
1642 ADD W1,DEFV ;CALCULATE DEFV-R+W1=-WORD COUNT
1644 HRLM W1,DEFV ;PUT -WC IN LEFT HALF OF FA
1645 EXCH R,DEFV ;SAVE ADR FOR NEXT BLOCK, GET POINTER
1649 \fIFN EDDT&1&<EDDT>B36,<
1664 BLKEND: TLNN F,QF ;BLOCK END
1672 PUSHJ P,PWRD ;EXTRA WORD FOR READER TO STOP ON
1690 FEED1: POPJ P,0 ;ADDRESS USED AS A CONSTANT
1693 \fIFN EDDT&1&<EDDT>B36,<
1697 CORE: PUSHJ P,SETUP1 ;LOAD TAPES INTO CORE
1699 CORE1: CONSO PTRR,10
1702 CAME T,LOADE-1 ;JRST 1
1730 MOVE T,TEM3 ;CORE CONTENTS
1733 MOVE T,TEM2 ;TAPE CONTENTS
1738 VER3: PUSHJ P,LISTEN
1740 RUNEND: PUSHJ P,BLOCK
1745 \fIFN EDDT&1&<EDDT>B36,<
1755 BLOCKS: CONO PTRR,60 ;READ DATA BLOCKS
1756 BLOCK: CONSO PTRR,10
1761 CONO PTRR,0 ;TURN OFF READER
1763 BLK1: MOVEM W,W1 ;INIT CHECKSUM
1766 JRST ERR ;BLOCK TOO BIG
1783 CONO PTRR,0 ;CHECKSUM ERROR
1786 ;R CONTAINS RIGHT HALF OF FIRST LINE
1787 ;S CONTAINS (-WC,BUFF-1)
1791 \fIFN EDDT&1&<EDDT>B36,<
1796 PHASE 0 ;RIM10B CHECKSUM LOADER
1802 DATAI PTRR,@TBL1-RD+1(AA)
1818 LOADE: XWD LOADB-.,LOADB
1823 SAVE: 0 ;SAVE THE ACS AND PI SYSTEM
1838 IFE EDDT&1,<PUSHJ P,TTYRET> ;IN USER MODE, GET INTO DDT MODE
1840 MOVE T,[XWD SCHM,SCH]
1841 BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES
1844 RESTORE: SETOM TEM3 ;RESTORE ACS AND PI SYSTEM
1850 IORI T, 2000 ;TURN ON CHANNELS
1856 CPUSHP: PUSH BCOM ;PROGRAM MODIFIED AT IPUSHJ
1857 IFN EDDT&1,< CONO PRS,@SAVPI>
1861 CRN: MOVEI T,15 ;CARRIAGE RETURN
1870 LF: MOVEI T,12 ;LINE FEED
1873 LCT: IFN EDDT&1,<PUSHJ P,TSPC
1875 IFE EDDT&1,<MOVEI T,11
1876 JRST TOUT> ;TYPE A TAB
1878 TSPC: MOVEI T,40 ;SPACE
1880 \fIFN EDDT&1,< ;EXECUTIVE MODE TELETYPE I/O
1882 TIN: PUSHJ P,LISTEN ;TELETYPE CHARACTER INPUT
1886 MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW
1888 JRST WRONG ;YES, TYPE XXX
1889 TRNE T,140 ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC
1890 TOUT: CAIG T,04 ;DON'T TYPE EOT OR LOWER CHARS
1893 IMULI T,200401 ;GENERATE PARITY
1898 TRC T,200 ;MAKE PARITY EVEN
1902 ANDI T,177 ;FLUSH PARITY
1905 LISTEN: CONSO TTYY,40 ;LISTEN FOR TTY
1911 TTYRET: MOVEI T,3410
1912 TTY1: MOVEI W2,40000
1920 TTYLEV: MOVE T,SAVTTY
1928 TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES
1930 JRST TOUT ;ECHO CHARACTERS (0-37) NOT ECHOED
1933 \fIFE EDDT&1,< ;USER MODE TELETYPE I/O
1936 TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE
1937 CAME T,[POINT 7,INBFF]
1941 MOVEI T,33 ;CHANGE TO NEW ALT MODE
1943 JRST WRONG ;YES PRINT XXX
1945 MOVE T,[POINT 7,INBFF]
1947 CALL T,[SIXBIT /DDTIN/]
1950 TOUT: JUMPE T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS
1956 MOVE T,[POINT 7,INBFF]
1959 CALL T,[SIXBIT /DDTOUT/]
1963 PINBFF: POINT 7,INBFF
1964 POUTBF: POINT 7,INBFF
1969 TTYRET: CALL [SIXBIT /DDTGT/]
1970 MOVE T,[POINT 7,INBFF]
1976 TTYLEV: PUSHJ P,FINOUT
1977 CALL [SIXBIT /DDTRL/]
1980 TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE
1983 BDISP: POINT 12,DISP(R),11
1988 DEFINE D (Z1,Z2,Z3)<XLIST
1989 EXP <Z1-DDT>*1B11+<Z2-DDT>*1B23+Z3-DDT
1992 IFE EDDT&1&<EDDT>B36,< PUNCH=ERR
2015 D MINUS,PERIOD,SLASH
2021 D QUESTN,INDIRECT,ABSA
2024 D HWRDS,PILOC,BLKEND
2026 D NWORD,BITO,PROCEDE
2033 REPEAT 11,<D ERR,ERR,ERR>
2038 IFIX: MOVE R,@SYMP ;DIDDLE SYMBOL TABLE POINTERS
2049 BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE
2086 ;DESCRIPTION OF OP DECODER FOR DDT:
2088 ; THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO
2089 ;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS
2090 ;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN
2091 ;FOR THE PDP-6. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL
2092 ;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY
2093 ;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH
2096 ; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD.
2097 ;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE:
2098 ;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER.
2099 ; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS
2102 ; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT
2103 ; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION.
2104 ; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER
2105 ; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS
2106 ; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE
2107 ; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS.
2112 ;; C(INST) = .010 101 100(2)
2114 ; THE RESULT- D = 010(2) = 2(8)
2116 ; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE.
2117 ; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH
2118 ; PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES
2119 ; THE INTERPRETATION.
2121 ;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION
2124 ;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE.
2128 ; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING
2131 ;73(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS
2132 ; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD
2133 ; BYTE IN THE TABLE.
2135 ;MAROS ASSEMBLE THE TABLE TBL:
2136 ; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST
2137 ; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE.
2138 ; 2. A POINT (.) ASSEMBLES A STOP CODE.
2139 ; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE
2140 ; SYMBOLICALLY NAMED BYTE.
2141 ; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT,
2142 ; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER.
2144 ;EXAMPLE OF BINARY TO SYMBOLIC DECODING:
2145 ; THE MACHINE CODE FOR JRST IAS 254
2146 ; INST 0 1 0 1 0 1 1 0 0
2147 ; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^).
2148 ; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER
2149 ; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN
2150 ; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING
2151 ; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED
2160 ;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO
2161 ;4 BYTES ARE SKIPPED OVER:
2169 ; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT
2170 ;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS.
2172 ; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A
2173 \f\f\f\f\f\fREPEAT 0,<
2176 DEFINE INFO (AA,BB)<
2189 IFE Z-":",<INFO <>,<=CLOC>
2190 IFNDEF FIR.,<FIR.=CLOC>
2191 IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG>
2193 IFE Z-"/",<IF1 <OUTP 1>
2194 IF2,<INFO OUTP,+73-FIR.>
2196 IFE Z-"^",<OUTP <ZZ&70/2+ZZ&7-1>
2198 IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,<
2215 BINRY=BINRY*400+BINRY*400+A
2224 TBL: ;OPDECODER BYTE TABLE
2227 CLOC=0 ;SET BYTE LOCATION COUNTER TO 0
2228 BINC=4 ;INIT BYTES/WORD COUNTER
2230 BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/>
2233 BYT9 <21^BD/CON,11^OI/S,01^Z/O/>
2234 BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/>
2237 BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^>
2238 BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/>
2239 BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/>
2240 BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/>
2241 BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/>
2242 ;BYTE AND FLOATING INSTRUCTIONS
2244 BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:>
2245 BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/>
2246 BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/>
2248 ;FWT,FIXED POINT ARITH,MISC.
2250 BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/>
2251 BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^>
2252 BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,>
2253 BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:>
2254 BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,>
2255 BYT9 <AOB/JRS T/JFC L/XC T/CON S/AOB:01^P/N/>
2256 BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,>
2257 BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:>
2258 BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/.,S1:21^.,C:C.,>
2260 ;ARITH COMP,SKIP,JUMP
2262 BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^>
2263 BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/>
2264 BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:>
2265 BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,>
2270 BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:>
2271 BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/>
2275 BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,>
2276 BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/>
2281 BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/>
2282 BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/>
2283 BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/>
2284 BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/>
2285 BYT9 <CA/CM/CM/CB/O IMB/>
2288 BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/>
2289 BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/>
2291 REPEAT BINC,<BINRY=BINRY*400+BINRY*400>
2292 IFN BINRY,<EXP BINRY>>
2304 DEFINE .COLON (AA) <
2306 IFGE CLOC+73-1000-FIR., <PRINTX OPTABLE TOO LONG>>>
2314 IFNB <A>, <.REP5 A>>
2323 IRPC A, <CLOC==CLOC+1>>
2336 IFNB <A>, <.REP5 A>>
2345 IRPC A, <OUTP "A"-40>>
2348 BINRY== BINRY+<A>_<BINC==BINC-9>
2356 \fTBL: ;OPDECODER BYTE TABLE
2359 CLOC== 0 ;SET BYTE LOCATION COUNTER TO 0
2360 BINC== ^D36 ;INIT BYTES/WORD COUNTER
2478 \f;BYTE AND FLOATING INSTRUCTIONS
2539 \f;FWT,FIXED POINT ARITH,MISC
2685 \f;ARITH COMP,SKIP,JUMP
2762 \f;TEST INSTRUCTIONS
2898 IFNDEF CLOC.,<CLOC.=CLOC>
2899 IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE>
2901 PNTR: EXP INST ;POINTER TO BITS IN INST
2902 INST: 0 ;BINARY FOR INSTRUCTION
2903 CHP: 0 ;CHAR POINTER INTO TXT, TXT+1
2904 TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL
2905 SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER
2907 BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER
2908 POINT 9,TBL,8 ;FOR TRANSFER BYTE
2912 OPEVAL: MOVE T,OPEV1 ;EVALUATE FOR AN OP CODE
2914 MOVE R,[POINT 7,TXT]
2920 OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY
2922 MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS
2923 MOVE T,[XWD 440700,TXT]
2924 MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT
2925 DEC: TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG
2928 DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL
2931 SOJGE R,DC1 ;SKIP OVER # BYTES = C(R)
2932 JUMPG R,DC1 ;SKIP OVER ALPHA TEXT WITHOUT COUNTING
2934 JUMPE T,DECX ;TRANSFER ON ASTOP CODE
2936 DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE
2939 DPB T,[XWD 300600,PNTR]
2941 JRST DC6 ;FOR OPEVAL ONLY
2942 LDB R,PNTR ;GET # BYTES TO SKIP OVER
2946 JUMPL T,DECT ;TYPE OUT A LETTER
2947 MOVEI W1,FIR.(T) ;BYTE IS A TRANSFER
2949 MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE
2955 JRST DC8 ;TYPE OUT A LETTER
2956 ILDB W1,CHP ;GET NEXT INPUT LETTER
2957 CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER
2958 JRST NOMAT ;DOESNT MATCH
2959 JRST DC1 ;MATCHES, TRY NEXT
2961 DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN
2962 POPJ P, ;IF FOR OUTPUT, RETURN
2963 ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY
2964 JUMPE W1,DC7 ;DOES # OF CHARS MATCH
2965 NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE
2969 NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE
2970 DPB R,PNTR ;STUFF INTO ANSWER
2972 JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG
2974 JRST NOMAT ;NOT AT TOP LEVEL
2975 JRST UNDEF ;UNDEFINED, FINALLY
2977 DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE
2979 DC6AA: CAMN P,SAVPDL
2981 LDB T,-2(P) ;OLD VALUE OF PNTR
2990 DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER
2992 LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL
2996 DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS
2999 DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG
3001 PUSHJ P,TOUT ;OUTPUT A LETTER
3002 CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES
3007 IFN EDDT&1&<EDDT>B36,<BUFF: BLOCK 40>