2 EDDT=1 ;MAKE EXEC DDT
\r
4 ;ALL OTHER REFERENCES TO VERSION # ARE TAKEN CARE OF BY THIS DEFINITION
\r
12 DDT ASSEMBLY INSTRUCTIONS
\r
14 THE SOURCE OF DDT,13 WILL ASSEMBLE INTO SEVERAL DIFFERENT
\r
15 VERSIONS; THE ASSEMBY IS CONTROLED BY THE VALUE ASSIGNED
\r
16 TO THE SYMBOL "EDDT". THE SYMBOL "EDDT" IS DECODED AS FOLLOWS:
\r
18 BIT 35 =0: ASSEMBLE USER MODE DDT
\r
19 =1: ASSEMBLE AN EXECUTIVE MODE DDT
\r
21 BIT 34 =0: DO NOT ASSEMBLE THE PAPER TAPE FEATURE INTO DDT
\r
22 =1: ASSEMBLE THE PAPER TAPE FEATURES BUT ONLY IF
\r
23 ASSEMBLING AN EXECUTIVE MODE DDT
\r
25 BIT 33 =0; FOR USER MODE DDT ONLY- ASSEMBLE USING THE
\r
26 "TTCALL" UUO FOR TELETYPE IO
\r
27 =1; FOR USER MODE DDT ONLY- ASSEMBLE USING THE
\r
28 "DDTIN" AND "DDTOUT" UUO'S FOR TELETYPE IO
\r
30 BIT 32 =1; ASSEMBLE A FILE DDT
\r
33 =0; ASSEMBLE A RELOCATABLE VERSION OF DDT (RELOC 0)
\r
34 NOT=0; ASSEMBLE AN ABSOLUTE (NON-RELOCATABLE) VERSION
\r
35 OF DDT WITH A STARTING ADDRESS BEING THE
\r
38 (IF THE SYMBOL "EDDT" IS NOT DEFINED AT ALL, DDT WILL BE ASSEMBLED
\r
41 EXAMPLES OF "EDDT" DEFINTIONS:
\r
42 EDDT=0 ASSEMBLE A RELOCATABLE USER MODE DDT WITH TELETYPE
\r
43 I/O DONE BY THE "TTCALL" UUO
\r
45 EDDT=1 ASSEMBLE A RELOCATABLE EXECUTIVE MODE DDT
\r
48 ASSEMBLE AN ABSOLUTE EXECUTIVE MODE DDT
\r
49 WITH PAPER TAPE FEATURES, AND WHOSE STARTING
\r
50 ADDRESS IS LOCATION 4000.
\r
62 EXAMPLE OF A MACRO ASSEMBLY COMMAND:
\r
68 *DSK:UDDT,/C_TTY:,DTA2:DDT.12
\r
72 END OF PASS 1 ;THIS LINE TYPED BY MACRO
\r
75 NO ERRORS DETECTED ;TYPED BY MACRO
\r
77 PROGRAM BREAK IS 003340 ;TYPED BY MACRO
\r
82 OTHER VERSION OF DDT ARE ASSEMBLED IN A SIMILAR MANNER
\r
83 BY DEFINING "EDDT": A DIFFERENT WAY WHERE THE EXAMPLE
\r
88 IFNDEF EDDT,<EDDT=0>
\r
95 IFN EDDT&1,<DEFINE HEADER (VERSION),<
\r
96 TITLE EDDT V0'VERSION -EXEC MODE DDT
\r
102 IFE EDDT&1,<DEFINE HEADER (VERSION),<
\r
104 TITLE UDDT V0'VERSION -USER MODE DDT>
\r
106 TITLE FILDDT V0'VERSION -FILE DDT>
\r
107 EXTERN JOBREL,JOBSYM,JOBSA
\r
110 ;DO NOT SET LOWER CORE IF EXEC DDT(OK USER OR FILDDT)
\r
114 DDTVER ;PUT VERSION # IN JOBVER
\r
121 IFN EDDT&<XWD -1,0>,<LOC <EDDT>B53>
\r
124 ;THE HEADER MACRO CONSTRUCTS THE TITLE AND VERSION #
\r
125 \fIFN EDDT&10,< CM=2 ;DEFINE SOFTWARE CHANS.
\r
128 ;DEFINE ACCUMULATORS
\r
132 R=<A=2> ;POINTERS TO TABLES, CORE, ETC.
\r
134 W=<C=4> ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER
\r
138 SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT
\r
139 AR=11 ;MODE CONTROL SWITCH FOR OUTPUT
\r
140 ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX
\r
144 ;DEFINE I/O DEVICE MNEMONICS FOR DDT USE
\r
150 ;DEFINE PUSH DOWN LENGTH
\r
151 LPDL=50 ;MAX LENGTH PUSH DOWN LIST
\r
153 ;DEFINE BITS FOR USE IN LEFT HALF OF ACCUMULATOR F
\r
154 COMF=200000 ;COMMA TYPED FLAG
\r
155 TIF=100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA
\r
156 PTF=100 ; +, -, OR * HAS BEEN TYPED
\r
158 SF=4 ;SYLLABLE FLAG
\r
159 QF=1 ;QUANTITY TYPED IN TO WORD ASSEMBLER
\r
162 CCF=10000 ; $$ TYPED
\r
163 MF=2 ;MINUS SIGN TYPED IN
\r
164 LTF=20 ;LETTER TYPED IN TO CURRENT SYLLABLE
\r
165 ROF=10 ;REGISTER OPEN FLAG
\r
170 FPF=20000 ; . TYPED IN
\r
171 FEF=400000 ; E FLAG
\r
174 DVF=40000 ;DIVIDE FLAG
\r
176 ;PID IS 20 IF SYM TAB POINTER IS INDIRECT JOBSYM
\r
177 PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM
\r
179 ;DEFINE BITS FOR USE IN RIGHT HALF OF ACCUMULATOR F
\r
181 ITF=2 ;INSTRUCTION TYPED IF ITF=1
\r
182 OUTF=4 ;OUTPUT IF OUTF=1
\r
183 CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT
\r
184 LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT
\r
185 Q2F=1 ;NUMBER TYPED AFTER ALT MODE
\r
186 R20F=10 ;TEMP FLAG USED IN SETUP
\r
188 NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE
\r
189 POWF=4000 ;ARGUMENT FOR EXPONENT COMING
\r
191 ;DEFINE SYMBOL TABLE SYMBOL TYPES
\r
192 GLOBAL=040000 ;GLOBAL SYMBOL
\r
194 PNAME=740000 ;PROGRAM NAME
\r
195 DELI=200000 ;DELETE INPUT
\r
196 DELO=400000 ;DELETE OUTPUT
\r
198 DDT: INTERN DDTEND ;DECLARE END OF DDT AS INTERNAL, FOR
\r
199 ; USER TO SEE (USER MODE) AND ONCE ONLY CODE
\r
201 IFE EDDT&1,< ENTRY DDT
\r
203 IFN EDDT&1,< INTERNAL DDT
\r
205 ENTRY DDTX ;NEEDED BY MONITOR>
\r
208 ;DEFINE $ SYMBOLS INTERNAL TO DDT
\r
209 OPDEF DDTINT [Z 0,] ;ADDRESS FLAG FOR INTERNAL REGISTERS
\r
212 NBP=8 ;NUMBER OF BREAKPOINTS
\r
213 DEFINE DBPNT (Z.)<XP $'Z.'B,<DDTINT B1ADR+3*Z.-3>>
\r
215 REPEAT NBP,<DBPNT \<ZZ=ZZ+1>>
\r
223 \f;DEFINE I/O DEVICE MNEMONICS
\r
253 ;DEFINE EXTENDED OPERATIONS
\r
263 HLRZ T,ESTU ;THIS SEQUENCE INITS SYM TABLE LOGIC
\r
266 ADD T,W ;IF THE TOP OF THE UNDEFINED SYM TAB DOES
\r
267 TRNE T,-1 ; NOT POINT TO BOTTOM OF REGULAR SYM TABLE,THEN
\r
268 HRRZM W,ESTU ; RE-INIT UNDEFINED SYM TABLE POINTER. ESTU.
\r
270 SUB T,W ;IF THE SYM TABLE PNTR AND THE PROGRAM
\r
271 TSC T,T ; NAME (PRGM) PNTR DO NOT END UP IN THE
\r
272 MOVE W1,PRGM ; SAME PLACE. OR THEY DO NOT BOTH START ON
\r
273 XOR W1,W ; AN EVEN (OR BOTH ON ODD) LOCATION. OR
\r
274 TRNE W1,1 ; PRGM .GE.0, THEN RE-INIT PRGM.
\r
275 JRST DDT0 ;EVEN-ODD PROBLEM
\r
276 SKIPN T ;POINTERS DON'T END TOGETHER
\r
277 SKIPL PRGM ;IF PRGM .GE. 0, THEN RE-INIT
\r
278 DDT0: MOVEM W,PRGM ;PRGM=C(JOBSYM)
\r
284 MOVEM T,JOBREN ;SET REENTER ADDRESS
\r
290 SETZM CRASH+3 ;CLEAR PPN
\r
291 SETZM COMNDS+3 ;CLEARN PPN IN CASE FILDDT SAVED AFTER STARTING
\r
292 SETZM SNAP+3 ;ALSO GOOD PRACTICE TO BE SELF INITIALIZING
\r
293 SETZM CRASHS ;ASSUME NO CRASH.SAV(IE. PEEK AT CURRENT MONITOR)
\r
295 JRST NOCSH ;LET USER PASS. HE MAY WANT TO PEEK AT MON.
\r
296 ; OR JUST WANT TO TYPE OUT VALUE OF SOME SYMBOLS
\r
297 SETOM CRASHS ;FLAG CRASH.SAV EXISTS ON DSK
\r
302 SETOM RSAVE ;FORCE READING OF "CURRENT" BLOCK
\r
308 SETOM COMAND ;ASSUME A COMMAND FILE
\r
310 NOLPT: SETZM COMAND ;NO FILE IF NOT FOUND
\r
312 JRST DD1 ;USE TTY I/O
\r
314 SIXBIT .,LPT. ;PREPARE FOR LPT OUTPUT IN AL MODE
\r
316 JRST NOLPT ;TREAT AS THO NO FILE
\r
318 JRST NOLPT ;TREAT AS NO FILE IF CAN'T ENTER
\r
322 HOW TO COPY MONITOR SYMBOL TABLE INTO FILDDT
\r
323 1) USE FDDD10 TO LOAD AN UNRUN VERSION OF YOUR MONITOR
\r
324 AS SAVED AFTER BUILD OR LOADING.
\r
325 2) RENAME IT AS CRASH.SAV
\r
326 3) LOAD A PRISTINE VERSION OF FILDDT AND START IT TO SET
\r
329 5) FILDDT WILL EXPAND AS NECESSARY AND COPY THE SYMBOL
\r
330 TABLE FROM CRASH.SAV INTO ITSELF
\r
331 6) AFTER CARRIAGE RETURN IS TYPED FILDDT IS DONE.
\r
332 7) SAVE FILDDT WITH A NEW NAME SO AS NOT TO CONFUSE IT WITH THE
\r
333 ORIGINAL FILDDT.SAV
\r
335 THE MONITOR CAN BE LOADED IN ANY OF THREE WAYS(IN ORDER OF PREFERENCE):
\r
336 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON
\r
337 2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER & COMMON
\r
338 3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD
\r
340 THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116) & T30SYM(131) IN DIFFERENT STATES:
\r
342 DDTSYM JOBSYM T30SYM
\r
344 1. JUNK S.T.PTR JUNK
\r
345 2. JUNK JUNK(NON-NEG) S.T.PTR
\r
346 3. S.T.PTR S.T.PTR JUNK
\r
353 EXTERNAL JOBFF,JOBREN
\r
355 SYMSET: MOVEI R,JOBSYM
\r
358 MOVEM T,JOBSYM ;POSSIBLE SYMBOL POINTER
\r
362 MOVEM T,DDTSTP ;YET ANOTHER CANIDATE
\r
363 MOVEI R,T30SYM ;ASSUME LOADED BY 10/30
\r
366 SKIPL JOBSYM ;OR IS JOBSYM A POINTER (-VE)?
\r
367 JRST REGT30 ;LOADED BY 10/30
\r
368 SKIPL DDTSTP ;DDTSYM A VALID POINTER (-VE)?
\r
369 MOVE T,JOBSYM ;NO TAKE JOBSYM AS THE POINTER
\r
370 REGT30: MOVEM T,JOBSYM ;SAVE IT OVER OLD JOBSYM
\r
372 MOVMS T,T ;LENGTH OF SYMBOL TABLE
\r
374 ADDI W,1300 ;LEAVE SPAVE FOR COMMAND & LPT BUFFERS.
\r
375 ; OR DSK BUFFERS AND EXTRA SYMBOL DEFNS.
\r
376 HRRZ W1,W ;SAVE LOC FOR COPY
\r
377 ADD W,T ;ADD TABLE LENGTH
\r
378 IORI W,1777 ;REQUEST INTEGRAL # OF K.
\r
379 CALLI W,11 ;GET CORE
\r
381 MOVE R,JOBSYM ;WHEREABOUTS OF MONITOR SYMBOLS
\r
382 HRRM W1,JOBSYM ;NOW POINT TO FILDDT SYMBOLS
\r
383 TCOPY: PUSHJ P,FETCH ;GET A WORD
\r
385 MOVEM T,0(W1) ;STASH IT
\r
388 JRST NOLPT ;GO TRY IT
\r
389 DDTSTP: Z ;SAVE POSSIBLE SYMBOL POINTER
\r
392 DD1.5: TLZ F,ROF ;CLOSE ANY OPEN REGISTER
\r
393 MOVE T,[XWD SCHM,SCH]
\r
394 BLT T,ODF ;LOAD ACS
\r
395 DD2: CLEARM PRNC ;PARENTHESES COUNT
\r
398 MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEM
\r
399 TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F]
\r
400 LIS0: TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF]
\r
406 L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG
\r
410 MOVEM T,TEM ;INIT SYMBOL COUNTER
\r
411 MOVE T,[POINT 7,TXT]
\r
412 MOVEM T,CHP ;SETUP FOR OPEVAL SYMBOL
\r
416 L2: PUSHJ P,TIN ;PICK UP CHARACTER
\r
417 CAIL T,"A"+40 ;LOWER CASE A
\r
418 CAILE T,"Z"+40 ;LOWER CASE Z
\r
420 TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE
\r
421 TLNE F,CF ;CONTROL FLAG
\r
428 CAILE T,137 ;DISPATCH TABLE HAS ENTRIES ONLY .LE. 137
\r
430 IDIVI R,3 ;REMAINDER GIVES COLUMN, QUOTIENT GIVES ROW
\r
431 LDB W,BDISP(R+1) ;GET 12 BIT ADDRESS FROM DISPATCH TABLE
\r
432 CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE
\r
438 MOVE T,[XWD OPEVAL,EVAL] ;GET ADDRESSES OF LOOKUP ROUTINES
\r
439 SKIPN WRD ;IF C(WRD)=0, CALL OPEVAL FIRST, OTHERWISE EVAL FIRST
\r
444 L212: HLRZS T,SAVE ;GET ADDRESS OF THE OTHER LOOKUP ROUTINE
\r
445 JUMPE T,UND1 ;IF ADR=0, THEN SYMBOL UNDEFINED
\r
446 L213: PUSHJ P,(T) ;CALL OPEVAL OR EVAL
\r
447 JRST L212 ;SYMBOL NOT FOUND
\r
461 JRST DDT(W) ;MULTIPLY OR DIVIDE
\r
464 JRST DDT(W) ; + - @ ,
\r
467 TLNE F,TIF ;TRUNCATE INDICATOR FLAG
\r
468 HLL T,WRD ;TRUNCATE
\r
478 L5: CAIG W,RPRN-DDT
\r
486 UNDEF: MOVEI W1,"U"
\r
488 WRONG: MOVE W1,[ASCII /XXX/]
\r
491 PUSHJ P,LCT ;TYPE TAB
\r
492 PUSHJ P,LISTEN ;GOBBLE ANY INPUT CHARACTER
\r
496 PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS
\r
499 UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER
\r
501 ASH S,-1 ;SETUP EVAL END TEST
\r
524 QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS
\r
526 QUEST1: JUMPGE R,DD1
\r
530 QUEST2: ADD W1,[XWD 2,2]
\r
537 QUEST4: ADD R,[XWD 2,2]
\r
539 \fNUM: ANDI T,17 ;T HOLDS CHARACTER
\r
547 IMULI W,12 ;CONVERT TO DECIMAL
\r
552 DOLLAR: SKIPA T,[46+101-13] ;RADIX 50 $ TO BE
\r
553 PERC: MOVEI T,47+101-13 ;PERCENT SIGN
\r
554 LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
\r
555 TLZN F,LTF+FEF+SF+FPF
\r
565 LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL
\r
569 IMULI W,50 ;CONVERT TO RADIX 50
\r
571 SOSGE TEM ;IGNORE CHARACS AFTER 6
\r
577 \fNUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $
\r
585 MOVEI W1,6 ;FORM FLOATING POINT NUMBER
\r
594 NM1B: MOVSI W1,211000(T)
\r
595 FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT
\r
596 FADRB R,FH ;ADD VALUE INTO FLOATING NO.
\r
601 JRST L4 ;NO EXPONENT
\r
619 \fPERIOD: MOVE T,LLOC
\r
620 TLNE F,SF ;SYLLABLE STARTED
\r
623 TLNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE?
\r
624 TLO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL
\r
631 FAD T,[0] ;NORMALIZE T AND W1
\r
636 MOVEI T,45 ;RADIX 50 PERIOD
\r
639 PILOC: MOVEI T,SAVPI ;ADR SETUP FOR $I
\r
640 QUANIN: TLOA T,(DDTINT) ;MARK FOR ADR INTERNAL TO DDT
\r
641 QUAN: MOVE T, LWT ;PICK UP LAST QUANTITY TYPED
\r
643 QUAN2: TLO F,SF+QF ;WRD,SYL STARTED
\r
647 CONTRO: ;SOME KIND OF ALTMODE
\r
648 IFN EDDT&1,< MOVEI T,"$" ;$
\r
649 PUSHJ P,TOUT ;TYPE OUT $
\r
654 \fEVAL: MOVE R,PRGM ;LOOK UP SYMBOL
\r
655 EVAL0: HRLOI W1,37777+DELI
\r
657 ASH S,-1 ;SETUP END TEST
\r
660 EVAL1: ADD R,[XWD 2,2]
\r
663 AOJG S,CPOPJ ;TRNASFER IF NO SYMBOL FOUND
\r
673 CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP
\r
676 ;BIT 40 - DELETE OUTPUT
\r
677 ; 20 - DELETE INPUT
\r
680 ; NO BITS - PROGRAM NAME
\r
682 TEXI: PUSHJ P,TEXIN ;INPUT TEXT
\r
687 CAIN T,33 ;NEW ALT MODE, ESCAPE
\r
692 TEXI2: PUSHJ P,TEXIN
\r
699 TEXI3: LSHC T-1,-43
\r
703 \fSIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT)
\r
706 CAIL T,"A"+40 ;IS CHAR BETWEEN LOWER CASE "A" AND
\r
707 CAILE T,"Z"+40 ; LOWER CASE "Z"?
\r
709 TRC T,40 ;YES, CONVERT TO UPPER CASE
\r
710 CAIL T," " ;IS CHAR IN SIXBIT SET?
\r
713 ANDI T,77 ;YES, MASK TO 6 BITS
\r
714 TRC T,40 ;CONVERT TO SIXBIT FORM
\r
723 KILL: TLNN F,LTF ;DELETE SYMBOLS
\r
727 MOVEI T,DELO/200000 ;DELETE OUTPUT
\r
729 MOVEI T,DELI/200000 ;NO INPUT OR OUTPUT
\r
730 DPB T,[POINT 2,(R),1] ;LEFT 2 BITS IN SYMBOL
\r
731 KILRET: JRST RET ;USED AS A CONSTANT
\r
734 KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS
\r
736 KILL2: PUSHJ P,EVAL0
\r
741 REMUN: MOVE S,[XWD 2,2] ;REMOVE ONE UNDEFINED SYMBOL
\r
748 \fTAG: TLNN F,LTF ; NO LETTERS IS ERROR
\r
749 JRST ERR ; GO SAY ERROR
\r
750 TLNE F,FAF ; DEFINE SYMBOLS
\r
752 TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER
\r
757 DEFIN: PUSHJ P,EVAL ;DEFINED SYMBOL?
\r
758 JRST DEF1 ;NO - DEFINE
\r
759 JRST DEF2 ;YES, REDEFINE
\r
760 DEF1: MOVN R,[XWD 2,2]
\r
761 ADDB R,@SYMP ;MOVE UNDEFINED TABLE 2 REGISTERS
\r
769 MOVEM T,1(R) ;PUT IN NEW VALUE
\r
772 MOVEM T,(R) ;PUT IN NEW SYM AS GLOBAL
\r
775 DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY
\r
792 DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL
\r
794 \fSETNAM: MOVE R,@SYMP ;SET PROGRAM NAME - DOLLAR COLON
\r
796 SET2: JUMPGE R,UNDEF
\r
806 ;***ROUTINES BEYOND HERE EVALUATE THEIR ARGUMENT***
\r
807 MULT: TLOA F,PTF+MLF ;*
\r
808 DIVD: TLO F,DVF+PTF ;SINGLE QUOTE
\r
811 ASSEM: JRST PLUS ;#
\r
816 LPRN: CAML P,[XWD LPDL-4,0] ;LEFT PARENTHESIS
\r
818 PUSH P,F ;RECURSE FOR OPEN PAREN
\r
825 INDIRECT: HRLZI W,20 ;@
\r
830 ACCF: MOVE R,T ;COMMA PROCESSOR
\r
831 ACCCF: MOVSI T,.-. ;LEFT HALF OF A,,B
\r
832 TLOE F,COMF ;COMMA TYPED BEFORE?
\r
834 HRRM R,ACCCF ;NO, SAVE LEFT HALF OF A,,B
\r
836 LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION
\r
842 \fACCF1: MOVEM T,WRD ;SET LEFT HALF OF A,,B
\r
868 \f;REGISTER EXAMINATION LOGIC
\r
870 LINEF: PUSHJ P,DEPRA ;NEXT REGISTER
\r
871 IFE EDDT&1,<PUSHJ P,CRNRB
\r
875 LI1: ;PUSHJ P,LINCHK ;TRUNCATE ADRS (UNLESS INSIDE DDT)
\r
891 JRST CONSYM ;RETURN IS A POPJ
\r
894 LINCHK: CAML T,[DDTINT SAVPI] ;TRUNCATE ADDRESSES
\r
895 CAMLE T,[DDTINT BNADR+2]
\r
902 VARRW: PUSHJ P,DEPRA ;^
\r
907 CARR: PUSHJ P,DEPRA ;CLOSE REGISTER
\r
908 IFN EDDT&1,<JRST DD1>
\r
909 IFE EDDT&1,< PUSHJ P,TIN
\r
915 OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT
\r
916 OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY
\r
918 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT
\r
919 SLASH: TLZ F,STF ;TYPE OUT REGISTER
\r
920 TLNN F,QF ;WAS ANY QUANTITY TYPED?
\r
921 JRST SLAS1 ;NO. DO NOT CHANGE MAIN SEQUENCE
\r
922 MOVE R,LLOC ;YES. SAVE OLD SEQUENCE AND
\r
924 HRRZM T,LLOC ;PUSHJ P,LINCHK ;TRUNCATE ADRS- SET UP NEW SEQUENCE
\r
925 SLAS1: HRRZM T,LLOCO
\r
928 ICON: TLNN F,ROF ;REGISTER OPENED OR ERR
\r
932 \fTAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q
\r
934 EXCH T,LLOC ;SET UP NEW SEQUENCE AND
\r
935 MOVEM T,SAVLOC ;SAVE OLD SEQUENCE
\r
936 HRROI T,700000 ;3 RUBOUTS
\r
940 DEPRA: MOVE R,SAVLOC
\r
941 TLNE F,CF ;RESTORE OLD SEQUENCE IF $CR,$CF, OR
\r
942 EXCH R,LLOC ;IF $^ OR $BS WAS TYPED
\r
943 MOVEM R,SAVLOC ;SETUP "NEW" OLD SEQUENCE
\r
944 TLNE F,ROF ;IF REGISTER IS BEING CHANGED
\r
945 TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED
\r
946 JRST DEPRS ;SYMBOL REFERENCES TO IT
\r
949 DEPRA2: JUMPGE R,DEPRS
\r
956 EQUAL: TROA F,LF1+CF1 ;=
\r
962 R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER
\r
966 MOVEI W1,LWT ;SETUP FOR SPT
\r
969 SIXBP: MOVNI W2,6 ;SIXBIT PRINTER
\r
977 \f;MODE CONTROL SWITCHES
\r
979 TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII
\r
981 CAIN T,6 ;CHECK FOR $6T
\r
982 MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT
\r
983 CAIN T,5 ;CHECK FOR $5T
\r
984 MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50
\r
985 HWRDS: ADDI R,HLFW-TFLOT ;H
\r
986 SFLOT: ADDI R,TFLOT-PIN ;F
\r
987 SYMBOL: ADDI R,PIN-FTOC ;S
\r
988 CON: ADDI R,FTOC ;C
\r
992 RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIE
\r
995 ABSA: ADDI R,TOC ;A
\r
999 BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N>1
\r
1003 BASE1: MOVS S,[XWD SCHM,SCH]
\r
1006 BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT
\r
1009 SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE
\r
1011 \f;GO AND EXECUTE LOGIC
\r
1013 GO: HRLI T,(JRST) ;G
\r
1016 HRR T,JOBSA> ;GET STARTING ADDRESS
\r
1026 XEC1: JRST DDT ;USED AT PROC0
\r
1031 \f;BREAK POINT LOGIC
\r
1032 BP1: REPEAT NBP,< 0 ;JSR TO HERE FOR BREAKPOINT
\r
1034 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE
\r
1040 POP T,LEAV ;MOVE INSTRUCTION TO LEAV
\r
1041 MOVEI T,B1SKP-B1INS+1(T)
\r
1042 HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP
\r
1043 MOVEI T,B1CNT-B1SKP(T)
\r
1044 HRRM T,BCOM2 ;PROCEDE COUNTER SETUP
\r
1045 MOVE T,BP1-B1CNT(T)
\r
1046 IFN EDDT&1,< TLZ T,010000 ;TURN OFF USER MODE BIT>
\r
1047 HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING
\r
1050 BCOM3: SKIPE B1SKP ;ADDR MOD TO LOOK AT COND. INST.
\r
1052 BCOM2: SOSG B1CNT ;ADDR MOD TO LOOK AT PROCEED COUNTER
\r
1056 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION
\r
1058 CAILE T,266 ;JSA,JSP
\r
1060 JRST PROC1 ;MUST BE INTERPRETED
\r
1063 JRST PROC1 ;MUST BE INTERPRETED
\r
1065 JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAV
\r
1068 \fBREAK: JSR SAVE ;SAVE THE WORLD
\r
1069 PUSHJ P,REMOVB ;REMOVE BREAKPOINTS
\r
1071 HRRZS T ;GET ADDR OF BREAKPOINT JUST HIT
\r
1072 SUBI T,B1ADR-3 ;CHANGE TO ADDRESS OF $0B
\r
1073 IDIVI T,3 ;QUOTIENT IS BREAK POINT NUMBER
\r
1074 HRRM T,BREAK2 ;SAVE BREAK POINT #
\r
1075 MOVE W1,[ASCII /$0B>/] ;PRELIMINARY TYPEOUT MESSAGE
\r
1076 SKIPG @BCOM2 ;TEST PROCEED COUNTER
\r
1077 TRO W1,">"_1 ;CHANGE T TO /$0B>>/
\r
1078 DPB T,[POINT 4,W1,13] ;INSERT BREAK POINT # IN MESSAGE
\r
1081 HLLM T, SAVPI ;SAVE PROCESSOR FLAGS
\r
1083 PUSHJ P,PAD ;TYPE PC AT BREAK
\r
1085 HRRM T,PROC0 ;SETUP ADDRESS OF BREAK
\r
1087 JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE
\r
1088 PUSHJ P,LCT ;PRINT TAB
\r
1090 PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT
\r
1091 BREAK1: MOVSI S,400000
\r
1092 BREAK2: ROT S,.-. ;ROT BY # OF BREAK POINT
\r
1093 PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT
\r
1094 TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC
\r
1095 JRST RET ;DONT PROCEED
\r
1098 PROCEDE: TLNN F,QF ;N$P ;PROCEED AT A BREAKPOINT
\r
1103 PROCD1: PUSHJ P,CRF
\r
1105 PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT
\r
1107 JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK
\r
1112 PROC1: MOVE T,AC0+T
\r
1115 PROC2: MOVEI W,100
\r
1116 MOVEM W,TEM1 ;SETUP MAX LOOP COUNT
\r
1118 \fIXCT4: IFE EDDT&1,< SUBI T,041
\r
1120 AOJGE T,IXCT6> ;DONT PROCEDE FOR INIT
\r
1121 ;DONT INTERPRET FOR SYSTEM UUOS
\r
1122 MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS
\r
1126 JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED
\r
1128 IXCT5: IFN EDDT&1,<
\r
1129 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION
\r
1130 CAIN T,254 ;DON'T DO ANYTHING TO JRST IN EXEC MODE
\r
1135 DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS
\r
1136 LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD
\r
1137 LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD
\r
1140 JRST IPUSHJ ;INTERPRET PUSHJ
\r
1143 JRST IJSR ;INTERPRET JSR
\r
1145 JRST IJSP ;INTERPRET JSP
\r
1147 JRST IJSA ;INTERPRET JSA
\r
1150 JRST IXCT4 ;INTERPRET UUO
\r
1152 JRST IXCT ;INTERPRET XCT
\r
1154 IXCT6: JSP T,RESTORE
\r
1155 LEAV: 0 ;INSTRUCTION MODIFIED
\r
1160 BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR
\r
1164 \fIPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH
\r
1169 IJSA: MOVE T,BCOM ;INTERPRET JSA
\r
1174 IJSR: MOVE T,BCOM ;INTERPRET JSR
\r
1176 IJSR2: MOVE R,LEAV
\r
1178 JRST BPLUP ;ERROR, CAN'T STORE
\r
1180 IJSR3: MOVE T,LEAV
\r
1183 IJSP: MOVE W,BCOM ;INTERPRET JSP
\r
1188 ;INSERT BREAKPOINTS
\r
1190 INSRTB: MOVE S,[JSR BP1]
\r
1191 INSRT1: SKIPE R,B1ADR-BP1(S)
\r
1194 MOVEM T,B1INS-BP1(S)
\r
1197 JFCL ;HERE ONLY IF CAN'T WRITE IN HIGH SEG
\r
1203 ;REMOVE BREAKPOINTS
\r
1205 REMOVB: MOVEI S,BNADR
\r
1206 REMOV1: MOVE T,B1INS-B1ADR(S)
\r
1209 JFCL ;HERE ONLY IF NO WRITE IN HIGH SEG
\r
1213 IFN EDDT&1,<JRST TTYRET>
\r
1214 IFE EDDT&1,<POPJ P,>
\r
1215 ;IN EXEC MODE, SAVE UP TTY STATUS ;IN USER MODE, DONE BY SAVE
\r
1216 \f;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B
\r
1219 BPS: TLZE F,QF ;HAS <A> BEEN TYPED?
\r
1221 TRZE F,Q2F ;NO, HAS <N> BEEN TYPED?
\r
1223 MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS
\r
1225 BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER
\r
1228 BPS1: TRZN F,Q2F ;HAS <N> BEEN TYPED?
\r
1230 MOVE R,T ;YES, PROCESS THE COMMAND A$NB
\r
1243 BPS3: MOVEI R,B1ADR ;PROCESS THE COMMAND A$B
\r
1256 AUTOP: SUBI R,B1ADR ;AUTO PROCEDE SETUP SUBROUTINE
\r
1264 \f;FETCH AND DEPOSIT INTO MEMORY
\r
1267 DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT
\r
1268 MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM
\r
1274 PUSHJ P,DEP ;STORE AWAY
\r
1275 JRST ERR ;CAN'T STORE (IN DDT OR OUT OF BOUNDS)
\r
1278 ;DEPOSIT INTO MEMORY SUBROUTINE
\r
1282 JSP TT1,CHKADR ;LEGAL ADDRESS?
\r
1283 JRST DEP4 ;YES BUT IN HI SEGMENT>
\r
1285 JRST DEPAC ;DEPOSIT IN AC
\r
1287 IFE EDDT&10,< MOVE T,(R) >
\r
1288 JRST CPOPJ1 ;SKIP RETURN
\r
1290 DEPAC: MOVEM T,AC0(R) ;DEPOSIT IN AC
\r
1291 JRST CPOPJ1 ;SKIP RETURN
\r
1295 CALLI W,SETUWP ;IS HI SEGMENT PROTECTED? TURN OFF
\r
1296 POPJ P, ;PROTECTED, NO SKIP RETURN
\r
1297 MOVEM T,(R) ;STORE WORD IN HI SEGMENT
\r
1298 TRNE W,1 ;WAS WRITE PROTECT ON?
\r
1299 CALLI W,SETUWP ;YES, TURN IT BACK ON
\r
1301 JRST CPOPJ1 ;SKIP RETURN
\r
1303 > ;END NOT-FILDDT COND.
\r
1305 IFN EDDT&10,<DEP=CPOPJ> ;ALWAYS OK NO-OP IF FILE DDT
\r
1306 \f;FETCH FROM MEMORY SUBROUTINE
\r
1308 FETCH: IFE EDDT&10,<IFE EDDT&1,
\r
1309 <JSP TT1,CHKADR ;LEGAL ADDRESS?
\r
1310 JFCL> ;HIGH OR LOW OK FOR FETCH
\r
1311 TRNN R,777760 ;ACCUMULATOR?
\r
1312 SKIPA T,AC0(R) ;YES
\r
1314 JRST CPOPJ1 ;SKIP RETURN FOR LEGAL ADDRESS>
\r
1316 IFN EDDT&10,< SKIPN CRASHS ;CRASH.SAV EXISTS?
\r
1317 JRST MONPEK ;NO - GO PEEK AT RUNNING MONITOR
\r
1318 MOVEM R,TEM4 ;SAVE THE AOBJN POINTER
\r
1319 HRRZ R,R ;STRIP OFF POSSIBLE COUNT
\r
1321 IDIVI R,4000 ;R HAS LOCATION
\r
1322 CAIL R,30 ;R=NO. OF INPTS R+1=LOCATION
\r
1323 POPJ P, ;LARGER THAN 48K
\r
1324 TRNN S,777000 ;S=R+1
\r
1325 JUMPE R,RSDNT ;LOC IS IN RESIDENT BLOCKJ
\r
1326 CAMN R,RSAVE ;IS LOC INCORE ?
\r
1327 JRST INCORE ;S=LOC
\r
1328 MOVEM R,RSAVE ;INPT NO.
\r
1329 IMULI R,20 ;16/INPT
\r
1330 USETI 1,1(R) ;BLOK 0 DOES NOT EXIST
\r
1331 INPUT 1,CURLST ;GET 16 BLKS
\r
1334 INCORE: SKIPA T,CURENT(S)
\r
1335 RSDNT: MOVE T,RSIDNT(S)
\r
1336 MOVE R,TEM4 ;RESTORE AOBJN POINTER
\r
1338 TEM4: 0 ;HOLD AOBJN POINTER
\r
1339 MONPEK: HRRZ T,4 ;REMOVE COUNT
\r
1340 CALLI T,33 ;DO PEEK UUO
\r
1341 JRST CPOPJ1 ;RETURN VALUE IN AC T
\r
1344 IFE EDDT&1,< ;DO ADDRESS CHECKS ONLY IN USER MODE
\r
1345 CHKADR: HRRZ TT,JOBREL ;GET HIGHEST ADDRESS IN LOW SEGMENT
\r
1346 CAIL TT,(R) ;CHECK FOR WITHIN LOW SEGMENT
\r
1347 JRST 1(TT1) ;ADDRESS IS OK IN LOW SEGMENT, SKIP RETURN
\r
1348 HRRZ T,JOBHRL ;GET HIGHEST ADDRESS IN HIGH SEGEMENT
\r
1349 TRNE R,400000 ;IS THE ADDRESS IN HIGH SEGMENT?
\r
1350 CAIGE TT,(R) ;IS THE ADR TO BIG FOR HIGH SEGMENT?
\r
1351 POPJ P, ;NO, YES- ILL. ADR.
\r
1354 > ;END OF IFE EDDT&1
\r
1356 IFN EDDT&1,<CHKADR==CPOPJ> ;NO ADDRESS CHECKS IN EXEC MODE
\r
1357 \fFIRARG: MOVEM T,DEFV
\r
1367 LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL
\r
1370 ASH S,-1 ;SETUP COUNT FOR LENGTH OF SYM TABLE
\r
1372 HRLZI W2,DELO+DELI
\r
1375 LOOK1: TDNE W2,(R)
\r
1378 TLNN T,PNAME ;NAME
\r
1391 LOOK2: HRR W1,R ;POINTER BEST VALUE SO FAR
\r
1394 LOOK3: ADD R,[XWD 2,2]
\r
1397 AOJLE S,LOOK1 ;TERMINATING CONDITION
\r
1402 \fCONSYM: MOVEM T,LWT
\r
1404 JRST @SCH ;PIN OR FTOC
\r
1408 PIN: ;PRINT INSTRUCTION
\r
1411 JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM
\r
1412 AND T,[XWD 777000,0] ;EXTRACT OPCODE BITS
\r
1413 JUMPE T,HLFW ;TYPE AS HALF WORDS
\r
1417 TRNN F,ITF ;HAS INSTRUCTION BEEN TYPED?
\r
1418 PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE
\r
1419 TROA F,NAF ;INSTRUCTION TYPED, ALLOW NEG ADDRESSES
\r
1420 JRST HLFW ;NOT FOUND, OUTPUT AS HALFWORDS
\r
1422 LDB T,[XWD 270400,LWT] ;GET AC FIELD
\r
1425 PI3A: MOVEI W1,","
\r
1429 TLNE W1,20 ;CHECK FOR INDIRECT BIT
\r
1432 LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS
\r
1435 JRST PI8 ;ALL (EXECPT ASH,ROT,LSH) HAVE SYMBOLIC ADRS
\r
1438 JRST PI8 ;JFFO AND @ GET SYMBOLIC ADDRESSES
\r
1439 PUSHJ P,PADS3A ;ONLY ABSOLUTE ADDRESSING FOR LSH, ASH, AND ROT
\r
1441 LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK
\r
1442 JUMPE R,PADS1 ;EXIT
\r
1452 \fHLFW: REPEAT 0,< MOVE T,LWT
\r
1453 CAML T,[DDTINT SAVPI]
\r
1454 CAMLE T,[DDTINT BNADR+2]
\r
1457 HLRZ T,LWT ;PRINT AS HALF WORDS
\r
1458 JUMPE T,HLFW1 ;TYPE ONLY RIGHT ADR IF LEFT ADR=0
\r
1459 TRO F,NAF ;ALLOW NEGATIVE ADDRESSES
\r
1461 MOVSI W1,(ASCII /,,/)
\r
1462 PUSHJ P,TEXT2 ;TYPE ,,
\r
1465 ;PRINT ADDRESSES (ARG USUALLY 18 BITS BUT CAN BE 36 BITS:
\r
1468 JRST @AR ;PADSO OR PAD1
\r
1469 PADSO: JUMPE T,FP7B ;PRINT A ZERO
\r
1480 PADS1A: PUSHJ P,TOUT
\r
1482 PAD1: JRST TOC ;EXIT
\r
1485 PADS3A: TRNE F,NAF
\r
1488 PADS3B: MOVNM T,TEM
\r
1491 \fINOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM
\r
1492 TDCN T,[XWD -1,400000]
\r
1493 JRST PADS3B ;TYPE AS NEG NUM
\r
1494 LDB R,[POINT 7,T,9] ;PICK OUT IO DEVICE BITS
\r
1495 CAIL R,774_-2 ;IF DEVICE <774, THEN TYPE
\r
1496 JRST HLFW ;TYPE AS HALF WORDS
\r
1497 LDB R,[POINT 3,T,12]
\r
1498 DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER
\r
1504 PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER
\r
1516 MASK1: MOVEM T,MSK
\r
1518 \fEFFEC: TLO F,LTF
\r
1520 WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN
\r
1521 NWORD: ADDI R,326000+40*T ;JUMPN T,
\r
1526 MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS
\r
1531 TLO F,QF ;SIMULATE A $Q TYPED
\r
1534 SEAR1: PUSHJ P,FETCH
\r
1536 TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH
\r
1540 SEAR2: JUMPE T,SEAR3 ;OR JUMPN T
\r
1541 SEAR2A: AOS R,DEFV ;GET NEXT LOCATION
\r
1542 PUSHJ P,LISTEN ;ANYTHING TYPED?
\r
1543 CAMLE R,ULIMIT ;OR END OF SEARCH?
\r
1545 JRST SEAR1 ;NO, LOOK SOME MORE
\r
1547 SEAR2B: MOVEI R,400000-1 ;MOVE UP TO HI SEGMENT
\r
1548 IORB R,DEFV ;PUT IN MEMORY TOO
\r
1549 TRNN R,400000 ;ALREAY IN HI SEGMENT?
\r
1551 SEARFN: SETCMM LWT ;COMPLEMENT BITS BACK AND STOP SEARCH
\r
1553 \fSEAR3: MOVE R,DEFV
\r
1556 TLZ F,STF ;GET RID OF SUPPRESS TYPEOUT MODE
\r
1558 PUSHJ P,LI1 ;CALL REGISTER EXAMINATION LOGIC TO TYPE OUT
\r
1562 SEAR4: JRST SEAR2A
\r
1564 EFFEC0: MOVEI W,100
\r
1567 LDB R,[POINT 4,T,17] ;GET IR FIELD
\r
1573 TLNN W,20 ;INDIRECT BIT CHECK
\r
1582 \fSETUP: TLNN F,QF ;QUANTITY TYPED?
\r
1584 IFN EDDT&10,<MOVEI T,137777 ;DON'T SEARCH BEYOND 48K>
\r
1586 IFE EDDT&1,<MOVEI T,777777 ;NO, GET LAST ADR>
\r
1587 IFN EDDT&1,<HRRZ T,@SYMP ;NO, GET 1ST ADR SYM TABLE>
\r
1590 HRRZM T,ULIMIT ;SAVE HIGH LIMIT INCREMENTED BY ONE
\r
1591 HRRZS R,DEFV ;GET 1ST ADDRESS
\r
1592 TLNN F,FAF ;WAS A 1ST ADR SPECIFIED?
\r
1593 SETZB R,DEFV ;NO, MAKE IT ZERO
\r
1594 CAML R,ULIMIT ;LIMITS IN A REASONABLE ORDER?
\r
1601 HRRZ S,@SYMP ;GET 1ST ADR OF SYMBOL TABLE
\r
1602 HLRE W1,@SYMP ;GET LENGTH OF SYM TABLE
\r
1603 SUB W1,S ;GET NEG OF LAST ADR
\r
1604 MOVNS W1 ;GET POS LAST ADR
\r
1605 MOVEI T,0 ;0 TO STORE IN MEMORY
\r
1606 ZERO1: TRNE R,777760
\r
1607 JRST ZEROR ;OK TO ZERO AC'S
\r
1609 MOVEI R,ZLOW ;DON'T ZERO 20 THRU ZLOW
\r
1613 MOVEI R,DDTEND ;DON'T ZERO DDT
\r
1617 HRRZ R,W1 ;DON'T ZERO SYMBOL TABLE
\r
1618 ZEROR: CAMLE R,ULIMIT ;ABOVE LIMITS?
\r
1619 JRST DD1 ;YES, STOP
\r
1620 PUSHJ P,DEP ;DEPOSIT T
\r
1623 TRNN R,400000 ;HI SEGMENT?
\r
1624 AOJA R,ZERO1 ;NO, KEEP GOING
\r
1626 \fFTOC: ;NUMERIC OUTPUT SUBROUTINE
\r
1628 CAIN W1,10 ;IS OUPUT RADIX NOT OCTAL, OR
\r
1629 TLNN T,-1 ;ARE THERE NO LEFT HALF BITS?
\r
1630 JRST TOCA ;YES, DO NOTHING SPECIAL
\r
1631 HRRM T,TOCS ;NO, TYPE AS HALF WORD CONSTANT
\r
1632 HLRZS T ;GET LEFT HALF
\r
1633 PUSHJ P,TOC0 ;type left half
\r
1634 MOVSI W1,(ASCII /,,/)
\r
1635 PUSHJ P,TEXT2 ;TYPE ,,
\r
1636 TOCS: MOVEI T,.-. ;GET RIGHT HALF BACK
\r
1637 TOCA: HRRZ W1,ODF ;IS OUTPUT RADIX DECIMAL?
\r
1639 JRST TOC4 ;YES,TYPE SIGNED WITH PERIOD
\r
1650 TOC4: MOVM W1,T ;TYPE AS SIGNED DECIMAL INTEGER
\r
1654 TOC5: PUSHJ P,FP7 ;DECIMAL PRINT ROUTINE
\r
1658 ;SYMBOL OUTPUT SUBROUTINE
\r
1660 SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM
\r
1661 SPT: ;RADIX 50 SYMBOL PRINT
\r
1662 LDB T,[POINT 32,0(W1),35] ;GET SYMBOL
\r
1668 JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS
\r
1677 \fSYMD: MOVEI T,DELO/200000 ;$D ;DELETE LAST SYM & PRINT NEW
\r
1678 HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM
\r
1680 DPB T,[POINT 2,(R),1] ;STORE SEMI-DELETE BITS IN SYMBOL
\r
1682 JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL
\r
1683 \f;FLOATING POINT OUTPUT
\r
1693 TFLOT1: TLNN A, 400
\r
1694 JRST TOC5 ;IF UNNORMALIZED, TYPE AS DECIMAL INTEGER
\r
1705 SETZM TEM1 ;INIT 8 DIGIT COUNTER
\r
1706 SKIPE A,B ;DON'T TYPE A LEADING 0
\r
1707 PUSHJ P,FP7 ;PRINT INTEGER PART OF 8 DIGITS
\r
1708 PUSHJ P,TOC6 ;PRINT DECIMAL POINT
\r
1727 PUSH P,W2 ;SAVE EXPONENT
\r
1728 PUSH P,FSGN(B) ;SAVE "E+" OR "E-"
\r
1729 PUSHJ P,FP3 ;PRINT OUT FFF.FFF PART OF NUMBER
\r
1730 POP P,W1 ;GET "E+" OR "E-" BACK
\r
1732 POP P,A ;GET EXPONENT BACK
\r
1733 \fFP7: IDIVI A,12 ;DECIMAL OUTPUT SUBROUTINE
\r
1743 353473426555 ;1.0E32
\r
1744 266434157116 ;1.0E16
\r
1745 FT8: 233575360400 ;1.0E8
\r
1746 216470400000 ;1.0E4
\r
1747 207620000000 ;1.0E2
\r
1748 204500000000 ;1.0E1
\r
1749 FT: 201400000000 ;1.0E0
\r
1750 026637304365 ;1.0E-32
\r
1751 113715126246 ;1.0E-16
\r
1752 146527461671 ;1.0E-8
\r
1753 163643334273 ;1.0E-4
\r
1754 172507534122 ;1.0E-2
\r
1755 FT01: 175631463146 ;1.0E-1
\r
1758 FCP: CAMLE A, FT0(C)
\r
1766 TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL
\r
1768 TEXT2: MOVEI T,0 ;7 BIT ASCII TEXT OUTPUT SUBROUTINE
\r
1777 FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3
\r
1791 SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED
\r
1796 SAVLOC: 0 ;THE ADR OF OLD REGISTER EXAMINATION SEQUENCE
\r
1797 SYMP: XWD PID,JOBSYM
\r
1806 REPEAT NBP*3-3, < 0>
\r
1817 SCHM: EXP PIN ;DO NOT CHANGE ORDER
\r
1824 IFN EDDT&10,< OFFSET: 0 >
\r
1825 \fIFN EDDT&1&<EDDT>B36,<
\r
1827 PUNCH: TLC F,FAF+QF
\r
1829 JRST ERR ;ONE ARGUMENT MISSING
\r
1835 PUN1: MOVEI T,4 ;PUNCH 4 FEED HOLES
\r
1837 TLNE F,CF ;PUNCH NON-ZERO BLOCKS?
\r
1848 JUMPGE R,RET ;EXIT OR PUNCH
\r
1851 SOS W,T ;INIT CHECKSUM
\r
1853 PBLK1: PUSHJ P,FETCH
\r
1862 ;PUNCH NON-ZERO BLOCKS
\r
1864 PUNZ0: AOS DEFV ;LOOK AT NEXT WORD
\r
1865 PUNZ: HRRZ W,DEFV ;ENTER HERE - GET STARTING ADDRESS
\r
1867 SUB W,TEM1 ;CALCULATE NEGATIVE LENGTH
\r
1868 HRL R,W ;SET UP AOBJN POINTER
\r
1869 JUMPGE R,RET ;FINISHED?
\r
1870 CAMG R,[XWD -40,0] ;BLOCK LONGER THAN 40?
\r
1871 HRLI R,-40 ;YES, FIX IT UP
\r
1872 MOVSI W1,400000 ;W1 NEGATIVE MEANS FLUSH 0 WORDS
\r
1873 PUNZ2: PUSHJ P,FETCH ;GET WORD FROM MEMORY
\r
1875 JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER
\r
1876 MOVEI W1,0 ;CLEAR 0 WORD COUNTER
\r
1877 PUNZ4: JUMPL W1,PUNZ0 ;FLUSH 0 WORD, GET ANOTHER
\r
1878 CAIL W1,3 ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD
\r
1879 AOSA R ;ADVANCE R TO LAST ADR+1
\r
1881 ADD W1,DEFV ;CALCULATE DEFV-R+W1=-WORD COUNT
\r
1883 HRLM W1,DEFV ;PUT -WC IN LEFT HALF OF FA
\r
1884 EXCH R,DEFV ;SAVE ADR FOR NEXT BLOCK, GET POINTER
\r
1896 LOAD1: MOVE T,0(R)
\r
1900 LOAD2: PUSHJ P,FEED
\r
1903 BLKEND: TLNN F,QF ;BLOCK END
\r
1904 MOVE T,[JRST 4,DDT]
\r
1905 TLNN T,777000 ;INSERT JRST IF NO OPCODE
\r
1912 PUSHJ P,PWRD ;EXTRA WORD FOR READER TO STOP ON
\r
1925 FEED: CONSZ PTPP,20
\r
1930 FEED1: POPJ P,0 ;ADDRESS USED AS A CONSTANT
\r
1935 PHASE 0 ;RIM10B CHECKSUM LOADER
\r
1941 DATAI PTRR,@TBL1-RD+1(AA)
\r
1946 TBL1: CAME CKSM,ADR
\r
1957 LOADE: XWD LOADB-.,LOADB
\r
1958 > ;END OF IFN EDDT$1&<EDDT>B36
\r
1959 ;FOR PAPER TAPE IO
\r
1964 \fSAVE: 0 ;SAVE THE ACS AND PI SYSTEM
\r
1969 SAV1: IFN EDDT&1,<
\r
1971 CONO PRS, @SAVPI+1>
\r
1978 ;IFE EDDT&1,<HRRZS SAVUWP ;ASSUME UWP WILL BE ZEROED
\r
1979 ; SETZB T,F ;T=F=0
\r
1980 ; CALLIU T,SETUWP ;REQUEST TO CLEAR UWP
\r
1981 ; HRROS SAVUWP ;FAILED, UWP (BIT 0) STILL 1
\r
1982 ; SKIPN SARS ;USER'S SATE SAVED ALREADY?
\r
1983 ; HRRM T,SAVUWP> ;NO, SAVE STATE OF UWP
\r
1985 SETOM,SARS ;FLAG PROTECTING SAVED REGISTERS
\r
1987 IFE EDDT&1,<PUSHJ P,TTYRET> ;IN USER MODE, GET INTO DDT MODE
\r
1988 MOVE T,[XWD SCHM,SCH]
\r
1989 BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES
\r
1992 RESTORE: SETOM TEM3 ;RESTORE ACS AND PI SYSTEM
\r
1993 RESTR1: HRRM T,SAVE
\r
1998 IORI T, 2000 ;TURN ON CHANNELS
\r
2000 ;IFE EDDT&1,<HRRZ T,SAVUWP ;GET OLD UWP
\r
2001 ; CALLI T,SETUWP ;CHANGE IT TO OLD
\r
2002 ; JFCL> ;EX MACHT NICHTS
\r
2007 CPUSHP: PUSH BCOM ;PROGRAM MODIFIED AT IPUSHJ
\r
2008 IFN EDDT&1,< CONO PRS,@SAVPI>
\r
2010 \fCRN: MOVEI T,15 ;CARRIAGE RETURN
\r
2014 CRNRB: PUSHJ P,CRN
\r
2019 MOVEI T,12 ;LINE FEED
\r
2022 LCT: IFN EDDT&1,<PUSHJ P,TSPC
\r
2024 IFE EDDT&1,<MOVEI T,11
\r
2025 JRST TOUT> ;TYPE A TAB
\r
2027 TSPC: MOVEI T,40 ;SPACE
\r
2029 \fIFN EDDT&1,< ;EXECUTIVE MODE TELETYPE I/O
\r
2031 TIN: PUSHJ P,LISTEN ;TELETYPE CHARACTER INPUT
\r
2035 MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW
\r
2036 CAIN T,177 ;RUBOUT?
\r
2037 JRST WRONG ;YES, TYPE XXX
\r
2038 TRNE T,140 ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC
\r
2039 TOUT: CAIG T,04 ;DON'T TYPE EOT OR LOWER CHARS
\r
2042 IMULI T,200401 ;GENERATE PARITY
\r
2047 TRC T,200 ;MAKE PARITY EVEN
\r
2051 ANDI T,177 ;FLUSH PARITY
\r
2054 LISTEN: CONSO TTYY,40 ;LISTEN FOR TTY
\r
2060 TTYRET: MOVEI T,3410
\r
2061 TTY1: MOVEI W2,40000
\r
2069 TTYLEV: MOVE T,SAVTTY
\r
2077 TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES
\r
2079 JRST TOUT ;ECHO CHARACTERS (0-37) NOT ECHOED
\r
2082 \fIFE EDDT&1,< ;USER MODE TELETYPE I/O
\r
2083 IFN EDDT&4,< ;ASSEMBLE WITH OLD DDT MODE IO
\r
2085 TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE
\r
2086 CAME T,[POINT 7,INBFF]
\r
2089 IFE EDDT&10,< ILDB T,PINBFF >
\r
2090 IFN EDDT&10,< PUSHJ P,INCHR >
\r
2094 MOVEI T,33 ;CHANGE TO NEW ALT MODE
\r
2095 CAIN T,177 ;RUBOUT?
\r
2096 JRST WRONG ;YES PRINT XXX
\r
2098 MOVE T,[POINT 7,INBFF]
\r
2100 CALL T,[SIXBIT /DDTIN/]
\r
2103 TOUT: JUMPE T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS
\r
2105 IFN EDDT&10,< SKIPE COMAND
\r
2114 MOVE T,[POINT 7,INBFF]
\r
2117 CALL T,[SIXBIT /DDTOUT/]
\r
2121 PINBFF: POINT 7,INBFF
\r
2122 POUTBF: POINT 7,INBFF
\r
2127 TTYRET: MOVE T,[POINT 7,INBFF]
\r
2133 TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE
\r
2137 IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO
\r
2139 OPDEF TTCALL [51B8]
\r
2144 IFE EDDT&10,< TTCALL 0,T ;GET NEXT CHARACTER INTO T >
\r
2145 IFN EDDT&10,< PUSHJ P,INCHR >
\r
2149 MOVEI T,33 ;CHANGE OLD ALT MODES TO NEW
\r
2151 JRST WRONG ;TYPE XXX FOR A RUBOUT
\r
2156 IFN EDDT&10,< SKIPE COMAND ;IS THERE A COMMAND FILE?
\r
2157 JRST PUTCHR ;YES >
\r
2159 TTCALL 1,T ;OUTPUT A CHARACTER
\r
2162 LISTEN: TTCALL 2,T ;GET NEXT CHAR, NO IO WAIT
\r
2163 POPJ P, ;NO CHARACTER EXISTED, RETURN
\r
2164 JRST CPOPJ1 ;CHARACTER WAS THERE, SKIP RETURN
\r
2166 TTYRET: TTCALL 6, ;WHEN RETURNING TO DDT, FLUSH ALL
\r
2167 POPJ P, ;WAITING INPUT CHARACTERS
\r
2169 TTYLEV==CPOPJ ;NOTHING SPECIAL TO DO WHEN LEAVING DDT
\r
2170 > ;END OF IFN DDT&4
\r
2173 INCHR: SKIPE COMAND
\r
2176 IFN EDDT&4,< ILDB T,PINBFF ;NO COMMAND FILE>
\r
2177 IFE EDDT&4,< TTCALL 0,T ;O/P CHAR, >
\r
2181 GETCHR: SOSLE CBUF+2 ;ANY REMAINING
\r
2186 STATZ CM,20000 ;END-OF-FILE?
\r
2189 GETOK: ILDB T,CBUF+1
\r
2190 JUMPE T,GETCHR ;BYPASS ZERO CHARACTERS
\r
2191 PUSHJ P,PUTCHR ;COPY INPUT TO OUTPUT FILE
\r
2194 GETEND: CLOSE DP, ;CLOSE OUTPUT WHEN INPUT EXHAUSTED
\r
2197 JRST NOLPT ;REVERT TO TTY WHEN COMMAND EXHAUSTED
\r
2199 PUTCHR: SOSLE LBUF+2 ;ANY ROOM?
\r
2202 STATZ DP,740000 ;ERRORS?
\r
2206 IDPB T,LBUF+1 ;DEPOSIT CHAR.
\r
2209 > ;END OF IFN EDDT&10
\r
2210 > ;END OF IFE EDDT&1
\r
2212 \fBDISP: POINT 12,DISP(R),11
\r
2213 POINT 12,DISP(R),23
\r
2214 POINT 12,DISP(R),35
\r
2216 DEFINE D (Z1,Z2,Z3)< <Z1-DDT>_30+<Z2-DDT>_14+Z3-DDT>
\r
2217 ;THIS MACRO PACKS 3 ADDRESSES INTO ONE WORD; EACH ADR IS 12 BITS
\r
2219 IFE EDDT&1&<EDDT>B36,< PUNCH=ERR
\r
2234 D SUPTYO,TEXI,ASSEM
\r
2238 D MINUS,PERIOD,SLASH
\r
2243 D FIRARG,EQUAL,ULIM
\r
2244 D QUESTN,INDIRECT,ABSA
\r
2247 D HWRDS,PILOC,BLKEND
\r
2248 D KILL,LOADER,MASK
\r
2249 D NWORD,BITO,PROCEDE
\r
2250 D QUAN,RELA,SYMBOL
\r
2256 ;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE
\r
2257 ; ARE DETECTED AS ERRORS NEAR L21:
\r
2259 BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE
\r
2273 BITT: MOVE T,SVBTS2
\r
2302 ;DESCRIPTION OF OP DECODER FOR DDT:
\r
2304 ; THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO
\r
2305 ;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS
\r
2306 ;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN
\r
2307 ;FOR THE PDP-6. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL
\r
2308 ;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY
\r
2309 ;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH
\r
2310 ;BEGIN WITH 110(2).
\r
2312 ; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD.
\r
2313 ;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE:
\r
2314 ;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER.
\r
2315 ; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS
\r
2318 ; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT
\r
2319 ; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION.
\r
2320 ; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER
\r
2321 ; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS
\r
2322 ; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE
\r
2323 ; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS.
\r
2328 ;; C(INST) = .010 101 100(2)
\r
2330 ; THE RESULT = D = 010(2) = 2(8)
\r
2332 ; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE.
\r
2333 ; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH
\r
2334 ; PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES
\r
2335 ; THE INTERPRETATION.
\r
2337 ;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION
\r
2340 ;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE.
\r
2344 ; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING
\r
2345 ; LETTER IS TYPED.
\r
2347 ;73(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS
\r
2348 ; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD
\r
2349 ; BYTE IN THE TABLE.
\r
2351 ;MACROS ASSEMBLE THE TABLE TBL:
\r
2352 ; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST
\r
2353 ; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE.
\r
2354 ; 2. A POINT (.) ASSEMBLES A STOP CODE.
\r
2355 ; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE
\r
2356 ; SYMBOLICALLY NAMED BYTE.
\r
2357 ; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT,
\r
2358 ; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER.
\r
2360 ;EXAMPLE OF BINARY TO SYMBOLIC DECODING:
\r
2361 ; THE MACHINE CODE FOR JRST IS 254
\r
2362 ; INST 0 1 0 1 0 1 1 0 0
\r
2363 ; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^).
\r
2364 ; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER
\r
2365 ; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN
\r
2366 ; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING
\r
2367 ; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED
\r
2370 ; MOV PRINTING TEXT
\r
2376 ;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO
\r
2377 ;4 BYTES ARE SKIPPED OVER:
\r
2378 ; EXC PRINTING TEXT
\r
2380 ; BL PRINTING TEXT
\r
2385 ; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT
\r
2386 ;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS.
\r
2388 ; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A
\r
2389 ; TREE SEARCH METHOD IS USED.
\r
2392 DEFINE REDEF (XX)<
\r
2393 DEFINE INFO (AA,BB)<
\r
2406 IFE Z-":",<INFO <>,<==CLOC>
\r
2407 IFNDEF FIR.,<FIR.==CLOC>
\r
2408 IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG>
\r
2410 IFE Z-"/",<IF1 <OUTP 1>
\r
2411 IF2,<INFO OUTP,+73-FIR.>
\r
2413 IFE Z-"^",<OUTP <ZZ&74/2+ZZ&7-1>
\r
2415 IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,<
\r
2416 REPEAT 5,<ZZ==ZZZ&77
\r
2419 IFE Z-".",<OUTP 40>
\r
2421 IFN Z,<INFO REDEF,L
\r
2423 ZZZ==ZZZ+<Z-40>*ZZM
\r
2432 BINRY==BINRY*400+BINRY*400+A
\r
2434 IFE BINC,<EXP BINRY
\r
2441 TBL: ;OPDECODER BYTE TABLE
\r
2444 CLOC==0 ;SET BYTE LOCATION COUNTER TO 0
\r
2445 BINC==4 ;INIT BYTES/WORD COUNTER
\r
2447 BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/>
\r
2450 BYT9 <21^BD/CON,11^OI/S,01^Z/O/>
\r
2451 BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/>
\r
2454 BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^>
\r
2455 BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/>
\r
2456 BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/>
\r
2457 BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/>
\r
2458 BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/>
\r
2459 ;BYTE AND FLOATING INSTRUCTIONS
\r
2461 BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:>
\r
2462 BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/>
\r
2463 BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/>
\r
2465 ;FWT,FIXED POINT ARITH,MISC.
\r
2467 BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/>
\r
2468 BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^>
\r
2469 BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,>
\r
2470 BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:>
\r
2471 BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,>
\r
2472 BYT9 <AOB/JRS T/JFC L/XC T/.AOB:01^P/N/>
\r
2473 BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,>
\r
2474 BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:>
\r
2475 BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/JFF O/S1:21^.,C:C.,>
\r
2477 ;ARITH COMP,SKIP,JUMP
\r
2479 BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^>
\r
2480 BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/>
\r
2481 BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:>
\r
2482 BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,>
\r
2487 BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:>
\r
2488 BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/>
\r
2490 ;TEST INSTRUCTIONS
\r
2492 BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,>
\r
2493 BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/>
\r
2498 BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/>
\r
2499 BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/>
\r
2500 BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/>
\r
2501 BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/>
\r
2502 BYT9 <CA/CM/CM/CB/O IMB/>
\r
2505 BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/>
\r
2506 BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/>
\r
2508 REPEAT BINC,<BINRY=BINRY*400+BINRY*400>
\r
2509 IFN BINRY,<EXP BINRY>
\r
2510 > ;END OF REPEAT 0
\r
2511 \fIFN EDDT&10,< ;FILDDT STUFF
\r
2512 CRASH: SIXBIT .CRASH. ;CANONICAL NAME FOR CRASH
\r
2516 COMNDS: SIXBIT .FILDDT. ;CANNONICAL NAME FOR COMMAND LIST
\r
2520 SNAP: SIXBIT .SNAP. ;NAME FOR OUTPUT IF TO RETRIEVABLE DEVCE
\r
2524 CBUF: BLOCK 3 ;RING HEADERS
\r
2526 COMAND: Z ;-1 IF COMMAND FILE ,0 IF NOT
\r
2527 CRASHS: Z ;-1 IF CRASH.SAV ON DISK ,0 IF PEEK AT MONITOR
\r
2530 RSIDNT: BLOCK 1000 ;LOCS 0-777 ALWAYS IN CORE
\r
2531 CURENT: BLOCK 4000 ;WINDOW TO THE FILE ON DISK
\r
2532 RSAVE: IOWD 1000,RSIDT ;INDEX OF THE CUFRRENT BLOCK, 0,1,...
\r
2534 CURLST: IOWD 4000,CURENT
\r
2537 \fSUBTTL OP DECODER
\r
2539 DEFINE BYT9 (A) <IRP A,<
\r
2549 IFGE <LASTB==CLOC+73-FIR.>-1000, <PRINTX OPTABLE TO LONG>>>
\r
2557 IFNB <A>, <IRPC A,<CLOC==CLOC+1>>>
\r
2560 IFNB <A>, <IRPC A,<CLOC==CLOC+1>>
\r
2566 DEFINE .ADR (A)<IFN %'A-CLOC,<PRINTX PHASE ERR AT: %'A>>
\r
2572 OUTP A&70/2+A&7-1>
\r
2575 IFNB <A>, <IRPC A,<OUTP "A"-40>>>
\r
2578 IFNB <A>, <IRPC A,<OUTP "A"-40>>
\r
2582 BINRY== BINRY+<A>_<BINC==BINC-9>
\r
2590 \fTBL: ;OPDECODER BYTE TABLE
\r
2593 CLOC== 0 ;SET BYTE LOCATION COUNTER TO 0
\r
2594 BINC== ^D36 ;INIT BYTES/WORD COUNTER
\r
2598 .DIS 63,.TRA UUO,.TRA FLO,.TRA HAK,.TRA ACCP,.TRA BOOLE
\r
2599 .TXT H,.TRA HWT,.TXT T,.TRA ACBM
\r
2603 .DIS 21,.TRA BD,.TXT CON,.DIS 11,.TRA OI,.TXT S,.DIS 01,.TRA Z,.TRA O
\r
2604 .ADR BD,.DIS 01,.TXT BLK,.TRA IO,.TXT DATA,.ADR IO,.DIS 11,.TRA I,.TRA O
\r
2605 .ADR OI,.DIS 01,.TRA O,.TRA I
\r
2608 .ADR UUO,.DIS 51,.END,.TXT,.DIS 32,.TRA U40,.TRA U50,.TRA U60
\r
2609 .DIS 21,.TRA U703,.DIS 11.,.TRA USET,.DIS 01
\r
2610 .TXT LOOKU,.TRA P,.TXT ENTE,.TRA R,.ADR USET,.TXT USET,.DIS 01,.TRA I,.TRA O
\r
2611 .ADR U40,.DIS 03,.TRA CAL,.TXT INI,.TRA T,.END,.END,.END,.END,.END,.TXT CALL,.TRA I
\r
2612 .ADR U60,.DIS 21,.TRA U603,.DIS 01,.TXT IN,.TRA BPUT,.TXT OUT
\r
2613 .ADR BPUT,.DIS 11,.TXT BU,.ADR F,.END F,.TXT,.TXT PU,.TRA T
\r
2614 .ADR U603,.DIS 01,.TRA U6062,.TXT STAT,.DIS 11,.ADR O,.END O,.TXT,.ADR Z,.END Z,.TXT
\r
2615 .ADR U6062,.DIS 11,.TXT S,.TRA U62,.TXT G,.ADR U62,.TXT ETST,.TRA S
\r
2617 ;BYTE AND FLOATING INSTRUCTIONS
\r
2619 .ADR FLO,.DIS 51,.TRA BYTE,.TXT F,.DIS 32,.TXT,.TXT AD,.TRA A,.TXT SB
\r
2620 .TRA A,.TXT MP,.TRA A,.TXT DV,.ADR A
\r
2621 .DIS 21,.TRA LMB,.TXT R,.TRA IMB,.ADR LMB,.DIS 02,.END,.TXT
\r
2622 .ADR L,.END L,.TXT,.ADR M,.END M,.TXT
\r
2623 .ADR B,.END B,.TXT,.ADR BYTE,.DIS 32,.END,.END,.END,.TXT
\r
2624 .DIS 03,.TXT UF,.TRA PA,.TXT DF,.TRA N
\r
2625 .TXT FS,.TRA C,.TXT IB,.ADR P,.END P,.TXT,.TXT I,.TRA LD
\r
2626 .ADR LD,.TXT LD,.TRA B,.TXT I,.TRA DP,.ADR DP,.TXT DP,.TRA B
\r
2628 ;FWT-FIXED POINT ARITH-MISC
\r
2630 .ADR HAK,.DIS 33,.TRA MV,.ADR MV,.TXT MOV,.TRA MO,.TRA ML,.TRA DV
\r
2631 .TRA SH,.TRA H1,.TRA JP
\r
2632 .DIS 21,.TXT ADD,.TRA IMB,.TXT SU,.ADR BIMB,.TXT B,.ADR IMB,.DIS 02,.END,.TXT
\r
2633 .ADR I,.END I,.TXT,.TRA M,.TRA B,.ADR MO,.DIS 22
\r
2634 .ADR EIMS,.TXT E,.TRA IMS,.TXT S,.TRA IMS,.TXT N,.TRA IMS,.TXT M
\r
2635 .ADR IMS,.DIS 02,.END,.TXT,.TRA I,.TRA M,.ADR S,.END S,.TXT
\r
2636 .ADR ML,.DIS 21,.TXT I,.TRA ML1,.ADR ML1,.TXT MUL,.TRA IMB
\r
2637 .ADR DV,.DIS 21,.TXT I,.TRA DV1
\r
2638 .ADR DV1,.TXT DI,.ADR DV2,.TXT V,.TRA IMB,.ADR H1,.DIS 03,.TXT EXC,.TRA S3,.TXT BL
\r
2639 .ADR T,.END T,.TXT,.TRA AO,.ADR AO,.TXT AOBJ
\r
2640 .TRA AOB,.TXT JRS,.TRA T,.TXT JFC,.TRA L,.TXT XC,.TRA T,.END
\r
2641 .ADR AOB,.DIS 01,.TRA P,.TRA N
\r
2642 .ADR JP,.DIS 03,.TRA PU,.ADR PU,.TXT PUSH,.TRA PUS,.TRA PO
\r
2643 .ADR PO,.TXT POP,.TRA POP,.TXT JS,.ADR R,.END R,.TXT
\r
2644 .TXT JS,.TRA P,.TXT JS,.ADR PA,.END A,.TXT,.TXT JR,.TRA PA
\r
2645 .ADR PUS,.DIS 01,.ADR J,.END J,.END,.TXT,.ADR POP
\r
2646 .DIS 01,.END,.TXT,.TRA J,.ADR SH,.DIS 02,.TXT A,.TRA S2,.TXT ROT,.TRA S1,.TXT L
\r
2647 .ADR S2,.TXT S,.ADR S3,.TXT H,.TRA S1,.TXT JFF,.TRA O
\r
2648 .ADR S1,.DIS 21,.END,.TXT,.ADR C,.END C,.TXT
\r
2650 ;ARITH COMP-SKIP-JUMP
\r
2652 .ADR ACCP,.DIS 42,.TXT CA,.TRA CA1,.TRA SJ,.TXT A,.TRA JS,.TXT S
\r
2653 .ADR JS,.TXT O,.DIS 31
\r
2654 .TXT J,.TRA COMP,.TXT S,.TRA COMP,.ADR CA1,.DIS 31,.TXT I,.TRA COMP,.TXT M,.TRA COMP
\r
2655 .ADR SJ,.DIS 31,.TXT JUM,.TRA PSJ,.TXT SKI,.ADR PSJ,.TXT P,.ADR COMP
\r
2656 .DIS 03,.END,.TXT,.TRA L,.ADR E,.END E,.TXT,.TXT L,.TRA E,.TRA PA,.TXT G,.TRA E
\r
2657 .ADR N,.END N,.TXT,.END G,.TXT
\r
2661 .ADR HWT,.DIS 51,.TRA HW1,.DIS 21,.TXT R,.TRA HW2,.TXT L,.ADR HW2,.TXT R,.TRA HW3
\r
2662 .ADR HW1,.DIS 21,.TXT L,.TRA HW4,.TXT R,.ADR HW4,.TXT L
\r
2663 .ADR HW3,.DIS 32,.TRA IMS,.TXT Z,.TRA IMS,.TXT O,.TRA IMS,.TRA EIMS
\r
2665 ;TEST INSTRUCTIONS
\r
2667 .ADR ACBM,.DIS 31,.TRA AC1,.DIS 01,.TXT D,.TRA AC2,.TXT S,.TRA AC2
\r
2668 .ADR AC1,.DIS 01,.TXT R,.TRA AC2,.TXT L
\r
2669 .ADR AC2,.DIS 42,.TXT N,.TRA EAN,.TXT Z,.TRA EAN,.TXT C,.TRA EAN,.TXT O
\r
2670 .ADR EAN,.DIS 12,.END,.TXT,.TRA E,.TRA PA,.TRA N
\r
2674 .ADR BOOLE,.DIS 24,.TRA ST,.ADR AN,.TXT AND,.TRA B2,.TRA AN,.TRA ST,.TRA AN,.TRA ST
\r
2675 .TXT X,.ADR OR,.TXT OR,.TRA B2,.TXT I,.TRA OR,.TRA AN,.TXT EQ
\r
2676 .TRA DV2,.TRA ST,.TRA OR,.TRA ST,.TRA OR,.TRA OR
\r
2677 .ADR ST,.TXT SET,.ADR B2,.DIS 24,.TXT Z,.TRA IMB,.TRA IMB
\r
2678 .ADR CA,.TXT C,.TRA TA,.ADR TM,.TXT M,.TRA IMB
\r
2679 .ADR CM,.TXT C,.TRA TM,.ADR TA,.TXT A,.TRA IMB,.TRA IMB,.TRA IMB
\r
2680 .ADR CB,.TXT C,.TRA BIMB,.TRA IMB,.TRA CA
\r
2681 .TRA CA,.TRA CM,.TRA CM,.TRA CB,.TXT O,.TRA IMB
\r
2685 .ADR U50,.DIS 03,.TXT OPE,.TRA N,.TXT TT,.ADR CAL,.TXT CAL,.TRA L,.END,.END,.END
\r
2686 .TXT,.TXT RENAM,.TRA E,.TXT I,.TRA N,.TXT OU,.TRA T
\r
2687 .ADR U703,.DIS 02,.TXT CLOS,.TRA E,.TXT RELEA,.TRA S
\r
2688 .TXT MTAP,.TRA E,.TXT UGET,.TRA F
\r
2690 ;**********THIS TERMINATES THE "BYT9" MACRO ARGUMENT******
\r
2693 IF1,< BLOCK <CLOC+3>/4>
\r
2695 IF2,< IFN BINC-^D36,< +BINRY>>
\r
2697 IFNDEF CLOC.,<CLOC.==CLOC>
\r
2698 IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE>
\r
2700 PNTR: EXP INST ;POINTER TO BITS IN INST
\r
2701 INST: 0 ;BINARY FOR INSTRUCTION
\r
2702 CHP: 0 ;CHAR POINTER INTO TXT, TXT+1
\r
2703 TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL
\r
2704 SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER
\r
2706 BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER
\r
2707 POINT 9,TBL,8 ;FOR TRANSFER BYTE
\r
2711 OPEVAL: MOVEI T,0 ;EVALUATE FOR AN OP CODE
\r
2712 IDPB T,CHP ;INSERT NULL IN TEXT FOR SYMBOL
\r
2715 OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY
\r
2717 MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS
\r
2718 MOVE T,[XWD 440700,TXT]
\r
2719 MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT
\r
2720 TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG
\r
2723 DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL
\r
2726 SOJGE R,DC1 ;SKIP OVER # BYTES = C(R)
\r
2727 JUMPG R,DC1 ;SKIP OVER ALPHA TEXT WITHOUT COUNTING
\r
2729 JUMPE T,DECX ;TRANSFER ON ASTOP CODE
\r
2731 DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE
\r
2734 DPB T,[XWD 300600,PNTR]
\r
2736 JRST DC6 ;FOR OPEVAL ONLY
\r
2737 LDB R,PNTR ;GET # BYTES TO SKIP OVER
\r
2740 DC2: HRREI T,-33(T)
\r
2741 JUMPL T,DECT ;TYPE OUT A LETTER
\r
2742 MOVEI W1,FIR.(T) ;BYTE IS A TRANSFER
\r
2744 MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE
\r
2750 JRST DC8 ;TYPE OUT A LETTER
\r
2751 ILDB W1,CHP ;GET NEXT INPUT LETTER
\r
2752 CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER
\r
2753 JRST NOMAT ;DOESNT MATCH
\r
2754 JRST DC1 ;MATCHES, TRY NEXT
\r
2756 DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN
\r
2757 POPJ P, ;IF FOR OUTPUT, RETURN
\r
2758 ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY
\r
2759 JUMPE W1,DC7 ;DOES # OF CHARS MATCH
\r
2760 NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE
\r
2764 NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE
\r
2765 DPB R,PNTR ;STUFF INTO ANSWER
\r
2767 JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG
\r
2769 JRST NOMAT ;NOT AT TOP LEVEL
\r
2770 POPJ P, ;UNDEFINED, FINALLY
\r
2772 DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE
\r
2774 DC6AA: CAMN P,SAVPDL
\r
2776 LDB T,-2(P) ;OLD VALUE OF PNTR
\r
2785 DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER
\r
2787 LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL
\r
2788 LDB R,[POINT 3,T,8]
\r
2791 DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS
\r
2792 JRST CPOPJ1 ;SYMBOL FOUND, SKIP RETURN
\r
2794 DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG
\r
2796 PUSHJ P,TOUT ;OUTPUT A LETTER
\r
2797 CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES
\r
2805 DDTEND: ;ONLY STARTING ADDRESS FOR FILDDT
\r
2806 ;NO START EDDRESS FOR EXEC OR USER DDT
\r
2807 ;BECUASE MONITOR IS LOADED WITH BOTH EXEC AND USER DDTS
\r
2808 ;BUT STILL WANTS TO BE STARTED AT ITS OWN STARTING ADDRESS
\r
2809 ;USER DDT IS LOADED LAST. - T.H.
\r
2810 IFN EDDT&10,<END DDT>
\r