Sei sulla pagina 1di 30

$CHAREQU

$SEGMENT DISASMAD
SUBROUTINE DOADDR
CHARACTER*8 THEHEX,HEXOF,SRXHEX,DSXHEX,HEXEXT,MMADR
CHARACTER*1 INDEX*5,ITYPE*2,ILEN*2,CODEC(0:2047),HEXCHR(0:2047),CHR
CHARACTER*4 CHAR4,CIT
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 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,LWORD
INTEGER*4 HINIB,MHNIB,MLNIB,LONIB,TRADDR,MEMADR,IAND,K,INSTRB,ICIT
INTEGER*4 IJIJJI,IJIJJ2,IAIJJI,IAIJJ2,BLKBEG,BLKEND,ADRNDX,ADDREF(0:16383)
INTEGER*4 ALTSND,ALTDND,FNDHSH,HIBYT,LOBYT,LINPTR
INTEGER*2 WORDS(0:1),CURWRD,CODEW(0:16383),WHERE,END,I2,I2AND2,MASK2,ANI2
INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3)
INTEGER*1 HEXBYT(0:2047),I1,J1,K1,L1,M1,LOBYTE,HIBYTE,TBYT(0:1)
LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,DISPHX,IOFLAG,FOUND
LOGICAL*2 SRCNLY,FULL,DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP
EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMBYT(0))
EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE),(ICIT,CIT)
EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL)
EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1))
COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJJ2
COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR,/REL/HEXCHR
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT,/BEGINI/INSTRB
COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT,/ADRUN/SOURCE,DESTIN
COMMON /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND
COMMON /LBLS/ALTSRC,ALTDST,ALTSND,ALTDND
COMMON /SPECIA/ICIT,/DISNUM/LINPTR
COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,/FLAGIO/IOFLAG
COMMON /MODESQ/DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP
SAVE /MODESQ/,/MORE/,/ADRMOD/,/ADRUN/,/EXTHEX/,/SMASH/,/CODE/,/REL/
SAVE /FLAGIO/,/BEGINI/,/REFS/,/LBLS/,/SPECIA/,/ABRLAD/,/DISNUM/
EXTERNAL HEXOF,I2AND2
SAVE
SRCNLY = .FALSE.
9898 CONTINUE
IOFLAG = .FALSE.
SRCWXR = .FALSE.
DSTWXR = .FALSE.
DISPHX = .FALSE.
DSTEND = 1
ALTDND = 1
DSTX1 = .FALSE.
DSTX2 = .FALSE.
DSXHEX = ' '
SRCEND = 1
ALTSND = 1
SRCX1 = .FALSE.
SRCX2 = .FALSE.
SRXHEX = ' '
ALLOPS = ' '
IJIJJI = 0
IJIJJ2 = 0
IAIJJI = 0
IAIJJ2 = 0
IF (SRCMOD.EQ.0) THEN
WRITE (SOURCE,'(''D'',I1.1)') SRCREG
SRCEND = 2
ELSEIF (SRCMOD.EQ.1) THEN
WRITE (SOURCE,'(''A'',I1.1)') SRCREG
SRCEND = 2
ELSEIF (SRCMOD.EQ.2) THEN
WRITE (SOURCE,'(''(A'',I1.1,'')'')') SRCREG
SRCEND = 4
ELSEIF (SRCMOD.EQ.3) THEN
WRITE (SOURCE,'(''(A'',I1.1,'')+'')') SRCREG
SRCEND = 5
ELSEIF (SRCMOD.EQ.4) THEN
WRITE (SOURCE,'(''-(A'',I1.1,'')'')') SRCREG
SRCEND = 5
ELSEIF (SRCMOD.EQ.5) THEN
CALL FETCH(CURWRD,L,M)
SRCX1 = .TRUE.
K = CURWRD
THEHEX = HEXOF(K)
SRXHEX = THEHEX(5:8)
IF (DISPHX) THEN
WRITE (SOURCE,'(''$'',A4,''(A'',I1.1,'')'')') SRXHEX,SRCREG
SRCEND = 9
ELSE
WRITE (SOURCE,'(SP,I6.5,''(A'',SS,I1.1,'')'')') K,SRCREG
SRCEND = 10
ENDIF
IF (K.EQ.0) SRCWXR = .TRUE.
ELSEIF (SRCMOD.EQ.6) THEN
L = 0
M = 0
IWHQQQ = WHERE
IJIJJI = 0
CALL FETCH(CURWRD,L,M)
MASK2 = $0700
I2 = I2AND2(CURWRD,MASK2)
IF (I2.NE.0) THEN
* USED IN 68020 BUT NOT 68000 &C
WHERE = IWHQQQ
SRCEND = 0
ELSE
IBYTE = L
IDBYTE = M
IDBYTE = MOD(IDBYTE,256)
IF (IDBYTE.LT.0) IDBYTE = IDBYTE + 256
SRCX1 = .TRUE.
K = CURWRD
THEHEX = HEXOF(K)
IIKK = MOD(K,128)
SRXHEX = THEHEX(5:8)
IBYTE = MOD(IBYTE/8,32) + 32
IBYTE = MOD(IBYTE,32)
IF (IBYTE.GT.15) THEN
ITYPE = ',A'
FULL = .NOT. SPRSXA
ELSE
ITYPE = ',D'
FULL = .TRUE.
ENDIF
IJK = MOD(IBYTE,2)
IF (IJK.EQ.0) THEN
ILEN = '.W'
SRCWXR = .NOT. FULL
ELSE
ILEN = '.L'
FULL = (.NOT. SPRSLX) .AND. FULL
ENDIF
IBYTE = IBYTE/2
IBYTE = MOD(IBYTE,8)
IF (FULL) THEN
WRITE (INDEX,'(A2,I1.1,A2)') ITYPE,IBYTE,ILEN
IF (DISPHX) THEN
WRITE (SOURCE,'(''$'',A2,''(A'',I1.1,A5,'')'')') THEHEX(7:8),SRCREG,INDEX
SRCEND = 12
ELSE
WRITE (SOURCE,'(SP,I4.3,''(A'',SS,I1.1,A5,'')'')') IIKK,SRCREG,INDEX
SRCEND = 13
ENDIF
ELSE
WRITE (INDEX,'(A2,I1.1,2X)') ITYPE,IBYTE
IF (DISPHX) THEN
WRITE (SOURCE,'(''$'',A2,''(A'',I1.1,A3,'')'')')
THEHEX(7:8),SRCREG,INDEX(1:3)
SRCEND = 10
ELSE
WRITE (SOURCE,'(SP,I4.3,''(A'',SS,I1.1,A3,'')'')') IIKK,SRCREG,INDEX(1:3)
SRCEND = 11
ENDIF
ENDIF
ENDIF
ELSEIF (SRCMOD.EQ.7) THEN
IF (SRCREG.EQ.0) THEN
CALL FETCH(CURWRD,L,M)
SRCX1 = .TRUE.
K = CURWRD
K = IAND(K,$0FFFFFF)
CALL ENTHSH(ADDREF(0),14,K,ADRNDX)
IJIJJI = K
IAIJJI = K
THEHEX = HEXOF(K)
IF (THEHEX(1:3).EQ.'00F') CALL TSTIOA(IJIJJI)
IOFLAG = .TRUE.
SRXHEX = THEHEX(5:8)
IF (DOABS) THEN
WRITE (SOURCE,'(''$'',A4,''.W'')') SRXHEX
SRCEND = 7
ELSE
WRITE (SOURCE,'(''$'',A4,'' .W'')') SRXHEX
SRCEND = 5
IF (DSTSRC.OR.SRCNLY) SRCEND = 8
DESTIN = SOURCE(1:5)
DSTEND = 5
SRCWXR = .TRUE.
ENDIF
IF (K.GE.BLKBEG.AND.K.LT.BLKEND) THEN
IF (FOUND) THEN
J = DSTEND + 11
ALLOPS(1:J) = 'H_'//THEHEX(3:8)//' '//SOURCE(1:DSTEND)//' '
ALTSRC = ALLOPS
ALTSND = 8
ENDIF
ENDIF
ELSEIF (SRCREG.EQ.1) THEN
CALL FETCHL(LWORD)
IJIJJI = LWORD
IAIJJI = LWORD
ANI2 = LWORD
SRCX1 = .TRUE.
SRCX2 = .TRUE.
THEHEX = HEXOF(LWORD)
CALL ENTHSH(ADDREF,14,LWORD,ADRNDX)
IF (LWORD.GE.$0EF8000.OR.THEHEX(1:3).EQ.'00F') CALL TSTIOA(IJIJJI)
IOFLAG = .TRUE.
SRXHEX = THEHEX
IF (DOABS) THEN
WRITE (SOURCE,'(''$'',A8,''.L'')') THEHEX
SRCEND = 11
DSTEND = 11
DESTIN = SOURCE
ELSE
WRITE (SOURCE,'(''$'',A8,'' .L'')') THEHEX
SRCEND = 9
IF (DSTSRC.OR.SRCNLY) SRCEND = 12
DESTIN = SOURCE(1:9)
DSTEND = 9
SRCWXR = ANI2 .EQ. LWORD
ENDIF
IF (LWORD.GE.BLKBEG.AND.LWORD.LT.BLKEND) THEN
IF (FOUND) THEN
J = DSTEND + 11
ALLOPS(1:J) = 'H_'//SRXHEX(3:8)//' '//SOURCE(1:DSTEND)//' '
ALTSRC = ALLOPS
ALTSND = 8
ENDIF
ENDIF
ELSEIF (SRCREG.EQ.2) THEN
IJIJJI = WHERE
ANI2 = WHERE
CALL FETCH(CURWRD,L,M)
SRCX1 = .TRUE.
K = CURWRD
THEHEX = HEXOF(K)
SRXHEX(1:4) = THEHEX(5:8)
ANI2 = CURWRD + IJIJJI - INSTRB
WRITE (SOURCE,'(''*'',SP,I6.5,''(PC)'')') ANI2
SRCEND = 11
DESTIN = SOURCE
DSTEND = SRCEND
IAIJJI = MEMADR + IJIJJI + CURWRD
IF (IAIJJI.GE.BLKBEG.AND.IAIJJI.LT.BLKEND) THEN
IF (FOUND) THEN
THEHEX = HEXOF(IAIJJI)
ALLOPS(1:25) = 'H_'//THEHEX(3:8)//'(PC) '//SOURCE(1:SRCEND)//' '
ALTSRC = ALLOPS
ALTSND = 12
ENDIF
ENDIF
CALL ENTHSH(ADDREF,14,IAIJJI,ADRNDX)
ELSEIF (SRCREG.EQ.3) THEN
L = 0
M = 0
ANI2 = WHERE
IWHQQQ = WHERE
IJIJJI = WHERE
CALL FETCH(CURWRD,L,M)
KL = WHERE
MASK2 = $0700
I2 = I2AND2(CURWRD,MASK2)
IF (I2.NE.0) THEN
WHERE = IWHQQQ
* USED IN 68020 BUT NOT 68000 &C
SRCEND = 0
IJIJJI = 0
ELSE
SRCX1 = .TRUE.
IBYTE = L
M1 = M + IJIJJI - INSTRB
IAIJJI = (MEMADR + INSTRB) + M1
K = CURWRD
THEHEX = HEXOF(K)
SRXHEX = THEHEX(5:8)
IBYTE = MOD(IBYTE/8,32) + 32
IBYTE = MOD(IBYTE,32)
IF (IBYTE.GT.15) THEN
ITYPE = ',A'
FULL = .NOT. SPRSXA
ELSE
ITYPE = ',D'
FULL = .TRUE.
ENDIF
IJK = MOD(IBYTE,2)
IF (IJK.EQ.0) THEN
ILEN = '.W'
SRCWXR = .NOT. FULL
ELSE
ILEN = '.L'
FULL = (.NOT. SPRSLX) .AND. FULL
ENDIF
IBYTE = IBYTE/2
IBYTE = MOD(IBYTE,8)
IF (FULL) THEN
WRITE (INDEX,'(A2,I1.1,A2)') ITYPE,IBYTE,ILEN
WRITE (SOURCE,'(''*'',SP,I4.3,''(PC'',A5,'')'')') M1,INDEX
SRCEND = 14
ELSE
WRITE (INDEX,'(A2,I1.1,2X)') ITYPE,IBYTE
WRITE (SOURCE,'(''*'',SP,I4.3,''(PC'',A3,'')'')') M1,INDEX(1:3)
SRCEND = 12
ENDIF
IF (M1.EQ.-128) THEN
SOURCE(2:2) = '+'
IAIJJI = IAIJJI + 256
ENDIF
DESTIN = SOURCE
DSTEND = SRCEND
IF (IAIJJI.GE.BLKBEG.AND.IAIJJI.LT.BLKEND) THEN
IF (FOUND) THEN
THEHEX = HEXOF(IAIJJI)
IF (FULL) THEN
ALLOPS = 'H_'//THEHEX(3:8)//'(PC'//INDEX(1:5)//')
'//SOURCE(1:SRCEND)
ALTSND = 17
ELSE
ALLOPS = 'H_'//THEHEX(3:8)//'(PC'//INDEX(1:3)//')
'//SOURCE(1:SRCEND)
ALTSND = 15
ENDIF
ALTSRC = ALLOPS
ENDIF
ENDIF
CALL ENTHSH(ADDREF,14,IAIJJI,ADRNDX)
ENDIF
ELSEIF (SRCREG.EQ.4) THEN
IF (SIZE.EQ.1) THEN
CALL FETCH(CURWRD,L,M)
SRCX1 = .TRUE.
IK = CURWRD
THEHEX = HEXOF(IK)
SRXHEX(5:8) = ' '
SRXHEX(1:4) = THEHEX(5:8)
SOURCE = '#$'//THEHEX(7:8)
SRCEND = 4
SRCWXR = SRXHEX(1:2).NE.'00'
IF (SRCWXR) LABEL(9:10) = '??'
ELSEIF (SIZE.EQ.2) THEN
CALL FETCH(CURWRD,L,M)
SRCX1 = .TRUE.
K = CURWRD
THEHEX = HEXOF(K)
SRXHEX(1:4) = THEHEX(5:8)
SOURCE = '#$'//SRXHEX(1:4)
SRCEND = 6
ELSEIF (SIZE.EQ.3) THEN
CALL FETCHL(LWORD)
SRCX1 = .TRUE.
SRCX2 = .TRUE.
IJIJJI = LWORD
III = LWORD
THEHEX = HEXOF(LWORD)
SRXHEX = THEHEX
SOURCE = '#$'//THEHEX
SRCEND = 10
IF (LWORD.GE.$0EF8000.OR.THEHEX(1:3).EQ.'00F') THEN
CALL TSTIOA(IJIJJI)
IOFLAG = .TRUE.
ELSE
IJIJJI = III
CIT = CHAR4(IJIJJI)
IF (ICIT.EQ.LWORD) THEN
SOURCE = '#'''//CIT//''' $'//THEHEX
SRCEND = 7
ELSEIF (LWORD.GE.BLKBEG.AND.LWORD.LT.BLKEND) THEN
CALL ENTHSH(ADDREF,14,LWORD,ADRNDX)
ENDIF
ENDIF
ELSE
SRCEND = 0
ENDIF
ELSE
SRCEND = 0
ENDIF
ELSE
PRINT *,('ERROR SRCMOD = ',SRCMOD,I=1,5)
SRCEND = 0
ENDIF
IF (IAIJJI.EQ.0) IAIJJI = IJIJJI
IF (IAIJJI.GT.0) CALL ENTHSH(ADDREF(0),14,IAIJJI,ADRNDX)
ALTDST = SOURCE
ALTDND = SRCEND
IF (ALLOPS(1:1).EQ.' ') ALLOPS = SOURCE
IF (DSTEND.EQ.1) THEN
DESTIN = SOURCE
DSTEND = SRCEND
ENDIF
IF (ALTSND.GT.1) THEN
IF ((DSTSRC.AND.SRCREG.EQ.1).OR.(.NOT.DSTSRC)) THEN
SOURCE = ALTSRC
SRCEND = ALTSND
IF (DSTSRC) THEN
DESTIN = SOURCE
DSTEND = SRCEND
ENDIF
ENDIF
ELSE
ALTSRC = DESTIN
ALTSND = DSTEND
ENDIF
IF (SRCNLY) RETURN
DSTSRC = .FALSE.
DSTEND = 1
ALTDND = 1
DESTIN = ' '
ALTDST = DESTIN
IF (DSTMOD.EQ.0) THEN
WRITE (DESTIN,'(''D'',I1.1)') DSTREG
DSTEND = 2
ELSEIF (DSTMOD.EQ.1) THEN
WRITE (DESTIN,'(''A'',I1.1)') DSTREG
DSTEND = 2
IF (IAIJJI.NE.0) CALL ENTHSH(ADDREF(0),14,IAIJJI,ADRNDX)
IF (IJIJJI.NE.0) CALL ENTHSH(ADDREF(0),14,IJIJJI,ADRNDX)
ELSEIF (DSTMOD.EQ.2) THEN
WRITE (DESTIN,'(''(A'',I1.1,'')'')') DSTREG
DSTEND = 4
ELSEIF (DSTMOD.EQ.3) THEN
WRITE (DESTIN,'(''(A'',I1.1,'')+'')') DSTREG
DSTEND = 5
ELSEIF (DSTMOD.EQ.4) THEN
WRITE (DESTIN,'(''-(A'',I1.1,'')'')') DSTREG
DSTEND = 5
ELSEIF (DSTMOD.EQ.5) THEN
CALL FETCH(CURWRD,L,M)
DSTX1 = .TRUE.
K = CURWRD
THEHEX = HEXOF(K)
DSXHEX = THEHEX(5:8)
IF (DISPHX) THEN
WRITE (DESTIN,'(''$'',A4,''(A'',I1.1,'')'')') DSXHEX,DSTREG
DSTEND = 9
ELSE
WRITE (DESTIN,'(SP,I6.5,''(A'',SS,I1.1,'')'')') K,DSTREG
DSTEND = 10
ENDIF
IF (K.EQ.0) DSTWXR = .TRUE.
ELSEIF (DSTMOD.EQ.6) THEN
L = 0
M = 0
IWHQQQ = WHERE
IJIJJ2 = 0
CALL FETCH(CURWRD,L,M)
MASK2 = $0700
I2 = I2AND2(CURWRD,MASK2)
IF (I2.NE.0) THEN
WHERE = IWHQQQ
DSTEND = 0
ELSE
IBYTE = L
IDBYTE = M
DSTX1 = .TRUE.
K = CURWRD
THEHEX = HEXOF(K)
IIKK = MOD(K,128)
DSXHEX = THEHEX(5:8)
IBYTE = MOD(IBYTE/8,32) + 32
IBYTE = MOD(IBYTE,32)
IF (IBYTE.GT.15) THEN
ITYPE = ',A'
FULL = .NOT. SPRSXA
ELSE
ITYPE = ',D'
FULL = .TRUE.
ENDIF
IJK = MOD(IBYTE,2)
IF (IJK.EQ.0) THEN
ILEN = '.W'
DSTWXR = .NOT. FULL
ELSE
ILEN = '.L'
FULL = (.NOT. SPRSLX) .AND. FULL
ENDIF
IBYTE = IBYTE/2
IBYTE = MOD(IBYTE,8)
IF (FULL) THEN
WRITE (INDEX,'(A2,I1.1,A2)') ITYPE,IBYTE,ILEN
IF (DISPHX) THEN
WRITE (DESTIN,'(''$'',A2,''(A'',I1.1,A5,'')'')') THEHEX(7:8),DSTREG,INDEX
DSTEND = 12
ELSE
WRITE (DESTIN,'(SP,I4.3,''(A'',SS,I1.1,A5,'')'')') IIKK,DSTREG,INDEX
DSTEND = 13
ENDIF
ELSE
WRITE (INDEX,'(A2,I1.1,2X)') ITYPE,IBYTE
IF (DISPHX) THEN
WRITE (DESTIN,'(''$'',A2,''(A'',I1.1,A3,'')'')')
THEHEX(7:8),DSTREG,INDEX(1:3)
DSTEND = 10
ELSE
WRITE (DESTIN,'(SP,I4.3,''(A'',SS,I1.1,A3,'')'')') IIKK,DSTREG,INDEX(1:3)
DSTEND = 11
ENDIF
ENDIF
ENDIF
ELSEIF (DSTMOD.EQ.7) THEN
IF (DSTREG.EQ.0) THEN
CALL FETCH(CURWRD,L,M)
DSTX1 = .TRUE.
K = CURWRD
K = IAND(K,$0FFFFFF)
IJIJJ2 = K
THEHEX = HEXOF(K)
IF (THEHEX(1:3).EQ.'00F') CALL TSTIOA(IJIJJ2)
IOFLAG = .TRUE.
DSXHEX = THEHEX(5:8)
IF (DOABS) THEN
WRITE (DESTIN,'(''$'',A4,''.W'')') DSXHEX
DSTEND = 7
ELSE
WRITE (DESTIN,'(''$'',A4,'' .W'')') DSXHEX
DSTEND = 8
DSTWXR = .TRUE.
ENDIF
IF (K.GE.BLKBEG.AND.K.LT.BLKEND) THEN
IF (FOUND) THEN
ALTDST = 'H_'//THEHEX(3:8)//' '//DESTIN(1:DSTEND)//' '
ALTDND = 8
ENDIF
ENDIF
IF (K.GT.0) CALL ENTHSH(ADDREF(0),14,K,ADRNDX)
ELSEIF (DSTREG.EQ.1) THEN
CALL FETCHL(LWORD)
IJIJJ2 = LWORD
ANI2 = LWORD
DSTX1 = .TRUE.
DSTX2 = .TRUE.
THEHEX = HEXOF(LWORD)
IF (LWORD.GE.$0EF8000.OR.THEHEX(1:3).EQ.'00F') CALL TSTIOA(IJIJJ2)
IOFLAG = .TRUE.
DSXHEX = THEHEX
IF (DOABS) THEN
WRITE (DESTIN,'(''$'',A8,''.L'')') THEHEX
DSTEND = 11
ELSE
WRITE (DESTIN,'(''$'',A8,'' .L'')') THEHEX
DSTEND = 12
DSTWXR = ANI2 .EQ. LWORD
ENDIF
IF (LWORD.GE.BLKBEG.AND.LWORD.LT.BLKEND) THEN
IF (FOUND) THEN
ALTDST = 'H_'//DSXHEX(3:8)//' '//DESTIN(1:DSTEND)//' '
ALTDND = 8
ENDIF
ENDIF
CALL ENTHSH(ADDREF,14,LWORD,ADRNDX)
* ELSEIF (DSTREG.EQ.2) THEN
* IJIJJ2 = WHERE
* CALL FETCH(CURWRD,L,M)
* DSTX1 = .TRUE.
* K = CURWRD
* IAIJJ2 = MEMADR + IJIJJ2 + CURWRD
* THEHEX = HEXOF(K)
* DSXHEX = THEHEX(5:8)
* ANI2 = CURWRD + IJIJJ2 - INSTRB
* WRITE (DESTIN,'(''*'',SP,I6.5,''(PC)'')') ANI2
* DSTEND = 11
* IF (FOUND.AND.IAIJJI.GE.BLKBEG.AND.IAIJJI.LT.BLKEND) THEN
* ALTDST = 'H_'//SRXHEX(3:8)//'(PC) '//SOURCE(1:SRCEND)//' '
* ALTDND = 12
* ENDIF
* ELSEIF (DSTREG.EQ.3) THEN
* L = 0
* M = 0
* IWHQQQ = WHERE
* IJIJJ2 = WHERE
* CALL FETCH(CURWRD,L,M)
* MASK2 = $0700
* I2 = I2AND2(CURWRD,MASK2)
* IF (I2.NE.0) THEN
* WHERE = IWHQQQ
* DSTEND = 0
* IJIJJ2 = 0
* ELSE
* DSTX1 = .TRUE.
* IBYTE = L
* M1 = M + IJIJJ2 - INSTRB
* IAIJJ2 = MEMADR + IJIJJ2 + M1
* K = CURWRD
* THEHEX = HEXOF(K)
* DSXHEX = THEHEX(5:8)
* IBYTE = MOD(IBYTE/8,32) + 32
* IBYTE = MOD(IBYTE,32)
* IF (IBYTE.GT.15) THEN
* ITYPE = ',A'
* FULL = .NOT. SPRSXA
* ELSE
* ITYPE = ',D'
* FULL = .TRUE.
* ENDIF
* IJK = MOD(IBYTE,2)
* IF (IJK.EQ.0) THEN
* ILEN = '.W'
* DSTWXR = .NOT. FULL
* ELSE
* ILEN = '.L'
* FULL = (.NOT. SPRSLX) .AND. FULL
* ENDIF
* IBYTE = IBYTE/2
* IBYTE = MOD(IBYTE,8)
* IF (FULL) THEN
* WRITE (INDEX,'(A2,I1.1,A2)') ITYPE,IBYTE,ILEN
* WRITE (DESTIN,'(''*'',SP,I4.3,''(PC'',A5,'')'')') M1,INDEX
* DSTEND = 14
* ELSE
* WRITE (INDEX,'(A2,I1.1,2X)') ITYPE,IBYTE
* WRITE (DESTIN,'(''*'',SP,I4.3,''(PC'',A3,'')'')') M1,INDEX(1:3)
* DSTEND = 12
* ENDIF
* IF (M1.EQ.-128) THEN
* SOURCE(2:2) = '+'
* IAIJJI = IAIJJI + 256
* ENDIF
* IF (FOUND.AND.IAIJJ2.GE.BLKBEG.AND.IAIJJ2.LT.BLKEND) THEN
* THEHEX = HEXOF(IAIJJ2)
* ALTDST = 'H_'//THEHEX(3:8)//'(PC'//INDEX(1:3)//') '//SOURCE(1:SRCEND)
* ALTDND = 15
* ENDIF
* ENDIF
* ELSEIF (DSTREG.EQ.4) THEN
* IF (SIZE.EQ.1) THEN
* CALL FETCH(CURWRD,L,M)
* DSTX1 = .TRUE.
* K = CURWRD
* THEHEX = HEXOF(K)
* DSXHEX(5:8) = ' '
* DSXHEX(1:4) = THEHEX(5:8)
* DESTIN = '#$'//THEHEX(7:8)
* DSTEND = 4
* DSTWXR = DSXHEX(1:2).NE.'00'
* ELSEIF (SIZE.EQ.2) THEN
* CALL FETCH(CURWRD,L,M)
* DSTX1 = .TRUE.
* K = CURWRD
* THEHEX = HEXOF(K)
* DSXHEX = THEHEX(5:8)
* DESTIN = '#$'//DSXHEX
* DSTEND = 6
* ELSEIF (SIZE.EQ.3) THEN
* CALL FETCHL(LWORD)
* IJIJJ2 = LWORD
* DSTX1 = .TRUE.
* DSTX2 = .TRUE.
* WORDS(1) = CURWRD
* THEHEX = HEXOF(LWORD)
* DSXHEX = THEHEX
* DESTIN = '#$'//THEHEX
* DSTEND = 10
* IF (LWORD.GE.$0EF8000.OR.THEHEX(1:3).EQ.'00F') CALL TSTIOA(IJIJJ2)
* IOFLAG = .TRUE.
* ELSE
* DSTEND = 0
* ENDIF
* DSTWXR = (DSTEND.GT.0)
ELSE
DSTEND = 0
ENDIF
ELSE
PRINT *,('ERROR DSTMOD = ',DSTMOD,I=1,5)
DSTEND = 0
ENDIF
IF (ALTDND.EQ.1) THEN
ALTDND = DSTEND
ALTDST = DESTIN
ELSEIF (FOUND.AND.DSTREG.EQ.1) THEN
DSTEND = ALTDND
DESTIN = ALTDST
ENDIF
IF (IAIJJ2.EQ.0) IAIJJ2 = IJIJJ2
IF (IAIJJ2.GT.0) CALL ENTHSH(ADDREF(0),14,IAIJJ2,ADRNDX)
RETURN
ENTRY DOSRC
SRCNLY = .TRUE.
GOTO 9898
ENTRY DOBAD(IWH)
WHERE = IWH
K = MEMADR + WHERE
IFB = FNDHSH(ADDREF(0),14,K)
IF (IFB.EQ.-1) THEN
LABEL = ' '
ELSE
THEHEX = HEXOF(K)
LABEL = 'H_'//THEHEX(3:8)//' '
ENDIF
K = K + 1
IFB = FNDHSH(ADDREF(0),14,K)
IF (IFB.NE.-1) THEN
THEHEX = HEXOF(K)
LINES(LINPTR) = 'H_'//THEHEX(3:8)//' EQU *+1'
LINPTR = LINPTR + 1
ENDIF
OPCODE = 'DC.W'
* WRITE (OPS(1),'(SP,I6.5)') CODEW(IWH)
SRCNLY = .FALSE.
SRCWXR = .FALSE.
DSTWXR = .FALSE.
DISPHX = .FALSE.
DSTEND = 0
DSTX1 = .FALSE.
DSTX2 = .FALSE.
SRCEND = 0
SRCX1 = .FALSE.
SRCX2 = .FALSE.
IJIJJI = 0
IJIJJ2 = 0
IAIJJI = 0
IAIJJ2 = 0
WRDX = .FALSE.
LNGX = .FALSE.
RETURN
END
*----------------------------------------------------------------------
$SEGMENT DISASMSB
SUBROUTINE FETCHW(AWORD,HIBTE,LOBTE)
INTEGER AWORD*2,HIBTE*4,LOBTE*4
INTEGER CURWRD*2,LOBYTE*1,HIBYTE*1,TBYT(0:1)*1,HINIB,MHNIB,MLNIB,LONIB
EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE)
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT
INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
INTEGER*2 CODEW(0:16383),WHERE,END,TRADDR*4,MEMADR*4
INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3)
EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMBYT(0))
COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR
INTEGER*4 TMPW1,TMPW2,TMPHI,TMPLO,IAND,MMSAVE,IFFFF,I00FF,IFF00,SEVEN,FIFTN
EXTERNAL IAND
LOGICAL DOIT,SMSH
DATA DOIT/.FALSE./,SMSH/.FALSE./,IFFFF/$FFFF/,I00FF/$00FF/,IFF00/$FF00/
DATA SEVEN/7/,FIFTN/15/,I00F0/$00F0/,I003F/$003F/
9999 CONTINUE
DOIT = .TRUE.
9998 CONTINUE
ENTRY FETCH(AWORD,HIBTE,LOBTE)
J = WHERE/2
TMPW1 = CODEW(J)
WHERE = 2*(J+1)
TMPW2 = IAND(TMPW1,IFFFF)
AWORD = TMPW2
MMSAVE = TMPW2
TMPLO = IAND(TMPW2,I00FF)
TMPHI = IAND(TMPW2,IFF00)
TMPW1 = TMPHI/256
TMPHI = IAND(TMPW1,I00FF)
C HIBTE = MOD((AWORD/256),256)
C IF (HIBTE.LT.0) HIBTE = HIBTE + 256
C LOBTE = MOD(AWORD,256)
C IF (LOBTE.LT.0) LOBTE = LOBTE + 256
HIBTE = TMPHI
LOBTE = TMPLO
IF (DOIT) THEN
CURWRD = AWORD
LOBYT = TMPLO
HIBYT = TMPHI
ENDIF
IF (SMSH) THEN
MHNIB = IAND(TMPHI,FIFTN)
LONIB = IAND(TMPLO,FIFTN)
TMPHI = IAND(TMPHI,I00F0)/16
TMPLO = IAND(TMPLO,I00F0)/16
HINIB = IAND(TMPHI,FIFTN)
MLNIB = IAND(TMPLO,FIFTN)
TMPW1 = MMSAVE/64
TMPHI = IAND(TMPW1,I003F)
TMPLO = IAND(MMSAVE,I003F)
TMPW1 = TMPHI/8
TMPW2 = TMPLO/8
DSTMOD = IAND(TMPHI,SEVEN)
DSTREG = IAND(TMPW1,SEVEN)
SRCMOD = IAND(TMPW2,SEVEN)
SRCREG = IAND(TMPLO,SEVEN)
ENDIF
DOIT = .FALSE.
SMSH = .FALSE.
RETURN
ENTRY FETCHA(AWORD,HIBTE,LOBTE)
SMSH = .TRUE.
GOTO 9999
ENTRY FETCHS(AWORD,HIBTE,LOBTE)
SMSH = .TRUE.
GOTO 9998
END
*----------------------------------------------------------------------
SUBROUTINE FETCHL(LWORD)
INTEGER LWORD*4,TMPW1,TMPW2,IAND,I65535
INTEGER CURWRD*2,LOBYTE*1,HIBYTE*1,TBYT(0:1)*1,HINIB,MHNIB,MLNIB,LONIB
EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE)
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT
INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
INTEGER*2 CODEW(0:16383),WHERE,END,TRADDR*4,MEMADR*4
INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3)
EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMBYT(0))
COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR
DATA I65536/65536/
J = WHERE/2
C IF (J.LT.0) J = J + 65536
TMPW2 = CODEW(J) * I65536
TMPW2 = IAND(TMPW2,$FFFF0000)
J = J + 1
TMPW1 = CODEW(J)
WHERE = 2*(J+1)
TMPW1 = IAND(TMPW1,$0000FFFF)
LWORD = IOR(TMPW1,TMPW2)
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE DOBITS
LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54
COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54
LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54
COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54
INTEGER*4 HIBYT,LOBYT,IWHERE
INTEGER CURWRD*2,LOBYTE*1,HIBYTE*1,TBYT(0:1)*1,HINIB,MHNIB,MLNIB,LONIB
EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE)
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT
INTEGER*2 ONE,TWO,FOUR,EIGHT,J,K,I2AND2
DATA ONE/1/,TWO/2/,FOUR/4/,EIGHT/8/
K = LONIB
J = I2AND2(K,EIGHT)
BIT3 = J.NE.0
K = MLNIB
J = I2AND2(K,ONE)
BIT4 = J.NE.0
J = I2AND2(K,TWO)
BIT5 = J.NE.0
J = I2AND2(K,FOUR)
BIT6 = J.NE.0
J = I2AND2(K,EIGHT)
BIT7 = J.NE.0
K = MHNIB
J = I2AND2(K,ONE)
BIT8 = J.NE.0
BITS76 = BIT7 .AND. BIT6
BITS54 = BIT5 .OR. BIT4
NOT8 = .NOT. BIT8
NOT7 = .NOT. BIT7
NOT6 = .NOT. BIT6
NOT5 = .NOT. BIT5
NOT4 = .NOT. BIT4
NOT3 = .NOT. BIT3
NOTS76 = .NOT. BITS76
NOTS54 = .NOT. BITS54
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE DOMOVM
CHARACTER*8 THEHEX,HEXOF,SRXHEX,DSXHEX,HEXEXT
CHARACTER*20 SOURCE,DESTIN
CHARACTER*30 NORMAL,REVERS,REG(0:15)*2,TC*1,TCALGN(2)*1
INTEGER*4 WBIT(0:15),NINDEX,RINDEX
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR
INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
INTEGER*4 HIBYT,LOBYT,IWHERE,HINIB,MHNIB,MLNIB,LONIB
INTEGER CURWRD*2,LOBYTE*1,HIBYTE*1,TBYT(0:1)*1
LOGICAL*4 V10,V11
LOGICAL*2 ISBIT(0:15),NOTBIT(0:15),ARRGH,ARRGH2,NFIRST,RFIRST
LOGICAL*2 BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54
LOGICAL*2 NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54
LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,PGECOM,XQUIET
LOGICAL*2 DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP
LOGICAL*2 RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,ABORT,ESCAPE,INTRPT
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE)
COMMON /MODESQ/DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT
COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX
COMMON /BITS/BIT8,BIT7,BIT6,BIT5,BIT4,BIT3,BITS76,BITS54
COMMON /NOTS/NOT8,NOT7,NOT6,NOT5,NOT4,NOT3,NOTS76,NOTS54
COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
COMMON /CMOVEM/NORMAL,REVERS,/ADRUN/SOURCE,DESTIN,/VERSNS/V10,V11
COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT,/GARRH/ARRGH,ARRGH2,PGECOM,XQUIET
COMMON /NMOVEM/NINDEX,RINDEX
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/NTRVN/ABORT,ESCAPE,INTRPT
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
SAVE /KEYGET/,/SHFSTA/,/NTRVN/,/NMOVEM/,/EXTHEX/,/GARRH/,/VERSNS/,/MODESQ/
SAVE /ADRUN/,/CMOVEM/,/ADRMOD/,/NOTS/,/BITS/,/MORE/,/SMASH/,REG,WBIT
EXTERNAL HEXOF
SAVE
DATA REG(0)/'D0'/,REG(1)/'D1'/,REG(2)/'D2'/,REG(3)/'D3'/,REG(4)/'D4'/
DATA REG(5)/'D5'/,REG(6)/'D6'/,REG(7)/'D7'/,REG(8)/'A0'/,REG(9)/'A1'/
DATA REG(10)/'A2'/,REG(11)/'A3'/,REG(12)/'A4'/,REG(13)/'A5'/
DATA REG(14)/'A6'/,REG(15)/'A7'/
DATA WBIT(0)/1/,WBIT(1)/2/,WBIT(2)/4/,WBIT(3)/8/,WBIT(4)/16/,WBIT(5)/32/
DATA WBIT(6)/64/,WBIT(7)/128/,WBIT(8)/256/,WBIT(9)/512/,WBIT(10)/1024/
DATA WBIT(11)/2048/,WBIT(12)/4096/,WBIT(13)/8192/,WBIT(14)/16384/,WBIT(15)/32768/
CALL FETCH(CURWRD,L,M)
K = CURWRD
THEHEX = HEXOF(K)
HEXEXT = THEHEX(5:8)
WRDX = .TRUE.
LNGX = .FALSE.
NORMAL = ' '
REVERS = ' '
NINDEX = 1
RINDEX = 1
IF (K.EQ.0) THEN
SRCWXR = .TRUE.
DSTWXR = .TRUE.
RETURN
ENDIF
NFIRST = .TRUE.
RFIRST = .TRUE.
DO 1 I = 0,15
N = IAND(K,WBIT(I))
ISBIT(I) = N .NE. 0
NOTBIT(I) = N .EQ. 0
1 CONTINUE
N = 0
5 CONTINUE
JJ = N
IF (ISBIT(N)) THEN
IF (NFIRST) THEN
NORMAL(NINDEX:(NINDEX+1)) = REG(N)
NINDEX = NINDEX + 2
NFIRST = .FALSE.
ELSE
IF (V10) NORMAL(NINDEX:(NINDEX+2)) = ','//REG(N)
IF (V11) NORMAL(NINDEX:(NINDEX+2)) = '/'//REG(N)
NINDEX = NINDEX + 3
ENDIF
J = N+1
9922 JJ = J
IF (J.GT.15) GOTO 4
IF (ISBIT(J)) THEN
DO 2 I = J,15
IF (NOTBIT(I)) GOTO 3
IF (V11.AND.I.EQ.8.AND.J.LT.8) THEN
NORMAL(NINDEX:(NINDEX+5)) = '-'//REG(7)//'/'//REG(8)
NINDEX = NINDEX + 6
J = I
GOTO 9922
ENDIF
JJ = I
2 CONTINUE
3 CONTINUE
NORMAL(NINDEX:(NINDEX+2)) = '-'//REG(JJ)
NINDEX = NINDEX + 3
ENDIF
ENDIF
N = JJ + 1
IF (N.LE.15) GOTO 5
4 CONTINUE
NINDEX = NINDEX - 1
N = 15
RINDEX = 1
15 CONTINUE
JJ = N
IF (ISBIT(N)) THEN
IF (RFIRST) THEN
REVERS(RINDEX:(RINDEX+1)) = REG((15-N))
RINDEX = RINDEX + 2
RFIRST = .FALSE.
ELSE
IF (V10) REVERS(RINDEX:(RINDEX+2)) = ','//REG((15-N))
IF (V11) REVERS(RINDEX:(RINDEX+2)) = '/'//REG((15-N))
RINDEX = RINDEX + 3
ENDIF
J = N-1
9923 JJ = J
IF (J.LT.0) GOTO 14
IF (ISBIT(J)) THEN
DO 12 I = J,0,-1
IF (NOTBIT(I)) GOTO 13
IF (V11.AND.I.EQ.7.AND.J.GT.8) THEN
REVERS(RINDEX:(RINDEX+5)) = '-'//REG(7)//'/'//REG(8)
RINDEX = RINDEX + 6
J = I
GOTO 9923
ENDIF
JJ = I
12 CONTINUE
13 CONTINUE
REVERS(RINDEX:(RINDEX+2)) = '-'//REG((15-JJ))
RINDEX = RINDEX + 3
ENDIF
ENDIF
N = JJ - 1
IF (N.GE.0) GOTO 15
14 CONTINUE
RINDEX = RINDEX - 1
IF (ARRGH) PRINT *,'DOMOVM: ',NORMAL(1:NINDEX),' ',REVERS(1:RINDEX)
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE DOABRL
CHARACTER*8 THEHEX,HEXOF,SRXHEX,DSXHEX,HEXEXT,HEXADR,MMADR
CHARACTER*1 INDEX*5,ITYPE*2,ILEN*2,CODEC(0:2047),HEXCHR(0:2047),CHR,HA(8)
CHARACTER*20 SOURCE,DESTIN,HAHA,ALLOPS*30
CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR
CHARACTER*74 LINES(1200)
INTEGER*4 SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE,LWORD,HIBYT,LOBYT
INTEGER*4 HINIB,MHNIB,MLNIB,LONIB,TRADDR,MEMADR,CODEL(0:512),I42,IAND,LINPTR
INTEGER*4 THEMOD,THEREG,IJIJJI,IJIJJ2,IAIJJI,IAIJJ2,ADDREF(0:16383),ADRNDX
INTEGER*4 FNDHSH,BLKBEG,BLKEND
INTEGER*2 WORDS(0:1),CURWRD,CODEW(0:16383),WHERE,END,I2AND2,I2,LOMASK
INTEGER*2 ISRCX1,IDSTX1,ISRCX2,IDSTX2,IWRDX,ILNGX
INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3),I22(2)
INTEGER*1 HEXBYT(0:2047),I1,J1,K1,L1,M1,LOBYTE,HIBYTE,TBYT(0:1),IHA(8)
LOGICAL*2 SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,IOFLAG,FOUND
LOGICAL*2 SRCNLY,FULL,DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP
EQUIVALENCE (CODEL(0),CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0))
EQUIVALENCE (CURWRD,HIBYTE,TBYT(0)),(TBYT(1),LOBYTE),(MEMADR,MEMBYT(0))
EQUIVALENCE (ISRCX1,SRCX1),(ISRCX2,SRCX2),(IDSTX1,DSTX1),(IDSTX2,DSTX2)
EQUIVALENCE (HEXADR,IHA(1),HA(1),HAHA),(IWRDX,WRDX),(ILNGX,LNGX)
EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL)
EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1)),(I42,I22(1))
COMMON /DISASM/ASMOUT,LINES,MMADR,ALLOPS,/ABRLAD/IJIJJI,IJIJJ2,IAIJJI,IAIJJ2
COMMON /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR,/REL/HEXCHR
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT,/DISNUM/LINPTR
COMMON /EXTHEX/SRXHEX,DSXHEX,HEXEXT,/ADRUN/SOURCE,DESTIN
COMMON /ADRMOD/SRCREG,SRCMOD,DSTREG,DSTMOD,SRCEND,DSTEND,SIZE
COMMON /MORE/SRCX1,DSTX1,SRCX2,DSTX2,DSTSRC,WRDX,LNGX,/FLAGIO/IOFLAG
COMMON /MODESQ/DOABS,SPRSLX,SPRSXA,SRCWXR,DSTWXR,SHRTBR,SGNDSP
COMMON /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND
SAVE /MODESQ/,/MORE/,/ADRMOD/,/ADRUN/,/EXTHEX/,/SMASH/,/CODE/,/REL/
SAVE /FLAGIO/,/REFS/,/ABRLAD/
EXTERNAL HEXOF,I2AND2
SAVE
THEMOD = SRCMOD
THEREG = SRCREG
IS = ISRCX1 + ISRCX2
ID = 0
IX = IWRDX + 2*ILNGX
9000 CONTINUE
IS = 2*IS
ID = 2*ID
IX = 2*IX
LOMASK = $0FF
OPS(1) = ALLOPS(1:10)
OPS(2) = ALLOPS(11:20)
OPS(3) = ALLOPS(21:30)
IADDR = 0
IF (THEMOD.EQ.7.AND.OPCODE(1:2).NE.'DC'.AND.THEREG.LT.4) THEN
HAHA = ' '
IF (THEREG.EQ.2.OR.THEREG.EQ.3) THEN
IF (IAIJJI.EQ.0) THEN
IF (IJIJJI.EQ.0) THEN
I22 = CURWRD
ELSE
I22 = CODEW(IJIJJI)
ENDIF
IF (THEREG.EQ.2) THEN
I2 = CURWRD
ELSE
I2 = I2AND2(I22,LOMASK)
ENDIF
IF (IJIJJI.EQ.0) THEN
IADDR = MEMADR + I2 + WHERE - IS - ID
ELSE
IADDR = MEMADR + I2 + IJIJJI
ENDIF
ELSE
IADDR = IAIJJI
ENDIF
HEXADR = HEXOF(IADDR)
* HEXADR(1:4) = '0000'
* IF (THEREG.EQ.3) HEXADR(5:6) = '00'
ELSEIF (THEREG.EQ.0.OR.THEREG.EQ.1) THEN
IF (IJIJJI.EQ.0) THEN
IJJI = WHERE
IF (THEREG.EQ.0) THEN
K = CODEW(WHERE/2-1)
IJIJJI = IAND(K,$0FFFF)
ELSE
WHERE = WHERE - 4
CALL FETCHL(IJIJJI)
ENDIF
WHERE = IJJI
IJIJJI = IJIJJI
ENDIF
IADDR = IAND(IJIJJI,$0FFFFFF)
HEXADR = HEXOF(IADDR)
IF (THEREG.EQ.0) HEXADR(1:4) = '0000'
ENDIF
IJIJJI = IADDR
IAIJJI = IADDR
IHA(1) = 0
IHA(2) = 0
DO 1 I = 3,7
IF (HA(I).NE.'0') GOTO 2
IHA(I) = 0
1 CONTINUE
2 CALL STRIP(HAHA)
J = 1
DO 3 I = 1,7
IF (HA(I).EQ.' ') GOTO 4
J = I
3 CONTINUE
4 CONTINUE
OPS(3) = ALLOPS(21:30)
K = 10-J
IF (THEREG.LE.2) THEN
IF (K.NE.1) THEN
IF (OPS(3)(K-1:K-1).EQ.' ') OPS(3)(K:10) = '@'//HEXADR(1:J)
ELSE
IF (OPS(2)(10:10).EQ.' ') OPS(3)(K:10) = '@'//HEXADR(1:J)
ENDIF
IJIJJI = IADDR
IF (IJIJJI.GE.$0EF8000.AND..NOT.IOFLAG) CALL TSTIOA(IJIJJI)
ELSEIF (THEREG.EQ.3) THEN
IF (K.NE.1) THEN
IF (OPS(3)(K-1:K-1).EQ.' ') OPS(3)(K:10) = 'r'//HEXADR(1:J)
ELSE
IF (OPS(2)(10:10).EQ.' ') OPS(3)(K:10) = 'r'//HEXADR(1:J)
ENDIF
IJIJJI = - IJIJJI
ENDIF
ALLOPS(21:30) = OPS(3)
ELSE
IJIJJI = 0
ENDIF
IF (IAIJJI.NE.0) THEN
CALL ENTHSH(ADDREF,14,IAIJJI,ADRNDX)
ENDIF
9999 CONTINUE
OPS(3) = ALLOPS(21:30)
RETURN
ENTRY DSABRL
THEMOD = DSTMOD
THEREG = DSTREG
IS = ISRCX1 + ISRCX2
ID = IDSTX1 + IDSTX2
IX = IWRDX + 2*ILNGX
IJIJJI = IJIJJ2
IAIJJI = IAIJJ2
IF (THEMOD.EQ.7.AND.THEREG.LT.2.AND.OPS(3)(10:10).EQ.' ') GOTO 9000
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE TSTSTR
CHARACTER*8 SRXHEX,DSXHEX,HEXEXT,HEXADR,MMADR,THEHEX,HEXOF
CHARACTER*30 ALLOPS
CHARACTER*58 STRNG(5)
CHARACTER*74 LINES(1200)
CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR,CTMP10
CHARACTER*1 IC,LENEXT,SORU,SRCR,DSTR*2,CHAR4*4,C4*4,C5*4,CCWRD*2
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,FNDHSH,START
INTEGER*2 WORDS(0:1),CURWRD,CODEW(0:16383),WHERE,END
INTEGER*1 LOBYTE,HIBYTE,TBYT(0:1),IB
INTEGER*1 CODEB(0:1,0:16383),BYTES(0:32767),TRBYTE(0:3),MEMBYT(0:3)
LOGICAL*4 V10,V11
LOGICAL*2 FOUND,FLAG,FNDST,QISSTR,QERRMS,HEX,BAR
EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMBYT(0))
EQUIVALENCE (LWORD,WORDS(0),HIWORD),(WORDS(1),LOWORD),(FLAG,FNDST)
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 /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT
COMMON /DISNUM/LINPTR,/VERSNS/V10,V11,/DISASM/ASMOUT,LINES,MMADR,ALLOPS
COMMON /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND
SAVE /DISASM/,/VERSNS/,/DISNUM/,/SMASH/,/CODE/,/REFS/
EXTERNAL HEXOF,FNDHSH
SAVE
ICOUNT = 0
QISSTR = .FALSE.
QERRMS = .FALSE.
FNDST = .FALSE.
NBAD = 0
9999 CONTINUE
IF ((END-WHERE).LT.30) RETURN
IF (.NOT.FLAG) THEN
QISSTR = (BYTES(WHERE).GT.31.AND.BYTES(WHERE).LT.127)
IF (.NOT.QISSTR) THEN
QERRMS = (BYTES(WHERE).GT.15.AND.BYTES(WHERE).LT.32).OR.BYTES(WHERE).GT.$6F
QERRMS = QERRMS .AND.
BYTES(WHERE+1).GT.31.AND.(BYTES(WHERE+1).LT.127.OR.BYTES(WHERE+1).LT.0)
ENDIF
IF (.NOT.(QISSTR.OR.QERRMS)) RETURN
* Don't include BRA's in string
IF (BYTES(WHERE).EQ.$60) THEN
GOTO 9901
* Don't include RTS, RTR, RTE or JMP in string
ELSEIF (BYTES(WHERE).EQ.$4E) THEN
IB = BYTES(WHERE+1)
IF (IB.EQ.$71.OR.IB.EQ.$75.OR.IB.EQ.$73.OR.IB.EQ.$77) GOTO 9901
I = IB
I = IAND(I,$0FF)
IF (I.GE.208) GOTO 9901
IF (IB.EQ.$40.OR.(IB.GE.$46.AND.IB.LE.$4A)) THEN
I = BYTES(WHERE+2)
I = IAND(I,$07F)
IF (I.EQ.0) GOTO 9901
ENDIF
ENDIF
IF (BYTES(WHERE+2).EQ.$60) THEN
GOTO 9901
ELSEIF (BYTES(WHERE+2).EQ.$4E) THEN
IB = BYTES(WHERE+3)
IF (IB.EQ.$71.OR.IB.EQ.$75.OR.IB.EQ.$73.OR.IB.EQ.$77) GOTO 9901
I = IB
I = IAND(I,$0FF)
IF (I.GE.208) GOTO 9901
IF (IB.EQ.$40.OR.(IB.GE.$46.AND.IB.LE.$4A)) THEN
I = BYTES(WHERE+4)
I = IAND(I,$07F)
IF (I.EQ.0) GOTO 9901
ENDIF
ENDIF
IF (BYTES(WHERE+4).EQ.$60) THEN
GOTO 9901
ELSEIF (BYTES(WHERE+4).EQ.$4E) THEN
IB = BYTES(WHERE+5)
IF (IB.EQ.$71.OR.IB.EQ.$75.OR.IB.EQ.$73.OR.IB.EQ.$77) GOTO 9901
I = IB
I = IAND(I,$0FF)
IF (I.GE.208) GOTO 9901
IF (IB.EQ.$40.OR.(IB.GE.$46.AND.IB.LE.$4A)) THEN
I = BYTES(WHERE+6)
I = IAND(I,$07F)
IF (I.EQ.0) GOTO 9901
ENDIF
ENDIF
ELSE
QERRMS = .FALSE.
QISSTR = .FALSE.
ENDIF
ICOUNT = 0
IF (QISSTR) THEN
START = WHERE + 1
ELSE
START = WHERE
ENDIF
LFS = 0
J = WHERE + 90
LAST = MIN(J,END)
J = 0
DO 1 I = START,LAST
IF (BYTES(I).EQ.13) THEN
J = I
GOTO 2
ELSEIF (BYTES(I).EQ.04) THEN
J = I
IF (I.LT.WHERE+30) THEN
IF ((BYTES(I+1).LT.32.OR.BYTES(I+1).GT.126).AND.
& BYTES(I+1).NE.$1A.AND.BYTES(I+1).NE.$1B) GOTO 2
ELSE
GOTO 2
ENDIF
ELSEIF (BYTES(I).EQ.10.OR.BYTES(I).EQ.0) THEN
LFS = LFS + 1
ICOUNT = ICOUNT + 1
IF (ICOUNT.GE.2) THEN
IF (J.NE.0) GOTO 2
GOTO 9901
ENDIF
ELSEIF ((BYTES(I).LT.32).OR.(BYTES(I).GT.126)) THEN
ICOUNT = ICOUNT + 1
IF (ICOUNT.GE.2) THEN
IF (J.NE.0) GOTO 2
GOTO 9901
ELSEIF (ICOUNT.EQ.1) THEN
IF (BYTES(WHERE+6).EQ.$60) THEN
GOTO 9901
ELSEIF (BYTES(WHERE+6).EQ.$4E) THEN
IB = BYTES(WHERE+7)
IF (IB.EQ.$71.OR.IB.EQ.$75.OR.IB.EQ.$73.OR.IB.EQ.$77) GOTO 9901
I = IB
I = IAND(I,$0FF)
IF (I.GE.208) GOTO 9901
ENDIF
IF (NBAD.EQ.I-1) THEN
IF (J.NE.0) GOTO 2
GOTO 9901
ENDIF
IF (BYTES(WHERE+8).EQ.$60) THEN
GOTO 9901
ELSEIF (BYTES(WHERE+8).EQ.$4E) THEN
IB = BYTES(WHERE+9)
IF (IB.EQ.$71.OR.IB.EQ.$75.OR.IB.EQ.$73.OR.IB.EQ.$77) GOTO 9901
I = IB
I = IAND(I,$0FF)
IF (I.GE.208) GOTO 9901
ENDIF
NBAD = I
ENDIF
ENDIF
1 CONTINUE
2 CONTINUE
*HAVE FOUND VALID STRING FROM WHERE TO J
SAVWHR = WHERE
I = MOD(J,2)
IF (I.EQ.0) THEN
IF (.NOT.(BYTES(J+1).GT.31.AND.BYTES(J+1).LT.127)) THEN
BAR = (BYTES(J+1).GT.15.AND.BYTES(J+1).LT.32).OR.BYTES(J+1).GT.$6F
BAR = BAR .AND. (BYTES(J+2).GT.31.AND.(BYTES(J+2).LT.127.OR.BYTES(J+2).LT.0))
IF (.NOT.BAR) J = J + 1
ENDIF
ENDIF
LNG = J - WHERE
IWHSAV = WHERE
IF (LNG.LE.7.AND..NOT.FNDST) THEN
LINSAV = LINPTR
LINES(LINSAV) = ' DS.W 0'
IF (FNDST) LINPTR = LINPTR + 1
LINTST = LINPTR
CALL DISLIN
IF ((LINES(LINTST)(1:1).EQ.'*'.AND.LINES(LINTST)(10:10).NE.'?')
& .OR.LINES(LINTST)(11:13).EQ.'DC') THEN
WHERE = IWHSAV
LINPTR = LINSAV
ELSE
RETURN
ENDIF
ENDIF
K = (J+1)/2
K = MEMADR + K*2
CALL ENTHSH(ADDREF(0),14,K,ADRNDX)
FNDST = .TRUE.
WHERE = IWHSAV
N = 1
STRNG(5) = ' '
STRNG(5)(50:58) = ' '
STRNG(4) = STRNG(5)
STRNG(3) = STRNG(5)
STRNG(2) = STRNG(5)
STRNG(1) = STRNG(5)
IB = BYTES(WHERE)
IF (BYTES(WHERE).GT.31.AND.BYTES(WHERE).LT.127.AND..NOT.QERRMS) THEN
* have string beginning with a valid character, start w/ QUOTE & char
NN = 3
IC = CHAR(IB)
STRNG(1)(1:2) = ''''//IC
ELSE
* have string beginning with non-character OR errms, start off w/ $nn,'
IB4 = IB
THEHEX = HEXOF(IB4)
STRNG(1)(1:5) = '$'//THEHEX(7:8)//','''
NN = 6
ENDIF
HEX = .FALSE.
DO 10 II = WHERE+1,J
I = II
12 CONTINUE
IB = BYTES(I)
IC = CHAR(IB)
IF (IB.EQ.13.OR.IB.EQ.4.OR.IB.EQ.10.OR.IB.EQ.0) THEN
* standard "funny" chars
IF (.NOT.HEX) THEN
STRNG(N)(NN:NN) = ''''
NN = NN + 1
ENDIF
IF (IB.EQ.0) THEN
IC = '0'
ELSEIF (IB.EQ.4) THEN
IC = '4'
ELSEIF (IB.EQ.13) THEN
IC = 'D'
ELSEIF (IB.EQ.10) THEN
IC = 'A'
ENDIF
STRNG(N)(NN:NN+1) = ',$'
STRNG(N)(NN+2:NN+2) = IC
NN = NN + 3
IF (I.EQ.J) THEN
GOTO 11
ELSEIF (I.EQ.J-1.AND..NOT.HEX) THEN
HEX = .TRUE.
I = J
GOTO 12
ENDIF
IF ((NN+2).LT.45) THEN
STRNG(N)(NN:NN) = ','
NN = NN + 1
STRNG(N)(NN:NN) = ''''
NN = NN + 1
ELSE
NN = 2
N = N + 1
STRNG(N)(1:1) = ''''
ENDIF
HEX = .FALSE.
ELSEIF (IB.EQ.39.AND..NOT.HEX) THEN
* quote is represented as 2 quotes
STRNG(N)(NN:NN) = ''''
NN = NN + 1
STRNG(N)(NN:NN) = ''''
NN = NN + 1
ELSEIF (IB.GT.31.AND.IB.LT.127.AND..NOT.HEX) THEN
* do a valid character
STRNG(N)(NN:NN) = IC
NN = NN + 1
ELSE
* rest of cases done as hex
IF (.NOT.HEX) THEN
STRNG(N)(NN:NN) = ''''
NN = NN + 1
ENDIF
IB4 = IB
THEHEX = HEXOF(IB4)
STRNG(N)(NN:NN+1) = ',$'
STRNG(N)(NN+2:NN+3) = THEHEX(7:8)
NN = NN + 4
IF (I.EQ.J) THEN
GOTO 11
ELSEIF (I.EQ.J-1.AND..NOT.HEX) THEN
HEX = .TRUE.
I = J
GOTO 12
ENDIF
IF ((NN+2).LT.45) THEN
STRNG(N)(NN:NN) = ','
NN = NN + 1
STRNG(N)(NN:NN) = ''''
NN = NN + 1
ELSE
NN = 2
N = N + 1
STRNG(N)(1:1) = ''''
ENDIF
HEX = .FALSE.
ENDIF
IF (NN.GE.47.AND.I.LT.J) THEN
IF (I.EQ.J-1) THEN
I = J
GOTO 12
ENDIF
STRNG(N)(NN:NN) = ''''
NN = 2
N = N + 1
STRNG(N)(1:1) = ''''
ENDIF
10 CONTINUE
STRNG(N)(NN:NN) = ''''
11 CONTINUE
IF (FOUND) THEN
DO 3498 I = WHERE+1,J
K = MEMADR + I
IFB = FNDHSH(ADDREF,14,K)
IF (IFB.NE.-1) THEN
JJ = I - WHERE
THEHEX = HEXOF(K)
CTMP10 = 'H_'//THEHEX(3:8)//' '
WRITE (THEHEX,'(I8.8)') JJ
LINES(LINPTR) = CTMP10//'EQU *+'//THEHEX
LINPTR = LINPTR + 1
ENDIF
3498 CONTINUE
ENDIF
K = MEMADR + WHERE
THEHEX = HEXOF(K)
CALL ENTHSH(ADDREF,14,K,ADRNDX)
LABEL = 'H_'//THEHEX(3:8)//' '
OPCODE = 'DC.B '
LINES(LINPTR) = LABEL//OPCODE//STRNG(1)
LINPTR = LINPTR + 1
IF (N.GE.2) THEN
LABEL = ' '
LINES(LINPTR) = LABEL//OPCODE//STRNG(2)
LINPTR = LINPTR + 1
IF (N.GE.3) THEN
LINES(LINPTR) = LABEL//OPCODE//STRNG(3)
LINPTR = LINPTR + 1
ENDIF
IF (N.GE.4) THEN
LINES(LINPTR) = LABEL//OPCODE//STRNG(4)
LINPTR = LINPTR + 1
ENDIF
IF (N.GE.5) THEN
LINES(LINPTR) = LABEL//OPCODE//STRNG(5)
LINPTR = LINPTR + 1
ENDIF
ENDIF
WHERE = J + 1
FLAG = .TRUE.
GOTO 9999
9901 CONTINUE
LINES(LINPTR) = ' DS.W 0'
K = WHERE
K = MOD(K,2)
IF (K.EQ.1.AND.FNDST) THEN
WHERE = WHERE + 1
LINPTR = LINPTR + 1
ELSEIF (FNDST) THEN
LINPTR = LINPTR + 1
ELSEIF (K.EQ.1) THEN
WHERE = WHERE - 1
ENDIF
K = MEMADR + WHERE
IF (FLAG) CALL ENTHSH(ADDREF(0),14,K,ADRNDX)
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE TSTDCB
CHARACTER*8 SRXHEX,DSXHEX,HEXEXT,HEXADR,MMADR,THEHEX,HEXOF
CHARACTER*30 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
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,FNDHSH
INTEGER*2 WORDS(0:1),CURWRD,CODEW(0:16383),WHERE,END
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 FOUND,DCBL
EQUIVALENCE (CODEW(0),CODEB(0,0),BYTES(0)),(TRADDR,TRBYTE(0)),(MEMADR,MEMBYT(0))
EQUIVALENCE (LWORD,WORDS(0),HIWORD),(WORDS(1),LOWORD)
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 /CODE/IPAD,CODEW,WHERE,END,TRADDR,MEMADR
COMMON /SMASH/CURWRD,HINIB,MHNIB,MLNIB,LONIB,HIBYT,LOBYT
COMMON /DISNUM/LINPTR,/VERSNS/V10,V11,/DISASM/ASMOUT,LINES,MMADR,ALLOPS
COMMON /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND
SAVE /DISASM/,/VERSNS/,/DISNUM/,/SMASH/,/CODE/,/REFS/
EXTERNAL HEXOF,FNDHSH
SAVE
DCBL = .FALSE.
SAVWHR = WHERE
IBEGIN = WHERE/2
IEND = END/2
IF ((IBEGIN+2).GE.IEND) RETURN
IFID = CODEW(IBEGIN)
ITST = CODEW(IBEGIN+1)
IF (ITST.NE.IFID) THEN
ITST = CODEW(IBEGIN+2)
IF (ITST.NE.IFID) RETURN
IFID2 = CODEW(IBEGIN+1)
ITST2 = CODEW(IBEGIN+3)
IF (ITST2.NE.IFID2) RETURN
ITST = CODEW(IBEGIN+4)
ITST2 = CODEW(IBEGIN+5)
IF (ITST.NE.IFID) RETURN
IF (ITST2.NE.IFID2) RETURN
DCBL = .TRUE.
RETURN
ELSE
ITST = CODEW(IBEGIN+2)
IF (ITST.NE.IFID) RETURN
ENDIF
L = MOD(END,2)
IF (DCBL) THEN
DO 111 I = IBEGIN+1,IEND-1,2
K = I + 1
ITST = CODEW(K)
ITST2 = CODEW(K+1)
IF (ITST.NE.IFID) GOTO 2
IF (ITST2.NE.IFID2) GOTO 2
111 CONTINUE
ELSE
DO 1 I = IBEGIN+1,IEND-1
K = I + 1
ITST = CODEW(K)
IF (ITST.NE.IFID) GOTO 2
1 CONTINUE
ENDIF
IF (L.EQ.0) K = K + 1
2 CONTINUE
LENG = K - IBEGIN
LINOW = LINPTR
CALL DISLIN
ADDR = LINES(LINOW)(61:70)
DO 11 I = LINOW,LINPTR-1
IF (LINES(I)(11:13).NE.'EQU') LINES(I)(1:10) = '** dbw '
11 CONTINUE
IF (FOUND) THEN
IAD = MEMADR + SAVWHR
DO 100 I = 2*LENG-1,0,-1
ITST = IAD + I
IFB = FNDHSH(ADDREF,14,ITST)
IF (IFB.NE.-1) THEN
THEHEX = HEXOF(ITST)
LABEL = 'H_'//THEHEX(3:8)//' '
IF (I.NE.0) THEN
WRITE (THEHEX,'(I8.8)') I
LINES(LINPTR) = LABEL//'EQU *+'//THEHEX
LINPTR = LINPTR + 1
ENDIF
ELSE
LABEL = ' '
ENDIF
100 CONTINUE
ENDIF
101 CONTINUE
IF (DCBL) THEN
OPCODE = 'DCB.L'
IFID = IOR(IFID*65536,IFID2)
THEHEX = HEXOF(IFID)
WRITE (ALLOPS,'(I5.5,'',$'',A8)') LENG,THEHEX
VAL = '$'//THEHEX
C4 = CHAR4(IFID)
C5 = C4
ELSE
OPCODE = 'DCB.W'
WRITE (ALLOPS,'(I5.5,'','',SP,I6.5)') LENG,IFID
THEHEX = HEXOF(IFID)
VAL = '$'//THEHEX(5:8)
C4 = CHAR4(IFID)
C5 = C4(3:4)
ENDIF
WHERE = SAVWHR + LENG*2
LINES(LINPTR) = LABEL//OPCODE//ALLOPS//VAL//ADDR//C5
LINPTR = LINPTR + 1
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE TSTIOA(INIJJI)
CHARACTER*8 HEXADR,MMADR,HEXOF
CHARACTER*30 ALLOPS,IONAME*40
CHARACTER*74 LINES(1200)
CHARACTER*10 ASMOUT(7),LABEL,OPCODE,OPS(3),VAL,ADDR
INTEGER*4 LINPTR,IJIJJI,IJ,INIJJI,IAND,ADDREF(0:16383),ADRNDX
INTEGER*4 BLKBEG,BLKEND,FNDHSH
LOGICAL*2 FOUND,DONAME,DOENT
EQUIVALENCE (ASMOUT(1),LABEL),(ASMOUT(2),OPCODE),(ASMOUT(6),VAL)
EQUIVALENCE (ASMOUT(7),ADDR),(ASMOUT(3),OPS(1))
COMMON /DISNUM/LINPTR,/DISASM/ASMOUT,LINES,MMADR,ALLOPS
COMMON /REFS/ADDREF,ADRNDX,BLKBEG,BLKEND,FOUND
SAVE /DISASM/,/DISNUM/,/REFS/
EXTERNAL HEXOF,FNDHSH,ENTHSH
SAVE
IJIJJI = IAND(INIJJI,$0FFFFFF)
IJ = IJIJJI
HEXADR = HEXOF (IJ)
* PRINT *,'TSTIOA CALLED: $',HEXADR
IF (IJIJJI.GE.BLKBEG.AND.IJIJJI.LE.BLKEND) RETURN
IF (IJIJJI.GE.$0EF8000.AND.IJIJJI.LE.$0FFFFFF) THEN
DONAME = .TRUE.
DOENT = .TRUE.
INCR = 1
IF (IJIJJI.EQ.$0EF8000) THEN
IONAME = 'SKYMNK - COMMAND REGISTER'
ELSEIF (IJIJJI.EQ.$0EF8002) THEN
IONAME = 'SKYMNK - CONTROL REGISTER'
ELSEIF (IJIJJI.EQ.$0EF8004) THEN
IONAME = 'SKYMNK - STATUS REGISTER'
ELSEIF (IJIJJI.EQ.$0EF8006) THEN
IONAME = 'SKYMNK - LOINT - LOW INTERRUPT VECTOR ADDR.'
ELSEIF (IJIJJI.EQ.$0EF8008) THEN
IONAME = 'SKYMNK - ADDMOD - ADDRESS MODIFIER'
ELSEIF (IJIJJI.EQ.$0EF800A) THEN
IONAME = 'SKYMNK DALREG - DMA LOW ADDRESS BYTE'
ELSEIF (IJIJJI.EQ.$0EF800C) THEN
IONAME = 'SKYMNK DAMREG - DMA MID ADDRESS BYTE'
ELSEIF (IJIJJI.GE.$0EF8000.AND.IJIJJI.LE.$0EF800F) THEN
IONAME = 'SKYMNK control, command and status '
ELSEIF (IJIJJI.EQ.$0EF800E) THEN
IONAME = 'SKYMNK DAHREG - DMA HIGH ADDRESS BYTE'
ELSEIF (IJIJJI.EQ.$0F00001) THEN
IONAME = 'PPI1-Port A - Keypad I/O m2 INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F00003) THEN
IONAME = 'PPI1 Port B - Printer I/O m1 INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F00005) THEN
IONAME = 'PPI1 Port C - hndshk/status INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F00007) THEN
IONAME = 'PPI1 control register INTEL 8255'
ELSEIF (IJIJJI.GE.$0F00000.AND.IJIJJI.LT.$0F00009) THEN
IONAME = 'PPI1 = Keypad & Printer INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F00009) THEN
IONAME = 'PPI2-Port A - "USER" I/O m2 INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F0000B) THEN
IONAME = 'PPI2 Port B - Keyboard I/O m1 INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F0000D) THEN
IONAME = 'PPI2 Port C - hndshk/status INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F0000F) THEN
IONAME = 'PPI2 control register INTEL 8255'
ELSEIF (IJIJJI.GE.$0F00009.AND.IJIJJI.LT.$0F00010) THEN
IONAME = 'PPI2 = "USER" & Keyboard INTEL 8255'
ELSEIF (IJIJJI.EQ.$0F00011) THEN
IONAME = 'TIMER - 0 (1 MHz) TMR0 INTEL 8253'
ELSEIF (IJIJJI.EQ.$0F00013) THEN
IONAME = 'TIMER - 1 (1 MHz) TMR1 INTEL 8253'
ELSEIF (IJIJJI.EQ.$0F00015) THEN
IONAME = 'TIMER - 2 (1 MHz) TMR2 INTEL 8253'
ELSEIF (IJIJJI.EQ.$0F00017) THEN
IONAME = 'TIMER control register INTEL 8253'
ELSEIF (IJIJJI.GE.$0F00010.AND.IJIJJI.LT.$0F00019) THEN
IONAME = 'TIMER = 1 MegHz timer INTEL 8253'
ELSEIF (IJIJJI.EQ.$0F00019) THEN
IONAME = 'CRCGEN character reg. Signetics 2653'
ELSEIF (IJIJJI.EQ.$0F0001B) THEN
IONAME = 'CRCGEN status/command Signetics 2653'
ELSEIF (IJIJJI.EQ.$0F0001D) THEN
IONAME = 'CRCGEN mode register Signetics 2653'
ELSEIF (IJIJJI.EQ.$0F0001F) THEN
IONAME = 'CRCGEN BCC register Signetics 2653'
ELSEIF (IJIJJI.GE.$0F00009.AND.IJIJJI.LT.$0F00010) THEN
IONAME = 'CRCGEN = CRC generator Sig. 2653'
ELSEIF (IJIJJI.EQ.$0F00021) THEN
IONAME = 'RS-232 #1 Data Register Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00023) THEN
IONAME = 'RS-232 #1 Status Reg. Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00025) THEN
IONAME = 'RS-232 #1 Mode Register Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00027) THEN
IONAME = 'RS-232 #1 Command Reg Signetics 2661B'
ELSEIF (IJIJJI.GE.$0F00020.AND.IJIJJI.LT.$0F00029) THEN
IONAME = 'RS-232 #1 Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00029) THEN
IONAME = 'RS-232 #2 Data Register Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F0002B) THEN
IONAME = 'RS-232 #2 Status Reg. Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F0002D) THEN
IONAME = 'RS-232 #2 Mode Register Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F0002F) THEN
IONAME = 'RS-232 #2 Command Reg Signetics 2661B'
ELSEIF (IJIJJI.GE.$0F00029.AND.IJIJJI.LT.$0F00030) THEN
IONAME = 'RS-232 #2 Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00031) THEN
IONAME = 'RS-232 #3 Data Register Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00033) THEN
IONAME = 'RS-232 #3 Status Reg. Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00035) THEN
IONAME = 'RS-232 #3 Mode Register Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00037) THEN
IONAME = 'RS-232 #3 Command Reg Signetics 2661B'
ELSEIF (IJIJJI.GE.$0F00030.AND.IJIJJI.LT.$0F00039) THEN
IONAME = 'RS-232 #3 Signetics 2661B'
ELSEIF (IJIJJI.EQ.$0F00039) THEN
IONAME = 'PRTC - for write protect fn.'
ELSEIF (IJIJJI.EQ.$0F00201) THEN
IONAME = 'CRTC - addr reg - Mot. 6854 CRT CONT'
ELSEIF (IJIJJI.EQ.$0F00203) THEN
IONAME = 'CRTC - data reg - Mot. 6854 CRT CONT'
ELSEIF (IJIJJI.EQ.$0F00205) THEN
IONAME = 'CLOCK - address register - HOLT HI-8000'
ELSEIF (IJIJJI.EQ.$0F00207) THEN
IONAME = 'CLOCK - data register - HOLT HI-8000'
ELSEIF (IJIJJI.EQ.$0F0020D) THEN
IONAME = 'GPS-graphics control register, BITS 0,2,3 active'
INCR = 2
LINES(LINPTR+1) = '*0/0=page0,1=page1/ 2/0=normal,1=inverse/ 3/0=blank,1=display/'
ELSEIF (IJIJJI.EQ.$0F00211) THEN
IONAME = 'FDC1 = Floppy status register'
ELSEIF (IJIJJI.EQ.$0F00219) THEN
IONAME = 'FDC2 = Floppy control register'
ELSEIF (IJIJJI.EQ.$0F00221) THEN
IONAME = 'FDC3 =status/command FDC -Fujitsu 8877'
ELSEIF (IJIJJI.EQ.$0F00223) THEN
IONAME = 'FDC3 = track reg. FDC -Fujitsu 8877'
ELSEIF (IJIJJI.EQ.$0F00225) THEN
IONAME = 'FDC3 = sector reg. FDC -Fujitsu 8877'
ELSEIF (IJIJJI.EQ.$0F00227) THEN
IONAME = 'FDC3 = Data reg. FDC -Fujitsu 8877'
ELSEIF (IJIJJI.GE.$0F00220.AND.IJIJJI.LT.$0F00228) THEN
IONAME = 'FDC1/FDC2/FDC3 = FDC -Fujitsu 8877'
ELSEIF (IJIJJI.EQ.$0F00229) THEN
IONAME = 'IEEE-488 - addr stat/mode - NEC 7210'
ELSEIF (IJIJJI.EQ.$0F0022B) THEN
IONAME = 'IEEE-488 - passthru/aux - NEC 7210'
ELSEIF (IJIJJI.EQ.$0F0022D) THEN
IONAME = 'IEEE-488 - addr0/addr0-1 - NEC 7210'
ELSEIF (IJIJJI.EQ.$0F0022F) THEN
IONAME = 'IEEE-488 - addr 1/end stringNEC 7210'
ELSEIF (IJIJJI.EQ.$0F00231) THEN
IONAME = 'IEEE-488 - data in/byte out NEC 7210'
ELSEIF (IJIJJI.EQ.$0F00233) THEN
IONAME = 'IEEE-488 - int stat1/mask1 NEC 7210'
ELSEIF (IJIJJI.EQ.$0F00235) THEN
IONAME = 'IEEE-488 - int stat2/mask2 NEC 7210'
ELSEIF (IJIJJI.EQ.$0F00237) THEN
IONAME = 'IEEE-488 - poll stat/mode - NEC 7210'
ELSEIF (IJIJJI.GE.$0F00228.AND.IJIJJI.LT.$0F00238) THEN
IONAME = 'IEEE-488 - GBIB INTERFACE - NEC 7210'
ELSEIF (IJIJJI.EQ.$0F00239) THEN
IONAME = 'KBRST = Keyboard Reset'
ELSEIF (IJIJJI.EQ.$0F00401) THEN
IONAME = 'DMA - Floppy/Ch0 Adr HI byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00403) THEN
IONAME = 'DMA - Floppy/Ch0 Adr LO byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00405) THEN
IONAME = 'DMA - Floppy/Ch0 Cnt HI byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00407) THEN
IONAME = 'DMA - Floppy/Ch0 Cnt LO byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00409) THEN
IONAME = 'DMA - GPIB /Ch1 Adr HI byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0040B) THEN
IONAME = 'DMA - GPIB /Ch1 Adr LO byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0040D) THEN
IONAME = 'DMA - GPIB /Ch1 Cnt HI byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0040F) THEN
IONAME = 'DMA - GPIB /Ch1 Cnt LO byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00411) THEN
IONAME = 'DMA- RS-232#3/CH2 AdrHI byt - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00413) THEN
IONAME = 'DMA- RS-232#3/CH2 AdrLO byt - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00415) THEN
IONAME = 'DMA- RS-232#3/CH2 CntHI byt - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00417) THEN
IONAME = 'DMA- RS-232#3/CH2 CntLO byt - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00419) THEN
IONAME = 'DMA- Printer/Ch3 AdrHI byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0041B) THEN
IONAME = 'DMA- Printer/Ch3 AdrLO byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0041D) THEN
IONAME = 'DMA- Printer/Ch3 CntHI byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0041F) THEN
IONAME = 'DMA- Printer/Ch3 CntLO byte - Mot 6844'
ELSEIF (IJIJJI.EQ.$0F00421) THEN
IONAME = 'DMA- Ch0 ChanCtl Reg. - Motorola 6844'
ELSEIF (IJIJJI.EQ.$0F00423) THEN
IONAME = 'DMA- Ch1 ChanCtl Reg. - Motorola 6844'
ELSEIF (IJIJJI.EQ.$0F00425) THEN
IONAME = 'DMA- Ch2 ChanCtl Reg. - Motorola 6844'
ELSEIF (IJIJJI.EQ.$0F00427) THEN
IONAME = 'DMA- Ch3 ChanCtl Reg. - Motorola 6844'
ELSEIF (IJIJJI.EQ.$0F00429) THEN
IONAME = 'DMA- Priority Control Reg. Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0042B) THEN
IONAME = 'DMA- Interrupt Control Mot 6844'
ELSEIF (IJIJJI.EQ.$0F0042D) THEN
IONAME = 'DMA- Daisy Chain Select Mot 6844'
ELSEIF (IJIJJI.GE.$0F00400.AND.IJIJJI.LT.$0F00430) THEN
IONAME = 'DMA - DMA controller = Motorola 6844'
ELSEIF (IJIJJI.EQ.$0F00431.OR.IJIJJI.EQ.$0F00430) THEN
IONAME = 'DMAAD- Ch0 Adr Ex Reg (D7-0 => A23-16)'
ELSEIF (IJIJJI.EQ.$0F00433.OR.IJIJJI.EQ.$0F00432) THEN
IONAME = 'DMAAD- Ch1 Adr Ex Reg (D7-0 => A23-16)'
ELSEIF (IJIJJI.EQ.$0F00435.OR.IJIJJI.EQ.$0F00434) THEN
IONAME = 'DMAAD- Ch2 Adr Ex Reg (D7-0 => A23-16)'
ELSEIF (IJIJJI.EQ.$0F00437.OR.IJIJJI.EQ.$0F00438) THEN
IONAME = 'DMAAD- Ch3 Adr Ex Reg (D7-0 => A23-16)'
* ELSEIF (IJIJJI.GE.$0F00430.AND.IJIJJI.LT.$0F00438) THEN
* IONAME = 'DMAAD - DMA addr Ext. (D7-0 => A23-16)'
ELSEIF (IJIJJI.GE.$0F00440.AND.IJIJJI.LE.$0F00443) THEN
IF (IJIJJI.LE.$0F00442) THEN
IONAME = 'IRQ7- Data Reg. - AMD 9519 Int. Contr.'
ELSE
IONAME = 'IRQ7- Ctrl Reg. - AMD 9519 Int. Contr.'
ENDIF
LINES(LINPTR+1) = '*7: 6: 5: 4: 3:VBL7 2:ACPF 1:ABRT 0:MPAR'
INCR = 2
ELSEIF (IJIJJI.GE.$0F00445.AND.IJIJJI.LE.$0F00448) THEN
IF (IJIJJI.LE.$0F00446) THEN
IONAME = 'IRQ6- Data Reg. - AMD 9519 Int. Contr.'
ELSE
IONAME = 'IRQ6- Ctrl Reg. - AMD 9519 Int. Contr.'
ENDIF
LINES(LINPTR+1) = '*7:USER 6:TXMT 5:CRC 4:RDMA 3:SER2 2:SER1 1:SER0 0:TMR1'
INCR = 2
ELSEIF (IJIJJI.GE.$0F00449.AND.IJIJJI.LE.$0F0044C) THEN
IF (IJIJJI.LE.$0F0044A) THEN
IONAME = 'IRQ4- Data Reg. - AMD 9519 Int. Contr.'
ELSE
IONAME = 'IRQ4- Ctrl Reg. - AMD 9519 Int. Contr.'
ENDIF
LINES(LINPTR+1) = '*7:TMR0 6:PRNT 5: 4:GPIB 3:PDMA 2:TMR3 1:FLOP 0:IDMA'
INCR = 2
ELSEIF (IJIJJI.GE.$0F0044D.AND.IJIJJI.LE.$0F0044F) THEN
IF (IJIJJI.LE.$0F0044E) THEN
IONAME = 'IRQ1- Data Reg. - AMD 9519 Int. Contr.'
ELSE
IONAME = 'IRQ1- Ctrl Reg. - AMD 9519 Int. Contr.'
ENDIF
LINES(LINPTR+1) = '*7:TMR2 6: 5: 4: 3: 2:KBKP 1: 0:HOLT'
INCR = 2
ELSEIF (IJIJJI.EQ.$0F00450) THEN
IONAME = 'AMODE - Address mode register'
ELSEIF (IJIJJI.EQ.$0F00455) THEN
IONAME = 'BEREG - BUS ERROR REGISTER '
LINES(LINPTR+1) = '*BITS: 2=WriteProt 3=AutoDtack 5=PowerFail 6=DMAbusErr'
INCR = 2
ELSEIF (IJIJJI.EQ.$0F00605) THEN
IONAME = 'Write Protect Hardware Latch'
ELSEIF (IJIJJI.GE.$0F20000.AND.IJIJJI.LE.$0F3FFFF) THEN
DONAME = .FALSE.
IF (IJIJJI.EQ.$0F20EF6) THEN
IONAME = 'ROM - P.O.S.T. Entry Point'
ELSEIF (IJIJJI.EQ.$0F20F40) THEN
IONAME = 'ROM - Manual DIAGnostics Entry Point'
ELSEIF (IJIJJI.EQ.$0F216E0) THEN
IONAME = 'ROM - levl 4 autovector trap handler'
ELSEIF (IJIJJI.EQ.$0F2000C) THEN
IONAME = 'ROM - Addr pointer- Man. DIAG '
ELSEIF (IJIJJI.EQ.$0F20008) THEN
IONAME = 'ROM - Addr pointer- FONT table'
ELSEIF (IJIJJI.GE.$0F20030.AND.IJIJJI.LT.$0F0E30) THEN
IONAME = 'ROM - SYSTEM FONT TABLE'
ELSE
IONAME = 'PLANAR BOARD ROM'
ENDIF
LINES(LINPTR) = '* address $'//HEXADR//' is '//IONAME
LINPTR = LINPTR + 1
ELSEIF (IJIJJI.GE.$0F40000.AND.IJIJJI.LE.$0F4FFFF) THEN
IONAME = 'CRT Graphics (planar board) RAM page 0'
ELSEIF (IJIJJI.GE.$0F50000.AND.IJIJJI.LE.$0F5FFFF) THEN
IONAME = 'CRT Graphics (planar board) RAM page 1'
ELSEIF (IJIJJI.GE.$0F60000.AND.IJIJJI.LE.$0F7FFFF) THEN
IONAME = 'RESERVED for CRT Graphics RAM growth'
ELSEIF (IJIJJI.EQ.$0F80501.OR.IJIJJI.EQ.$0F80500) THEN
IONAME = 'SENSOR Interrupt Controller Data Reg'
ELSEIF (IJIJJI.EQ.$0F80503.OR.IJIJJI.EQ.$0F80502) THEN
IONAME = 'SENSOR Interrupt Controller Cmnd Reg'
ELSEIF (IJIJJI.EQ.$0F80520) THEN
IONAME = 'SENSOR A/D Ch#1 Data WORD'
ELSEIF (IJIJJI.EQ.$0F80521) THEN
IONAME = 'SENSOR A/D Ch#1 Control Reg.'
ELSEIF (IJIJJI.EQ.$0F80522) THEN
IONAME = 'SENSOR A/D Ch#2 Data WORD'
ELSEIF (IJIJJI.EQ.$0F80523) THEN
IONAME = 'SENSOR A/D Ch#2 Control Reg.'
ELSEIF (IJIJJI.EQ.$0F80524) THEN
IONAME = 'SENSOR A/D Ch#3 Data WORD'
ELSEIF (IJIJJI.EQ.$0F80525) THEN
IONAME = 'SENSOR A/D Ch#3 Control Reg.'
ELSEIF (IJIJJI.EQ.$0F80526) THEN
IONAME = 'SENSOR A/D Ch#4 Data WORD'
ELSEIF (IJIJJI.EQ.$0F80527) THEN
IONAME = 'SENSOR A/D Ch#4 Control Reg.'
ELSEIF (IJIJJI.EQ.$0F8053F) THEN
IONAME = 'SENSOR A/D status overrun/autorange'
ELSEIF (IJIJJI.EQ.$0F80540.OR.IJIJJI.EQ.$0F80541) THEN
IONAME = 'SENSOR || PORTS 3 & 1; "A" ports'
ELSEIF (IJIJJI.EQ.$0F80542.OR.IJIJJI.EQ.$0F80543) THEN
IONAME = 'SENSOR || PORTS 4 & 2; "B" ports'
ELSEIF (IJIJJI.EQ.$0F80544.OR.IJIJJI.EQ.$0F80545) THEN
IONAME = 'SENSOR PORTS 3,4 & 1,2 hndshk/status'
ELSEIF (IJIJJI.EQ.$0F80546.OR.IJIJJI.EQ.$0F80547) THEN
IONAME = 'SENSOR || PORTS 3,4 & 1,2 control'
ELSEIF (IJIJJI.EQ.$0F80561) THEN
IONAME = 'SENSOR COUNTER #0 DATA'
ELSEIF (IJIJJI.EQ.$0F80563) THEN
IONAME = 'SENSOR COUNTER #1 DATA'
ELSEIF (IJIJJI.EQ.$0F80565) THEN
IONAME = 'SENSOR COUNTER #2 DATA'
ELSEIF (IJIJJI.EQ.$0F80567) THEN
IONAME = 'SENSOR COUNTERS MODE CONTROL'
ELSEIF (IJIJJI.GE.$0F00000.AND.IJIJJI.LE.$0F000FF) THEN
IONAME = 'Planar board I/O Device'
ELSEIF (IJIJJI.GE.$0F00200.AND.IJIJJI.LE.$0F002FF) THEN
IONAME = 'Planar board I/O Device'
ELSEIF (IJIJJI.GE.$0F00400.AND.IJIJJI.LE.$0F004FF) THEN
IONAME = 'Planar board I/O Device'
ELSEIF (IJIJJI.GE.$0F00600.AND.IJIJJI.LE.$0F006FF) THEN
IONAME = 'Planar board I/O Device'
ELSEIF (IJIJJI.GE.$0F10000.AND.IJIJJI.LE.$0F1C0FF) THEN
IONAME = 'MMU Memory Management Board'
ELSEIF (IJIJJI.GE.$0F80000.AND.IJIJJI.LE.$0F805FF) THEN
IONAME = 'Sensor I/O Board A '
ELSEIF (IJIJJI.GE.$0F80600.AND.IJIJJI.LE.$0F809FF) THEN
IONAME = 'IR Boards'
ELSEIF (IJIJJI.GE.$0F80A00.AND.IJIJJI.LE.$0F80AFF) THEN
IONAME = 'Hard Disk Controller Board'
ELSEIF (IJIJJI.GE.$0F82000.AND.IJIJJI.LE.$0F823FF) THEN
IONAME = 'SDLC Board'
ELSEIF (IJIJJI.GE.$0FC0000.AND.IJIJJI.LE.$0FDFFFF) THEN
DONAME = .FALSE.
IF (IJIJJI.EQ.$0FC41A0) THEN
IONAME = 'SC v1.13 SCHDRA = unused'
ELSEIF (IJIJJI.EQ.$0FC4740) THEN
IONAME = 'SC11 v1.13 CHAIN'
ELSEIF (IJIJJI.EQ.$0FC453A) THEN
IONAME = 'SC14 v1.13 LOADB'
ELSEIF (IJIJJI.EQ.$0FCC938) THEN
IONAME = 'SC53 v1.13 MODSYSM'
ELSEIF (IJIJJI.EQ.$0FCB8C6) THEN
IONAME = 'SC57 v1.13 MEMMGR'
ELSEIF (IJIJJI.EQ.$0FC3C84) THEN
IONAME = 'SC25 v1.13 GETPCB'
ELSEIF (IJIJJI.EQ.$0FC3D86) THEN
IONAME = 'SC26 v1.13 GIVPCB'
ELSEIF (IJIJJI.EQ.$0FC47FC) THEN
IONAME = 'SC09 v1.13 CPRTERR'
ELSEIF (IJIJJI.EQ.$0FC4850) THEN
IONAME = 'SC10 v1.13 DPRTERR'
ELSEIF (IJIJJI.EQ.$0FC4818) THEN
IONAME = 'SC12 v1.13 PRTERR'
ELSEIF (IJIJJI.EQ.$0FC005E) THEN
IONAME = 'SC13 v1.13 WRMST'
ELSEIF (IJIJJI.EQ.$0FC5A96) THEN
IONAME = 'SC15 v1.13 FMTDIB'
ELSEIF (IJIJJI.EQ.$0FC5F18) THEN
IONAME = 'SC16 v1.13 NXTOK'
ELSEIF (IJIJJI.EQ.$0FC5D00) THEN
IONAME = 'SC17 v1.13 GTCMD'
ELSEIF (IJIJJI.EQ.$0FC47A6) THEN
IONAME = 'SC18 v1.13 PRTMSG'
ELSEIF (IJIJJI.EQ.$0FC4AB4) THEN
IONAME = 'SC19 v1.13 PRTERMSG'
ELSEIF (IJIJJI.EQ.$0FC59D6) THEN
IONAME = 'SC20 v1.13 FMTS'
ELSEIF (IJIJJI.EQ.$0FC5A6E) THEN
IONAME = 'SC21 v1.13 CMWC'
ELSEIF (IJIJJI.EQ.$0FC610A) THEN
IONAME = 'SC22 v1.13 SECSIZ'
ELSEIF (IJIJJI.EQ.$0FC580A) THEN
IONAME = 'SC23 v1.13 GETTIM'
ELSEIF (IJIJJI.EQ.$0FC56C4) THEN
IONAME = 'SC24 v1.13 SETTIM'
ELSEIF (IJIJJI.EQ.$0FC3A06) THEN
IONAME = 'SC27 v1.13 GSTAT'
ELSEIF (IJIJJI.EQ.$0FC3A90) THEN
IONAME = 'SC28 v1.13 SETPRI'
ELSEIF (IJIJJI.EQ.$0FC3F66) THEN
IONAME = 'SC29 v1.13 DELAY'
ELSEIF (IJIJJI.EQ.$0FC3F38) THEN
IONAME = 'SC30 v1.13 WAKEUP'
ELSEIF (IJIJJI.EQ.$0FC5D06) THEN
IONAME = 'SC31 v1.13 GTCMDE'
ELSEIF (IJIJJI.EQ.$0FC4366) THEN
IONAME = 'SC32 v1.13 SYSLEV'
ELSEIF (IJIJJI.EQ.$0FD681C) THEN
IONAME = 'SC33 v1.13 PROTECT'
ELSEIF (IJIJJI.EQ.$0FC58F6) THEN
IONAME = 'SC34 v1.13 FMTTOD'
ELSEIF (IJIJJI.EQ.$0FC47DC) THEN
IONAME = 'SC35 v1.13 SETEC'
ELSEIF (IJIJJI.EQ.$0FC2A8C) THEN
IONAME = 'SC36 v1.13 READB'
ELSEIF (IJIJJI.EQ.$0FC43DE) THEN
IONAME = 'SC40 v1.13 SRCDIR'
ELSEIF (IJIJJI.EQ.$0FC5CF6) THEN
IONAME = 'SC41 v1.13 GETCMD'
ELSEIF (IJIJJI.EQ.$0FC5CFA) THEN
IONAME = 'SC42 v1.13 GETCMDE'
ELSEIF (IJIJJI.EQ.$0FD21E6) THEN
IONAME = 'SC43 v1.13 EXIT'
ELSEIF (IJIJJI.EQ.$0FC0664) THEN
IONAME = 'SC52 v1.13 GBASPTR'
ELSEIF (IJIJJI.EQ.$0FC4762) THEN
IONAME = 'SC54 v1.13 SETCTRCR'
ELSEIF (IJIJJI.EQ.$0FC4778) THEN
IONAME = 'SC55 v1.13 GETCTRCR'
ELSEIF (IJIJJI.EQ.$0FCAA56) THEN
IONAME = 'SC56 v1.13 SEMMGR'
ELSEIF (IJIJJI.EQ.$0FC9E3A) THEN
IONAME = 'SC58 v1.13 ITCGEN'
ELSEIF (IJIJJI.EQ.$0FC4370) THEN
IONAME = 'SC60 v1.13 MODADRCK'
ELSEIF (IJIJJI.EQ.$0FC43C4) THEN
IONAME = 'SC61 v1.13 GETSCTAB'
ELSEIF (IJIJJI.EQ.$0FD68B0) THEN
IONAME = 'SC65 v1.13 PATCHADR'
ELSEIF (IJIJJI.EQ.$0FC4330) THEN
IONAME = 'SC66 v1.13 FILEADR'
ELSEIF (IJIJJI.EQ.$0FC430E) THEN
IONAME = 'SC67 v1.13 GETSENS'
ELSEIF (IJIJJI.EQ.$0FD2444) THEN
IONAME = 'SC68 v1.13 TMATACH'
ELSEIF (IJIJJI.EQ.$0FD248A) THEN
IONAME = 'SC69 v1.13 TMDTACH'
ELSEIF (IJIJJI.EQ.$0FC43CE) THEN
IONAME = 'SC62 v1.13 CHPRTSCR'
ELSEIF (IJIJJI.EQ.$0FC2B92) THEN
IONAME = 'SC59 v1.13 GPRTSCR'
ELSEIF (IJIJJI.EQ.$0FC2BAC) THEN
IONAME = 'ROM v1.13 PrtSc'
ELSEIF (IJIJJI.EQ.$0FC413E) THEN
IONAME = 'ROM v1.13 TRAP0 SCALL'
ELSEIF (IJIJJI.EQ.$0FC0C8A) THEN
IONAME = 'ROM v1.13 TRAP1 EnterMon'
ELSEIF (IJIJJI.EQ.$0FC0C90) THEN
IONAME = 'ROM v1.13 TRAP2 ExitMon'
ELSEIF (IJIJJI.EQ.$0FC0C96) THEN
IONAME = 'ROM v1.13 TRAP3 Wait'
ELSEIF (IJIJJI.EQ.$0FC0D2A) THEN
IONAME = 'ROM v1.13 TRAP4 Signal'
ELSEIF (IJIJJI.EQ.$0FC3EC8) THEN
IONAME = 'ROM v1.13 TRAP5 SUPR/usr'
ELSEIF (IJIJJI.EQ.$0FD10DE) THEN
IONAME = 'ROM v1.13 TRAP6 SYSIO'
ELSEIF (IJIJJI.EQ.$0FD68F6) THEN
IONAME = 'ROM v1.13 TRAP7 INTMGR'
ELSEIF (IJIJJI.EQ.$0FD0DA2) THEN
IONAME = 'ROM v1.13 TRAP8 IOMGR'
ELSEIF (IJIJJI.EQ.$0FD229A) THEN
IONAME = 'ROM v1.13 TRAP9 SUSPEND'
ELSEIF (IJIJJI.EQ.$0FD261E) THEN
IONAME = 'ROM v1.13 TRAPA RTMGR'
ELSEIF (IJIJJI.EQ.$0FD60EA) THEN
IONAME = 'ROM v1.13 RSOPEN level 1'
ELSEIF (IJIJJI.EQ.$0FD6272) THEN
IONAME = 'ROM v1.13 RSREAD level 1'
ELSEIF (IJIJJI.EQ.$0FD6342) THEN
IONAME = 'ROM v1.13 RSWRITE level 1'
ELSEIF (IJIJJI.EQ.$0FD6504) THEN
IONAME = 'ROM v1.13 RSFUNC level 1'
ELSEIF (IJIJJI.EQ.$0FD622A) THEN
IONAME = 'ROM v1.13 RSCLOSE level 1'
ELSEIF (IJIJJI.EQ.$0FD4BC0) THEN
IONAME = 'ROM v1.13 FSOPEN level 2'
ELSEIF (IJIJJI.EQ.$0FD5104) THEN
IONAME = 'ROM v1.13 FSREAD level 2'
ELSEIF (IJIJJI.EQ.$0FD5230) THEN
IONAME = 'ROM v1.13 FSWRITE level 2'
ELSEIF (IJIJJI.EQ.$0FD4F0C) THEN
IONAME = 'ROM v1.13 FSFUNC level 2'
ELSEIF (IJIJJI.EQ.$0FD5372) THEN
IONAME = 'ROM v1.13 FSCLOSE level 2'
ELSEIF (IJIJJI.EQ.$0FC12AE) THEN
IONAME = 'CMD v1.13 DELETE'
ELSEIF (IJIJJI.EQ.$0FC12BA) THEN
IONAME = 'CMD v1.13 JUMP'
ELSEIF (IJIJJI.EQ.$0FC3DFC) THEN
IONAME = 'CMD v1.13 KILL'
ELSEIF (IJIJJI.EQ.$0FC3E84) THEN
IONAME = 'CMD v1.13 PRI'
ELSEIF (IJIJJI.EQ.$0FC1516) THEN
IONAME = 'CMD v1.13 RENAME'
ELSEIF (IJIJJI.EQ.$0FC3FBC) THEN
IONAME = 'CMD v1.13 RESUME'
ELSEIF (IJIJJI.EQ.$0FC1C24) THEN
IONAME = 'CMD v1.13 SAVE'
ELSEIF (IJIJJI.EQ.$0FC1E50) THEN
IONAME = 'CMD v1.13 SECURE'
ELSEIF (IJIJJI.EQ.$0FC2572) THEN
IONAME = 'CMD v1.13 SUBMIT'
ELSEIF (IJIJJI.EQ.$0FC3FDA) THEN
IONAME = 'CMD v1.13 DELAY'
ELSEIF (IJIJJI.EQ.$0FC3B1C) THEN
IONAME = 'CMD v1.13 TASKS'
ELSEIF (IJIJJI.EQ.$0FC2678) THEN
IONAME = 'CMD v1.13 TIME'
ELSEIF (IJIJJI.EQ.$0FC28BE) THEN
IONAME = 'CMD v1.13 LISTDEV'
ELSEIF (IJIJJI.EQ.$0FC401C) THEN
IONAME = 'CMD v1.13 SHOW'
ELSEIF (IJIJJI.EQ.$0FC2958) THEN
IONAME = 'CMD v1.13 ATCHDEV'
ELSEIF (IJIJJI.EQ.$0FC2968) THEN
IONAME = 'CMD v1.13 DTCHDEV'
ELSEIF (IJIJJI.EQ.$0FC2886) THEN
IONAME = 'CMD v1.13 CLS'
ELSEIF (IJIJJI.EQ.$0FC2874) THEN
IONAME = 'CMD v1.13 PAGE'
ELSEIF (IJIJJI.EQ.$0FC3F24) THEN
IONAME = 'CMD v1.13 SUPMODE'
ELSEIF (IJIJJI.EQ.$0FC3F2E) THEN
IONAME = 'CMD v1.13 USRMODE'
ELSEIF (IJIJJI.EQ.$0FC2EE4) THEN
IONAME = 'CMD v1.13 SPOOL'
ELSEIF (IJIJJI.EQ.$0FC2F34) THEN
IONAME = 'CMD v1.13 SPOOLQ'
ELSEIF (IJIJJI.EQ.$0FC301E) THEN
IONAME = 'CMD v1.13 SPOOLC'
ELSE
IONAME = 'Plug in tray ROM'
ENDIF
LINES(LINPTR) = '* address $'//HEXADR//' is '//IONAME
LINPTR = LINPTR + 1
ELSEIF (IJIJJI.GE.$0FE0000.AND.IJIJJI.LE.$0FFFFFF) THEN
DONAME = .FALSE.
LINES(LINPTR) = '* $'//HEXADR//' is '//'RESERVED for Plug in tray ROM'
LINPTR = LINPTR + 1
ELSE
IONAME = '?? don''t know ??'
DOENT = .FALSE.
* DONAME = .FALSE.
* INCR = 0
ENDIF
IF (DONAME) THEN
LINES(LINPTR) = '* I/O address $'//HEXADR//' is '//IONAME
LINPTR = LINPTR + INCR
ENDIF
IF (DOENT) THEN
CALL ENTHSH(ADDREF,14,IJIJJI,ADRNDX)
ENDIF
ENDIF
RETURN
END

Potrebbero piacerti anche