You are on page 1of 37

$CHAREQU $SEGMENT DISASM *---------------------------------------------------------------------SUBROUTINE DISLIN CHARACTER*74 LINES(1200),THEOP*3,CHAR4*4,C4*4,C5*4,CIT*4 CHARACTER*20 SOURCE,DESTIN CHARACTER*30 ALTSRC,ALTDST,ALLOPS CHARACTER*8 MMADR,THEHEX,HEXADR,ALTHEX,VARHEX,ONEWRD,SRXHEX,DSXHEX,HEXEXT, HEXOF CHARACTER*2

CC(0:15),CCWRD,CWRDS(10) CHARACTER*1 LENEXT,CHR CHARACTER*10 TENBLK,CTMP10,HEXTMP,ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR,S 0URCE INTEGER*4 MEMADR,IT,BRATRG(4096,2),JSRTRG(4096,2),BRANUM,JSRNUM,SAVWHR INTEGER*4 LINPTR,BEFADR,HIBYT,LOBYT,IWHERE,L,M,HINIB,MHNIB,MLNIB,LONIB INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,NEWLEN,TRADDR INTEGER*4 ICIT,IJIJJI,IJIJJ2,IAIJJI,IAIJJ2,ADDREF(0:16383),ADDNDX,FNDHSH INTEGER*4 JQQWHR,JWHRQQ,INSTRB,BLKBEG,BLKEND,ALTSND,ALTDND,K,IADDR2 INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,K2BYTE,CURWRD,CMRWRD,CODEW(0:16383),WHERE INTEGER*2 IDCWRD,END,IT2(2),I2 INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3) INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1),CMBYTE(2) LOGICAL*4 NEWSTL,FIRST,RETRY,V10,V11 LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,LOGIC(10),WRDX,LNGX,CRUD,DCRUD LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54,PGECOM,XQUIET LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54,DODCW,DODCL LOGICAL*2 DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP,FOUND LOGICAL*2 SCREEN,PAGEQQ,DISK,ENDFIL,ARRGH,ARRGH2,DOBRA,DOJSR,MORE EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL) EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)),(CMRWRD,CCWRD,CMBYTE(1)) EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMB YT(0)) EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE),(SOURCE,S0URCE) EQUIVALENCE (IT,IT2(1)),(CIT,ICIT) COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54,/BEGINI/INSTRB COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 COMMON /FLAGS/SCREEN,PAGEQQ,DISK,ENDFIL,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJJ 2 COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT COMMON /NEWSTF/NEWLEN,NEWSTL,DODCW,DODCL,FIRST,/VERSNS/V10,V11 COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR COMMON /BRAJSR/BRATRG,JSRTRG,BRANUM,JSRNUM,DOBRA,DOJSR COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS,/REFS/ADDREF,ADDNDX,BLKBEG,BLKEND ,FOUND COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE COMMON /DISNUM/LINPTR,/ADRUN/SOURCE,DESTIN COMMON /SPECIA/ICIT COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT,/GARRH/ARRGH,ARRGH2,PGECOM,XQUIET COMMON /MODESQ/DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP SAVE /BITS/,/MORE/,/NOTS/,/FLAGS/,/SMASH/,/NEWSTF/,/CODE/,/DISASM/ SAVE /ADRMOD/,/DISNUM/,/ADRUN/,/EXTHEX/,/MODESQ/,/ABRLAD/,/BEGINI/,/REFS/ SAVE /LBLS/,/SPECIA/,/VERSNS/ SAVE CC,TENBLK,JQQWHR,JWHRQQ EXTERNAL HEXOF,FNDHSH,ENTHSH SAVE DATA CC(0)/'T '/,CC(1)/'F '/,CC(2)/'HI'/,CC(3)/'LS'/,CC(4)/'CC'/,CC(5)/'CS '/ DATA CC(6)/'NE'/,CC(7)/'EQ'/,CC(8)/'VC'/,CC(9)/'VS'/,CC(10)/'PL'/,CC(11)/'

MI'/ DATA CC(12)/'GE'/,CC(13)/'LT'/,CC(14)/'GT'/,CC(15)/'LE'/ DATA TENBLK/' '/ SRCX1 = .FALSE. SRCX2 = .FALSE. DSTX1 = .FALSE. DSTX2 = .FALSE. WRDX = .FALSE. LNGX = .FALSE. CTMP10 = ' ' IWHERE = WHERE INSTRB = WHERE JWHRQQ = WHERE LINSAV = LINPTR I = WHERE CALL FETCHA(CURWRD,L,M) SAVWHR = WHERE K = CURWRD THEHEX = HEXOF(K) LOGIC(10) = HINIB.GE.12 .AND. SCREEN CALL DOBITS IF (BIT7) THEN IF (BIT6) THEN LENEXT = 'Q' SIZE = 0 ELSE LENEXT = 'L' SIZE = 3 ENDIF ELSEIF (.NOT.BIT7) THEN IF (BIT6) THEN LENEXT = 'W' SIZE = 2 ELSE LENEXT = 'B' SIZE = 1 ENDIF ENDIF J = I + MEMADR ISAVEJ = J BEFADR = J + 2 ISAVEB = BEFADR HEXADR = HEXOF(J) IADDR2 = J IFB = FNDHSH(ADDREF(0),14,IADDR2) IF (IFB.EQ.-1) THEN LABEL = TENBLK ELSE LABEL = 'H_'//HEXADR(3:8)//TENBLK(1:2) CTMP10 = LABEL ENDIF HEXADR = '$'//HEXADR(3:8) ALLOPS = TENBLK OPS(1) = TENBLK OPS(2) = TENBLK OPS(3) = TENBLK VAL = '$'//THEHEX(5:8) ADDR = ' '//HEXADR DSTSRC = .FALSE. IEND = END/2 + 1

IEND = IEND*2 IF (WHERE.GT.IEND) THEN OPCODE = 'DC.B' VAL(4:5) = ' ' WRITE (OPS(1),'(SP,I4.3)') HIBYTE IT = HIBYTE C4 = CHAR4(IT) C5 = C4(4:4) LINES(LINPTR) = LABEL//OPCODE//OPS(1)//OPS(2)//OPS(3)//VAL//ADDR//C5 LINPTR = LINPTR+1 ELSE OPCODE = 'DC.W' IDCWRD = CURWRD IWHZZZ = WHERE IWHQQQ = WHERE IF (DODCL) THEN OPS(3) = ADDR CALL FETCH(CURWRD,L,M) IT2(1) = IDCWRD IT2(2) = CURWRD I = IT C4 = CHAR4(I) C5 = C4(1:4) THEHEX = HEXOF(IT) VAL = '$'//THEHEX(1:4)//' '//THEHEX(5:8) ADDR = OPS(3) OPCODE = 'DC.L ' CIT = C4(1:4) IF (ICIT.EQ.IT) THEN WRITE (ALLOPS,'(A1,A4,A1,6X,SP,I6.5,'','',I6.5)') '''',CIT,''' ',IDCWRD,CURWRD ELSE WRITE (ALLOPS,'(A1,A8,3X,SP,I6.5,'','',I6.5)') '$',THEHEX,IDCW RD,CURWRD ENDIF OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) OPS(3) = ALLOPS(21:30) LINES(LINPTR) = LABEL//OPCODE//OPS(1)//OPS(2)//OPS(3)//VAL//ADDR// C5 LINPTR = LINPTR + 1 WRDX = .TRUE. GOTO 8999 ELSE IT = IDCWRD C4 = CHAR4(IT) C5 = C4(3:4) WRITE (OPS(1),'(SP,I6.5)') IDCWRD ALLOPS = OPS(1) ENDIF IF (DODCW) THEN OPCODE = ' DC.W' GOTO 5449 ENDIF IF (HINIB.EQ.0) THEN CALL DO0 ELSEIF (HINIB.EQ.1) THEN SIZE = 1 OPCODE = 'MOVE.B' CALL DOADDR

&

IF (SRCEND.GT.1.AND.DSTEND.GT.1.AND.SRCMOD.NE.1.AND.DSTMOD.NE.1 .AND.(DSTMOD.NE.7.OR.DSTREG.LE.1)) THEN ALLOPS(1:SRCEND) = SOURCE(1:SRCEND) I = SRCEND+1 J = SRCEND+2 K = SRCEND+DSTEND+2 ALLOPS(I:I) = ',' ALLOPS(J:K) = DESTIN(1:DSTEND) I = K + 1 ALLOPS(I:30) = ' ' OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) THEN CALL DOABRL ELSEIF (DSTMOD.EQ.7) THEN CALL DSABRL ENDIF ALLOPS(21:30) = OPS(3) ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (HINIB.EQ.3) THEN SIZE = 2 OPCODE = 'MOVE.W' CALL DOADDR IF (SRCEND.GT.1.AND.DSTEND.GT.1.AND.(DSTMOD.NE.7.OR.DSTREG.LE.1)) ALLOPS(1:SRCEND) = SOURCE(1:SRCEND) IF (DESTIN(1:1).EQ.'A') OPCODE = 'MOVEA.W' I = SRCEND+1 J = SRCEND+2 K = SRCEND+DSTEND+2 ALLOPS(I:I) = ',' ALLOPS(J:K) = DESTIN(1:DSTEND) I = K + 1 ALLOPS(I:30) = ' ' OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) THEN CALL DOABRL ELSEIF (DSTMOD.EQ.7) THEN CALL DSABRL ENDIF ALLOPS(21:30) = OPS(3) ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (HINIB.EQ.2) THEN SIZE = 3 OPCODE = 'MOVE.L' CALL DOADDR IF (SRCEND.GT.1.AND.DSTEND.GT.1.AND.(DSTMOD.NE.7.OR.DSTREG.LE.1))

THEN

THEN IF (SRCMOD.EQ.7.AND.SRCREG.EQ.4.AND.DESTIN(1:1).NE.'A') THEN CIT = CHAR4(IJIJJI) IF (ICIT.EQ.IJIJJI) THEN SOURCE = '#'''//CIT//''' $'//THEHEX SRCEND = 7

