;THIS CAUSES A RELOCATABLE VERSION OF EXEC DDT WITH THE ; PAPER TAPE I/O OPTION TO BE ASSEMBLED (AS OPPOSED TO ; RELOCATABLE AND/OR ABSOLUTE VERSIONS OF USER DDT ; AND/OR NON-PAPER TAPE I/O EXEC DDT, ALL OF WHICH CAN ; BE ASSEMBLED FROM THE SAME SOURCE CODE WITH A ; DIFFERENT DEFINITION OF "EDDT"). REPEAT 0,< HOW TO ASSEMBLE DDT THE SOURCE OF DDT WILL ASSEMBLE INTO SEVERAL DIFFERENT VERSIONS; THE ASSEMBLE IS CONTROLED BY THE VALUES ASSIGNED TO THE SYMBOL EDDT. THIS SYMBOL MUST BE DEFINED AS A SEPARATE FILE PRECEDING THE DDT SOURCE FILE. THE SYMBOL EDDT IS DECODED IN THE FOLLOWING MANNER: BIT 35 A ZERO: ASSEMBLE USER MODE DDT BIT 35 A ONE: ASSEMBLE AN EXECUTIVE MODE DDT BIT 34 A ZERO: DO NOT ASSEMBLE THE PAPER TAPE FEATURE INTO THE DDT BIT 34 A ONE: THIS IS IGNORED FOR USER DDT. FOR AN EXEC DDT, ASSEMBLE THE PAPER TAPE FEATURE BITS 0-17: IF THESE BITS ARE ALL ZERO THE ASSEMBLY WILL BE RELOCATABLE IF THEY ARE NON-ZERO, THE ASSEMBLY IS ABSOLUTE STARTING AT THE VALUE IN BITS 0-17 (THE LEFT HALF) EXAMPLE: 1.) IF EDDT IS NOT DEFINED BY A PARAMETER ASSIGNMENT, DDT WILL ASSIGN EDDT=0 AND A USER MODE RELOCATABLE DDT WILL RESULT. 2.) EDDT=1; A RELOCATABLE EXEC DDT WITHOUT PAPER TAPE FEATURE WILL RESULT. 3.) EDDT=3; A RELOCATABLE EXEC DDT WITH PAPER TAPE FEATURE WILL RESULT 4.) EDDT=; AN ABSOLUTE DDT (STARTING ADRESS 4000) WITHOUT PAPER TAPE FEATURE WILL RESULT 5.) EDDT=; AN ABSOLUTE DDT (STARTING ADDRESS 4000) WITH ALL THE PAPER TAPE FEATURES WILL RESULT. > IFNDEF EDDT, DEFINE XP (X.,Y.),< IF2,> NSYMS=0 ;INITIAL SYMBOL COUNTER LOC 74 XWD DDTEND,DDT RELOC 0 IFN EDDT&,B53> IFN EDDT&1, IFE EDDT&1,<TITLE UDDT V.005 - USER MODE DDT EXTERN JOBREL,JOBSYM,JOBSA NSYMS=NSYMS+6 ZLOW=140> F=0 ;FLAGS P=1 ;PUSH DOWN R=2 ;POINTERS TO TABLES, CORE, ETC. S=3 W=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER T=5 ;TRANSFER DATA W1=6 W2=7 SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT AR=11 ;MODE CONTROL SWITCH FOR OUTPUT ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX A=R B=S C=W PRS=4 TTYY=120 PTRR=104 PTPP=100 LPDL=50 ;MAX LENGTH PUSH DOWN LIST TIF=100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA PTF=100 ; +, -, OR * HAS BEEN TYPED CTF=400 SF=4 ;SYLLABLE FLAG QF=1 ;QUANTITY TYPED IN TO WORD ASSEMBLER CF=40 ; TYPED CCF=10000 ; TYPED MF=2 ;MINUS SIGN TYPED IN LTF=20 ;LETTER TYPED IN TO CURRENT SYLLABLE ROF=10 ;REGISTER OPEN FLAG STF=4000 FAF=1000 ; < TYPED SAF=2000 ; > TYPED FPF=20000 ; . TYPED IN FEF=400000 ; E FLAG MLF=200 ;*FLAG DVF=40000 ;DIVIDE FLAG PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM ;RIGHT HALF FLAGS ITF=2 ;INSTRUCTION TYPED IF ITF=1 OUTF=4 ;OUTPUT IF OUTF=1 CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT Q2F=1 ;NUMBER TYPED AFTER ALT MODE SBF=20 NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE POWF=4000 ;ARGUMENT FOR EXPONENT COMING SLL=10000 ;STOP LOOKING FOR LOCALS GLOBAL=040000 ;GLOBAL SYMBOL LOCAL=100000 PNAME=740000 ;PROGRAM NAME DELI=200000 ;DELETE INPUT DELO=400000 ;DELETE OUTPUT DDT: ENTRY DDT NSYMS=NSYMS+2 RADIX 10 NBP=8 ;NUMBER OF BREAKPOINTS DEFINE DBPNT (Z.)<XP $'Z.'B,B1ADR+3*Z.-3> ZZ=0 REPEAT NBP,<DBPNT \<ZZ=ZZ+1>> RADIX 8 XP $M,MSK XP $I,SAVPI XP DDTEND,DDTEND IFN EDDT&1,< XP PI,4B11 XP PTP,100B11 XP PTR,104B11 XP CDR,114B11 XP TTY,120B11 XP LPT,124B11 XP DC,200B11 XP DIS,130B11 XP PLT,140B11 XP CR,150B11 XP DSK,170B11 XP DTC,210B11 XP DTS,214B11 XP DCSA,300B11 XP DCSB,304B11 XP DF,270B11 XP MTC,220B11 XP MTS,224B11 XP MTM,230B11 XP DLS,240B11 XP TDC,320B11 XP TDS,324B11 XP TMC,340B11 XP TMS,344B11> XP JOV,2554B11 XP JEN,2545B11 XP HALT,2542B11 LOW=DDT-NSYMS-1 DDT: JSR SAVE PUSHJ P,REMOVB HLRZ T,ESTU SUB T,ESTU ADD T,@SYMP TRNE T,-1 JRST IFIX DD1: TLZ F,ROF ;CLOSE ANY OPEN REGISTER PUSHJ P,CRF DD1.5: MOVE T,[XWD SCHM,SCH] BLT T,ODF ;LOAD ACS DD2: CLEARM PRNC ;PARENTHESES COUNT MOVEI P,PS LIS: MOVE T,ESTU MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEM TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F] LIS0: TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF] CLEARM,WRD LIS1: CLEARM,FRASE LIS2: MOVEI T,1 MOVEM T,FRASE1 TLZ F,MLF+DVF L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG CLEARM,SYL L1RPR: CLEARM,SYM MOVEI T,6 MOVEM T,TEM ;INIT SYMBOL COUNTER CLEARM,DEN CLEARM,WRD2 L2: PUSHJ P,TIN ;PICK UP CHARACTER CAIL T,"A"+40 ;LOWER CASE A CAILE T,"Z"+40 ;LOWER CASE Z JRST .+2 TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE TLNE F,CF ;CONTROL FLAG JRST L21 CAIG T,"Z" ;Z CAIGE T,"A" ;A JRST .+2 JRST LET L21: MOVE R,T IDIVI R,3 LDB W,BDISP(R+1) CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE JRST DDT(W) L211: MOVE T,SYL TLZN F,LTF JRST POWER PUSHJ P,EVAL JRST UND1 L4: TLZE F,MF MOVN T,T TLNN F,SF CAIE W,LPRN-DDT JRST .+2 JRST LPRN EXCH T,FRASE1 TLNN F,DVF IMULB T,FRASE1 TLZE F,DVF IDIVB T,FRASE1 CAIGE W,ASSEM-DDT JRST DDT(W) ;MULTIPLY OR DIVIDE ADDB T,FRASE CAIGE W,SPACE-DDT JRST DDT(W) ; + - @ , ADD T,WRD TLNE F,TIF ;TRUNCATE INDICATOR FLAG HLL T,WRD ;TRUNCATE MOVEM T,WRD TLNN F,QF MOVE T,LWT CLEARM,R MOVE W1,ESTUT CAMN W1,ESTU JRST L5 CAILE W,CARR-DDT JRST ERR L5: CAIG W,RPRN-DDT JRST DDT(W) PUSH P,KILRET SKIPN PRNC JRST DDT(W) ERR: MOVEI W1,"?" JRST WRONG1 UNDEF: MOVEI W1,"U" JRST WRONG1 WRONG: MOVE W1,[ASCII /XXX/] WRONG1: MOVEI P,PS PUSHJ P,TEXT IFN EDDT&1,<PUSHJ P,LISTEN JFCL> RET: MOVEI P,PS PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS JRST DD2 UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER HLRE S,ESTUT ASH S,-1 ;SETUP EVAL END TEST PUSHJ P,EVAL2 CAIN W,ASSEM-DDT TLNN F,ROF JRST OPEVAL SKIPE PRNC JRST OPEVAL MOVEI T,"#" CAIE W,ASSEM-DDT PUSHJ P,TOUT MOVN R,[XWD 2,2] ADDB R,ESTUT MOVE T,SYM TLO T,GLOBAL MOVEM T,(R) HRRZ T,LLOCO TLNE F,MF TLO T,400000 MOVEM T,1(R) MOVEI T,0 JRST L4 QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS MOVE R,ESTU QUEST1: JUMPGE R,DD1 MOVE T, (R) SKIPA W1,ESTU QUEST2: ADD W1,[XWD 2,2] CAME T,(W1) JRST QUEST2 QUEST3: CAME R,W1 JRST QUEST4 PUSHJ P,SPT PUSHJ P,CRF QUEST4: ADD R,[XWD 2,2] JRST QUEST1 NUM: ANDI T,17 ;T HOLDS CHARACTER TLNE F,CF+FPF JRST NM1 MOVE W,SYL LSH W,3 ADD W,T MOVEM W,SYL MOVE W,DEN IMULI W,12 ;CONVERT TO DECIMAL ADD W,T MOVEM W,DEN LE1: AOJA T,LE1A PERC: MOVEI T,47+101-13 ;PERCENT SIGN LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1 TLZN F,LTF+FEF+SF+FPF CAIE T,105 ; E TLOA F,LTF TLOA F,FEF JRST LET1 TLZN F,MF SKIPA W1,SYL MOVN W1,SYL MOVEM W1,FSV CLEARM DEN LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL LE1A: TLO F,SF+QF LE2: MOVE W,SYM IMULI W,50 ;CONVERT TO RADIX 50 ADD W,T SOSL,TEM ;IGNORE CHARACS AFTER 6 MOVEM W,SYM JRST L2 NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $ IMULI T,12 ADDM T,WRD2 TRO F,Q2F JRST L2 NM1: TLNE F,CF JRST NUM1 MOVEI W1,6 ;FORM FLOATING POINT NUMBER AOS NM1A NM1A: MOVEI W2,0 MOVSI R,201400 NM1A1: TRZE W2,1 FMPR R,FT(W1) JUMPE W2,NM1B LSH W2,-1 SOJG W1,NM1A1 NM1B: MOVSI W1,211000(T) FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT FADRB R,FH ;ADD VALUE INTO FLOATING NO. MOVEM R,SYL AOJA T,LE1A POWER: TLNN F,FEF JRST L4 ;NO EXPONENT CAIE W,PLUS CAIN W,MINUS TROE F,POWF TRZA F,POWF JRST (W) ; E+- MOVE W2,DEN CLEARM FRASE MOVEI W1,FT-1 TLZE F,MF MOVEI W1,FT01 SKIPA T,FSV POW2: LSH W2,-1 TRZE W2,1 FMPR T,(W1) JUMPE W2,L4 SOJA W1,POW2 PERIOD: MOVE T,LLOC TLNE F,SF ;SYLLABLE STARTED MOVE T,DEN MOVEM T,SYL TLNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE? TLO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL TLON F,FPF+SF+QF MOVEI T,0 IDIVI T,400 SKIPE T TLC T,243000 TLC W1,233000 FAD T,[0] ;NORMALIZE T AND W1 FAD W1,[0] FADR T,W1 MOVEM T,FH HLLZS NM1A MOVEI T,45 ;RADIX 50 PERIOD JRST LE2 QUAN: SKIPA T,LWT ;LAST QUANTITY TYPED PILOC: MOVEI T, SAVPI QUAN1: MOVEM T,SYL QUAN2: TLO F,SF+QF ;WRD,SYL STARTED TLZ F,CF+CCF JRST L2 CONTRO: ;SOME KIND OF ALTMODE IFN EDDT&1,< MOVEI T,"$" ;$ PUSHJ P,TOUT ;TYPE OUT $ > DOLLAR: TLOE F,CF TLO F,CCF JRST L2 EVAL: MOVE R,PRGM ;LOOK UP SYMBOL EVAL0: HRLOI W1,37777+DELI HLRE S,@SYMP ASH S,-1 ;SETUP END TEST JRST EVAL3 EVAL1: ADD R,[XWD 2,2] EVAL2: SKIPL R MOVE R,@SYMP AOJG S,CPOPJ ;TRNASFER IF NO SYMBOL FOUND EVAL3: MOVE T,(R) XOR T,SYM TLNN T,PNAME TLOA W1,LOCAL TDNE T,W1 JRST EVAL1 TLNN T,340000 JRST EVAL1 MOVE T,1(R) CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP CPOPJ: POPJ P, ;BIT 40 - DELETE OUTPUT ; 20 - DELETE INPUT ; 10 - LOCAL ; 04 -GLOBAL ; NO BITS - PROGRAM NAME TEXI: PUSHJ P,TEXIN ;INPUT TEXT MOVEM T,SYL MOVEI W1,5 MOVEI T-1,0 PUSHJ P,TEXIN CAIN T,33 ;NEW ALT MODE, ESCAPE JRST QUAN2 TLNE F,CF JRST SIXBIN SKIPA TEXI2: PUSHJ P,TEXIN CAMN T,SYL SOJA W1,TEXI3 ROT T,-7 LSHC T-1,7 SOJA W1,TEXI2 TEXI3: LSHC T-1,-43 JUMPL W1,QUAN1 LSH T,7 SOJA W1,.-2 SIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT) SIXBIN: CAMN T,SYL JRST SIXBI2 ANDI T,77 TRC T,40 ROT T,-6 LSHC T-1,6 SOJA W1,SIXBI1 SIXBI2: MOVE T,T-1 JUMPL W1,QUAN1 LSH T,6 SOJA W1,.-2 KILL: TLNN F,LTF ;DELETE SYMBOLS JRST KILLA PUSHJ P,EVAL JRST KILL1 MOVEI T,DELO/200000 ;DELETE OUTPUT TLNE F,CCF MOVEI T,DELI/200000 ;NO INPUT OR OUTPUT DPB T,[POINT 2,(R),1] ;LEFT 2 BITS IN SYMBOL KILRET: JRST RET ;USED AS A CONSTANT KILLA: TLNN F,QF TLNN F,CCF JRST ERR MOVE R,KILC MOVEM R,@SYMP ;RESTORE INIT SYMS HRRZM R,ESTU MOVEM R,PRGM HRLZI T,DELO+DELI ANDCAM T,(R) ;GET RID OF DELETE BITS IN INITIAL TABLE AOBJN R,.+1 AOBJN R,.-2 JRST RET KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS JUMPGE R,UNDEF KILL2: PUSHJ P,EVAL0 JRST RET PUSHJ P,REMUN JRST KILL2 REMUN: MOVE S,[XWD 2,2] ;REMOVE ONE UNDEFINED SYMBOL ADDB S,ESTU MOVE W,-2(S) MOVEM W,(R) MOVE W,-1(S) MOVEM W,1(R) POPJ P, TAG: TLNN F,LTF ; NO LETTERS IS ERROR JRST ERR ; GO SAY ERROR TLNE F,FAF ; DEFINE SYMBOLS JRST DEFIN ;A<B: TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER JRST SETNAM MOVE W,LLOCO HRRZM W,DEFV DEFIN: PUSHJ P,EVAL JRST DEF1 CAMGE R,KILC ;INITIAL SYMBOL? JRST DEF2 ;NO, REDEFINE MOVEI T,DELI/200000 ;YES, DELETE AND DEFINE NEW ONE DPB T,[POINT 2,(R),1] ;LEFT 2 BITS OF SYMBOL DEF1: MOVN R,[XWD 2,2] ADDB R,@SYMP ;MOVE UNDEFINED TABLE 2 REGISTERS HRRZ T,ESTU SUBI T,2 HRL T,ESTU HRRM T,ESTU SKIPGE ESTU BLT T,-1(R) DEF2: MOVE T,DEFV MOVEM T,1(R) ;PUT IN NEW VALUE MOVSI T,GLOBAL IORB T,SYM MOVEM T,(R) ;PUT IN NEW SYM AS GLOBAL MOVE R,ESTU DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY MOVE T,SYM CAME T,(R) JRST DEF4 MOVE S,DEFV SKIPGE, 1(R) MOVN S,S PUSH P,R MOVE R,1(R) PUSHJ P,FETCH JRST ERR ADD S,T HRRM S,T PUSHJ P,DEP POP P,R PUSHJ P,REMUN DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL JRST DEF3 SETNAM: MOVE R,@SYMP ;SET PROGRAM NAME - DOLLAR COLON SET1: MOVE W,R SET2: JUMPGE R,UNDEF MOVE T,(R) ADD R,[XWD 2,2] TLNE T,PNAME JRST SET2 CAME T,SYM JRST SET1 MOVEM W,PRGM JRST RET MULT: TLOA F,PTF+MLF ;* DIVD: TLO F,DVF+PTF ;SINGLE QUOTE JRST L1 ASSEM: JRST PLUS ;# MINUS: TLO F,MF PLUS: TLO F,PTF JRST LIS2 LPRN: CAML P,[XWD LPDL-4,0] ;LEFT PARENTHESIS JRST ERR PUSH P,F ;RECURSE FOR OPEN PAREN PUSH P,WRD PUSH P,FRASE PUSH P,FRASE1 AOS,PRNC JRST LIS INDIRECT: HRLZI W,20 ;@ IORB W,WRD TLO F,QF JRST LIS2 ACCF: MOVE R,T ;COMMA HLLZS T LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION IDIVI W1,7 LSH R,27(W1) ADD T,R ADDB T,WRD JRST SPACE+1 SPACE: TLNE F,QF TLO F,TIF SPAC1: TLZ F,MF+PTF JRST LIS1 RPRN: TLNN F,QF ;) MOVEI T,0 MOVS T,T SOSGE,PRNC JRST ERR POP P,FRASE1 POP P,FRASE POP P,WRD POP P,F TLNE F,PTF TLNE F,SF JRST RPRN1 MOVEM T,SYL TLO F,QF+SF JRST L1RPR RPRN1: ADDB T,WRD TLO F,QF JRST L1RPR-1 ;REGISTER EXAMINATION LOGIC LINEF: PUSHJ P,DEPRA ;NEXT REGISTER IFE EDDT&1,<PUSHJ P,CRNRB JRST .+2> LI0: PUSHJ P,CRF AOS T,LLOC LI1: HRRZM T,LLOC HRRZM T,LLOCO PUSHJ P,PAD MOVEI T,"/" TLNE F,STF MOVEI T,"!" PUSHJ P,TOUT LI2: TLZ F,ROF PUSHJ P,LCT MOVE R,LLOCO PUSHJ P,FETCH JRST ERR TLO F,ROF TLNE F,STF JRST DD2 JRST CONSYM ;RETURN IS A POPJ VARRW: PUSHJ P,DEPRA ;^ PUSHJ P,CRF SOS T,LLOC JRST LI1 CARR: PUSHJ P,DEPRA ;CLOSE REGISTER IFN EDDT&1,<JRST DD1> IFE EDDT&1,< PUSHJ P,TIN CAIN T,15 JRST .-2 JRST DD1.5> OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY TROA F,LF1 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT SLASH: TLZ F,STF ;TYPE OUT REGISTER TLNE F,QF HRRZM T,LLOC ;QUANTITY TYPED SLAS1: HRRZM T,LLOCO JRST LI2 ICON: TLNN F,ROF ;REGISTER OPENED OR ERR JRST ERR PUSHJ P,DEPRS JRST SLAS1 TAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q MOVEI T,-1(T) MOVEM T,LLOC HRROI T,700000 ;3 RUBOUTS PUSHJ P,TEXTT JRST LI0 DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED JRST DEPRS ;SYMBOL REFERENCES TO IT MOVE R,ESTU MOVEM W1,ESTU DEPRA2: JUMPGE R,DEPRS HRRZ W,1(R) CAMN W,LLOCO PUSHJ P,REMUN ADD R,[XWD 2,2] JRST DEPRA2 EQUAL: TROA F,LF1+CF1 ;= PSYM: TRZ F,CF1 ;@ TRO F,LF1 PUSHJ P,CONSYM JRST RET R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER TRZ T,3 PUSHJ P,TOC PUSHJ P,TSPC MOVEI W1,LWT ;SETUP FOR SPT JRST SPT SIXBP: MOVNI W2,6 ;SIXBIT PRINTER MOVE W1,LWT SIXBP1: MOVEI T,0 ROTC T,6 ADDI T,40 PUSHJ P,TOUT AOJL W2,SIXBP1 POPJ P, ;MODE CONTROL SWITCHES TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII MOVE T,WRD2 CAIN T,6 ;CHECK FOR $6T MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT CAIN T,5 ;CHECK FOR $5T MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50 HWRDS: ADDI R,HLFW-TFLOT ;H SFLOT: ADDI R,TFLOT-PIN ;F SYMBOL: ADDI R,PIN-FTOC ;S CON: ADDI R,FTOC ;C HRRZM R,SCH JRST BASE1 RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIE JRST BASECH MOVEI R,PADSO-TOC ABSA: ADDI R,TOC ;A HRRZM R,AR JRST BASE1 BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N>1 CAIGE T,2 JRST ERR HRRZM T,ODF BASE1: MOVS S,[XWD SCHM,SCH] TLNN F,CCF JRST LIS1 BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT JRST RET SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE JRST @SCH ;GO AND EXECUTE LOGIC GO: HRLI T,254000 ;G TLOE F,QF JRST XEC0 IFN EDDT&1,< SKIPE T,STARTA> ;LOAD TAPE START ADDRESS IFE EDDT&1,< HRR T,JOBSA> ;GET STARTING ADDRESS XEC: TLNN F,QF ;X JRST ,ERR XEC0: MOVEM T,TEM PUSHJ P,CRF PUSHJ P,TTYLEV PUSHJ P,INSRTB JSP T,RESTORE XCT,TEM XEC1: JRST DDT ;USED AT PROC0 JSR,SAVE PUSHJ P,REMOVB PUSHJ P,CRF JRST DD1 ;BREAK POINT LOGIC BP1: REPEAT NBP,< 0 ;JSR TO HERE FOR BREAKPOINT JSA T, BCOM 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE > B1INS=BP1+2 BPN=.-3 BCOM: 0 POP T,LEAV ;MOVE INSTRUCTION TO LEAV MOVEI T,B1SKP-B1INS+1(T) HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP MOVEI T,B1CNT-B1SKP(T) HRRM T,BCOM2 ;PROCEDE COUNTER SETUP MOVE T,BP1-B1CNT(T) IFN EDDT&1,< TLZ T,010000 ;TURN OFF USER MODE BIT> HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING EXCH T,BCOM BCOM3: SKIPE B1SKP ;ADDR MOD TO LOOK AT COND. INST. XCT @.-1 BCOM2: SOSG B1CNT ;ADDR MOD TO LOOK AT PROCEED COUNTER JRST BREAK MOVEM T,AC0+T LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION CAIL T,264 ;JSR CAILE T,266 ;JSA,JSP TRNN T,700 ;UUO JRST PROC1 ;MUST BE INTERPRETED CAIE T,260 ;PUSHJ CAIN T,256 ;XCT JRST PROC1 ;MUST BE INTERPRETED MOVE T,AC0+T JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAV LEAV1: XWD 0,LEAV BREAK: JSR SAVE ;SAVE THE WORLD PUSHJ P,REMOVB ;REMOVE BREAKPOINTS SOS T,BCOM3 HRRZS T ;GET ADDR OF BREAKPOINT JUST HIT PUSHJ P,PADSO ;PRINT ITS NAME- $NB MOVSI W1,(ASCII />/) ;TYPE > FOR COND BREAK SKIPG @BCOM2 ;TEST PROCEED COUNTER MOVSI W1,(ASCII />>/) ;TYPE >> FOR PROCEED COUNTER BREAK PUSHJ P,TEXT2 MOVE T,BCOM HLLM T, SAVPI ;SAVE PROCESSOR FLAGS MOVEI T,-1(T) PUSHJ P,PAD ;TYPE PC AT BREAK HRRZ T,@BCOM3 HRRM T,PROC0 ;SETUP ADDRESS OF BREAK HLRZ T,@BCOM3 JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE PUSHJ P,LCT ;PRINT TAB HLRZ T,@BCOM3 PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT BREAK1: HRRZ R,BCOM3 SUBI R,B1ADR IDIVI R,3 ;GET BREAKPOINT NUMBER-1 INTO R MOVEI S,1 LSH S,(R) PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC JRST RET ;DONT PROCEED JRST PROCD1 PROCEDE: TLNN F,QF ;N$P ;PROCEED AT A BREAKPOINT MOVEI T,1 MOVEM T,@BCOM2 HRRZ R,BCOM3 PUSHJ P,AUTOP PROCD1: PUSHJ P,CRF PUSHJ P,TTYLEV PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT PUSHJ P,FETCH JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK MOVEM T,LEAV PUSHJ P,INSRTB JRST PROC2 PROC1: MOVE T,AC0+T JSR SAVE JFCL PROC2: MOVEI W,100 MOVEM W,TEM1 ;SETUP MAX LOOP COUNT JRST IXCT5 IXCT4: IFE EDDT&1,< SUBI T,041 JUMPE T,BPLUP AOJGE T,IXCT6> ;DONT PROCEDE FOR INIT ;DONT INTERPRET FOR SYSTEM UUOS MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS MOVEI R,41 IXCT: SOSL TEM1 PUSHJ P,FETCH JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED MOVEM T,LEAV IXCT5: IFN EDDT&1,< LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION CAIN T,254 ;DON'T DO ANYTHING TO JRST IN EXEC MODE JRST IXCT6> HRLZI 17,AC0 BLT 17,17 MOVEI T,@LEAV DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD MOVEI P,PS CAIN T,260 JRST IPUSHJ ;INTERPRET PUSHJ CAIN T,264 JRST IJSR ;INTERPRET JSR CAIN T,265 JRST IJSP ;INTERPRET JSP CAIN T,266 JRST IJSA ;INTERPRET JSA MOVE R,LEAV TRNN T,700 JRST IXCT4 ;INTERPRET UUO CAIN T,256 JRST IXCT ;INTERPRET XCT IXCT6: JSP T,RESTORE LEAV: 0 ;INSTRUCTION MODIFIED JRST @BCOM AOS BCOM JRST @BCOM BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR BPLUP1: JSR SAVE JFCL JRST ERR IPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH CLEARM,TEM3 MOVE T,LEAV JRST RESTR1 IJSA: MOVE T,BCOM ;INTERPRET JSA HRL T,LEAV EXCH T,AC0(W1) JRST IJSR2 IJSR: MOVE T,BCOM ;INTERPRET JSR HLL T,SAVPI IJSR2: MOVE R,LEAV PUSHJ P,DEP AOSA T,LEAV IJSR3: MOVE T,LEAV JRST RESTORE IJSP: MOVE W,BCOM ;INTERPRET JSP HLL T,SAVPI MOVEM W,AC0(W1) JRST IJSR3 ;INSERT BREAKPOINTS INSRTB: MOVE S,[JSR BP1] INSRT1: SKIPE R,B1ADR-BP1(S) PUSHJ P,FETCH JRST INSRT3 MOVEM T,B1INS-BP1(S) MOVE T,S PUSHJ P,DEP INSRT3: ADDI S,3 CAMG S,[JSR BPN] JRST INSRT1 POPJ P, ;REMOVE BREAKPOINTS REMOVB: MOVEI S,BNADR REMOV1: MOVE T,B1INS-B1ADR(S) SKIPE R,(S) PUSHJ P,DEP REMOV3: SUBI S,3 CAIL S,B1ADR JRST REMOV1 IFN EDDT&1,<JRST TTYRET> IFE EDDT&1,<POPJ P,> ;IN EXEC MODE, SAVE UP TTY STATUS ;IN USER MODE, DONE BY SAVE ;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B BPS: TLZE F,QF ;HAS <A> BEEN TYPED? JRST BPS1 ;YES TRZE F,Q2F ;NO, HAS <N> BEEN TYPED? JRST BPS2 ;YES MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS CLEARM B1ADR BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER JRST RET BPS1: TRZN F,Q2F ;HAS <N> BEEN TYPED? JRST BPS3 ;NO MOVE R,T ;YES, PROCESS THE COMMAND A$NB TRO F,2 BPS2: MOVE T,WRD2 CAIL T,1 CAILE T,NBP JRST ERR IMULI T,3 ADDI T,B1ADR-3 TRZN F,2 JRST MASK2 EXCH R,T JRST BPS5 BPS3: MOVEI R,B1ADR ;PROCESS THE COMMAND A$B BPS4: HRRZ W,(R) CAIE W,(T) SKIPN (R) JRST BPS5 ADDI R,3 CAIG R,BNADR JRST BPS4 JRST ERR BPS5: MOVEM T,(R) CLEARM,1(R) CLEARM,2(R) AUTOP: SUBI R,B1ADR ;AUTO PROCEDE SETUP SUBROUTINE IDIVI R,3 MOVEI S,1 LSH S,(R) ANDCAM S,AUTOPI TLNE F,CCF IORM S,AUTOPI POPJ P, ;FETCH AND DEPOSIT INTO MEMORY DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT DEPR: MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM TLZE F,ROF TLNN F,QF POPJ P,0 DEP: TRNN R,777760 JRST DEP1 IFE EDDT&1,< HRRZ W,JOBREL CAIL W,(R)> MOVEM T,0(R) POPJ P,0 DEP1: MOVEM T,AC0(R) POPJ P,0 FETCH: IFE EDDT&1,<HRRZ T,JOBREL CAIGE T,(R) POPJ P,> TRNN R,777760 SKIPA T,AC0(R) MOVE T,(R) JRST CPOPJ1 FIRARG: MOVEM T,DEFV TLO F,FAF JRST ULIM1 ULIM: TLO F,SAF HRRZM T,ULIMIT ULIM1: TLNN F,QF JRST ERR JRST LIS0 LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL MOVE R,@SYMP HLRE S,@SYMP ASH S,-1 ;SETUP COUNT FOR LENGTH OF SYM TABLE TLZ F,400000 HRLZI W2,DELO+DELI MOVEM T,TEM LOOK1: TDNE W2,(R) JRST LOOK3 MOVE T,(R) TLNN T,PNAME ;NAME TLOA W2,LOCAL SKIPA T,TEM JRST LOOK3 MOVE W,1(R) XOR W,T JUMPL W,LOOK3 SUB T,1(R) JUMPL T,LOOK3 JUMPGE F,LOOK2 MOVE W,1(R) SUB W,1(W1) JUMPLE W,LOOK3 LOOK2: HRR W1,R ;POINTER BEST VALUE SO FAR TLO F,400000 JUMPE T,SPT0 LOOK3: ADD R,[XWD 2,2] SKIPL R MOVE R, @SYMP AOJLE S,LOOK1 ;TERMINATING CONDITION MOVE T,TEM TLNE F,400000 SUB T,1(W1) JRST CPOPJ1 CONSYM: MOVEM T,LWT CONSM: TRNN F,LF1 CONS1: JRST @SCH ;PIN OR FTOC TRNE F,CF1 JRST FTOC PIN: ;PRINT INSTRUCTION TLC T,700000 TLCN T,700000 JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM AND T,[XWD 777000,0] JUMPE T,PI3 PUSHJ P,OPTYPE MOVSI T,777000 AND T,LWT TRNN F,ITF ;HAS INSTRUCTION BEEN TYPED? PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE TROA F,NAF ;INSTRUCTION TYPED, ALOOW NEG ADDRESSES JRST HLFW ;NOT FOUND, OUTPUT AS HALFWORDS PUSHJ P,TSPC PI3: LDB T,[XWD 270400,LWT] ;GET AC FIELD JUMPE T,PI4 PUSHJ P,PAD PI3A: MOVEI W1,"," PI3B: PUSHJ P,TEXT PI4: MOVE W1,LWT MOVEI T,"@" TLNE W1,20 ;CHECK FOR INDIRECT BIT PUSHJ P,TOUT PI5: HRRZ T,LWT LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS CAIL W1,240 CAILE W1,247 JRST PI8 PUSHJ P,PADS3A PI7: TRZ F,NAF LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK JUMPE R,PADS1 ;EXIT MOVEI T,"(" PUSHJ P,TOUT MOVE T,R PI7.1: PUSHJ P,PAD MOVEI T,")" JRST TOUT ;EXIT PI8: PUSHJ P,PAD JRST PI7 HLFW: MOVEI T,"(" ;PRINT AS HALF WORDS PUSHJ P,TOUT HLRZ T,LWT PUSHJ P,PI7.1 HRRZ T,LWT PAD: ANDI T,777777 ;PRINT ADDRESS JRST @AR ;PADSO OR PAD1 PADSO: JUMPE T,TOC2+1 PUSHJ P,LOOK PADS1: POPJ P,0 MOVE W2,1(W1) CAIGE T,100 CAIGE W2,60 JRST PADS3 MOVEM T,TEM JUMPGE F,PAD1 PUSHJ P,SPT0 MOVEI T,"+" PADS1A: PUSHJ P,TOUT PADS2: HRRZ T,TEM PAD1: JRST TOC ;EXIT PADS3: MOVE T,TEM PADS3A: TRNE F,NAF CAIGE T,776000 JRST TOC PADS3B: MOVNM T,TEM PADS4: MOVEI T,"-" JRST PADS1A INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM TDCN T,[XWD -1,400000] JRST PADS3B ;TYPE AS NEG NUM LDB R,[POINT 3,T,12] DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER PUSHJ P,OPTYPE PUSHJ P,TSPC MOVSI T,077400 AND T,LWT JUMPE T,PI4 PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER JRST PI3A MOVE T,TEM LSH T,-30 PUSHJ P,TOC JRST PI3A MASK: TLNE F,QF JRST MASK1 MOVEI T,MSK MASK2: MOVEI W,1 MOVEM W,FRASE1 JRST QUAN1 MASK1: MOVEM T,MSK JRST RET EFFEC: TLO F,LTF HRRZ T,T WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN NWORD: ADDI R,326000+40*T ;JUMPN T, HRLM R,SEAR2 SEARC: TLZN F,QF JRST ERR SETCAM T,WRD MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS SETCMM FRASE(T) AOBJN T,.-1 MOVE T,ULIMIT TLNE F,SAF TLO F,1 PUSHJ P,SETUP1 PUSHJ P,CRF SEAR1: PUSHJ P,FETCH JRST SEAR2A TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH JRST EFFEC0 EQV T,WRD AND T,MSK SEAR2: JUMPE T,SEAR3 ;OR JUMPN T SEAR2A: PUSHJ P,LISTEN ;QUIT ON TELETYPE AOBJN R,SEAR1 SETCMM LWT JRST DD1 SEAR3: PUSHJ P,FETCH JRST ERR MOVEM T,LWT MOVEM R,TEM2 MOVEM R,T HRRZM R,LLOC HRRZM R,LLOCO PUSHJ P,PAD MOVEI T,"/" PUSHJ P,TOUT PUSHJ P,LCT MOVE T,LWT PUSHJ P,CONSYM PUSHJ P,CRF SETCMM LWT SETCMM TEM SEAR4: MOVE R,TEM2 JRST SEAR2A EFFEC0: MOVEM R,TEM2 MOVEI W,100 MOVEM W,TEM EFFEC1: MOVE W,T LDB R,[POINT 4,T,17] ;GET IR FIELD JUMPE R,EFFEC2 HRRZ T,AC0(R) ADD T,W EFFEC2: HRR R,T TLNN W,20 ;INDIRECT BIT CHECK JRST EFFEC3 SOSE,TEM PUSHJ P,FETCH JRST SEAR4 JRST EFFEC1 EFFEC3: MOVE R,TEM2 EQV T,WRD ANDI T,777777 JRST SEAR2 SETUP: TLO F,20 ;ZERO SETUP1: ADDI T,1 ;YANK,VERIFY,SEARCHES TLNN F,QF SETUP2: MOVE T,@SYMP HRRZ T,T MOVEM T,ULIMIT HRRZ W,@SYMP CAMGE W,T TLNN F,20 IFE EDDT&1,< CAML T,JOBREL> IFN EDDT&1,< JRST .+2> JRST ERR HRRZ R,DEFV TLNN F,FAF MOVEI R,0 CAML R,ULIMIT JRST ERR MOVEM R,DEFV MOVE W,R SUB W,ULIMIT HRLM W,R POPJ P,0 ZERO: TLNN F,CCF JRST ERR PUSHJ P,SETUP ZERO1: TRNE R,777760 JRST ZERO2 CLEARM,AC0(R) AOBJN R,ZERO1 JRST DD1 ZERO2: HRRZ R, R CAIGE R,ZLOW MOVEI R,ZLOW ;DON'T ZERO 20-ZLOW HRRZ S,T CAIL S, DDT MOVEI S, DDT CAMLE S,R JSP W,ZEROR HRRZ R,R CAIG R, DDTEND ; DON'T ZERO OUT MOVEI R, DDTEND ; DDT HRRZ S,T CAMLE S, R JSP W,ZEROR JRST DD1 ZEROR: HRL R,R CLEARM,(R) ADDI R, 1 BLT R, -1(S) JRST (W) FTOC: ;NUMERIC OUTPUT SUBROUTINE TOC: HRRZ W1,ODF CAIN W1,12 JRST TOC4 TOCA: LSHC T,-43 LSH W1,-1 ;W1=T+1 TOC1: DIVI T,@ODF HRLM W1,0(P) TOC3: JUMPE T,TOC2 PUSHJ P,TOCA TOC2: HLRZ T,0(P) ADDI T,"0" CJTOUT: JRST TOUT ;DOES POPJ TO TOC2 OR EXIT TOC4: MOVM W1,T JUMPGE T,TOC5 MOVEI T,"-" PUSHJ P,TOUT TOC5: MOVEI T,0 PUSHJ P,TOC1 TOC6: MOVEI T,"." JRST TOUT ;SYMBOL OUTPUT SUBROUTINE SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM SPT: MOVE T,CJTOUT ;RADIX 50 SYMBOL PRINT SPT4: MOVEM T,SPTX ;SETUP OUTPUT DESTINATION LDB T,[POINT 32,0(W1),35] ;GET SYMBOL SPT1: IDIVI T,50 HRLM W1,0(P) JUMPE T,SPT2 PUSHJ P,SPT1 SPT2: HLRZ T,0(P) JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS ADDI T,260-1 CAILE T,271 ADDI T,301-272 CAILE T,332 SUBI T,334-244 CAIN T,243 SPT3: MOVEI T,256 SPTX: 0 ;JRST TOUT, OR IDPB T,R FROM OPEVAL POPJ P, SYMD: MOVEI T,DELO/200000 ;$D ;DELETE LAST SYM & PRINT NEW HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM JUMPE R,ERR DPB T,[POINT 2,(R),1] ;STORE SEMI-DELETE BITS IN SYMBOL MOVE T,LWT JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL ;FLOATING POINT OUTPUT TFLOT: MOVE A,T JUMPG A, TFLOT1 JUMPE A,FP1A MOVNS A MOVEI T,"-" PUSHJ P,TOUT TLZE A,400000 JRST FP1A TFLOT1: MOVEI T,"#" ; IF UNNORMALIZED FLOATING TLNN A, 400 ; POINT NUMBER, SO INDICATE PUSHJ P, TOUT ; WITH "#" BEFORE NUMBER FP1: MOVEI B,0 CAMGE A,FT01 JRST FP4 CAML A,FT8 AOJA B,FP4 FP1A: MOVEI C,0 FP3: MULI A,400 ASHC B,-243(A) MOVE A,B CLEARM,TEM1 PUSHJ P,FP7 PUSHJ P,TOC6 ;PRINT DECIMAL POINT MOVNI A,10 ADD A,TEM1 MOVE W1,C FP3A: MOVE T,W1 MULI T,12 PUSHJ P,FP7B SKIPE,W1 AOJL A,FP3A POPJ P, FP4: MOVNI C,6 MOVEI W2,0 FP4A: ASH W2,1 XCT,FCP(B) JRST FP4B FMPR A,@FCP+1(B) IORI W2,1 FP4B: AOJN C,FP4A PUSH P,FSGN(B) PUSHJ P,FP3 POP P,W1 MOVE A,W2 PUSHJ P,TEXT FP7: JUMPE A,FP7A1 IDIVI A,12 AOS,TEM1 FP7A: HRLM B,(P) JUMPE A,FP7A1 PUSHJ P,FP7 FP7A1: HLRZ T,(P) FP7B: ADDI T,260 JRST TOUT 353473426555 ;1.0E32 266434157116 ;1.0E16 FT8: 233575360400 ;1.0E8 216470400000 ;1.0E4 207620000000 ;1.0E2 204500000000 ;1.0E1 FT: 201400000000 ;1.0E0 026637304365 ;1.0E-32 113715126246 ;1.0E-16 146527461671 ;1.0E-8 163643334273 ;1.0E-4 172507534122 ;1.0E-2 FT01: 175631463146 ;1.0E-1 FT0=FT01+1 FCP: CAMLE A, FT0(C) CAMGE A, FT(C) Z FT0(C) FSGN: ASCII .E-. ASCII .E+. TEXTT: MOVE W1,T TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL LSH W1,35 TEXT2: MOVEI T, ;7 BIT ASCII TEXT OUTPUT SUBROUTINE0 LSHC T,7 PUSHJ P,TOUT JUMPN W1,TEXT2 POPJ P, KILC: XWD -NSYMS,LOW WRD: 0 WRD2: 0 PRNC: 0 FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3 SYL: 0 LWT: 0 TEM2: 0 FRASE1: TEM3: 0 DEN: 0 PRGM: 0 ESTU: 0 ESTUT: 0 FSV: 0 FRACT: 0 FPWR: 0 FTERM: 0 FH: 0 SYM: 0 SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED DEFV: 0 ULIMIT: 0 LLOC: 0 LLOCO: 0 SYMP: XWD PID,JOBSYM SAVPI: 0 1177 SAVTTY: 0 IFN EDDT&1,<STARTA: 0> ;START ADR FROM PTR MSK: XWD -1,-1 B1ADR: 0 B1SKP: 0 B1CNT: 0 REPEAT NBP*3-3, < 0> BNADR=.-3 AUTOPI: 0 AC0: BLOCK 17 AC17: 0 SCHM: EXP PIN ;DO NOT CHANGE ORDER ARM: EXP PADSO ODFM: EXP 10 SARS: 0 TEM: 0 TEM1: 0 IFN EDDT&1&<EDDT>B36,< PSR: TLNN F,ROF JRST ERR MOVEM T,LWT PUSHJ P,DEPRS HRRZM R,DEFV ;R CONTAINS LLOCO MOVE T,R JRST PUN2 PUNCH: TLC F,FAF+QF TLCE F,FAF+QF JRST ERR ;ONE ARGUMENT MISSING PUN2: ADDI T,1 HRRZM T,TEM1 SUB T,DEFV JUMPLE T,ERR PUN1: MOVEI T,4 ;PUNCH 4 FEED HOLES PUSHJ P,FEED TLNE F,CF ;PUNCH NON-ZERO BLOCKS? JRST PUNZ ;YES HRRZ R,DEFV IORI R,37 ADDI R,1 CAMLE R,TEM1 MOVE R,TEM1 EXCH R,DEFV MOVE T,R SUB T,DEFV HRL R,T JUMPGE R,RET ;EXIT OR PUNCH PBLK: MOVE T,R SOS W,T ;INIT CHECKSUM PUSHJ P,PWRD PBLK1: PUSHJ P,FETCH JRST ERR ADD W,T PUSHJ P,PWRD AOBJN R,PBLK1 MOVE T,W PUSHJ P,PWRD JRST PUN1 ;PUNCH NON-ZERO BLOCKS PUNZ0: AOS DEFV ;LOOK AT NEXT WORD PUNZ: HRRZ W,DEFV ;ENTER HERE - GET STARTING ADDRESS MOVE R,W SUB W,TEM1 ;CALCULATE NEGATIVE LENGTH HRL R,W ;SET UP AOBJN POINTER JUMPGE R,RET ;FINISHED? CAMG R,[XWD -40,0] ;BLOCK LONGER THAN 40? HRLI R,-40 ;YES, FIX IT UP MOVSI W1,400000 ;W1 NEGATIVE MEANS FLUSH 0 WORDS PUNZ2: PUSHJ P,FETCH ;GET WORD FROM MEMORY JRST ERR JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER MOVEI W1,0 ;CLEAR 0 WORD COUNTER PUNZ4: JUMPL W1,PUNZ0 ;FLUSH 0 WORD, GET ANOTHER CAIL W1,3 ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD AOSA R ;ADVANCE R TO LAST ADR+1 AOBJN R,PUNZ2 ADD W1,DEFV ;CALCULATE DEFV-R+W1=-WORD COUNT SUB W1,R HRLM W1,DEFV ;PUT -WC IN LEFT HALF OF FA EXCH R,DEFV ;SAVE ADR FOR NEXT BLOCK, GET POINTER JRST PBLK > IFN EDDT&1&<EDDT>B36,< LOADER: TLNE F,QF JRST ERR MOVEI T,400 PUSHJ P,FEED MOVE R,LOADE LOAD1: MOVE T,0(R) PUSHJ P,PWRD AOBJN R,LOAD1 MOVEI T,100 LOAD2: PUSHJ P,FEED JRST RET BLKEND: TLNN F,QF ;BLOCK END MOVE T,[JRST 4,DDT] TLO T,254000 ;JRST PUSH P,T MOVEI T,100 PUSHJ P,FEED POP P,T PUSHJ P,PWRD PUSHJ P,PWRD ;EXTRA WORD FOR READER TO STOP ON MOVEI T,500 JRST LOAD2 PWRD: MOVEI W1,6 PWRD2: ROT T,6 CONSZ PTPP,20 JRST .-1 CONO PTPP,50 DATAO PTPP,T SOJG W1,PWRD2 POPJ P,0 FEED: CONSZ PTPP,20 JRST .-1 CONO PTPP,10 DATAO PTPP,FEED1 SOJN T,FEED FEED1: POPJ P,0 ;ADDRESS USED AS A CONSTANT > IFN EDDT&1&<EDDT>B36,< VERIFY: TLO F,LTF CORE: PUSHJ P,SETUP1 ;LOAD TAPES INTO CORE CONO PTRR,60 CORE1: CONSO PTRR,10 JRST .-1 DATAI PTRR,T CAME T,LOADE-1 ;JRST 1 JRST CORE1 PUSHJ P,CRF PUSHJ P,BLOCK CORE2: PUSHJ P,GETW CAML R,DEFV CAML R,ULIMIT JRST VER3 TLNE F,LTF JRST VER2 PUSHJ P,DEP JRST VER3 VER2: MOVEM T,TEM2 PUSHJ P,FETCH JRST ERR MOVEM T,TEM3 XOR T,TEM2 AND T,MSK JUMPE T,VER3 PUSH P,S PUSH P,R HRRZ T,R PUSHJ P,PAD MOVEI T,257 ;SLASH PUSHJ P,TOUT PUSHJ P,LCT MOVE T,TEM3 ;CORE CONTENTS PUSHJ P,CONSYM PUSHJ P,LCT MOVE T,TEM2 ;TAPE CONTENTS PUSHJ P,CONSYM PUSHJ P,CRF POP P,R POP P,S VER3: PUSHJ P,LISTEN AOJA R,CORE2 RUNEND: PUSHJ P,BLOCK JRST .-1 > IFN EDDT&1&<EDDT>B36,< GETW: JUMPL S,GETW1 PUSHJ P,BLOCK GETW1: MOVE T,1(S) AOBJP S,.+1 POPJ P,0 BLOCKS: CONO PTRR,60 ;READ DATA BLOCKS BLOCK: CONSO PTRR,10 JRST .-1 DATAI PTRR,W JUMPL W,BLK1 MOVEM W,STARTA CONO PTRR,0 ;TURN OFF READER JRST DD1 BLK1: MOVEM W,W1 ;INIT CHECKSUM TLC W,777740 TLCE W,777740 JRST ERR ;BLOCK TOO BIG ADDI W,1 HRRZM W,R HRRI W,BUFF-1 MOVEM W,S BLK2: CONSO PTRR,10 JRST .-1 BLKI PTRR,W JRST BLK3 ADD W1,0(W) JRST BLK2 BLK3: ADD W1,0(W) CONSO PTRR,10 JRST .-1 DATAI PTRR,W CAMN W,W1 POPJ P,0 CONO PTRR,0 ;CHECKSUM ERROR JRST 4,BLOCKS ;R CONTAINS RIGHT HALF OF FIRST LINE ;S CONTAINS (-WC,BUFF-1) > IFN EDDT&1&<EDDT>B36,< LOADB: PHASE 0 ;RIM10B CHECKSUM LOADER XWD -16,0 BEG: CONO PTRR,60 HRRI AA,RD+1 RD: CONSO PTRR,10 JRST .-1 DATAI PTRR,@TBL1-RD+1(AA) XCT TBL1-RD+1(AA) XCT TBL2-RD+1(AA) AA: SOJA AA, TBL1: CAME CKSM,ADR ADD CKSM,1(ADR) SKIPL CKSM,ADR TBL2: JRST 4,BEG AOBJN ADR,RD ADR: JRST BEG+1 CKSM=ADR+1 DEPHASE LOADE: XWD LOADB-.,LOADB > SAVE: 0 ;SAVE THE ACS AND PI SYSTEM SKIPN SARS JRST SAV1 AOS SAVE JRST SAV5 SAV1: IFN EDDT&1,< CONI PRS,SAVPI CONO PRS, @SAVPI+1> MOVEM 17,AC17 HRRZI 17,AC0 BLT 17,AC0+16 MOVE T, SAVE HLLM T, SAVPI SAV5: SETOM,SARS MOVEI P,PS IFE EDDT&1,<PUSHJ P,TTYRET> ;IN USER MODE, GET INTO DDT MODE MOVEI F,0 MOVE T,[XWD SCHM,SCH] BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES JRST @SAVE RESTORE: SETOM TEM3 ;RESTORE ACS AND PI SYSTEM RESTR1: HRRM T,SAVE MOVE T,SAVPI HLLM T, SAVE IFN EDDT&1,< AND T, SAVPI+1 IORI T, 2000 ;TURN ON CHANNELS MOVEM T, SAVPI> RES1: HRLZI 17,AC0 BLT 17,17 SETZM SARS SKIPL,TEM3 CPUSHP: PUSH BCOM ;PROGRAM MODIFIED AT IPUSHJ IFN EDDT&1,< CONO PRS,@SAVPI> JRST 2,@SAVE CRN: MOVEI T,15 ;CARRIAGE RETURN JRST TOUT IFE EDDT&1,< CRNRB: PUSHJ P,CRN MOVEI T,177 JRST TOUT> CRF: PUSHJ P,CRN LF: MOVEI T,12 ;LINE FEED JRST TOUT LCT: IFN EDDT&1,<PUSHJ P,TSPC PUSHJ P,TSPC> IFE EDDT&1,<MOVEI T,11 JRST TOUT> ;TYPE A TAB TSPC: MOVEI T,40 ;SPACE JRST TOUT IFN EDDT&1,< ;EXECUTIVE MODE TELETYPE I/O TIN: PUSHJ P,LISTEN ;TELETYPE CHARACTER INPUT JRST .-1 CAIE T,175 CAIN T,176 MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW CAIN T,177 ;RUBOUT? JRST WRONG ;YES, TYPE XXX TRNE T,140 ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC TOUT: CAIG T,04 ;DON'T TYPE EOT OR LOWER CHARS POPJ P, HRLM T,(P) IMULI T,200401 ;GENERATE PARITY AND T,[11111111] IMUL T,[11111111] HLR T,(P) TLNE T,10 TRC T,200 ;MAKE PARITY EVEN CONSZ TTYY,20 JRST .-1 DATAO TTYY,T ANDI T,177 ;FLUSH PARITY POPJ P,0 LISTEN: CONSO TTYY,40 ;LISTEN FOR TTY POPJ P, DATAI TTYY,T ANDI T,177 JRST CPOPJ1 TTYRET: MOVEI T,3410 TTY1: MOVEI W2,40000 CONSZ TTYY,120 SOJG W2,.-1 CONI TTYY,SAVTTY DATAI TTYY,W2 HRLM W2,SAVTTY CONO TTYY,(T) POPJ P, TTYLEV: MOVE T,SAVTTY TRZ T,160 TRO T,3600 TRNE T,10 TRZ T,200 JRST TTY1 TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES TRNN T,140 JRST TOUT ;ECHO CHARACTERS (0-37) NOT ECHOED POPJ P, > IFE EDDT&1,< ;USER MODE TELETYPE I/O TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE CAME T,[POINT 7,INBFF] PUSHJ P,FINOUT ILDB T,PINBFF CAIN T,175 MOVEI T,33 ;CHANGE TO NEW ALT MODE CAIN T,177 ;RUBOUT? JRST WRONG ;YES PRINT XXX JUMPN T,CPOPJ MOVE T,[POINT 7,INBFF] MOVEM T,PINBFF CALL T,[SIXBIT /DDTIN/] JRST TIN TOUT: JUMPE T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS IDPB T,POUTBF CAIE T,12 POPJ P, FINOUT: MOVEI T,0 IDPB T,POUTBF MOVE T,[POINT 7,INBFF] MOVEM T,PINBFF MOVEM T,POUTBF CALL T,[SIXBIT /DDTOUT/] CLEARM INBFF POPJ P, PINBFF: POINT 7,INBFF POUTBF: POINT 7,INBFF LISTEN=CPOPJ INBFF: BLOCK 21 TTYRET: CALL [SIXBIT /DDTGT/] MOVE T,[POINT 7,INBFF] MOVEM T,POUTBF MOVEM T,PINBFF CLEARM INBFF POPJ P, TTYLEV: PUSHJ P,FINOUT CALL [SIXBIT /DDTRL/] POPJ P, TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE > BDISP: POINT 12,DISP(R),11 POINT 12,DISP(R),23 POINT 12,DISP(R),35 DISP: DEFINE D (Z1,Z2,Z3)<XLIST EXP <Z1-DDT>*1B11+<Z2-DDT>*1B23+Z3-DDT LIST> IFE EDDT&1&<EDDT>B36,< PUNCH=ERR BLKEND=ERR LOADER=ERR VERIFY=ERR CORE=ERR> D ERR,ERR,ERR D ERR,ERR,ERR D ERR,ERR,VARRW D TAB,LINEF,ERR D ERR,CARR,ERR D ERR,ERR,ERR D PUNCH,ERR,ERR D ERR,ERR,ERR D ERR,ERR,ERR D CONTROL,ERR,ERR D ERR,ERR,SPACE D SUPTYO,TEXI,ASSEM D DOLLAR,PERC,ERR D DIVD,LPRN,RPRN D MULT,PLUS,ACCF D MINUS,PERIOD,SLASH D NUM,NUM,NUM D NUM,NUM,NUM D NUM,NUM,NUM D NUM,TAG,SEMIC D FIRARG,EQUAL,ULIM D QUESTN,INDIRECT,ABSA D BPS,CON,SYMD D EFFEC,SFLOT,GO D HWRDS,PILOC,BLKEND D KILL,LOADER,MASK D NWORD,BITO,PROCEDE D QUAN,RELA,SYMBOL D TEXO,ERR,VERIFY D WORD,XEC,CORE D ZERO,OCON,ICON D OSYM,VARRW,PSYM REPEAT 11,<D ERR,ERR,ERR> D ERR,ERR,ERR D ERR,WRONG,DDT IFIX: MOVE R,@SYMP ;DIDDLE SYMBOL TABLE POINTERS HRRZM R,ESTU HLRZ T,@SYMP SUB T,@SYMP ADDI T,NSYMS MOVNS T HRRM T, KILC MOVE T, KILC MOVEM T, PRGM JRST DDT BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE HRRZI AR,TOC TRZN F,Q2F JRST ERR MOVE T,WRD2 MOVEM T,SVBTS MOVEI T,^D36 IDIV T,WRD2 SKIPE T+1 ADDI T,1 MOVEM T,SVBTS2 HRRZ SCH,R JRST BASE1 BITT: MOVE T,SVBTS2 MOVEM T,SVBT2 MOVE T+1,LWT MOVEM T+1,SVBT3 BITT2: MOVEI T,0 MOVE T+2,SVBTS LSHC T,(T+2) MOVEM T,LWT MOVEM T+1,SVBT3 CAIE AR,PADSO PUSHJ P,FTOC CAIE AR,TOC PUSHJ P,PIN SOSG SVBT2 POPJ P, MOVEI T,"," PUSHJ P,TOUT MOVE T+1,SVBT3 JRST BITT2 SVBTS: 0 SVBTS2: 0 SVBT3: 0 SVBT2: 0 ;DESCRIPTION OF OP DECODER FOR DDT: ; ; THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO ;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS ;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN ;FOR THE PDP-6. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL ;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY ;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH ;BEGIN WITH 110(2). ; ; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD. ;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE: ;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER. ; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS ; EQUAL P. ; ; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT ; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION. ; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER ; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS ; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE ; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS. ; ; EXAMPLE: P = 6 ; N = 2 ; ;; C(INST) = .010 101 100(2) ; ; THE RESULT- D = 010(2) = 2(8) ; ; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE. ; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH ; PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES ; THE INTERPRETATION. ; ;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION ; IS FINISHED. ;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE. ; 41- A ; 42- B ; 72- Z ; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING ; LETTER IS TYPED. ; ;73(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS ; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD ; BYTE IN THE TABLE. ; ;MAROS ASSEMBLE THE TABLE TBL: ; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST ; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE. ; 2. A POINT (.) ASSEMBLES A STOP CODE. ; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE ; SYMBOLICALLY NAMED BYTE. ; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT, ; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER. ; ;EXAMPLE OF BINARY TO SYMBOLIC DECODING: ; THE MACHINE CODE FOR JRST IAS 254 ; INST 0 1 0 1 0 1 1 0 0 ; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^). ; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER ; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN ; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING ; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED ; OVER: ; 1. MV/ ; MOV PRINTING TEXT ; 2. MO/ ; 3. ML/ ; 4. DV/ ; 5. SH/ ; ;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO ;4 BYTES ARE SKIPPED OVER: ; EXC PRINTING TEXT ; 1. S3/ ; BL PRINTING TEXT ; T PRINTING TEXT ; 2. . ; 3. AO/ ; 4. AOB/ ; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT ;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS. ; ; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A REPEAT 0,< DEFINE REDEF (XX)< DEFINE INFO (AA,BB)< AA XX'BB>> DEFINE BYT9 (L)< XLIST REDEF % ZZ=0 ZZZ=0 ZZM=1 IRPC L,< Z="L" IFE Z-":",<INFO <>,<=CLOC> IFNDEF FIR.,<FIR.=CLOC> IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG> Z=0> IFE Z-"/",<IF1 <OUTP 1> IF2,<INFO OUTP,+73-FIR.> Z=0> IFE Z-"^",<OUTP <ZZ&70/2+ZZ&7-1> Z=0> IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,< REPEAT 5,<ZZ=ZZZ&77 IFN ZZ,<OUTP ZZ> ZZZ=ZZZ/100>> IFE Z-".",<OUTP 40> Z=0> IFN Z,<INFO REDEF,L ZZ=ZZ*10+Z&7 ZZZ=ZZZ+<Z-40>*ZZM ZZM=ZZM*100> IFE Z,<REDEF % ZZ=0 ZZZ=0 ZZM=1>> LIST> DEFINE OUTP (A)< BINRY=BINRY*400+BINRY*400+A BINC=BINC-1 IFE BINC,<EXP BINRY BINRY=0 BINC=4> CLOC=CLOC+1> TBL: ;OPDECODER BYTE TABLE BINRY=0 CLOC=0 ;SET BYTE LOCATION COUNTER TO 0 BINC=4 ;INIT BYTES/WORD COUNTER BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/> ;IO INSTRUCTIONS BYT9 <21^BD/CON,11^OI/S,01^Z/O/> BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/> ;UUOS BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^> BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/> BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/> BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/> BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/> ;BYTE AND FLOATING INSTRUCTIONS BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:> BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/> BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/> ;FWT,FIXED POINT ARITH,MISC. BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/> BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^> BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,> BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:> BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,> BYT9 <AOB/JRS T/JFC L/XC T/CON S/AOB:01^P/N/> BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,> BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:> BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/.,S1:21^.,C:C.,> ;ARITH COMP,SKIP,JUMP BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^> BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/> BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:> BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,> ;HALF WORDS BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:> BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/> ;TEST INSTRUCTIONS BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,> BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/> ;BOOLEAN BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/> BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/> BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/> BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/> BYT9 <CA/CM/CM/CB/O IMB/> ;MORE UUO'S BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/> BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/> REPEAT BINC,<BINRY=BINRY*400+BINRY*400> IFN BINRY,<EXP BINRY>> SUBTTL OP DECODER IF1, < DEFINE .COLON (A) < %'A== CLOC FIR.== CLOC DEFINE .COLON (AA) < %'AA== CLOC IFGE CLOC+73-1000-FIR., <PRINTX OPTABLE TOO LONG>>> DEFINE .SLASH < CLOC= CLOC+1 ;> SYN .SLASH, .ARROW DEFINE .COMMA (A) < IFNB <A>, <.REP5 A>> SYN .COMMA, .SPACE DEFINE .POINT (A) < IFNB <A>, <.REP5 A> CLOC= CLOC+1> DEFINE .REP5 (A) < IRPC A, <CLOC==CLOC+1>> > IF2, < DEFINE .SLASH (A) < OUTP %'A+73-FIR.> DEFINE .ARROW (A) < OUTP A&70/2+A&7-1> DEFINE .COMMA (A) < IFNB <A>, <.REP5 A>> SYN .COMMA, .SPACE DEFINE .POINT (A) < IFNB <A>, <.REP5 A> OUTP 40> DEFINE .REP5 (A) < IRPC A, <OUTP "A"-40>> DEFINE OUTP (A)< BINRY== BINRY+<A>_<BINC==BINC-9> IFE BINC, < +BINRY BINRY==0 BINC==^D36> CLOC==CLOC+1> > TBL: ;OPDECODER BYTE TABLE BINRY== 0 CLOC== 0 ;SET BYTE LOCATION COUNTER TO 0 BINC== ^D36 ;INIT BYTES/WORD COUNTER .ARROW 63 .SLASH UUO .SLASH FLO .SLASH HAK .SLASH ACCP .SLASH BOOLE .SPACE H .SLASH HWT .SPACE T .SLASH ACBM ;IO INSTRUCTIONS .ARROW 21 .SLASH BD .COMMA CON .ARROW 11 .SLASH OI .COMMA S .ARROW 01 .SLASH Z .SLASH O .COLON BD .ARROW 01 .COMMA BLK .SLASH IO .COMMA DATA .COLON IO .ARROW 11 .SLASH I .SLASH O .COLON OI .ARROW 01 .SLASH O .SLASH I ;UUOS .COLON UUO .ARROW 51 .POINT .COMMA .ARROW 32 .SLASH U40 .SLASH U50 .SLASH U60 .ARROW 21 .SLASH U703 .ARROW 11 .SLASH USET .ARROW 01 .COMMA LOOKU .SLASH P .COMMA ENTE .SLASH R .COLON USET .COMMA USET .ARROW 01 .SLASH I .SLASH O .COLON U40 .ARROW 03 .SLASH U47 .SPACE INI .SLASH T .POINT .POINT .POINT .POINT .POINT .COMMA .COLON U47 .COMMA CALL .ARROW 01 .POINT .COMMA .SLASH I .COLON U60 .ARROW 21 .SLASH U603 .ARROW 01 .COMMA IN .SLASH BPUT .COMMA OUT .COLON BPUT .ARROW 11 .COMMA BU .COLON F .POINT F .COMMA .COMMA PU .SLASH T .COLON U603 .ARROW 01 .SLASH U6062 .COMMA STAT .ARROW 11 .COLON O .POINT O .COMMA .COLON Z .POINT Z .COMMA .COLON U6062 .ARROW 11 .COMMA S .SLASH U62 .COMMA G .COLON U62 .COMMA ETST .SLASH S ;BYTE AND FLOATING INSTRUCTIONS .COLON FLO .ARROW 51 .SLASH BYTE .SPACE F .ARROW 32 .SPACE .SPACE AD .SLASH A .SPACE SB .SLASH A .SPACE MP .SLASH A .SPACE DV .COLON A .ARROW 21 .SLASH LMB .COMMA R .SLASH IMB .COLON LMB .ARROW 02 .POINT .COMMA .COLON L .POINT L .COMMA .COLON M .POINT M .COMMA .COLON B .POINT B .COMMA .COLON BYTE .ARROW 32 .POINT .POINT .POINT .COMMA .ARROW 03 .COMMA UF .SLASH PA .COMMA DF .SLASH N .SPACE FS .SLASH C .SPACE IB .COLON P .POINT P .COMMA .SPACE I .SLASH LD .COLON LD .SPACE LD .SLASH B .SPACE I .SLASH DP .COLON DP .SPACE DP .SLASH B ;FWT,FIXED POINT ARITH,MISC .COLON HAK .ARROW 33 .SLASH MV .COLON MV .SPACE MOV .SLASH MO .SLASH ML .SLASH DV .SLASH SH .SLASH H1 .SLASH JP .ARROW 21 .SPACE ADD .SLASH IMB .SPACE SU .COLON BIMB .SPACE B .COLON IMB .ARROW 02 .POINT .COMMA .COLON I .POINT I .COMMA .SLASH M .SLASH B .COLON MO .ARROW 22 .COLON EIMS .SPACE E .SLASH IMS .SPACE S .SLASH IMS .SPACE N .SLASH IMS .SPACE M .COLON IMS .ARROW 02 .POINT .COMMA .SLASH I .SLASH M .COLON S .POINT S .COMMA .COLON ML .ARROW 21 .SPACE I .SLASH ML1 .COLON ML1 .SPACE MUL .SLASH IMB .COLON DV .ARROW 21 .SPACE I .SLASH DV1 .COLON DV1 .SPACE DI .COLON DV2 .SPACE V .SLASH IMB .COLON H1 .ARROW 03 .SPACE EXC .SLASH S3 .SPACE BL .COLON T .POINT T .COMMA .SLASH AO .COLON AO .COMMA AOBJ .SLASH AOB .SPACE JRS .SLASH T .SPACE JFC .SLASH L .SPACE XC .SLASH T .SPACE CON .SLASH S .COLON AOB .ARROW 01 .SLASH P .SLASH N .COLON JP .ARROW 03 .SLASH PU .COLON PU .SPACE PUSH .SLASH PUS .SLASH PO .COLON PO .SPACE POP .SLASH POP .COMMA JS .COLON R .POINT R .COMMA .SPACE JS .SLASH P .SPACE JS .COLON PA .POINT A .COMMA .SPACE JR .SLASH PA .COLON PUS .ARROW 01 .COLON J .POINT J .POINT .COMMA .COLON POP .ARROW 01 .POINT .COMMA .SLASH J .COLON SH .ARROW 02 .SPACE A .SLASH S2 .SPACE ROT .SLASH S1 .SPACE L .COLON S2 .SPACE S .COLON S3 .SPACE H .SLASH S1 .POINT .COMMA .COLON S1 .ARROW 21 .POINT .COMMA .COLON C .POINT C .COMMA ;ARITH COMP,SKIP,JUMP .COLON ACCP .ARROW 42 .SPACE CA .SLASH CA1 .SLASH SJ .SPACE A .SLASH JS .SPACE S .COLON JS .SPACE O .ARROW 31 .SPACE J .SLASH COMP .SPACE S .SLASH COMP .COLON CA1 .ARROW 31 .SPACE I .SLASH COMP .SPACE M .SLASH COMP .COLON SJ .ARROW 31 .SPACE JUM .SLASH PSJ .SPACE SKI .COLON PSJ .SPACE P .COLON COMP .ARROW 03 .POINT .COMMA .SLASH L .COLON E .POINT E .COMMA .SPACE L .SLASH E .SLASH PA .SPACE G .SLASH E .COLON N .POINT N .COMMA .POINT G .COMMA ;HALF WORDS .COLON HWT .ARROW 51 .SLASH HW1 .ARROW 21 .SPACE R .SLASH HW2 .SPACE L .COLON HW2 .SPACE R .SLASH HW3 .COLON HW1 .ARROW 21 .SPACE L .SLASH HW4 .SPACE R .COLON HW4 .SPACE L .COLON HW3 .ARROW 32 .SLASH IMS .SPACE Z .SLASH IMS .SPACE O .SLASH IMS .SLASH EIMS ;TEST INSTRUCTIONS .COLON ACBM .ARROW 31 .SLASH AC1 .ARROW 01 .SPACE D .SLASH AC2 .SPACE S .SLASH AC2 .COLON AC1 .ARROW 01 .SPACE R .SLASH AC2 .COMMA L .COLON AC2 .ARROW 42 .SPACE N .SLASH EAN .SPACE Z .SLASH EAN .SPACE C .SLASH EAN .SPACE O .COLON EAN .ARROW 12 .POINT .COMMA .SLASH E .SLASH PA .SLASH N ;BOOLEAN .COLON BOOLE .ARROW 24 .SLASH ST .COLON AN .SPACE AND .SLASH B2 .SLASH AN .SLASH ST .SLASH AN .SLASH ST .SPACE X .COLON OR .SPACE OR .SLASH B2 .SPACE I .SLASH OR .SLASH AN .SPACE EQ .SLASH DV2 .SLASH ST .SLASH OR .SLASH ST .SLASH OR .SLASH OR .COLON ST .SPACE SET .COLON B2 .ARROW 24 .SPACE Z .SLASH IMB .SLASH IMB .COLON CA .SPACE C .SLASH TA .COLON TM .SPACE M .SLASH IMB .COLON CM .SPACE C .SLASH TM .COLON TA .SPACE A .SLASH IMB .SLASH IMB .SLASH IMB .COLON CB .SPACE C .SLASH BIMB .SLASH IMB .SLASH CA .SLASH CA .SLASH CM .SLASH CM .SLASH CB .SPACE O .SLASH IMB ;MORE UUO'S .COLON U50 .ARROW 03 .COMMA OPE .SLASH N .POINT .POINT .POINT .POINT .COMMA .COMMA RENAM .SLASH E .COMMA I .SLASH N .COMMA OU .SLASH T .COLON U703 .ARROW 02 .COMMA CLOS .SLASH E .COMMA RELEA .SLASH S .COMMA MTAP .SLASH E .COMMA UGET .SLASH F IF1, < BLOCK <CLOC+3>/4 > IF2, < IFN BINC-^D36, < +BINRY > > IFNDEF CLOC.,<CLOC.=CLOC> IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE> PNTR: EXP INST ;POINTER TO BITS IN INST INST: 0 ;BINARY FOR INSTRUCTION CHP: 0 ;CHAR POINTER INTO TXT, TXT+1 TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER POINT 9,TBL,8 ;FOR TRANSFER BYTE POINT 9,TBL,17 POINT 9,TBL,26 OPEVAL: MOVE T,OPEV1 ;EVALUATE FOR AN OP CODE MOVEI W1,SYM MOVE R,[POINT 7,TXT] PUSHJ P,SPT4 MOVEI T,0 OPEV1: IDPB T,R MOVEM P,SAVPDL TRZA F,OUTF OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY LSH T,-33 MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS MOVE T,[XWD 440700,TXT] MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT DEC: TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG CLEARB R,W1 MOVE W2,BTAB DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL CAILE T,40 CAIL T,73 SOJGE R,DC1 ;SKIP OVER # BYTES = C(R) JUMPG R,DC1 ;SKIP OVER ALPHA TEXT WITHOUT COUNTING SUBI T,40 JUMPE T,DECX ;TRANSFER ON ASTOP CODE JUMPG T,DC2 DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE TRZ T,-4 AOS T DPB T,[XWD 300600,PNTR] TRNN F,OUTF JRST DC6 ;FOR OPEVAL ONLY LDB R,PNTR ;GET # BYTES TO SKIP OVER JRST DC1 DC2: HRREI T,-33(T) JUMPL T,DECT ;TYPE OUT A LETTER MOVEI W1,FIR.(T) ;BYTE IS A TRANSFER IDIVI W1,4 MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE ADDI W2,(W1) JRST DC1 DECT: TRNE F,OUTF JRST DC8 ;TYPE OUT A LETTER ILDB W1,CHP ;GET NEXT INPUT LETTER CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER JRST NOMAT ;DOESNT MATCH JRST DC1 ;MATCHES, TRY NEXT DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN POPJ P, ;IF FOR OUTPUT, RETURN ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY JUMPE W1,DC7 ;DOES # OF CHARS MATCH NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE POP P,W2 POP P,PNTR POP P,CHP NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE DPB R,PNTR ;STUFF INTO ANSWER LDB R,PNTR JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG CAME P,SAVPDL JRST NOMAT ;NOT AT TOP LEVEL JRST UNDEF ;UNDEFINED, FINALLY DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE DPB R,PNTR DC6AA: CAMN P,SAVPDL JRST DC6BB LDB T,-2(P) ;OLD VALUE OF PNTR CAME T,(P) JRST NOMAT1 DC6BB: PUSH P,CHP PUSH P,PNTR PUSH P,W2 PUSH P,R JRST DC1 DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER MOVE T,INST LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL LDB R,[POINT 3,T,8] TLC T,700000 TLCN T,700000 DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS JRST L4 DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG MOVEI T,133(T) PUSHJ P,TOUT ;OUTPUT A LETTER CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES JRST DC1 LIT IFN EDDT&1&<EDDT>B36,<BUFF: BLOCK 40> PS: BLOCK LPDL DDTEND=. END