summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2015-06-02 18:24:18 +0200
committer hap <happppp@users.noreply.github.com>2015-06-02 18:24:18 +0200
commitc325f48069737463c4ec6c72228e881232dec861 (patch)
treefbe4b8086b1eca258bf12f88b6ba60a5931dd678 /src
parent0ebc3e5033b3aa0284148ab5daf4d6ba41fad911 (diff)
correct zsg2 internal clock
Diffstat (limited to 'src')
-rw-r--r--src/emu/sound/zsg2.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/emu/sound/zsg2.c b/src/emu/sound/zsg2.c
index e6b9f6af450..4f3f1a42ca9 100644
--- a/src/emu/sound/zsg2.c
+++ b/src/emu/sound/zsg2.c
@@ -47,7 +47,6 @@ TODO:
- volume/panning is linear? volume slides are too steep
- most music sounds tinny, probably due to missing DSP?
- what is reg 0xa/0xc? seems related to volume
-- chip should running at 31khz (divider of 768 instead of 192)
- identify sample flags
* bassdrum in shikigam level 1 music is a good hint: it should be one octave
lower, indicating possible stereo sample, or base octave(like in ymf278)
@@ -86,10 +85,9 @@ void zsg2_device::device_start()
memset(&m_chan, 0, sizeof(m_chan));
- m_stream = stream_alloc(0, 2, clock() / 192);
+ m_stream = stream_alloc(0, 2, clock() / 768);
m_mem_blocks = m_mem_base.length();
-
m_mem_copy = auto_alloc_array_clear(machine(), UINT32, m_mem_blocks);
m_full_samples = auto_alloc_array_clear(machine(), INT16, m_mem_blocks * 4 + 4); // +4 is for empty block
@@ -214,7 +212,7 @@ void zsg2_device::sound_stream_update(sound_stream &stream, stream_sample_t **in
continue;
m_chan[ch].step_ptr += m_chan[ch].step;
- if (m_chan[ch].step_ptr & 0x40000)
+ if (m_chan[ch].step_ptr & 0x10000)
{
m_chan[ch].step_ptr &= 0xffff;
if (++m_chan[ch].cur_pos >= m_chan[ch].end_pos)
@@ -231,7 +229,7 @@ void zsg2_device::sound_stream_update(sound_stream &stream, stream_sample_t **in
m_chan[ch].samples = prepare_samples(m_chan[ch].page | m_chan[ch].cur_pos);
}
- INT32 sample = (m_chan[ch].samples[m_chan[ch].step_ptr >> 16 & 3] * m_chan[ch].vol) >> 16;
+ INT32 sample = (m_chan[ch].samples[m_chan[ch].step_ptr >> 14 & 3] * m_chan[ch].vol) >> 16;
mix_l += (sample * m_chan[ch].panl + sample * (0x1f - m_chan[ch].panr)) >> 5;
mix_r += (sample * m_chan[ch].panr + sample * (0x1f - m_chan[ch].panl)) >> 5;