.TITLE DISSYM INSTRUCTION DISASEMBLER ; VALTB:: .WORD 000000,Z00000 ; HALT - RTT .WORD 000007,Z00007 ; .WORD .WORD 000100,Z00100 ; JMP .WORD 000200,Z00200 ; RTS .WORD 000210,Z00210 ; .WORD .WORD 000230,Z00230 ; SPL .WORD 000240,Z00240 ; NOP - CCC .WORD 000260,Z00260 ; NOP - SCC .WORD 000300,Z00300 ; SWAB .WORD 000400,Z00400 ; BR - BLE .WORD 004000,Z04000 ; JSR .WORD 005000,Z05000 ; CLR - ASL .WORD 006400,Z06400 ; MARK .WORD 006500,Z06500 ; MFPI - SXT .WORD 007000,Z07000 ; .WORD .WORD 010000,Z10000 ; MOV - ADD .WORD 070000,Z70000 ; MUL - ASHC .WORD 074000,Z74000 ; XOR .WORD 075000,Z75000 ; FADD - FDIV .WORD 077000,Z77000 ; SOB .WORD 100000,B00000 ; BPL - BVS .WORD 103000,B03000 ; BCC - BCS .WORD 104000,B04000 ; EMT - TRAP .WORD 105000,B05000 ; CLRB - ASLB .WORD 106400,B06400 ; .WORD .WORD 106500,B06500 ; MFPD - MTPD .WORD 106700,B06700 ; .WORD .WORD 110000,B10000 ; MOVB - SUB .WORD 170000,B70000 ; CFCC - SETI .WORD 170003,B70003 ; .WORD .WORD 170011,B70011 ; SETD - SETL .WORD 170013,B70013 ; .WORD .WORD 170100,B70100 ; LDFPS - NEGF .WORD 171000,B71000 ; MULF - LDCDF VALTBE:: ; .SBTTL INSTRUCTIONS SYMBOL TABLE ; SYMTB: S00000: .ASCII /HALT / .ASCII /WAIT / .ASCII /RTI / .ASCII /BPT / .ASCII /IOT / .ASCII /RESET / .ASCII /RTT / ; S00007: .ASCII /.WORD / ; S00100: .ASCII /JMP / ; S00200: .ASCII /RTS / .ASCII /RETURN/ ; S00230: .ASCII /SPL / ; S00240: .ASCII /NOP / .ASCII /CLC / .ASCII /CLV / .ASCII /CLZ / .ASCII /CLN / .ASCII /CCC / ; S00260: .ASCII /NOP / .ASCII /SEC / .ASCII /SEV / .ASCII /SEZ / .ASCII /SEN / .ASCII /SCC / ; S00300: .ASCII /SWAB / ; S00400: .ASCII /BR / .ASCII /BNE / .ASCII /BEQ / .ASCII /BGE / .ASCII /BLT / .ASCII /BGT / .ASCII /BLE / ; S04000: .ASCII /JSR / .ASCII /CALL / ; S05000: .ASCII /CLR / .ASCII /COM / .ASCII /INC / .ASCII /DEC / .ASCII /NEG / .ASCII /ADC / .ASCII /SBC / .ASCII /TST / .ASCII /ROR / .ASCII /ROL / .ASCII /ASR / .ASCII /ASL / ; S06400: .ASCII /MARK / ; S06500: .ASCII /MFPI / .ASCII /MTPI / .ASCII /SXT / ; S10000: .ASCII /MOV / .ASCII /CMP / .ASCII /BIT / .ASCII /BIC / .ASCII /BIS / .ASCII /ADD / ; S70000: .ASCII /MUL / .ASCII /DIV / .ASCII /ASH / .ASCII /ASHC / S74000: .ASCII /XOR / ; S75000: .ASCII /FADD / .ASCII /FSUB / .ASCII /FMUL / .ASCII /FDIV / ; S77000: .ASCII /SOB / ; T00000: .ASCII /BPL / .ASCII /BMI / .ASCII /BHI / .ASCII /BLOS / .ASCII /BVC / .ASCII /BVS / ; T03000: .ASCII /BCC / .ASCII /BCS / ; T04000: .ASCII /EMT / .ASCII /TRAP / ; T05000: .ASCII /CLRB / .ASCII /COMB / .ASCII /INCB / .ASCII /DECB / .ASCII /NEGB / .ASCII /ADCB / .ASCII /SBCB / .ASCII /TSTB / .ASCII /RORB / .ASCII /ASRB / .ASCII /ASLB / ; T06500: .ASCII /MFPD / .ASCII /MTPD / ; T10000: .ASCII /MOVB / .ASCII /CMPB / .ASCII /BITB / .ASCII /BICB / .ASCII /BISB / .ASCII /SUB / ; T70000: .ASCII /CFCC / .ASCII /SETF / .ASCII /SETI / ; T70011: .ASCII /SETD / .ASCII /SETL / ; T70100: .ASCII /LDFPS / .ASCII /STFPS / .ASCII /STST / .ASCII /CLRF / .ASCII /TSTF / .ASCII /ABSF / .ASCII /NEGF / ; T71000: .ASCII /MULF / .ASCII /MODF / .ASCII /ADDF / .ASCII /LDF / .ASCII /SUBF / .ASCII /CMPF / .ASCII /STF / .ASCII /DIVF / .ASCII /STEXP / .ASCII /STCFI / .ASCII /STCFD / .ASCII /LDEXP / .ASCII /LDCIF / .ASCII /LDCDF / SYMTBE: .EVEN ; .SBTTL INSTRUCTION DISASSEMBLER ROUTINES ; ; 000000 = HALT ; 000001 = WAIT ; 000002 = RTI ; 000003 = BPT ; 000004 = IOT ; 000005 = RESET ; 000006 = RTT Z00000: MOV #S00000,R4 ; S.T. ADDR ; CMP #2,R5 ; RTI INSTRUCTION? BEQ 5$ ; YES CMP #6,R5 ; RTT? BNE OP0A ; NOPE 5$: MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND ; OP0A: CALL PINS ; PACK INST RETURN ; ; UNUSED CODES ; 000007 - 000077 ; 000210 - 000227 ; 007000 - 007777 ; 075040 - 076777 ; 106400 - 106477 ; 106700 - 107777 ; 170003 - 170010 ; 170013 - 170077 = .WORD VAL Z00007:: Z00210: Z07000: Z75040: B06400: B06700: B70003: B70013: WORD: MOV #S00007,R4 CLR R5 CALL PINS MOV INST,R5 ; .WORD ARG CALL POCT ; PACK OCTAL SUP RETURN ; ; 0001DD = JMP DD Z00100: MOV #S00100,R4 MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND OP1A: CLR R5 OP1B: CALL PINS OP1C: MOV B0.5,R5 ; SRC/DST OPERAND CALL POP ; PACK OPERAND RETURN ; 00020R = RTS R ; 000207 = RETURN Z00200: MOV #S00200,R4 MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND MOV #1,R5 CMP B0.2,#7 ; REG = PC ? BEQ OP0A ; YES - USE RETURN CLR R5 OP1RR: CALL PINS MOV B0.2,R5 ; REG OPERAND CALL PREG ; PACK REGISTER NAME RETURN ; ; 00023N = SPL N Z00230: MOV #S00230,R4 CLR R5 CALL PINS MOV B0.2,R5 CALL POCT RETURN ; 000240 = NOP ; 000241 = CLC ; 000242 = CLV ; 000244 = CLZ ; 000250 = CLN ; 000257 = CCC Z00240: MOV #S00240,R4 BR Z00260+4 ; ; 000260 = NOP ; 000261 = SEC ; 000262 = SEV ; 000264 = SEZ ; 000270 = SEN ; 000277 = SCC Z00260: MOV #S00260,R4 CLR R5 BIC #177760,INST ; CLEAR ALL BUT CNDX BITS BEQ OP0A ; NOP INST CMP INST,#17 ; ALL FOUR BITS ? BNE 2$ ; NO MOV #5,R5 ; CCC OR SCC INST 1$: BR OP0A 2$: CLR -(SP) ; ! SWITCH CLR -(SP) ; S.T. ENTRY NO. MOV #1,-(SP) ; MASK 10$: INC 2(SP) ; ENTRY NO. +1 BIT (SP),INST ; MASK TEST BEQ 12$ ; BIT NOT SET TST 4(SP) ; BIT SET - TEST ! SWITCH BEQ 11$ ; NOT SET PACK #041 ; ASCII( ! ) 11$: INC 4(SP) ; SET ! SWITCH MOV 2(SP),R5 ; ENTRY NO. CALL PINS 12$: ASL (SP) ; SHIFT MASK CMP (SP),#20 ; DONE ? BNE 10$ ; NO CMP (SP)+,(SP)+ ; CLEAN UP STACK TST (SP)+ RETURN ; 0003DD = SWAB DD Z00300: MOV #S00300,R4 BR OP1A ; ; 0004XXX = BR A ; 0010XXX = BNE A ; 0014XXX = BEQ A ; 0020XXX = BGE A ; 0024XXX = BLT A ; 0030XXX = BGT A ; 0034XXX = BLE A Z00400: MOV #S00400,R4 MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND SUB #000400,R5 BRN: ASH #-8.,R5 CALL PINS BRNB: MOV INST,R5 BIC #177400,R5 CMP R5,#200 BLT .+6 BIS #177400,R5 ; EXTEND SIGN BIT BRNA: ASL R5 ; 2*X ADD ADR,R5 ; ADR +2*X ADD #2,R5 ; ADR +2 +2*X = PC +2*X CALL POCT6 ; PACK ADDR - 6 OCTAL RETURN ; ; 004RDD = JSR R,DD ; 0047DD = CALL DD Z04000: MOV #S04000,R4 MOV #1,R5 CMP B6.8,#7 ; REG = PC ? BEQ OP1B ; YES - USE CALL DD OP1R: CLR R5 CALL PINS MOV B6.8,R5 ; REG NUMBER CALL PREG OP1E: PACK #054 ; ASCII( , ) BR OP1C ; 0050DD = CLR DD ; 0051DD = COM DD ; 0052DD = INC DD ; 0053DD = DEC DD ; 0054DD = NEG DD ; 0055DD = ADC DD ; 0056DD = SBC DD ; 0057DD = TST DD ; 0060DD = ROR DD ; 0061DD = ROL DD ; 0062DD = ASR DD ; 0063DD = ASL DD Z05000: MOV #S05000,R4 SUB #005000,R5 OP1D: ASH #-6,R5 JMP OP1B ; ; 0064NN = MARK NN Z06400: MOV #S06400,R4 CLR R5 CALL PINS MOV B0.5,R5 CALL POCT2 ; PACK 2 OCTAL RETURN ; ; 0065SS = MFPI SS ; 0066DD = MTPI DD ; 0067DD = SXT DD Z06500: MOV #S06500,R4 SUB #006500,R5 BR OP1D ; ; 01SSDD = MOV SS,DD ; 02SSDD = CMP SS,DD ; 03SSDD = BIT SS,DD ; 04SSDD = BIC SS,DD ; 05SSDD = BIS SS,DD ; 06SSDD = ADD SS,DD Z10000: MOV #S10000,R4 SUB #010000,R5 OP2A: ASH #-12.,R5 BIC #177770,R5 CALL PINS MOV B6.11,R5 ; SRC OPERAND CALL POP ; PACK SRC OPERAND BR OP1E ; PACK DST OPERAND ; 070RSS = MUL SS,R ; 071RSS = DIV SS,R ; 072RSS = ASH SS,R ; 073RSS = ASHC SS,R Z70000: CMP FPUSW,#40. ; PDP11-40 OR 45 ? BLT WORD1 ; NO - USE .WORD MOV #S70000,R4 SUB #070000,R5 ASH #-9.,R5 CALL PINS MOV B0.5,R5 CALL POP PACK #054 MOV B6.8,R5 CALL PREG RETURN ; ; 074RDD = XOR R,DD Z74000: CMP FPUSW,#40. ; PDP11-40 OR 45 ? BLT WORD1 ; NO - USE .WORD MOV #S74000,R4 BR OP1R ; ; 07500R = FADD R ; 07501R = FSUB R ; 07502R = FMUL R ; 07503R = FDIV R Z75000: CMP FPUSW,#40. ; FLOATING POINT UNIT SWITCH BNE WORD1 ; NOT PDP11-40 FPU - USE .WORD MOV #S75000,R4 SUB #075000,R5 ASH #-3,R5 JMP OP1RR WORD1: JMP WORD ; ; 077RNN = SOB R,A Z77000: MOV #S77000,R4 MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND CLR R5 CALL PINS MOV B6.8,R5 ; REG NUMBER CALL PREG PACK #054 MOV B0.5,R5 ; NN NEG R5 BR BRNA ; 1000XXX = BPL A ; 1004XXX = BMI A ; 1010XXX = BHI A ; 1014XXX = BLOS A ; 1020XXX = BVC A ; 1024XXX = BVS A B00000: MOV #T00000,R4 SUB #100000,R5 JMP BRN ; ; 1030XXX = BCC=BHIS A ; 1034XXX = BCS=BLO A B03000: MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND MOV #BCCTX,R5 ; "BCC=BHIS " BIT #400,INST BEQ 1$ MOV #BCSTX,R5 ; "BCS=BLO " 1$: CALL PTXT ; PACK TEXT JMP BRNB ; ; 1040NNN = EMT NNN ; 1044NNN = TRAP NNN B04000: MOV #T04000,R4 MOV #777,LINCT ; FORCE A LF AFTER THIS COMMAND SUB #104000,R5 ASH #-8.,R5 CALL PINS MOV INST,R5 BIC #177400,R5 CALL POCT3 ; PACK 3 OCTAL RETURN ; ; 1050DD = CLRB DD ; 1051DD = COMB DD ; 1052DD = INCB DD ; 1053DD = DECB DD ; 1054DD = NEGB DD ; 1055DD = ADCB DD ; 1056DD = SBCB DD ; 1057DD = TSTB DD ; 1060DD = RORB DD ; 1061DD = ROLB DD ; 1062DD = ASRB DD ; 1063DD = ASLB DD B05000: MOV #T05000,R4 SUB #105000,R5 BR OP1D1 ; ; 1065SS = MFPD SS ; 1066DD = MTPD DD B06500: MOV #T06500,R4 SUB #106500,R5 OP1D1: JMP OP1D ; 11SSDD = MOVB SS,DD ; 12SSDD = CMPB SS,DD ; 13SSDD = BITB SS,DD ; 14SSDD = BICB SS,DD ; 15SSDD = BISB SS,DD ; 16SSDD = SUB SS,DD B10000: MOV #T10000,R4 SUB #110000,R5 BR OP2A ; ; 170000 = CFCC ; 170001 = SETF ; 170002 = SETI B70000: CALL CK45 ; CHECK IF PDP11-45 FPU MOV #T70000,R4 SUB #170000,R5 OP0A1: JMP OP0A ; ; 170011 = SETD ; 170012 = SETL B70011: CALL CK45 MOV #T70011,R4 SUB #170011,R5 BR OP0A1 ; ; 1701SS = LDFPS SRC ; 1702DD = STFPS DST ; 1703DD = STST DST ; 1704DD = CLRF FDST ; 1705DD = TSTF FDST ; 1706DD = ABSF FDST ; 1707DD = NEGF FDST B70100: CALL CK45 MOV #T70100,R4 SUB #170100,R5 ASH #-6,R5 CALL PINS CMP INST,#170400 BLO OP1C1 MOV B0.5,R5 CALL PFOP RETURN ; 1710ASS = MULF FSRC,AC ; 1714ASS = MODF FSRC,AC ; 1720ASS = ADDF FSRC,AC ; 1724ASS = LDF FSRC,AC ; 1730ASS = SUBF FSRC,AC ; 1734ASS = CMPF FSRC,AC ; 1740ADD = STF AC,FDST ; 1744ASS = DIVF FSRC,AC ; 1750ADD = STEXP AC,DST ; 1754ADD = STCFI AC,DST ; 1760ADD = STCFD AC,FDST ; 1764ASS = LDEXP SRC,AC ; 1770ASS = LDCIF SRC,AC ; 1774ASS = LDCDF FSRC,AC B71000: CALL CK45 MOV #T71000,R4 SUB #171000,R5 ASH #-8.,R5 CALL PINS BIC #4,B6.8 ; AC NUMBER ASL R5 ; DISPATCH TABLE DISPLACEMENT JMP @10$(R5) ; DISPATCH TO ROUTINE ; 10$: .WORD 120$ .WORD 120$ .WORD 120$ .WORD 120$ .WORD 120$ .WORD 120$ .WORD 130$ .WORD 120$ .WORD 110$ .WORD 110$ .WORD 130$ .WORD 100$ .WORD 100$ .WORD 120$ ; ; INS SRC,AC 100$: MOV B0.5,R5 CALL POP ; PACK SRC OPERAND BR OPFPA ; INS AC,DST 110$: MOV B6.8,R5 ; AC NUMBER CALL PFOP ; PACK AC NUMBER PACK #054 ; ASCII( , ) BR OP1C1 ; ; INS FSRC,AC 120$: MOV B0.5,R5 ; FSRC CALL PFOP ; PACK FSRC BR OPFPA ; ; INS AC,FDST 130$: MOV B6.8,R5 ; AC NUMBER CALL PFOP ; PACK AC NUMBER PACK #054 ; ASCII( , ) MOV B0.5,R5 ; FDST BR OPFPB OPFPA: PACK #054 ; ASCII( , ) MOV B6.8,R5 ; AC NUMBER OPFPB: CALL PFOP ; PACK AC NUMBER RETURN OP1C1: JMP OP1C ; ; PACK FLOATING OPERAND PFOP: BIT #70,R5 ; MODE BITS BEQ 2$ ; MODE 0 IS AN AC NUMBER 1$: CALL POP ; NON0 IS GEN REGISTERS BR 10$ 2$: PACK #106 ; ASCII( F ) ADD #060,R5 ; ASCII( AC NUMBER ) PACK R5 10$: RETURN ; ; CKECK IF PDP11-45 FPU CK45: CMP FPUSW,#45. BNE POPER ; NOT 11-45 FPU RETURN ; .SBTTL PACK OPERAND ; ; R5 = OPERAND = R(0-2) + M(3-5) ; R = REGISTER NUMBER ; M = ADDRESS MODE POP: CMP B0.5,#47 ; TEST IF LEGAL OPERAND BEQ POPER ; -(PC) ILLEGAL CMP B0.5,#57 BEQ POPER ; @-(PC) ILLEGAL MOV R5,R3 BIC #177770,R3 ; R3 = REGISTER NO. MOV R5,R4 ASH #-3,R4 BIC #177770,R4 ; R4 = ADDRESS MODE ASL R4 ; 2*MODE MOV #100,R2 ; ASCII( @ ) CMP R3,#7 ; IS REG = PC ? BEQ POPM7 ; YES JMP 1$(R4) ; DISPATCH TO NON-PC HANDLERS 1$: BR POP0R ; 0 = RN BR POP1R ; 1 = (RN) BR POP2R ; 2 = (RN)+ BR POP3R ; 3 = @(RN)+ BR POP4R ; 4 = -(RN) BR POP5R ; 5 = @-(RN) BR POP6R ; 6 = X(RN) ; 7 = @X(RN) POP7R: PACK R2 ; ASCII( @ ) POP6R: CALL POPGT ; GET INDEX WORD CALL POCTS ; PACK SIGNED OCTAL BR POP1R POP5R: PACK R2 ; ASCII( @ ) POP4R: PACK #055 ; ASCII( - ) POP1R: PACK #050 ; ASCII/ ( / MOV R3,R5 ; REGISTER NUMBER CALL PREG ; PACK REG NAME PACK #051 ; ASCII/ ) / BR POPX POP3R: PACK R2 ; ASCII( @ ) POP2R: PACK #050 ; ASCII/ ( / MOV R3,R5 ; REG NO. CALL PREG ; PACK REG NAME PACK #051 ; ASCII/ ) / PACK #053 ; ASCII( + ) BR POPX POP0R: MOV R3,R5 ; REG NO. CALL PREG BR POPX ; POPM7: JMP 1$(R4) ; DISPATCH TO PC HANDLERS 1$: BR POP0R ; 0 = PC BR POP1R ; 1 = (PC) BR POP27 ; 2 = #N BR POP37 ; 3 = @#NNNNNN BR POPER ; 4 = ILLEGAL BR POPER ; 5 = ILLEGAL BR POP67 ; 6 = A ; 7 = @A POP77: PACK R2 ; ASCII( @ ) POP67: CALL POPGT ; GET INDEX WORD ADD ADR,R5 ; CALCULATE EFFECTIVE ADDRESS ADD #2,R5 CALL POCT6 BR POPX POP37: PACK R2 ; ASCII( @ ) PACK #043 ; ASCII( # ) CALL POPGT ; GET (PC)+ WORD CALL POCT6 ; PACK 6 OCTAL BR POPX POP27: PACK #043 ; ASCII( # ) CALL POPGT ; GET (PC)+ WORD CMP INST,#070000 ; TEST IF MUL,DIV,ASH,ASHC BLO 10$ ; NO CMP INST,#074000 BLO 20$ ; YES 10$: CALL POCT ; PACK OCTAL UNS SUP BR POPX 20$: CALL POCTS ; PACK OCTAL SIGNED SUP POPX: RETURN POPER: TST (SP)+ ; CLEAN UP STACK MOV #BF.IN,R0 ; INIT ASCII STRING POINTER JMP WORD ; RE-PROCESS AS .WORD ; .SBTTL DISASSEMBLER SUBROUTINES ; ; GET NEXT WORD POPGT: ADD #2,ADR ; BUMP TO NEXT WORD GETWRD ADR BCS 5$ ; INVALID ADDRESS MOV R5,-(SP) ; SAVE WORD MOV R0,-(SP) ; SAVE ASCII STRING POINTER MOV R0WD,R0 ; WORD BUFFER CALL POCT6 ; PACK 6 OCTAL MOV (SP)+,R0 ; RESTORE ASCII STRING POINTER MOV #BF.W3,R0WD MOV (SP)+,R5 ; R5 = (ADR) = WORD RETURN 5$: SUB #2,ADR ; FIX ADR TST (SP)+ ; CLEAN UP STACK BR POPER ; USE .WORD ; ; PACK INSTRUCTION MNEMONIC PINS: MOV R5,-(SP) ; SAVE INDEX MUL #6,R5 ; TABLE DISPLACEMENT ADD R4,R5 ; TABLE ADDRESS MOV #6,R4 ; 6 CHARACTERS 1$: MOVB (R5)+,(R0)+ ; PACK 6 CHARACTERS SOB R4,1$ MOV #BF.OP,R0 ; OPERANDS BUFFER MOV (SP)+,R5 ; RESTORE INDEX RETURN ; ; PACK REGISTER NAME PREG: BIC #177770,R5 ; REGISTER NUMBER ASL R5 ; 2*R ADD #1$,R5 ; TABLE ADDR MOVB (R5)+,(R0)+ ; PACK 2 CHARACTERS MOVB (R5)+,(R0)+ RETURN 1$: .ASCII /R0/ .ASCII /R1/ .ASCII /R2/ .ASCII /R3/ .ASCII /R4/ .ASCII /R5/ .ASCII /SP/ .ASCII /PC/ .EVEN ; .END