ENDIF ENDIF ALLOPS(1:SRCEND) = SOURCE(1:SRCEND) IF (DESTIN(1:1).EQ.'A') THEN OPCODE = 'MOVEA.L' IF (SRCMOD.EQ.7) THEN IF (SRCREG.EQ.1) THEN IJK = IJIJJI ELSEIF (SRCREG.EQ.4) THEN IJK = INTOF(ALTSRC) ELSEIF (SRCREG.LT.4.AND.SRCREG.GT.1) THEN IJK = IAIJJI ENDIF CALL ENTHSH(ADDREF(0),14,IJK,ADRNDX) ENDIF ENDIF I = SRCEND+1 J = SRCEND+2 K = SRCEND+DSTEND+2 ALLOPS(I:I) = ',' ALLOPS(J:K) = DESTIN(1:DSTEND) I = K + 1 ALLOPS(I:30) = ' ' OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7.AND.SRCREG.LT.4) THEN CALL DOABRL ELSEIF (DSTMOD.EQ.7.AND.DSTREG.LT.2) THEN CALL DSABRL ENDIF ALLOPS(21:30) = OPS(3) ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (HINIB.EQ.4) THEN CALL DO4 ELSEIF (HINIB.EQ.5) THEN CALL DO5 ELSEIF (HINIB.EQ.6) THEN DSTSRC = .TRUE. IF (MHNIB.EQ.0) THEN OPCODE = 'BRA' ELSEIF (MHNIB.EQ.1) THEN OPCODE = 'BSR' ELSE OPCODE = 'B'//CC(MHNIB) ENDIF IF (FOUND) THEN OPS(2) = ' *' ELSE OPS(2) = ' H_' ENDIF IF (THEHEX(7:8).NE.'00') THEN IF (LOBYT.LE.127) LOBYTE = LOBYT + 2 IF (LOBYT.GE.128) LOBYTE = LOBYT - 254 IJ = MOD(LOBYTE,2) IF (IJ.EQ.0.AND.LOBYTE.NE.2) THEN IADDR = LOBYTE + MEMADR + WHERE - 2 IF (DOBRA.AND.MHNIB.NE.1.AND.BRANUM.LT.4096) THEN

BRATRG(BRANUM,1) = IADDR BRATRG(BRANUM,2) = MEMADR + WHERE - 2 BRANUM = BRANUM + 1 ELSEIF (DOJSR.AND.MHNIB.EQ.1.AND.JSRNUM.LT.4096) THEN JSRTRG(JSRNUM,1) = IADDR JSRTRG(JSRNUM,2) = MEMADR + WHERE - 2 JSRNUM = JSRNUM + 1 ENDIF IF (MHNIB.EQ.0) THEN K = MEMADR + WHERE CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ENDIF CALL ENTHSH(ADDREF(0),14,IADDR,ADRNDX) HEXADR = HEXOF(IADDR) IF (FOUND) THEN WRITE (OPS(3),'(SP,I4.3)') LOBYTE OPS(1) = 'H_'//HEXADR(3:8)//' ' ELSE WRITE (OPS(1),'(SP,''*'',I4.3)') LOBYTE OPS(3) = HEXADR(3:8)//' ' ENDIF SRCWXR = .NOT. SHRTBR IF (SHRTBR.OR.V11) OPCODE(4:5) = '.S' ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (THEHEX(7:8).EQ.'00') THEN I2 = WHERE CALL FETCH(CURWRD,L,M) K = CURWRD K2BYTE = MOD(K,65536) + 2 IJ = MOD(K2BYTE,2) IF (IJ.EQ.0) THEN THEHEX = HEXOF(K) HEXEXT = THEHEX(5:8)//' ' IADDR = MEMADR + K2BYTE + IWHERE IF (DOBRA.AND.MHNIB.NE.1.AND.BRANUM.LT.4096) THEN BRATRG(BRANUM,1) = IADDR BRATRG(BRANUM,2) = MEMADR + I2 - 2 BRANUM = BRANUM + 1 ELSEIF (DOJSR.AND.MHNIB.EQ.1.AND.JSRNUM.LT.4096) THEN JSRTRG(JSRNUM,1) = IADDR JSRTRG(JSRNUM,2) = MEMADR + I2 - 2 JSRNUM = JSRNUM + 1 ENDIF CALL ENTHSH(ADDREF(0),14,IADDR,ADRNDX) IF (MHNIB.EQ.0) THEN K = MEMADR + WHERE CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ENDIF HEXADR = HEXOF(IADDR) IF (FOUND) THEN OPS(1) = 'H_'//HEXADR(3:8)//' ' WRITE (OPS(3),'(SP,I6.5)') K2BYTE ELSE WRITE (OPS(1),'(SP,''*'',I6.5)') K2BYTE OPS(3) = HEXADR(3:8) ENDIF WRDX = .TRUE. IF (SHRTBR.OR.V11) OPCODE(4:5) = '.L'

ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF ELSEIF (HINIB.EQ.7.AND.(.NOT.BIT8)) THEN DSTSRC = .TRUE. OPCODE = 'MOVEQ' I = LOBYTE I = IAND(I,$0FF) K = I THEHEX = HEXOF(K) WRITE (ALLOPS,'(''#'',I3.3,'',D'',I1.1)') I,DSTREG OPS(3) = '$'//THEHEX(7:8) IT = INTOF(VAL) C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) ELSEIF (HINIB.EQ.8) THEN CALL DO812 ELSEIF (HINIB.EQ.9.OR.HINIB.EQ.13) THEN IF (HINIB.EQ.9) THEOP = 'SUB' IF (HINIB.EQ.13) THEOP = 'ADD' IF (BITS76) THEN IF (BIT8) THEN OPCODE = THEOP//'A.L' SIZE = 3 ELSE OPCODE = THEOP//'A.W' SIZE = 2 ENDIF CALL DOSRC IF (SRCEND.GT.0) THEN WRITE (ALLOPS,'(A,'',A'',I1.1)') ALTSRC(1:ALTSND),DSTREG ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (NOT5.AND.NOT4.AND.BIT8) THEN IF (SIZE.NE.0) THEN OPCODE = THEOP//'X.'//LENEXT IF (BIT3) THEN WRITE (ALLOPS,'(''-(A'',I1.1,''),-(A'',I1.1,'')'')') S RCREG,DSTREG ELSE WRITE (ALLOPS,'(''D'',I1.1,'',D'',I1.1)') SRCREG,DSTRE G ENDIF ENDIF ELSEIF (SIZE.NE.0) THEN OPCODE = THEOP//'.'//LENEXT CALL DOSRC IF (SRCEND.GT.0.AND.(SIZE.NE.1.OR.SRCMOD.NE.1)) THEN IF (NOT8) THEN WRITE (ALLOPS,'(A,'',D'',I1.1)') ALTSRC(1:ALTSND),DSTR EG

ELSE WRITE (ALLOPS,'(''D'',I1.1,'','',A)') DSTREG,ALTDST(1: ALTDND) DSTSRC = .TRUE. ENDIF ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) OPS(3) = ALLOPS(21:30) ELSEIF (HINIB.EQ.10.OR.HINIB.EQ.15) THEN OPS(2) = '?CoProcess' OPS(3) = 'or' ELSEIF (HINIB.EQ.12) THEN CALL DO812 ELSEIF (HINIB.EQ.11) THEN CALL DO11 ELSEIF (HINIB.EQ.14) THEN CALL DO14 ENDIF CONTINUE IF (.NOT.(SRCWXR.OR.DSTWXR).AND.OPCODE(1:2).NE.'DC'.AND.LABEL(1:1).NE. IF (CTMP10(1:2).EQ.'H_') THEN IF (LABEL.EQ.TENBLK.AND.LINSAV.EQ.LINPTR) LABEL = CTMP10 ENDIF IF (FOUND) THEN DO 3498 I = INSTRB+2,WHERE-2,2 K = I + MEMADR IFB = FNDHSH(ADDREF(0),14,K) IF (IFB.NE.-1) THEN J = I - INSTRB THEHEX = HEXOF(K) CTMP10 = 'H_'//THEHEX(3:8)//' ' WRITE (CCWRD,'(I2.2)') J LINES(LINPTR) = CTMP10//'EQU *+'//CCWRD LINPTR = LINPTR + 1 ENDIF CONTINUE ENDIF ENDIF CTMP10 = LABEL IF ((SRCWXR.OR.DSTWXR).AND.OPCODE.NE.'DC.W') THEN IF (LABEL(1:2).EQ.'H_') THEN IF (LABEL(9:9).EQ.'?') LABEL(9:10) = ' ' LINES(LINPTR) = LABEL//'EQU '//'* ' LINPTR = LINPTR + 1 ELSEIF (LABEL(1:3).EQ.'*H_') THEN IF (LABEL(9:9).EQ.'?') LABEL(9:9) = ' ' IF (LABEL(10:10).EQ.'?') LABEL(10:10) = ' ' LINES(LINPTR) = LABEL(2:10)//' EQU '//'* ' LINPTR = LINPTR + 1 ENDIF LABEL = '* '//CTMP10(10:10) ELSEIF (OPCODE(1:2).EQ.'DC'.OR.OPCODE(1:1).EQ.' ') THEN IF (LABEL(1:3).EQ.'* '.OR. LABEL(1:1).EQ.' ') THEN IFB = FNDHSH(ADDREF(0),14,ISAVEJ) IF (IFB.NE.-1) THEN

5449 '*') THEN

3498

4321

THEHEX = HEXOF(ISAVEJ) LABEL = 'H_'//THEHEX(3:8)//' ' ELSELABEL = ' ' ENDIF ELSEIF (LABEL(1:3).EQ.'*H_'.OR.LABEL(1:2).EQ.'H_') THEN IF (LABEL(1:1).EQ.'*') THEN CTMP10 = LABEL LABEL = CTMP10(2:10) LABEL(10:10) = ' ' ENDIF IF (LABEL(9:9).EQ.'?') LABEL(9:9) = ' ' IF (LABEL(3:8).NE.ADDR(2:7)) THEN IFB = FNDHSH(ADDREF(0),14,ISAVEJ) IF (IFB.NE.-1) THEN THEHEX = HEXOF(ISAVEJ) LABEL = 'H_'//THEHEX(3:8)//': ' ELSE LABEL = ' ' ENDIF ENDIF ENDIF ENDIF CTMP10 = LABEL JQQWHR = WHERE RETRY = .FALSE. MORE = WRDX .OR. LNGX .OR. SRCX1 .OR. SRCX2 .OR. DSTX1 .OR. DSTX2 IF (LABEL.EQ.LINES(LINPTR-1)(1:10)) THEN LABEL = ' ' CTMP10 = ' ' ENDIF DO 4321 J = ISAVEJ+1,MEMADR+WHERE-1,2 IFB = FNDHSH(ADDREF(0),14,J) IF (IFB.NE.-1) THEN K = J-ISAVEJ THEHEX = HEXOF(J) WRITE (CCWRD,'(I2.2)') K LINES(LINPTR) = 'H_'//THEHEX(3:8)//' EQU *+'//CCWRD LINPTR = LINPTR + 1 ENDIF CONTINUE IF (OPCODE.EQ.'DC.W') THEN WRITE (OPS(1),'(SP,I6.5)') IDCWRD IJKK = IDCWRD HEXEXT = HEXOF(IJKK) OPS(2) = ' ' WHERE = IWHZZZ LINES(LINPTR) = LABEL//OPCODE//OPS(1)//OPS(2)//OPS(3)//VAL//ADDR// LINPTR = LINPTR+1 GOTO 8999 ELSEIF (OPCODE.EQ.' DC.W'.OR. OPCODE.EQ.' DC.W') THEN OPCODE = 'DC.W' IF (OPCODE(2:2).EQ.' ') OPS(3) = ' ' IT = INTOF(VAL) C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF

