mirror of
https://github.com/holub/mame
synced 2025-07-07 02:50:50 +03:00
snkwave.cpp: Fix frequency register bit alignment as well as waveform sample bit alignment based on the schematics and observations of running games. Fixes wrong laser/other sounds in Vanguard II and some wrong sounds in Marvin's Maze. [Lord Nightmare]
This commit is contained in:
parent
ca721f71f2
commit
a32e9f3a48
@ -119,14 +119,11 @@ void snkwave_device::snkwave_w(offs_t offset, uint8_t data)
|
|||||||
{
|
{
|
||||||
m_stream->update();
|
m_stream->update();
|
||||||
|
|
||||||
// all registers are 6-bit
|
if (offset == 0) // F1, high 6 bits
|
||||||
data &= 0x3f;
|
m_frequency = (m_frequency & 0x03f) | ((data & 0xfc) << 4);
|
||||||
|
else if (offset == 1) // F2, low 6 bits
|
||||||
if (offset == 0)
|
m_frequency = (m_frequency & 0xfc0) | (data & 0x3f);
|
||||||
m_frequency = (m_frequency & 0x03f) | (data << 6);
|
else if (offset <= 5) // W3 thru W6, low 3 bits of each nybble
|
||||||
else if (offset == 1)
|
|
||||||
m_frequency = (m_frequency & 0xfc0) | data;
|
|
||||||
else if (offset <= 5)
|
|
||||||
update_waveform(offset - 2, data);
|
update_waveform(offset - 2, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +140,7 @@ void snkwave_device::update_waveform(unsigned int offset, uint8_t data)
|
|||||||
{
|
{
|
||||||
assert(offset < WAVEFORM_LENGTH/4);
|
assert(offset < WAVEFORM_LENGTH/4);
|
||||||
|
|
||||||
m_waveform[offset * 2] = ((data & 0x38) >> 3) << (12-CLOCK_SHIFT);
|
m_waveform[offset * 2] = ((data & 0x70) >> 4) << (12-CLOCK_SHIFT);
|
||||||
m_waveform[offset * 2 + 1] = ((data & 0x07) >> 0) << (12-CLOCK_SHIFT);
|
m_waveform[offset * 2 + 1] = ((data & 0x07) >> 0) << (12-CLOCK_SHIFT);
|
||||||
m_waveform[WAVEFORM_LENGTH-2 - offset * 2] = ~m_waveform[offset * 2 + 1];
|
m_waveform[WAVEFORM_LENGTH-2 - offset * 2] = ~m_waveform[offset * 2 + 1];
|
||||||
m_waveform[WAVEFORM_LENGTH-1 - offset * 2] = ~m_waveform[offset * 2];
|
m_waveform[WAVEFORM_LENGTH-1 - offset * 2] = ~m_waveform[offset * 2];
|
||||||
|
Loading…
Reference in New Issue
Block a user