108 lines
4.5 KiB
C++
108 lines
4.5 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// SunSoft FME7 //
|
||
// Norix //
|
||
// written 2001/09/18 //
|
||
// last modify ----/--/-- //
|
||
//////////////////////////////////////////////////////////////////////////
|
||
#ifndef __APU_FME7_INCLUDED__
|
||
#define __APU_FME7_INCLUDED__
|
||
|
||
#define WIN32_LEAN_AND_MEAN
|
||
#include "windows.h"
|
||
|
||
#include "typedef.h"
|
||
#include "macro.h"
|
||
|
||
#include "APU_INTERFACE.h"
|
||
#include "nes.h"
|
||
|
||
class APU_FME7 : public APU_INTERFACE
|
||
{
|
||
public:
|
||
APU_FME7();
|
||
~APU_FME7();
|
||
|
||
void Reset( FLOAT fClock, INT nRate );
|
||
void Setup( FLOAT fClock, INT nRate );
|
||
void Write( WORD addr, BYTE data );
|
||
INT Process( INT channel );
|
||
|
||
INT GetFreq( INT channel );
|
||
|
||
INT GetStateSize();
|
||
void SaveState( LPBYTE p );
|
||
void LoadState( LPBYTE p );
|
||
protected:
|
||
typedef struct {
|
||
BYTE reg[3];
|
||
BYTE volume;
|
||
|
||
INT freq;
|
||
INT phaseacc;
|
||
INT envadr;
|
||
|
||
LPBYTE envtbl;
|
||
LPSBYTE envstep;
|
||
} ENVELOPE, *LPENVELOPE;
|
||
|
||
typedef struct {
|
||
INT freq;
|
||
INT phaseacc;
|
||
INT noiserange;
|
||
BYTE noiseout;
|
||
} NOISE, *LPNOISE;
|
||
|
||
typedef struct {
|
||
BYTE reg[3];
|
||
BYTE enable;
|
||
BYTE env_on;
|
||
BYTE noise_on;
|
||
BYTE adder;
|
||
BYTE volume;
|
||
|
||
INT freq;
|
||
INT phaseacc;
|
||
|
||
INT output_vol;
|
||
} CHANNEL, *LPCHANNEL;
|
||
|
||
void EnvelopeRender();
|
||
void NoiseRender();
|
||
|
||
INT ChannelRender( CHANNEL& ch );
|
||
|
||
ENVELOPE envelope;
|
||
NOISE noise;
|
||
CHANNEL op[3];
|
||
|
||
BYTE address;
|
||
|
||
INT vol_table[0x20];
|
||
INT cycle_rate;
|
||
|
||
FLOAT cpu_clock;
|
||
|
||
// Tables
|
||
static BYTE envelope_pulse0[];
|
||
static BYTE envelope_pulse1[];
|
||
static BYTE envelope_pulse2[];
|
||
static BYTE envelope_pulse3[];
|
||
static SBYTE envstep_pulse[];
|
||
|
||
static BYTE envelope_sawtooth0[];
|
||
static BYTE envelope_sawtooth1[];
|
||
static SBYTE envstep_sawtooth[];
|
||
|
||
static BYTE envelope_triangle0[];
|
||
static BYTE envelope_triangle1[];
|
||
|
||
static SBYTE envstep_triangle[];
|
||
|
||
static LPBYTE envelope_table[16];
|
||
static LPSBYTE envstep_table[16];
|
||
private:
|
||
};
|
||
|
||
#endif // !__APU_FME7_INCLUDED__
|