C5

LINES(LINPTR) = LABEL//OPCODE//OPS(1)//OPS(2)//OPS(3)//VAL//ADDR// C5 LINPTR = LINPTR+1 IF (.NOT.(MORE.OR.SRCWXR.OR.DSTWXR)) GOTO 8999 ENDIF LABEL = CTMP10 LOGIC(1) = (WRDX.AND.(.NOT.LNGX)) LOGIC(2) = (SRCX1.AND.(.NOT.SRCX2)) LOGIC(3) = (DSTX1.AND.(.NOT.DSTX2)) LOGIC(5) = .NOT. (WRDX.OR.LNGX) LOGIC(6) = (.NOT. (SRCX1.OR.SRCX2)) .AND. LOGIC(5) LOGIC(4) = LOGIC(1) .OR. (LOGIC(5).AND.LOGIC(2)) .OR. (LOGIC(6).AND.LO GIC(3)) IF (LOGIC(4)) THEN IF (LOGIC(1)) THEN ONEWRD = HEXEXT ELSEIF (LOGIC(2)) THEN ONEWRD = SRXHEX SRCX1 = .FALSE. ELSEIF (LOGIC(3)) THEN ONEWRD = DSXHEX DSTX1 = .FALSE. ENDIF VAL(6:10) = ' '//ONEWRD BEFADR = BEFADR + 2 ENDIF IT = INTOF(VAL) C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF IF (SRCWXR.OR.DSTWXR) THEN IF (LABEL(1:1).NE.'*') LABEL(1:1) = '*' ELSEIF (LABEL(1:1).NE.'*') THEN IF (LABEL(9:9).EQ.'?') LABEL(9:9) = ' ' IF (LABEL(10:10).EQ.'?') LABEL(10:10) = ' ' IF (LABEL(1:1).NE.'H') THEN CTMP10 = ADDR K = INTOF(CTMP10) IFB = FNDHSH(ADDREF(0),14,K) IF (IFB.NE.-1) LABEL = 'H_'//ADDR(3:8)//' ' ENDIF ENDIF LINES(LINPTR) = LABEL//OPCODE//OPS(1)//OPS(2)//OPS(3)//VAL//ADDR//C5 LINPTR = LINPTR+1 IF (LABEL(1:1).EQ.'*') THEN IF (LABEL(2:8).EQ.' ') THEN LABEL = ' ' ELSEIF (LABEL(2:3).EQ.'H_') THEN CTMP10 = LABEL(2:10) LABEL(1:9) = CTMP10 LABEL(10:10) = ' ' ENDIF IF (FOUND.AND.MORE) THEN JQQWHR = JWHRQQ + 2 I = JQQWHR J = I + MEMADR IJ = FNDHSH(ADDREF(0),14,J)

RETRY = IJ .NE. -1 IJ = FNDHSH(ADDREF(0),14,ISAVEB) RETRY = RETRY .OR. IJ.NE.-1 IF (RETRY) THEN THEHEX = HEXOF(J) LABEL = 'H_'//THEHEX(3:8) ELSEIF (.NOT.LOGIC(4)) THEN RETRY = .TRUE. LABEL = ' ' ENDIF ENDIF ENDIF IF (SRCWXR.OR.DSTWXR) THEN IF (LOGIC(4).AND..NOT.RETRY) THEN IJ = FNDHSH(ADDREF(0),14,ISAVEB) IF (IJ.EQ.-1) THEN ALLOPS = VAL(1:5)//',$'//VAL(7:10)//' '//OPCODE(1:8)//OPS( 1) IT = INTOF(ALLOPS) C4 = CHAR4(IT) C5 = C4 ELSE ALLOPS = VAL(1:5)//',$'//VAL(7:10) IT = INTOF(ALLOPS) ALLOPS = VAL(1:5)//' '//OPCODE(1:8)//OPS(1)//OPS(2)(1:6) C4 = CHAR4(IT) C5 = C4 OPCODE = 'DC.W' LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 THEHEX = HEXOF(ISAVEB) LABEL = 'H_'//THEHEX(3:8) VAL(2:5) = VAL(7:10) VAL(6:10) = ' ' ALLOPS = VAL IT = INTOF(VAL) C4 = CHAR4(IT) C5 = C4(3:4) ADDR = '$'//THEHEX(3:8) RETRY = .TRUE. JQQWHR = IBSAVE ENDIF * ELSE ELSEIF (RETRY.OR.LNGX.OR..NOT.MORE) THEN ALLOPS = VAL(1:5) IT = INTOF(ALLOPS) ALLOPS = VAL(1:5)//' '//OPCODE(1:8)//OPS(1)//OPS(2)(1:6) C4 = CHAR4(IT) C5 = C4(3:4) ENDIF OPCODE = 'DC.W' LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 LABEL = ' ' ENDIF CRUD = ( ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) .OR. (.NOT.XQUIET) ) IF (LNGX.AND.CRUD) THEN LABEL = '*' OPCODE = ' Exte' K = BEFADR

8998

&

HEXADR = HEXOF(K) ADDR = ' $'//HEXADR(3:8) HEXTMP = '$'//HEXEXT IJLL = INTOF(HEXTMP) WRITE (ALLOPS,'(A,I12)') 'nsion LWORD:',IJLL VAL = '$'//HEXEXT IT = INTOF(VAL) C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF IF (XQUIET) GOTO 8998 LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 IF (IT.NE.IJIJJI.AND.IT.NE.ICIT) LINPTR = LINPTR + 1 CONTINUE IF ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) THEN IBF = FNDHSH(ADDREF(0),14,BEFADR) IF (IBF.NE.-1) THEN THEHEX = HEXOF(BEFADR) LABEL = 'H_'//THEHEX(3:8) ELSE LABEL = ' ' ENDIF OPCODE = 'DC.L' ALLOPS = VAL LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 ENDIF BEFADR = BEFADR + 4 ELSEIF (LNGX) THEN BEFADR = BEFADR + 4 ENDIF IF (SRCMOD.EQ.7) THEN IF (SRCMOD.EQ.2.OR.SRCMOD.EQ.3) IJIJJI = IAIJJI IAIJJI = IJIJJI ELSE IJIJJI = 0 IAIJJI = 0 ICIT = 0 ENDIF IF (DSTMOD.EQ.7) THEN IF (DSTMOD.EQ.2.OR.DSTMOD.EQ.3) IJIJJ2 = 0 ELSE IJIJJ2 = 0 ENDIF VAL = '$'//SRXHEX IT = INTOF(VAL) CRUD = ( ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) .OR. (.NOT.(XQUIET.OR.(IT.EQ.IJIJJI).OR.(IT.EQ.IAIJJI))) ) IF (SRCX1.AND.(.NOT.DSTSRC).AND.CRUD) THEN LABEL = '*' OPCODE = 'Extension ' K = BEFADR HEXADR = HEXOF(K) ADDR = ' $'//HEXADR(3:8) HEXTMP = '$'//SRXHEX IJLL = INTOF(HEXTMP) IBA = BEFADR

8001 8002

IF (SRCX2) THEN WRITE (ALLOPS,'(A,I12)',ERR=8001) 'src addr LWORD is',IJLL BEFADR = BEFADR + 4 ELSE WRITE (ALLOPS,'(A,I6)',ERR=8002) 'src addr WORD is',IJLL BEFADR = BEFADR + 2 ENDIF C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF IF (XQUIET.OR.(IT.EQ.IJIJJI).OR.(IT.EQ.IAIJJI).OR.(ICIT.EQ.IT)) G LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 IF (IJLL.GT.128.OR.IJLL.LT.-128) LINPTR = LINPTR + 1 CONTINUE IF ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) THEN IBF = FNDHSH(ADDREF(0),14,IBA) IF (IBF.NE.-1) THEN THEHEX = HEXOF(IBA) LABEL = 'H_'//THEHEX(3:8) ELSE LABEL = ' ' ENDIF IF (SRCX2) THEN OPCODE = 'DC.L' ELSE OPCODE = 'DC.W' ENDIF ALLOPS = VAL LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 ENDIF ELSEIF (SRCX1.AND.DSTSRC.AND.CRUD) THEN LABEL = '*' OPCODE = 'Extension' K = BEFADR HEXADR = HEXOF(K) ADDR = ' $'//HEXADR(3:8) HEXTMP = '$'//SRXHEX IJLL = INTOF(HEXTMP) IBA = BEFADR IF (SRCX2) THEN WRITE (ALLOPS,'(A,I12)',ERR=8003) 'dst addr LWORD is',IJLL BEFADR = BEFADR + 4 ELSE WRITE (ALLOPS,'(A,I6)',ERR=8004) 'dst addr WORD is',IJLL BEFADR = BEFADR + 2 ENDIF C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF IF (XQUIET.OR.(IT.EQ.IJIJJI).OR.(IT.EQ.IAIJJI).OR.(ICIT.EQ.IT)) G LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5

OTO 8997 8997

8003 8004

OTO 8996

8996

&

8005 8006

IF (IJLL.GT.128.OR.IJLL.LT.-128) LINPTR = LINPTR + 1 CONTINUE IF ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) THEN IBF = FNDHSH(ADDREF(0),14,IBA) IF (IBF.NE.-1) THEN THEHEX = HEXOF(IBA) LABEL = 'H_'//THEHEX(3:8) ELSE LABEL = ' ' ENDIF IF (SRCX2) THEN OPCODE = 'DC.L' ELSE OPCODE = 'DC.W' ENDIF ALLOPS = VAL IT = INTOF(VAL) C4 = CHAR4(IT) IF (OPCODE(4:4).EQ.'L') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 ENDIF ELSEIF (SRCX1) THEN IF (SRCX2) THEN BEFADR = BEFADR + 4 ELSE BEFADR = BEFADR + 2 ENDIF ENDIF VAL = '$'//DSXHEX IT = INTOF(VAL) CRUD = ( ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) .OR. (.NOT.(XQUIET.OR.(IT.EQ.IJIJJ2).OR.(IT.EQ.IAIJJ2))) ) IF (DSTX1.AND.(.NOT.DSTSRC).AND.CRUD) THEN LABEL = '*' OPCODE = 'Extension' K = BEFADR HEXADR = HEXOF(K) ADDR = ' $'//HEXADR(3:8) HEXTMP = '$'//DSXHEX IJLL = INTOF(HEXTMP) IBA = BEFADR IF (DSTX2) THEN WRITE (ALLOPS,'(A,I12)',ERR=8005) 'dst addr LWORD is',IJLL BEFADR = BEFADR + 4 ELSE WRITE (ALLOPS,'(A,I6)',ERR=8006) 'dst addr WORD is',IJLL BEFADR = BEFADR + 2 ENDIF C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF IF (XQUIET.OR.(IT.EQ.IJIJJ2).OR.(IT.EQ.ICIT)) GOTO 8995

