📄 dis_cf.c
字号:
break;
case 0x004:
append_string(dstr,"ACR0");
break;
case 0x005:
append_string(dstr,"ACR1");
break;
#endif
#if (defined(MCF5200D) || defined(MCF5202) || \
defined(MCF5204) || defined(MCF5206))
case 0x801:
append_string(dstr,"VBR");
break;
#endif
#if (defined(MCF5204) || defined(MCF5206))
case 0xC04:
append_string(dstr,"RAMBAR");
break;
case 0xC0F:
append_string(dstr,"MBAR");
break;
#endif
#if (defined(MC68010) || defined(MC68020) || defined(MC68030) || \
defined(MC68040) || defined(MC68EC040) || defined(CPU32))
case 0x000:
append_string(dstr,"SFC");
break;
case 0x001:
append_string(dstr,"DFC");
break;
case 0x800:
append_string(dstr,"USP");
break;
case 0x801:
append_string(dstr,"VBR");
break;
#endif
#if (defined(MC68020) || defined(MC68030) || defined(MC68040) || \
defined(MC68EC040))
case 0x002:
append_string(dstr,"CACR");
break;
case 0x802:
append_string(dstr,"CAAR");
break;
case 0x803:
append_string(dstr,"MSP");
break;
case 0x804:
append_string(dstr,"ISP");
break;
#endif
#if (defined(MC68040) || defined(MC68LC040))
case 0x003:
append_string(dstr,"TCR");
break;
case 0x004:
append_string(dstr,"ITT0");
break;
case 0x005:
append_string(dstr,"ITT1");
break;
case 0x006:
append_string(dstr,"DTT0");
break;
case 0x007:
append_string(dstr,"DTT1");
break;
case 0x805:
append_string(dstr,"MMUSR");
break;
case 0x806:
append_string(dstr,"URP");
break;
case 0x807:
append_string(dstr,"SRP");
break;
#endif
#ifdef MC68EC040
case 0x004:
append_string(dstr,"IACR0");
break;
case 0x005:
append_string(dstr,"IACR1");
break;
case 0x006:
append_string(dstr,"DACR0");
break;
case 0x007:
append_string(dstr,"DACR1");
break;
#endif
default:
sprintf(buffer,"Rc%03X",opword2);
append_string(dstr,buffer);
break;
}
if (!(opword & 0x0001))
{
append_string(dstr,",");
append_register(dstr,opword2,15,14);
}
}
#ifdef MCF5200
static void
func37 (int index, WORD opword)
{
/* WDEBUG */
int opword2;
opword2 = (int)((WORD)cpu_read_data((ADDRESS)disasm_pc,16));
inc_disasm_pc(2);
if (opword2 & 0x0003)
{
append_ea(dstr,opword,5,isa[index].ea_mask);
}
else
{
valid_instruction = FALSE;
}
}
#endif
static void
func38 (int index, WORD opword)
{
/* MULS MULU .W */
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,",");
append_register(dstr,opword,DATA_REGISTER,11);
}
static void
func39 (int index, WORD opword)
{
/* MULS MULU .L */
int opword2,size;
opword2 = (int)((WORD)cpu_read_data((ADDRESS)disasm_pc,16));
inc_disasm_pc(2);
switch (opword2 & 0x8FF8)
{
case 0x0000:
append_instruction(dstr,"MULU.L");
size=32;
break;
case 0x0400:
append_instruction(dstr,"MULU.L");
size=64;
break;
case 0x0800:
append_instruction(dstr,"MULS.L");
size=32;
break;
case 0x0C00:
append_instruction(dstr,"MULS.L");
size=64;
break;
default:
valid_instruction = FALSE;
return;
break;
}
if (size == 32)
{
/* 32 bit */
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,",");
append_register(dstr,opword2,DATA_REGISTER,14);
}
else
{
/* 64 bit */
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,",");
append_register(dstr,opword2,DATA_REGISTER,2);
append_string(dstr,"-");
append_register(dstr,opword2,DATA_REGISTER,14);
}
}
#ifndef MCF5200
static void
func40 (int index, WORD opword)
{
/* CAS2 */
int opword2, opword3;
(void)index;
opword2 = (int)((WORD)cpu_read_data((ADDRESS)disasm_pc,16));
inc_disasm_pc(2);
opword3 = (int)((WORD)cpu_read_data((ADDRESS)disasm_pc,16));
inc_disasm_pc(2);
if (opword & 0x0200)
{
/* long */
append_size(dstr,0x0002,1,TRUE);
}
else
{
/* word */
append_size(dstr,0x0002,2,TRUE);
}
append_register(dstr,opword2,DATA_REGISTER,2);
append_string(dstr,":");
append_register(dstr,opword3,DATA_REGISTER,2);
append_string(dstr,",");
append_register(dstr,opword2,DATA_REGISTER,8);
append_string(dstr,":");
append_register(dstr,opword3,DATA_REGISTER,8);
append_string(dstr,",(");
append_register(dstr,opword2,15,14);
append_string(dstr,"),(");
append_register(dstr,opword3,15,14);
append_string(dstr,")");
}
static void
func41 (int index, WORD opword)
{
/* CAS */
int opword2;
opword2 = (int)((WORD)cpu_read_data((ADDRESS)disasm_pc,16));
inc_disasm_pc(2);
append_size2(dstr,opword,10,TRUE);
append_register(dstr,opword2,DATA_REGISTER,2);
append_string(dstr,",");
append_register(dstr,opword2,DATA_REGISTER,8);
append_string(dstr,",");
append_ea(dstr,opword,5,isa[index].ea_mask);
}
static void
func42 (int index, WORD opword)
{
/* MOVEP */
int opword2;
(void)index;
opword2 = (int)((WORD)cpu_read_data((ADDRESS)disasm_pc,16));
inc_disasm_pc(2);
if (opword & 0x0040)
{
/* long */
append_size(dstr,opword,6,TRUE);
}
else
{
/* word */
append_size(dstr,opword,4,TRUE);
}
if (opword & 0x0080)
{
/* MOVEP Dx,(d16,Ay) */
append_register(dstr,opword,DATA_REGISTER,11);
append_string(dstr,",(");
append_value(dstr,opword2,16);
append_string(dstr,",");
append_register(dstr,opword,ADDRESS_REGISTER,2);
append_string(dstr,")");
}
else
{
/* MOVEP (d16,Ay),Dx */
append_string(dstr,"(");
append_value(dstr,opword2,16);
append_string(dstr,",");
append_register(dstr,opword,ADDRESS_REGISTER,2);
append_string(dstr,"),");
append_register(dstr,opword,DATA_REGISTER,11);
}
}
static void
func43 (int index, WORD opword)
{
/* LINK long */
int disp;
char buffer[20];
(void)index;
disp = (int)cpu_read_data((ADDRESS)disasm_pc,32);
inc_disasm_pc(4);
append_register(dstr,opword,ADDRESS_REGISTER,2);
append_string(dstr,",#");
sprintf(buffer,"%d",disp);
append_string(dstr,buffer);
}
static void
func44 (int index, WORD opword)
{
/* BKPT */
int data;
(void)index;
append_string(dstr,"#");
data = opword & 0x0007;
append_value(dstr,data,8);
}
static void
func45 (int index, WORD opword)
{
/* SBCD ABCD Dy,Dx */
(void)index;
append_register(dstr,opword,DATA_REGISTER,2);
append_string(dstr,",");
append_register(dstr,opword,DATA_REGISTER,11);
}
static void
func46 (int index, WORD opword)
{
/* SBCD ABCD -(Ay),-(Ax) */
(void)index;
append_string(dstr,"-(");
append_register(dstr,opword,ADDRESS_REGISTER,2);
append_string(dstr,"),-(");
append_register(dstr,opword,ADDRESS_REGISTER,11);
append_string(dstr,")");
}
#endif /* MCF5200 */
static void
func47 (int index, WORD opword)
{
/* EOR SUB ADD OR */
append_size(dstr,opword,7,TRUE);
append_register(dstr,opword,DATA_REGISTER,11);
append_string(dstr,",");
append_ea(dstr,opword,5,isa[index].ea_mask);
}
#ifndef MCF5200
static void
func48 (int index, WORD opword)
{
/* BFCHG BFCLR BFSET BFTST */
int opword2;
opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD);
inc_disasm_pc(2);
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,"{");
if (opword2 & 0x0800)
{
/* Do = 1 -- Dn */
append_register(dstr,opword2,DATA_REGISTER,8);
}
else
{
append_value(dstr,((opword2 & 0x07C0) >> 6),SIZE_BYTE);
}
append_string(dstr,":");
if (opword2 & 0x0020)
{
/* Dw = 1 -- Dn */
append_register(dstr,opword2,DATA_REGISTER,2);
}
else
{
append_value(dstr,(opword2 & 0x001F),SIZE_BYTE);
}
append_string(dstr,"}");
}
static void
func49 (int index, WORD opword)
{
/* BFEXTS BFEXTU */
int opword2;
opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD);
inc_disasm_pc(2);
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,"{");
if (opword2 & 0x0800)
{
/* Do = 1 -- Dn */
append_register(dstr,opword2,DATA_REGISTER,8);
}
else
{
append_value(dstr,((opword2 & 0x07C0) >> 6),SIZE_BYTE);
}
append_string(dstr,":");
if (opword2 & 0x0020)
{
/* Dw = 1 -- Dn */
append_register(dstr,opword2,DATA_REGISTER,2);
}
else
{
append_value(dstr,(opword2 & 0x001F),SIZE_BYTE);
}
append_string(dstr,"},");
append_register(dstr,opword2,DATA_REGISTER,14);
}
static void
func50 (int index, WORD opword)
{
/* BFINS */
int opword2;
opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD);
inc_disasm_pc(2);
append_register(dstr,opword2,DATA_REGISTER,14);
append_string(dstr,",");
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,"{");
if (opword2 & 0x0800)
{
/* Do = 1 -- Dn */
append_register(dstr,opword2,DATA_REGISTER,8);
}
else
{
append_value(dstr,((opword2 & 0x07C0) >> 6),SIZE_BYTE);
}
append_string(dstr,":");
if (opword2 & 0x0020)
{
/* Dw = 1 -- Dn */
append_register(dstr,opword2,DATA_REGISTER,2);
}
else
{
append_value(dstr,(opword2 & 0x001F),SIZE_BYTE);
}
append_string(dstr,"}");
}
static void
func51 (int index, WORD opword)
{
/* CHK */
append_size2(dstr,opword,8,TRUE);
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,",");
append_register(dstr,opword,DATA_REGISTER,11);
}
static void
func52 (int index, WORD opword)
{
/* CMPM */
(void)index;
append_size(dstr,opword,7,TRUE);
append_string(dstr,"(");
append_register(dstr,opword,ADDRESS_REGISTER,2);
append_string(dstr,")+,(");
append_register(dstr,opword,ADDRESS_REGISTER,11);
append_string(dstr,")+");
}
static void
func53 (int index, WORD opword)
{
/* DBcc */
int disp, target;
#ifdef SYMBOL_TABLE
char tstr[100];
#endif
(void)index;
disp = (int)((SWORD)cpu_read_data((ADDRESS)disasm_pc,16));
target = (unsigned int)disasm_pc + disp;
inc_disasm_pc(2);
append_register(dstr,opword,DATA_REGISTER,2);
append_string(dstr,",");
#ifdef SYMBOL_TABLE
if (symtab_convert_address((ADDRESS)target,tstr))
{
append_string(dstr,tstr);
}
else
append_value(dstr,target,SIZE_LONG);
#else
append_value(dstr,target,SIZE_LONG);
#endif
}
static void
func54 (int index, WORD opword)
{
/* DIVS.W DIVU.W */
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,",");
append_register(dstr,opword,DATA_REGISTER,11);
}
static void
func55 (int index, WORD opword)
{
/* DIVS.L DIVU.L DIVSL.L DIVUL.L*/
int opword2, same_reg;
opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD);
inc_disasm_pc(2);
same_reg = (((opword2 & 0x7000) >> 12) ==
(opword2 & 0x0007));
if (opword2 & 0x0800)
{
/* DIVS */
if ((opword2 & 0x0400) || same_reg)
{
append_instruction(dstr,"DIVS.L");
}
else
{
append_instruction(dstr,"DIVSL.L");
}
}
else
{
/* DIVU */
if ((opword2 & 0x0400) || same_reg)
{
append_instruction(dstr,"DIVU.L");
}
else
{
append_instruction(dstr,"DIVUL.L");
}
}
append_ea(dstr,opword,5,isa[index].ea_mask);
append_string(dstr,",");
if (same_reg)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -