21 #ifndef AUDIO_SOFTSYNTH_OPL_DBOPL_H 22 #define AUDIO_SOFTSYNTH_OPL_DBOPL_H 24 #include "common/scummsys.h" 26 #ifndef DISABLE_DOSBOX_OPL 32 #define WAVE_HANDLER 10 34 #define WAVE_TABLELOG 11 36 #define WAVE_TABLEMUL 12 39 #define DBOPL_WAVE WAVE_TABLEMUL 51 typedef uint16 Bit16u;
54 typedef uint32 Bit32u;
57 #define GCC_UNLIKELY(x) (x) 65 #if (DBOPL_WAVE == WAVE_HANDLER) 66 typedef Bits ( DB_FASTCALL *WaveHandler) ( Bitu i, Bitu volume );
69 typedef Bits ( DBOPL::Operator::*VolumeHandler) ( );
70 typedef Channel* ( DBOPL::Channel::*SynthHandler) ( Chip* chip, Bit32u samples, Bit32s* output );
112 VolumeHandler volHandler;
114 #if (DBOPL_WAVE == WAVE_HANDLER) 115 WaveHandler waveHandler;
141 Bit8u reg20, reg40, reg60, reg80, regE0;
151 void SetState( Bit8u s );
152 void UpdateAttack(
const Chip* chip );
153 void UpdateRelease(
const Chip* chip );
154 void UpdateDecay(
const Chip* chip );
156 void UpdateAttenuation();
157 void UpdateRates(
const Chip* chip );
158 void UpdateFrequency( );
160 void Write20(
const Chip* chip, Bit8u val );
161 void Write40(
const Chip* chip, Bit8u val );
162 void Write60(
const Chip* chip, Bit8u val );
163 void Write80(
const Chip* chip, Bit8u val );
164 void WriteE0(
const Chip* chip, Bit8u val );
167 void Prepare(
const Chip* chip );
169 void KeyOn( Bit8u mask);
170 void KeyOff( Bit8u mask);
172 template< State state>
173 Bits TemplateVolume( );
175 Bit32s RateForward( Bit32u add );
177 Bitu ForwardVolume();
179 Bits GetSample( Bits modulation );
180 Bits GetWave( Bitu index, Bitu vol );
188 return &( (
this + (index >> 1) )->op[ index & 1 ]);
190 SynthHandler synthHandler;
203 void SetChanData(
const Chip* chip, Bit32u data );
205 void UpdateFrequency(
const Chip* chip, Bit8u fourOp );
206 void WriteA0(
const Chip* chip, Bit8u val );
207 void WriteB0(
const Chip* chip, Bit8u val );
208 void WriteC0(
const Chip* chip, Bit8u val );
209 void ResetC0(
const Chip* chip );
212 template<
bool opl3Mode >
213 void GeneratePercussion(
Chip* chip, Bit32s* output );
216 template<SynthMode mode>
217 Channel* BlockTemplate(
Chip* chip, Bit32u samples, Bit32s* output );
234 Bit32u linearRates[76];
236 Bit32u attackRates[76];
250 Bit8u vibratoStrength;
251 Bit8u tremoloStrength;
258 Bit32u ForwardLFO( Bit32u samples );
259 Bit32u ForwardNoise();
261 void WriteBD( Bit8u val );
262 void WriteReg(Bit32u reg, Bit8u val );
264 Bit32u WriteAddr( Bit32u port, Bit8u val );
266 void GenerateBlock2( Bitu samples, Bit32s* output );
267 void GenerateBlock3( Bitu samples, Bit32s* output );
269 void Generate( Bit32u samples );
270 void Setup( Bit32u r );
281 #endif // !DISABLE_DOSBOX_OPL