8995

LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 IF (IJLL.GT.128.OR.IJLL.LT.-128) LINPTR = LINPTR + 1 CONTINUE IF ((SRCWXR.OR.DSTWXR).AND..NOT.RETRY) THEN IBF = FNDHSH(ADDREF(0),14,IBA) IF (IBF.NE.-1) THEN THEHEX = HEXOF(IBA) LABEL = 'H_'//THEHEX(3:8) ELSE LABEL = ' ' ENDIF IF (DSTX2) THEN OPCODE = 'DC.L' ELSE OPCODE = 'DC.W' ENDIF ALLOPS = VAL LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 ENDIF

ENDIF CONTINUE ENDIF IF (RETRY) WHERE = JQQWHR SRCX1 = .FALSE. DSTX1 = .FALSE. SRCX2 = .FALSE. DSTX2 = .FALSE. WRDX = .FALSE. LNGX = .FALSE. SRCWXR = .FALSE. DSTWXR = .FALSE. RETRY = .FALSE. LABEL = ' ' RETURN END $SEGMENT DISASMOP *---------------------------------------------------------------------SUBROUTINE DO0 CHARACTER*8 SRXHEX,DSXHEX,HEXEXT,HEXADR,MMADR,THEHEX,HEXOF,IMMHEX CHARACTER*20 SOURCE,DESTIN CHARACTER*30 ALTSRC,ALTDST,ALLOPS CHARACTER*74 LINES(1200) CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR CHARACTER*1 LENEXT,SORU,SRCR,DSTR*2,CHAR4*4,C4*4,C5*4,CIT*4 INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,LINPTR,IWHQQQ INTEGER*4 SAVWHR,LWORD,HIBYT,LOBYT,HINIB,MHNIB,MLNIB,LONIB,TRADDR,MEMADR INTEGER*4 ADDREF(0:16383),ADRNDX,BLKBEG,BLKEND,ALTSND,ALTDND,ICIT INTEGER*2 WORDS(0:1),CURWRD,CODEW(0:16383),WHERE,END,MSK2 INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1) INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3) LOGICAL*4 V10,V11 LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,FOO,FOUND LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54,BAR LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54,LOGIC(10) LOGICAL*2 DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMB YT(0)) EQUIVALENCE (LWORD,WORDS(0),HIWORD),(WORDS(1),LOWORD),(CIT,ICIT) EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL) 8999

EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)) EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE) COMMON /MODESQ/DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR,/REFS/ADDREF,ADRNDX,BLKBEG ,BLKEND,FOUND COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE COMMON /ADRUN/SOURCE,DESTIN,/DISNUM/LINPTR,/VERSNS/V10,V11 COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT,/DISASM/ASMOUT,LINES,MMADR,ALLOPS COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJ J2 SAVE /NOTS/,/BITS/,/DISASM/,/EXTHEX/,/MORE/,/VERSNS/,/ADRUN/,/ADRMOD/ SAVE /SMASH/,/CODE/,/MODESQ/,/LBLS/,/ABRLAD/,/REFS/ EXTERNAL HEXOF SAVE SAVWHR = WHERE OPS(3) = ' ' ALLOPS = OPS(1)//OPS(2)//OPS(3) BAR = .FALSE. IWHQQQ = WHERE IF (BIT8) THEN IF (SRCMOD.EQ.1) THEN OPCODE = 'MOVEP.W' IF (BIT6) OPCODE = 'MOVEP.L' CALL FETCH(CURWRD,L,M) * SRCX1 = .TRUE. IT = CURWRD HEXEXT = HEXOF(IT) VAL(7:10) = HEXEXT(5:8) IF (BIT7) THEN WRITE (ALLOPS,'(''D'',I1.1,'','',SP,I6.5,SS,''(A'',I1.1,'')'') ') DSTREG,CURWRD,SRCREG DSTSRC = .TRUE. ELSE WRITE (ALLOPS,'(SP,I6.5,SS,''(A'',I1.1,''),D'',I1.1)') CURWRD, SRCREG,DSTREG ENDIF ELSE IF (BITS76) THEN OPCODE = 'BSET' ELSEIF (NOT7.AND.NOT6) THEN OPCODE = 'BTST' ELSEIF (NOT7.AND.BIT6) THEN OPCODE = 'BCHG' ELSEIF (BIT7.AND.NOT6) THEN OPCODE = 'BCLR' ENDIF DSTSRC = .TRUE. CALL DOSRC IF (SRCEND.GT.0.AND.SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1 & .OR.(NOT7.AND.NOT6))) THEN DSTSRC = .TRUE. WRITE (ALLOPS,'(''D'',I1.1,'','',A)') DSTREG,ALTSRC(1:ALTSND) IF (SRCMOD.EQ.7) CALL DOABRL ELSE CALL DOBAD(IWHQQQ) ENDIF

ENDIF LOGIC(4) = .FALSE. ELSE LOGIC(1) = (SRCMOD.NE.1) .AND. ((SRCMOD.NE.7).OR.(SRCREG.LT.2).OR.(SRC REG.LT.4.AND.NOT7.AND.NOT6)) LOGIC(3) = (.NOT.(DSTREG.EQ.5 .OR. DSTREG.EQ.0 .OR. DSTREG.EQ.1)) .AND .SRCREG.GT.1 LOGIC(2) = BITS76 .OR. (SRCMOD.EQ.7.AND.(LOGIC(3).OR.SRCREG.EQ.3.OR.(S RCREG.GT.4))) IF (DSTREG.EQ.4.AND.LOGIC(1)) THEN IF (BITS76) THEN OPCODE = 'BSET' ELSEIF (NOT7.AND.NOT6) THEN OPCODE = 'BTST' ELSEIF (NOT7.AND.BIT6) THEN OPCODE = 'BCHG' ELSEIF (BIT7.AND.NOT6) THEN OPCODE = 'BCLR' ENDIF CALL FETCH(CURWRD,L,M) IMMDAT = CURWRD IMMDAT = IAND(IMMDAT,$0FFFF) II = IAND(IMMDAT,$00FF) THEHEX = HEXOF(IMMDAT) WRDX = .TRUE. HEXEXT = THEHEX(5:8) DSTSRC = .TRUE. CALL DOSRC IF (SRCEND.GT.0.AND.SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1 & .OR.(NOT7.AND.NOT6.AND.SRCREG.LE.3))) THEN WRITE (ALLOPS,'(''#'',I2.2,'','',A)') II,ALTSRC(1:ALTSND) DSTSRC = .TRUE. DSTWXR = SRCWXR IF (II.NE.IMMDAT) THEN II = IAND(IMMDAT,$0080) IF (HEXEXT(1:2).EQ.'FF'.AND.II.NE.0) THEN SRCWXR = .TRUE. LABEL(9:10) = '??' ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF IF (SRCMOD.EQ.7) CALL DOABRL ELSE CALL DOBAD(IWHQQQ) ENDIF LOGIC(4) = .FALSE. ELSEIF (.NOT.LOGIC(2)) THEN ICIT = 0 IF (NOT7.AND.NOT6) THEN LENEXT = 'B' M = 0 K2 = CURWRD CALL FETCH(CURWRD,L,M) IMMDAT = CURWRD IMMDAT = IAND(IMMDAT,$0FFFF) K = IMMDAT II = IAND(IMMDAT,$00FF) WRDX = .TRUE. DSTSRC = .TRUE. IMMDAT = CURWRD

THEHEX = HEXOF(K) HEXEXT(1:4) = THEHEX(5:8) IF (IMMDAT.NE.II) THEN II = IAND(IMMDAT,$0080) IF (HEXEXT(1:2).EQ.'FF'.AND.II.NE.0) THEN SRCWXR = .TRUE. LABEL(9:10) = '??' ELSE CALL DOBAD(IWHQQQ) BAR = .TRUE. ENDIF ENDIF ELSEIF (NOT7.AND.BIT6) THEN LENEXT = 'W' K2 = CURWRD CALL FETCH(CURWRD,L,M) IMMDAT = CURWRD IMMDAT = IAND(IMMDAT,$0FFFF) WRDX = .TRUE. DSTSRC = .TRUE. K = IMMDAT THEHEX = HEXOF(K) HEXEXT(1:4) = THEHEX(5:8) ELSEIF (BIT7.AND.NOT6) THEN LENEXT = 'L' LNGX = .TRUE. CALL FETCHL(IMMDAT) DSTSRC = .TRUE. K = IMMDAT HEXEXT = HEXOF(K) CIT = CHAR4(K) ENDIF IF (SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LT.2.OR.SRCREG.EQ.4)) T HEN IF (SRCMOD.EQ.7.AND.SRCREG.EQ.4) THEN LOGIC(4) = .TRUE. IF (NOT7.AND.NOT6) THEN SOURCE = 'CCR' SRCEND = 3 LENEXT = 'B' ELSEIF (NOT7.AND.BIT6) THEN SOURCE = 'SR' SRCEND = 2 LENEXT = 'W' ELSE SRCEND = 0 ENDIF ALTSRC = SOURCE ALTSND = SRCEND ENDIF IF (DSTREG.EQ.0) THEN OPCODE = 'ORI.'//LENEXT ELSEIF (DSTREG.EQ.1) THEN OPCODE = 'ANDI.'//LENEXT ELSEIF (DSTREG.EQ.2) THEN OPCODE = 'SUBI.'//LENEXT ELSEIF (DSTREG.EQ.3) THEN OPCODE = 'ADDI.'//LENEXT ELSEIF (DSTREG.EQ.5) THEN OPCODE = 'EORI.'//LENEXT

