%ROUTINE NCODE(%INTEGER START, FINISH, CA) %SWITCH SW(0 : 3) %INTEGER D1, D2, D3, D4, H1, H2, H3, LENGTH, K, M, X, Y, Z, PTR %INTEGER B0, B1, OPC %CONSTINTEGER BLANKS = M' ' %CONSTBYTEINTEGERARRAY HEX(0:15)=48,49,50,51,52,53,54,55,56,57, 65,66,67,68,69,70; %CONSTINTEGERARRAY C(0 : 127) = %C M' ',M' ',M' ',M' ',M'SPM ', M'BALR',M'BCTR',M'BCR ',M'SSK ',M'ISK ',M'SVC ',M' ',M' ', M' ',M' ',M' ',M'LPR ',M'LNR ',M'LTR ',M'LCR ', M'NR ',M'CLR ',M'OR ',M'XR ',M'LR ',M'CR ',M'AR ',M'SR ', M'MR ', M'DR ',M'ALR ',M'SLR ',M'LPDR',M'LNDR',M'LTDR',M'LCDR',M'HDR ', M' ',M' ',M' ',M'LDR ',M'CDR ',M'ADR ',M'SDR ',M'MDR ', M'DDR ',M'AWR ',M'SWR ',M'LPER',M'LNER',M'LTER', M'LCER',M'HER ',M' ',M' ',M' ',M'LER ',M'CER ',M'AER ', M'SER ',M'MER ',M'DER ',M'AUR ',M'SUR ', M'STH ',M'LA ',M'STC ',M'IC ',M'EX ',M'BAL ',M'BCT ',M'B ', M'LH ',M'CH ',M'AH ',M'SH ',M'MH ',M' ',M'CVD ',M'CVB ', M'ST ',M' ',M' ',M' ',M'N ',M'CL ',M'O ',M'X ', M'L ',M'C ',M'A ',M'S ',M'M ',M'D ',M'AL ',M'SL ', M'STD ',M' ',M' ',M' ',M' ',M' ',M' ',M' ', M'LD ',M'CD ',M'AD ',M'SD ',M'MD ',M'DD ',M'AW ', M'SW ',M'STE ',M' ',M' ',M' ',M' ', M' ',M' ',M' ',M'LE ',M'CE ',M'AE ',M'SE ',M'ME ', M'DE ',M'AU ',M'SU ' %CONSTINTEGERARRAY D(128 : 159) = %C M'IDL ',M' ',M'PC ',M'DIG ',M' ', M'RDD ',M'BXH ',M'BXLE',M'SRL ',M'SLL ', M'SRA ',M'SLA ',M'SRDL',M'SLDL',M'SRDA',M'SLDA',M'STM ',M'TM ', M'MVI ',M' ',M'NI ',M'CLI ',M'OI ',M'XI ',M'LM ', M' ',M' ',M' ',M'SDV ',M'TDV ',M'HDV ',M'CKC' %CONSTINTEGERARRAY E(208 : 255) = %C M'SSP ',M'MVN',M'MVC ',M'MVZ ',M'NC ', M'CLC ',M'OC ',M'XC ',M'LSP ',M' ',M' ',M' ',M'TR ', M'TRT ',M'ED ',M'EDMK', M' ',M' ',M' ',M' ',M' ',M' ', M' ',M' ',M' ',M' ',M' ',M' ', M' ',M' ',M' ',M' ',M' ',M'MVO ',M'PACK',M'UNPK', M' ',M' ',M' ',M' ',M'ZAP ',M'CP ',M'AP ',M'SP ', M'MP ',M'DP ',M' ',M' ' !--------------------------------------UNPK----------------------------- %ROUTINE UNPK(%INTEGER Z) %INTEGER I %IF Z = BLANKS %THEN SPACES(4) %ELSE %START %CYCLE I=12,-4,0 PRINTSYMBOL(HEX(Z>>I&15)) %REPEAT %FINISH %END; ! OF UNPK %ROUTINE FETCH HALF B0=BYTEINTEGER(X+START) B1=BYTEINTEGER(X+START+1) K=B0<<16!B1 X=X+2 %END; ! OF FETCH HALF %ROUTINE PS(%INTEGER N) %INTEGER I %CYCLE I=24,-8,0 PRINTSYMBOL(N>>I&127) %REPEAT %END; ! OF PS %ROUTINE PRINTCODE NEWLINE UNPK(PTR+CA) WRITE(PTR+CA,5) SPACES(5); UNPK(H1) UNPK(H2); UNPK(H3) SPACES(4) %END; ! OF PRINTCODE %ROUTINE DB(%INTEGER D, B) WRITE(D,4); PRINTSTRING("(") WRITE(B,2); PRINTSTRING(")") %END; ! OF DB ! START = START&(-4) X = 0 Y = FINISH-START %CYCLE %IF X >= Y %THEN %RETURN H2 = BLANKS H3 = BLANKS FETCH HALF H1 = K; M = B0>>6 -> SW(M) %UNLESS 160 <= B0 %AND B0 <= 207 INV: PTR = X-2 PRINTCODE %CONTINUE SW(0): ! RR FORMAT OPC = C(B0) -> INV %IF OPC = BLANKS PTR = X-2; PRINTCODE PS(OPC); WRITE(B1>>4,4) %CONTINUE %IF B0 = 4 PRINTSTRING(","); WRITE(B1&15,4); %CONTINUE SW(1): ! D(X,B) FORMAT INSTRUCTIONS OPC = C(B0) -> INV %IF OPC = BLANKS D1 = B1>>4 D3 = B1&15 FETCH HALF H2 = K PTR = X-4 PRINT CODE PS(OPC) WRITE(D1,4) PRINTSTRING(",") WRITE(K&4095,4) PRINTSTRING("(") WRITE(D3,2) PRINTSTRING(",") WRITE(K>>12,2) PRINTSTRING(")") %CONTINUE SW(2): ! R,R,D(B) AND SI FORMATS OPC = D(B0) -> INV %IF OPC = BLANKS Z = B0 D3 = B1 FETCH HALF H2 = K PTR = X-4 PRINT CODE PS(OPC) D2 = K>>12 D4 = K&4095 %UNLESS 134 <= Z <= 144 %OR Z = 152 %START;! SI FORMAT DB(D4,D2) PRINTSTRING(",") WRITE(D3,3) %CONTINUE %FINISH WRITE(D3>>4,4); PRINTSTRING(",") %UNLESS 136 <= Z <= 143 %START;! UNLESS SHIFTS WRITE(D3&15,4); PRINTSTRING(",") %FINISH DB(D4,D2); %CONTINUE SW(3): ! STORE TO STORE FORMATS OPC = E(B0); -> INV %IF OPC = BLANKS LENGTH = B1; FETCH HALF; H2 = K D1 = K&4095; D2 = K>>12; FETCH HALF; H3 = K PTR = X-6; PRINT CODE; PS(OPC) WRITE(LENGTH+1,4); PRINTSTRING(",") DB(D1,D2); PRINTSTRING(",") DB(H3&4095,H3>>12) %REPEAT %END; !OF RECODE %ENDOFFILE