64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
|
#ifndef OPL_APU_H
|
||
|
#define OPL_APU_H
|
||
|
|
||
|
#include "blargg_common.h"
|
||
|
#include "Blip_Buffer.h"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
class Opl_Apu {
|
||
|
public:
|
||
|
Opl_Apu();
|
||
|
~Opl_Apu();
|
||
|
|
||
|
enum type_t { type_opll = 0x10, type_msxmusic = 0x11, type_smsfmunit = 0x12,
|
||
|
type_vrc7 = 0x13, type_opl = 0x20, type_msxaudio = 0x21, type_opl2 = 0x22 };
|
||
|
blargg_err_t init( long clock, long rate, blip_time_t period, type_t );
|
||
|
|
||
|
void reset();
|
||
|
void volume( double v ) { synth.volume( 1.0 / (4096 * 6) * v ); }
|
||
|
void treble_eq( blip_eq_t const& eq ) { synth.treble_eq( eq ); }
|
||
|
enum { osc_count = 1 };
|
||
|
void osc_output( int index, Blip_Buffer* );
|
||
|
void set_output( int i, Blip_Buffer* buf, Blip_Buffer* = NULL, Blip_Buffer* = NULL ) { osc_output( 0, buf ); }
|
||
|
void end_frame( blip_time_t );
|
||
|
|
||
|
void write_addr( int data ) { addr = data; }
|
||
|
void write_data( blip_time_t, int data );
|
||
|
|
||
|
int read( blip_time_t, int port );
|
||
|
|
||
|
static bool supported() { return true; }
|
||
|
|
||
|
private:
|
||
|
// noncopyable
|
||
|
Opl_Apu( const Opl_Apu& );
|
||
|
Opl_Apu& operator = ( const Opl_Apu& );
|
||
|
|
||
|
Blip_Buffer* output_;
|
||
|
type_t type_;
|
||
|
void* opl;
|
||
|
void* opl_memory;
|
||
|
//FILE* logfile;
|
||
|
unsigned char regs[ 0x100 ];
|
||
|
blip_time_t next_time;
|
||
|
int last_amp;
|
||
|
int addr;
|
||
|
|
||
|
long clock_;
|
||
|
long rate_;
|
||
|
blip_time_t period_;
|
||
|
|
||
|
Blip_Synth_Fast synth;
|
||
|
|
||
|
void run_until( blip_time_t );
|
||
|
};
|
||
|
|
||
|
inline void Opl_Apu::osc_output( int i, Blip_Buffer* buf )
|
||
|
{
|
||
|
assert( (unsigned) i < osc_count );
|
||
|
output_ = buf;
|
||
|
}
|
||
|
|
||
|
#endif
|