summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2019-10-07 00:22:57 +0900
committer cam900 <dbtlrchl@naver.com>2019-10-07 00:22:57 +0900
commitbe9efeee596afb6afe647536c66d6f52431e0852 (patch)
tree1aed257657e5dca9d4476039e9c32f40ac47df50 /src/devices/sound
parent5aac500deefe22c7411ebe357c857699f25ff744 (diff)
mos6581.cpp : Add save states
sid.cpp : Reduce duplicates, Add postload function sidvoice.cpp : Fix type value when DIRECT_FIXPOINT defined sidenvel.cpp, sidvoice.cpp, sid.cpp : Fix spacings
Diffstat (limited to 'src/devices/sound')
-rw-r--r--src/devices/sound/mos6581.cpp130
-rw-r--r--src/devices/sound/mos6581.h2
-rw-r--r--src/devices/sound/sid.cpp168
-rw-r--r--src/devices/sound/sid.h6
-rw-r--r--src/devices/sound/sidenvel.cpp78
-rw-r--r--src/devices/sound/sidvoice.cpp205
-rw-r--r--src/devices/sound/sidvoice.h12
7 files changed, 362 insertions, 239 deletions
diff --git a/src/devices/sound/mos6581.cpp b/src/devices/sound/mos6581.cpp
index 2e4cb1f3cfd..99b3620c228 100644
--- a/src/devices/sound/mos6581.cpp
+++ b/src/devices/sound/mos6581.cpp
@@ -68,6 +68,125 @@ mos8580_device::mos8580_device(const machine_config &mconfig, const char *tag, d
{
}
+//-------------------------------------------------
+// save_state - add save states
+//-------------------------------------------------
+
+void mos6581_device::save_state(SID6581_t *token)
+{
+ save_item(NAME(token->type));
+ save_item(NAME(token->clock));
+
+ save_item(NAME(token->PCMfreq));
+ save_item(NAME(token->PCMsid));
+ save_item(NAME(token->PCMsidNoise));
+
+ save_item(NAME(token->reg));
+ //save_item(NAME(token->sidKeysOn));
+ //save_item(NAME(token->sidKeysOff));
+
+ save_item(NAME(token->masterVolume));
+ save_item(NAME(token->masterVolumeAmplIndex));
+
+ save_item(NAME(token->filter.Enabled));
+ save_item(NAME(token->filter.Type));
+ save_item(NAME(token->filter.CurType));
+ save_item(NAME(token->filter.Dy));
+ save_item(NAME(token->filter.ResDy));
+ save_item(NAME(token->filter.Value));
+
+ for (int v = 0; v < m_token->max_voices; v++)
+ {
+ save_item(NAME(token->optr[v].reg), v);
+
+ save_item(NAME(token->optr[v].SIDfreq), v);
+ save_item(NAME(token->optr[v].SIDpulseWidth), v);
+ save_item(NAME(token->optr[v].SIDctrl), v);
+ save_item(NAME(token->optr[v].SIDAD), v);
+ save_item(NAME(token->optr[v].SIDSR), v);
+
+ save_item(NAME(token->optr[v].sync), v);
+
+ save_item(NAME(token->optr[v].pulseIndex), v);
+ save_item(NAME(token->optr[v].newPulseIndex), v);
+
+ save_item(NAME(token->optr[v].curSIDfreq), v);
+ save_item(NAME(token->optr[v].curNoiseFreq), v);
+
+ save_item(NAME(token->optr[v].output), v);
+ //save_item(NAME(token->optr[v].outputMask), v);
+
+ save_item(NAME(token->optr[v].filtVoiceMask), v);
+ save_item(NAME(token->optr[v].filtEnabled), v);
+ save_item(NAME(token->optr[v].filtLow), v);
+ save_item(NAME(token->optr[v].filtRef), v);
+ save_item(NAME(token->optr[v].filtIO), v);
+
+ save_item(NAME(token->optr[v].cycleLenCount), v);
+#if defined(DIRECT_FIXPOINT)
+ save_item(NAME(token->optr[v].cycleLen.l), v);
+ save_item(NAME(token->optr[v].cycleAddLen.l), v);
+#else
+ save_item(NAME(token->optr[v].cycleAddLenPnt), v);
+ save_item(NAME(token->optr[v].cycleLen), v);
+ save_item(NAME(token->optr[v].cycleLenPnt), v);
+#endif
+
+#if defined(DIRECT_FIXPOINT)
+ save_item(NAME(token->optr[v].waveStep.l), v);
+ save_item(NAME(token->optr[v].waveStepAdd.l), v);
+#else
+ save_item(NAME(token->optr[v].waveStep), v);
+ save_item(NAME(token->optr[v].waveStepAdd), v);
+ save_item(NAME(token->optr[v].waveStepPnt), v);
+ save_item(NAME(token->optr[v].waveStepAddPnt), v);
+#endif
+ save_item(NAME(token->optr[v].waveStepOld), v);
+ for (int n = 0; n < 2; n++)
+ {
+ save_item(NAME(token->optr[v].wavePre[n].len), v | (n << 4));
+#if defined(DIRECT_FIXPOINT)
+ save_item(NAME(token->optr[v].wavePre[n].stp), v | (n << 4));
+#else
+ save_item(NAME(token->optr[v].wavePre[n].pnt), v | (n << 4));
+ save_item(NAME(token->optr[v].wavePre[n].stp), v | (n << 4));
+#endif
+ }
+
+#if defined(DIRECT_FIXPOINT)
+ save_item(NAME(token->optr[v].noiseReg.l), v);
+#else
+ save_item(NAME(token->optr[v].noiseReg), v);
+#endif
+ save_item(NAME(token->optr[v].noiseStep), v);
+ save_item(NAME(token->optr[v].noiseStepAdd), v);
+ save_item(NAME(token->optr[v].noiseOutput), v);
+ save_item(NAME(token->optr[v].noiseIsLocked), v);
+
+ save_item(NAME(token->optr[v].ADSRctrl), v);
+ //save_item(NAME(token->optr[v].gateOnCtrl), v);
+ //save_item(NAME(token->optr[v].gateOffCtrl), v);
+
+#ifdef SID_FPUENVE
+ save_item(NAME(token->optr[v].fenveStep), v);
+ save_item(NAME(token->optr[v].fenveStepAdd), v);
+ save_item(NAME(token->optr[v].enveStep), v);
+#elif defined(DIRECT_FIXPOINT)
+ save_item(NAME(token->optr[v].enveStep.l), v);
+ save_item(NAME(token->optr[v].enveStepAdd.l), v);
+#else
+ save_item(NAME(token->optr[v].enveStep), v);
+ save_item(NAME(token->optr[v].enveStepAdd), v);
+ save_item(NAME(token->optr[v].enveStepPnt), v);
+ save_item(NAME(token->optr[v].enveStepAddPnt), v);
+#endif
+ save_item(NAME(token->optr[v].enveVol), v);
+ save_item(NAME(token->optr[v].enveSusVol), v);
+ save_item(NAME(token->optr[v].enveShortAttackCount), v);
+ }
+
+ save_item(NAME(token->optr3_outputmask));
+}
//-------------------------------------------------
// device_start - device-specific startup
@@ -91,6 +210,7 @@ void mos6581_device::device_start()
m_token->init();
sidInitWaveformTables(m_variant);
+ save_state(m_token.get());
}
@@ -105,6 +225,16 @@ void mos6581_device::device_reset()
//-------------------------------------------------
+// device_post_load - device-specific post-load
+//-------------------------------------------------
+
+void mos6581_device::device_post_load()
+{
+ m_token->postload();
+}
+
+
+//-------------------------------------------------
// sound_stream_update - handle update requests for
// our sound stream
//-------------------------------------------------
diff --git a/src/devices/sound/mos6581.h b/src/devices/sound/mos6581.h
index 68d319a45df..e6d694ae90d 100644
--- a/src/devices/sound/mos6581.h
+++ b/src/devices/sound/mos6581.h
@@ -62,10 +62,12 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
+ void save_state(SID6581_t *token);
private:
devcb_read8 m_read_potx;
devcb_read8 m_read_poty;
diff --git a/src/devices/sound/sid.cpp b/src/devices/sound/sid.cpp
index 1535c56a69e..de56c65106e 100644
--- a/src/devices/sound/sid.cpp
+++ b/src/devices/sound/sid.cpp
@@ -32,7 +32,7 @@ float filterResTable[16];
const int mix16monoMiddleIndex = 256*maxLogicalVoices/2;
uint16_t mix16mono[256*maxLogicalVoices];
-uint16_t zero16bit=0; /* either signed or unsigned */
+uint16_t zero16bit = 0; /* either signed or unsigned */
//uint32_t splitBufferLen;
void MixerInit(int threeVoiceAmplify)
@@ -49,7 +49,7 @@ void MixerInit(int threeVoiceAmplify)
/* Mixing formulas are optimized by sample input value. */
si = (-128*maxLogicalVoices) * 256;
- for (ui = 0; ui < sizeof(mix16mono)/sizeof(uint16_t); ui++ )
+ for (ui = 0; ui < sizeof(mix16mono)/sizeof(uint16_t); ui++)
{
mix16mono[ui] = (uint16_t)(si/ampDiv) + zero16bit;
si+=256;
@@ -62,43 +62,25 @@ void MixerInit(int threeVoiceAmplify)
inline void SID6581_t::syncEm()
{
- bool const sync1(optr1.modulator->cycleLenCount <= 0);
- bool const sync2(optr2.modulator->cycleLenCount <= 0);
- bool const sync3(optr3.modulator->cycleLenCount <= 0);
-
- optr1.cycleLenCount--;
- optr2.cycleLenCount--;
- optr3.cycleLenCount--;
-
- if (optr1.sync && sync1)
- {
- optr1.cycleLenCount = 0;
- optr1.outProc = &sidOperator::wave_calc_normal;
-#if defined(DIRECT_FIXPOINT)
- optr1.waveStep.l = 0;
-#else
- optr1.waveStep = optr1.waveStepPnt = 0;
-#endif
- }
- if (optr2.sync && sync2)
+ bool sync[3];
+ for (int v = 0; v < max_voices; v++)
{
- optr2.cycleLenCount = 0;
- optr2.outProc = &sidOperator::wave_calc_normal;
-#if defined(DIRECT_FIXPOINT)
- optr2.waveStep.l = 0;
-#else
- optr2.waveStep = optr2.waveStepPnt = 0;
-#endif
+ sync[v] = optr[v].modulator->cycleLenCount <= 0;
+ optr[v].cycleLenCount--;
}
- if (optr3.sync && sync3)
+
+ for (int v = 0; v < max_voices; v++)
{
- optr3.cycleLenCount = 0;
- optr3.outProc = &sidOperator::wave_calc_normal;
+ if (optr[v].sync && sync[v])
+ {
+ optr[v].cycleLenCount = 0;
+ optr[v].outProc = &sidOperator::wave_calc_normal;
#if defined(DIRECT_FIXPOINT)
- optr3.waveStep.l = 0;
+ optr[v].waveStep.l = 0;
#else
- optr3.waveStep = optr3.waveStepPnt = 0;
+ optr[v].waveStep = optr[v].waveStepPnt = 0;
#endif
+ }
}
}
@@ -107,12 +89,12 @@ void SID6581_t::fill_buffer(stream_sample_t *buffer, uint32_t bufferLen)
{
//void* SID6581_t::fill16bitMono(void* buffer, uint32_t numberOfSamples)
- for ( ; bufferLen > 0; bufferLen-- )
+ for (; bufferLen > 0; bufferLen--)
{
*buffer++ = (int16_t) mix16mono[unsigned(mix16monoMiddleIndex
- +(*optr1.outProc)(&optr1)
- +(*optr2.outProc)(&optr2)
- +(optr3.outProc(&optr3)&optr3_outputmask)
+ +(*optr[0].outProc)(&optr[0])
+ +(*optr[1].outProc)(&optr[1])
+ +(optr[2].outProc(&optr[2])&optr3_outputmask)
/* hack for digi sounds
does n't seam to come from a tone operator
ghostbusters and goldrunner everything except volume zeroed */
@@ -130,12 +112,11 @@ void SID6581_t::fill_buffer(stream_sample_t *buffer, uint32_t bufferLen)
bool SID6581_t::reset()
{
- optr1.clear();
- enveEmuResetOperator( &optr1 );
- optr2.clear();
- enveEmuResetOperator( &optr2 );
- optr3.clear();
- enveEmuResetOperator( &optr3 );
+ for (int v = 0; v < max_voices; v++)
+ {
+ optr[v].clear();
+ enveEmuResetOperator(&optr[v]);
+ }
optr3_outputmask = ~0; /* on */
//sampleEmuReset();
@@ -144,17 +125,24 @@ bool SID6581_t::reset()
filter.Value = 0;
filter.Dy = filter.ResDy = 0;
- optr1.set();
- optr2.set();
- optr3.set();
-
- optr1.set2();
- optr2.set2();
- optr3.set2();
+ for (int v = 0; v < max_voices; v++)
+ {
+ optr[v].set();
+ optr[v].set2();
+ }
return true;
}
+void SID6581_t::postload()
+{
+ for (int v = 0; v < max_voices; v++)
+ {
+ optr[v].set();
+ optr[v].set2();
+ }
+}
+
static void filterTableInit(running_machine &machine)
{
@@ -177,13 +165,13 @@ static void filterTableInit(running_machine &machine)
bandPassParam = std::make_unique<float[]>(0x800);
uk = 0;
- for ( rk = 0; rk < 0x800; rk++ )
+ for (rk = 0; rk < 0x800; rk++)
{
filterTable[uk] = (((expf(rk/0x800*logf(400.0f))/60.0f)+0.05f)
*filterRefFreq) / sample_rate;
- if ( filterTable[uk] < yMin )
+ if (filterTable[uk] < yMin)
filterTable[uk] = yMin;
- if ( filterTable[uk] > yMax )
+ if (filterTable[uk] > yMax)
filterTable[uk] = yMax;
uk++;
}
@@ -195,7 +183,7 @@ static void filterTableInit(running_machine &machine)
yTmp = yMin;
uk = 0;
/* Some C++ compilers still have non-local scope! */
- for ( rk2 = 0; rk2 < 0x800; rk2++ )
+ for (rk2 = 0; rk2 < 0x800; rk2++)
{
bandPassParam[uk] = (yTmp*filterRefFreq) / sample_rate;
yTmp += yAdd;
@@ -206,10 +194,10 @@ static void filterTableInit(running_machine &machine)
resDyMax = 1.0f;
resDyMin = 2.0f;
resDy = resDyMin;
- for ( uk = 0; uk < 16; uk++ )
+ for (uk = 0; uk < 16; uk++)
{
filterResTable[uk] = resDy;
- resDy -= (( resDyMin - resDyMax ) / 15 );
+ resDy -= ((resDyMin - resDyMax) / 15);
}
filterResTable[0] = resDyMin;
filterResTable[15] = resDyMax;
@@ -217,22 +205,15 @@ static void filterTableInit(running_machine &machine)
void SID6581_t::init()
{
- optr1.sid = this;
- optr2.sid = this;
- optr3.sid = this;
-
- optr1.modulator = &optr3;
- optr3.carrier = &optr1;
- optr1.filtVoiceMask = 1;
-
- optr2.modulator = &optr1;
- optr1.carrier = &optr2;
- optr2.filtVoiceMask = 2;
-
- optr3.modulator = &optr2;
- optr2.carrier = &optr3;
- optr3.filtVoiceMask = 4;
+ for (int v = 0; v < max_voices; v++)
+ {
+ optr[v].sid = this;
+ int mod_voi = (v - 1) % max_voices;
+ optr[v].modulator = &optr[mod_voi];
+ optr[mod_voi].carrier = &optr[v];
+ optr[v].filtVoiceMask = 1 << v;
+ }
PCMsid = uint32_t(PCMfreq * (16777216.0 / clock));
PCMsidNoise = uint32_t((clock * 256.0) / PCMfreq);
@@ -275,7 +256,7 @@ void SID6581_t::port_w(int offset, int data)
masterVolume = reg[0x18] & 15;
masterVolumeAmplIndex = masterVolume << 8;
- if ((reg[0x18] & 0x80) && !(reg[0x17] & optr3.filtVoiceMask))
+ if ((reg[0x18] & 0x80) && !(reg[0x17] & optr[2].filtVoiceMask))
optr3_outputmask = 0; /* off */
else
optr3_outputmask = ~0; /* on */
@@ -284,11 +265,10 @@ void SID6581_t::port_w(int offset, int data)
if (filter.Type != filter.CurType)
{
filter.CurType = filter.Type;
- optr1.filtLow = optr1.filtRef = 0;
- optr2.filtLow = optr2.filtRef = 0;
- optr3.filtLow = optr3.filtRef = 0;
+ for (int v = 0; v < max_voices; v++)
+ optr[v].filtLow = optr[v].filtRef = 0;
}
- if (filter.Enabled )
+ if (filter.Enabled)
{
filter.Value = 0x7ff & ((reg[0x15] & 7) | (uint16_t(reg[0x16]) << 3));
if (filter.Type == 0x20)
@@ -300,14 +280,13 @@ void SID6581_t::port_w(int offset, int data)
filter.ResDy = 1.0f;
}
- optr1.set();
- optr3.set();
- optr2.set();
+ for (int v = 0; v < max_voices; v++)
+ {
+ optr[v].set();
- // relies on sidEmuSet also for other channels!
- optr1.set2();
- optr2.set2();
- optr3.set2();
+ // relies on sidEmuSet also for other channels!
+ optr[v].set2();
+ }
break;
default:
@@ -315,20 +294,19 @@ void SID6581_t::port_w(int offset, int data)
reg[offset] = data;
if (offset < 7)
- optr1.reg[offset] = data;
+ optr[0].reg[offset] = data;
else if (offset < 14)
- optr2.reg[offset - 7] = data;
+ optr[1].reg[offset - 7] = data;
else if (offset < 21)
- optr3.reg[offset - 14] = data;
+ optr[2].reg[offset - 14] = data;
- optr1.set();
- optr3.set();
- optr2.set();
+ for (int v = 0; v < max_voices; v++)
+ {
+ optr[v].set();
- // relies on sidEmuSet also for other channels!
- optr1.set2();
- optr2.set2();
- optr3.set2();
+ // relies on sidEmuSet also for other channels!
+ optr[v].set2();
+ }
break;
}
}
@@ -348,11 +326,11 @@ int SID6581_t::port_r(running_machine &machine, int offset)
break;
case 0x1b:
mixer_channel->update();
- data = optr3.output;
+ data = optr[2].output;
break;
case 0x1c:
mixer_channel->update();
- data = optr3.enveVol;
+ data = optr[2].enveVol;
break;
default:
data = reg[offset];
diff --git a/src/devices/sound/sid.h b/src/devices/sound/sid.h
index a57f2ff6b5f..6e5ad1dfa3f 100644
--- a/src/devices/sound/sid.h
+++ b/src/devices/sound/sid.h
@@ -15,6 +15,8 @@
/* private area */
struct SID6581_t
{
+ static constexpr uint8_t max_voices = 3;
+
device_t *device;
sound_stream *mixer_channel; // mame stream/ mixer channel
@@ -49,13 +51,15 @@ struct SID6581_t
uint16_t Value;
} filter;
- sidOperator optr1, optr2, optr3;
+ sidOperator optr[max_voices];
int optr3_outputmask;
void init();
bool reset();
+ void postload();
+
int port_r(running_machine &machine, int offset);
void port_w(int offset, int data);
diff --git a/src/devices/sound/sidenvel.cpp b/src/devices/sound/sidenvel.cpp
index 2dc805797d1..79f1ae595d6 100644
--- a/src/devices/sound/sidenvel.cpp
+++ b/src/devices/sound/sidenvel.cpp
@@ -94,19 +94,19 @@ static uint32_t releaseTabLen;
static uint32_t releasePos[256];
-void enveEmuInit( uint32_t updateFreq, int measuredValues )
+void enveEmuInit(uint32_t updateFreq, int measuredValues)
{
uint32_t i, j, k;
releaseTabLen = sizeof(releaseTab);
- for ( i = 0; i < 256; i++ )
+ for (i = 0; i < 256; i++)
{
j = 0;
- while (( j < releaseTabLen ) && (releaseTab[j] > i) )
+ while ((j < releaseTabLen) && (releaseTab[j] > i))
{
j++;
}
- if ( j < releaseTabLen )
+ if (j < releaseTabLen)
{
releasePos[i] = j;
}
@@ -117,9 +117,9 @@ void enveEmuInit( uint32_t updateFreq, int measuredValues )
}
k = 0;
- for ( i = 0; i < 16; i++ )
+ for (i = 0; i < 16; i++)
{
- for ( j = 0; j < 256; j++ )
+ for (j = 0; j < 256; j++)
{
uint16_t tmpVol = j;
if (measuredValues)
@@ -135,41 +135,41 @@ void enveEmuInit( uint32_t updateFreq, int measuredValues )
}
}
- for ( i = 0; i < 16; i++ )
+ for (i = 0; i < 16; i++)
{
#ifdef SID_FPUENVE
- double scaledenvelen = floor(( attackTimes[i] * updateFreq ) / 1000UL );
+ double scaledenvelen = floor((attackTimes[i] * updateFreq) / 1000UL);
if (scaledenvelen == 0)
scaledenvelen = 1;
attackRates[i] = attackTabLen / scaledenvelen;
- scaledenvelen = floor(( decayReleaseTimes[i] * updateFreq ) / 1000UL );
+ scaledenvelen = floor((decayReleaseTimes[i] * updateFreq) / 1000UL);
if (scaledenvelen == 0)
scaledenvelen = 1;
decayReleaseRates[i] = releaseTabLen / scaledenvelen;
#elif defined(DIRECT_FIXPOINT)
- uint32_t scaledenvelen = (uint32_t)floor(( attackTimes[i] * updateFreq ) / 1000UL );
+ uint32_t scaledenvelen = (uint32_t)floor((attackTimes[i] * updateFreq) / 1000UL);
if (scaledenvelen == 0)
scaledenvelen = 1;
attackRates[i] = (attackTabLen << 16) / scaledenvelen;
- scaledenvelen = (uint32_t)floor(( decayReleaseTimes[i] * updateFreq ) / 1000UL );
+ scaledenvelen = (uint32_t)floor((decayReleaseTimes[i] * updateFreq) / 1000UL);
if (scaledenvelen == 0)
scaledenvelen = 1;
decayReleaseRates[i] = (releaseTabLen << 16) / scaledenvelen;
#else
- uint32_t scaledenvelen = (uint32_t)(/*floor*/(( attackTimes[i] * updateFreq ) / 1000UL ));
+ uint32_t scaledenvelen = (uint32_t)(/*floor*/((attackTimes[i] * updateFreq) / 1000UL));
if (scaledenvelen == 0)
scaledenvelen = 1;
attackRates[i] = attackTabLen / scaledenvelen;
- attackRatesP[i] = (( attackTabLen % scaledenvelen ) * 65536UL ) / scaledenvelen;
+ attackRatesP[i] = ((attackTabLen % scaledenvelen) * 65536UL) / scaledenvelen;
- scaledenvelen = (uint32_t)(/*floor*/(( decayReleaseTimes[i] * updateFreq ) / 1000UL ));
+ scaledenvelen = (uint32_t)(/*floor*/((decayReleaseTimes[i] * updateFreq) / 1000UL));
if (scaledenvelen == 0)
scaledenvelen = 1;
decayReleaseRates[i] = releaseTabLen / scaledenvelen;
- decayReleaseRatesP[i] = (( releaseTabLen % scaledenvelen ) * 65536UL ) / scaledenvelen;
+ decayReleaseRatesP[i] = ((releaseTabLen % scaledenvelen) * 65536UL) / scaledenvelen;
#endif
}
}
@@ -249,7 +249,7 @@ static inline void enveEmuEnveAdvance(sidOperator* pVoice)
pVoice->enveStep.l += pVoice->enveStepAdd.l;
#else
pVoice->enveStepPnt += pVoice->enveStepAddPnt;
- pVoice->enveStep += pVoice->enveStepAdd + ( pVoice->enveStepPnt > 65535 );
+ pVoice->enveStep += pVoice->enveStepAdd + (pVoice->enveStepPnt > 65535);
pVoice->enveStepPnt &= 0xFFFF;
#endif
}
@@ -274,9 +274,9 @@ static inline uint16_t enveEmuRelease(sidOperator* pVoice)
pVoice->enveStep = (uint16_t)pVoice->fenveStep;
#endif
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- if ( pVoice->enveStep.w[HI] >= releaseTabLen )
+ if (pVoice->enveStep.w.h >= releaseTabLen)
#else
- if ( pVoice->enveStep >= releaseTabLen )
+ if (pVoice->enveStep >= releaseTabLen)
#endif
{
pVoice->enveVol = releaseTab[releaseTabLen -1];
@@ -285,7 +285,7 @@ static inline uint16_t enveEmuRelease(sidOperator* pVoice)
else
{
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- pVoice->enveVol = releaseTab[pVoice->enveStep.w[HI]];
+ pVoice->enveVol = releaseTab[pVoice->enveStep.w.h];
#else
pVoice->enveVol = releaseTab[pVoice->enveStep];
#endif
@@ -315,8 +315,8 @@ static inline uint16_t enveEmuStartRelease(sidOperator* pVoice)
#ifdef SID_FPUENVE
pVoice->fenveStep = releasePos[pVoice->enveVol];
#elif defined(DIRECT_FIXPOINT)
- pVoice->enveStep.w[HI] = releasePos[pVoice->enveVol];
- pVoice->enveStep.w[LO] = 0;
+ pVoice->enveStep.w.h = releasePos[pVoice->enveVol];
+ pVoice->enveStep.w.l = 0;
#else
pVoice->enveStep = releasePos[pVoice->enveVol];
pVoice->enveStepPnt = 0;
@@ -339,9 +339,9 @@ static inline uint16_t enveEmuSustainDecay(sidOperator* pVoice)
pVoice->enveStep = (uint16_t)pVoice->fenveStep;
#endif
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- if ( pVoice->enveStep.w[HI] >= releaseTabLen )
+ if (pVoice->enveStep.w.h >= releaseTabLen)
#else
- if ( pVoice->enveStep >= releaseTabLen )
+ if (pVoice->enveStep >= releaseTabLen)
#endif
{
pVoice->enveVol = releaseTab[releaseTabLen-1];
@@ -350,12 +350,12 @@ static inline uint16_t enveEmuSustainDecay(sidOperator* pVoice)
else
{
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- pVoice->enveVol = releaseTab[pVoice->enveStep.w[HI]];
+ pVoice->enveVol = releaseTab[pVoice->enveStep.w.h];
#else
pVoice->enveVol = releaseTab[pVoice->enveStep];
#endif
/* Will be controlled from sidEmuSet2(). */
- if ( pVoice->enveVol <= pVoice->enveSusVol )
+ if (pVoice->enveVol <= pVoice->enveSusVol)
{
pVoice->enveVol = pVoice->enveSusVol;
return enveEmuAlterSustain(pVoice);
@@ -387,7 +387,7 @@ static inline uint16_t enveEmuAlterSustainDecay(sidOperator* pVoice)
/* This is the same as enveEmuStartSustain(). */
static inline uint16_t enveEmuAlterSustain(sidOperator* pVoice)
{
- if ( pVoice->enveVol > pVoice->enveSusVol )
+ if (pVoice->enveVol > pVoice->enveSusVol)
{
pVoice->ADSRctrl = ENVE_SUSTAINDECAY;
pVoice->ADSRproc = &enveEmuSustainDecay;
@@ -411,9 +411,9 @@ static inline uint16_t enveEmuDecay(sidOperator* pVoice)
pVoice->enveStep = (uint16_t)pVoice->fenveStep;
#endif
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- if ( pVoice->enveStep.w[HI] >= releaseTabLen )
+ if (pVoice->enveStep.w.h >= releaseTabLen)
#else
- if ( pVoice->enveStep >= releaseTabLen )
+ if (pVoice->enveStep >= releaseTabLen)
#endif
{
pVoice->enveVol = pVoice->enveSusVol;
@@ -422,12 +422,12 @@ static inline uint16_t enveEmuDecay(sidOperator* pVoice)
else
{
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- pVoice->enveVol = releaseTab[pVoice->enveStep.w[HI]];
+ pVoice->enveVol = releaseTab[pVoice->enveStep.w.h];
#else
pVoice->enveVol = releaseTab[pVoice->enveStep];
#endif
/* Will be controlled from sidEmuSet2(). */
- if ( pVoice->enveVol <= pVoice->enveSusVol )
+ if (pVoice->enveVol <= pVoice->enveSusVol)
{
pVoice->enveVol = pVoice->enveSusVol;
return enveEmuAlterSustain(pVoice); /* start sustain */
@@ -478,15 +478,15 @@ static inline uint16_t enveEmuAttack(sidOperator* pVoice)
pVoice->enveStep = (uint16_t)pVoice->fenveStep;
#endif
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- if ( pVoice->enveStep.w[HI] > attackTabLen )
+ if (pVoice->enveStep.w.h > attackTabLen)
#else
- if ( pVoice->enveStep >= attackTabLen )
+ if (pVoice->enveStep >= attackTabLen)
#endif
return enveEmuStartDecay(pVoice);
else
{
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- pVoice->enveVol = pVoice->enveStep.w[HI];
+ pVoice->enveVol = pVoice->enveStep.w.h;
#else
pVoice->enveVol = pVoice->enveStep;
#endif
@@ -516,8 +516,8 @@ static inline uint16_t enveEmuStartAttack(sidOperator* pVoice)
#ifdef SID_FPUENVE
pVoice->fenveStep = (float)pVoice->enveVol;
#elif defined(DIRECT_FIXPOINT)
- pVoice->enveStep.w[HI] = pVoice->enveVol;
- pVoice->enveStep.w[LO] = 0;
+ pVoice->enveStep.w.h = pVoice->enveVol;
+ pVoice->enveStep.w.l = 0;
#else
pVoice->enveStep = pVoice->enveVol;
pVoice->enveStepPnt = 0;
@@ -538,7 +538,7 @@ static inline uint16_t enveEmuShortAttack(sidOperator* pVoice)
pVoice->enveStep = (uint16_t)pVoice->fenveStep;
#endif
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- if ((pVoice->enveStep.w[HI] > attackTabLen) ||
+ if ((pVoice->enveStep.w.h > attackTabLen) ||
(pVoice->enveShortAttackCount == 0))
#else
if ((pVoice->enveStep >= attackTabLen) ||
@@ -547,7 +547,7 @@ static inline uint16_t enveEmuShortAttack(sidOperator* pVoice)
/* return enveEmuStartRelease(pVoice); */
return enveEmuStartDecay(pVoice);
#if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE)
- pVoice->enveVol = pVoice->enveStep.w[HI];
+ pVoice->enveVol = pVoice->enveStep.w.h;
#else
pVoice->enveVol = pVoice->enveStep;
#endif
@@ -578,8 +578,8 @@ static inline uint16_t enveEmuStartShortAttack(sidOperator* pVoice)
#ifdef SID_FPUENVE
pVoice->fenveStep = (float)pVoice->enveVol;
#elif defined(DIRECT_FIXPOINT)
- pVoice->enveStep.w[HI] = pVoice->enveVol;
- pVoice->enveStep.w[LO] = 0;
+ pVoice->enveStep.w.h = pVoice->enveVol;
+ pVoice->enveStep.w.l = 0;
#else
pVoice->enveStep = pVoice->enveVol;
pVoice->enveStepPnt = 0;
diff --git a/src/devices/sound/sidvoice.cpp b/src/devices/sound/sidvoice.cpp
index 9bc9a720ca7..9135e36c6f8 100644
--- a/src/devices/sound/sidvoice.cpp
+++ b/src/devices/sound/sidvoice.cpp
@@ -34,18 +34,15 @@ static const uint32_t noiseSeed = 0x7ffff8;
void sidInitMixerEngine(running_machine &machine)
{
- uint16_t uk;
- int32_t si, sj ;
-
/* 8-bit volume modulation tables. */
float filterAmpl = 0.7f;
- ampMod1x8=std::make_unique<int8_t[]>(256*256);
+ ampMod1x8 = std::make_unique<int8_t[]>(256*256);
- uk = 0;
- for ( si = 0; si < 256; si++ )
+ uint16_t uk = 0;
+ for (int32_t si = 0; si < 256; si++)
{
- for ( sj = -128; sj < 128; sj++, uk++ )
+ for (int32_t sj = -128; sj < 128; sj++, uk++)
{
ampMod1x8[uk] = (int8_t)(((si*sj)/255)*filterAmpl);
}
@@ -57,11 +54,11 @@ static inline void waveAdvance(sidOperator* pVoice)
{
#if defined(DIRECT_FIXPOINT)
pVoice->waveStep.l += pVoice->waveStepAdd.l;
- pVoice->waveStep.w[HI] &= 4095;
+ pVoice->waveStep.w.h &= 4095;
#else
pVoice->waveStepPnt += pVoice->waveStepAddPnt;
pVoice->waveStep += pVoice->waveStepAdd;
- if (pVoice->waveStepPnt > 65535 ) pVoice->waveStep++;
+ if (pVoice->waveStepPnt > 65535) pVoice->waveStep++;
pVoice->waveStepPnt &= 0xFFFF;
pVoice->waveStep &= 4095;
#endif
@@ -70,9 +67,9 @@ static inline void waveAdvance(sidOperator* pVoice)
static inline void noiseAdvance(sidOperator* pVoice)
{
pVoice->noiseStep += pVoice->noiseStepAdd;
- if (pVoice->noiseStep >= (1L<<20))
+ if (pVoice->noiseStep >= (1L << 20))
{
- pVoice->noiseStep -= (1L<<20);
+ pVoice->noiseStep -= (1L << 20);
#if defined(DIRECT_FIXPOINT)
pVoice->noiseReg.l = (pVoice->noiseReg.l << 1) |
(((pVoice->noiseReg.l >> 22) ^ (pVoice->noiseReg.l >> 17)) & 1);
@@ -81,16 +78,16 @@ static inline void noiseAdvance(sidOperator* pVoice)
(((pVoice->noiseReg >> 22) ^ (pVoice->noiseReg >> 17)) & 1);
#endif
#if defined(DIRECT_FIXPOINT) && defined(LARGE_NOISE_TABLE)
- pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.w[LO]]
- |noiseTableMSB[pVoice->noiseReg.w[HI]&0xff]);
+ pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.w.l]
+ |noiseTableMSB[pVoice->noiseReg.w.h & 0xff]);
#elif defined(DIRECT_FIXPOINT)
- pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.b[LOLO]]
- |noiseTableMID[pVoice->noiseReg.b[LOHI]]
- |noiseTableMSB[pVoice->noiseReg.b[HILO]]);
+ pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.b.l]
+ |noiseTableMID[pVoice->noiseReg.b.h]
+ |noiseTableMSB[pVoice->noiseReg.b.h2]);
#else
- pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg&0xff]
- |noiseTableMID[pVoice->noiseReg>>8&0xff]
- |noiseTableMSB[pVoice->noiseReg>>16&0xff]);
+ pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg & 0xff]
+ |noiseTableMID[pVoice->noiseReg >> 8 & 0xff]
+ |noiseTableMSB[pVoice->noiseReg >> 16 & 0xff]);
#endif
}
}
@@ -98,9 +95,9 @@ static inline void noiseAdvance(sidOperator* pVoice)
static inline void noiseAdvanceHp(sidOperator* pVoice)
{
uint32_t tmp = pVoice->noiseStepAdd;
- while (tmp >= (1L<<20))
+ while (tmp >= (1L << 20))
{
- tmp -= (1L<<20);
+ tmp -= (1L << 20);
#if defined(DIRECT_FIXPOINT)
pVoice->noiseReg.l = (pVoice->noiseReg.l << 1) |
(((pVoice->noiseReg.l >> 22) ^ (pVoice->noiseReg.l >> 17)) & 1);
@@ -110,9 +107,9 @@ static inline void noiseAdvanceHp(sidOperator* pVoice)
#endif
}
pVoice->noiseStep += tmp;
- if (pVoice->noiseStep >= (1L<<20))
+ if (pVoice->noiseStep >= (1L << 20))
{
- pVoice->noiseStep -= (1L<<20);
+ pVoice->noiseStep -= (1L << 20);
#if defined(DIRECT_FIXPOINT)
pVoice->noiseReg.l = (pVoice->noiseReg.l << 1) |
(((pVoice->noiseReg.l >> 22) ^ (pVoice->noiseReg.l >> 17)) & 1);
@@ -122,28 +119,28 @@ static inline void noiseAdvanceHp(sidOperator* pVoice)
#endif
}
#if defined(DIRECT_FIXPOINT) && defined(LARGE_NOISE_TABLE)
- pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.w[LO]]
- |noiseTableMSB[pVoice->noiseReg.w[HI]&0xff]);
+ pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.w.l]
+ |noiseTableMSB[pVoice->noiseReg.w.h & 0xff]);
#elif defined(DIRECT_FIXPOINT)
- pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.b[LOLO]]
- |noiseTableMID[pVoice->noiseReg.b[LOHI]]
- |noiseTableMSB[pVoice->noiseReg.b[HILO]]);
+ pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg.b.l]
+ |noiseTableMID[pVoice->noiseReg.b.h]
+ |noiseTableMSB[pVoice->noiseReg.b.h2]);
#else
- pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg&0xff]
- |noiseTableMID[pVoice->noiseReg>>8&0xff]
- |noiseTableMSB[pVoice->noiseReg>>16&0xff]);
+ pVoice->noiseOutput = (noiseTableLSB[pVoice->noiseReg & 0xff]
+ |noiseTableMID[pVoice->noiseReg >> 8 & 0xff]
+ |noiseTableMSB[pVoice->noiseReg >> 16 & 0xff]);
#endif
}
#if defined(DIRECT_FIXPOINT)
- #define triangle triangleTable[pVoice->waveStep.w[HI]]
- #define sawtooth sawtoothTable[pVoice->waveStep.w[HI]]
- #define square squareTable[pVoice->waveStep.w[HI] + pVoice->pulseIndex]
- #define triSaw waveform30[pVoice->waveStep.w[HI]]
- #define triSquare waveform50[pVoice->waveStep.w[HI] + pVoice->SIDpulseWidth]
- #define sawSquare waveform60[pVoice->waveStep.w[HI] + pVoice->SIDpulseWidth]
- #define triSawSquare waveform70[pVoice->waveStep.w[HI] + pVoice->SIDpulseWidth]
+ #define triangle triangleTable[pVoice->waveStep.w.h]
+ #define sawtooth sawtoothTable[pVoice->waveStep.w.h]
+ #define square squareTable[pVoice->waveStep.w.h + pVoice->pulseIndex]
+ #define triSaw waveform30[pVoice->waveStep.w.h]
+ #define triSquare waveform50[pVoice->waveStep.w.h + pVoice->SIDpulseWidth]
+ #define sawSquare waveform60[pVoice->waveStep.w.h + pVoice->SIDpulseWidth]
+ #define triSawSquare waveform70[pVoice->waveStep.w.h + pVoice->SIDpulseWidth]
#else
#define triangle triangleTable[pVoice->waveStep]
#define sawtooth sawtoothTable[pVoice->waveStep]
@@ -155,61 +152,72 @@ static inline void noiseAdvanceHp(sidOperator* pVoice)
#endif
-static void sidMode00(sidOperator* pVoice) {
- pVoice->output = (pVoice->filtIO-0x80);
+static void sidMode00(sidOperator* pVoice)
+{
+ pVoice->output = (pVoice->filtIO - 0x80);
waveAdvance(pVoice);
}
#if 0
/* not used */
-static void sidModeReal00(sidOperator* pVoice) {
+static void sidModeReal00(sidOperator* pVoice)
+{
pVoice->output = 0;
waveAdvance(pVoice);
}
#endif
-static void sidMode10(sidOperator* pVoice) {
+static void sidMode10(sidOperator* pVoice)
+{
pVoice->output = triangle;
waveAdvance(pVoice);
}
-static void sidMode20(sidOperator* pVoice) {
+static void sidMode20(sidOperator* pVoice)
+{
pVoice->output = sawtooth;
waveAdvance(pVoice);
}
-static void sidMode30(sidOperator* pVoice) {
+static void sidMode30(sidOperator* pVoice)
+{
pVoice->output = triSaw;
waveAdvance(pVoice);
}
-static void sidMode40(sidOperator* pVoice) {
+static void sidMode40(sidOperator* pVoice)
+{
pVoice->output = square;
waveAdvance(pVoice);
}
-static void sidMode50(sidOperator* pVoice) {
+static void sidMode50(sidOperator* pVoice)
+{
pVoice->output = triSquare;
waveAdvance(pVoice);
}
-static void sidMode60(sidOperator* pVoice) {
+static void sidMode60(sidOperator* pVoice)
+{
pVoice->output = sawSquare;
waveAdvance(pVoice);
}
-static void sidMode70(sidOperator* pVoice) {
+static void sidMode70(sidOperator* pVoice)
+{
pVoice->output = triSawSquare;
waveAdvance(pVoice);
}
-static void sidMode80(sidOperator* pVoice) {
+static void sidMode80(sidOperator* pVoice)
+{
pVoice->output = pVoice->noiseOutput;
waveAdvance(pVoice);
noiseAdvance(pVoice);
}
-static void sidMode80hp(sidOperator* pVoice) {
+static void sidMode80hp(sidOperator* pVoice)
+{
pVoice->output = pVoice->noiseOutput;
waveAdvance(pVoice);
noiseAdvanceHp(pVoice);
@@ -218,7 +226,7 @@ static void sidMode80hp(sidOperator* pVoice) {
static void sidModeLock(sidOperator* pVoice)
{
pVoice->noiseIsLocked = true;
- pVoice->output = (pVoice->filtIO-0x80);
+ pVoice->output = (pVoice->filtIO - 0x80);
waveAdvance(pVoice);
}
@@ -229,9 +237,9 @@ static void sidModeLock(sidOperator* pVoice)
static void sidMode14(sidOperator* pVoice)
{
#if defined(DIRECT_FIXPOINT)
- if ( pVoice->modulator->waveStep.w[HI] < 2048 )
+ if (pVoice->modulator->waveStep.w.h < 2048)
#else
- if ( pVoice->modulator->waveStep < 2048 )
+ if (pVoice->modulator->waveStep < 2048)
#endif
pVoice->output = triangle;
else
@@ -239,11 +247,12 @@ static void sidMode14(sidOperator* pVoice)
waveAdvance(pVoice);
}
-static void sidMode34(sidOperator* pVoice) {
+static void sidMode34(sidOperator* pVoice)
+{
#if defined(DIRECT_FIXPOINT)
- if ( pVoice->modulator->waveStep.w[HI] < 2048 )
+ if (pVoice->modulator->waveStep.w.h < 2048)
#else
- if ( pVoice->modulator->waveStep < 2048 )
+ if (pVoice->modulator->waveStep < 2048)
#endif
pVoice->output = triSaw;
else
@@ -251,11 +260,12 @@ static void sidMode34(sidOperator* pVoice) {
waveAdvance(pVoice);
}
-static void sidMode54(sidOperator* pVoice) {
+static void sidMode54(sidOperator* pVoice)
+{
#if defined(DIRECT_FIXPOINT)
- if ( pVoice->modulator->waveStep.w[HI] < 2048 )
+ if (pVoice->modulator->waveStep.w.h < 2048)
#else
- if ( pVoice->modulator->waveStep < 2048 )
+ if (pVoice->modulator->waveStep < 2048)
#endif
pVoice->output = triSquare;
else
@@ -263,11 +273,12 @@ static void sidMode54(sidOperator* pVoice) {
waveAdvance(pVoice);
}
-static void sidMode74(sidOperator* pVoice) {
+static void sidMode74(sidOperator* pVoice)
+{
#if defined(DIRECT_FIXPOINT)
- if ( pVoice->modulator->waveStep.w[HI] < 2048 )
+ if (pVoice->modulator->waveStep.w.h < 2048)
#else
- if ( pVoice->modulator->waveStep < 2048 )
+ if (pVoice->modulator->waveStep < 2048)
#endif
pVoice->output = triSawSquare;
else
@@ -281,26 +292,26 @@ static void sidMode74(sidOperator* pVoice) {
static inline void waveCalcFilter(sidOperator* pVoice)
{
- if ( pVoice->filtEnabled )
+ if (pVoice->filtEnabled)
{
- if ( pVoice->sid->filter.Type != 0 )
+ if (pVoice->sid->filter.Type != 0)
{
- if ( pVoice->sid->filter.Type == 0x20 )
+ if (pVoice->sid->filter.Type == 0x20)
{
float tmp;
- pVoice->filtLow += ( pVoice->filtRef * pVoice->sid->filter.Dy );
+ pVoice->filtLow += (pVoice->filtRef * pVoice->sid->filter.Dy);
tmp = (float)pVoice->filtIO - pVoice->filtLow;
tmp -= pVoice->filtRef * pVoice->sid->filter.ResDy;
- pVoice->filtRef += ( tmp * (pVoice->sid->filter.Dy) );
+ pVoice->filtRef += (tmp * (pVoice->sid->filter.Dy));
pVoice->filtIO = (int8_t)(pVoice->filtRef-pVoice->filtLow/4);
}
else if (pVoice->sid->filter.Type == 0x40)
{
float tmp, tmp2;
- pVoice->filtLow += ( pVoice->filtRef * pVoice->sid->filter.Dy * 0.1f );
+ pVoice->filtLow += (pVoice->filtRef * pVoice->sid->filter.Dy * 0.1f);
tmp = (float)pVoice->filtIO - pVoice->filtLow;
tmp -= pVoice->filtRef * pVoice->sid->filter.ResDy;
- pVoice->filtRef += ( tmp * (pVoice->sid->filter.Dy) );
+ pVoice->filtRef += (tmp * (pVoice->sid->filter.Dy));
tmp2 = pVoice->filtRef - pVoice->filtIO/8;
if (tmp2 < -128)
tmp2 = -128;
@@ -312,30 +323,30 @@ static inline void waveCalcFilter(sidOperator* pVoice)
{
float sample, sample2;
int tmp;
- pVoice->filtLow += ( pVoice->filtRef * pVoice->sid->filter.Dy );
+ pVoice->filtLow += (pVoice->filtRef * pVoice->sid->filter.Dy);
sample = pVoice->filtIO;
sample2 = sample - pVoice->filtLow;
tmp = (int)sample2;
sample2 -= pVoice->filtRef * pVoice->sid->filter.ResDy;
- pVoice->filtRef += ( sample2 * pVoice->sid->filter.Dy );
+ pVoice->filtRef += (sample2 * pVoice->sid->filter.Dy);
- if ( pVoice->sid->filter.Type == 0x10 )
+ if (pVoice->sid->filter.Type == 0x10)
{
pVoice->filtIO = (int8_t)pVoice->filtLow;
}
- else if ( pVoice->sid->filter.Type == 0x30 )
+ else if (pVoice->sid->filter.Type == 0x30)
{
pVoice->filtIO = (int8_t)pVoice->filtLow;
}
- else if ( pVoice->sid->filter.Type == 0x50 )
+ else if (pVoice->sid->filter.Type == 0x50)
{
pVoice->filtIO = (int8_t)(sample - (tmp >> 1));
}
- else if ( pVoice->sid->filter.Type == 0x60 )
+ else if (pVoice->sid->filter.Type == 0x60)
{
pVoice->filtIO = (int8_t)tmp;
}
- else if ( pVoice->sid->filter.Type == 0x70 )
+ else if (pVoice->sid->filter.Type == 0x70)
{
pVoice->filtIO = (int8_t)(sample - (tmp >> 1));
}
@@ -358,9 +369,9 @@ static int8_t waveCalcMute(sidOperator* pVoice)
static int8_t waveCalcRangeCheck(sidOperator* pVoice)
{
#if defined(DIRECT_FIXPOINT)
- pVoice->waveStepOld = pVoice->waveStep.w[HI];
+ pVoice->waveStepOld = pVoice->waveStep.w.h;
(*pVoice->waveProc)(pVoice);
- if (pVoice->waveStep.w[HI] < pVoice->waveStepOld)
+ if (pVoice->waveStep.w.h < pVoice->waveStepOld)
#else
pVoice->waveStepOld = pVoice->waveStep;
(*pVoice->waveProc)(pVoice);
@@ -371,7 +382,7 @@ static int8_t waveCalcRangeCheck(sidOperator* pVoice)
pVoice->cycleLenCount = 0;
pVoice->outProc = &sidOperator::wave_calc_normal;
#if defined(DIRECT_FIXPOINT)
- pVoice->waveStep.w[HI] = 4095;
+ pVoice->waveStep.w.h = 4095;
#else
pVoice->waveStep = 4095;
#endif
@@ -457,11 +468,11 @@ void sidOperator::set()
SIDpulseWidth = (reg[2] | (reg[3] << 8)) & 0x0FFF;
newPulseIndex = 4096 - SIDpulseWidth;
#if defined(DIRECT_FIXPOINT)
- if (((waveStep.w[HI] + pulseIndex) >= 0x1000) && ((waveStep.w[HI] + newPulseIndex) >= 0x1000))
+ if (((waveStep.w.h + pulseIndex) >= 0x1000) && ((waveStep.w.h + newPulseIndex) >= 0x1000))
{
pulseIndex = newPulseIndex;
}
- else if (((waveStep.w[HI] + pulseIndex) < 0x1000) && ((waveStep.w[HI] + newPulseIndex) < 0x1000))
+ else if (((waveStep.w.h + pulseIndex) < 0x1000) && ((waveStep.w.h + newPulseIndex) < 0x1000))
{
pulseIndex = newPulseIndex;
}
@@ -598,7 +609,7 @@ void sidOperator::set2()
if (SIDctrl & 2)
{
- if (!modulator->SIDfreq || (modulator->SIDctrl & 8 ))
+ if (!modulator->SIDfreq || (modulator->SIDctrl & 8))
{
}
else if ((carrier->SIDctrl & 2) && (modulator->SIDfreq >= (SIDfreq << 1)))
@@ -610,7 +621,7 @@ void sidOperator::set2()
}
}
- if (((SIDctrl & 0x14 ) == 0x14) && modulator->SIDfreq)
+ if (((SIDctrl & 0x14) == 0x14) && modulator->SIDfreq)
waveProc = sidModeRingTable[SIDctrl >> 4];
else
waveProc = sidModeNormalTable[SIDctrl >> 4];
@@ -629,7 +640,7 @@ int8_t sidOperator::wave_calc_normal(sidOperator* pVoice)
if (pVoice->pulseIndex > 2048)
{
#if defined(DIRECT_FIXPOINT)
- pVoice->waveStep.w[HI] = 0;
+ pVoice->waveStep.w.h = 0;
#else
pVoice->waveStep = 0;
#endif
@@ -648,9 +659,9 @@ int8_t sidOperator::wave_calc_normal(sidOperator* pVoice)
inline void sidOperator::wave_calc_cycle_len()
{
#if defined(DIRECT_FIXPOINT)
- cycleAddLen.w[HI] = 0;
+ cycleAddLen.w.h = 0;
cycleAddLen.l += cycleLen.l;
- cycleLenCount = cycleAddLen.w[HI];
+ cycleLenCount = cycleAddLen.w.h;
#else
cycleAddLenPnt += cycleLenPnt;
cycleLenCount = cycleLen;
@@ -673,7 +684,7 @@ inline void sidOperator::wave_calc_cycle_len()
#endif
{
#if defined(DIRECT_FIXPOINT)
- uint16_t diff = cycleLenCount - cycleLen.w[HI];
+ uint16_t diff = cycleLenCount - cycleLen.w.h;
#else
uint16_t diff = cycleLenCount - cycleLen;
#endif
@@ -706,25 +717,25 @@ void sidInitWaveformTables(int type)
uint16_t k;
k = 0;
- for ( i = 0; i < 256; i++ )
- for ( j = 0; j < 8; j++ )
+ for (i = 0; i < 256; i++)
+ for (j = 0; j < 8; j++)
triangleTable[k++] = i;
- for ( i = 255; i >= 0; i-- )
- for ( j = 0; j < 8; j++ )
+ for (i = 255; i >= 0; i--)
+ for (j = 0; j < 8; j++)
triangleTable[k++] = i;
k = 0;
- for ( i = 0; i < 256; i++ )
- for ( j = 0; j < 16; j++ )
+ for (i = 0; i < 256; i++)
+ for (j = 0; j < 16; j++)
sawtoothTable[k++] = i;
k = 0;
- for ( i = 0; i < 4096; i++ )
+ for (i = 0; i < 4096; i++)
squareTable[k++] = 255; //0; my estimation; especial for digi sound
- for ( i = 0; i < 4096; i++ )
+ for (i = 0; i < 4096; i++)
squareTable[k++] = 0; //255;
- if ( type==mos6581_device::TYPE_8580 )
+ if (type == mos6581_device::TYPE_8580)
{
waveform30 = waveform30_8580;
waveform50 = waveform50_8580;
@@ -739,7 +750,7 @@ void sidInitWaveformTables(int type)
waveform70 = waveform70_6581; /* really audible? */
}
- if ( type==mos6581_device::TYPE_8580 )
+ if (type == mos6581_device::TYPE_8580)
{
sidModeNormalTable[3] = sidMode30;
sidModeNormalTable[6] = sidMode60;
diff --git a/src/devices/sound/sidvoice.h b/src/devices/sound/sidvoice.h
index c2cb00a5225..173b5c070fd 100644
--- a/src/devices/sound/sidvoice.h
+++ b/src/devices/sound/sidvoice.h
@@ -49,7 +49,7 @@ struct sidOperator
int32_t cycleLenCount;
#if defined(DIRECT_FIXPOINT)
- cpuLword cycleLen, cycleAddLen;
+ PAIR cycleLen, cycleAddLen;
#else
uint32_t cycleAddLenPnt;
uint16_t cycleLen, cycleLenPnt;
@@ -59,7 +59,7 @@ struct sidOperator
void (*waveProc)(sidOperator *);
#if defined(DIRECT_FIXPOINT)
- cpuLword waveStep, waveStepAdd;
+ PAIR waveStep, waveStepAdd;
#else
uint16_t waveStep, waveStepAdd;
uint32_t waveStepPnt, waveStepAddPnt;
@@ -67,10 +67,8 @@ struct sidOperator
uint16_t waveStepOld;
sw_storage wavePre[2];
-#if defined(DIRECT_FIXPOINT) && defined(LARGE_NOISE_TABLE)
- cpuLword noiseReg;
-#elif defined(DIRECT_FIXPOINT)
- cpuLBword noiseReg;
+#if defined(DIRECT_FIXPOINT)
+ PAIR noiseReg;
#else
uint32_t noiseReg;
#endif
@@ -86,7 +84,7 @@ struct sidOperator
float fenveStep, fenveStepAdd;
uint32_t enveStep;
#elif defined(DIRECT_FIXPOINT)
- cpuLword enveStep, enveStepAdd;
+ PAIR enveStep, enveStepAdd;
#else
uint16_t enveStep, enveStepAdd;
uint32_t enveStepPnt, enveStepAddPnt;