97 lines
4.5 KiB
C++
97 lines
4.5 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// FDS plugin //
|
||
// Norix //
|
||
// written 2001/09/18 //
|
||
// last modify ----/--/-- //
|
||
//////////////////////////////////////////////////////////////////////////
|
||
#ifndef __FDSPLUGIN_INCLUDED__
|
||
#define __FDSPLUGIN_INCLUDED__
|
||
|
||
#define WIN32_LEAN_AND_MEAN
|
||
#include "windows.h"
|
||
|
||
#include "typedef.h"
|
||
#include "macro.h"
|
||
|
||
#include "APU_INTERFACE.h"
|
||
|
||
class APU_FDS : public APU_INTERFACE
|
||
{
|
||
public:
|
||
APU_FDS();
|
||
~APU_FDS();
|
||
|
||
void Reset( FLOAT fClock, INT nRate );
|
||
void Setup( FLOAT fClock, INT nRate );
|
||
void Write( WORD addr, BYTE data );
|
||
BYTE Read ( WORD addr );
|
||
INT Process( INT channel );
|
||
|
||
void SyncWrite( WORD addr, BYTE data );
|
||
BYTE SyncRead ( WORD addr );
|
||
BOOL Sync( INT cycles );
|
||
|
||
INT GetFreq( INT channel );
|
||
|
||
INT GetStateSize();
|
||
void SaveState( LPBYTE p );
|
||
void LoadState( LPBYTE p );
|
||
protected:
|
||
typedef struct tagFDSSOUND {
|
||
BYTE reg[0x80];
|
||
|
||
BYTE volenv_mode; // Volume Envelope
|
||
BYTE volenv_gain;
|
||
BYTE volenv_decay;
|
||
double volenv_phaseacc;
|
||
|
||
BYTE swpenv_mode; // Sweep Envelope
|
||
BYTE swpenv_gain;
|
||
BYTE swpenv_decay;
|
||
double swpenv_phaseacc;
|
||
|
||
// For envelope unit
|
||
BYTE envelope_enable; // $4083 bit6
|
||
BYTE envelope_speed; // $408A
|
||
|
||
// For $4089
|
||
BYTE wave_setup; // bit7
|
||
INT master_volume; // bit1-0
|
||
|
||
// For Main unit
|
||
INT main_wavetable[64];
|
||
BYTE main_enable;
|
||
INT main_frequency;
|
||
INT main_addr;
|
||
|
||
// For Effector(LFO) unit
|
||
BYTE lfo_wavetable[64];
|
||
BYTE lfo_enable; // 0:Enable 1:Wavetable setup
|
||
INT lfo_frequency;
|
||
INT lfo_addr;
|
||
double lfo_phaseacc;
|
||
|
||
// For Sweep unit
|
||
INT sweep_bias;
|
||
|
||
// Misc
|
||
INT now_volume;
|
||
INT now_freq;
|
||
INT output;
|
||
|
||
} FDSSOUND, *LPFDSSOUND;
|
||
|
||
FDSSOUND fds;
|
||
FDSSOUND fds_sync;
|
||
|
||
INT sampling_rate;
|
||
INT output_buf[8];
|
||
|
||
// Write Sub
|
||
void WriteSub( WORD addr, BYTE data, FDSSOUND& ch, double rate );
|
||
private:
|
||
};
|
||
|
||
#endif // !__FDSPLUGIN_INCLUDED__
|