%CONTROL X'0FFFFFFF' !********************************************* !* * !* THIS ROUTINE RECODES FROM HEX INTO NEW * !* RANGE ASSEMBLY CODE. * !* * !********************************************* %SYSTEMROUTINE NCODE(%INTEGER START, FINISH, CA) %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' !* %ROUTINE MOVE(%INTEGER LENGTH, FROM, TO) %INTEGER I %RETURNIF LENGTH <= 0 I = X'18000000'!LENGTH *LSS_FROM *LUH_I *LDTB_I *LDA_TO *MV_%L=%DR %END; !OF MOVE !* %ROUTINE PHEX(%INTEGER N) %INTEGER I,J,H H=ADDR(N) %CYCLE I = 0,1,3 J=BYTEINTEGER(I+H) PRINTSYMBOL(HX(J>>4)) PRINTSYMBOL(HX(J&15)) %REPEAT %END; !OF PHEX !* 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, !! 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 %C %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