ELSEIF (DSTREG.EQ.6) THEN OPCODE = 'CMPI.'//LENEXT ENDIF IF (.NOT.(SRCMOD.EQ.7.AND.SRCREG.EQ.4)) THEN LOGIC(4) = .FALSE. FOO = SRCWXR DSTSRC = .TRUE. CALL DOSRC SRCWXR = FOO .OR. SRCWXR ENDIF IF (SRCEND.GT.0.AND.SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LT. 2 & 5)) THEN ALLOPS = '#'''//CIT//''','//ALTSRC(1:ALTSND) ELSEIF (IMMDAT.GT.65535.OR.IMMDAT.LT.-65536.OR.LENEXT.EQ.' L') THEN IMMHEX = HEXOF(IMMDAT) WRITE (ALLOPS,'(''#$'',A,'','',A)') IMMHEX,ALTSRC(1:AL TSND) ELSEIF (DSTREG.LT.2.OR.DSTREG.EQ.5) THEN IMMHEX = HEXOF(IMMDAT) IF (LENEXT.EQ.'W') THEN WRITE (ALLOPS,'(''#$'',A4,'','',A)') IMMHEX(5:8),A LTSRC(1:ALTSND) ELSE WRITE (ALLOPS,'(''#$'',A2,'','',A)') IMMHEX(7:8),A LTSRC(1:ALTSND) ENDIF ELSEIF (IMMDAT.GT.255.OR.IMMDAT.LT.-256) THEN WRITE (ALLOPS,'(''#'',SP,I6.5,'','',A)') IMMDAT,ALTSRC (1:ALTSND) ELSE WRITE (ALLOPS,'(''#'',SP,I4.3,'','',A)') IMMDAT,ALTSRC (1:ALTSND) ENDIF ELSE CALL DOBAD(IWHQQQ) LOGIC(4) = .FALSE. ENDIF ELSE CALL DOBAD(IWHQQQ) LOGIC(4) = .FALSE. ENDIF ELSE CALL DOBAD(IWHQQQ) LOGIC(4) = .FALSE. ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ENDIF OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) IF (LOGIC(4).AND.OPCODE(1:2).NE.'DC') THEN OPS(3) = OPS(1) OPS(2) = OPCODE OPCODE = 'DC.L' L = CURWRD .OR.SRCREG.EQ.4).AND..NOT.BAR) THEN IF (ICIT.EQ.K.AND.ICIT.NE.0.AND.(DSTREG.EQ.2.OR.DSTREG.GE.

K = K2 M = L + 65536*IAND(K,$FFFF) THEHEX = HEXOF(M) OPS(1) = '$'//THEHEX ALLOPS = OPS(1)//OPS(2)//OPS(3) SRCWXR = .FALSE. DSTWXR = .FALSE. ENDIF RETURN END *---------------------------------------------------------------------SUBROUTINE DO4 CHARACTER*1 LENEXT,TH8,CHAR4*4,C4*4,C5*4 CHARACTER*8 HEXOF,SRXHEX,DSXHEX,HEXEXT,CTEMP,MMADR,THEHEX,HEXADR,MORHEX CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR CHARACTER*12 TRAP9(3),TRAP6(13),TRAPA(9),TRAP0(69),TRAPTP,TRAP8(11) CHARACTER*20 SOURCE,DESTIN CHARACTER*30 ALTSRC,ALTDST,NORMAL,REVERS,ALLOPS CHARACTER*74 LINES(1200) INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,IWHQQQ INTEGER*4 NINDEX,RINDEX,NEGXW(3),LWORD,HIBYT,LOBYT,MEMADR,TRADDR,FNDHSH INTEGER*4 LINPTR,SAVWHR,HINIB,MHNIB,MLNIB,LONIB,ADDREF(0:16383),ADRNDX INTEGER*4 BRATRG(4096,2),JSRTRG(4096,2),BRANUM,JSRNUM,BLKBEG,BLKEND INTEGER*4 ALTSND,ALTDND,IJIJJI,IAIJJI,IJIJJ2,IAIJJ2,INSTRB INTEGER*2 CODEW(0:16383),WHERE,END,WORDS(0:1),I2,J2,CURWRD INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3) INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1) LOGICAL*4 V10,V11 LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54,DOBRA,DOJSR LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 LOGICAL*2 DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,FOUND EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMB YT(0)) EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE) EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL) EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)) COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS,/ADRUN/SOURCE,DESTIN COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR,/ABRLAD/IJIJJI,IJIJJ2,IAIJ JI,IAIJJ2 COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,/BEGINI/INSTRB COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT,/REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUN D COMMON /MODESQ/DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP COMMON /BRAJSR/BRATRG,JSRTRG,BRANUM,JSRNUM,DOBRA,DOJSR COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 COMMON /CMOVEM/NORMAL,REVERS,/NMOVEM/NINDEX,RINDEX COMMON /DISNUM/LINPTR,/VERSNS/V10,V11 COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND SAVE /DISASM/,/ADRUN/,/CODE/,/SMASH/,/ADRMOD/,/MORE/,/EXTHEX/,/ABRLAD/ SAVE /MODESQ/,/BITS/,/NOTS/,/CMOVEM/,/NMOVEM/,/DISNUM/,/VERSNS/,/REFS/ SAVE /LBLS/,/BEGINI/ EXTERNAL HEXOF,FNDHSH,ENTHSH SAVE DATA TRAPA/'rtOPEN','rtCLOSE','rt QTIME','rt QALARM','rt?? 4','rtSTOP', & 'rt ALRM','rt ALRM REL','rt SUM'/ DATA TRAP9/'Synch','TillAll','TillAny'/

DATA TRAP6/'OPEN','CLOSE','READ','WRITE','?????','FUNC','CANCEL', & 'BREAD','BWRITE','BTEST','OpEvBlk','ClsEvBlk','ArmEv'/ DATA TRAP0/'RESERVED-user',7*'unused','CPRTERR','DPrtErr','CHAIN','PrtErr* ', & 'WrmST','LoadB','FmtDib*','NxTok*','GtCmd*','PrtMsg*','PrtErMsg*','FMTS', & 'CmWC','SecSiz','GetTim','SetTim','GetPCB','GivPCB','GStat','SetPri','Del ay', & 'WakeUp','GtCmdE*','SysLev','PROTECT','FmtTOD','SETEC','READB',3*'unused' , & & & & & 'SrcDir','GetCMD*','GetCmdE*','Exit','2-RunTask','2-Kill',2*'unused', '2-SUP MODE','2-USERMODE','2-? 50 $32','unused','GBasPtr','MODSYSM', 'SetCrtCr','InqCrtCr','SemMgr','MEM_MGR','ITCGen','GPrtScr','MODADRCK', 'GETSCTAB','CHPRTSCR','2-FmtNam','2-LodMgr', 'PATCHADR','FILEADR','GETSENS','TMATACH','TMDTACH'/ DATA TRAP8/'ATACHPDB','DTACHPDB #2','? WAIT #3','?SIGNAL #4','??? 5','DTAC

HDRV', & 'ATACHDEV','DTACHDEV','??? 9','??? 10 $A','??? 11 $B'/ OPS(3) = ' ' ALLOPS = OPS(1)//OPS(2)//OPS(3) IF (NOTS76) THEN IF (NOT7.AND.NOT6) THEN LENEXT = 'B' SIZE = 1 ELSEIF (BIT7.AND.NOT6) THEN LENEXT = 'L' SIZE = 3 ELSEIF (BIT6.AND.NOT7) THEN LENEXT = 'W' SIZE = 2 ENDIF ELSE LENEXT = 'W' SIZE = 2 ENDIF SAVWHR = WHERE IWHQQQ = WHERE CALL DOSRC IF (MHNIB.EQ.0) THEN IF (SRCEND.LE.0.OR.(SRCMOD.EQ.7.AND.SRCREG.GE.2).OR.SRCMOD.EQ.1) THEN CALL DOBAD(SAVWHR) ELSE IF (BIT7.AND.BIT6) THEN SIZE = 2 ALLOPS = 'SR,'//SOURCE(1:SRCEND) OPCODE = 'MOVE ' OPS(3) = ALLOPS(21:30) SRCWXR = .TRUE. ELSE OPCODE = 'NEGX.'//LENEXT ALLOPS = SOURCE * Assembler on CS/9000 has bug - screws up NEGX -- so fake it SRCWXR = .TRUE. DSTWXR = .TRUE. ENDIF ENDIF ELSEIF (MOD(MHNIB,2).EQ.1) THEN IF (BIT7.AND.SRCEND.GT.0.AND.SRCMOD.NE.1) THEN IF (BIT6.AND.(SRCMOD.NE.7.OR.SRCREG.LE.3).AND.SRCMOD.NE.0 & .AND.SRCMOD.NE.3.AND.SRCMOD.NE.4) THEN OPCODE = 'LEA'

WRITE (ALLOPS,'(A,'',A'',I1.1)') ALTSRC(1:ALTSND),DSTREG IF (IAIJJI.GT.0) THEN CALL ENTHSH(ADDREF(0),14,IAIJJI,ADRNDX) ELSEIF (IJIJJI.GT.0) THEN CALL ENTHSH(ADDREF(0),14,IJIJJI,ADRNDX) ENDIF ELSEIF (NOT6) THEN OPCODE = 'CHK' WRITE (ALLOPS,'(A,'',D'',I1.1)') ALTSRC(1:ALTSND),DSTREG ELSE CALL DOBAD(IWHQQQ) ENDIF ELSE CALL DOBAD(IWHQQQ) ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.2) THEN IF (SRCEND.EQ.0.OR.(SRCMOD.EQ.7.AND.SRCREG.GE.2)) THEN CALL DOBAD(IWHQQQ) ELSE IF (BIT6.AND.BIT7) THEN SIZE = 2 ALLOPS = 'CCR,'//ALTDST(1:ALTDND) OPCODE = 'MOVE ' SRCWXR = .TRUE. ELSEIF (SRCMOD.NE.1) THEN OPCODE = 'CLR.'//LENEXT ALLOPS = ALTDST ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.4) THEN IF (SRCEND.GT.0.AND.SRCMOD.NE.1) THEN IF (BIT6.AND.BIT7) THEN SIZE = 2 ALLOPS = ALTSRC(1:ALTSND)//',CCR' OPCODE = 'MOVE ' SRCWXR = .TRUE. ELSEIF (SRCMOD.NE.7.OR.SRCREG.LE.1) THEN OPCODE = 'NEG.'//LENEXT ALLOPS = SOURCE ELSE CALL DOBAD(IWHQQQ) ENDIF ELSE CALL DOBAD(IWHQQQ) ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.6) THEN IF (SRCEND.GT.0.AND.SRCMOD.NE.1) THEN IF (BIT6.AND.BIT7) THEN SIZE = 2

ALLOPS = ALTSRC(1:ALTSND)//',SR' OPCODE = 'MOVE ' SRCWXR = .TRUE. ELSEIF (SRCMOD.NE.7.OR.SRCREG.LE.1) THEN OPCODE = 'NOT.'//LENEXT ALLOPS = SOURCE ELSE CALL DOBAD(IWHQQQ) ENDIF ELSE

