.SBTTL DECLARATIONS .TITLE DECODE A BINARY INTO ASSEMBLY LANGUAGE .MCALL .CSIGEN,.PRINT,.READW,.WRITW,.CLOSE,.EXIT,.SETTOP .MCALL .QSET,.WRITE,.WAIT,.ENTER P03=1 P4045M=2 P45M=4 P4045B=10 P45B=20 EIS=40 FIS=100 FPU=200 PAGSIZ=53. .PAGE .SBTTL MAIN PROGRAM START: .QSET #QUE,#4 .PRINT #IDMES NEWFIL: MOV #3,INCHAN MOV SP,TMP 1$: .CSIGEN #HANDLR,#DEFEXT,#0,#CMDSTR BCS 1$ MOV R0,TABLEL MOV R0,ENTRYN MOV @#54,R0 .SETTOP MOV R0,TABLEH MOV R0,CRFEN MOV #1,PASS CLR LDAMOD MOV #-1,CONFIG ;DEFALT IS TO DECODE ALL INSTRUCTIONS CLR PSR CLR MM CLR ATH MOV (SP)+,R1 ;ANY SWITCHES BEQ 3$ 6$: CMPB #'L,(SP) ;WAS SWITCH AN L BNE 4$ INC LDAMOD MOV #4,INCHAN ;YES-SET APROPRIATE FLAGS 12$: TST (SP)+ ;SKIP IT BGE 10$ ADD #2,SP ;AND VALUE IF ANY BR 10$ 4$: CMPB #'M,(SP) ;WAS IT MEMORY MANAGEMENT SWITCH BNE 11$ INC MM BR 12$ ;AND SKIP TO NEXT SWITCH 11$: CMPB #'P,(SP) ;WAS PROCESSOR SPECIFIED BNE 13$ CLR CONFIG TST (SP)+ ;SKIP TO VALUE IF ANY BGE 10$ MOV (SP)+,PSR ;SAVE TYPE OF PROCESSOR BR 10$ 13$: CMPB #'A,(SP) ;WAS ARITHMETIC OPTION SPECIFIED BNE 10$ TST (SP)+ ;GET IT IF ANY SPECIFDIED BGE 10$ MOV (SP)+,ATH 10$: DEC R1 ;ANOTHER SWITCH?? BGT 6$ 3$: MOV TMP,SP .WAIT #0 BCS NEWFIL .WAIT #3 BCS NEWFIL TST CONFIG BNE 14$ ;IF NO OPTINS SPECIFED-SKIP NEXT TST PSR ;WAS A VALUE GIVEN FOR PROCESSOR BEQ 14$ ;IF NOT ASSUME BASIC INSTRUCTION SET ;AND NO OTHER OTION SWITCHES ARE GOOD CMP #3,PSR ;WAS IT AN LSI-11 BNE 15$ BIS #P03!P4045B,CONFIG ;SET CONFIGURATION WORD BR 18$ ;GO CHECK ARITH OPTIONS(MM NOT APPLICABLE) 15$: CMP #20.,PSR ;IS IT A PROCESSOR 20 OR BELOW(BASIC ONLY) BGE 14$ ;IF YES NO OTHER OPTIONS GOOD BIS #P4045B,CONFIG ;IT IS AT LEAST A 40 FAMILY CMP #40.,PSR ;WAS IT A 45+ FAMILY BGE 17$ BIS #P45B!EIS,CONFIG ;SET 45 INTO CONFIG WORD 17$: TST MM ;HOW ABOUT MEMORY MANAGEMENT BEQ 18$ ;SKIP IF NONE BIS #P4045M,CONFIG ;SET 40 MM BIT #P45B,CONFIG ;IS IT A 45 BEQ 18$ BIS #P45M,CONFIG 18$: TST ATH ;WAS ARITH OPTION SELECTED BEQ 14$ ;SKIP IF NOT CMP REIS,ATH ;WAS EIS SELECTED BNE 19$ BIS #EIS,CONFIG ;YES SET OTION BR 14$ 19$: CMP RFIS,ATH ;HOW ABOUT FIS BNE 20$ BIT #P45B,CONFIG ;GOOD FOR 40 FAMILY ONLY BNE 14$ ;SKIP IF NOT BIS #EIS!FIS,CONFIG ;SET CONFIG WORD BR 14$ 20$: CMP RFPU,ATH ;FPU SELECTED BNE 14$ ;SKIP IF NOT BIT #P45B,CONFIG ;GOOD ONLY FOR 45 FAMILY BEQ 14$ BIS #FPU,CONFIG 14$: TST LDAMOD BNE 2$ JMP NOLDA 2$: .ENTER #ARA,#4,#BLKLDA,#128. ;SCRATCH FILE BCC 7$ .PRINT #NORM .EXIT 7$: CLR OUTBLK MOV #OUTBUF,R1 MOV #512.,R2 8$: CLR (R1)+ DEC R2 BGT 8$ MOV #64.,R1 9$: .WRITW #ARA,#4,#OUTBUF,#512.,OUTBLK ADD #2,OUTBLK DEC R1 BGT 9$ .READW #ARA,#3,#INBUF,#256.,INBLK INC INBLK MOV #INBUF,INPT MOV #-1,LDALO CLR LDAHI LDABLK: CLR CHKSUM JSR PC,GETBYT CMPB #1,R0 BNE LDABLK JSR PC,GETBYT TST R0 BNE LDABLK JSR PC,LDAWD SUB #6,R0 BEQ LDADNE MOV R0,LDACT JSR PC,LDAWD MOV R0,ADDR LDALOP: JSR PC,GETBYT MOV ADDR,R1 CMP R1,LDAHI BLOS 1$ MOV R1,LDAHI 1$: CMP R1,LDALO BHIS 2$ MOV R1,LDALO 2$: BIC #777,R1 SWAB R1 CCC ROR R1 CMP R1,OUTBLK BEQ 3$ MOV R0,-(SP) .WRITW #ARA,#4,#OUTBUF,#256.,OUTBLK MOV R1,OUTBLK .READW #ARA,#4,#OUTBUF,#256.,OUTBLK MOV (SP)+,R0 3$: MOV ADDR,R1 BIC #177000,R1 MOVB R0,OUTBUF(R1) INC ADDR DEC LDACT BNE LDALOP JSR PC,GETBYT TSTB CHKSUM BEQ LDABLK .PRINT #BADCKS BR LDABLK LDADNE: .WRITW #ARA,#4,#OUTBUF,#256.,OUTBLK JSR PC,LDAWD MOV R0,STADD MOV LDAHI,FINADD MOV LDALO,BADDR BIC #1,BADDR INC FINADD BIT #1,FINADD BEQ NOLDA INC FINADD NOLDA: CLR HALTIN CLR INBLK CLR OUTBLK CLR STFLAG CLR STKADD CLR CHRCT MOV #PAGSIZ,LINCT CLR CODE MOV #OUTBUF,R0 MOV #512.,R1 2$: CLR (R0)+ DEC R1 BGT 2$ MOV #OUTBUF,OUTPT TST LDAMOD BNE 3$ .READW #ARA,INCHAN,#INBUF,#256.,INBLK BCC 4$ JMP NEWFIL 4$: MOV INBUF+40,STADD ;GET STARTING ADDRESS OF JOB MOV INBUF+50,FINADD ;ENDADD MOV INBUF+42,STKADD MOV #1000,BADDR 3$: CMP STADD,BADDR BHIS 1$ BIT #1,STADD BNE 1$ MOV STADD,BADDR BIC #1,BADDR 1$: SUB #2,FINADD SUB #2,BADDR PLOOP: CLR SHORT MOV BADDR,ADDR MOV ADDR,R0 ADD #2,R0 MOV R0,R1 BIC #177000,R1 MOV R1,INPT ADD #INBUF-2,INPT BIC #777,R0 CCC ROR R0 SWAB R0 MOV R0,INBLK .READW #ARA,INCHAN,#INBUF,#256.,INBLK BCC 5$ JMP NEWFIL 5$: INC INBLK TST PASS BNE ILOOP MOV #CMDOUT,R1 JSR PC,OUTPUT MOV #INTMSG,R1 BIT #FPU,CONFIG BNE 6$ MOV #INTMS1,R1 6$: JSR PC,OUTPUT MOV ADDR,R1 ADD #2,R1 JSR PC,OCTOUT TST STKADD BEQ 4$ MOV #STKMSG,R1 JSR PC,OUTPUT MOV STKADD,R1 JSR PC,OCTOUT 4$: MOV ENTRYN,R4 MOV TABLEL,R3 CLR R2 1$: CMP R3,R4 BHIS STCOD CMP (R3),BADDR BLOS 2$ CMP (R3),FINADD BHI 2$ BIT #1,(R3) BNE 2$ 3$: ADD #6,R3 INC R2 BR 1$ 2$: MOVB #15,R0 JSR PC,OUTCHR MOVB #12,R0 JSR PC,OUTCHR MOVB #'L,R0 JSR PC,OUTCHR MOV R2,R1 MOV R2,-(SP) JSR PC,OCTOUT MOVB #'=,R0 JSR PC,OUTCHR MOV (R3),R1 JSR PC,OCTOUT MOV (SP)+,R2 BIS #1,2(R3) BR 3$ STCOD: MOVB #15,R0 JSR PC,OUTCHR MOVB #12,R0 JSR PC,OUTCHR MOV #1,CODE MOV #PAGSIZ,LINCT MOV #FMT,R1 JSR PC,OUTPUT ; R0= TMP ; R1= INS DECODE WORKING REGISTER ; R2= OFFSET POINETER REGISTER FOR DECODE ; R3= ; R4= ; R5= INSTR ILOOP: MOV #ADDOLD+2,ADDOLD JSR PC,GETWD MOV ADDR,ADDR1 CMP FINADD,ADDR BHIS 5$ DEC PASS BNE 6$ JMP PLOOP 6$: JMP CLOSE 5$: TST PASS BNE 3$ CMP ADDR,STADD BNE 3$ INC STFLAG MOV #STLAB,R1 JSR PC,OUTPUT 3$: CLR R2 1$: TST CNFINS(R2) ;IS IT ALL OPTIONS INS BEQ 7$ BIT CONFIG,CNFINS(R2) ;GOOD FOR THIS CONFIG BEQ 8$ 7$: MOV R5,R1 BIC CLRLST(R2),R1 CMP R1,SETLST(R2) BEQ 2$ 8$: ADD #2,R2 BR 1$ 2$: TST PASS BNE 4$ MOV R2,-(SP) MOV ADDR,R3 JSR PC,PUTLAB MOV (SP)+,R2 CMP #8.,CHRCT BLE 9$ MOV #11,R0 JSR PC,OUTCHR 9$: MOV NAMLST(R2),R1 JSR PC,OUTPUT 10$: CMP #14.,CHRCT BLE 4$ MOV #40,R0 JSR PC,OUTCHR BR 10$ 4$: JSR PC,@EVLLST(R2) TST PASS BNE ILOOP CRLF: MOV #15,R0 JSR PC,OUTCHR MOV #12,R0 JSR PC,OUTCHR BR ILOOP .PAGE .SBTTL I/O,WORD/BYTE HANDLEING SUBROUTINES GETBYT: CMP INPT,#INBUF+512. BLO 1$ .READW #ARA,#3,#INBUF,#256.,INBLK BCC 2$ .PRINT #BADLDA .EXIT 2$: INC INBLK MOV #INBUF,INPT 1$: MOVB @INPT,R0 BIC #177400,R0 ADD R0,CHKSUM INC INPT RTS PC LDAWD: JSR PC,GETBYT MOVB R0,TMP JSR PC,GETBYT MOVB R0,TMP+1 MOV TMP,R0 RTS PC GETWD: TST HALTIN BGT 3$ ADD #2,ADDR TST SHORT BNE 4$ ADD #2,INPT CMP INPT,#INBUF+512. BHIS 1$ 3$: JMP A1 1$: .READW #ARA,INCHAN,#INBUF,#256.,INBLK BCS 2$ JMP A2 2$: MOV #1,SHORT TST PASS BEQ 4$ .PRINT #LNERMS 4$: CLR R5 JMP A4 CLOSE: CLR PASS MOV #PAGSIZ,LINCT CLR CODE MOV #14,R0 JSR PC,OUTCHR MOV TABLEL,R5 MOV ENTRYN,R4 CLR R2 2$: CMP R5,R4 BHIS 5$ BIT #1,2(R5) BEQ 4$ 6$: BIC #1,2(R5) ADD #6,R5 INC R2 BR 2$ 4$: MOVB #'L,R0 JSR PC,OUTCHR MOV R2,R1 MOV R2,-(SP) JSR PC,OCTOUT MOVB #'=,R0 JSR PC,OUTCHR MOV (R5),R1 JSR PC,OCTOUT MOV (SP)+,R2 MOVB #15,R0 JSR PC,OUTCHR MOVB #12,R0 JSR PC,OUTCHR BR 6$ 5$: MOV #FIN1,R1 TST STFLAG BNE 1$ MOV #FIN2,R1 1$: JSR PC,OUTPUT MOV #PAGSIZ,LINCT MOV #SYMTBL,R1 JSR PC,OUTPUT MOV TABLEL,R5 MOV ENTRYN,R4 MOV #7,R3 CLR R2 12$: CMP R5,R4 BHIS 15$ MOVB #'L,R0 JSR PC,OUTCHR MOV R2,R1 MOV R2,-(SP) JSR PC,OCTOUT MOVB #11,R0 JSR PC,OUTCHR MOVB #'=,R0 JSR PC,OUTCHR MOV (R5),R1 JSR PC,FOCOUT MOV (SP)+,R2 MOVB #11,R0 JSR PC,OUTCHR ADD #6,R5 INC R2 DEC R3 BGT 12$ MOVB #15,R0 JSR PC,OUTCHR MOVB #12,R0 JSR PC,OUTCHR MOV #7,R3 BR 12$ 15$: TST STFLAG BEQ 17$ MOV #STA,R1 JSR PC,OUTPUT MOV STADD,R1 JSR PC,FOCOUT 17$: MOV #15,R0 JSR PC,OUTCHR MOV #12,R0 JSR PC,OUTCHR MOV #PAGSIZ,LINCT MOV #CRF,R1 JSR PC,OUTPUT ; R5=CTR ; R4=PRT TO L BLOCK ; R3=PTR TO USE ADDR USE BLOCK CLR R5 ;CTR=0 MOV TABLEL,R4 18$: CMP R4,ENTRYN BHIS 19$ MOVB #'L,R0 JSR PC,OUTCHR MOV R5,R1 JSR PC,OCTOUT MOV 2(R4),R3 20$: CMP #123.,CHRCT BLOS 21$ MOV #11,R0 JSR PC,OUTCHR MOV -2(R3),R1 JSR PC,FOCOUT MOV (R3),R3 BNE 20$ MOV #15,R0 JSR PC,OUTCHR MOV #12,R0 JSR PC,OUTCHR ADD #6,R4 INC R5 BR 18$ 21$: MOV #15,R0 JSR PC,OUTCHR MOV #12,R0 JSR PC,OUTCHR BR 20$ 19$: MOV #14,R0 JSR PC,OUTCHR CMP OUTPT,#OUTBUF+512. BEQ A3 BLO 16$ .WRITW #ARA,#0,#OUTBUF+512.,#256.,OUTBLK BR A3 16$: CMP OUTPT,#OUTBUF BEQ A3 .WRITW #ARA,#0,#OUTBUF,#256.,OUTBLK A3: .CLOSE #3 .WAIT #0 .CLOSE #0 .EXIT A2: INC INBLK MOV #INBUF,INPT A1: MOV @INPT,R5 A4: TST HALTIN BLT 1$ MOV R5,@ADDOLD ADD #2,ADDOLD 1$: CLR HALTIN RTS PC ; ENTER WITH WORD TO BE CONVERTED IN R2 OUTRAD: MOV #3.,R1 7$: MOV #8$,R3 2$: TST -(R3) MOV #-1,R0 CMP #174777,R2 BCS 1$ 3$: INC R0 SUB (R3),R2 BCC 3$ ADD (R3),R2 TST R0 BEQ 4$ CMP #33,R0 BCS 5$ BEQ 6$ 1$: ADD #40,R0 4$: ADD #16,R0 5$: ADD #11,R0 6$: ADD #11,R0 JSR PC,OUTCHR DEC R1 BNE 2$ RTS PC .WORD 0,1,50,3100 8$: .WORD 0,1 OUTPUT: TST PASS BNE 2$ MOVB (R1)+,R0 BEQ 1$ CMPB #200,R0 BEQ 2$ JSR PC,OUTCHR BR OUTPUT 1$: MOVB #15,R0 JSR PC,OUTCHR MOVB #12,R0 JSR PC,OUTCHR 2$: RTS PC COMMA: MOVB #',,R0 OUTCHR: TST PASS BEQ 20$ JMP 1$ 20$: CMPB #11,R0 BNE 11$ 14$: MOVB #40,R0 JSR PC,11$ BIT #7,CHRCT BNE 14$ RTS PC 11$: CMPB #12,R0 BNE 12$ CLR CHRCT DEC LINCT BGT 13$ JSR PC,13$ MOV #PAGSIZ,LINCT TST CODE BGT 15$ MOVB #14,R0 BR 13$ 15$: MOV R1,-(SP) MOV #FMT,R1 JSR PC,OUTPUT MOV (SP)+,R1 RTS PC 12$: CMPB #14,R0 BEQ 13$ INC CHRCT 13$: MOVB R0,@OUTPT INC OUTPT CMP OUTPT,#OUTBUF+512. BLO 1$ BHI 4$ .WAIT #0 BCS 2$ .WRITE #ARA,#0,#OUTBUF,#256.,OUTBLK BCS 2$ INC OUTBLK MOV R1,-(SP) MOV #OUTBUF+512.,R0 MOV #256.,R1 5$: CLR (R0)+ DEC R1 BGT 5$ MOV (SP)+,R1 BR 1$ 4$: CMP OUTPT,#OUTBUF+1024. BLO 1$ .WAIT #0 BCS 2$ .WRITE #ARA,#0,#OUTBUF+512.,#256.,OUTBLK BCS 2$ INC OUTBLK MOV R1,-(SP) MOV #OUTBUF,R0 MOV #256.,R1 3$: CLR (R0)+ DEC R1 BGT 3$ MOV #OUTBUF,OUTPT MOV (SP)+,R1 1$: RTS PC 2$: .PRINT #OUTERR ERXIT: .WAIT #0 .CLOSE #0 .CLOSE #1 .EXIT BYTOUT: CLR R0 CLR LD0 MOV #3.,R2 SWAB R1 BR S2 FOCOUT: MOV #1,LD0 BR FOT OCTOUT: CLR LD0 FOT: CLR R0 MOV #6.,R2 BR S1 S3: CLR R0 CCC ROL R1 ROL R0 S2: CCC ROL R1 ROL R0 S1: CCC ROL R1 ROL R0 S0: ADD #60,R0 CMPB #'0,R0 BNE 1$ TST LD0 BEQ 2$ 1$: INC LD0 JSR PC,OUTCHR 2$: DEC R2 BGT S3 TST LD0 BNE 3$ MOVB #'0,R0 JSR PC,OUTCHR 3$: RTS PC .PAGE .SBTTL INSTRUCTION EVALUATEING SUBROUTINES CBUFF: JSR PC,NULL CMP ADDR,FINADD BHIS 4$ MOV #-1,HALTIN JSR PC,GETWD TST R5 BNE 2$ 1$: CMP ADDR,FINADD BHIS 3$ MOV #-1,HALTIN JSR PC,GETWD TST R5 BEQ 1$ 3$: MOV #PEQ,R1 JSR PC,OUTPUT MOV ADDR,R1 JSR PC,OCTOUT 2$: MOV #1,HALTIN 4$: RTS PC NULL: TST PASS BNE 1$ 12$: CMP #40.,CHRCT BLE 11$ MOVB #11,R0 JSR PC,OUTCHR BR 12$ 11$: MOV #ADDOLD+2,R5 SUB #2,ADDOLD MOVB #';,R0 JSR PC,OUTCHR MOV ADDR1,R1 JSR PC,FOCOUT 2$: MOVB #40,R0 JSR PC,OUTCHR 4$: MOV (R5),R1 JSR PC,FOCOUT CMP R5,ADDOLD BHIS 3$ JSR PC,COMMA ADD #2,R5 BR 4$ 3$: CMP #69.,CHRCT BLE 13$ MOVB #40,R0 JSR PC,OUTCHR BR 3$ 13$: MOV #ADDOLD+2,R5 5$: MOV (R5),R1 MOVB R1,R0 CMPB #40,R0 BLE 8$ MOVB #40,R0 8$: JSR PC,OUTCHR SWAB R1 MOVB R1,R0 CMPB #40,R0 BLE 9$ MOVB #40,R0 9$: JSR PC,OUTCHR CMP R5,ADDOLD BHIS 6$ ADD #2,R5 BR 5$ 6$: CMP #76.,CHRCT BLE 14$ MOVB #40,R0 JSR PC,OUTCHR BR 6$ 14$: MOV #ADDOLD+2,R5 10$: MOV (R5),R2 JSR PC,OUTRAD CMP R5,ADDOLD BHIS 1$ ADD #2,R5 BR 10$ 1$: RTS PC ADDMOD: MOV R1,R2 BIC #177770,R1 BIC #177707,R2 ASR R2 ASR R2 JMP @MODTAB(R2) MODTAB: .WORD MOD0,MOD1,MOD2,MOD3,MOD4,MOD5,MOD6,MOD7 MOD0: TST PASS BNE RTN CMP #7,R1 BNE 1$ MOVB #'P,R0 JSR PC,OUTCHR MOVB #'C,R0 JSR PC,OUTCHR RTS PC 1$: CMP #6,R1 BNE 2$ MOVB #'S,R0 JSR PC,OUTCHR MOVB #'P,R0 JSR PC,OUTCHR RTS PC 2$: MOVB #'R,R0 JSR PC,OUTCHR MOV R1,R0 ADD #60,R0 JSR PC,OUTCHR RTN: RTS PC MOD1: TST PASS BNE RTN MOVB #'(,R0 JSR PC,OUTCHR JSR PC,MOD0 MOVB #'),R0 JSR PC,OUTCHR RTS PC MOD2: CMP #7,R1 BEQ 1$ TST PASS BNE RTN JSR PC,MOD1 MOVB #'+,R0 JSR PC,OUTCHR RTS PC 1$: TST PASS BNE 2$ MOVB #'#,R0 JSR PC,OUTCHR MOV R5,-(SP) JSR PC,GETWD MOV R5,R3 JSR PC,PUTARG MOV (SP)+,R5 RTS PC 2$: MOV R5,-(SP) JSR PC,GETWD MOV R5,R1 JSR PC,LODLAB MOV (SP)+,R5 RTS PC MOD3: TST PASS BNE MOD2 MOVB #'@,R0 JSR PC,OUTCHR BR MOD2 MOD4: TST PASS BNE RTN MOVB #'-,R0 JSR PC,OUTCHR BR MOD1 MOD5: TST PASS BNE RTN MOVB #'@,R0 JSR PC,OUTCHR BR MOD4 MOD6: MOV R5,-(SP) MOV R1,-(SP) JSR PC,GETWD MOV R5,R1 CMP #7,(SP) BNE 2$ ADD ADDR,R1 ADD #2,R1 2$: TST PASS BEQ 3$ JSR PC,LODLAB MOV (SP)+,R1 MOV (SP)+,R5 RTS PC 3$: MOV R1,R3 JSR PC,PUTARG MOV (SP)+,R1 MOV (SP)+,R5 CMP #7,R1 BEQ 1$ JSR PC,MOD1 1$: RTS PC MOD7: TST PASS BNE MOD6 MOVB #'@,R0 JSR PC,OUTCHR BR MOD6 ;SINGLE OPERAND ADDR DST: MOV R5,R1 BIC #177700,R1 ;GET DEST(SRC) JSR PC,ADDMOD ;DECODE IT JMP NULL ; REGISTER ONLY INS DREG: TST PASS BNE 1$ MOV R5,R1 BIC #177770,R1 CLR R2 JSR PC,MOD0 1$: JMP NULL DIG3: TST PASS BNE 1$ MOV R5,R0 BIC #177770,R0 ADD #60,R0 JSR PC,OUTCHR 1$: JMP NULL DIG6: TST PASS BNE DIG3 MOV R5,R0 ROR R0 ROR R0 ROR R0 BIC #177770,R0 ADD #60,R0 JSR PC,OUTCHR BR DIG3 DIG8: TST PASS BNE 1$ MOV R5,R1 BIC #177400,R1 JSR PC,BYTOUT 1$: JMP NULL DIG16: TST PASS BNE 1$ MOV R5,R1 JSR PC,OCTOUT 1$: JMP NULL BRCH: MOVB R5,R1 CCC ROL R1 ADD ADDR,R1 ADD #2,R1 TST PASS BNE 1$ MOV R1,R3 JSR PC,PUTARG JMP NULL 1$: JSR PC,LODLAB JMP NULL RDST: MOV R5,R1 .REPT 6 ROR R1 .ENDM BIC #177770,R1 CLR R2 JSR PC,MOD0 RD1: JSR PC,COMMA MOV R5,R1 BIC #177700,R1 JSR PC,ADDMOD JMP NULL SRCDST: MOV R5,R1 .REPT 6 ROR R1 .ENDM BIC #177700,R1 JSR PC,ADDMOD BR RD1 RSRC: MOV R5,R1 BIC #177700,R1 JSR PC,ADDMOD JSR PC,COMMA MOV R5,R1 .REPT 6 ROR R1 .ENDM BIC #177770,R1 CLR R2 JSR PC,MOD0 JMP NULL ACFDST: TST PASS BNE FDST JSR PC,GETAC JSR PC,COMMA FDST: JSR PC,FMOD JMP NULL ACFSRC: JSR PC,FMOD TST PASS BNE 1$ JSR PC,COMMA JSR PC,GETAC 1$: JMP NULL FMOD: MOV R5,R1 BIC #177700,R1 BIT #70,R1 BNE 1$ TST PASS BNE 2$ JSR PC,ACM RTS PC 1$: JSR PC,ADDMOD 2$: RTS PC GETAC: MOV R5,R1 .REPT 6 ROR R1 .ENDM BIC #177774,R1 ACM: BIC #177770,R1 MOVB #'A,R0 JSR PC,OUTCHR MOVB #'C,R0 JSR PC,OUTCHR MOV R1,R0 ADD #60,R0 JSR PC,OUTCHR RTS PC RDIG8: TST PASS BNE 1$ MOV R5,R1 .REPT 6 ROR R1 .ENDM BIC #177770,R1 CLR R2 JSR PC,MOD0 JSR PC,COMMA 1$: MOV R5,R1 BIC #177700,R1 DEC R1 NEG R1 ASL R1 ADD ADDR,R1 TST PASS BNE 2$ MOV R1,R3 JSR PC,PUTARG JMP NULL 2$: JSR PC,LODLAB JMP NULL ACDST: TST PASS BNE 1$ JSR PC,GETAC 1$: JMP RD1 ACSRC: MOV R5,R1 BIC #177700,R1 JSR PC,ADDMOD TST PASS BNE 1$ JSR PC,COMMA JSR PC,GETAC 1$: JMP NULL .PAGE .SBTTL SYMBOL TABLE GENERATION/HANDLEING SUBROUTINES LODLAB: MOV TABLEL,R3 2$: MOV ENTRYN,R4 CMP R3,R4 BHIS 3$ CMP R1,(R3) BEQ 1$ ADD #6,R3 BR 2$ 3$: ADD #6,ENTRYN MOV R1,(R4) MOV CRFEN,R3 SUB #4,CRFEN MOV R3,2(R4) MOV R3,4(R4) CLR (R3) MOV ADDR1,-2(R3) BR 4$ 1$: MOV CRFEN,R4 SUB #4,CRFEN MOV R4,@4(R3) MOV R4,4(R3) CLR (R4) MOV ADDR1,-2(R4) 4$: MOV CRFEN,R3 SUB #10,R3 CMP ENTRYN,R3 BHIS STOVFL RTS PC STOVFL: .PRINT #OFMSG JMP ERXIT PUTLAB: JSR PC,PUTARG TST R0 BEQ 1$ MOVB #':,R0 JSR PC,OUTCHR BIS #1,2(R2) 1$: RTS PC PUTARG: MOV TABLEL,R2 CLR R1 MOV ENTRYN,R4 2$: CMP R2,R4 BHIS 3$ CMP R3,(R2) BEQ 1$ ADD #6,R2 INC R1 BR 2$ 3$: CLR R0 RTS PC 1$: MOVB #'L,R0 JSR PC,OUTCHR MOV R2,-(SP) JSR PC,OCTOUT MOV (SP)+,R2 MOV #1,R0 RTS PC .PAGE .SBTTL IMPURE AREA CRFEN: .WORD 0 LINCT: .WORD 0 CODE: .WORD 0 CHRCT: .WORD 0 CONFIG: .WORD 0 PSR: .WORD 0 MM: .WORD 0 ATH: .WORD 0 INCHAN: .WORD 0 LDAHI: .WORD 0 LDALO: .WORD 0 CHKSUM: .WORD 0 LDACT: .WORD 0 LDAMOD: .WORD 0 SHORT: .WORD 0 HALTIN: .WORD 0 QUE: .BLKW 7*4 BADDR: .WORD 0 TABLEH: .WORD 0 TABLEL: .WORD 0 ENTRYN: .WORD 0 PASS: .WORD 0 STKADD: .WORD 0 STFLAG: .WORD 0 LD0: .WORD 0 ADDOLD: .WORD 0,0,0,0 ADDR1: .WORD 0 ADDR: .WORD 0 ARA: .BLKW 6. STADD: .WORD 0 FINADD: .WORD 0 INBLK: .WORD 0 OUTBLK: .WORD 0 INBUF: .BLKW 256. OUTBUF: .BLKW 512. INPT: .WORD 0 OUTPT: .WORD 0 TMP: .WORD 0 CMDOUT: .ASCII /;/ CMDSTR: .REPT 82. .BYTE 0 .ENDM .BYTE 0 .EVEN .PAGE .SBTTL CONSTANTS/MESSAGES STORAGE AREA REIS: .RAD50 /EIS/ RFIS: .RAD50 /FIS/ RFPU: .RAD50 /FPU/ BLKLDA: .RAD50 /SY TMPTMPTMP/ DEFEXT: .RAD50 /SAV/ .RAD50 /MAC/ .WORD 0,0 STA: .ASCII /START/<11>/=/<200> CRF: .ASCII <14><11>/GENERATED LABEL CREF TABLE/<12><0> FMT: .BYTE 14 .ASCII /;/<11><11><11><11><11>/ LOC .WORD / .ASCII /.ASCII .RAD50/<0> BADCKS: .ASCIZ /LDA MODULE-BAD CHECKSUM/ BADLDA: .ASCIZ /LDA MODULE-NO START ADDRESS GIVEN/ NORM: .ASCIZ /NO ROOM FOR LDA-SAVE CONVERSION SCRATCH FILE/ SYMTBL: .ASCII <14><11>/GENERATED LABEL SYMBOL TABLE/<12> .BYTE 0 LNERMS: .ASCII /SAVE FILE SHORTER THAN LENGTH SPECIFIED-FILE ZERO/ .ASCII / FILLED/<0> OFMSG: .ASCII /SYMBOL TABLE OVERFLOW/<0> STKMSG: .ASCII <15><12>/.GLOBL/<11>/STACK/<15><12>/STACK=/<200> STLAB: .ASCII /START:/<0> FIN1: .ASCII <11>/.END/<11>/START/<0> FIN2: .ASCII <11>/.END/<0> OUTERR: .ASCIZ /OUTPUT ERROR-ABORT/ INTMSG: .ASCII /AC0=%0/ .ASCII <15><12>/AC1=%1/<15><12>/AC2=%2/<15><12>/AC3=%3/<15><12> .ASCII /AC4=%4/<15><12>/AC5=%5/<15><12>/AC6=%6/<15><12> .ASCII /AC7=%7/<15><12> INTMS1: .ASCII /R0=%0/<15><12>/R1=%1/<15><12>/R2=%2/<15><12>/R3=%3/ .ASCII <15><12>/R4=%4/<15><12>/R5=%5/<15><12>/R6=%6/<15><12> .ASCII /SP=%6/<15><12>/R7=%7/<15><12>/PC=%7/<15><12> .ASCII <11>/.ASECT/ PEQ: .ASCII <15><12>/.=/<200> IDMES: .ASCIZ /RT-11 DISASSEMBLER V01J/ .EVEN .PAGE .SBTTL INSTRUCTION SET DECODEING TABLES .MACRO I NAME,CLEAR,SET,RTN,TYPE ID NAME,CLEAR,SET,RTN,TYPE,\J J=J+1 .ENDM .MACRO ID NAME,CLEAR,SET,RTN,TYPE,J .CSECT INAME NAM'J: .ASCII /NAME/ .BYTE 200 .CSECT NAMPTR .WORD NAM'J .CSECT BITCLR .WORD CLEAR .CSECT BITSET .WORD SET .CSECT EVLRTN .WORD RTN .CSECT TYPINS .IF NB,TYPE .WORD TYPE .IFF .WORD 0 .ENDC .ENDM ID .CSECT NAMPTR NAMLST: .CSECT BITCLR CLRLST: .CSECT BITSET SETLST: .CSECT EVLRTN EVLLST: .CSECT TYPINS CNFINS: J=0 I HALT,0,0,CBUFF I WAIT,0,1,NULL I RTI,0,2,NULL I BPT,0,3,NULL I IOT,0,4,NULL I RESET,0,5,NULL I RTT,0,6,NULL,P4045B I JMP,77,100,DST I RTS,7,200,DREG I SPL,7,230,DIG3,P45B I NOP,0,240,NULL I NOP,0,260,NULL I CLC,0,241,NULL I CLV,0,242,NULL I CLZ,0,244,NULL I CLN,0,250,NULL I CCC,0,257,NULL I SEC,0,261,NULL I SEV,0,262,NULL I SEZ,0,264,NULL I SEN,0,270,NULL I SCC,0,277,NULL I SWAB,77,300,DST I BR,377,400,BRCH I BNE,377,1000,BRCH I BEQ,377,1400,BRCH I BGE,377,2000,BRCH I BLT,377,2400,BRCH I BGT,377,3000,BRCH I BLE,377,3400,BRCH I JSR,777,4000,RDST I CLR,77,5000,DST I COM,77,5100,DST I INC,77,5200,DST I DEC,77,5300,DST I NEG,77,5400,DST I ADC,77,5500,DST I SBC,77,5600,DST I TST,77,5700,DST I ROR,77,6000,DST I ROL,77,6100,DST I ASR,77,6200,DST I ASL,77,6300,DST I MARK,77,6400,DIG6,P4045B I MFPI,77,6500,DST,P4045M I MTPI,77,6600,DST,P4045M I SXT,77,6700,DST,P4045B I MOV,7777,10000,SRCDST I CMP,7777,20000,SRCDST I BIT,7777,30000,SRCDST I BIC,7777,40000,SRCDST I BIS,7777,50000,SRCDST I ADD,7777,60000,SRCDST I MUL,777,70000,RSRC,EIS I DIV,777,71000,RSRC,EIS I ASH,777,72000,RSRC,EIS I ASHC,777,73000,RSRC,EIS I XOR,777,74000,RDST,P4045B I FADD,7,75000,DREG,FIS I FSUB,7,75010,DREG,FIS I FMUL,7,75020,DREG,FIS I FDIV,7,75030,DREG,FIS I SOB,777,77000,RDIG8,P4045B I BPL,377,100000,BRCH I BMI,377,100400,BRCH I BHI,377,101000,BRCH I BLOS,377,101400,BRCH I BVC,377,102000,BRCH I BVS,377,102400,BRCH I BCC,377,103000,BRCH I BCS,377,103400,BRCH I EMT,377,104000,DIG8 I TRAP,377,104400,DIG8 I CLRB,77,105000,DST I COMB,77,105100,DST I INCB,77,105200,DST I DECB,77,105300,DST I NEGB,77,105400,DST I ADCB,77,105500,DST I SBCB,77,105600,DST I TSTB,77,105700,DST I RORB,77,106000,DST I ROLB,77,106100,DST I ASRB,77,106200,DST I ASLB,77,106300,DST I MTPS,77,106400,DST,P03 I MFPD,77,106500,DST,P45M I MTPD,77,106600,DST,P45M I MFPS,77,106700,DST,P03 I MOVB,7777,110000,SRCDST I CMPB,7777,120000,SRCDST I BITB,7777,130000,SRCDST I BICB,7777,140000,SRCDST I BISB,7777,150000,SRCDST I SUB,7777,160000,SRCDST I CFCC,0,170000,NULL,FPU I SETF,0,170001,NULL,FPU I SETI,0,170002,NULL,FPU I SETD,0,170011,NULL,FPU I SETL,0,170012,NULL,FPU I LDFPS,77,170100,DST,FPU I STFPS,77,170200,DST,FPU I STST,77,170300,DST,FPU I CLRF,77,170400,FDST,FPU I TSTF,77,170500,FDST,FPU I ABSF,77,170600,FDST,FPU I NEGF,77,170700,FDST,FPU I MULF,377,171000,ACFSRC,FPU I MODF,377,171400,ACFSRC,FPU I ADDF,377,172000,ACFSRC,FPU I LDF,377,172400,ACFSRC,FPU I SUBF,377,173000,ACFSRC,FPU I CMPF,377,173400,ACFSRC,FPU I STF,377,174000,ACFDST,FPU I DIVF,377,174400,ACFSRC,FPU I STEXP,377,175000,ACDST,FPU I STCFI,377,175400,ACDST,FPU I STCFD,377,176000,ACFDST,FPU I LDEXP,377,176400,ACSRC,FPU I LDCIF,377,177000,ACSRC,FPU I LDCDF,377,177400,ACFSRC,FPU I <.WORD>,177777,0,DIG16 .PAGE .SBTTL HANDLER/SYMBOL TABLE STORAGE AREA .CSECT DEVICE HANDLR: .BLKW 20. ; SYMBOL TABLE/CREF STRUCTURE ; STARTING FROM THE END OF THE HANDLER AREA AND ; WORKING INTO HIGH MEMORY IS THE LABEL DEFINEING ; BLOCKS-EACH BLOCK 3 WORDS LONG ; WORD 1= LOCATION (VALUE) OF LABEL ; WORD 2-BIT 0 SET TO SHOW LOCATION HAS BEEN DEFINED IN OUTPUT ; WORD 2- ADDR OF 1ST LOCATION USED BLOCK ; WORD 3 ADDR OF LAST LOCATION USED BLOCK ; ; STARTING FROM THE HIGHEST USEABLE MEMORY AND WORKING DOWN ; ARE THE HOW USED BLOCKS-2 WORDS LONG EACH ; WORD 1 LINK TO NEXT HOW USED BLOCK FOR GIVEN LABEL ; WORD 2 ADDR OF USE OF LABEL .END START