From 3634fed78a591e2d4f4d8022b78e462869dfebe3 Mon Sep 17 00:00:00 2001 From: Ian Karlsson Date: Fri, 29 May 2015 15:53:21 +0200 Subject: [PATCH 1/2] Add configurable clock dividers for Namco C352 --- src/emu/sound/c352.c | 29 +++++++++++++++++++++++++++-- src/emu/sound/c352.h | 25 ++++++++++++++++++++++--- src/mame/drivers/namcofl.c | 2 +- src/mame/drivers/namconb1.c | 4 ++-- src/mame/drivers/namcond1.c | 2 +- src/mame/drivers/namcos11.c | 2 +- src/mame/drivers/namcos12.c | 2 +- src/mame/drivers/namcos22.c | 4 ++-- src/mame/drivers/namcos23.c | 8 ++++---- 9 files changed, 61 insertions(+), 17 deletions(-) diff --git a/src/emu/sound/c352.c b/src/emu/sound/c352.c index aab4fdbb3d3..dee11c5c5f8 100644 --- a/src/emu/sound/c352.c +++ b/src/emu/sound/c352.c @@ -45,6 +45,17 @@ c352_device::c352_device(const machine_config &mconfig, const char *tag, device_ { } +//------------------------------------------------- +// static_set_dividder - configuration helper to +// set the divider setting +//------------------------------------------------- + +void c352_device::static_set_divider(device_t &device, int setting) +{ + c352_device &c352 = downcast(device); + c352.m_divider = setting; +} + //------------------------------------------------- // memory_space_config - return a description of // any address spaces owned by this device @@ -457,7 +468,7 @@ void c352_device::write_reg16(unsigned long address, unsigned short val) void c352_device::device_start() { - int i; + int i, divider; double x_max = 32752.0; double y_max = 127.0; double u = 10.0; @@ -465,7 +476,21 @@ void c352_device::device_start() // find our direct access m_direct = &space().direct(); - m_sample_rate_base = clock() / 288; + switch(m_divider) + { + case C352_DIVIDER_228: + divider=228; + break; + case C352_DIVIDER_288: + default: + divider=288; + break; + case C352_DIVIDER_348: + divider=348; + break; + } + + m_sample_rate_base = clock() / divider; m_stream = machine().sound().stream_alloc(*this, 0, 4, m_sample_rate_base); diff --git a/src/emu/sound/c352.h b/src/emu/sound/c352.h index e6998f81b9f..e663f5a4748 100644 --- a/src/emu/sound/c352.h +++ b/src/emu/sound/c352.h @@ -5,13 +5,28 @@ #ifndef __C352_H__ #define __C352_H__ +//************************************************************************** +// CONSTANTS +//************************************************************************** + +enum +{ + C352_DIVIDER_228 = 0, + C352_DIVIDER_288 = 1, + C352_DIVIDER_348 = 2 +}; + //************************************************************************** // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_C352_ADD(_tag, _clock) \ - MCFG_DEVICE_ADD(_tag, C352, _clock) +#define MCFG_C352_ADD(_tag, _clock, _setting) \ + MCFG_DEVICE_ADD(_tag, C352, _clock) \ + MCFG_C352_DIVIDER(_setting) +#define MCFG_C352_DIVIDER(_setting) \ + c352_device::static_set_divider(*device, _setting); + //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -26,6 +41,9 @@ public: // construction/destruction c352_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + // inline configuration helpers + static void static_set_divider(device_t &device, int setting); + DECLARE_READ16_MEMBER(read); DECLARE_WRITE16_MEMBER(write); @@ -89,7 +107,8 @@ private: c352_ch_t m_c352_ch[32]; int m_sample_rate_base; - + int m_divider; + long m_channel_l[2048*2]; long m_channel_r[2048*2]; long m_channel_l2[2048*2]; diff --git a/src/mame/drivers/namcofl.c b/src/mame/drivers/namcofl.c index b2bf41f463a..7b0d437d82e 100644 --- a/src/mame/drivers/namcofl.c +++ b/src/mame/drivers/namcofl.c @@ -610,7 +610,7 @@ static MACHINE_CONFIG_START( namcofl, namcofl_state ) MCFG_VIDEO_START_OVERRIDE(namcofl_state,namcofl) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", 48384000/2) + MCFG_C352_ADD("c352", 48384000/2, C352_DIVIDER_288) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namconb1.c b/src/mame/drivers/namconb1.c index 1d4eaad65ed..0994ae17686 100644 --- a/src/mame/drivers/namconb1.c +++ b/src/mame/drivers/namconb1.c @@ -1126,7 +1126,7 @@ static MACHINE_CONFIG_START( namconb1, namconb1_state ) MCFG_VIDEO_START_OVERRIDE(namconb1_state,namconb1) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", MASTER_CLOCK/2) + MCFG_C352_ADD("c352", MASTER_CLOCK/2, C352_DIVIDER_288) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) @@ -1163,7 +1163,7 @@ static MACHINE_CONFIG_START( namconb2, namconb1_state ) MCFG_VIDEO_START_OVERRIDE(namconb1_state,namconb2) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", MASTER_CLOCK/2) + MCFG_C352_ADD("c352", MASTER_CLOCK/2, C352_DIVIDER_288) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namcond1.c b/src/mame/drivers/namcond1.c index 6749c6b317f..bef6cecaaa7 100644 --- a/src/mame/drivers/namcond1.c +++ b/src/mame/drivers/namcond1.c @@ -319,7 +319,7 @@ static MACHINE_CONFIG_START( namcond1, namcond1_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", XTAL_49_152MHz/2) + MCFG_C352_ADD("c352", XTAL_49_152MHz/2, C352_DIVIDER_288) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namcos11.c b/src/mame/drivers/namcos11.c index 37c30be6df0..e6d53c00e6c 100644 --- a/src/mame/drivers/namcos11.c +++ b/src/mame/drivers/namcos11.c @@ -571,7 +571,7 @@ static MACHINE_CONFIG_START( coh110, namcos11_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", 16934400*1.5) // measured at 20MHz, but that's too lowpitched + MCFG_C352_ADD("c352", 20013200, C352_DIVIDER_228) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namcos12.c b/src/mame/drivers/namcos12.c index 627ee9b8a3d..35f10bf2be2 100644 --- a/src/mame/drivers/namcos12.c +++ b/src/mame/drivers/namcos12.c @@ -1591,7 +1591,7 @@ static MACHINE_CONFIG_START( coh700, namcos12_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", 16737350*1.5) // measured at 29.168MHz, but that's too highpitched + MCFG_C352_ADD("c352", 29168000, C352_DIVIDER_348) // measured at 29.168MHz, but that's too highpitched MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namcos22.c b/src/mame/drivers/namcos22.c index b15a3941e83..af329845cdb 100644 --- a/src/mame/drivers/namcos22.c +++ b/src/mame/drivers/namcos22.c @@ -3781,7 +3781,7 @@ static MACHINE_CONFIG_START( namcos22, namcos22_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2) + MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2, C352_DIVIDER_288) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) @@ -3830,7 +3830,7 @@ static MACHINE_CONFIG_START( namcos22s, namcos22_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2) + MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2, C352_DIVIDER_288) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namcos23.c b/src/mame/drivers/namcos23.c index e9e72caa243..68606c14753 100644 --- a/src/mame/drivers/namcos23.c +++ b/src/mame/drivers/namcos23.c @@ -1247,7 +1247,7 @@ Notes: #define JVSCLOCK (XTAL_14_7456MHz) #define H8CLOCK (16737350) /* from 2061 */ #define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */ -#define C352CLOCK (16737350*1.5) /* measured at 25.992MHz from 2061 pin 9 (but that sounds too highpitched) */ +#define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 (using a divider of 348) */ #define VSYNC1 (59.8824) #define VSYNC2 (59.915) #define HSYNC (16666150) @@ -3320,7 +3320,7 @@ static MACHINE_CONFIG_START( gorgon, namcos23_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", C352CLOCK) + MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_348) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) @@ -3389,7 +3389,7 @@ static MACHINE_CONFIG_START( s23, namcos23_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", C352CLOCK) + MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_348) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) @@ -3469,7 +3469,7 @@ static MACHINE_CONFIG_START( ss23, namcos23_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", C352CLOCK) + MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_348) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) From 595c60e1b8d0f2336cf5b2be7e87453e222bf39c Mon Sep 17 00:00:00 2001 From: Ian Karlsson Date: Fri, 29 May 2015 16:13:46 +0200 Subject: [PATCH 2/2] Adjust C352 clock divider for System12/23 --- src/emu/sound/c352.c | 4 ++-- src/emu/sound/c352.h | 2 +- src/mame/drivers/namcos12.c | 2 +- src/mame/drivers/namcos23.c | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/emu/sound/c352.c b/src/emu/sound/c352.c index dee11c5c5f8..c164bc53413 100644 --- a/src/emu/sound/c352.c +++ b/src/emu/sound/c352.c @@ -485,8 +485,8 @@ void c352_device::device_start() default: divider=288; break; - case C352_DIVIDER_348: - divider=348; + case C352_DIVIDER_332: + divider=332; break; } diff --git a/src/emu/sound/c352.h b/src/emu/sound/c352.h index e663f5a4748..0717fd133df 100644 --- a/src/emu/sound/c352.h +++ b/src/emu/sound/c352.h @@ -13,7 +13,7 @@ enum { C352_DIVIDER_228 = 0, C352_DIVIDER_288 = 1, - C352_DIVIDER_348 = 2 + C352_DIVIDER_332 = 2 }; //************************************************************************** diff --git a/src/mame/drivers/namcos12.c b/src/mame/drivers/namcos12.c index 35f10bf2be2..d89c8a0c31c 100644 --- a/src/mame/drivers/namcos12.c +++ b/src/mame/drivers/namcos12.c @@ -1591,7 +1591,7 @@ static MACHINE_CONFIG_START( coh700, namcos12_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", 29168000, C352_DIVIDER_348) // measured at 29.168MHz, but that's too highpitched + MCFG_C352_ADD("c352", 29168000, C352_DIVIDER_332) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) diff --git a/src/mame/drivers/namcos23.c b/src/mame/drivers/namcos23.c index 68606c14753..fd92dc91d8f 100644 --- a/src/mame/drivers/namcos23.c +++ b/src/mame/drivers/namcos23.c @@ -1247,7 +1247,7 @@ Notes: #define JVSCLOCK (XTAL_14_7456MHz) #define H8CLOCK (16737350) /* from 2061 */ #define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */ -#define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 (using a divider of 348) */ +#define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 (System 12 uses a divider of 332) */ #define VSYNC1 (59.8824) #define VSYNC2 (59.915) #define HSYNC (16666150) @@ -3320,7 +3320,7 @@ static MACHINE_CONFIG_START( gorgon, namcos23_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_348) + MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_332) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) @@ -3389,7 +3389,7 @@ static MACHINE_CONFIG_START( s23, namcos23_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_348) + MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_332) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) @@ -3469,7 +3469,7 @@ static MACHINE_CONFIG_START( ss23, namcos23_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_348) + MCFG_C352_ADD("c352", C352CLOCK, C352_DIVIDER_332) MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)