mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
Xavix - CPU flag fixes (improves ttv_mx road) (#4303)
* Xavix - CPU flag fixes (improves ttv_mx road) * fix road properly (nw)
This commit is contained in:
parent
74859c84e1
commit
0c74c62a5e
@ -174,22 +174,26 @@ stam_imp
|
||||
|
||||
ldaj_imp
|
||||
read_pc_noinc();
|
||||
A = m_j; // TODO: flags
|
||||
A = m_j;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
ldak_imp
|
||||
read_pc_noinc();
|
||||
A = m_k; // TODO: flags
|
||||
A = m_k;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
ldal_imp
|
||||
read_pc_noinc();
|
||||
A = m_l; // TODO: flags
|
||||
A = m_l;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
ldam_imp
|
||||
read_pc_noinc();
|
||||
A = m_m; // TODO: flags
|
||||
A = m_m;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
cmpj_imp
|
||||
@ -239,7 +243,8 @@ spa0_imp
|
||||
|
||||
lpa0_imp
|
||||
read_pc_noinc();
|
||||
A = (m_pa & 0x0000ff) >> 0; // TODO: Flags?
|
||||
A = (m_pa & 0x0000ff) >> 0;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
spa1_imp
|
||||
@ -249,7 +254,8 @@ spa1_imp
|
||||
|
||||
lpa1_imp
|
||||
read_pc_noinc();
|
||||
A = (m_pa & 0x00ff00) >> 8; // TODO: Flags?
|
||||
A = (m_pa & 0x00ff00) >> 8;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
spa2_imp
|
||||
@ -259,37 +265,41 @@ spa2_imp
|
||||
|
||||
lpa2_imp
|
||||
read_pc_noinc();
|
||||
A = (m_pa & 0xff0000) >> 16; // TODO: Flags?
|
||||
A = (m_pa & 0xff0000) >> 16;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
spb0_imp
|
||||
read_pc_noinc();
|
||||
m_pb = (m_pb & 0xffff00) | A; // TODO: Flags?
|
||||
m_pb = (m_pb & 0xffff00) | A;
|
||||
prefetch();
|
||||
|
||||
lpb0_imp
|
||||
read_pc_noinc();
|
||||
A = (m_pb & 0x0000ff) >> 0; // TODO: Flags?
|
||||
A = (m_pb & 0x0000ff) >> 0;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
spb1_imp
|
||||
read_pc_noinc();
|
||||
m_pb = (m_pb & 0xff00ff) | (A << 8); // TODO: Flags?
|
||||
m_pb = (m_pb & 0xff00ff) | (A << 8);
|
||||
prefetch();
|
||||
|
||||
lpb1_imp
|
||||
read_pc_noinc();
|
||||
A = (m_pb & 0x00ff00) >> 8; // TODO: Flags?
|
||||
A = (m_pb & 0x00ff00) >> 8;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
spb2_imp
|
||||
read_pc_noinc();
|
||||
m_pb = (m_pb & 0x00ffff) | (A << 16); // TODO: Flags?
|
||||
m_pb = (m_pb & 0x00ffff) | (A << 16);
|
||||
prefetch();
|
||||
|
||||
lpb2_imp
|
||||
read_pc_noinc();
|
||||
A = (m_pb & 0xff0000) >> 16; // TODO: Flags?
|
||||
A = (m_pb & 0xff0000) >> 16;
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
incpa_imp
|
||||
@ -341,6 +351,7 @@ stapa_imp
|
||||
|
||||
ldapa_imp
|
||||
A = read_full_data_sp(m_pa);
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
cmppa_imp
|
||||
@ -377,6 +388,7 @@ stapb_imp
|
||||
|
||||
ldapb_imp
|
||||
A = read_full_data_sp(m_pb);
|
||||
set_nz(A);
|
||||
prefetch();
|
||||
|
||||
cmppb_imp
|
||||
|
@ -757,33 +757,58 @@ WRITE8_MEMBER(xavix_state::mult_param_w)
|
||||
if (offset == 2)
|
||||
{
|
||||
// assume 0 is upper bits, might be 'mode' instead, check
|
||||
int param1 = m_multparams[1];
|
||||
int param2 = m_multparams[2];
|
||||
|
||||
#if 0
|
||||
int signparam1 = (m_multparams[0] & 0x02) >> 1;
|
||||
int signparam2 = (m_multparams[0] & 0x01) >> 0;
|
||||
|
||||
if (signparam1) param1 = -param1;
|
||||
if (signparam2) param2 = -param2;
|
||||
#endif
|
||||
int signmode = (m_multparams[0] & 0x3f);
|
||||
|
||||
uint16_t result = 0;
|
||||
|
||||
// rad_madf uses this mode (add to previous result)
|
||||
if ((m_multparams[0] & 0xc0) == 0xc0)
|
||||
{
|
||||
result = param1 * param2;
|
||||
if (signmode == 0x0)
|
||||
{
|
||||
uint8_t param1 = m_multparams[1];
|
||||
uint8_t param2 = m_multparams[2];
|
||||
result = param1 * param2;
|
||||
}
|
||||
else
|
||||
{
|
||||
popmessage("unknown signmode %02x", m_multparams[0] & 0x3f);
|
||||
}
|
||||
|
||||
uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0];
|
||||
result = oldresult + result;
|
||||
}
|
||||
else if ((m_multparams[0] & 0xc0) == 0x00)
|
||||
{
|
||||
int param1 = 0, param2 = 0;
|
||||
|
||||
if (signmode == 0x0)
|
||||
{
|
||||
param1 = (uint8_t)m_multparams[1];
|
||||
param2 = (uint8_t)m_multparams[2];
|
||||
}
|
||||
else if (signmode == 0x2)
|
||||
{
|
||||
param1 = (int8_t)m_multparams[1];
|
||||
param2 = (uint8_t)m_multparams[2];
|
||||
}
|
||||
else if (signmode == 0x1)
|
||||
{
|
||||
param1 = (uint8_t)m_multparams[1];
|
||||
param2 = (int8_t)m_multparams[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
popmessage("unknown signmode %02x", m_multparams[0] & 0x3f);
|
||||
}
|
||||
|
||||
result = param1 * param2;
|
||||
}
|
||||
else
|
||||
{
|
||||
popmessage("unknown multiplier mode %02n", m_multparams[0] & 0xc0);
|
||||
popmessage("unknown multiplier mode %02x", m_multparams[0] & 0xc0);
|
||||
}
|
||||
|
||||
m_multresults[1] = (result >> 8) & 0xff;
|
||||
|
Loading…
Reference in New Issue
Block a user