diff options
| author | 2026-04-20 23:34:03 +0200 | |
|---|---|---|
| committer | 2026-04-20 23:34:22 +0200 | |
| commit | aff0d4dcce43bd998915fa18ce785295ffb8dafd (patch) | |
| tree | 993af42da6dcb96cf59ffab1de3ee462e82f565d | |
| parent | bf86a29b0f4fbb0df68dcc2a18796e4b8fc9a00e (diff) | |
namcos21_c67: add note about dsp clock
| -rw-r--r-- | src/mame/namco/namcos21_c67.cpp | 6 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_dsp_c67.cpp | 40 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_dsp_c67.h | 4 |
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; |
