From ee03500fdcd6ef531e4106264b3418208bc1ab91 Mon Sep 17 00:00:00 2001 From: dinkc64 Date: Thu, 14 Nov 2024 09:25:59 -0500 Subject: [PATCH] snkwave: 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] --- src/burn/drv/pre90s/d_snk.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/burn/drv/pre90s/d_snk.cpp b/src/burn/drv/pre90s/d_snk.cpp index 722052cb9e..4e9d511f4b 100644 --- a/src/burn/drv/pre90s/d_snk.cpp +++ b/src/burn/drv/pre90s/d_snk.cpp @@ -2211,7 +2211,7 @@ static void snkwave_exit() static void snkwave_update_waveform(UINT32 offset, UINT8 data) { - snkwave_waveform[offset * 2] = ((data & 0x38) >> 3) << (12-CLOCK_SHIFT); + snkwave_waveform[offset * 2] = ((data & 0x70) >> 4) << (12-CLOCK_SHIFT); snkwave_waveform[offset * 2 + 1] = ((data & 0x07) >> 0) << (12-CLOCK_SHIFT); snkwave_waveform[SNKWAVE_WAVEFORM_LENGTH-2 - offset * 2] = ~snkwave_waveform[offset * 2 + 1]; snkwave_waveform[SNKWAVE_WAVEFORM_LENGTH-1 - offset * 2] = ~snkwave_waveform[offset * 2]; @@ -2221,13 +2221,11 @@ static void snkwave_w(UINT32 offset, UINT8 data) { stream.update(); - data &= 0x3f; // all registers are 6-bit - - if (offset == 0) - snkwave_frequency = (snkwave_frequency & 0x03f) | (data << 6); - else if (offset == 1) - snkwave_frequency = (snkwave_frequency & 0xfc0) | data; - else if (offset <= 5) + if (offset == 0) // F1, high 6 bits + snkwave_frequency = (snkwave_frequency & 0x03f) | ((data & 0xfc) << 4); + else if (offset == 1) // F2, low 6 bits + snkwave_frequency = (snkwave_frequency & 0xfc0) | (data & 0x3f); + else if (offset <= 5) // W3 thru W6, low 3 bits of each nybble snkwave_update_waveform(offset - 2, data); }