summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/sound/sidvoice.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/sound/sidvoice.h')
-rw-r--r--trunk/src/emu/sound/sidvoice.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/trunk/src/emu/sound/sidvoice.h b/trunk/src/emu/sound/sidvoice.h
new file mode 100644
index 00000000000..58e6ca856b5
--- /dev/null
+++ b/trunk/src/emu/sound/sidvoice.h
@@ -0,0 +1,118 @@
+#pragma once
+
+#ifndef __SIDVOICE_H__
+#define __SIDVOICE_H__
+
+
+/*
+ approximation of the sid6581 chip
+ this part is for 1 (of the 3) voices of a chip
+*/
+#include "sound/sid6581.h"
+
+struct sw_storage
+{
+ UINT16 len;
+#if defined(DIRECT_FIXPOINT)
+ UINT32 stp;
+#else
+ UINT32 pnt;
+ INT16 stp;
+#endif
+};
+
+struct __SID6581;
+
+typedef struct _sidOperator
+{
+ struct __SID6581 *sid;
+ UINT8 reg[7];
+ UINT32 SIDfreq;
+ UINT16 SIDpulseWidth;
+ UINT8 SIDctrl;
+ UINT8 SIDAD, SIDSR;
+
+ struct _sidOperator* carrier;
+ struct _sidOperator* modulator;
+ int sync;
+
+ UINT16 pulseIndex, newPulseIndex;
+ UINT16 curSIDfreq;
+ UINT16 curNoiseFreq;
+
+ UINT8 output;//, outputMask;
+
+ char filtVoiceMask;
+ int filtEnabled;
+ float filtLow, filtRef;
+ INT8 filtIO;
+
+ INT32 cycleLenCount;
+#if defined(DIRECT_FIXPOINT)
+ cpuLword cycleLen, cycleAddLen;
+#else
+ UINT32 cycleAddLenPnt;
+ UINT16 cycleLen, cycleLenPnt;
+#endif
+
+ INT8(*outProc)(struct _sidOperator *);
+ void(*waveProc)(struct _sidOperator *);
+
+#if defined(DIRECT_FIXPOINT)
+ cpuLword waveStep, waveStepAdd;
+#else
+ UINT16 waveStep, waveStepAdd;
+ UINT32 waveStepPnt, waveStepAddPnt;
+#endif
+ UINT16 waveStepOld;
+ struct sw_storage wavePre[2];
+
+#if defined(DIRECT_FIXPOINT) && defined(LARGE_NOISE_TABLE)
+ cpuLword noiseReg;
+#elif defined(DIRECT_FIXPOINT)
+ cpuLBword noiseReg;
+#else
+ UINT32 noiseReg;
+#endif
+ UINT32 noiseStep, noiseStepAdd;
+ UINT8 noiseOutput;
+ int noiseIsLocked;
+
+ UINT8 ADSRctrl;
+// int gateOnCtrl, gateOffCtrl;
+ UINT16 (*ADSRproc)(struct _sidOperator *);
+
+#ifdef SID_FPUENVE
+ float fenveStep, fenveStepAdd;
+ UINT32 enveStep;
+#elif defined(DIRECT_FIXPOINT)
+ cpuLword enveStep, enveStepAdd;
+#else
+ UINT16 enveStep, enveStepAdd;
+ UINT32 enveStepPnt, enveStepAddPnt;
+#endif
+ UINT8 enveVol, enveSusVol;
+ UINT16 enveShortAttackCount;
+} sidOperator;
+
+typedef INT8 (*ptr2sidFunc)(sidOperator *);
+typedef UINT16 (*ptr2sidUwordFunc)(sidOperator *);
+typedef void (*ptr2sidVoidFunc)(sidOperator *);
+
+void sidClearOperator( sidOperator* pVoice );
+
+void sidEmuSet(sidOperator* pVoice);
+void sidEmuSet2(sidOperator* pVoice);
+INT8 sidWaveCalcNormal(sidOperator* pVoice);
+
+void sidInitWaveformTables(SIDTYPE type);
+void sidInitMixerEngine(running_machine &machine);
+
+#if 0
+extern ptr2sidVoidFunc sid6581ModeNormalTable[16];
+extern ptr2sidVoidFunc sid6581ModeRingTable[16];
+extern ptr2sidVoidFunc sid8580ModeNormalTable[16];
+extern ptr2sidVoidFunc sid8580ModeRingTable[16];
+#endif
+
+#endif /* __SIDVOICE_H__ */