!********************************************* !* * !* THIS ROUTINE RECODES FROM HEX INTO NEW * !* RANGE ASSEMBLY CODE. * !* * !********************************************* SYSTEMROUTINE NCODE(INTEGER START, FINISH, CA) SYSTEMROUTINESPEC MOVE(INTEGER L, FROM, TO) SYSTEMROUTINESPEC PHEX(INTEGER N) ROUTINESPEC PRIMARY DECODE ROUTINESPEC SECONDARY DECODE ROUTINESPEC TERTIARY DECODE ROUTINESPEC DECOMPILE CONSTSTRING (5) ARRAY OPS(0 : 127) = C ' ','JCC ','JAT ','JAF ',' ',' ',' ',' ', 'VAL ','CYD ','INCA ','MODD ','PRCL ','J ','JLK ','CALL ', 'ADB ','SBB ','DEBJ ','CPB ','SIG ','MYB ','VMY ','CPIB ', 'LCT ','MPSR ','CPSR ','STCT ','EXIT ','ESEX ','OUT ','ACT ', 'SL ','SLSS ','SLSD ','SLSQ ','ST ','STUH ','STXN ','IDLE ', 'SLD ','SLB ','TDEC ','INCT ','STD ','STB ','STLN ','STSF ', 'L ','LSS ','LSD ','LSQ ','RRTC ','LUH ','RALN ','ASF ', 'LDRL ','LDA ','LDTB ','LDB ','LD ','LB ','LLN ','LXN ', 'TCH ','ANDS ','ORS ','NEQS ','EXPA ','AND ','OR ','NEQ ', 'PK ','INS ','SUPK ',' ','COMA ','DDV ','DRDV ','DMDV ', 'SWEQ ','SWNE ','CPS ','TTR ','FLT ','IDV ','IRDV ','IMDV ', 'MVL ','MV ','CHOV ',' ','FIX ','RDV ','RRDV ','RDVD ', 'UAD ','USB ','URSB ','UCP ','USH ','ROT ','SHS ','SHZ ', 'DAD ','DSB ','DRSB ','DCP ','DSH ','DMY ','DMYD ','CBIN ', 'IAD ','ISB ','IRSB ','ICP ','ISH ','IMY ','IMYD ','CDEC ', 'RAD ','RSB ','RRSB ','RCP ','RSC ','RMY ','RMYD ',' ' INTEGER I, J, K, KP, KPP, N, OPCODE, FLAG, SIZE INTEGER L INTEGER TRACE, DECOMP, INSL, DEC INTEGER TOS, H, Q, INS, MASK, LITFILL, M, KPPP INTEGER PC INTEGER ALL CONSTINTEGERARRAY HX(0 : 15) = C '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' PC = 0 IF START>>18 # FINISH>>18 THEN START START = (FINISH>>18)<<18; ! FROM START OF SEGMENT CA = START FINISH ALL = FINISH-START !! !! VALIDATE CODE AREA TO BE DUMPED !! I = X'18000000'!ALL *LDTB_I *LDA_START *VAL_(LNB +1) *JCC_3,<BADADDR> !! NEWLINE WHILE PC < ALL THEN CYCLE FLAG = 0 H = 0 DEC = 0 MOVE(4,START+PC,ADDR(INS)) OPCODE = INS>>25<<1 IF OPCODE = 0 OR OPCODE = 254 OR 8 <= OPCODE <= 14 THEN START INSL = 16 FLAG = 1 FINISH ELSE START IF 2 <= OPCODE <= 8 THEN TERTIARY DECODE ELSE START IF X'8' <= OPCODE>>4 <= X'B' C AND OPCODE&X'F' < 7 THEN SECONDARY DECODE C ELSE PRIMARY DECODE FINISH FINISH DECOMPILE PC = PC+(INSL>>3) NEWLINE REPEAT RETURN BADADDR: PRINTSTRING(" INNACCESSIBLE CODE AREA PASSED TO NCODE FOR PRINTING - ") PHEX(START) PRINTSTRING(" TO ") PHEX(FINISH) NEWLINES(2) !*********************************************************************** !* ROUTINE TO INTERPRET PRIMARY FORMAT INSTRUCTION ROUTINE PRIMARY DECODE DEC = 1 K = INS<<7>>30 N = INS<<9>>25 UNLESS K = 3 THEN START INSL = 16 RETURN FINISH KP = INS<<9>>30 KPP = INS<<11>>29 IF KPP < 6 THEN INSL = 32 AND N = INS&X'3FFFF' C ELSE START UNLESS INS&X'30000' = 0 C THEN PRINTSTRING(' RES. FIELD #0 ') INSL = 16 FINISH END !*********************************************************************** !* ROUTINE TO INTERPRET SECONDARY FORMAT INSTRUCTIONS ROUTINE SECONDARY DECODE H = INS<<7>>31 Q = INS<<8>>31 N = INS<<9>>25 IF Q = 1 THEN INSL = 32 ELSE INSL = 16 END !*********************************************************************** !* ROUTINE TO INTERPRET TERTIARY FORMAT INSTRUCTIONS ROUTINE TERTIARY DECODE DEC = 3 KPPP = INS<<11>>29 IF KPPP > 5 THEN INSL = 16 ELSE INSL = 32 N = INS&X'3FFFF' IF INSL = 16 AND INS<<14>>16 # 0 C THEN PRINTSTRING(' 2 LS BITS #0 ') END !*********************************************************************** !* ROUTINE TO INTERPRET CURRENT INSTRUCTION ROUTINE DECOMPILE CONSTSTRING (12) ARRAY POP(0 : 31) = C 'N ','*** ','(LNB+N) ','(XNB+N) ', '(PC+N) ','(CTB+N) ','TOS ','B ', '(DR+N) ','*** ','(DR+(LNB+N))','(DR+(XNB+N))', '(DR+(PC+N)) ','(DR+(CTB+N))','(DR+TOS) ','*** ', 'ISN ','*** ','((LNB+N)) ','((XNB+N)) ', '((PC+N)) ','((CTB+N)) ','(TOS) ','(DR) ', 'ISB ','*** ','((LNB+N)+B) ','((XNB+N)+B) ', '((PC+N)+B) ','((CTB+N)+B) ','(TOS+B) ','(DR+B) ' CONSTSTRING (12) ARRAY TOP(0 : 7) = C 'N ','(DR+N) ','(LNB+N) ','(XNB+N) ', '(PC+N) ','(CTB+N) ','(DR) ','(DR+B) ' J = PC+CA PRINTSYMBOL(HX((J>>16)&3)) PRINTSYMBOL(HX((J>>12)&15)) PRINTSYMBOL(HX((J>>8)&15)) PRINTSYMBOL(HX((J>>4)&15)) PRINTSYMBOL(HX(J&15)) SPACES(4) !%CYCLE I=3,-1,0 !J=(INS>>(8*I))&X'FF' !%IF 32<=J<=123 %THEN PRINTSYMBOL(J) %ELSE PRINTSYMBOL('.') !%EXIT %IF I=2 %AND INSL=16 !%REPEAT !%IF INSL=16 %THEN SPACES(8) %ELSE SPACES(2) IF INSL = 16 THEN SPACES(4) IF INSL = 16 THEN START CYCLE J = 28,-4,16 PRINTSYMBOL(HX((INS>>J)&15)) REPEAT FINISH ELSE PHEX(INS) RETURN IF FLAG = 1 SPACE PRINTSTRING(OPS((OPCODE>>1))) SPACE IF DEC = 1 THEN START ; ! PRIMARY FORMAT IF K < 3 THEN START IF K = 1 THEN PRINTSTRING('(LNB+N) X') IF K = 2 THEN PRINTSTRING('@(LNB+N) X') IF K = 0 THEN PRINTSTRING(' X') IF K = 0 THEN START IF N>>6 = 1 THEN N = -(N!X'FFFFFF80') C AND PRINTSYMBOL('-') FINISH PRINTSYMBOL(HX((N>>4)&7)) PRINTSYMBOL(HX(N&15)) FINISH ELSE START PRINTSTRING(POP(KP*8+KPP)) IF INSL = 32 THEN START PRINTSTRING("X") IF (KP = 0 AND KPP = 0) OR KPP = 4 THEN START IF (N>>16) > 1 THEN N = -(N!X'FFFC0000') C AND PRINTSYMBOL('-') FINISH PRINTSYMBOL(HX((N>>16)&3)) CYCLE I = 12,-4,0 PRINTSYMBOL(HX((N>>I)&15)) REPEAT FINISH FINISH IF INS = X'62' THEN START ; ! LSS IN DECIMAL FOR KEITH PRINTSTRING(" (") WRITE(N,1) PRINTSTRING(")") FINISH FINISH IF DEC = 2 THEN START ; ! SECONDARY FORMAT PRINTSTRING(' X') PRINTSYMBOL(HX((INS>>20)&7)) PRINTSYMBOL(HX((INS>>16)&15)) IF INSL = 32 THEN START ! MASK PRINTSTRING(' X') PRINTSYMBOL(HX((INS>>12)&15)) PRINTSYMBOL(HX((INS>>8)&15)) ! LITERAL/FILLER PRINTSTRING(' X') PRINTSYMBOL(HX((INS>>4)&15)) PRINTSYMBOL(HX(INS&15)) PRINTSTRING(' H=') WRITE(H,1) FINISH FINISH IF DEC = 3 THEN START ; ! TERTIARY FORMAT PRINTSTRING(TOP(KPPP)) IF INSL = 32 THEN START ! M FIELD PRINTSTRING(' X') PRINTSYMBOL(HX((INS>>21)&15)) PRINTSTRING(' X') IF KPPP = 0 OR KPPP = 4 THEN START IF (N>>16) > 1 THEN N = -(N!X'FFFC0000') C AND PRINTSYMBOL('-') FINISH PRINTSYMBOL(HX((N>>16)&3)) CYCLE I = 12,-4,0 PRINTSYMBOL(HX((N>>I)&15)) REPEAT FINISH FINISH END END ENDOFFILE