From 249d3842f3d81ea7d9d1bed3abb0ecb1fd7a5a15 Mon Sep 17 00:00:00 2001 From: mixxmaster Date: Mon, 29 Jun 2015 18:25:20 -0400 Subject: [PATCH 1/4] fixed SAA1099 to actually use clock (nw); corrected Game Blaster/SB1.0 clock to 7.159mhz --- src/emu/bus/isa/gblaster.c | 4 ++-- src/emu/bus/isa/sblaster.c | 4 ++-- src/emu/sound/saa1099.c | 48 +++++++++++++++++++++----------------- src/emu/sound/saa1099.h | 1 + 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/emu/bus/isa/gblaster.c b/src/emu/bus/isa/gblaster.c index 9966f2353dd..6ee9600cdb6 100644 --- a/src/emu/bus/isa/gblaster.c +++ b/src/emu/bus/isa/gblaster.c @@ -20,9 +20,9 @@ */ static MACHINE_CONFIG_FRAGMENT( game_blaster_config ) MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SAA1099_ADD("saa1099.1", 4772720) + MCFG_SAA1099_ADD("saa1099.1", 7159000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - MCFG_SAA1099_ADD("saa1099.2", 4772720) + MCFG_SAA1099_ADD("saa1099.2", 7159000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/emu/bus/isa/sblaster.c b/src/emu/bus/isa/sblaster.c index d04d5bf8bc1..9b02d91b5c4 100644 --- a/src/emu/bus/isa/sblaster.c +++ b/src/emu/bus/isa/sblaster.c @@ -66,10 +66,10 @@ static MACHINE_CONFIG_FRAGMENT( sblaster1_0_config ) MCFG_SOUND_ADD("ym3812", YM3812, ym3812_StdClock) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 3.00) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 3.00) - MCFG_SAA1099_ADD("saa1099.1", 4772720) + MCFG_SAA1099_ADD("saa1099.1", 7159000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) - MCFG_SAA1099_ADD("saa1099.2", 4772720) + MCFG_SAA1099_ADD("saa1099.2", 7159000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) diff --git a/src/emu/sound/saa1099.c b/src/emu/sound/saa1099.c index fc08f5dc58b..3e96e9b4163 100644 --- a/src/emu/sound/saa1099.c +++ b/src/emu/sound/saa1099.c @@ -63,6 +63,13 @@ 0x1c | ---- ---x | All channels enable (0 = off, 1 = on) 0x1c | ---- --x- | Synch & Reset generators + Version History: + ================ + ??-??-200? - First version of the driver submitted for DOSBOX under GPL license + ??-??-200? - Submitted to MAME + ??-??-201? - Driver relicensed to BSD 3 Clause (GPL+ compatible) + 06-27-2015 - Applied clock divisor fix from DOSBOX SVN, http://www.vogons.org/viewtopic.php?p=344227#p344227 + ***************************************************************************/ #include "emu.h" @@ -159,6 +166,7 @@ saa1099_device::saa1099_device(const machine_config &mconfig, const char *tag, d void saa1099_device::device_start() { /* copy global parameters */ + m_master_clock = clock(); m_sample_rate = clock() / 256; /* for each chip allocate one stream */ @@ -204,7 +212,6 @@ void saa1099_device::device_start() void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) { int j, ch; - /* if the channels are disabled we're done */ if (!m_all_ch_enable) { @@ -218,10 +225,10 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t * { switch (m_noise_params[ch]) { - case 0: m_noise[ch].freq = 31250.0 * 2; break; - case 1: m_noise[ch].freq = 15625.0 * 2; break; - case 2: m_noise[ch].freq = 7812.5 * 2; break; - case 3: m_noise[ch].freq = m_channels[ch * 3].freq; break; + case 0: m_noise[ch].freq = m_master_clock/256.0 * 2; break; + case 1: m_noise[ch].freq = m_master_clock/512.0 * 2; break; + case 2: m_noise[ch].freq = m_master_clock/1024.0 * 2; break; + case 3: m_noise[ch].freq = m_channels[ch * 3].freq; break; } } @@ -234,7 +241,7 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t * for (ch = 0; ch < 6; ch++) { if (m_channels[ch].freq == 0.0) - m_channels[ch].freq = (double)((2 * 15625) << m_channels[ch].octave) / + m_channels[ch].freq = (double)((2 * m_master_clock / 512) << m_channels[ch].octave) / (511.0 - (double)m_channels[ch].frequency); /* check the actual position in the square wave */ @@ -242,7 +249,7 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t * while (m_channels[ch].counter < 0) { /* calculate new frequency now after the half wave is updated */ - m_channels[ch].freq = (double)((2 * 15625) << m_channels[ch].octave) / + m_channels[ch].freq = (double)((2 * m_master_clock / 512) << m_channels[ch].octave) / (511.0 - (double)m_channels[ch].frequency); m_channels[ch].counter += m_sample_rate; @@ -255,26 +262,25 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t * envelope_w(1); } - /* if the noise is enabled */ - if (m_channels[ch].noise_enable) + // if the noise is enabled + if (saa->channels[ch].noise_enable) { - /* if the noise level is high (noise 0: chan 0-2, noise 1: chan 3-5) */ - if (m_noise[ch/3].level & 1) + // if the noise level is high (noise 0: chan 0-2, noise 1: chan 3-5) + if (saa->noise[ch/3].level & 1) { - /* subtract to avoid overflows, also use only half amplitude */ - output_l -= m_channels[ch].amplitude[ LEFT] * m_channels[ch].envelope[ LEFT] / 16 / 2; - output_r -= m_channels[ch].amplitude[RIGHT] * m_channels[ch].envelope[RIGHT] / 16 / 2; + // subtract to avoid overflows, also use only half amplitude + output_l -= saa->channels[ch].amplitude[ LEFT] * saa->channels[ch].envelope[ LEFT] / 16 / 2; + output_r -= saa->channels[ch].amplitude[RIGHT] * saa->channels[ch].envelope[RIGHT] / 16 / 2; } } - - /* if the square wave is enabled */ - if (m_channels[ch].freq_enable) + // if the square wave is enabled + if (saa->channels[ch].freq_enable) { - /* if the channel level is high */ - if (m_channels[ch].level & 1) + // if the channel level is high + if (saa->channels[ch].level & 1) { - output_l += m_channels[ch].amplitude[ LEFT] * m_channels[ch].envelope[ LEFT] / 16; - output_r += m_channels[ch].amplitude[RIGHT] * m_channels[ch].envelope[RIGHT] / 16; + output_l += saa->channels[ch].amplitude[ LEFT] * saa->channels[ch].envelope[ LEFT] / 16; + output_r += saa->channels[ch].amplitude[RIGHT] * saa->channels[ch].envelope[RIGHT] / 16; } } } diff --git a/src/emu/sound/saa1099.h b/src/emu/sound/saa1099.h index 7bf52630903..1909efa1c52 100644 --- a/src/emu/sound/saa1099.h +++ b/src/emu/sound/saa1099.h @@ -103,6 +103,7 @@ private: saa1099_channel m_channels[6]; /* channels */ saa1099_noise m_noise[2]; /* noise generators */ double m_sample_rate; + int m_master_clock; }; extern const device_type SAA1099; From d8c5cb2b5ec661782a62af89970ed75a2d442191 Mon Sep 17 00:00:00 2001 From: mixxmaster Date: Mon, 29 Jun 2015 18:36:04 -0400 Subject: [PATCH 2/4] corrected version history* --- src/emu/sound/saa1099.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emu/sound/saa1099.c b/src/emu/sound/saa1099.c index 3e96e9b4163..cf4d5108283 100644 --- a/src/emu/sound/saa1099.c +++ b/src/emu/sound/saa1099.c @@ -65,8 +65,8 @@ Version History: ================ - ??-??-200? - First version of the driver submitted for DOSBOX under GPL license - ??-??-200? - Submitted to MAME + ??-??-200? - First version of the driver submitted for MESS (GPL/MESS license) + ??-??-200? - Submitted to DOSBOX for Creative Music System/Game Blaster emulation ??-??-201? - Driver relicensed to BSD 3 Clause (GPL+ compatible) 06-27-2015 - Applied clock divisor fix from DOSBOX SVN, http://www.vogons.org/viewtopic.php?p=344227#p344227 From b3268bf0d22e32c87917716620ceabe51f422cd9 Mon Sep 17 00:00:00 2001 From: mixxmaster Date: Wed, 1 Jul 2015 16:25:28 -0400 Subject: [PATCH 3/4] accidentally let a few typos split --- src/emu/sound/saa1099.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/emu/sound/saa1099.c b/src/emu/sound/saa1099.c index cf4d5108283..f505a655d06 100644 --- a/src/emu/sound/saa1099.c +++ b/src/emu/sound/saa1099.c @@ -59,7 +59,7 @@ 0x18 | x--- ---- | Envelope generator 0 control enable (0 = off, 1 = on) 0x19 | --xx xxxx | Envelope generator 1 parameters 0x19 | x--- ---- | Envelope generator 1 control enable (0 = off, 1 = on) - | | + | |s 0x1c | ---- ---x | All channels enable (0 = off, 1 = on) 0x1c | ---- --x- | Synch & Reset generators @@ -263,24 +263,24 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t * } // if the noise is enabled - if (saa->channels[ch].noise_enable) + if (m->channels[ch].noise_enable) { // if the noise level is high (noise 0: chan 0-2, noise 1: chan 3-5) - if (saa->noise[ch/3].level & 1) + if (m->noise[ch/3].level & 1) { // subtract to avoid overflows, also use only half amplitude - output_l -= saa->channels[ch].amplitude[ LEFT] * saa->channels[ch].envelope[ LEFT] / 16 / 2; - output_r -= saa->channels[ch].amplitude[RIGHT] * saa->channels[ch].envelope[RIGHT] / 16 / 2; + output_l -= m->channels[ch].amplitude[ LEFT] * m->channels[ch].envelope[ LEFT] / 16 / 2; + output_r -= m->channels[ch].amplitude[RIGHT] * m->channels[ch].envelope[RIGHT] / 16 / 2; } } // if the square wave is enabled - if (saa->channels[ch].freq_enable) + if (m->channels[ch].freq_enable) { // if the channel level is high - if (saa->channels[ch].level & 1) + if (m->channels[ch].level & 1) { - output_l += saa->channels[ch].amplitude[ LEFT] * saa->channels[ch].envelope[ LEFT] / 16; - output_r += saa->channels[ch].amplitude[RIGHT] * saa->channels[ch].envelope[RIGHT] / 16; + output_l += m->channels[ch].amplitude[ LEFT] * m->channels[ch].envelope[ LEFT] / 16; + output_r += m->channels[ch].amplitude[RIGHT] * m->channels[ch].envelope[RIGHT] / 16; } } } From aa67cca2cf506e5a71302c17d727c198578581f9 Mon Sep 17 00:00:00 2001 From: mixxmaster Date: Wed, 1 Jul 2015 16:26:21 -0400 Subject: [PATCH 4/4] random letter removed --- src/emu/sound/saa1099.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emu/sound/saa1099.c b/src/emu/sound/saa1099.c index f505a655d06..4970b68519d 100644 --- a/src/emu/sound/saa1099.c +++ b/src/emu/sound/saa1099.c @@ -59,7 +59,7 @@ 0x18 | x--- ---- | Envelope generator 0 control enable (0 = off, 1 = on) 0x19 | --xx xxxx | Envelope generator 1 parameters 0x19 | x--- ---- | Envelope generator 1 control enable (0 = off, 1 = on) - | |s + | | 0x1c | ---- ---x | All channels enable (0 = off, 1 = on) 0x1c | ---- --x- | Synch & Reset generators