diff options
Diffstat (limited to 'src/emu/sound/t6w28.c')
-rw-r--r-- | src/emu/sound/t6w28.c | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/src/emu/sound/t6w28.c b/src/emu/sound/t6w28.c index 9f5d52cdc21..b0ace77119f 100644 --- a/src/emu/sound/t6w28.c +++ b/src/emu/sound/t6w28.c @@ -54,16 +54,16 @@ WRITE8_MEMBER( t6w28_device::write ) m_register[offset * 8 + r] = (m_register[offset * 8 + r] & 0x3f0) | (data & 0x0f); } else - { + { r = m_last_register[offset]; } c = r/2; switch (r) { - case 0: /* tone 0 : frequency */ - case 2: /* tone 1 : frequency */ - case 4: /* tone 2 : frequency */ - if ((data & 0x80) == 0) m_register[offset * 8 + r] = (m_register[offset * 8 + r] & 0x0f) | ((data & 0x3f) << 4); + case 0: /* tone 0 : frequency */ + case 2: /* tone 1 : frequency */ + case 4: /* tone 2 : frequency */ + if ((data & 0x80) == 0) m_register[offset * 8 + r] = (m_register[offset * 8 + r] & 0x0f) | ((data & 0x3f) << 4); m_period[offset * 4 + c] = STEP * m_register[offset * 8 + r]; if (m_period[offset * 4 + c] == 0) m_period[offset * 4 + c] = STEP; if (r == 4) @@ -73,21 +73,21 @@ WRITE8_MEMBER( t6w28_device::write ) m_period[offset * 4 + 3] = 2 * m_period[offset * 4 + 2]; } break; - case 1: /* tone 0 : volume */ - case 3: /* tone 1 : volume */ - case 5: /* tone 2 : volume */ - case 7: /* noise : volume */ + case 1: /* tone 0 : volume */ + case 3: /* tone 1 : volume */ + case 5: /* tone 2 : volume */ + case 7: /* noise : volume */ m_volume[offset * 4 + c] = m_vol_table[data & 0x0f]; if ((data & 0x80) == 0) m_register[offset * 8 + r] = (m_register[offset * 8 + r] & 0x3f0) | (data & 0x0f); break; - case 6: /* noise : frequency, mode */ + case 6: /* noise : frequency, mode */ { - if ((data & 0x80) == 0) m_register[offset * 8 + r] = (m_register[offset * 8 + r] & 0x3f0) | (data & 0x0f); + if ((data & 0x80) == 0) m_register[offset * 8 + r] = (m_register[offset * 8 + r] & 0x3f0) | (data & 0x0f); n = m_register[offset * 8 + 6]; m_noise_mode[offset] = (n & 4) ? 1 : 0; /* N/512,N/1024,N/2048,Tone #3 output */ m_period[offset * 4 + 3] = ((n&3) == 3) ? 2 * m_period[offset * 4 + 2] : (STEP << (5+(n&3))); - /* Reset noise shifter */ + /* Reset noise shifter */ m_rng[offset] = m_feedback_mask; /* this is correct according to the smspower document */ //m_rng = 0xF35; /* this is not, but sounds better in do run run */ m_output[offset * 4 + 3] = m_rng[offset] & 1; @@ -199,29 +199,29 @@ void t6w28_device::sound_stream_update(sound_stream &stream, stream_sample_t **i m_count[3] -= nextevent; if (m_count[3] <= 0) { - if (m_noise_mode[0] == 1) /* White Noise Mode */ - { - if (((m_rng[0] & m_whitenoise_taps) != m_whitenoise_taps) && ((m_rng[0] & m_whitenoise_taps) != 0)) /* crappy xor! */ + if (m_noise_mode[0] == 1) /* White Noise Mode */ + { + if (((m_rng[0] & m_whitenoise_taps) != m_whitenoise_taps) && ((m_rng[0] & m_whitenoise_taps) != 0)) /* crappy xor! */ { - m_rng[0] >>= 1; - m_rng[0] |= m_feedback_mask; + m_rng[0] >>= 1; + m_rng[0] |= m_feedback_mask; } else { - m_rng[0] >>= 1; + m_rng[0] >>= 1; } m_output[3] = m_whitenoise_invert ? !(m_rng[0] & 1) : m_rng[0] & 1; } else /* Periodic noise mode */ { - if (m_rng[0] & 1) + if (m_rng[0] & 1) { - m_rng[0] >>= 1; - m_rng[0] |= m_feedback_mask; + m_rng[0] >>= 1; + m_rng[0] |= m_feedback_mask; } else { - m_rng[0] >>= 1; + m_rng[0] >>= 1; } m_output[3] = m_rng[0] & 1; } @@ -269,7 +269,7 @@ void t6w28_device::set_gain(int gain) /* increase max output basing on gain (0.2 dB per step) */ out = MAX_OUTPUT / 3; while (gain-- > 0) - out *= 1.023292992; /* = (10 ^ (0.2/20)) */ + out *= 1.023292992; /* = (10 ^ (0.2/20)) */ /* build volume table (2dB per step) */ for (i = 0;i < 15;i++) @@ -278,7 +278,7 @@ void t6w28_device::set_gain(int gain) if (out > MAX_OUTPUT / 3) m_vol_table[i] = MAX_OUTPUT / 3; else m_vol_table[i] = out; - out /= 1.258925412; /* = 10 ^ (2/20) = 2dB */ + out /= 1.258925412; /* = 10 ^ (2/20) = 2dB */ } m_vol_table[15] = 0; } @@ -303,7 +303,7 @@ void t6w28_device::device_start() for (i = 0;i < 8;i+=2) { m_register[i] = 0; - m_register[i + 1] = 0x0f; /* volume = 0 */ + m_register[i + 1] = 0x0f; /* volume = 0 */ } for (i = 0;i < 8;i++) @@ -349,7 +349,6 @@ const device_type T6W28 = &device_creator<t6w28_device>; t6w28_device::t6w28_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, T6W28, "T6W28", tag, owner, clock), - device_sound_interface(mconfig, *this) + device_sound_interface(mconfig, *this) { } - |