summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/namco/namcos21_dsp_c67.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/namco/namcos21_dsp_c67.cpp')
-rw-r--r--src/mame/namco/namcos21_dsp_c67.cpp49
1 files changed, 23 insertions, 26 deletions
diff --git a/src/mame/namco/namcos21_dsp_c67.cpp b/src/mame/namco/namcos21_dsp_c67.cpp
index a9a21651ed7..8938c4572f5 100644
--- a/src/mame/namco/namcos21_dsp_c67.cpp
+++ b/src/mame/namco/namcos21_dsp_c67.cpp
@@ -45,6 +45,7 @@ void namcos21_dsp_c67_device::device_start()
m_mpDspState = std::make_unique<dsp_state>();
+ save_item(NAME(m_mpDspState->master_port_data));
save_item(NAME(m_mpDspState->masterSourceAddr));
save_item(NAME(m_mpDspState->slaveInputBuffer));
save_item(NAME(m_mpDspState->slaveBytesAvailable));
@@ -105,7 +106,6 @@ void namcos21_dsp_c67_device::reset_dsps(int state)
void namcos21_dsp_c67_device::reset_kickstart()
{
- //printf("dspkick=0x%x\n", data);
if (!m_need_kickstart)
return;
m_need_kickstart = false;
@@ -138,11 +138,6 @@ void namcos21_dsp_c67_device::device_add_mconfig(machine_config &config)
else
m_c67slave[i]->set_clock(m_c67slave[i]->clock() * 4);
}
-
- // underclocked for now (see TODO note in namcos21_c67 driver)
- m_c67master->set_clock_scale(0.6);
- for (int i = 0; i < 4; i++)
- m_c67slave[i]->set_clock_scale(0.6);
}
@@ -460,14 +455,14 @@ u16 namcos21_dsp_c67_device::dsp_port8_r()
return 1;
}
-
void namcos21_dsp_c67_device::dsp_port8_w(u16 data)
{
if (ENABLE_LOGGING) logerror("port8_w(%d)\n", data);
- if (data)
- {
+
+ if (~m_mpDspState->master_port_data[8] & data & 1)
m_mpDspState->masterFinished = 1;
- }
+
+ m_mpDspState->master_port_data[8] = data;
}
u16 namcos21_dsp_c67_device::dsp_port9_r()
@@ -500,28 +495,30 @@ u16 namcos21_dsp_c67_device::dsp_portb_r()
void namcos21_dsp_c67_device::dsp_portb_w(u16 data)
{
- if (data == 0)
+ // only 0->1 transition triggers
+ if (~m_mpDspState->master_port_data[0xb] & data & 1)
{
- // only 0->1 transition triggers
- return;
- }
- if (m_mpDspState->masterDirectDrawSize == 13)
- {
- int color = m_mpDspState->masterDirectDrawBuffer[0];
- if (color & 0x8000)
+ if (m_mpDspState->masterDirectDrawSize == 13)
{
- m_renderer->draw_direct_quad(&m_mpDspState->masterDirectDrawBuffer[1], color);
+ int color = m_mpDspState->masterDirectDrawBuffer[0];
+ if (color & 0x8000)
+ {
+ m_renderer->draw_direct_quad(&m_mpDspState->masterDirectDrawBuffer[1], color);
+ }
+ else
+ {
+ logerror("indirection used w/ direct draw?\n");
+ }
}
- else
+ else if (m_mpDspState->masterDirectDrawSize)
{
- logerror("indirection used w/ direct draw?\n");
+ logerror("unexpected masterDirectDrawSize=%d!\n",m_mpDspState->masterDirectDrawSize);
}
+
+ m_mpDspState->masterDirectDrawSize = 0;
}
- else if (m_mpDspState->masterDirectDrawSize)
- {
- logerror("unexpected masterDirectDrawSize=%d!\n",m_mpDspState->masterDirectDrawSize);
- }
- m_mpDspState->masterDirectDrawSize = 0;
+
+ m_mpDspState->master_port_data[0xb] = data;
}
void namcos21_dsp_c67_device::dsp_portc_w(u16 data)