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
|
ldaj_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = m_j; // TODO: flags
|
A = m_j;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
ldak_imp
|
ldak_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = m_k; // TODO: flags
|
A = m_k;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
ldal_imp
|
ldal_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = m_l; // TODO: flags
|
A = m_l;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
ldam_imp
|
ldam_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = m_m; // TODO: flags
|
A = m_m;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
cmpj_imp
|
cmpj_imp
|
||||||
@ -239,7 +243,8 @@ spa0_imp
|
|||||||
|
|
||||||
lpa0_imp
|
lpa0_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = (m_pa & 0x0000ff) >> 0; // TODO: Flags?
|
A = (m_pa & 0x0000ff) >> 0;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
spa1_imp
|
spa1_imp
|
||||||
@ -249,7 +254,8 @@ spa1_imp
|
|||||||
|
|
||||||
lpa1_imp
|
lpa1_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = (m_pa & 0x00ff00) >> 8; // TODO: Flags?
|
A = (m_pa & 0x00ff00) >> 8;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
spa2_imp
|
spa2_imp
|
||||||
@ -259,37 +265,41 @@ spa2_imp
|
|||||||
|
|
||||||
lpa2_imp
|
lpa2_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = (m_pa & 0xff0000) >> 16; // TODO: Flags?
|
A = (m_pa & 0xff0000) >> 16;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
spb0_imp
|
spb0_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
m_pb = (m_pb & 0xffff00) | A; // TODO: Flags?
|
m_pb = (m_pb & 0xffff00) | A;
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
lpb0_imp
|
lpb0_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = (m_pb & 0x0000ff) >> 0; // TODO: Flags?
|
A = (m_pb & 0x0000ff) >> 0;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
spb1_imp
|
spb1_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
m_pb = (m_pb & 0xff00ff) | (A << 8); // TODO: Flags?
|
m_pb = (m_pb & 0xff00ff) | (A << 8);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
lpb1_imp
|
lpb1_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = (m_pb & 0x00ff00) >> 8; // TODO: Flags?
|
A = (m_pb & 0x00ff00) >> 8;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
spb2_imp
|
spb2_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
m_pb = (m_pb & 0x00ffff) | (A << 16); // TODO: Flags?
|
m_pb = (m_pb & 0x00ffff) | (A << 16);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
lpb2_imp
|
lpb2_imp
|
||||||
read_pc_noinc();
|
read_pc_noinc();
|
||||||
A = (m_pb & 0xff0000) >> 16; // TODO: Flags?
|
A = (m_pb & 0xff0000) >> 16;
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
incpa_imp
|
incpa_imp
|
||||||
@ -341,6 +351,7 @@ stapa_imp
|
|||||||
|
|
||||||
ldapa_imp
|
ldapa_imp
|
||||||
A = read_full_data_sp(m_pa);
|
A = read_full_data_sp(m_pa);
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
cmppa_imp
|
cmppa_imp
|
||||||
@ -377,6 +388,7 @@ stapb_imp
|
|||||||
|
|
||||||
ldapb_imp
|
ldapb_imp
|
||||||
A = read_full_data_sp(m_pb);
|
A = read_full_data_sp(m_pb);
|
||||||
|
set_nz(A);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
cmppb_imp
|
cmppb_imp
|
||||||
|
@ -757,33 +757,58 @@ WRITE8_MEMBER(xavix_state::mult_param_w)
|
|||||||
if (offset == 2)
|
if (offset == 2)
|
||||||
{
|
{
|
||||||
// assume 0 is upper bits, might be 'mode' instead, check
|
// 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;
|
int signmode = (m_multparams[0] & 0x3f);
|
||||||
if (signparam2) param2 = -param2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint16_t result = 0;
|
uint16_t result = 0;
|
||||||
|
|
||||||
// rad_madf uses this mode (add to previous result)
|
// rad_madf uses this mode (add to previous result)
|
||||||
if ((m_multparams[0] & 0xc0) == 0xc0)
|
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];
|
uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0];
|
||||||
result = oldresult + result;
|
result = oldresult + result;
|
||||||
}
|
}
|
||||||
else if ((m_multparams[0] & 0xc0) == 0x00)
|
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;
|
result = param1 * param2;
|
||||||
}
|
}
|
||||||
else
|
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;
|
m_multresults[1] = (result >> 8) & 0xff;
|
||||||
|
Loading…
Reference in New Issue
Block a user