summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2026-04-20 23:34:03 +0200
committer hap <happppp@users.noreply.github.com>2026-04-20 23:34:22 +0200
commitaff0d4dcce43bd998915fa18ce785295ffb8dafd (patch)
tree993af42da6dcb96cf59ffab1de3ee462e82f565d
parentbf86a29b0f4fbb0df68dcc2a18796e4b8fc9a00e (diff)
namcos21_c67: add note about dsp clock
-rw-r--r--src/mame/namco/namcos21_c67.cpp6
-rw-r--r--src/mame/namco/namcos21_dsp_c67.cpp40
-rw-r--r--src/mame/namco/namcos21_dsp_c67.h4
3 files changed, 29 insertions, 21 deletions
diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp
index 6803a3bf1c7..05ce441e257 100644
--- a/src/mame/namco/namcos21_c67.cpp
+++ b/src/mame/namco/namcos21_c67.cpp
@@ -4,8 +4,10 @@
TODO (2026 update):
- lamp/vibration outputs, from MCU? (particularly starblad);
-- verify DSP clocks (probably 40MHz)
-- verify video timing, pixel clock is from 38.76922?
+- verify DSP clocks, they should be 40MHz, currently underclocked on purpose on MAME, otherwise polygons
+ may disappear on some frames (try playing starblad until after the asteroids), tightening quantum by
+ a factor of 40/24 does not fix it;
+- verify video timing, pixel clock is from 38.76922?;
- verify audiocpu irq frequency;
- is bgpen hardcoded or set somewhere? it doesn't look completely right in cybsled (see radar popup),
but it's correct in solvalou and aircomb;
diff --git a/src/mame/namco/namcos21_dsp_c67.cpp b/src/mame/namco/namcos21_dsp_c67.cpp
index f00b57d0023..784af4bd07f 100644
--- a/src/mame/namco/namcos21_dsp_c67.cpp
+++ b/src/mame/namco/namcos21_dsp_c67.cpp
@@ -129,28 +129,34 @@ void namcos21_dsp_c67_device::reset_kickstart()
void namcos21_dsp_c67_device::device_add_mconfig(machine_config &config)
{
- namco_c67_device& dspmaster(NAMCO_C67(config, m_c67master, 24000000)); /* 24 MHz? overclocked */
- dspmaster.set_addrmap(AS_PROGRAM, &namcos21_dsp_c67_device::master_dsp_program);
- dspmaster.set_addrmap(AS_DATA, &namcos21_dsp_c67_device::master_dsp_data);
- dspmaster.set_addrmap(AS_IO, &namcos21_dsp_c67_device::master_dsp_io);
- dspmaster.xf_out_cb().set(FUNC(namcos21_dsp_c67_device::dsp_xf_w));
+ NAMCO_C67(config, m_c67master, 40_MHz_XTAL);
+ m_c67master->set_addrmap(AS_PROGRAM, &namcos21_dsp_c67_device::master_dsp_program);
+ m_c67master->set_addrmap(AS_DATA, &namcos21_dsp_c67_device::master_dsp_data);
+ m_c67master->set_addrmap(AS_IO, &namcos21_dsp_c67_device::master_dsp_io);
+ m_c67master->xf_out_cb().set(FUNC(namcos21_dsp_c67_device::dsp_xf_w));
for (int i = 0; i < 4; i++)
{
- namco_c67_device& dspslave(NAMCO_C67(config, m_c67slave[i], 24000000)); /* 24 MHz? overclocked */
- dspslave.set_addrmap(AS_PROGRAM, &namcos21_dsp_c67_device::slave_dsp_program);
- dspslave.set_addrmap(AS_DATA, &namcos21_dsp_c67_device::slave_dsp_data);
- dspslave.set_addrmap(AS_IO, &namcos21_dsp_c67_device::slave_dsp_io);
- dspslave.hold_in_cb().set_constant(0);
- dspslave.hold_ack_out_cb().set_nop();
- dspslave.xf_out_cb().set(FUNC(namcos21_dsp_c67_device::slave_XF_output_w));
-
- // the emulation currently only uses one slave DSP clocked at 4x the normal rate instead of the master splitting the workload across the 4 slaves
- if (i!=0)
- dspslave.set_disable();
+ NAMCO_C67(config, m_c67slave[i], 40_MHz_XTAL);
+ m_c67slave[i]->set_addrmap(AS_PROGRAM, &namcos21_dsp_c67_device::slave_dsp_program);
+ m_c67slave[i]->set_addrmap(AS_DATA, &namcos21_dsp_c67_device::slave_dsp_data);
+ m_c67slave[i]->set_addrmap(AS_IO, &namcos21_dsp_c67_device::slave_dsp_io);
+ m_c67slave[i]->hold_in_cb().set_constant(0);
+ m_c67slave[i]->hold_ack_out_cb().set_nop();
+ m_c67slave[i]->xf_out_cb().set(FUNC(namcos21_dsp_c67_device::slave_XF_output_w));
+
+ // instead of the master splitting the workload across the 4 slaves, the emulation
+ // currently only uses one slave DSP clocked at 4x the normal rate
+ if (i != 0)
+ m_c67slave[i]->set_disable();
else
- dspslave.set_clock(24000000*4);
+ 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);
}
diff --git a/src/mame/namco/namcos21_dsp_c67.h b/src/mame/namco/namcos21_dsp_c67.h
index 18a294f5d88..9c2118c840f 100644
--- a/src/mame/namco/namcos21_dsp_c67.h
+++ b/src/mame/namco/namcos21_dsp_c67.h
@@ -76,8 +76,8 @@ private:
};
required_device<namcos21_3d_device> m_renderer;
- required_device<cpu_device> m_c67master;
- required_device_array<cpu_device,4> m_c67slave;
+ required_device<namco_c67_device> m_c67master;
+ required_device_array<namco_c67_device, 4> m_c67slave;
required_region_ptr<int32_t> m_ptrom24;
std::unique_ptr<uint16_t []> m_dspram16;