! reconstituted from intexts

EXTERNALROUTINE RECODE(INTEGER S, TO, BASE)
CONSTINTEGERARRAY OPCODES(0 : 255) =    C
     0(4),
M'SPM ',M'BALR',M'BCTR',M'BCR ',M'SSK ',M'ISK ',M'SVC ',     0(5),
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'LRDR',M'MXR ',M'MXDR',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'LRER',
M'AXR ',
M'SXR ',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'BC  ',M'LH  ',M'CH  ',
M'AH  ',
M'SH  ',M'MH  ',     0,
M'CVD ',
M'CVB ',M'ST  ',     0(3),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 ',
     0(6),
M'MXD ',
M'LD  ',M'CD  ',M'AD  ',M'SD  ',M'MD  ',M'DD  ',M'AW  ',M'SW  ',
M'STE ',
     0(7),
M'LE  ',
M'CE  ',M'AE  ',M'SE  ',M'ME  ',M'DE  ',M'AU  ',M'SU  ',
M'SSM',
     0,M'LPSW',M'DIAG',M'WRD ',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'TS  ',
M'NI  ',M'CLI ',M'OI  ',M'XI  ',M'LM  ',     0(3),
M'SIO ',
M'TIO ',M'HIO ',
M'TCH ',
     0(49),
M'MVN ',
M'MVC ',M'MVZ ',M'NC  ',M'CLC ',M'OC  ',M'XC  ',     0(4),
M'TR  ',
M'TRT ',M'ED  ',M'EDMK',     0(17),M'MVO ',M'PACK',M'UNPK',     0(4),
M'ZAP ',
M'CP  ',M'AP  ',M'SP  ',M'MP  ',M'DP  ',     0,     0
INTEGER J, K, L, M
INTEGER T
ROUTINESPEC HEX(INTEGER N)
ROUTINESPEC HEX8(INTEGER N)
ROUTINESPEC PUT(INTEGER S, C)

!printstring("RECODE(X'"); HEX8(S)
!printstring("', X'"); HEX8(TO)
!printstring("', X'"); HEX8(BASE)
!printstring("')".snl)
          S = S&(¬1)
BASE = BASE-S
L1:        NEWLINE
          NEWLINE AND RETURN IF S >= TO
PRINT STRING("C ")
          HEX8(BASE+S)
          SPACES(4)
          J = SHORTINTEGER(S);  S = S+2
          M = J>>8&255
          T = OPCODES(M)
          HEX(J)
          -> L1 IF T = 0
          IF M>>6 = 0 THEN START;       ! RR
             PUT(12,T)
             WRITE(J>>4&15,4)
             print symbol(',')
             WRITE(J&15,2)
             -> L1
          FINISH
          K = SHORTINTEGER(S);  S = S+2
          HEX(K)
          IF M>>6 = 1 THEN START;       !  RX
             PUT(8,T)
             WRITE(J>>4&15,4);  print symbol(',')
             WRITE(K&X'FFF',4);  print symbol('(')
             WRITE(J&15,2);  print symbol(',')
L3:           WRITE(K>>12&15,2);  print symbol(')')
             -> L1
          FINISH
          IF M&X'F8' = X'88' THEN START
             PUT(8,T)
             WRITE(J>>4&15,4);  print symbol(',')
L2:           WRITE(K&X'FFF',4);  print symbol('(')
             -> L3
          FINISH
          IF M > 192 THEN START
             L = SHORTINTEGER(S);  S = S+2
             HEX(L)
             PUT(4,T)
             WRITE(K&X'FFF',5);  print symbol('(')
             IF M>>4&15 # 15 THEN WRITE(J&255+1,2) C
                ELSE WRITE(J>>4&15,2)
             print symbol(',')
             WRITE(K>>12&15,2);  print symbol(')');  print symbol(',')
             WRITE(L&X'FFF',4);  print symbol('(')
             IF M>>4&15 = 15 THEN START
                WRITE(J&15,2);  print symbol(',')
             FINISH
             WRITE(L>>12&15,2);  print symbol(')')
             -> L1
          FINISH
          IF M = 134 OR M = 135 OR M = 144 OR M = 152 THEN START
             PUT(8,T)
             WRITE(J>>4&15,4);  print symbol(',')
             WRITE(J&15,2);  print symbol(',')
             -> L2
          FINISH
          PUT(8,T)
          WRITE(K&X'FFF',5);  print symbol('(')
          WRITE(K>>12&15,2);  print symbol(')')
          print symbol(',')
          WRITE(J&255,2)
          -> L1

ROUTINE HEX(INTEGER N)
CONSTBYTEINTEGERARRAY XSYM(0 : 15) = C
   '0', '1', '2', '3',
   '4', '5', '6', '7',
   '8', '9', 'A', 'B',
   'C', 'D', 'E', 'F'
INTEGER J, S
          CYCLE J = 1,1,4;  !8
             S = (N>>12)&15; !S = N>>28
             N = N<<4
             PRINTSYMBOL(XSYM(S))
          REPEAT
END

ROUTINE HEX8(INTEGER N)
CONSTBYTEINTEGERARRAY XSYM(0 : 15) = C
   '0', '1', '2', '3',
   '4', '5', '6', '7',
   '8', '9', 'A', 'B',
   'C', 'D', 'E', 'F'
INTEGER J, S
          CYCLE J = 1,1,8
             S = (N>>28)&15
             N = N<<4
             PRINTSYMBOL(XSYM(S))
          REPEAT
END

ROUTINE PUT(INTEGER SP, SYMS)
INTEGER I
         SPACES(SP)
         CYCLE I = 1,1,4
            PRINT SYMBOL(SYMS>>24&127); SYMS = SYMS << 8
         REPEAT
END

END

ENDOFFILE