CALL DOBAD(IWHQQQ) ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.8) THEN IF (SRCEND.EQ.0.OR.(SRCMOD.EQ.7.AND.SRCREG.GE.2)) THEN WHERE = SAVWHR IF (BIT7) THEN C MOVEM REG -> EA IF ((SRCMOD.LE.1).OR.(SRCMOD.EQ.3).OR.((SRCMOD.EQ.7).AND.(SRCR EG.GE.2))) THEN CALL DOBAD(SAVWHR) ELSE IF (BIT6) THEN LENEXT = 'L' SIZE = 3 ELSE LENEXT = 'W' SIZE = 2 ENDIF IWHQQQ = WHERE CALL DOMOVM CALL DOSRC IF (SRCEND.GT.0.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1)) THEN OPCODE = 'MOVEM.'//LENEXT IF (SRCMOD.EQ.4) THEN ALLOPS = REVERS(1:RINDEX)//','//ALTDST(1:ALTDND) SRCWXR = RINDEX .LE. 1 .OR. SRCWXR ELSE ALLOPS = NORMAL(1:NINDEX)//','//ALTDST(1:ALTDND) SRCWXR = NINDEX .LE. 1 .OR. SRCWXR ENDIF DSTSRC = .TRUE. ELSE CALL DOBAD(SAVWHR) ENDIF ENDIF ENDIF ELSE IF (NOT7) THEN IF ((NOT6).AND.SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LT.2)) T HEN OPCODE = 'NBCD' DSTSRC = .TRUE. * ALLOPS = SOURCE(1:SRCEND) ELSEIF (SRCMOD.EQ.0) THEN OPCODE = 'SWAP' * ALLOPS = SOURCE(1:SRCEND) ELSEIF (BIT6.AND.(SRCMOD.EQ.2.OR.SCRMOD.EQ.5.OR.SRCMOD.EQ.6.OR

. & * ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (SRCMOD.EQ.0) THEN OPCODE = 'EXT.W' IF (BIT6) OPCODE = 'EXT.L' ALLOPS = SOURCE(1:SRCEND) ELSE C MOVEM REG -> EA WHERE = SAVWHR IF ((SRCMOD.LE.1).OR.(SRCMOD.EQ.3).OR.((SRCMOD.EQ.7).AND.(SRCR EG.GE.2))) THEN CALL DOBAD(SAVWHR) ELSE IF (BIT6) THEN LENEXT = 'L' SIZE = 3 ELSE LENEXT = 'W' SIZE = 2 ENDIF IWHQQQ = WHERE CALL DOMOVM DSTSRC = .TRUE. CALL DOSRC IF (SRCEND.GT.0.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1)) THEN OPCODE = 'MOVEM.'//LENEXT IF (SRCMOD.EQ.4) THEN ALLOPS = REVERS(1:RINDEX)//','//ALTDST(1:ALTDND) SRCWXR = RINDEX .LE. 1 .OR. SRCWXR ELSE ALLOPS = NORMAL(1:NINDEX)//','//ALTDST(1:ALTDND) SRCWXR = NINDEX .LE. 1 .OR. SRCWXR ENDIF ELSE CALL DOBAD(SAVWHR) ENDIF ENDIF ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.10) THEN IF (BITS76) THEN IF (SRCMOD.EQ.7.AND.SRCREG.EQ.4) THEN WHERE = SAVWHR SRCX1 =.FALSE. SRCX2 =.FALSE. OPS(3) = 'ILLEGAL' ELSEIF (SRCEND.GT.0.AND.SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LE. 1)) THEN DSTSRC = .TRUE. OPCODE = 'TAS' * ALLOPS = SOURCE (SRCMOD.EQ.7.AND.SRCREG.LT.4))) THEN OPCODE = 'PEA' DSTSRC = .TRUE. ALLOPS = ALTSRC(1:ALTSND)

ELSE CALL DOBAD(SAVWHR) ENDIF ELSEIF (SRCEND.GT.0.AND.SRCMOD.NE.1.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1)) THEN * ELSE CALL DOBAD(IWHQQQ) SRCMOD = 0 ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.12) THEN C MOVEM EA -> REG WHERE = SAVWHR IF ((SRCMOD.LE.1).OR.(SRCMOD.EQ.4).OR.NOT7.OR.((SRCMOD.EQ.7).AND.(SRCR EG.GE.4))) THEN CALL DOBAD(SAVWHR) ELSE IF (BIT6) THEN LENEXT = 'L' SIZE = 3 ELSE LENEXT = 'W' SIZE = 2 ENDIF OPCODE = 'MOVEM.'//LENEXT IWHQQQ = WHERE CALL DOMOVM CALL DOSRC IF (SRCEND.GT.0) THEN ALLOPS = ALTSRC(1:ALTSND)//','//NORMAL(1:NINDEX) SRCWXR = NINDEX.LE.1 .OR. SRCWXR OPS(3) = ALLOPS(21:30) ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ALLOPS(21:30) = OPS(3) ELSEIF (MHNIB.EQ.14) THEN IF (BIT6.AND.(.NOT.BIT7)) THEN IF (.NOT.(BIT5.OR.BIT4)) THEN OPCODE = 'TRAP' WRITE (ALLOPS,'(''#'',I2.2)') LONIB I = LONIB K = I THEHEX = HEXOF(K) OPS(3) = '$'//THEHEX(8:8) TH8 = THEHEX(8:8) IF ((V10.OR.V11).AND.(TH8.EQ.'0'.OR.TH8.EQ.'6'.OR.TH8.EQ.'7' & .OR.TH8.EQ.'8'.OR.TH8.EQ.'9'.OR.TH8.EQ.'A')) THEN K2 = CODEW((SAVWHR/2)) K = K2 I = K2 MORHEX = HEXOF(K) DSTSRC = .TRUE. OPCODE = 'TST.'//LENEXT ALLOPS = SOURCE

K = SAVWHR + MEMADR HEXEXT = HEXOF(K) WHERE = SAVWHR + 2 SAVWHR = WHERE IWHQQQ = WHERE ALLOPS(5:15) = OPS(3) WRITE (OPS(3),'(SP,I6.5)') K2 TRAPTP = OPS(3)//' ' IF (TH8.EQ.'0') THEN IF (I.GE.1.AND.I.LE.69) TRAPTP = TRAP0(I) ALLOPS(11:30) = 'SYSCALL '//TRAPTP ELSEIF (TH8.EQ.'6') THEN IF (I.GE.1.AND.I.LE.13) THEN TRAPTP = TRAP6(I) ELSEIF (I.EQ.$8003) THEN TRAPTP = 'AREAD' ELSEIF (I.EQ.$8004) THEN TRAPTP = 'AWRITE' ENDIF ALLOPS(11:30) = 'IOMGR6/SYSIO '//TRAPTP ELSEIF (TH8.EQ.'7') THEN IF (I.EQ.$8002.OR.I.EQ.-32766) THEN TRAPTP = 'OPNCTRLR' ELSEIF (I.EQ.$8000.OR.I.EQ.-32768) THEN TRAPTP = 'OPNDEVI' ELSEIF (I.EQ.$8003.OR.I.EQ.-32765) THEN TRAPTP = '? CLSCTRLR' ELSEIF (I.EQ.$8001.OR.I.EQ.-32767) THEN TRAPTP = '? CLSDEVI' ENDIF ALLOPS(11:30) = 'INTMGR '//TRAPTP ELSEIF (TH8.EQ.'8') THEN IF (I.GE.1.AND.I.LE.11) TRAPTP = TRAP8(I) ALLOPS(11:30) = 'IOMGR8 '//TRAPTP ELSEIF (TH8.EQ.'9') THEN IF (I.GE.1.AND.I.LE.3) TRAPTP = TRAP9(I) ALLOPS(11:30) = 'IOMGR9/SUSPEND '//TRAPTP ELSEIF (TH8.EQ.'A') THEN IF (I.GE.1.AND.I.LE.9) TRAPTP = TRAPA(I) ALLOPS(11:30) = 'REAL-TIME MGR($A) '//TRAPTP ENDIF IT = INTOF(VAL) C4 = CHAR4(IT) IF (VAL(6:10).NE.' ') THEN C5 = C4 ELSE C5 = C4(3:4) ENDIF LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5 LINPTR = LINPTR + 1 LABEL = ' ' OPCODE = ' DC.W' VAL = '$'//MORHEX(5:8) ADDR = ' $'//HEXEXT(3:8) ALLOPS = VAL IF (TRAPTP(1:10).NE.OPS(1)) THEN ALLOPS(11:24) = TRAPTP ELSE ALLOPS(11:24) = ' '//OPS(3) ENDIF

IT = INTOF(VAL) C4 = CHAR4(IT) C5 = C4(3:4) ELSEIF (TH8.EQ.'1') THEN ALLOPS(11:30) = '?? EnterMon ??' ELSEIF (TH8.EQ.'2') THEN ALLOPS(11:30) = '?? ExitMon ??' ELSEIF (TH8.EQ.'3') THEN ALLOPS(11:30) = '?? Wait ??' ELSEIF (TH8.EQ.'4') THEN ALLOPS(11:30) = '?? Signal ??' ELSEIF (TH8.EQ.'4') THEN ALLOPS(6:30) = 'Enter/Exit Supervisor Mode' ELSEIF (TH8.EQ.'B') THEN ALLOPS(11:30) = 'AVAIL- ' ELSEIF (TH8.EQ.'C') THEN ALLOPS(11:30) = 'AVAIL- ' ELSEIF (TH8.EQ.'D') THEN ALLOPS(11:30) = '?AVAIL- ' ELSEIF (TH8.EQ.'E') THEN ALLOPS(11:30) = '?AVAIL- ' ELSEIF (TH8.EQ.'F') THEN ALLOPS(11:30) = '?DEBUG BrkPt?' ENDIF OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) OPS(3) = ALLOPS(21:30) ELSEIF (BIT4.AND.(.NOT.BIT5)) THEN IF (LONIB.GE.8) THEN OPCODE = 'UNLK' WRITE (ALLOPS,'(''A'',I1.1)') SRCREG ELSE K2 = CODEW((SAVWHR/2)) K = K2 MORHEX = HEXOF(K) WHERE = SAVWHR + 2 SAVWHR = WHERE VAL = VAL(1:5)//' '//MORHEX(5:8) OPCODE = 'LINK' WRITE (ALLOPS,'(''A'',I1.1,'',#'',SP,I6.5)') SRCREG,K2 ENDIF ELSEIF (BIT5.AND.(.NOT.BIT4)) THEN OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) IF (LONIB.GE.8) THEN WRITE (OPS(3),'(''MOV USP,A'',I1.1)') SRCREG ALLOPS = OPS(3)(4:10) LINES(LINPTR) = '* MOVE '//ALLOPS//VAL//ADDR LINPTR = LINPTR + 1 ELSE WRITE (OPS(3),'(''MOV A'',I1.1,'',USP'')') SRCREG ALLOPS = OPS(3)(4:10) LINES(LINPTR) = '* MOVE '//ALLOPS//VAL//ADDR LINPTR = LINPTR + 1 ENDIF ALLOPS = OPS(1)//OPS(2)//OPS(3) ELSEIF (BIT4.AND.BIT5) THEN IF (LONIB.EQ.0) THEN OPS(3) = 'RESET' ELSEIF (LONIB.EQ.1) THEN

