; ; ;MACRO DISSAMBLER SUBROUTINE ; .TITLE DISASS ; ;F. BORGER ;MICHAEL REESE HOSPITAL, DEPT OF MEDICAL PHYSICS ;CHICAGO, IL ;NOV 10,1975 ; ; ;FORTRAN CALLING CONDITIONS ; ;CALL DISASS(IARR,OPT,OPND1,OPND2,ICNT,IPC) ; ;WHERE: ; ;IARR= ADDRESS OF (UP TO) 3 WORD CODE TO BE DISASSEMBLED ;OPT= ADDRESS OF LOGICAL*1 ARRAY FOR OPERATOR CODE (ASCII) ;OPND1= ADDRESS OF LOGICAL*1 ARRAY FOR POSSIBLE 1ST OPERAND (ASCII) ;OPND2= ADDRESS OF LOGICAL*1 ARRAY FOR POSSIBLE 2ND OPERAND (ASCII) ;ICNT= COUNT OF NUMBER OF WORDS DECODED ;IPC= CURRENT PC ; ; ; Modified by:- ; ; Phil Stephensen-Payne, ; c/o Systime Ltd., ; Concourse Computer Centre, ; 432 Dewsbury Road, ; LEEDS LS11 7DF, ; England. ; ; DISASS:: ;MAIN ENTRY IS HERE FROM FORTRAN CALL MOV 2(R5),BUFCUR ;STORE INPUT DATA ADDRESS MOV 4(R5),OUTPT1 ;SAVE FIRST OUTPUT POINTER MOV 6(R5),OUTPT2 ;SAVE 2ND OUTPUT POINTER MOV 10(R5),OUTPT3 ;AND 3RD ALSO MOV 12(R5),OUTCNT ;AND POINTER TO RETURN COUNTER CLR @12(R5) ;CLEAR COUNT FOR NOW MOV @14(R5),L.ADR ;SET UP PC MOV 14(R5),CURADD ;SAVE LOC OF PC IN MAIN PROGRAM CLR INITFL ;AND CLEAR FLAG JSR PC,L.GWRD ;GET A CODE MOV R4,SAVE1 ;SAVE IT FOR LATER USE MOV #170000,R0 ;BIT MASK TO R0 XOR R0,SAVE1 ;DIDDLE TOP FOUR BITS OF CODE CLR FPFLAG ;CLEAR FLAG BIT R0,SAVE1 ;ALL BITS NOW ZERO ? BNE 1$ ;NO IT ISN'T A FLOATING POINT INST. INC FPFLAG ;YES SET FLOATING POINT FLAG 1$: XOR R0,SAVE1 ;PUT BITS BACK TO WHAT THEY WERE ADD #2,L.ADR ;BUMP ADDRESS COUNTER MOV OUTPT1,R2 ;OUTPUT BUFFER POINTER TO R2 C1: JSR R5,CINSTR ;1ST GROUP FULL WORDS .WORD 0 ;MASK .WORD LIST1 ;ADDRESS OF CODE .WORD LIST1L ;LENGTH TABLE .WORD TABL1-LIST1-2 ;RELATIVE DIFF BR C5 JMP RESUME C5: JSR R5,CINSTR ;5TH GROUP RTS .WORD 7 .WORD LIST5 .WORD LIST5L .WORD TABL5-LIST5-2 BR C2 MOV OUTPT2,R2 ;POINT 2 2ND ASCII BUFFER MOVB #122,(R2)+ ;ASCII R TO BUFFER MOV SAVE1,R0 JSR PC,REGLFT+4 JMP RESUME C2: JSR R5,CINSTR ;2ND GROUP SINGLE OP .WORD 77 .WORD LIST2 .WORD LIST2L .WORD TABL2-LIST2-2 BR C3 MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER CLR MODE1 JSR PC,MODE ;CHECK 1 MODE JMP RESUME C3: JSR R5,CINSTR ;3RD GROUP BRANCHES .WORD 377 .WORD LIST3 .WORD LIST3L .WORD TABL3-LIST3-2 BR CA MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER MOV SAVE1,L.BYT ;TEMP USE BIC #177400,L.BYT ;STRIP BRANCH MOVB L.BYT,R4 ;SIGN EXTENSION MOVB ASL R4 ;MULT BY 2 ADD L.ADR,R4 ;CALCULATE ADDRESS JSR PC,PRINT ;BRANCHED TO JMP RESUME CA: JSR R5,CINSTR ;GROUP 3.5,TRAPS .WORD 377 .WORD LISTA .WORD LISTAL .WORD TABLA-LISTA-2 BR C8 MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER MOVB SAVE1,R4 ;8 FREE BITS BIC #177400,R4 ;CLEAR OUT POSSIBLE CARRY OF SIGN BIT JSR PC,PRBYTE ;ARGUMENT JMP RESUME C8: MOV SAVE1,R4 ; Restore FN Code JSR R5,CINSTR ;GROUP 3.6,SPL .WORD 7 .WORD LIST8 .WORD LIST8L .WORD TABL8-LIST8-2 BR C9 MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER MOVB SAVE1,R4 ;8 FREE BITS BIC #177770,R4 ;CLEAR OUT POSSIBLE CARRY OF SIGN BIT JSR PC,PRBYTE ;ARGUMENT JMP RESUME C9: JSR R5,CINSTR ;GROUP 3.7,MARK .WORD 77 .WORD LIST9 .WORD LIST9L .WORD TABL9-LIST9-2 BR C4 MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER MOVB SAVE1,R4 ;8 FREE BITS BIC #177700,R4 ;CLEAR OUT POSSIBLE CARRY OF SIGN BIT JSR PC,PRBYTE ;ARGUMENT JMP RESUME C4: JSR R5,CINSTR ;4TH GROUP JSR .WORD 777 .WORD LIST4 .WORD LIST4L .WORD TABL4-LIST4-2 BR CB MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER MOVB #122,(R2)+ ;ASCII R IN BUFFER MOV SAVE1,R0 ROR R0 ;ROTATE ROR R0 ;INTO ROR R0 ;POSITION ROR R0 ROR R0 ROR R0 JSR PC,REGLF1 ;CALLING REGISTER MOV OUTPT3,R2 ;POINT TO 3RD ASCII BUFFER CLR MODE1 JSR PC,MODE JMP RESUME ; ; CB: MOV SAVE1,R0 ; Get Op Code BIC #700,R0 ; Clear out register CMP R0,#77000 ; An illegal SOB? BNE 10$ ; If NE OK - carry on JMP CX ; Yes - treat as .WORD ; 10$: JSR R5,CINSTR ;MUL,DIV,ETC. .WORD 777 ;MASK .WORD LISTB ;LIST POINTER .WORD LISTBL ;NUMBER TO CHECK .WORD TABLB-LISTB-2 ;OFFSET BR C6 ;BRANCH IF CHECK FAILS MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER CMP #77000,R4 ;IS IT A SOB COMMAND ? BEQ SOBPRT ;YES MOV #1,SPFLAG ;INDICATE PRINT DEST, THEN REGISTER CLR MODE1 ;INDICATE SINGLE OP JSR PC,MODE ;PRINT DEST MODE JMP RESUME ;AND GO AGAIN SOBPRT: MOV SAVE1,R0 ;GET COMMAND BIC #177077,R0 ;REDUCE TO REGISTER ASH #-6,R0 ;CONVERT TO OCTAL # MOVB #'R,(R2)+ ;'R' TO ASCII BUFFER JSR PC,REGLF1 ;PRINT REG MOV OUTPT3,R2 ;POINT TO 3RD ASCII BUFFER MOV SAVE1,R0 ;GET CODE AGAIN BIC #177700,R0 ;GET OFFSET ASH #1,R0 ;CONVERT IT TO A BYTE OFFSET MOV L.ADR,R4 ;ADDRESS TO R4 SUB R0,R4 ;SUBTRACT BRANCH OFFSET JSR PC,PRINT ;PRINT ADDRESS JMP RESUME ;AND GO AGAIN C6: JSR R5,CINSTR ;6TH GROUP DOUBLE OP .WORD 7777 .WORD LIST6 .WORD LIST6L .WORD TABL6-LIST6-2 BR C7 MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER MOV #1,MODE1 JSR PC,MODE JMP RESUME C7: MOV SAVE1,R4 ;RESTORE FN CODE JSR R5,CINSTR ;7TH GROUP, MOST FLOATING POINT CODES .WORD 377 .WORD LIST7 .WORD LIST7L .WORD TABL7-LIST7-2 BR CX MOV OUTPT2,R2 ;POINT TO 2ND OUTPUT BUFFER CMP #174000,R4 ;STF CODE ? BEQ C7A ;BR IF YES CMP #175000,R4 ;STEXP ? BEQ C7A CMP #175400,R4 ;STCFI ? BEQ C7A CMP #176000,R4 ;STCFD ? BEQ C7A ;MUST DECODE DEST FIRST, THEN FP REG BIC #400,R4 ;CLEAR BIT SO AC REG DECODES RIGHT BIC #400,SAVE1 ;AND AT STORED LOCATION TOO MOV #1,SPFLAG ;SET SPECIAL MODE FLAG CLR MODE1 ;IND SINGLE OP INSTRUCTION JSR PC,MODE ;PRINT DEST MODE,THEN AC REG CLR SPFLAG ;CLEAR SPECIAL FLAG JMP RESUME ;AND TRY AGAIN C7A: ;HERE IF MUST PRINT ACX, THEN DEST MODE MOV SAVE1,R0 ;GET OP CODE TO R0 BIC #177477,R0 ;CLEAR TO FL ACC REG NUMBER ASH #-6,R0 ;ROTATE DOWN TO 2 BOTTOM BITS MOVB #'A,(R2)+ ;PUT ASCII 'AC' INTO SECOND BUFFER MOVB #'C,(R2)+ ADD #60,R0 ;CONVERT R0 TO ASCII DIGIT MOVB R0,(R2)+ ;AND PUT IN BUFFER MOV OUTPT3,R2 ;POINT TO 3RD BUFFER CLR MODE1 ;INDICATE SINGLE OP CODE JSR PC,MODE ;DO YOUR THING JMP RESUME ;AND TRY AGAIN CX: MOV #NAME71,R1 ;".WORD " ALL OTHERS CLR R5 ;NO CAR CTL JSR PC,MESSA1 MOV SAVE1,R4 MOV OUTPT2,R2 ;POINT TO SECOND ASCII BUFFER JSR PC,PRINT JMP RESUME ;AND RETURN LAST: .WORD 0 ; RESUME: MOV L.ADR,@CURADD ;UPDATE PC IN MAIN PROGRAM RTS PC ;RETURN TO MAIN PROGRAM ; ; ; ;ROUTINE TO INSERT ASCII STRING TERMINATED BY A @ BYTE ;INTO ASCII BUFFER ;ENTER WITH R1 POINTING TO TEXT TO BE INSERTED ;R2 PONTING TO CURRENT POSITION IN ASCII BUFFER ; MESSA1: MOVB (R1)+,(R2) ;XFER A CHARACTER CMPB (R2),#100 ;TERMINATOR ? BEQ MESOK ;YES INC R2 ;GOOD CHARACTER, INCREMENT POINTER BR MESSA1 ;AND DO ANOTHER MESOK: MOVB #40,(R2) ;CHANGE TERM TO SPACE RTS PC ;AND RETURN ; ; ; ;NOW THE VARIABLES AND DUMMY DATA BLOCK ; BYTECT: .WORD 0 ;STORAGE OF BYTE COUNT CARCTL: .WORD 0 ;STORAGE OF CARRIAGE CONTROL DUMMY: .WORD 0 ;DUMMY VARIABLE .WORD BYTECT ;ADDRESS OF BYTE COUNT VARIABLE .WORD CARCTL ;ADDRESS OF CAR CONTROL VAR. DUMMY1: .WORD 0 ;ADDRESS OF BUFFER START BUFFER: .BLKW 40. ;80 BYTE BUFFER BUFFE1: .BLKW 40. ;SPECIAL ASCII BUFFER L.GWRD: MOVB @BUFCUR,R4 ;GET NEXT BYTE IN R4 INC BUFCUR ;STEP TO NEXT BYTE BIC #177400,R4 ;CLEAR OUT SIGN EXTENSION MOV R4,-(SP) ;SAVE LOW BYTE MOVB @BUFCUR,R4 ;GET HIGH BYTE INC BUFCUR ;STEP TO NEXT WORD SWAB R4 ;POSITION HIGH BYTE BIC #377,R4 ;CLEAR OUT SIGN EXTENSION BIS (SP)+,R4 ;MERGE IN LOW BYTE INC @OUTCNT ;COUNT ONE WORD DECODED RTS PC ;AND RETURN ; ; PRINT: PRBYTE: ;CHANGED TO USE SYSTEM SUBROUTINE WHICH WILL ;PRINT THE NUMBER IN R4 WITH LEADING ZERO SUPPRESSION ;ENTER WITH ; ;R4 CONTAINING NUMBER TO BE CONVERTED AND INSERTED INTO ;ASCII BUFFER ;R2 CONTAINING POINTER TO NEXT BYTE IN ASCII BUFFER ; ;ON RETURN R2 POINTS TO NEXT AVAILABLE BYTE IN BUFFER ; MOV R0,-(SP) ;SAVE USED REGISTERS MOV R1,-(SP) MOV R2,R0 ;BUFFER POINTER TO R0 MOV R4,R1 ;NUMBER TO R1 CLR R2 ;INDICATE LEADING ZERO SUPPRESS JSR PC,$CBOMG ;CALL SYSTEM ROUTINE MOV R0,R2 ;ON RETURN UPDATE BUFFER POINTER MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R0 RTS PC ;AND RETURN ;SUBROUTINE TO FIND INSTRUCTIONS ;FORMAT ;JSR R5,CINSTR ;.WORD MASK ;.WORD LIST CODES ;.WORD LIST LENGTH ;.WORD LIST NAME-LIST CODES-2 ;POSSIBLE INSTRUCTION IN R4 CINSTR: BIC (R5)+,R4 ;MASK 1ST ARG MOV (R5)+,R3 ;TABLE LOC MOV (R5)+,R0 ;TABLE LENGTH MOV (R5)+,INDX ;RELATIVE DIFF CHINST: CMP R4,(R3)+ ;CHECK TABLE BNE NOTONE MOV 0(R3),R1 ;INDEX ON R3 INDX=.-2 MOV R5,-(SP) ;SAVE R5 CLR R5 ;NULL CARRIAGE CONTROL JSR PC,MESSA1 ;PRINT NAME MOV (SP)+,R5 ;RESTORE R5 TST (R5)+ ;BUMP RETURN RTS R5 ;RETURN WITH INSTRUCTION NOTONE: DEC R0 ;END LIST? BNE CHINST RTS R5 ;RETURN,NONE FOUND SAVEMD: .WORD 0 MODE1: .WORD 0 ;COUNTER SPFLAG: .WORD 0 ;SPECIAL MODE FLAG MODE: CLR SFLAG1 CLR SFLAG2 MODEX: MOV SAVE1,R4 ;RESTORE WORD TST MODE1 ;CHECK FOR # BEQ MODECK ;ONLY ONE ROR R4 ;ROTATE 6 RIGHT ROR R4 ROR R4 ROR R4 ROR R4 ROR R4 MODECK: DEC MODE1 ;RESET FOR NEXT TIME MOV R4,SAVEMD ;SAVE ROTATED R4 BIC #177700,R4 ;MASK JUNK CMP #27,R4 ;IMMEDIATE BEQ EQ27 CMP #37,R4 ;ABSOLUTE BEQ EQ37 CMP #67,R4 ;RELATIVE BEQ EQ67 CMP #77,R4 ;REL DEFERRED BEQ EQ77 BIC #7,R4 ;MODE ONLY CMP #0,R4 ;REGISTER BEQ EQ0 CMP #10,R4 ;DEFERRED BEQ EQ1 CMP #20,R4 ;AUTO-INC BEQ EQ2 CMP #30,R4 ;AUTO-INC DEF BEQ EQ3 CMP #40,R4 ;AUTO-DEC BEQ EQ4 CMP #50,R4 ;AUTO-DEC DEF BEQ EQ5 CMP #60,R4 ;INDEXED BEQ EQ6 BR EQ7 ;ONLY ONE LEFT EQ27: JMP EQ27A EQ37: JMP EQ37A EQ67: JMP EQ67A EQ77: JMP EQ77A EQ0: JMP EQ0A EQ1: JMP EQ1A EQ2: JMP EQ2A EQ3: JMP EQ3A EQ4: JMP EQ4A EQ5: JMP EQ5A EQ6: JMP EQ6A EQ7: JMP EQ7A EQ0A: TST FPFLAG ;FLOATING POINT INSTRUCTION ? BEQ EQ0A1 ;NO MOVB #'A,(R2)+ ;YES, ADD 'AC' MOVB #'C,(R2)+ ;INSTEAD OF 'R' BR EQ0A2 EQ0A1: MOVB #'R,(R2)+ ;REGISTER MODE EQ0A2: JSR PC,REGLFT JMP HOUSKP EQ1A: JSR PC,REGPAR ;DEFERRED MODE JMP HOUSKP EQ2A: JSR PC,REGPAR ;AUTO-INC MOVB #'+,(R2)+ JMP HOUSKP EQ3A: MOVB #'@,(R2)+ ;AUTO-INC DEF JSR PC,REGPAR MOVB #'+,(R2)+ JMP HOUSKP EQ4A: MOVB #'-,(R2)+ ;AUTO-DEC JSR PC,REGPAR JMP HOUSKP EQ5A: MOVB #'@,(R2)+ ;AUTO-DEC DEF MOVB #'-,(R2)+ JSR PC,REGPAR JMP HOUSKP EQ6A: JSR PC,GDATA ;AN INDEX WORD CLR R5 ;NO CARR CTL JSR PC,PRINT ;INDEX JSR PC,REGPAR ;REGISTER JMP HOUSKP EQ7A: MOVB #'@,(R2)+ ;INDEX DEF BR EQ6A ;REST AS IN EQ6A EQ27A: MOVB #'#,(R2)+ ;IMMEDIATE JSR PC,GDATA ;WORD CLR R5 ;NO CARR CONTROL JSR PC,PRINT JMP HOUSKP EQ37A: MOVB #'@,(R2)+ ;ABSOLUTE ADDRESS BR EQ27A EQ67A: JSR PC,GDATA ;RELATIVE ADDRESS ADD L.ADR,R4 ;ACTUAL " CLR R5 ;NO CARR CTL JSR PC,PRINT JMP HOUSKP EQ77A: MOVB #'@,(R2)+ ;RELATIVE DEF BR EQ67A ;REST AS IN EQ67A SFLAG1: .WORD 0 SAV1ST: .WORD 0 SFLAG2: .WORD 0 SAV2ND: .WORD 0 REGLFT: MOV SAVEMD,R0 ;PRINT REGISTER REGLF1: BIC #177770,R0 CMP #6,R0 ;IS IT SP / BNE RTEST2 ;NO DEC R2 ;YES DECREMENT POINTER MOVB #'S,(R2)+ ;PUT SP INTO ASCII BUFFER MOVB #'P,(R2)+ RTS PC ;AND RETURN RTEST2: CMP #7,R0 ;MAYBE IT'S PC ? BNE RTEST3 ;NO DEC R2 ;YES, DEC POINTER MOVB #'P,(R2)+ ;PUT PC INTO ASCII BUFFER MOVB #'C,(R2)+ RTS PC ;AND RETURN RTEST3: ADD #'0,R0 ;ITS REG 0 TO 5 MOVB R0,(R2)+ RTS PC REGPAR: MOVB #'(,(R2)+ ;STORE "(R" MOVB #'R,(R2)+ JSR PC,REGLFT ;WHICH REG? MOVB #'),(R2)+ ;STORE ")" RTS PC HOUSKP: TST MODE1 ;HOUSKEEPING BMI NOMOR ;IS THERE ANOTHER MODE ? MOV OUTPT3,R2 ;YES POINT TO 3RD ASCII BUFFER JMP MODEX NOMOR: TST SPFLAG ;PRINT REG FIRST ? BEQ HOUSRT ;NO MOV SAVE1,R0 ;GET CODE AGAIN BIC #177077,R0 ;MASK OUT OTHER BITS ASH #-6,R0 ;MAKE IT AN OCTAL DIGIT MOV OUTPT3,R2 ;POINT TO 3RD ASCII BUFFER TST FPFLAG ;FLOATING POINT INSTRUCTION ? BEQ 1$ ;BR IF NOT MOVB #'A,(R2)+ ;YES PUT ASCII 'AC' INTO MOVB #'C,(R2)+ ;INTO BUFFER BR 2$ 1$: MOVB #'R,(R2)+ ;INSERT "R" INTO ASCII BUFFER 2$: JSR PC,REGLF1 ;PRINT REGISTER CLR SPFLAG ;CLEAR FLAG HOUSRT: RTS PC GDATA: JSR PC,L.GWRD ;A WORD ADD #2,L.ADR ;CORRECT ADDRESS TST MODE1 ;1 OR 2 WORDS BMI NSAVE MOV R4,SAV1ST ;1ST DATA WORD INC SFLAG1 RTS PC ;1ST RETURN NSAVE: MOV R4,SAV2ND ;2ND DATA INC SFLAG2 RTS PC ;2ND RETURN ;2ND TIME MODE1=0 DOUBLE OP ; =-1 SINGLE OP ;3RD TIME MODE1=-1 DOUBLE OP MUST RETURN LIST1: .WORD 241 ;CLC .WORD 261 ;SEC .WORD 242 ;CLV .WORD 262 ;SEV .WORD 244 ;CLZ .WORD 264 ;SEZ .WORD 250 ;CLN .WORD 270 ;SEN .WORD 257 ;CCC .WORD 277 ;SCC .WORD 170000 ;CFCC .WORD 170001 ;SETF .WORD 170002 ;SETI .WORD 170011 ;SETD .WORD 170012 ;SETL .WORD 000243 ;CLCV=CLC!CLV .WORD 000245 ;CLCZ=CLC!CLZ .WORD 000246 ;CLVZ=CLV!CLZ .WORD 000247 ;CLCVZ=CLC!CLV!CLZ .WORD 000251 ;CLCN=CLC!CLN .WORD 000252 ;CLVN=CLV!CLN .WORD 000253 ;CLCVN=CLC!CLV!CLN .WORD 000254 ;CLZN=CLZ!CLN .WORD 000255 ;CLCZN=CLC!CLZ!CLN .WORD 000256 ;CLVZN=CLV!CLZ!CLN .WORD 000263 ;SECV=SEC!SEV .WORD 000265 ;SECZ=SEC!SEZ .WORD 000266 ;SEVZ=SEV!SEZ .WORD 000267 ;SECVZ=SEC!SEV!SEZ .WORD 000271 ;SECN=SEC!SEN .WORD 000272 ;SEVN=SEV!SEN .WORD 000273 ;SECVN=SEC!SEV!SEN .WORD 000274 ;SEZN=SEZ!SEN .WORD 000275 ;SECZN=SEC!SEZ!SEN .WORD 000276 ;SEVZN=SEV!SEZ!SEN .WORD 000000 ;HALT .WORD 000001 ;WAIT .WORD 000002 ;RTI .WORD 000003 ;BPT .WORD 000004 ;IOT .WORD 000005 ;RESET .WORD 000006 ;RTT .WORD 000240 ;NOP .WORD 170003 ;LDUB LIST1L=<.-LIST1>/2 ; Symbolic length of table LIST2: .WORD 5000 ;CLR .WORD 105000 ;CLRB .WORD 5100 ;COM .WORD 105100 ;COMB .WORD 5200 ;INC .WORD 105200 ;INCB .WORD 5300 ;DEC .WORD 105300 ;DECB .WORD 5400 ;NEG .WORD 105400 ;NEGB .WORD 5500 ;ADC .WORD 105500 ;ADCB .WORD 5600 ;SBC .WORD 105600 ;SBCB .WORD 5700 ;TST .WORD 105700 ;TSTB .WORD 6000 ;ROR .WORD 106000 ;RORB .WORD 6100 ;ROL .WORD 106100 ;ROLB .WORD 6200 ;ASR .WORD 106200 ;ASRB .WORD 6300 ;ASL .WORD 106300 ;ASLB .WORD 100 ;JMP .WORD 300 ;SWAB .WORD 6600 ;MTPI .WORD 106600 ;MTPD .WORD 6500 ;MFPI .WORD 106500 ;MFPD .WORD 170100 ;LDFPS .WORD 170200 ;STFPS .WORD 170300 ;STST .WORD 170400 ;CLRF/D .WORD 170500 ;TSTF/D .WORD 170600 ;ABSF/D .WORD 170700 ;NEGF/D .WORD 6700 ;SXT .WORD 106700 ;MFPS .WORD 106400 ;MTPS LIST2L=<.-LIST2>/2 ; Symbolic length of table LIST3: .WORD 400 ;BR .WORD 1000 ;BNE .WORD 1400 ;BEQ .WORD 2000 ;BGE .WORD 2400 ;BLT .WORD 3000 ;BGT .WORD 3400 ;BLE .WORD 100000 ;BPL .WORD 100400 ;BMI .WORD 101000 ;BHI .WORD 101400 ;BLOS .WORD 102000 ;BVC .WORD 102400 ;BVS .WORD 103000 ;BCC .WORD 103400 ;BCS LIST3L=<.-LIST3>/2 ; Symbolic length of table LISTA: .WORD 104000 ;EMT TRAP .WORD 104400 ;TRAP " LISTAL=<.-LISTA>/2 ; Symbolic length of table LIST4: .WORD 4000 ;JSR .WORD 74000 ;XOR LIST4L=<.-LIST4>/2 ; Symbolic length of table LISTB: .WORD 70000 ;MUL .WORD 71000 ;DIV .WORD 72000 ;ASH .WORD 73000 ;ASHC .WORD 77000 ;SOB LISTBL=<.-LISTB>/2 ; Symbolic length of table LIST5: .WORD 200 ;RTS .WORD 75000 ;FADD .WORD 75010 ;FSUB .WORD 75020 ;FMUL .WORD 75030 ;FDIV LIST5L=<.-LIST5>/2 ; Symbolic length of table LIST6: .WORD 10000 ;MOV .WORD 110000 ;MOVB .WORD 020000 ;CMP .WORD 120000 ;CMPB .WORD 030000 ;BIT .WORD 130000 ;BITB .WORD 040000 ;BIC .WORD 140000 ;BICB .WORD 050000 ;BIS .WORD 150000 ;BISB .WORD 060000 ;ADD .WORD 160000 ;SUB LIST6L=<.-LIST6>/2 ; Symbolic length of table LIST7: .WORD 171000 ;MULF .WORD 171400 ;MODF .WORD 172000 ;ADDF .WORD 172400 ;LDF .WORD 173000 ;SUBF .WORD 173400 ;CMPF .WORD 174000 ;STF .WORD 174400 ;DIVF .WORD 175000 ;STEXP .WORD 175400 ;STCFI .WORD 176000 ;STCFD .WORD 176400 ;LDEXP .WORD 177000 ;LDCIF .WORD 177400 ;LDCDF LIST7L=<.-LIST7>/2 ; Symbolic length of table LIST8: .WORD 230 ;SPL LIST8L=<.-LIST8>/2 ; Symbolic length of table LIST9: .WORD 6400 ;MARK LIST9L=<.-LIST9>/2 ; Symbolic length of table TABL1: .WORD NAM07,NAM08,NAM09 .WORD NAM10,NAM11,NAM12 .WORD NAM13,NAM14 .WORD NAM16,NAM17,NAM74 .WORD NAM75,NAM76,NAM77 .WORD NAM78,NAM103,NAM104 .WORD NAM105,NAM106,NAM107 .WORD NAM108,NAM109,NAM110 .WORD NAM111,NAM112,NAM113 .WORD NAM114,NAM115,NAM116 .WORD NAM117,NAM118,NAM119 .WORD NAM120,NAM121,NAM122 .WORD NAM123,NAM124,NAM125 .WORD NAM126,NAM127,NAM128 .WORD NAM137,NAM129,NAM130 ; ; TABL2: .WORD NAM18,NAM19,NAM20 .WORD NAM21,NAM22,NAM23 .WORD NAM24,NAM25,NAM26 .WORD NAM27,NAM28,NAM27A .WORD NAM28A,NAM29 .WORD NAM30,NAM31,NAM32 .WORD NAM33,NAM34,NAM35 .WORD NAM36,NAM37,NAM38 .WORD NAM39,NAM40,NAM41 .WORD NAM41A,NAM41B,NAM41C .WORD NAM41D .WORD NAM79,NAM80,NAM81 .WORD NAM82,NAM83,NAM84 .WORD NAM85 .WORD NAM100,NAM101,NAM102 ; ; TABL3: .WORD NAM42,NAM43,NAM44 .WORD NAM45,NAM46,NAM47 .WORD NAM48,NAM49,NAM50 .WORD NAM51,NAM52,NAM53 .WORD NAM54,NAM55,NAM56 ; ; TABLA: .WORD NAM72,NAM73 TABL4: .WORD NAM57,NAM57A TABLB: .WORD NAM00,NAM01,NAM02,NAM03,NAM04 TABL5: .WORD NAM58,NAM131,NAM132 .WORD NAM133,NAM134 TABL6: .WORD NAM59,NAM60,NAM61 .WORD NAM62,NAM63,NAM64 .WORD NAM65,NAM66,NAM67 .WORD NAM68,NAM69,NAM70 TABL7: .WORD NAM86,NAM87,NAM88 .WORD NAM89,NAM90,NAM91 .WORD NAM92,NAM93,NAM94 .WORD NAM95,NAM96,NAM97 .WORD NAM98,NAM99 TABL8: .WORD NAM135 TABL9: .WORD NAM136 NAM00: .ASCII "MUL@" NAM01: .ASCII "DIV@" NAM02: .ASCII "ASH@" NAM03: .ASCII "ASHC@" NAM04: .ASCII "SOB@" NAM07: .ASCII "CLC @" NAM08: .ASCII "SEC @" NAM09: .ASCII "CLV @" NAM10: .ASCII "SEV @" NAM11: .ASCII "CLZ @" NAM12: .ASCII "SEZ @" NAM13: .ASCII "CLN @" NAM14: .ASCII "SEN @" NAM16: .ASCII "CCC @" NAM17: .ASCII "SCC @" NAM18: .ASCII "CLR@" NAM19: .ASCII "CLRB@" NAM20: .ASCII "COM@" NAM21: .ASCII "COMB@" NAM22: .ASCII "INC@" NAM23: .ASCII "INCB@" NAM24: .ASCII "DEC@" NAM25: .ASCII "DECB@" NAM26: .ASCII "NEG@" NAM27: .ASCII "NEGB@" NAM28: .ASCII "ADC@" NAM27A: .ASCII "ADCB@" NAM28A: .ASCII "SBC@" NAM29: .ASCII "SBCB@" NAM30: .ASCII "TST@" NAM31: .ASCII "TSTB@" NAM32: .ASCII "ROR@" NAM33: .ASCII "RORB@" NAM34: .ASCII "ROL@" NAM35: .ASCII "ROLB@" NAM36: .ASCII "ASR@" NAM37: .ASCII "ASRB@" NAM38: .ASCII "ASL@" NAM39: .ASCII "ASLB@" NAM40: .ASCII "JMP@" NAM41: .ASCII "SWAB@" NAM41A: .ASCII "MTPI@" NAM41B: .ASCII "MTPD@" NAM41C: .ASCII "MFPI@" NAM41D: .ASCII "MFPD@" NAM42: .ASCII "BR@" NAM43: .ASCII "BNE@" NAM44: .ASCII "BEQ@" NAM45: .ASCII "BGE@" NAM46: .ASCII "BLT@" NAM47: .ASCII "BGT@" NAM48: .ASCII "BLE@" NAM49: .ASCII "BPL@" NAM50: .ASCII "BMI@" NAM51: .ASCII "BHI@" NAM52: .ASCII "BLOS@" NAM53: .ASCII "BVC@" NAM54: .ASCII "BVS@" NAM55: .ASCII "BCC@" NAM56: .ASCII "BCS@" NAM57: .ASCII "JSR@" NAM57A: .ASCII "XOR@" NAM58: .ASCII "RTS@" NAM59: .ASCII "MOV@" NAM60: .ASCII "MOVB@" NAM61: .ASCII "CMP@" NAM62: .ASCII "CMPB@" NAM63: .ASCII "BIT@" NAM64: .ASCII "BITB@" NAM65: .ASCII "BIC@" NAM66: .ASCII "BICB@" NAM67: .ASCII "BIS@" NAM68: .ASCII "BISB@" NAM69: .ASCII "ADD@" NAM70: .ASCII "SUB@" NAME71: .ASCII ".WORD @" NAM72: .ASCII "EMT@" NAM73: .ASCII "TRAP@" NAM74: .ASCII "CFCC@" NAM75: .ASCII "SETF@" NAM76: .ASCII "SETI@" NAM77: .ASCII "SETD@" NAM78: .ASCII "SETL@" NAM79: .ASCII "LDFPS@" NAM80: .ASCII "STFPS@" NAM81: .ASCII "STST@" NAM82: .ASCII "CLRF@" NAM83: .ASCII "TSTF@" NAM84: .ASCII "ABSF@" NAM85: .ASCII "NEGF@" NAM86: .ASCII "MULF@" NAM87: .ASCII "MODF@" NAM88: .ASCII "ADDF@" NAM89: .ASCII "LDF@" NAM90: .ASCII "SUBF@" NAM91: .ASCII "CMPF@" NAM92: .ASCII "STF@" NAM93: .ASCII "DIVF@" NAM94: .ASCII "STEXP@" NAM95: .ASCII "STCFI@" NAM96: .ASCII "STCFD@" NAM97: .ASCII "LDEXP@" NAM98: .ASCII "LDCIF@" NAM99: .ASCII "LDCDF@" NAM100: .ASCII "SXT@" NAM101: .ASCII "MFPS@" NAM102: .ASCII "MTPS@" NAM103: .ASCII ".WORD CLC!CLV @" NAM104: .ASCII ".WORD CLC!CLZ @" NAM105: .ASCII ".WORD CLV!CLZ @" NAM106: .ASCII ".WORD CLC!CLV!CLZ @" NAM107: .ASCII ".WORD CLC!CLN @" NAM108: .ASCII ".WORD CLV!CLN @" NAM109: .ASCII ".WORD CLC!CLV!CLN @" NAM110: .ASCII ".WORD CLZ!CLN @" NAM111: .ASCII ".WORD CLC!CLZ!CLN @" NAM112: .ASCII ".WORD CLV!CLZ!CLN @" NAM113: .ASCII ".WORD SEC!SEV @" NAM114: .ASCII ".WORD SEC!SEZ @" NAM115: .ASCII ".WORD SEV!SEZ @" NAM116: .ASCII ".WORD SEC!SEV!SEZ @" NAM117: .ASCII ".WORD SEC!SEN @" NAM118: .ASCII ".WORD SEV!SEN @" NAM119: .ASCII ".WORD SEC!SEV!SEN @" NAM120: .ASCII ".WORD SEZ!SEN @" NAM121: .ASCII ".WORD SEC!SEZ!SEN @" NAM122: .ASCII ".WORD SEV!SEZ!SEN @" NAM123: .ASCII "HALT @" NAM124: .ASCII "WAIT @" NAM125: .ASCII "RTI @" NAM126: .ASCII "BPT @" NAM127: .ASCII "IOT @" NAM128: .ASCII "RESET @" NAM129: .ASCII "NOP @" NAM130: .ASCII "LDUB @" NAM131: .ASCII "FADD@" NAM132: .ASCII "FSUB@" NAM133: .ASCII "FMUL@" NAM134: .ASCII "FDIV@" NAM135: .ASCII "SPL@" NAM136: .ASCII "MARK@" NAM137: .ASCII "RTT @" .EVEN SAVE1: .WORD 0 ;CURRENT CODE BUFCUR: .WORD 0 ;ADDRSS OF CURRENT CODE IN BUFFER OUTPT1: .WORD 0 ;ADDRESS OF FIRST ASCII OUTPUT BUFFER OUTPT2: .WORD 0 ;ADDRESS OF SECOND ASCII BUFFER OUTPT3: .WORD 0 ;ADDRESS OF 3RD ASCII BUFFER OUTCNT: .WORD 0 ;ADDRESS OF VAR TO RECEIVE # OF WORDS DECODED CURADD: .WORD 0 ;ADDRESS OF CURRENT ADDRESS VAR IN MAIN PROGRAM INITFL: .WORD 1 ;FLAG FOR INITIAL DECODE FPFLAG: .WORD 0;FLOATING POINT INSTRUCTION FLAG L.BYT: .WORD 0 L.ADR: .WORD 0 .END