mirror of
https://github.com/holub/mame
synced 2025-05-23 14:19:01 +03:00
680x0: Improve disassembly for various FMOVE forms [R. Belmont]
This commit is contained in:
parent
dfff696a55
commit
4c0a6f40e7
@ -1697,6 +1697,10 @@ static void d68040_fpu(void)
|
|||||||
{
|
{
|
||||||
".l", ".s", ".x", ".p", ".w", ".d", ".b", ".?"
|
".l", ".s", ".x", ".p", ".w", ".d", ".b", ".?"
|
||||||
};
|
};
|
||||||
|
const char *spec_reg[8] =
|
||||||
|
{
|
||||||
|
"?", "FPIAR", "FPSR", "?", "FPCR", "?", "?", "?"
|
||||||
|
};
|
||||||
|
|
||||||
char mnemonic[40];
|
char mnemonic[40];
|
||||||
UINT32 w2, src, dst_reg;
|
UINT32 w2, src, dst_reg;
|
||||||
@ -1783,21 +1787,88 @@ static void d68040_fpu(void)
|
|||||||
|
|
||||||
case 0x3:
|
case 0x3:
|
||||||
{
|
{
|
||||||
sprintf(g_dasm_str, "fmove /todo");
|
sprintf(g_dasm_str, "fmove FP%d, %s", dst_reg, get_ea_mode_str_32(g_cpu_ir));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x4:
|
case 0x4: // ea to control
|
||||||
case 0x5:
|
|
||||||
{
|
{
|
||||||
sprintf(g_dasm_str, "fmove /todo");
|
sprintf(g_dasm_str, "fmove.l %s, %s", get_ea_mode_str_32(g_cpu_ir), spec_reg[(w2>>10)&7]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x6:
|
case 0x5: // control to ea
|
||||||
case 0x7:
|
|
||||||
{
|
{
|
||||||
sprintf(g_dasm_str, "fmovem /todo");
|
sprintf(g_dasm_str, "fmove.l %s, %s", spec_reg[(w2>>10)&7], get_ea_mode_str_32(g_cpu_ir));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 0x6: // memory to FPU, list
|
||||||
|
{
|
||||||
|
char temp[32];
|
||||||
|
|
||||||
|
if ((w2>>11) & 1) // dynamic register list
|
||||||
|
{
|
||||||
|
sprintf(g_dasm_str, "fmovem.x %s, D%d", get_ea_mode_str_32(g_cpu_ir), (w2>>4)&7);
|
||||||
|
}
|
||||||
|
else // static register list
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf(g_dasm_str, "fmovem.x %s, ", get_ea_mode_str_32(g_cpu_ir));
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (w2 & (1<<i))
|
||||||
|
{
|
||||||
|
if ((w2>>12) & 1) // postincrement or control
|
||||||
|
{
|
||||||
|
sprintf(temp, "FP%d ", 7-i);
|
||||||
|
}
|
||||||
|
else // predecrement
|
||||||
|
{
|
||||||
|
sprintf(temp, "FP%d ", i);
|
||||||
|
}
|
||||||
|
strcat(g_dasm_str, temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 0x7: // FPU to memory, list
|
||||||
|
{
|
||||||
|
char temp[32];
|
||||||
|
|
||||||
|
if ((w2>>11) & 1) // dynamic register list
|
||||||
|
{
|
||||||
|
sprintf(g_dasm_str, "fmovem.x D%d, %s", (w2>>4)&7, get_ea_mode_str_32(g_cpu_ir));
|
||||||
|
}
|
||||||
|
else // static register list
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf(g_dasm_str, "fmovem.x ");
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (w2 & (1<<i))
|
||||||
|
{
|
||||||
|
if ((w2>>12) & 1) // postincrement or control
|
||||||
|
{
|
||||||
|
sprintf(temp, "FP%d ", 7-i);
|
||||||
|
}
|
||||||
|
else // predecrement
|
||||||
|
{
|
||||||
|
sprintf(temp, "FP%d ", i);
|
||||||
|
}
|
||||||
|
strcat(g_dasm_str, temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(g_dasm_str, ", ");
|
||||||
|
strcat(g_dasm_str, get_ea_mode_str_32(g_cpu_ir));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user