OPCODE = 'NOP' ALLOPS = ' ' ELSEIF (LONIB.EQ.2) THEN K2 = CODEW((SAVWHR/2)) K = K2 MORHEX = HEXOF(K) WHERE = SAVWHR + 2 SAVWHR = WHERE VAL = VAL(1:5)//' OPS(3) = 'STOP#$'//MORHEX(5:8) '//MORHEX(5:8) WRITE (CTEMP,'(SP,I6.5)') K2 ALLOPS = OPS(1)(1:6)//','//CTEMP ELSEIF (LONIB.EQ.3) THEN OPS(3) = 'RTE' ALLOPS(11:15) = 'RTE' IF (DOJSR.AND.JSRNUM.LT.4096) THEN JSRTRG(JSRNUM,1) = -4 JSRTRG(JSRNUM,2) = MEMADR + SAVWHR - 2 JSRNUM = JSRNUM + 1 ENDIF K = MEMADR + SAVWHR CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ELSEIF (LONIB.EQ.4) THEN K2 = CODEW((SAVWHR/2)) K = K2 MORHEX = HEXOF(K) WHERE = SAVWHR + 2 SAVWHR = WHERE VAL = VAL(1:5)//' '//MORHEX(5:8) OPS(3) = 'RTD $'//MORHEX(5:8) WRITE (CTEMP,'(SP,I6.5)') K2 ALLOPS = OPS(1)(1:6)//','//CTEMP * 68010 & LATER * * * * * SRCWXR = .TRUE. IF (DOJSR.AND.JSRNUM.LT.4096) THEN JSRTRG(JSRNUM,1) = -5 JSRTRG(JSRNUM,2) = MEMADR + SAVWHR - 2 JSRNUM = JSRNUM + 1 ENDIF K = MEMADR + SAVWHR CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ELSEIF (LONIB.EQ.5) THEN OPCODE = 'RTS' ALLOPS = ' ' IF (DOJSR.AND.JSRNUM.LT.4096) THEN JSRTRG(JSRNUM,1) = -2 JSRTRG(JSRNUM,2) = MEMADR + SAVWHR - 2 JSRNUM = JSRNUM + 1 ENDIF K = MEMADR + SAVWHR CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ELSEIF (LONIB.EQ.6) THEN OPCODE = 'TRAPV' ALLOPS = ' ' ELSEIF (LONIB.EQ.7) THEN OPCODE = 'RTR' ALLOPS = ' ' IF (DOJSR.AND.JSRNUM.LT.4096) JSRTRG(JSRNUM,1) = -3 THEN JSRTRG(JSRNUM,2) = MEMADR + SAVWHR - 2 JSRNUM = JSRNUM + 1 ENDIF

K = MEMADR + SAVWHR CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ELSEIF (LONIB.EQ.10) THEN OPS(3) = 'MOVEC cr>' ELSEIF (LONIB.EQ.11) THEN OPS(3) = 'MOVEC >cr' ENDIF ENDIF ALLOPS(21:30) = OPS(3) WHERE = SAVWHR SRCX1 =.FALSE. SRCX2 =.FALSE. ELSEIF (BIT7.AND.SRCEND.GT.0.AND.(SRCMOD.NE.7.OR.SRCREG.LE.3).AND. & SRCMOD.GT.1.AND.SRCMOD.NE.3.AND.SRCMOD.NE.4) THEN DSTSRC = .TRUE. IF (NOT6) THEN OPCODE = 'JSR' ELSE OPCODE = 'JMP' ENDIF IF (SRCMOD.EQ.7) THEN IF (.NOT.FOUND) THEN OPS(3) = ALLOPS(21:30) CALL DOABRL ALLOPS(21:30) = OPS(3) ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7.AND.SRCREG.LE.2) THEN IADDR = IJIJJI IF (IADDR.LE.0) IADDR = -1 ELSEIF (SRCMOD.NE.7) THEN ENDIF IADDR = -1 IF (NOT6.AND.DOJSR.AND.JSRNUM.LE.4096) THEN JSRTRG(JSRNUM,1) = IADDR JSRTRG(JSRNUM,2) = MEMADR + SAVWHR - 2 JSRNUM = JSRNUM + 1 ELSEIF (BIT6.AND.DOBRA.AND.BRANUM.LE.4096) THEN BRATRG(BRANUM,1) = IADDR BRATRG(BRANUM,2) = MEMADR + SAVWHR -2 BRANUM = BRANUM + 1 ENDIF IF (IADDR.GT.0) CALL ENTHSH(ADDREF(0),14,IADDR,ADRNDX) IF (BIT6) THEN K = MEMADR + WHERE CALL ENTHSH(ADDREF(0),14,K,ADRNDX) ENDIF ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) RETURN END *---------------------------------------------------------------------SUBROUTINE DO5 CHARACTER*74 LINES(1200) CHARACTER*30 ALTSRC,ALTDST,ALLOPS CHARACTER*20 SOURCE,DESTIN

CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR CHARACTER*8 MMADR,THEHEX,HEXADR,HEXOF,SRXHEX,DSXHEX,HEXEXT CHARACTER*2 CC(0:15),DSTR CHARACTER*1 LENEXT,SORU,SRCR INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,IWHQQQ INTEGER*4 LINPTR,SAVWHR,CNT,MEMADR,TRADDR,HINIB,MHNIB,MLNIB,LONIB INTEGER*4 ADDREF(0:16383),ADRNDX,BLKBEG,BLKEND,ALTSND,ALTDND INTEGER*4 LWORD,HIBYT,LOBYT INTEGER*2 CODEW(0:16383),WHERE,END,CURWRD,WORDS(0:1) INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3) INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1) LOGICAL*4 V10,V11 LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,FOUND LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL) EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)) EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE) EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMB YT(0)) COMMON COMMON COMMON COMMON COMMON COMMON COMMON COMMON COMMON COMMON J2 SAVE /NOTS/,/ADRMOD/,/MORE/,/ADRUN/,/EXTHEX/,/DISNUM/,/CODE/,/BITS/ SAVE /SMASH/,/VERSNS/,/REFS/,/LBLS/,/ABRLAD/ EXTERNAL HEXOF SAVE DATA CC(0)/'T '/,CC(1)/'F '/,CC(2)/'HI'/,CC(3)/'LS'/,CC(4)/'CC'/,CC(5)/'CS '/ DATA CC(6)/'NE'/,CC(7)/'EQ'/,CC(8)/'VC'/,CC(9)/'VS'/,CC(10)/'PL'/,CC(11)/' MI'/ DATA CC(12)/'GE'/,CC(13)/'LT'/,CC(14)/'GT'/,CC(15)/'LE'/ SAVWHR = WHERE OPS(3) = ' ' ALLOPS = OPS(1)//OPS(2)//OPS(3) IF (BITS76) THEN IF (SRCMOD.EQ.1) THEN OPCODE = 'DB'//CC(MHNIB) CALL FETCH(CURWRD,L,M) WRDX = .TRUE. K = CURWRD THEHEX = HEXOF(K) HEXEXT = THEHEX(5:8) IADDR = MEMADR + CURWRD + WHERE - 2 HEXADR = HEXOF(IADDR) WRITE (ALLOPS,'(''D'',I1.1,'',*'',SP,I6.5)') SRCREG,CURWRD+2 OPS(3) = 'H_'//HEXADR(3:8) ALLOPS(21:30) = OPS(3) IF (FOUND) THEN IFB = FNDHSH(ADDREF(0),14,IADDR) IF (IFB.NE.-1) OPS(1) = ALLOPS(4:14) THEN OPS(2) = ALLOPS(1:3) /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX /ADRUN/SOURCE,DESTIN,/EXTHEX/SRXHEX,DSXHEX,HEXEXT /DISNUM/LINPTR,/DISASM/ASMOUT,LINES,MMADR,ALLOPS /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR,/VERSNS/V10,V11 /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJ

ALLOPS = OPS(2)(1:3)//OPS(3)//OPS(1) OPS(3) = OPS(1) OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) ENDIF ENDIF CALL ENTHSH(ADDREF(0),14,IADDR,ADRNDX) ELSEIF (.NOT.(SRCMOD.EQ.7.AND.SRCREG.GE.2)) THEN IWHQQQ = WHERE DSTSRC = .TRUE. CALL DOSRC IF (SRCEND.GT.0.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1)) THEN OPCODE = 'S'//CC(MHNIB) OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL ELSE CALL DOBAD(SAVWHR) ENDIF ENDIF ELSE IF (NOT7.AND.NOT6) THEN LENEXT = 'B' SIZE = 1 ELSEIF (BIT7.AND.NOT6) THEN LENEXT = 'L' SIZE = 3 ELSEIF (BIT6.AND.NOT7) THEN LENEXT = 'W' SIZE = 2 ELSE LENEXT = 'Q' SIZE = 0 ENDIF IF (BIT8) THEN OPCODE = 'SUBQ.'//LENEXT ELSE OPCODE = 'ADDQ.'//LENEXT ENDIF IWHQQQ = WHERE DSTSRC = .TRUE. CALL DOSRC IF (SRCEND.GT.0.AND.(SRCMOD.NE.1.OR.SIZE.NE.1).AND.SIZE.GT.0 & .AND.(SRCMOD.NE.7.OR.SRCREG.LE.1)) THEN DSTSRC = .TRUE. CNT = MHNIB/2 IF (CNT.EQ.0) CNT = 8 WRITE (ALLOPS,'(''#'',I1.1,'','',A)') CNT,SOURCE(1:SRCEND) ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) RETURN END *---------------------------------------------------------------------SUBROUTINE DO812 CHARACTER*74 LINES(1200)

