DECODE RT-11 SAV/LDA DISASSEMBLER ABSTRACT DECODE IS A PROGRAM WRITTEN TO RUN UNDER RT-11 OPERATING SYSTEM TO DECODE .SAV AND .LDA FILES INTO THEIR EQIVALENT MACRO CODE COMPLETE WITH SELF GENERATED LABELS, ABSOLUTE LOCATION, SYMBOL TABLE, CROSS REFERENCE TABLE, OCTAL, ASCII AND RADIX 50 EQUIVALENTS. THE OUTPUT CAN BE RUN THROUGH THE MACRO ASSEMBLER AND LINKED TO RECREATE THE ORIGINAL FILE. BY THE USE OF SWITCHES THE OUTPUT CODE CAN BE MADE TO REFLECT THE INSTRUCTION SET OF ONE MACHINE CONFIGURATION ONLY INSTEAD OF ALL POSSABLE INSTRUCTIONS. INSTRUCTIONS THE COMMAND STRING TO DECODE IS ; *OUTFIL=INFIL/SW:VAL/SW:VAL WHERE THE FILES HAVE THE STANDARD RT-11 FORMAT DEV:FILNAM.EXT[SIZE] DEFAULT EXTENTIONS ARE INPUT FILE .SAV OUTPUT FILE .MAC SWITCHES /A:VAL USED TO LIMIT THE ARITHMETIC INSTRUCTIONS DECODED INTO NEMONICS. THE ARITHMETIC OPTION GIVEN BY VAL VAL=EIS FIS FPU GIVES THE SET OF ARITHMETIC INSTRUCTIONS THAT ARE TO BE DECODED INTO NEMONICS. THE /A SWITCH IS RECOGNIZED ONLY IF THE /P SWITCH IS ALSO USED AND THE PROCESSOR SPECIFIED BY THE /P SWITCH ALLOWS THE OPTIONS GIVEN BY VAL(FIS IS ILLEGAL FOR A 45 AS IS FPU FOR A 40). NOTE THAT A VAL OF FIS ALSO IMPILES EIS IS ON THE SYSTEM. /L FLAGS THAT THE INPUT FILE IS AN LDA FILE. IN THIS CASE THE .EXT ON THE INPUT FILE MUST BE SPECIFIED AS .LDA. SEE EXAMPLES 1 AND 2 /M USED TO LIMIT THE INSTRUCTION SET DECODED INTO NEMONICS. IN THIS CASE IT FLAGS THE EXISTENCE OF A MEMORY MANAGEMENT UNIT ON THE SYSTEM. THIS SWITCH IS IGNORED IF THE /P SWITCH IS NOT USED OR IF IT IS, THE PROCESSOR SPECIFIED DOES NOT HAVE THE CAPABILITY OF MEMORY MANAGEMENT(THAT MEANS 40'S AND ABOVE) AND THEN ONLY THE MEMORY MANAGEMENT INSTRUCTIONS THAT APPLY TO THAT PROCESSOR. /P:VALUE. SPECIFIES THE TYPE OF PROCESSOR TO DECODE FOR. IF VALUE IS NOT GIVEN-ONLY THE BASIC INSTRUCTION SET IS DECODED INTO NEMONICS. IF /P IS NOT USED,ALL POSSABLE PDP-11 INSTRUCTIONS ARE DECODED INTO THEIR NEMONICS. VALUE IS THE DECIMAL NUMBER OF THE TYPE OF PROCESSOR ( 03,04,05,10,15,20,34,35,40,45,ETC) AND MUST BE FOLLOWED BY A '.' DECIMAL POINT TO TELL THE CSI THAT IT IS A DECIMAL NUMBER. THIS SWITCH MUST BE USED IF THE /A AND /M SWITCHES ARE TO BE RECOGNIZED AND THE OPTIONS SPECIFIED MUST BE COMPATABLE WITH THE PROCESSOR TYPE GIVEN BY THE /P:VAL. OR THEY WILL BE IGNORED. THE DISSASEMBLER BREAKS DOWN THE PDP-11 INSTRUCTION SET INTO 9 CATAGORIES 1 BASIC INSTRUCTION SET AS FOR THE PDP 11/04 THROUGH THE 11/20 SERIES. 2 PDP 11/03 UNIQUE INSTRUCTIONS. 3 PDP 11/40-11/45 UNIQUE BASIC INSTRUCTION SET. INCLUDES ALL THOSE NON OPTION INSTRUCTIONS UNIQUE TO THE 11/40 AND 45 COMPUTERS. 4 PDP 11/45 UNIQUE BASIC INSTRUCTION SET. INCLUDES ALL THE NON OPTION INSTRUCTIONS UNIQUE TO THE 11/45 COMPUTER 5 PDP 11/40-11/45 MEMORY MANAGEMENT INSTRUCTION SET. INCLUDES ALL THE MEMORY MANAGEMENT INSTRUCTIONS COMMON TO THE 11/40 AND 45 COMPUTERS 6 PDP 11/45 MEMORY MANAGEMENT INSTRUCTION SET. INCLUDES ALL THE MEMORY MANAGEMENT INSTRUCTIONS UNIQUE TO THE 11/45. 7 EIS INSTRUCTION SET 8 FIS INSTRUCTION SET 9 FPU INSTRUCTION SET VAL\INS. SET 1 2 3 4 5 6 7 8 9 NOVAL 0-2 X 4-20 3 X X X A A 21-40 X X A A A 41-77 X X X A A X A WHERE X=DEFAULT INSTRUCTION SET FOR VAL A=ACCEPTABLE ADDITONAL INSTRUCTION SET AVAILABLE FOR VAL =INSTRUCTIONS NOT AVAILABLE FOR VAL THE DECODER USES THE OPTIONS SPECIFIED IN THE COMMAND STRING TO CHOOSE WHICH COMBINATION OF INSTRUCTION SETS TO DECODE INTO NEMONICS( DEFAULT FOR NO OPTION SWITCHES IN THE COMMAND STRING IS ALL OF THEM) EXAMPLE 1 DISASSEMBLE A SAV FILE .R DECODE *PIP=PIP . EXAMPLE 2 DISASEMBLE AN LDA FILE .R DECODE *ROLLIN=ROLLIN.LDA/L . EXAMPLE 3 DISASSEMBLE FOR A BASIC MACHINE (11/20) .R DECODE *TEST=TEST/P . OR .R DECODE *TEST=TEST/P:20. . EXAMPLE 4 FOR AN LSI-11 WITH ARITHMETIC CHIP .R DECODE *TEST=TEST/P:3./A:FIS . EXAMPLE 5 AN 11/45 WITH MEMORY MANAGEMENT BUT NO FPU(EIS IS PART OF THE BASIC INSTRUCTION SET OF THE 45) .R DECODE *TEST=TEST/P:45./M . EXAMPLE 6 A FULL UP 55 WITH ALL THE OPTIONS .R DECODE *TEST=TEST/P:55./M/A:FPU . DISASSEMBLER OPERATION THE DISASSEMBLER MAKES 2 OR 3 PASSES OVER THE INPUT DEPENDING ON THE TYPE OF FILE IT IS: PASS 0 OPTIONAL LDA REFORMAT PASS CONVERTS AN LDA FILE INTO SAV FORMAT USEING A 128. BLOCK SCRATCH FILE ON THE SYSTEM DISK TO HOLD THE IMAGE FOR THE NEXT TWO PASSES PASS 1 SEARCH FOR LABELS DECODE THE SAV FILE AND LOCATE ALL MEMORY REFERENCES (SRC/DEST MODES 2 THRU 7 AND ALL BRANCHES ETC) AND ASSIGN A LABEL TO THE VALUE FOUND PASS 2 OUTPUT SOURCE DECODE AGAIN THE SOURCE NOW OUTPUTING IT SUBSTITUTEING LABELS FOR THE ABSOLUTE AND RELATIVE ADDRESSES FOUND IN PASS 1. GENERATED CODE THE OUTPUT OF THE DISASSEMBLER IS BROKEN INTO 7 PARTS: PART 1: DEFINITIONS 1 DEFINE ALL REGISTERS (AND ACCUMULATORS IF DECODEING FPU INSTRUCTIONS) 2 DECLARE THE LOCATION OF THE STACK STARTING LOCATION(IF FOUND) AS THE GLOBAL NAME 'STACK' THIS IS SO WHEN LINKING,THE STACK CAN BE PROPERLY PLACED BY THE USE OF THE /M SWITCH OF THE LINKER. WHEN LINKING,SPECIFY THE /M SWITCH, THE LINKER WILL COME BACK ASKING FOR THE STACK SYMBOL, JUST TYPE 'STACK' AND IT WILL BE PROPERLY PLACED. 3 DECLARES AN .ASECT 4 SETS THE POINT TO THE FIRST LOCATION DECODED (FOR SAVE FILES EITHER 1000 OR THE STARTING ADDRESS WHICH EVER IS LOWER AND FOR LDA FILES THE LOWEST ADDRESS FOUND) PART 2: LABEL DEFINITIONS THOSE LABELS GENERATED DURING PASS 1 AND WHOS VALUE IS EITHER A BYTE OR WHOSE VALUE IS OUTSIDE THE BOUNDRIES OF THE PROGRAM ARE DEFINED HERE IN THE FORM: LXXX=VALUE PART 3: GENERATED CODE THE GENERATED CODE LINE HAS SIX SEGMENTS 1 LABEL IF THE ADDRESS IS REFFERED TO BY A LABEL FOUND IN PASS 1, IT IS PRINTED OUT IN THE FORM LXXX: (IF THIS IS THE START ADDRESS THE LABEL START: PRECEEDS THIS LABEL ON THE LINE PREVIOUS ALL BY ITSELF) 2 INSTRUCTION NEMONIC OR .WORD DECLARATION 3 AS THE FIRST PART OF A COMMENT, THE LOCATION OF THE INSTRUCTION 4 THE NEXT ITEM IN THE COMMENT ARE THE OCTAL CONTENTS OF THE WORDS MAKEING UP THE INSTRUCTION. 5 THE THIRD ITEM IS A LIST OF THE EQUIVALENT ASCII CARACTERS OF THE WORDS THAT MAKE UP THE INSTRUCTION (ALL ASCII CHARACTERS WITH VALUES LESS THAN 40 ARE REPACED BY BLANKS) 6 THE LAST ITEM IN THE COMMENT IS THE RADIX 50 EQUIVALENT STRING OF THE WORDS OF THE INSTRUCTION IN THE CASE OF BLOCKS OF ZERO'S, THE FIRST ONE IS DECODEDED AS A HALT AND IF THE BLOCK GOES ON FOR A TOTAL OF MORE THAN 2 ZEROES, THE NEXT LINE IS A RESET OF THE POINTER TO THE FIRST NON ZERO WORD FOLLOWING THE BLOCK(IF THE BLOCK TERMINATES THE PROGRAM,THE BLOCK IS TERMINATED AT THE LAST WORD OF THE PROGRAM AND THE FINAL ZERO IS DECODED. PART 4 LEFT OVER LABELS ANY LABELS FOUND DURING PASS 1 THAT HAVE NOT BEEN DEFINED IN EITHER PARTS 2 OR 3 ARE DEFINED HERE IN THE SAME MANNER AS IN PART 2 PART 5 END STATEMENT THE END OF THE PROGRAM IS DECLARED FOR THE ASSEMBLER EITHER AS .END OR .END START DEPENDING ON IF A START ADDRESS WAS GIVEN. PART 6 SYMBOL TABLE A COMPLETE SYMBOL TABLE IS PRINTED OUT GIVEING EACH LABEL AND ITS VALUE(132 COLLUMN FORMAT). PART 7 CROSS REFERENCE TABLE A LISTING OF ALL LABELS AND THE ABSOLUTE LOCATIONS THAT REFERENCE THEM( EXCEPT THE DECLARATION OR LABEL DEFINITION LOCATION, THAT MUST BE OBTAINED FROM THE SYMBOL TABLE). POSSABLE MACRO ASSEMBLER ERRORS WHEN RUNNING THE RESULTING CODE THROUGH THE MACRO ASSEMBLER, THE FOLLOWING ERRORS CAN BE REPORTED: I ILLEGAL CHARACTER SUCH PRINTING CHARACTERS AS THE GRAVE ACCENT ARE NOT ACCEPTABLE TO THE MACRO ASSEMBLER EVEN IF THEY OCCOUR IN COMMENTS, SO IF SUCH A CHARACTER IS FOUND IN THE .ASCII // STATEMENT, IT WILL FLAGGED AS AN I ERROR EVEN THOUGH IT IS IN A COMMENT-THIS ERROR CAN BE IGNORED. Z INSTRUCTION INCOMPATABLE ON VARIOUS PDP-11 MODELS DATA, INTERPRETED AS INSTRUCTIONS, CAN COME UP AS THE MOST UNUSUAL INSTRUCTIONS-THIS ONE CAN BE IGNORED A ADDRESS ERROR ONLY KNOW CASE IS FOR SOB RX,.+2 WHERE DATA IS INTERPRETED AS AN SOB INSTRUCTION WITH AN OFFSET BRANCH DISTANCE OF 0 (.+2). THE ASSEMBLER TREATS THIS AS AN ERROR AND CHANGES IT TO SOB RX,. WHICH IS NOT THE SAME. DO NOT IGNORE THIS ERROR,CHECK ALL OCCOURANCES.