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 FOLLOWSR:
\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
24 BIT 33 =0; FOR USER MODE DDT ONLY- ASSEMBLE USING THE
\r
25 "TTCALL" UUO FOR TELETYPE IO
\r
26 =1; FOR USER MODE DDT ONLY- ASSEMBLE USING THE
\r
27 "DDTIN" AND "DDTOUT" UUO'S FOR TELETYPE IO
\r
29 BIT 32 =1; ASSEMBLE A FILE DDT
\r
32 =0; ASSEMBLE A RELOCATABLE VERSION OF DDT (RELOC 0)
\r
33 NOT=0; ASSEMBLE AN ABSOLUTE (NON-RELOCATABLE) VERSION
\r
34 OF DDT WITH A STARTING ADDRESS BEING THE
\r
37 (IF THE SYMBOL "EDDT" IS NOT DEFINED AT ALL, DDT WILL BE ASSEMBLED
\r
40 EXAMPLES OF "EDDT" DEFINTIONS:
\r
41 EDDT=0 ASSEMBLE A RELOCATABLE USER MODE DDT WITH TELETYPE
\r
42 I/O DONE BY THE "TTCALL" UUO
\r
44 EDDT=1 ASSEMBLE A RELOCATABLE EXECUTIVE MODE DDT
\r
47 ASSEMBLE AN ABSOLUTE EXECUTIVE MODE DDT
\r
48 WITH PAPER TAPE FEATURES, AND WHOSE STARTING
\r
49 ADDRESS IS LOCATION 4000.
\r
51 EXAMPLE OF A MACRO ASSEMBLY COMMAND:
\r
57 *DSK:UDDT,/C_TTY:,DTA2:DDT.12
\r
61 END OF PASS 1 ;THIS LINE TYPED BY MACRO
\r
65 NO ERRORS DETECTED ;TYPED BY MACRO
\r
67 PROGRAM BREAK IS 003340 ;TYPED BY MACRO
\r
72 OTHER VERSION OF DDT ARE ASSEMBLED IN A SIMILAR MANNER
\r
73 BY DEFINING "EDDT": A DIFFERENT WAY WHERE THE EXAMPLE
\r
79 IFNDEF EDDT,<EDDT=0>
\r
86 IFN EDDT&1,<DEFINE HEADER (VERSION),<
\r
87 TITLE EDDT V0'VERSION -EXEC MODE DDT
\r
93 IFE EDDT&1,<DEFINE HEADER (VERSION),<
\r
95 TITLE UDDT V0'VERSION -USER MODE DDT>
\r
97 TITLE FILDDT V0'VERSION -FILE DDT>
\r
98 EXTERN JOBREL,JOBSYM,JOBSA
\r
101 ;DO NOT SET LOWER CORE IF EXEC DDT(OK USER OR FILDDT)
\r
105 DDTVER ;PUT VERSION # IN JOBVER
\r
113 IFN EDDT&<XWD -1,0>,<LOC <EDDT>B53>
\r
116 ;THE HEADER MACRO CONSTRUCTS THE TITLE AND VERSION #
\r
118 IFN EDDT&10,< CM=2 ;DEFINE SOFTWARE CHANS.
\r
121 \f;DEFINE ACCUMULATORS
\r
125 R=<A=2> ;POINTERS TO TABLES, CORE, ETC.
\r
127 W=<C=4> ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER
\r
131 SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT
\r
132 AR=11 ;MODE CONTROL SWITCH FOR OUTPUT
\r
133 ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX
\r
137 ;DEFINE I/O DEVICE MNEMONICS FOR DDT USE
\r
143 ;DEFINE PUSH DOWN LENGTH
\r
144 LPDL=50 ;MAX LENGTH PUSH DOWN LIST
\r
146 ;DEFINE BITS FOR USE IN LEFT HALF OF ACCUMULATOR F
\r
147 COMF=200000 ;COMMA TYPED FLAG
\r
148 TIF=100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA
\r
149 PTF=100 ; +, -, OR * HAS BEEN TYPED
\r
151 SF=4 ;SYLLABLE FLAG
\r
152 QF=1 ;QUANTITY TYPED IN TO WORD ASSEMBLER
\r
155 CCF=10000 ; $$ TYPED
\r
156 MF=2 ;MINUS SIGN TYPED IN
\r
157 LTF=20 ;LETTER TYPED IN TO CURRENT SYLLABLE
\r
158 ROF=10 ;REGISTER OPEN FLAG
\r
163 FPF=20000 ; . TYPED IN
\r
164 FEF=400000 ; E FLAG
\r
167 DVF=40000 ;DIVIDE FLAG
\r
169 ;PID IS 20 IF SYM TAB POINTER IS INDIRECT JOBSYM
\r
170 PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM
\r
172 ;DEFINE BITS FOR USE IN RIGHT HALF OF ACCUMULATOR F
\r
174 ITF=2 ;INSTRUCTION TYPED IF ITF=1
\r
175 OUTF=4 ;OUTPUT IF OUTF=1
\r
176 CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT
\r
177 LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT
\r
178 Q2F=1 ;NUMBER TYPED AFTER ALT MODE
\r
179 R20F=10 ;TEMP FLAG USED IN SETUP
\r
181 NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE
\r
182 POWF=4000 ;ARGUMENT FOR EXPONENT COMING
\r
184 ;DEFINE SYMBOL TABLE SYMBOL TYPES
\r
185 GLOBAL=040000 ;GLOBAL SYMBOL
\r
187 PNAME=740000 ;PROGRAM NAME
\r
188 DELI=200000 ;DELETE INPUT
\r
189 DELO=400000 ;DELETE OUTPUT
\r
191 DDT: INTERN DDTEND ;DECLARE END OF DDT AS INTERNAL, FOR
\r
192 ; USER TO SEE (USER MODE) AND ONCE ONLY CODE
\r
194 IFE EDDT&1,< ENTRY DDT
\r
196 IFN EDDT&1,< INTERNAL DDT
\r
198 ENTRY DDTX ;NEEDED BY MONITOR>
\r
200 ;DEFINE $ SYMBOLS INTERNAL TO DDT
\r
201 OPDEF DDTINT [Z 0,] ;ADDRESS FLAG FOR INTERNAL REGISTERS
\r
204 NBP=8 ;NUMBER OF BREAKPOINTS
\r
205 DEFINE DBPNT (Z.)<XP $'Z.'B,B1ADR+3*Z.-3>
\r
207 REPEAT NBP,<DBPNT \<ZZ=ZZ+1>>
\r
216 \f;DEFINE I/O DEVICE MNEMONICS
\r
247 ;DEFINE EXTENDED OPERATIONS
\r
256 HLRZ T,ESTU ;THIS SEQUENCE INITS SYM TABLE LOGIC
\r
259 ADD T,W ;IF THE TOP OF THE UNDEFINED SYM TAB DOES
\r
260 TRNE T,-1 ; NOT POINT TO BOTTOM OF REGULAR SYM TABLE,THEN
\r
261 HRRZM W,ESTU ; RE-INIT UNDEFINED SYM TABLE POINTER. ESTU.
\r
263 SUB T,W ;IF THE SYM TABLE PNTR AND THE PROGRAM
\r
264 TSC T,T ; NAME (PRGM) PNTR DO NOT END UP IN THE
\r
265 MOVE W1,PRGM ; SAME PLACE. OR THEY DO NOT BOTH START ON
\r
266 XOR W1,W ; AN EVEN (OR BOTH ON ODD) LOCATION. OR
\r
267 TRNE W1,1 ; PRGM .GE.0, THEN RE-INIT PRGM.
\r
268 JRST DDT2 ;EVEN-ODD PROBLEM
\r
269 SKIPN T ;POINTERS DON'T END TOGETHER
\r
270 SKIPL PRGM ;IF PRGM .GE. 0, THEN RE-INIT
\r
271 DDT0: MOVEM W,PRGM ;PRGM=C(JOBSYM)
\r
276 MOVEM T,JOBREN ;SET REENTER ADDRESS
\r
282 SETZM CRASH+3 ;CLEAR PPN
\r
283 SETZM COMNDS+3 ;CLEARN PPN IN CASE FILDDT SAVED AFTER STARTING
\r
284 SETZM SNAP+3 ;ALSO GOOD PRACTICE TO BE SELF INITIALIZING
\r
285 SETZM CRASHS ;ASSUME NO CRASH.SAV(IE. PEEK AT CURRENT MONITOR)
\r
287 JRST NOCSH ;LET USER PASS. HE MAY WANT TO PEEK AT MON.
\r
288 ; OR JUST WANT TO TYPE OUT VALUE OF SOME SYMBOLS
\r
289 SETOM CRASHS ;FLAG CRASH.SAV EXISTS ON DSK
\r
295 SETOM RSAVE ;FORCE READING OF "CURRENT" BLOCK
\r
301 SETOM COMAND ;ASSUME A COMMAND FILE
\r
303 NOLPT: SETZM COMAND ;NO FILE IF NOT FOUND
\r
305 JRST DD1 ;USE TTY I/O
\r
307 SIXBIT .,LPT. ;PREPARE FOR LPT OUTPUT IN AL MODE
\r
309 JRST NOLPT ;TREAT AS THO NO FILE
\r
311 JRST NOLPT ;TREAT AS NO FILE IF CAN'T ENTER
\r
315 HOW TO COPY MONITOR SYMBOL TABLE INTO FILDDT
\r
316 1) USE FDDD10 TO LOAD AN UNRUN VERSION OF YOUR MONITOR
\r
317 AS SAVED AFTER BUILD OR LOADING.
\r
318 2) RENAME IT AS CRASH.SAV
\r
319 3) LOAD A PRISTINE VERSION OF FILDDT AND START IT TO SET
\r
322 5) FILDDT WILL EXPAND AS NECESSARY AND COPY THE SYMBOL
\r
323 TABLE FROM CRASH.SAV INTO ITSELF
\r
324 6) AFTER CARRIAGE RETURN IS TYPED FILDDT IS DONE.
\r
325 7) SAVE FILDDT WITH A NEW NAME SO AS NOT TO CONFUSE IT WITH THE
\r
326 ORIGINAL FILDDT.SAV
\r
328 THE MONITOR CAN BE LOADED IN ANY OF THREE WAYS(IN ORDER OF PREFERENCE):
\r
329 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON
\r
330 2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER & COMMON
\r
331 3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD
\r
333 THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116) & T30SYM(131) IN DIFFERENT STATES:
\r
335 DDTSYM JOBSYM T30SYM
\r
337 1. JUNK S.T.PTR JUNK
\r
338 2. JUNK JUNK(NON-NEG) S.T.PTR
\r
339 3. S.T.PTR S.T.PTR JUNK
\r
346 EXTERNAL JOBFF,JOBREN
\r
348 SYMSET: MOVEI R,JOBSYM
\r
351 MOVEM T,JOBSYM ;POSSIBLE SYMBOL POINTER
\r
355 MOVEM T,DDTSTP ;YET ANOTHER CANIDATE
\r
356 MOVEI R,T30SYM ;ASSUME LOADED BY 10/30
\r
359 SKIPL JOBSYM ;OR IS JOBSYM A POINTER (-VE)?
\r
360 JRST REGT30 ;LOADED BY 10/30
\r
361 SKIPL DDTSTP ;DDTSYM A VALID POINTER (-VE)?
\r
362 MOVE T,JOBSYM ;NO TAKE JOBSYM AS THE POINTER
\r
363 REGT30: MOVEM T,JOBSYM ;SAVE IT OVER OLD JOBSYM
\r
365 MOVMS T,T ;LENGTH OF SYMBOL TABLE
\r
367 ADDI W,1300 ;LEAVE SPAVE FOR COMMAND & LPT BUFFERS.
\r
368 ; OR DSK BUFFERS AND EXTRA SYMBOL DEFNS.
\r
369 HRRZ W1,W ;SAVE LOC FOR COPY
\r
370 ADD W,T ;ADD TABLE LENGTH
\r
371 IORI W,1777 ;REQUEST INTEGRAL # OF K.
\r
372 CALLI W,11 ;GET CORE
\r
374 MOVE R,JOBSYM ;WHEREABOUTS OF MONITOR SYMBOLS
\r
375 HRRM W1,JOBSYM ;NOW POINT TO FILDDT SYMBOLS
\r
376 TCOPY: PUSHJ P,FETCH ;GET A WORD
\r
378 MOVEM T,0(W1) ;STASH IT
\r
381 JRST NOLPT ;GO TRY IT
\r
382 DDTSTP: Z ;SAVE POSSIBLE SYMBOL POINTER
\r
387 DD1.5: TLZ F,ROF ;CLOSE ANY OPEN REGISTER
\r
388 MOVE T,[XWD SCHM,SCH]
\r
389 BLT T,ODF ;LOAD ACS
\r
390 DD2: CLEARM PRNC ;PARENTHESES COUNT
\r
393 MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEM
\r
394 TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F]
\r
395 LIS0: TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF]
\r
401 L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG
\r
405 MOVEM T,TEM ;INIT SYMBOL COUNTER
\r
406 MOVE T,[POINT 7,TXT]
\r
407 MOVEM T,CHP ;SETUP FOR OPEVAL SYMBOL
\r
411 L2: PUSHJ P,TIN ;PICK UP CHARACTER
\r
412 CAIL T,"A"+40 ;LOWER CASE A
\r
413 CAILE T,"Z"+40 ;LOWER CASE Z
\r
415 TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE
\r
416 TLNE F,CF ;CONTROL FLAG
\r
423 CAILF T,137 ;DISPATCH TABLE HAS ENTRIES ONLY .LE. 137
\r
425 IDIVI R,3 ;REMAINDER GIVES COLUMN, QUOTIENT GIVES ROW
\r
426 LDB W,BDISP(R+1) ;GET 12 BIT ADDRESS FROM DISPATCH TABLE
\r
427 CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE
\r
432 MOVE T,[XWD OPEVAL,EVAL] ;GET ADDRESSES OF LOOKUP ROUTINES
\r
433 SKIPN WRD ;IF C(WRD)=0, CALL OPEVAL FIRST, OTHERWISE EVAL FIRST
\r
438 L212: HLRZS T,SAVE ;GET ADDRESS OF THE OTHER LOOKUP ROUTINE
\r
439 JUMPE T,UND1 ;IF ADR=0, THEN SYMBOL UNDEFINED
\r
440 L213: PUSHJ P,(T) ;CALL OPEVAL OR EVAL
\r
441 JRST L212 ;SYMBOL NOT FOUND
\r
455 JRST DDT(W) ;MULTIPLY OR DIVIDE
\r
458 JRST DDT(W) ; + - @ ,
\r
461 TLNE F,TIF ;TRUNCATE INDICATOR FLAG
\r
462 HLL T,WRD ;TRUNCATE
\r
472 L5: CAIG W,RPRN-DDT
\r
480 UNDEF: MOVEI W1,"U"
\r
482 WRONG: MOVE W1,[ASCII /XXX/]
\r
485 PUSHJ P,LCT ;TYPE TAB
\r
486 PUSHJ P,LISTEN ;GOBBLE ANY INPUT CHARACTER
\r
490 PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS
\r
493 UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER
\r
495 ASH S,-1 ;SETUP EVAL END TEST
\r
519 QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS
\r
521 QUEST1: JUMPGE R,DD1
\r
525 QUEST2: ADD W1,[XWD 2,2]
\r
532 QUEST4: ADD R,[XWD 2,2]
\r
534 \fNUM: ANDI T,17 ;T HOLDS CHARACTER
\r
542 IMULI W,12 ;CONVERT TO DECIMAL
\r
547 DOLLAR: SKIPA T,[46+101-13] ;RADIX 50 $ TO BE
\r
548 PERC: MOVEI T,47+101-13 ;PERCENT SIGN
\r
549 LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
\r
550 TLZN F,LTF+FEF+SF+FPF
\r
560 LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL
\r
564 IMULI W,50 ;CONVERT TO RADIX 50
\r
566 SOSGE TEM ;IGNORE CHARACS AFTER 6
\r
572 \fNUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $
\r
580 MOVEI W1,6 ;FORM FLOATING POINT NUMBER
\r
589 NM1B: MOVSI W1,211000(T)
\r
590 FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT
\r
592 FADRB R,FH ;ADD VALUE INTO FLOATING NO.
\r
597 JRST L4 ;NO EXPONENT
\r
615 \fPERIOD: MOVE T,LLOC
\r
616 TLNE F,SF ;SYLLABLE STARTED
\r
619 TLNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE?
\r
620 TLO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL
\r
627 FAD T,[0] ;NORMALIZE T AND W1
\r
632 MOVEI T,45 ;RADIX 50 PERIOD
\r
635 QUAN: SKIPA T,LWT ;LAST QUANTITY TYPED
\r
636 PILOC: MOVEI T, SAVPI
\r
638 QUAN2: TLO F,SF+QF ;WRD,SYL STARTED
\r
642 CONTRO: ;SOME KIND OF ALTMODE
\r
643 IFN EDDT&1,< MOVEI T,"$" ;$
\r
644 PUSHJ P,TOUT ;TYPE OUT $
\r
649 \fEVAL: MOVE R,PRGM ;LOOK UP SYMBOL
\r
650 EVAL0: HRLOI W1,37777+DELI
\r
652 ASH S,-1 ;SETUP END TEST
\r
655 EVAL1: ADD R,[XWD 2,2]
\r
658 AOJG S,CPOPJ ;TRNASFER IF NO SYMBOL FOUND
\r
669 CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP
\r
672 ;BIT 40 - DELETE OUTPUT
\r
673 ; 20 - DELETE INPUT
\r
676 ; NO BITS - PROGRAM NAME
\r
678 TEXI: PUSHJ P,TEXIN ;INPUT TEXT
\r
683 CAIN T,33 ;NEW ALT MODE, ESCAPE
\r
688 TEXI2: PUSHJ P,TEXIN
\r
695 TEXI3: LSHC T-1,-43
\r
699 \fSIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT)
\r
712 KILL: TLNN F,LTF ;DELETE SYMBOLS
\r
716 MOVEI T,DELO/200000 ;DELETE OUTPUT
\r
718 MOVEI T,DELI/200000 ;NO INPUT OR OUTPUT
\r
719 DPB T,[POINT 2,(R),1] ;LEFT 2 BITS IN SYMBOL
\r
720 KILRET: JRST RET ;USED AS A CONSTANT
\r
723 KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS
\r
725 KILL2: PUSHJ P,EVAL0
\r
730 REMUN: MOVE S,[XWD 2,2] ;REMOVE ONE UNDEFINED SYMBOL
\r
737 \fTAG: TLNN F,LTF ; NO LETTERS IS ERROR
\r
738 JRST ERR ; GO SAY ERROR
\r
739 TLNE F,FAF ; DEFINE SYMBOLS
\r
741 TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER
\r
746 DEFIN: PUSHJ P,EVAL ;DEFINED SYMBOL?
\r
747 JRST DEF1 ;NO - DEFINE
\r
748 JRST DEF2 ;YES, REDEFINE
\r
749 DEF1: MOVN R,[XWD 2,2]
\r
750 ADDB R,@SYMP ;MOVE UNDEFINED TABLE 2 REGISTERS
\r
759 MOVEM T,1(R) ;PUT IN NEW VALUE
\r
762 MOVEM T,(R) ;PUT IN NEW SYM AS GLOBAL
\r
765 DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY
\r
781 DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL
\r
783 \fSETNAM: MOVE R,@SYMP ;SET PROGRAM NAME - DOLLAR COLON
\r
785 SET2: JUMPGE R,UNDEF
\r
795 ;***ROUTINES BEYOND HERE EVALUATE THEIR ARGUMENT***
\r
796 MULT: TLOA F,PTF+MLF ;*
\r
797 DIVD: TLO F,DVF+PTF ;SINGLE QUOTE
\r
800 ASSEM: JRST PLUS ;#
\r
805 LPRN: CAML P,[XWD LPDL-4,0] ;LEFT PARENTHESIS
\r
807 PUSH P,F ;RECURSE FOR OPEN PAREN
\r
814 INDIRECT: HRLZI W,20 ;@
\r
819 ACCF: MOVE R,T ;COMMA PROCESSOR
\r
820 ACCCF: MOVSI T,.-. ;LEFT HALF OF A,,B
\r
821 TLOE F,COMF ;COMMA TYPED BEFORE?
\r
823 HRRM R,ACCCF ;NO, SAVE LEFT HALF OF A,,B
\r
825 LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION
\r
832 \fACCF1: MOVEM T,WRD ;SET LEFT HALF OF A,,B
\r
859 \f;REGISTER EXAMINATION LOGIC
\r
861 LINEF: PUSHJ P,DEPRA ;NEXT REGISTER
\r
862 IFE EDDT&1,<PUSHJ P,CRNRB
\r
866 LI1: ;PUSHJ P,LINCHK ;TRUNCATE ADRS (UNLESS INSIDE DDT)
\r
882 JRST CONSYM ;RETURN IS A POPJ
\r
885 LINCHK: CAML T,[DDTINT SAVPI] ;TRUNCATE ADDRESSES
\r
886 CAMLE T,[DDTINT BNADR+2]
\r
893 VARRW: PUSHJ P,DEPRA ;^
\r
898 CARR: PUSHJ P,DEPRA ;CLOSE REGISTER
\r
899 IFN EDDT&1,<JRST DD1>
\r
900 IFE EDDT&1,< PUSHJ P,TIN
\r
904 \fOCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT
\r
905 OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY
\r
907 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT
\r
908 SLASH: TLZ F,STF ;TYPE OUT REGISTER
\r
909 TLNN F,QF ;WAS ANY QUANTITY TYPED?
\r
910 JRST SLAS1 ;NO. DO NOT CHANGE MAIN SEQUENCE
\r
911 MOVE R,LLOC ;YES. SAVE OLD SEQUENCE AND
\r
913 HRRZM T,LLOC ;PUSHJ P,LINCHK ;TRUNCATE ADRS- SET UP NEW SEQUENCE
\r
914 SLAS1: HRRZM T,LLOCO
\r
917 ICON: TLNN F,ROF ;REGISTER OPENED OR ERR
\r
921 \fTAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q
\r
923 EXCH T,LLOC ;SET UP NEW SEQUENCE AND
\r
924 MOVEM T,SAVLOC ;SAVE OLD SEQUENCE
\r
925 HRROI T,700000 ;3 RUBOUTS
\r
929 DEPRA: MOVE R,SAVLOC
\r
930 TLNE F,CF ;RESTORE OLD SEQUENCE IF $CR,$CF, OR
\r
931 EXCH R,LLOC ;IF $^ OR $BS WAS TYPED
\r
932 MOVEM R,SAVLOC ;SETUP "NEW" OLD SEQUENCE
\r
933 TLNE F,ROF ;IF REGISTER IS BEING CHANGED
\r
934 TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED
\r
935 JRST DEPRS ;SYMBOL REFERENCES TO IT
\r
938 DEPRA2: JUMPGE R,DEPRS
\r
945 EQUAL: TROA F,LF1+CF1 ;=
\r
951 R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER
\r
955 MOVEI W1,LWT ;SETUP FOR SPT
\r
958 SIXBP: MOVNI W2,6 ;SIXBIT PRINTER
\r
966 \f;MODE CONTROL SWITCHES
\r
968 TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII
\r
970 CAIN T,6 ;CHECK FOR $6T
\r
971 MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT
\r
972 CAIN T,5 ;CHECK FOR $5T
\r
973 MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50
\r
974 HWRDS: ADDI R,HLFW-TFLOT ;H
\r
975 SFLOT: ADDI R,TFLOT-PIN ;F
\r
976 SYMBOL: ADDI R,PIN-FTOC ;S
\r
977 CON: ADDI R,FTOC ;C
\r
981 RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIE
\r
984 ABSA: ADDI R,TOC ;A
\r
988 BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N>1
\r
992 BASE1: MOVS S,[XWD SCHM,SCH]
\r
995 BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT
\r
998 SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE
\r
1000 \f;GO AND EXECUTE LOGIC
\r
1002 GO: HRLI T,(JRST) ;G
\r
1005 HRR T,JOBSA> ;GET STARTING ADDRESS
\r
1015 XEC1: JRST DDT ;USED AT PROC0
\r
1020 \f;BREAK POINT LOGIC
\r
1021 BP1: REPEAT NBP,< 0 ;JSR TO HERE FOR BREAKPOINT
\r
1023 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE
\r
1029 POP T,LEAV ;MOVE INSTRUCTION TO LEAV
\r
1030 MOVEI T,B1SKP-B1INS+1(T)
\r
1031 HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP
\r
1032 MOVEI T,B1CNT-B1SKP(T)
\r
1033 HRRM T,BCOM2 ;PROCEDE COUNTER SETUP
\r
1034 MOVE T,BP1-B1CNT(T)
\r
1035 IFN EDDT&1,< TLZ T,010000 ;TURN OFF USER MODE BIT>
\r
1036 HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING
\r
1039 BCOM3: SKIPE B1SKP ;ADDR MOD TO LOOK AT COND. INST.
\r
1041 BCOM2: SOSG B1CNT ;ADDR MOD TO LOOK AT PROCEED COUNTER
\r
1045 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION
\r
1047 CAILE T,266 ;JSA,JSP
\r
1049 JRST PROC1 ;MUST BE INTERPRETED
\r
1052 JRST PROC1 ;MUST BE INTERPRETED
\r
1054 JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAV
\r
1057 \fBREAK: JSR SAVE ;SAVE THE WORLD
\r
1058 PUSHJ P,REMOVB ;REMOVE BREAKPOINTS
\r
1060 HRRZS T ;GET ADDR OF BREAKPOINT JUST HIT
\r
1061 SUBI T,B1ADR-3 ;CHANGE TO ADDRESS OF $0B
\r
1062 IDIVI T,3 ;QUOTIENT IS BREAK POINT NUMBER
\r
1063 HRRM T,BREAK2 ;SAVE BREAK POINT #
\r
1064 MOVE W1,[ASCII /$0B>/] ;PRELIMINARY TYPEOUT MESSAGE
\r
1065 SKIPG @BCOM2 ;TEST PROCEED COUNTER
\r
1066 TRO W1,">"_1 ;CHANGE T TO /$0B>>/
\r
1067 DPB T,[POINT 4,W1,13] ;INSERT BREAK POINT # IN MESSAGE
\r
1070 HLLM T, SAVPI ;SAVE PROCESSOR FLAGS
\r
1072 PUSHJ P,PAD ;TYPE PC AT BREAK
\r
1074 HRRM T,PROC0 ;SETUP ADDRESS OF BREAK
\r
1077 JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE
\r
1078 PUSHJ P,LCT ;PRINT TAB
\r
1080 PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT
\r
1081 BREAK1: MOVSI S,400000
\r
1082 BREAK2: ROT S,.-. ;ROT BY # OF BREAK POINT
\r
1083 PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT
\r
1084 TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC
\r
1085 JRST RET ;DONT PROCEED
\r
1088 PROCEDE: TLNN F,QF ;N$P ;PROCEED AT A BREAKPOINT
\r
1093 PROCD1: PUSHJ P,CRF
\r
1095 PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT
\r
1097 JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK
\r
1102 PROC1: MOVE T,AC0+T
\r
1105 PROC2: MOVEI W,100
\r
1106 MOVEM W,TEM1 ;SETUP MAX LOOP COUNT
\r
1108 \fIXCT4: IFE EDDT&1,< SUBI T,041
\r
1110 AOJGE T,IXCT6> ;DONT PROCEDE FOR INIT
\r
1111 ;DONT INTERPRET FOR SYSTEM UUOS
\r
1112 MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS
\r
1116 JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED
\r
1118 IXCT5: IFN EDDT&1,<
\r
1119 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION
\r
1120 CAIN T,254 ;DON'T DO ANYTHING TO JRST IN EXEC MODE
\r
1125 DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS
\r
1126 LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD
\r
1127 LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD
\r
1130 JRST IPUSHJ ;INTERPRET PUSHJ
\r
1133 JRST IJSR ;INTERPRET JSR
\r
1135 JRST IJSP ;INTERPRET JSP
\r
1137 JRST IJSA ;INTERPRET JSA
\r
1140 JRST IXCT4 ;INTERPRET UUO
\r
1142 JRST IXCT ;INTERPRET XCT
\r
1144 IXCT6: JSP T,RESTORE
\r
1145 LEAV: 0 ;INSTRUCTION MODIFIED
\r
1150 BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR
\r
1154 \fIPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH
\r
1159 IJSA: MOVE T,BCOM ;INTERPRET JSA
\r
1164 IJSR: MOVE T,BCOM ;INTERPRET JSR
\r
1166 IJSR2: MOVE R,LEAV
\r
1168 JRST BPLUP ;ERROR, CAN'T STORE
\r
1170 IJSR3: MOVE T,LEAV
\r
1173 IJSP: MOVE W,BCOM ;INTERPRET JSP
\r
1178 ;INSERT BREAKPOINTS
\r
1180 INSRTB: MOVE S,[JSR BP1]
\r
1181 INSRT1: SKIPE R,B1ADR-BP1(S)
\r
1184 MOVEM T,B1INS-BP1(S)
\r
1187 JFCL ;HERE ONLY IF CAN'T WRITE IN HIGH SEG
\r
1193 ;REMOVE BREAKPOINTS
\r
1195 REMOVB: MOVEI S,BNADR
\r
1196 REMOV1: MOVE T,B1INS-B1ADR(S)
\r
1199 JFCL ;HERE ONLY IF NO WRITE IN HIGH SEG
\r
1203 IFN EDDT&1,<JRST TTYRET>
\r
1204 IFE EDDT&1,<POPJ P,>
\r
1206 ;IN EXEC MODE, SAVE UP TTY STATUS ;IN USER MODE, DONE BY SAVE
\r
1207 \f;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B
\r
1210 BPS: TLZE F,QF ;HAS <A> BEEN TYPED?
\r
1212 TRZE F,Q2F ;NO, HAS <N> BEEN TYPED?
\r
1214 MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS
\r
1216 BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER
\r
1219 BPS1: TRZN F,Q2F ;HAS <N> BEEN TYPED?
\r
1221 MOVE R,T ;YES, PROCESS THE COMMAND A$NB
\r
1234 BPS3: MOVEI R,B1ADR ;PROCESS THE COMMAND A$B
\r
1247 AUTOP: SUBI R,B1ADR ;AUTO PROCEDE SETUP SUBROUTINE
\r
1255 \f;FETCH AND DEPOSIT INTO MEMORY
\r
1258 DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT
\r
1259 MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM
\r
1265 PUSHJ P,DEP ;STORE AWAY
\r
1266 JRST ERR ;CAN'T STORE (IN DDT OR OUT OF BOUNDS)
\r
1269 ;DEPOSIT INTO MEMORY SUBROUTINE
\r
1273 JSP TT1,CHKADR ;LEGAL ADDRESS?
\r
1275 JRST DEP4 ;YES BUT IN HI SEGMENT>
\r
1277 JRST DEPAC ;DEPOSIT IN AC
\r
1279 IFE EDDT&10,< MOVE T,(R) >
\r
1280 JRST CPOPJ1 ;SKIP RETURN
\r
1282 DEPAC: MOVEM T,AC0(R) ;DEPOSIT IN AC
\r
1283 JRST CPOPJ1 ;SKIP RETURN
\r
1287 CALLI W,SETUWP ;IS HI SEGMENT PROTECTED? TURN OFF
\r
1288 POPJ P, ;PROTECTED, NO SKIP RETURN
\r
1289 MOVEM T,(R) ;STORE WORD IN HI SEGMENT
\r
1290 TRNE W,1 ;WAS WRITE PROTECT ON?
\r
1291 CALLI W,SETUWP ;YES, TURN IT BACK ON
\r
1293 JRST CPOPJ1 ;SKIP RETURN
\r
1295 > ;END NOT-FILDDT COND.
\r
1297 IFN EDDT&10,<DEP=CPOPJ> ;ALWAYS OK NO-OP IF FILE DDT
\r
1298 \f;FETCH FROM MEMORY SUBROUTINE
\r
1300 FETCH: IFE EDDT&10,<IFE EDDT&1,
\r
1301 <JSP TT1,CHKADR ;LEGAL ADDRESS?
\r
1302 JFCL> ;HIGH OR LOW OK FOR FETCH
\r
1303 TRNN R,777760 ;ACCUMULATOR?
\r
1304 SKIPA T,AC0(R) ;YES
\r
1306 JRST CPOPJ1 ;SKIP RETURN FOR LEGAL ADDRESS>
\r
1308 IFN EDDT&10,< SKIPN CRASHS ;CRASH.SAV EXISTS?
\r
1309 JRST MONPEK ;NO - GO PEEK AT RUNNING MONITOR
\r
1310 MOVEM R,TEM4 ;SAVE THE AOBJN POINTER
\r
1311 HRRZ R,R ;STRIP OFF POSSIBLE COUNT
\r
1313 IDIVI R,4000 ;R HAS LOCATION
\r
1314 CAIL R,30 ;R=NO. OF INPTS R+1=LOCATION
\r
1315 POPJ P, ;LARGER THAN 48K
\r
1316 TRNN S,777000 ;S=R+1
\r
1317 JUMPE R,RSDNT ;LOC IS IN RESIDENT BLOCKJ
\r
1318 CAMN R,RSAVE ;IS LOC INCORE ?
\r
1319 JRST INCORE ;S=LOC
\r
1320 MOVEM R,RSAVE ;INPT NO.
\r
1321 IMULI R,20 ;16/INPT
\r
1322 USETI 1,1(R) ;BLOK 0 DOES NOT EXIST
\r
1323 INPUT 1,CURLST ;GET 16 BLKS
\r
1326 INCORE: SKIPA T,CURENT(S)
\r
1327 RSDNT: MOVE T,RSIDNT(S)
\r
1328 MOVE R,TEM4 ;RESTORE AOBJN POINTER
\r
1330 TEM4: 0 ;HOLD AOBJN POINTER
\r
1331 MONPEK: HRRZ T,4 ;REMOVE COUNT
\r
1332 CALLI T,33 ;DO PEEK UUO
\r
1333 JRST CPOPJ1 ;RETURN VALUE IN AC T
\r
1335 IFE EDDT&1,< ;DO ADDRESS CHECKS ONLY IN USER MODE
\r
1336 CHKADR: HRRZ TT,JOBREL ;GET HIGHEST ADDRESS IN LOW SEGMENT
\r
1337 CAIL TT,(R) ;CHECK FOR WITHIN LOW SEGMENT
\r
1338 JRST 1(TT1) ;ADDRESS IS OK IN LOW SEGMENT, SKIP RETURN
\r
1339 HRRZ T,JOBHRL ;GET HIGHEST ADDRESS IN HIGH SEGEMENT
\r
1340 TRNE R,400000 ;IS THE ADDRESS IN HIGH SEGMENT?
\r
1341 CAIGE TT,(R) ;IS THE ADR TO BIG FOR HIGH SEGMENT?
\r
1342 POPJ P, ;NO, YES- ILL. ADR.
\r
1344 > ;END OF IFE EDDT&1
\r
1346 IFN EDDT&1,<CHKADR==CPOPJ> ;NO ADDRESS CHECKS IN EXEC MODE
\r
1347 \fFIRARG: MOVEM T,DEFV
\r
1357 LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL
\r
1360 ASH S,-1 ;SETUP COUNT FOR LENGTH OF SYM TABLE
\r
1362 HRLZI W2,DELO+DELI
\r
1365 LOOK1: TDNE W2,(R)
\r
1369 TLNN T,PNAME ;NAME
\r
1382 LOOK2: HRR W1,R ;POINTER BEST VALUE SO FAR
\r
1385 LOOK3: ADD R,[XWD 2,2]
\r
1388 AOJLE S,LOOK1 ;TERMINATING CONDITION
\r
1393 \fCONSYM: MOVEM T,LWT
\r
1395 JRST @SCH ;PIN OR FTOC
\r
1399 PIN: ;PRINT INSTRUCTION
\r
1402 JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM
\r
1403 AND T,[XWD 777000,0] ;EXTRACT OPCODE BITS
\r
1404 JUMPE T,HLFW ;TYPE AS HALF WORDS
\r
1408 TRNN F,ITF ;HAS INSTRUCTION BEEN TYPED?
\r
1409 PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE
\r
1410 TROA F,NAF ;INSTRUCTION TYPED, ALLOW NEG ADDRESSES
\r
1411 JRST HLFW ;NOT FOUND, OUTPUT AS HALFWORDS
\r
1413 LDB T,[XWD 270400,LWT] ;GET AC FIELD
\r
1416 PI3A: MOVEI W1,","
\r
1420 TLNE W1,20 ;CHECK FOR INDIRECT BIT
\r
1423 LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS
\r
1426 JRST PI8 ;ALL (EXECPT ASH,ROT,LSH) HAVE SYMBOLIC ADRS
\r
1429 JRST PI8 ;JFFO AND @ GET SYMBOLIC ADDRESSES
\r
1430 PUSHJ P,PADS3A ;ONLY ABSOLUTE ADDRESSING FOR LSH, ASH, AND ROT
\r
1432 LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK
\r
1433 JUMPE R,PADS1 ;EXIT
\r
1443 \fHLFW: REPEAT 0,< MOVE T,LWT
\r
1444 CAML T,[DDTINT SAVPI]
\r
1445 CAMLE T,[DDTINT BNADR+2]
\r
1448 HLRZ T,LWT ;PRINT AS HALF WORDS
\r
1449 JUMPE T,HLFW1 ;TYPE ONLY RIGHT ADR IF LEFT ADR=0
\r
1450 TRO F,NAF ;ALLOW NEGATIVE ADDRESSES
\r
1452 MOVSI W1,(ASCII /,,/)
\r
1453 PUSHJ P,TEXT2 ;TYPE ,,
\r
1456 ;PRINT ADDRESSES (ARG USUALLY 18 BITS BUT CAN BE 36 BITS:
\r
1459 JRST @AR ;PADSO OR PAD1
\r
1460 PADSO: JUMPE T,FP7B ;PRINT A ZERO
\r
1472 PADS1A: PUSHJ P,TOUT
\r
1474 PAD1: JRST TOC ;EXIT
\r
1477 PADS3A: TRNE F,NAF
\r
1480 PADS3B: MOVNM T,TEM
\r
1484 INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM
\r
1485 TDCN T,[XWD -1,400000]
\r
1486 JRST PADS3B ;TYPE AS NEG NUM
\r
1487 LDB R,[POINT 7,T,9] ;PICK OUT IO DEVICE BITS
\r
1488 CAIL R,774_-2 ;IF DEVICE <774, THEN TYPE
\r
1489 JRST HLFW ;TYPE AS HALF WORDS
\r
1490 LDB R,[POINT 3,T,12]
\r
1491 DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER
\r
1497 PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER
\r
1509 MASK1: MOVEM T,MSK
\r
1511 \fEFFEC: TLO F,LTF
\r
1513 WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN
\r
1514 NWORD: ADDI R,326000+40*T ;JUMPN T,
\r
1519 MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS
\r
1524 TLO F,QF ;SIMULATE A $Q TYPED
\r
1527 SEAR1: PUSHJ P,FETCH
\r
1529 TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH
\r
1534 SEAR2: JUMPE T,SEAR3 ;OR JUMPN T
\r
1535 SEAR2A: AOS R,DEFV ;GET NEXT LOCATION
\r
1536 PUSHJ P,LISTEN ;ANYTHING TYPED?
\r
1537 CAMLE R,ULIMIT ;OR END OF SEARCH?
\r
1539 JRST SEAR1 ;NO, LOOK SOME MORE
\r
1541 SEAR2B: MOVEI R,400000-1 ;MOVE UP TO HI SEGMENT
\r
1542 IORB R,DEFV ;PUT IN MEMORY TOO
\r
1543 TRNN R,400000 ;ALREAY IN HI SEGMENT?
\r
1545 SEARFN: SETCMM LWT ;COMPLEMENT BITS BACK AND STOP SEARCH
\r
1547 \fSEAR3: MOVE R,DEFV
\r
1550 TLZ F,STF ;GET RID OF SUPPRESS TYPEOUT MODE
\r
1552 PUSHJ P,LI1 ;CALL REGISTER EXAMINATION LOGIC TO TYPE OUT
\r
1556 SEAR4: JRST SEAR2A
\r
1558 EFFEC0: MOVEI W,100
\r
1561 LDB R,[POINT 4,T,17] ;GET IR FIELD
\r
1567 TLNN W,20 ;INDIRECT BIT CHECK
\r
1576 \fSETUP: TLNN F,QF ;QUANTITY TYPED?
\r
1578 IFN EDDT&10,<MOVEI T,137777 ;DON'T SEARCH BEYOND 48K>
\r
1580 IFE EDDT&1,<MOVEI T,777777 ;NO, GET LAST ADR>
\r
1581 IFN EDDT&1,<HRRZ T,@SYMP ;NO, GET 1ST ADR SYM TABLE>
\r
1584 HRRZM T,ULIMIT ;SAVE HIGH LIMIT INCREMENTED BY ONE
\r
1585 HRRZS R,DEFV ;GET 1ST ADDRESS
\r
1586 TLNN F,FAF ;WAS A 1ST ADR SPECIFIED?
\r
1587 SETZB R,DEFV ;NO, MAKE IT ZERO
\r
1588 CAML R,ULIMIT ;LIMITS IN A REASONABLE ORDER?
\r
1596 HRRZ S,@SYMP ;GET 1ST ADR OF SYMBOL TABLE
\r
1597 HLRE W1,@SYMP ;GET LENGTH OF SYM TABLE
\r
1598 SUB W1,S ;GET NEG OF LAST ADR
\r
1599 MOVNS W1 ;GET POS LAST ADR
\r
1600 MOVEI T,0 ;0 TO STORE IN MEMORY
\r
1601 ZERO1: TRNE R,777760
\r
1602 JRST ZEROR ;OK TO ZERO AC'S
\r
1604 MOVEI R,ZLOW ;DON'T ZERO 20 THRU ZLOW
\r
1608 MOVEI R,DDTEND ;DON'T ZERO DDT
\r
1612 HRRZ R,W1 ;DON'T ZERO SYMBOL TABLE
\r
1613 ZEROR: CAMLE R,ULIMIT ;ABOVE LIMITS?
\r
1614 JRST DD1 ;YES, STOP
\r
1615 PUSHJ P,DEP ;DEPOSIT T
\r
1618 TRNN R,400000 ;HI SEGMENT?
\r
1619 AOJA R,ZERO1 ;NO, KEEP GOING
\r
1621 \fFTOC: ;NUMERIC OUTPUT SUBROUTINE
\r
1623 CAIN W1,10 ;IS OUPUT RADIX NOT OCTAL, OR
\r
1624 TLNN T,-1 ;ARE THERE NO LEFT HALF BITS?
\r
1625 JRST TOCA ;YES, DO NOTHING SPECIAL
\r
1626 HRRM T,TOCS ;NO, TYPE AS HALF WORD CONSTANT
\r
1627 HLRZS T ;GET LEFT HALF
\r
1628 PUSHJ P,TOCA ;TYPE LEFT HALF
\r
1629 MOVSI W1,(ASCII /,,/)
\r
1630 PUSHJ P,TEXT2 ;TYPE ,,
\r
1631 TOCS: MOVEI T,.-. ;GET RIGHT HALF BACK
\r
1642 TOC4: MOVM W1,T ;TYPE AS SIGNED DECIMAL INTEGER
\r
1646 TOC5: PUSHJ P,FP7 ;DECIMAL PRINT ROUTINE
\r
1650 ;SYMBOL OUTPUT SUBROUTINE
\r
1652 SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM
\r
1653 SPT: ;RADIX 50 SYMBOL PRINT
\r
1654 LDB T,[POINT 32,0(W1),35] ;GET SYMBOL
\r
1660 JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS
\r
1669 \fSYMD: MOVEI T,DELO/200000 ;$D ;DELETE LAST SYM & PRINT NEW
\r
1670 HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM
\r
1672 DPB T,[POINT 2,(R),1] ;STORE SEMI-DELETE BITS IN SYMBOL
\r
1674 JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL
\r
1675 \f;FLOATING POINT OUTPUT
\r
1685 TFLOT1: TLNN A, 400
\r
1686 JRST TOC5 ;IF UNNORMALIZED, TYPE AS DECIMAL INTEGER
\r
1698 SETZM TEM1 ;INIT 8 DIGIT COUNTER
\r
1699 SKIPE A,B ;DON'T TYPE A LEADING 0
\r
1700 PUSHJ P,FP7 ;PRINT INTEGER PART OF 8 DIGITS
\r
1701 PUSHJ P,TOC6 ;PRINT DECIMAL POINT
\r
1720 PUSH P,W2 ;SAVE EXPONENT
\r
1721 PUSH P,FSGN(B) ;SAVE "E+" OR "E-"
\r
1722 PUSHJ P,FP3 ;PRINT OUT FFF.FFF PART OF NUMBER
\r
1723 POP P,W1 ;GET "E+" OR "E-" BACK
\r
1725 POP P,A ;GET EXPONENT BACK
\r
1726 \fFP7: IDIVI A,12 ;DECIMAL OUTPUT SUBROUTINE
\r
1736 353473426555 ;1.0E32
\r
1737 266434157116 ;1.0E16
\r
1738 FT8: 233575360400 ;1.0E8
\r
1739 216470400000 ;1.0E4
\r
1740 207620000000 ;1.0E2
\r
1741 204500000000 ;1.0E1
\r
1742 FT: 201400000000 ;1.0E0
\r
1743 026637304365 ;1.0E-32
\r
1744 113715126246 ;1.0E-16
\r
1745 146527461671 ;1.0E-8
\r
1746 163643334273 ;1.0E-4
\r
1747 172507534122 ;1.0E-2
\r
1748 FT01: 175631463146 ;1.0E-1
\r
1751 FCP: CAMLE A, FT0(C)
\r
1759 TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL
\r
1761 TEXT2: MOVEI T,0 ;7 BIT ASCII TEXT OUTPUT SUBROUTINE
\r
1766 \fKILC: XWD -NSYMS,LOW
\r
1772 FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3
\r
1786 SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED
\r
1791 SAVLOC: 0 ;THE ADR OF OLD REGISTER EXAMINATION SEQUENCE
\r
1792 SYMP: XWD PID,JOBSYM
\r
1801 REPEAT NBP*3-3, < 0>
\r
1812 SCHM: EXP PIN ;DO NOT CHANGE ORDER
\r
1819 IFN EDDT&10,< OFFSET: 0 >
\r
1820 \fIFN EDDT&1&<EDDT>B36,<
\r
1822 PUNCH: TLC F,FAF+QF
\r
1824 JRST ERR ;ONE ARGUMENT MISSING
\r
1830 PUN1: MOVEI T,4 ;PUNCH 4 FEED HOLES
\r
1832 TLNE F,CF ;PUNCH NON-ZERO BLOCKS?
\r
1843 JUMPGE R,RET ;EXIT OR PUNCH
\r
1846 SOS W,T ;INIT CHECKSUM
\r
1848 PBLK1: PUSHJ P,FETCH
\r
1857 ;PUNCH NON-ZERO BLOCKS
\r
1859 PUNZ0: AOS DEFV ;LOOK AT NEXT WORD
\r
1860 PUNZ: HRRZ W,DEFV ;ENTER HERE - GET STARTING ADDRESS
\r
1862 SUB W,TEM1 ;CALCULATE NEGATIVE LENGTH
\r
1863 HRL R,W ;SET UP AOBJN POINTER
\r
1864 JUMPGE R,RET ;FINISHED?
\r
1865 CAMG R,[XWD -40,0] ;BLOCK LONGER THAN 40?
\r
1866 HRLI R,-40 ;YES, FIX IT UP
\r
1867 MOVSI W1,400000 ;W1 NEGATIVE MEANS FLUSH 0 WORDS
\r
1868 PUNZ2: PUSHJ P,FETCH ;GET WORD FROM MEMORY
\r
1870 JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER
\r
1871 MOVEI W1,0 ;CLEAR 0 WORD COUNTER
\r
1872 PUNZ4: JUMPL W1,PUNZ0 ;FLUSH 0 WORD, GET ANOTHER
\r
1873 CAIL W1,3 ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD
\r
1874 AOSA R ;ADVANCE R TO LAST ADR+1
\r
1876 ADD W1,DEFV ;CALCULATE DEFV-R+W1=-WORD COUNT
\r
1878 HRLM W1,DEFV ;PUT -WC IN LEFT HALF OF FA
\r
1879 EXCH R,DEFV ;SAVE ADR FOR NEXT BLOCK, GET POINTER
\r
1891 LOAD1: MOVE T,0(R)
\r
1895 LOAD2: PUSHJ P,FEED
\r
1898 BLKEND: TLNN F,QF ;BLOCK END
\r
1899 MOVE T,[JRST 4,DDT]
\r
1900 TLNN T,777000 ;INSERT JRST IF NO OPCODE
\r
1907 PUSHJ P,PWRD ;EXTRA WORD FOR READER TO STOP ON
\r
1920 FEED: CONSZ PTPP,20
\r
1925 FEED1: POPJ P,0 ;ADDRESS USED AS A CONSTANT
\r
1930 PHASE 0 ;RIM10B CHECKSUM LOADER
\r
1936 DATAI PTRR,@TBL1-RD+1(AA)
\r
1941 TBL1: CAME CKSM,ADR
\r
1952 LOADE: XWD LOADB-.,LOADB
\r
1953 > ;END OF IFN EDDT$1&<EDDT>B36
\r
1954 ;FOR PAPER TAPE IO
\r
1956 \fSAVE: 0 ;SAVE THE ACS AND PI SYSTEM
\r
1961 SAV1: IFN EDDT&1,<
\r
1963 CONO PRS, @SAVPI+1>
\r
1970 ;IFE EDDT&1,<HRRZS SAVUWP ;ASSUME UWP WILL BE ZEROED
\r
1971 ; SETZB T,F ;T=F=0
\r
1972 ; CALLIU T,SETUWP ;REQUEST TO CLEAR UWP
\r
1973 ; HRROS SAVUWP ;FAILED, UWP (BIT 0) STILL 1
\r
1974 ; SKIPN SARS ;USER'S SATE SAVED ALREADY?
\r
1976 ; HRRM T,SAVUWP> ;NO, SAVE STATE OF UWP
\r
1978 SETOM,SARS ;FLAG PROTECTING SAVED REGISTERS
\r
1980 IFE EDDT&1,<PUSHJ P,TTYRET> ;IN USER MODE, GET INTO DDT MODE
\r
1981 MOVE T,[XWD SCHM,SCH]
\r
1982 BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES
\r
1985 RESTORE: SETOM TEM3 ;RESTORE ACS AND PI SYSTEM
\r
1986 RESTR1: HRRM T,SAVE
\r
1991 IORI T, 2000 ;TURN ON CHANNELS
\r
1993 ;IFE EDDT&1,<HRRZ T,SAVUWP ;GET OLD UWP
\r
1994 ; CALLI T,SETUWP ;CHANGE IT TO OLD
\r
1995 ; JFCL> ;EX MACHT NICHTS
\r
2000 CPUSHP: PUSH BCOM ;PROGRAM MODIFIED AT IPUSHJ
\r
2001 IFN EDDT&1,< CONO PRS,@SAVPI>
\r
2003 \fCRN: MOVEI T,15 ;CARRIAGE RETURN
\r
2007 CRNRB: PUSHJ P,CRN
\r
2012 MOVEI T,12 ;LINE FEED
\r
2015 LCT: IFN EDDT&1,<PUSHJ P,TSPC
\r
2017 IFE EDDT&1,<MOVEI T,11
\r
2018 JRST TOUT> ;TYPE A TAB
\r
2020 TSPC: MOVEI T,40 ;SPACE
\r
2022 \fIFN EDDT&1,< ;EXECUTIVE MODE TELETYPE I/O
\r
2024 TIN: PUSHJ P,LISTEN ;TELETYPE CHARACTER INPUT
\r
2028 MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW
\r
2029 CAIN T,177 ;RUBOUT?
\r
2030 JRST WRONG ;YES, TYPE XXX
\r
2031 TRNE T,140 ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC
\r
2032 TOUT: CAIG T,04 ;DON'T TYPE EOT OR LOWER CHARS
\r
2035 IMULI T,200401 ;GENERATE PARITY
\r
2040 TRC T,200 ;MAKE PARITY EVEN
\r
2044 ANDI T,177 ;FLUSH PARITY
\r
2047 LISTEN: CONSO TTYY,40 ;LISTEN FOR TTY
\r
2053 TTYRET: MOVEI T,3410
\r
2054 TTY1: MOVEI W2,40000
\r
2062 TTYLEV: MOVE T,SAVTTY
\r
2070 TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES
\r
2072 JRST TOUT ;ECHO CHARACTERS (0-37) NOT ECHOED
\r
2075 \fIFE EDDT&1,< ;USER MODE TELETYPE I/O
\r
2076 IFN EDDT&4,< ;ASSEMBLE WITH OLD DDT MODE IO
\r
2079 TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE
\r
2080 CAME T,[POINT 7,INBFF]
\r
2083 IFE EDDT&10,< ILDB T,PINBFF >
\r
2084 IFN EDDT&10,< PUSHJ P,INCHR >
\r
2088 MOVEI T,33 ;CHANGE TO NEW ALT MODE
\r
2089 CAIN T,177 ;RUBOUT?
\r
2090 JRST WRONG ;YES PRINT XXX
\r
2092 MOVE T,[POINT 7,INBFF]
\r
2094 CALL T,[SIXBIT /DDTIN/]
\r
2097 TOUT: JUMPE T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS
\r
2099 IFN EDDT&10,< SKIPE COMAND
\r
2108 MOVE T,[POINT 7,INBFF]
\r
2111 CALL T,[SIXBIT /DDTOUT/]
\r
2115 PINBFF: POINT 7,INBFF
\r
2116 POUTBF: POINT 7,INBFF
\r
2121 TTYRET: MOVE T,[POINT 7,INBFF]
\r
2127 TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE
\r
2129 \f IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO
\r
2131 OPDEF TTCALL [51B8]
\r
2136 IFE EDDT&10,< TTCALL 0,T ;GET NEXT CHARACTER INTO T >
\r
2137 IFN EDDT&10,< PUSHJ P,INCHR >
\r
2141 MOVEI T,33 ;CHANGE OLD ALT MODES TO NEW
\r
2143 JRST WRONG ;TYPE XXX FOR A RUBOUT
\r
2149 IFN EDDT&10,< SKIPE COMAND ;IS THERE A COMMAND FILE?
\r
2150 JRST PUTCHR ;YES >
\r
2152 TTCALL 1,T ;OUTPUT A CHARACTER
\r
2155 LISTEN: TTCALL 2,T ;GET NEXT CHAR, NO IO WAIT
\r
2156 POPJ P, ;NO CHARACTER EXISTED, RETURN
\r
2157 JRST CPOPJ1 ;CHARACTER WAS THERE, SKIP RETURN
\r
2159 TTYRET: TTCALL 6, ;WHEN RETURNING TO DDT, FLUSH ALL
\r
2160 POPJ P, ;WAITING INPUT CHARACTERS
\r
2162 TTYLEV==CPOPJ ;NOTHING SPECIAL TO DO WHEN LEAVING DDT
\r
2163 > ;END OF IFN DDT&4
\r
2166 INCHR: SKIPE COMAND
\r
2169 IFN EDDT&4,< ILDB T,PINBFF ;NO COMMAND FILE>
\r
2170 IFE EDDT&4,< TTCALL 0,T ;O/P CHAR, >
\r
2174 GETCHR: SOSLE CBUF+2 ;ANY REMAINING
\r
2179 STATZ CM,20000 ;END-OF-FILE?
\r
2182 GETOK: ILDB T,CBUF+1
\r
2183 JUMPE T,GETCHR ;BYPASS ZERO CHARACTERS
\r
2184 PUSHJ P,PUTCHR ;COPY INPUT TO OUTPUT FILE
\r
2187 GETEND: CLOSE DP, ;CLOSE OUTPUT WHEN INPUT EXHAUSTED
\r
2190 JRST NOLPT ;REVERT TO TTY WHEN COMMAND EXHAUSTED
\r
2192 PUTCHR: SOSLE LBUF+2 ;ANY ROOM?
\r
2195 STATZ DP,740000 ;ERRORS?
\r
2199 IDPB T,LBUF+1 ;DEPOSIT CHAR.
\r
2202 > ;END OF IFN EDDT&10
\r
2203 > ;END OF IFE EDDT&1
\r
2204 \fBDISP: POINT 12,DISP(R),11
\r
2205 POINT 12,DISP(R),23
\r
2206 POINT 12,DISP(R),35
\r
2208 DEFINE D (Z1,Z2,Z3)< <Z1-DDT>_30+<Z2-DDT>_14+Z3-DDT>
\r
2209 ;THIS MACRO PACKS 3 ADDRESSES INTO ONE WORD; EACH ADR IS 12 BITS
\r
2211 IFE EDDT&1&<EDDT>B36,< PUNCH=ERR
\r
2227 D SUPTYO,TEXI,ASSEM
\r
2231 D MINUS,PERIOD,SLASH
\r
2236 D FIRARG,EQUAL,ULIM
\r
2237 D QUESTN,INDIRECT,ABSA
\r
2240 D HWRDS,PILOC,BLKEND
\r
2241 D KILL,LOADER,MASK
\r
2242 D NWORD,BITO,PROCEDE
\r
2243 D QUAN,RELA,SYMBOL
\r
2249 ;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE
\r
2250 ; ARE DETECTED AS ERRORS NEAR L21:
\r
2251 \fBITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE
\r
2265 BITT: MOVE T,SVBTS2
\r
2294 ;DESCRIPTION OF OP DECODER FOR DDT:
\r
2296 ; THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO
\r
2297 ;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS
\r
2298 ;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN
\r
2299 ;FOR THE PDP-6. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL
\r
2300 ;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY
\r
2301 ;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH
\r
2302 ;BEGIN WITH 110(2).
\r
2304 ; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD.
\r
2305 ;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE:
\r
2306 ;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER.
\r
2307 ; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS
\r
2310 ; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT
\r
2311 ; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION.
\r
2312 ; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER
\r
2313 ; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS
\r
2314 ; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE
\r
2315 ; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS.
\r
2320 ;; C(INST) = .010 101 100(2)
\r
2322 ; THE RESULT = D = 010(2) = 2(8)
\r
2324 ; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE.
\r
2325 ; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH
\r
2326 ; PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES
\r
2327 ; THE INTERPRETATION.
\r
2329 ;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION
\r
2332 ;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE.
\r
2336 ; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING
\r
2337 ; LETTER IS TYPED.
\r
2339 ;73(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS
\r
2340 ; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD
\r
2341 ; BYTE IN THE TABLE.
\r
2343 ;MACROS ASSEMBLE THE TABLE TBL:
\r
2344 ; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST
\r
2345 ; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE.
\r
2346 ; 2. A POINT (.) ASSEMBLES A STOP CODE.
\r
2347 ; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE
\r
2348 ; SYMBOLICALLY NAMED BYTE.
\r
2349 ; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT,
\r
2350 ; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER.
\r
2352 ;EXAMPLE OF BINARY TO SYMBOLIC DECODING:
\r
2353 ; THE MACHINE CODE FOR JRST IS 254
\r
2354 ; INST 0 1 0 1 0 1 1 0 0
\r
2355 ; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^).
\r
2356 ; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER
\r
2357 ; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN
\r
2358 ; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING
\r
2359 ; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED
\r
2362 ; MOV PRINTING TEXT
\r
2368 ;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO
\r
2369 ;4 BYTES ARE SKIPPED OVER:
\r
2370 ; EXC PRINTING TEXT
\r
2372 ; BL PRINTING TEXT
\r
2377 ; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT
\r
2378 ;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS.
\r
2380 ; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A
\r
2381 ; TREE SEARCH METHOD IS USED.
\r
2382 \f\f\f\f\fREPEAT 0,<
\r
2384 DEFINE REDEF (XX)<
\r
2385 DEFINE INFO (AA,BB)<
\r
2398 IFE Z-":",<INFO <>,<==CLOC>
\r
2399 IFNDEF FIR.,<FIR.==CLOC>
\r
2400 IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG>
\r
2402 IFE Z-"/",<IF1 <OUTP 1>
\r
2403 IF2,<INFO OUTP,+73-FIR.>
\r
2405 IFE Z-"^",<OUTP <ZZ&70/2+ZZ&7-1>
\r
2407 IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,<
\r
2408 REPEAT 5,<ZZ==ZZZ&77
\r
2411 IFE Z-".",<OUTP 40>
\r
2413 IFN Z,<INFO REDEF,L
\r
2415 ZZZ==ZZZ+<Z-40>*ZZM
\r
2424 BINRY==BINRY*400+BINRY*400+A
\r
2426 IFE BINC,<EXP BINRY
\r
2433 TBL: ;OPDECODER BYTE TABLE
\r
2436 CLOC==0 ;SET BYTE LOCATION COUNTER TO 0
\r
2437 BINC==4 ;INIT BYTES/WORD COUNTER
\r
2439 BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/>
\r
2442 BYT9 <21^BD/CON,11^OI/S,01^Z/O/>
\r
2443 BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/>
\r
2446 BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^>
\r
2447 BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/>
\r
2448 BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/>
\r
2449 BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/>
\r
2450 BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/>
\r
2451 ;BYTE AND FLOATING INSTRUCTIONS
\r
2453 BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:>
\r
2454 BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/>
\r
2455 BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/>
\r
2457 ;FWT,FIXED POINT ARITH,MISC.
\r
2459 BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/>
\r
2460 BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^>
\r
2461 BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,>
\r
2462 BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:>
\r
2463 BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,>
\r
2464 BYT9 <AOB/JRS T/JFC L/XC T/.AOB:01^P/N/>
\r
2465 BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,>
\r
2466 BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:>
\r
2467 BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/JFF O/S1:21^.,C:C.,>
\r
2469 ;ARITH COMP,SKIP,JUMP
\r
2471 BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^>
\r
2472 BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/>
\r
2473 BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:>
\r
2474 BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,>
\r
2479 BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:>
\r
2480 BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/>
\r
2482 ;TEST INSTRUCTIONS
\r
2484 BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,>
\r
2485 BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/>
\r
2490 BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/>
\r
2491 BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/>
\r
2492 BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/>
\r
2493 BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/>
\r
2494 BYT9 <CA/CM/CM/CB/O IMB/>
\r
2497 BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/>
\r
2498 BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/>
\r
2500 REPEAT BINC,<BINRY=BINRY*400+BINRY*400>
\r
2501 IFN BINRY,<EXP BINRY>
\r
2502 > ;END OF REPEAT 0
\r
2505 \fIFN EDDT&10,< ;FILDDT STUFF
\r
2506 CRASH: SIXBIT .CRASH. ;CANONICAL NAME FOR CRASH
\r
2510 COMNDS: SIXBIT .FILDDT. ;CANNONICAL NAME FOR COMMAND LIST
\r
2514 SNAP: SIXBIT .SNAP. ;NAME FOR OUTPUT IF TO RETRIEVABLE DEVCE
\r
2518 CBUF: BLOCK 3 ;RING HEADERS
\r
2520 COMAND: Z ;-1 IF COMMAND FILE ,0 IF NOT
\r
2521 CRASHS: Z ;-1 IF CRASH.SAV ON DISK ,0 IF PEEK AT MONITOR
\r
2524 RSIDNT: BLOCK 1000 ;LOCS 0-777 ALWAYS IN CORE
\r
2525 CURENT: BLOCK 4000 ;WINDOW TO THE FILE ON DISK
\r
2526 RSAVE: IOWD 1000,RSIDT ;INDEX OF THE CUFRRENT BLOCK, 0,1,...
\r
2528 CURLST: IOWD 4000,CURENT
\r
2532 \fSUBTTL OP DECODER
\r
2534 DEFINE BYT9 (A) <IRP A,<
\r
2544 IFGE <LASTB==CLOC+73-FIR.>-1000, <PRINTX OPTABLE TO LONG>>>
\r
2552 IFNB <A>, <IRPC A,<CLOC==CLOC+1>>>
\r
2555 IFNB <A>, <IRPC A,<CLOC==CLOC+1>>
\r
2561 DEFINE .ADR (A)<IFN %'A-CLOC,<PRINTX PHASE ERR AT: %'A>>
\r
2567 OUTP A&70/2+A&7-1>
\r
2570 IFNB <A>, <IRPC A,<OUTP "A"-40>>>
\r
2573 IFNB <A>. <IRPC A,<OUTP "A"-40>>
\r
2577 BINRY== BINRY+<A>_<BINC==BINC-9>
\r
2585 \fTBL: ;OPDECODER BYTE TABLE
\r
2588 CLOC= 0 ;SET BYTE LOCATION COUNTER TO 0
\r
2589 BINC= ^D36 ;INIT BYTES/WORD COUNTER
\r
2593 .DIS 63,.TRA UUO,.TRA FLO,.TRA HAK,.TRA ACCP,.TRA BOOLF
\r
2594 .TXT H,.TRA HWT,.TXT T,.TRA ACBM
\r
2598 .DIS 21,.TRA BD,.TXT CON,.DIS 11,.TRA IO,.TXT S,.DIS 01,.TRA Z,. TRA O
\r
2599 .ADR BD,.DIS 01,.TXT BLK,.TRA IO,.TXT DATA,.ADR IO,.DIS 11,.TRA I,.TRA O
\r
2600 .ADR OI,.DIS 01,.TRA O,.TRA I
\r
2603 .ADR UUOI,.DIS 51,.END,.TXT,.DIS 32,.TRA U40,.TRA U50,.TRA U60
\r
2604 .DIS 21,.TRA U703,.DIS 11.,TRA USET,.DIS 01
\r
2605 .TXT LOOKU,.TRA P,.TXT ENTE,.TRA R,.ADR USET,.TXT USET,.DIS 01,.TRA I,.TRA O
\r
2606 .ADR U40,.DIS 03,.TRA CAL,.TXT INI,.TRA T,.END,.END,.END,.END,.END,.TXT CALL,.TRA I
\r
2607 .ADR U60,.DIS 21,.TRA U603,.DIS 01,.TXT IN,.TRA BPUT,.TXT OUT
\r
2608 .ADR BPUT,M.,DIS 11,.TXT BU,.ADR F,.END F,.TXT,.TXT U,.TRA T
\r
2609 .ADR U603,.DIS 01,.TRA U6062,.TXT STAT,.DIS 11,.ADR O,.END O,.TXT,.ADR Z,.END Z,.TXT
\r
2610 .ADR U6062,.DIS 11,.TXT S,.TRA U62,.TXT G,.ADR U62,.TXT ETST,.TRA S
\r
2612 ;BYTE AND FLOATING INSTRUCTIONS
\r
2614 .ADR FLO,.DIS 51,.TRA BYTE,.TXT F,.DIS 32,.TXT,.TXT AD,.TRA A,.TXT SB
\r
2615 .TRA A,.TXT MP,.TRA A,.TXT DV,.ADR A
\r
2616 .DIS 21,.TRA LMB,.TXT R,.TRA IMB,.ADR LMB,.DIS 02,.END,.TXT
\r
2617 .ADR L,.END L,.TXT,.ADR M,.END M,.TXT
\r
2618 .ADR B,.FND B,.TXT,.ADR BYTE,.DIS 32,.END,.END,.END,.TXT
\r
2619 .DIS 03,.TXT UF,.TRA PA,.TXT DF,.TRA N
\r
2620 .TXT FS,.TRA C,.TXT IB,.ADR P,.END P,.TXT,.TXT I,.TRA LD
\r
2621 .ADR LD,.TXT LD,.TRA B,.TXT I,.TRA DP,.ADR DP,.TXT DP,.TRA B
\r
2623 ;FWT-FIXED POINT ARITH-MISC
\r
2625 .ADR HAK,.DIS 33,.TRA MV,.ADR MV,.TXT MOV,.TRA MO,.TRA ML,.TRA DV
\r
2626 .TRA SH,.TRA H1,.TRA JP
\r
2627 .DIS 21,.TXT ADD,.TRA IMB,.TXT SU,.ADR BIMB,.TXT B,.ADR IMB,.DIS 02,.END,.TXT
\r
2628 .ADR I,.END I,.TXT,.TRA M,.TRA B,.ADR MO,.DIS 22
\r
2629 ,ADR E1MS,.TXT E,.TRA IMS,.TXT S,.TRA IMS,.TXT N,.TRA IMS,.TXT M
\r
2630 .ADR IMS,.DIS 02,.END,.TXT,.TRA I,.TRA M,.ADR S,.END S,.TXT
\r
2631 .ADR ML,.DIS 21,.TXT I,.TRA ML1,.ADR ML1,.TXT MUL,.TRA IMB
\r
2632 .ADR DV,.DIS 21,.TXT I,.TRA DV1
\r
2633 .ADR DV1,.TXT DI,.ADR DV2,.TXT V,.TRA IMB,.ADR H1,.DIS 03,.TXT EXC,.TRA S3,.TXT BL
\r
2634 .ADR T,.END T,.TXT,.TRA AO,.ADR AO,.TT AOBJ
\r
2635 .TRA AOB,.TXT JRS,.TRA T,.TXT JFC,.TRA L,.TXT XC,.TRA T,.END
\r
2636 .ADR AOB,.DIS 01,.TRA P,.TRA N
\r
2637 .ADR JP,.DIS 03,.TRA PU,.ADR PU,.TXT PUSH,.TRA PUS,.TRA PO
\r
2638 .ADR PO,.TXT POP,.TRA POP,.TXT JS,.ADR R,.END R,.TXT
\r
2639 .TXT JS,.TRA P,.TXT JS,.ADR PA,.END, A,.TXT,.TXT JR,.TRA PA
\r
2640 .ADR PUS,.DIS 01,.ADR J,.END J,.END,.TXT,.ADR POP
\r
2641 .DIS 01,.END,.TXT,.TRA J,.ADR SH,.DIS 02,.TXT A,.TRA S2,.TXT ROT,.TRA S1,.TXT L
\r
2642 .ADR S2,.TXT S,.ADR S3,.TXT H,.TRA S1,.TXT JFF,.TRA O
\r
2643 .ADR S1,.DIS 21,.END,.TXT,.ADR C,.END C,.TXT
\r
2645 ;ARITH COMP-SKIP-JUMP
\r
2647 .ADR ACCP,.DIS 42,.TXT CA,.TRA CA1,.TRA SJ,.TXT A,.TRA JS,.TXT S
\r
2648 .ADR JS,.TXT O,.DIS 31
\r
2649 .TXT J,.TRA COMP,.TXT S,.TRA COMP,.ADR CA1,.DIS 31,.TXT I,.TRA COMP,.TXT M,.TRA COMP
\r
2650 .ADR SJ,.DIS 31,.TXT JUM,.TRA PSJ,.TXT SKI,.ADR PSJ,.TXT P,.ADR COMP
\r
2651 .DIS 03,.END,.TXT,.TRA L,.ADR E,.END E,.TXT,.TXT L,.TRA E,.TRA PA,.TXT G,.TRA E
\r
2652 .ADR N,.END N,.TXT,.END G,.TXT
\r
2656 .ADR HWT,.DIS 51,.TRA HW1,.DIS 21,.TXT 3,.TRA HW2,.TXT L,.ADR HW2,.TXT R,.TRA HW3
\r
2657 .ADR HW1,.DIS 21,.TXT L,.TRA HW4,.TXT R,.ADR HW4,.TXT L
\r
2658 .ADR HW3,.DIS 32,.TRA IMS,.TXT Z,.TRA IMS,.TXT D,.TRA IMS,.TRA EIMS
\r
2660 ;TEST INSTRUCTIONS
\r
2662 .ADR ACBM,.DIS 31,.TRA AC1,.DIS 01,.TXT D,.TRA AC2,.TXT S,.TRA AC2
\r
2663 .ADR AC1,.DIS 01,.TXT R,.TRA AC2,.TXT L
\r
2664 .ADR AC2,.DIS 42,.TXT N,.TRA EAN,.TXT Z,.TRA EAN,TXT C,.TRA EAN,.TXT O
\r
2665 .ADR EAN,.DIS 12,.END,.TXT,.TRA E,.TRA PA,.TRA N
\r
2669 .ADR BOOLE,.DIS 24,.TRA ST,.ADR AN,.TXT ANBD,.TRA B2,.TRA AN,.TRA ST,.TRA AN,.TRA ST
\r
2670 .TXT X,.ADR OR,.TXT OR,.TRA B2,.TXT I,.TRA OR,.TRA AN,.TXT EQ
\r
2671 .TRA DV2,.TRA ST,.TRA OR,.TRA ST,.TRA OR,.TRA OR
\r
2672 .ADR ST,.TXT SET,.ADR B2,.DIS 24,.TXT Z,.TRA IMB,.TRA IMB
\r
2673 .ADR CA,.TXT C,.TRA TA,.ADR TM,.TXT M,.TRA IMB
\r
2674 .ADR DM,.TXT C,.TRA TM,.ADR TA,.TXT A,.TRA IMB,.TRA IMBA,.TRA IMB
\r
2675 .ADR CP,.TXT C,.TRA BIMB,.TRA IMB,.TRA CA
\r
2676 .TRA CA,.TRA CM,.TRA CM,.TRA CB,.TXT 0,.TRA IMB
\r
2680 .ADR U50,.DIS 03,.TXT OPE,.TRA N,.TXT TT,.ADR CAL,.TXT CAL,.TRA L,.END,.END,.END
\r
2681 .TXT,.TXT RENAM,.TRA E,.TXT I,.TRA N,.TXT OU,.TRA T
\r
2682 .ADR U703,.DIS 02,.TXT CLOS,.TRA E,.TXT RELEA,.TRA S
\r
2683 .TXT MTAP,.TRA E,.TXT UGET,.TRA F
\r
2685 ;**********THIS TERMINATES THE "BYT9" MACRO ARGUMENT******
\r
2688 IF1,< BLOCK <CLOC+3>/4>
\r
2690 IF2,< IFN BINC-^D36,< +BINARY>>
\r
2692 IFNDEF CLOC.,<CLOC.==CLOC>
\r
2693 IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE>
\r
2695 PNTR: EXP INST ;POINTER TO BITS IN INST
\r
2696 INST: 0 ;BINARY FOR INSTRUCTION
\r
2697 CHP: 0 ;CHAR POINTER INTO TXT, TXT+1
\r
2698 TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL
\r
2699 SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER
\r
2701 BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER
\r
2702 POINT 9,TBL,8 ;FOR TRANSFER BYTE
\r
2706 OPEVAL: MOVEI T,0 ;EVALUATE FOR AN OP CODE
\r
2707 IDPB T,CHP ;INSERT NULL IN TEXT FOR SYMBOL
\r
2710 OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY
\r
2712 MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS
\r
2714 MOVE T,[XWD 440700,TXT]
\r
2715 MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT
\r
2716 TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG
\r
2719 DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL
\r
2722 SOJGE R,DC1 ;SKIP OVER # BYTES = C(R)
\r
2723 JUMPG R,DC1 ;SKIP OVER ALPHA TEXT WITHOUT COUNTING
\r
2725 JUMPE T,DECX ;TRANSFER ON ASTOP CODE
\r
2727 DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE
\r
2730 DPB T,[XWD 300600,PNTR]
\r
2732 JRST DC6 ;FOR OPEVAL ONLY
\r
2733 LDB R,PNTR ;GET # BYTES TO SKIP OVER
\r
2736 DC2: HRREI T,-33(T)
\r
2737 JUMPL T,DECT ;TYPE OUT A LETTER
\r
2738 MOVEI W1,FIR.(T) ;BYTE IS A TRANSFER
\r
2740 MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE
\r
2746 JRST DC8 ;TYPE OUT A LETTER
\r
2747 ILDB W1,CHP ;GET NEXT INPUT LETTER
\r
2748 CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER
\r
2749 JRST NOMAT ;DOESNT MATCH
\r
2750 JRST DC1 ;MATCHES, TRY NEXT
\r
2752 DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN
\r
2753 POPJ P, ;IF FOR OUTPUT, RETURN
\r
2754 ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY
\r
2755 JUMPE W1,DC7 ;DOES # OF CHARS MATCH
\r
2756 NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE
\r
2760 NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE
\r
2761 DPB R,PNTR ;STUFF INTO ANSWER
\r
2763 JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG
\r
2765 JRST NOMAT ;NOT AT TOP LEVEL
\r
2766 POPJ P, ;UNDEFINED, FINALLY
\r
2768 DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE
\r
2770 DC6AA: CAMN P,SAVPDL
\r
2772 LDB T,-2(P) ;OLD VALUE OF PNTR
\r
2781 DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER
\r
2783 LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL
\r
2784 LDB R,[POINT 3,T,8]
\r
2787 DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS
\r
2788 JRST CPOPJ1 ;SYMBOL FOUND, SKIP RETURN
\r
2790 DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG
\r
2792 PUSHJ P,TOUT ;OUTPUT A LETTER
\r
2793 CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES
\r
2801 DDTEND: ;ONLY STARTING ADDRESS FOR FILDDT
\r
2802 ;NO START EDDRESS FOR EXEC OR USER DDT
\r
2803 ;BECUASE MONITOR IS LOADED WITH BOTH EXEC AND USER DDTS
\r
2804 ;BUT STILL WANTS TO BE STARTED AT ITS OWN STARTING ADDRESS
\r
2805 ;USER DDT IS LOADED LAST. - T.H.
\r
2806 IFN EDDT&10,<END DDT>
\r