mirror of
https://github.com/holub/mame
synced 2025-05-14 09:58:14 +03:00
arcompact: execute first few MOVs (nw)
This commit is contained in:
parent
dc9654dd94
commit
345997fc5d
@ -18,7 +18,7 @@
|
||||
|
||||
|
||||
#define ARCOMPACT_HANDLER04_P11_TYPE(name) \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p11(OPS_16) \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p11(OPS_32) \
|
||||
{ \
|
||||
int M = (op & 0x00000020) >> 5; \
|
||||
\
|
||||
@ -32,7 +32,7 @@ ARCOMPACT_RETTYPE arcompact_handle##name##_p11(OPS_16) \
|
||||
}; \
|
||||
|
||||
#define ARCOMPACT_HANDLER04_TYPE(name) \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name(OPS_16) \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name(OPS_32) \
|
||||
{ \
|
||||
int p = (op & 0x00c00000) >> 22; \
|
||||
\
|
||||
@ -49,11 +49,11 @@ ARCOMPACT_RETTYPE arcompact_handle##name(OPS_16) \
|
||||
|
||||
|
||||
#define ARCOMPACT_HANDLER04_TYPE_PM(name) \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p00(OPS_16); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p01(OPS_16); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p10(OPS_16); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p11_m0(OPS_16); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p11_m1(OPS_16); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p00(OPS_32); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p01(OPS_32); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p10(OPS_32); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p11_m0(OPS_32); \
|
||||
ARCOMPACT_RETTYPE arcompact_handle##name##_p11_m1(OPS_32); \
|
||||
ARCOMPACT_HANDLER04_P11_TYPE(name); \
|
||||
ARCOMPACT_HANDLER04_TYPE(name); \
|
||||
|
||||
@ -156,7 +156,7 @@ protected:
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_07(OPS_32);
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_08(OPS_32);
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_09(OPS_32);
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_0a(OPS_32);
|
||||
// ARCOMPACT_RETTYPE arcompact_handle04_0a(OPS_32);
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_0b(OPS_32);
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_0c(OPS_32);
|
||||
ARCOMPACT_RETTYPE arcompact_handle04_0d(OPS_32);
|
||||
@ -769,6 +769,7 @@ protected:
|
||||
|
||||
|
||||
ARCOMPACT_HANDLER04_TYPE_PM(04_20);
|
||||
ARCOMPACT_HANDLER04_TYPE_PM(04_0a);
|
||||
|
||||
|
||||
private:
|
||||
|
@ -337,12 +337,12 @@ const char *regnames[0x40] =
|
||||
/* 17 */ "r23",
|
||||
/* 18 */ "r24",
|
||||
/* 19 */ "r25",
|
||||
/* 1a */ "r26(GP)",
|
||||
/* 1b */ "r27(FP)",
|
||||
/* 1c */ "r28(SP)",
|
||||
/* 1d */ "r29(ILINK1)",
|
||||
/* 1e */ "r30(ILINK2)",
|
||||
/* 1f */ "r31(BLINK)",
|
||||
/* 1a */ "r26_GP",
|
||||
/* 1b */ "r27_FP",
|
||||
/* 1c */ "r28_SP",
|
||||
/* 1d */ "r29_ILINK1",
|
||||
/* 1e */ "r30_ILINK2",
|
||||
/* 1f */ "r31_BLINK",
|
||||
|
||||
/* 20 */ "r32(ext)",
|
||||
/* 21 */ "r33(ext)",
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "arcompact.h"
|
||||
#include "arcompact_common.h"
|
||||
|
||||
#define ARCOMPACT_LOGGING 0
|
||||
#define ARCOMPACT_LOGGING 1
|
||||
|
||||
#define arcompact_fatal if (ARCOMPACT_LOGGING) fatalerror
|
||||
#define arcompact_log if (ARCOMPACT_LOGGING) fatalerror
|
||||
@ -1392,10 +1392,102 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_09(OPS_32)
|
||||
}
|
||||
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p00(OPS_32)
|
||||
{
|
||||
// p00 formats not listed in appendix?
|
||||
|
||||
int size = 4;
|
||||
UINT32 limm = 0;
|
||||
int got_limm = 0;
|
||||
|
||||
COMMON32_GET_breg
|
||||
COMMON32_GET_creg
|
||||
COMMON32_GET_F
|
||||
|
||||
if (creg == LIMM_REG)
|
||||
{
|
||||
// opcode iiii iBBB ppII IIII FBBB CCCC CC-- ----
|
||||
// MOV b <- limm 0010 0RRR 0000 1010 0RRR 1111 10RR RRRR [LIMM] (creg = LIMM)
|
||||
// MOV.F b <- limm 0010 0RRR 0000 1010 1RRR 1111 10RR RRRR [LIMM] (creg = LIMM)
|
||||
|
||||
if (!got_limm)
|
||||
{
|
||||
GET_LIMM_32;
|
||||
size = 8;
|
||||
}
|
||||
|
||||
m_regs[breg] = limm;
|
||||
|
||||
if (F)
|
||||
{ // currently not supported
|
||||
arcompact_fatal("unimplemented MOV.F %08x", op);
|
||||
}
|
||||
|
||||
return m_pc + (size>>0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// opcode iiii iBBB ppII IIII FBBB CCCC CC-- ----
|
||||
// MOV b <- c 0010 0RRR 0000 1010 0RRR cccc ccRR RRRR
|
||||
// MOV.F b <- c 0010 0RRR 0000 1010 1RRR cccc ccRR RRRR
|
||||
|
||||
arcompact_fatal("unimplemented MOV b <- c %08x", op);
|
||||
}
|
||||
|
||||
return m_pc + (size>>0);
|
||||
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p01(OPS_32)
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- uuuu uu-- ----
|
||||
// MOV b <- u6 0010 0RRR 0100 1010 0RRR uuuu uuRR RRRR
|
||||
// MOV.F b <- u6 0010 0RRR 0100 1010 1RRR uuuu uuRR RRRR
|
||||
|
||||
int size = 4;
|
||||
|
||||
COMMON32_GET_breg
|
||||
COMMON32_GET_u6
|
||||
COMMON32_GET_F
|
||||
|
||||
m_regs[breg] = u;
|
||||
|
||||
if (F)
|
||||
{ // currently not supported
|
||||
arcompact_fatal("unimplemented MOV.F b <- u6 %08x", op);
|
||||
}
|
||||
|
||||
return m_pc + (size>>0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p10(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handle04_0a_p10\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p11_m0(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handle04_0a_p11_m0\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p11_m1(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handle04_0a_p11_m1\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a(OPS_32)
|
||||
{
|
||||
return arcompact_handle04_helper(PARAMS, opcodes_04[0x0a], /*"MOV"*/ 1,0);
|
||||
}
|
||||
#endif
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0b(OPS_32)
|
||||
{
|
||||
@ -1492,9 +1584,44 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1d(OPS_32)
|
||||
return arcompact_handle04_helper(PARAMS, opcodes_04[0x1d], /*"MPYU"*/ 0,0);
|
||||
} // *
|
||||
|
||||
/* handler template for c+p
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p00(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handleXX_xx_p00\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p01(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handleXX_xx_p01\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_16)
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p10(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handleXX_xx_p10\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p11_m0(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handleXX_xx_p11_m0\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p11_m1(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
arcompact_fatal("arcompact_handleXX_xx_p11_m1\n");
|
||||
return m_pc + (size >> 0);
|
||||
}
|
||||
*/
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
UINT32 limm = 0;
|
||||
@ -1504,6 +1631,9 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_16)
|
||||
|
||||
if (creg == LIMM_REG)
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- CCCC CC-- ----
|
||||
// J limm 0010 0RRR 0010 0000 0RRR 1111 10RR RRRR [LIMM] (creg = LIMM)
|
||||
|
||||
if (!got_limm)
|
||||
{
|
||||
GET_LIMM_32;
|
||||
@ -1514,28 +1644,37 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_16)
|
||||
}
|
||||
else
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- CCCC CC-- ----
|
||||
// J [c] 0010 0RRR 0010 0000 0RRR CCCC CCRR RRRR
|
||||
// J.F [ilink1] 0010 0RRR 0010 0000 1RRR 0111 01RR RRRR (creg = ILINK1, FLAG must be set)
|
||||
// J.F [ilink2] 0010 0RRR 0010 0000 1RRR 0111 10RR RRRR (creg = ILINE2, FLAG must be set)
|
||||
|
||||
arcompact_log("unimplemented J %08x", op);
|
||||
}
|
||||
|
||||
return m_pc + (size>>0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p01(OPS_16)
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p01(OPS_32)
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- uuuu uu-- ----
|
||||
// J u6 0010 0RRR 0110 0000 0RRR uuuu uuRR RRRR
|
||||
int size = 4;
|
||||
arcompact_log("unimplemented J %08x", op);
|
||||
return m_pc + (size>>0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p10(OPS_16)
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p10(OPS_32)
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- ssss ssSS SSSS
|
||||
// J s12 0010 0RRR 1010 0000 0RRR ssss ssSS SSSS
|
||||
int size = 4;
|
||||
arcompact_log("unimplemented J %08x", op);
|
||||
return m_pc + (size>>0);
|
||||
}
|
||||
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_16)
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_32)
|
||||
{
|
||||
int size = 4;
|
||||
// UINT32 limm = 0;
|
||||
@ -1545,6 +1684,8 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_16)
|
||||
|
||||
if (creg == LIMM_REG)
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- cccc ccmq qqqq
|
||||
// Jcc limm 0010 0RRR 1110 0000 0RRR 1111 100Q QQQQ [LIUMM]
|
||||
if (!got_limm)
|
||||
{
|
||||
//GET_LIMM_32;
|
||||
@ -1555,13 +1696,18 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_16)
|
||||
}
|
||||
else
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- cccc ccmq qqqq
|
||||
// Jcc [c] 0010 0RRR 1110 0000 0RRR CCCC CC0Q QQQQ
|
||||
// no conditional links to ILINK1, ILINK2?
|
||||
arcompact_log("unimplemented J %08x", op);
|
||||
}
|
||||
return m_pc + (size>>0);
|
||||
}
|
||||
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m1(OPS_16)
|
||||
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m1(OPS_32)
|
||||
{
|
||||
// opcode iiii i--- ppII IIII F--- uuuu uumq qqqq
|
||||
// Jcc u6 0010 0RRR 1110 0000 0RRR uuuu uu1Q QQQQ
|
||||
int size = 4;
|
||||
arcompact_log("unimplemented J %08x", op);
|
||||
return m_pc + (size>>0);
|
||||
|
@ -505,7 +505,7 @@ int arcompact_handle04_p01_helper_dasm(DASM_OPS_32, const char* optext, int igno
|
||||
if (breg) output += sprintf(output, "reserved(%s), ", regnames[breg]);
|
||||
}
|
||||
|
||||
output += sprintf(output, "U(%02x) ", u);
|
||||
output += sprintf(output, " 0x%02x ", u);
|
||||
if (ignore_dst == 0)
|
||||
{
|
||||
if (areg != LIMM_REG) output += sprintf(output, "DST(%s)", regnames[areg]);
|
||||
|
Loading…
Reference in New Issue
Block a user