CHARACTER*30 ALTSRC,ALTDST,ALLOPS CHARACTER*20 SOURCE,DESTIN CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR CHARACTER*8 MMADR,THEHEX,HEXADR,HEXOF CHARACTER*1 LENEXT,SORU,SRCR*2,DSTR INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,IWHQQQ,LINPTR INTEGER*4 HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT,LWORD,SAVWHR INTEGER*4 ADDREF(0:16383),ADRNDX,BLKBEG,BLKEND,ALTSND,ALTDND INTEGER*2 WORDS(0:1),CURWRD INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1) LOGICAL*4 V10,V11 LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,REGSWP,FOUND LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 LOGICAL*1 IS8,IS12,LOGIC1,LOGIC2 EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL) EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)) EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE) COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS,/ADRUN/SOURCE,DESTIN COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX COMMON /DISNUM/LINPTR,/VERSNS/V10,V11,/SWPREG/REGSWP COMMON /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJ J2 SAVE /ADRMOD/,/SMASH/,/BITS/,/NOTS/,/DISASM/,/MORE/,/DISMUN/,/ADRUN/ SAVE /VERSNS/,/SWPREG/,/REFS/,/LBLS/,/ABRLAD/ EXTERNAL HEXOF SAVE IS8 = HINIB .EQ. 8 IS12 = HINIB .EQ. 12 SAVWHR = WHERE IWHQQQ = WHERE OPS(3) = ' ' LOGIC1 = (BIT8.AND.(.NOT.(BIT7.OR.BIT6))) LOGIC2 = (IS12.AND.BIT8.AND.((BIT6.AND.NOT7).OR.(BIT7.AND.BIT3.AND.NOT6))) SIZE = 0 IF (NOTS76) THEN IF (NOT7.AND.NOT6) THEN LENEXT = 'B' SIZE = 1 ELSEIF (BIT7.AND.NOT6) THEN LENEXT = 'L' SIZE = 3 ELSEIF (BIT6.AND.NOT7) THEN LENEXT = 'W' SIZE = 2 ELSE LENEXT = 'Q' SIZE = 0 ENDIF ELSEIF (.NOT.(NOTS54.AND.(LOGIC1.OR.LOGIC2))) THEN LENEXT = 'W' SIZE = 2 ENDIF IF (NOTS54.AND.(LOGIC1.OR.LOGIC2)) THEN IF (LOGIC1) THEN

IF (IS8) THEN OPCODE = 'SBCD' ELSEIF (IS12) THEN OPCODE = 'ABCD' ENDIF IF (NOT3) THEN WRITE (ALLOPS,'(''D'',I1.1,'',D'',I1.1)') SRCREG,DSTREG ELSE WRITE (ALLOPS,'(''-(A'',I1.1,''),-(A'',I1.1,'')'')') SRCREG,DS TREG ENDIF ELSEIF (LOGIC2) THEN OPCODE = 'EXG' SRCR = ',D' IF (BIT3) SRCR = ',A' DSTR = 'D' IF (BIT6.AND.BIT3) DSTR = 'A' IF (REGSWP) THEN WRITE (ALLOPS,'(A1,I1.1,A2,I1.1)') DSTR,SRCREG,SRCR,DSTREG ELSE WRITE (ALLOPS,'(A1,I1.1,A2,I1.1)') DSTR,DSTREG,SRCR,SRCREG ENDIF ENDIF ELSE IWHQQQ = WHERE IF (SIZE.LE.0.OR.SIZE.GT.3) SIZE = 2 CALL DOSRC IF (SRCEND.GT.0) THEN IF (BITS76) THEN SORU = 'U' IF (BIT8) SORU = 'S' IF (IS8) THEN OPCODE = 'DIV'//SORU ELSEIF (IS12) THEN OPCODE = 'MUL'//SORU ENDIF WRITE (ALLOPS,'(A,'',D'',I1.1)') DESTIN(1:DSTEND),DSTREG ELSE IF (IS8) THEN OPCODE = 'OR.'//LENEXT ELSEIF (IS12) THEN OPCODE = 'AND.'//LENEXT ENDIF IF (BIT8.AND.SRCMOD.NE.1.AND.SRCMOD.NE.0.AND. & (SRCMOD.NE.7.OR.SRCREG.LE.1)) THEN DSTSRC = .TRUE. WRITE (ALLOPS,'(''D'',I1.1,'','',A)') DSTREG,ALTDST(1:ALTD ND) ELSEIF (NOT8.AND.SRCMOD.NE.1) THEN WRITE (ALLOPS,'(A,'',D'',I1.1)') ALTSRC(1:ALTSND),DSTREG ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL

OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) RETURN END *---------------------------------------------------------------------SUBROUTINE DO11 CHARACTER*74 LINES(1200) CHARACTER*30 ALTSRC,ALTDST,ALLOPS CHARACTER*20 SOURCE,DESTIN CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR CHARACTER*8 SRXHEX,DSXHEX,HEXEXT,MMADR,THEHEX,HEXADR,HEXOF CHARACTER*1 LENEXT,SORU,SRCR,DSTR*2 INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,IWHQQQ INTEGER*4 LINPTR,SAVWHR,LWORD,HIBYT,LOBYT,HINIB,MHNIB,MLNIB,LONIB INTEGER*4 ADDREF(0:16383),ADRNDX,BLKBEG,BLKEND,ALTSND,ALTDND INTEGER*2 WORDS(0:1),CURWRD INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1) LOGICAL*4 V10,V11 LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,FOUND LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE) EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL) EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)) COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT COMMON /ADRUN/SOURCE,DESTIN,/REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND COMMON /VERSNS/V10,V11,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJJ2 COMMON /DISNUM/LINPTR SAVE /REFS/,/LBLS/,/ABRLAD/ EXTERNAL HEXOF,ENTHSH SAVE SAVWHR = WHERE IWHQQQ = WHERE OPS(3) = ' ' IF (NOTS76) THEN IF (NOT7.AND.NOT6) THEN LENEXT = 'B' SIZE = 1 ELSEIF (BIT7.AND.NOT6) THEN LENEXT = 'L' SIZE = 3 ELSEIF (BIT6.AND.NOT7) THEN LENEXT = 'W' SIZE = 2 ELSE LENEXT = 'Q' SIZE = 0 ENDIF ENDIF IF (BITS76) THEN IWHQQQ = WHERE LENEXT = 'W' SIZE = 2

IF (BIT8) THEN LENEXT = 'L' SIZE = 3 ENDIF CALL DOSRC IF (SRCEND.GT.0.AND.SIZE.GT.1) THEN OPCODE = 'CMPA.'//LENEXT WRITE (ALLOPS,'(A,'',A'',I1.1)') ALTSRC(1:ALTSND),DSTREG IF (IAIJJI.NE.0) CALL ENTHSH(ADDREF(0),14,IAIJJI,ADRNDX) ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (NOT8.AND.(SIZE.NE.1.OR.SRCMOD.NE.1)) THEN IWHQQQ = WHERE CALL DOSRC IF (SRCEND.GT.0) THEN OPCODE = 'CMP.'//LENEXT WRITE (ALLOPS,'(A,'',D'',I1.1)') ALTSRC(1:ALTSND),DSTREG ELSE CALL DOBAD(IWHQQQ) ENDIF ELSEIF (BIT8) THEN IF (NOTS54.AND.BIT3) THEN OPCODE = 'CMPM.'//LENEXT WRITE (ALLOPS,'(''(A'',I1.1,'')+,(A'',I1.1,'')+'')') SRCREG,DSTREG ELSEIF ((SRCMOD.NE.7).OR.(SRCREG.LE.1)) THEN IWHQQQ = WHERE DSTSRC = .TRUE. CALL DOSRC OPCODE = 'EOR.'//LENEXT WRITE (ALLOPS,'(''D'',I1.1,'','',A)') DSTREG,ALTDST(1:ALTDND) ELSE CALL DOBAD(IWHQQQ) ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) RETURN END *---------------------------------------------------------------------SUBROUTINE DO14 CHARACTER*1 LENEXT,SORU,SRCR,DSTR*2 CHARACTER*4 SHIFTR(0:3,0:1) CHARACTER*8 SRXHEX,DSXHEX,HEXEXT,HEXOF,MMADR,THEHEX,HEXADR CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR CHARACTER*20 SOURCE,DESTIN CHARACTER*30 ALTSRC,ALTDST,ALLOPS CHARACTER*74 LINES(1200) INTEGER*4 LWORD,HIBYT,LOBYT,HINIB,MHNIB,MLNIB,LONIB,LINPTR,SAVWHR,KIND INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,IWHQQQ,CNT INTEGER*4 ADDREF(0:16383),ADRNDX,BLKBEG,BLKEND,ALTSND,ALTDND INTEGER*2 WORDS(0:1),CURWRD INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1) LOGICAL*4 V10,V11 LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,FOUND LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL)

EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)) EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE) COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54 COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54 COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT COMMON /ADRUN/SOURCE,DESTIN,/REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND COMMON /VERSNS/V10,V11,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJJ2 COMMON /DISNUM/LINPTR SAVE /REFS/,/LBLS/,/ABRLAD/ EXTERNAL HEXOF SAVE DATA SHIFTR(0,0)/' ASR'/,SHIFTR(0,1)/' ASL'/,SHIFTR(1,0)/' LSR'/,SHIFTR(1, 1)/' LSL'/ DATA SHIFTR(2,0)/'ROXR'/,SHIFTR(2,1)/'ROXL'/,SHIFTR(3,0)/' ROR'/,SHIFTR(3, 1)/' ROL'/ OPS(3) = ' ' ALLOPS = OPS(1)//OPS(2)//OPS(3) IF (BITS76) THEN IF (MHNIB.EQ.4.OR.MHNIB.EQ.5) THEN KIND = IAND((MHNIB/2),3) SIZE = 2 IF (NOT8) THEN OPCODE = SHIFTR(KIND,0)//'.W' ELSE OPCODE = SHIFTR(KIND,1)//'.W' ENDIF OPS(3) = OPCODE(2:10) IF (OPCODE(1:1).EQ.' ') OPCODE = OPS(3) OPS(3) = ' ' IWHQQQ = WHERE DSTSRC = .TRUE. CALL DOSRC IF (.NOT.(SRCEND.GT.0.AND.(SRCMOD.NE.7.OR.SRCREG.LE.1).AND.SRCMOD. NE.0 & .AND.SRCMOD.NE.1)) CALL DOBAD(IWHQQQ) ENDIF ELSE IF (NOT7.AND.NOT6) THEN LENEXT = 'B' SIZE = 1 ELSEIF (BIT7.AND.NOT6) THEN LENEXT = 'L' SIZE = 3 ELSEIF (BIT6.AND.NOT7) THEN LENEXT = 'W' SIZE = 2 ELSE LENEXT = 'Q' SIZE = 0 ENDIF KIND = IAND(SRCMOD,3) C IF (BIT5) KIND = KIND - 4 IF (NOT8) THEN OPCODE = SHIFTR(KIND,0)//'.'//LENEXT ELSE

OPCODE = SHIFTR(KIND,1)//'.'//LENEXT ENDIF OPS(3) = OPCODE(2:10) IF (OPCODE(1:1).EQ.' ') OPCODE = OPS(3) OPS(3) = ' ' CNT = MHNIB/2 IF (NOT5) THEN IF (CNT.EQ.0) CNT = 8 WRITE (ALLOPS,'(''#'',I1.1,'',D'',I1.1)') CNT,SRCREG ELSE WRITE (ALLOPS,'(''D'',I1.1,'',D'',I1.1)') CNT,SRCREG ENDIF ENDIF OPS(3) = ALLOPS(21:30) IF (SRCMOD.EQ.7) CALL DOABRL OPS(1) = ALLOPS(1:10) OPS(2) = ALLOPS(11:20) RETURN END ca -

You might also like