////////////////////////////////////////////////////////////////////////// // // // Konami VRC6 // // Norix // // written 2001/09/18 // // last modify ----/--/-- // ////////////////////////////////////////////////////////////////////////// #ifndef __APU_VRC6_INCLUDED__ #define __APU_VRC6_INCLUDED__ #define WIN32_LEAN_AND_MEAN #include "windows.h" #include "typedef.h" #include "macro.h" #include "APU_INTERFACE.h" class APU_VRC6 : public APU_INTERFACE { public: APU_VRC6(); ~APU_VRC6(); 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 enable; BYTE gate; BYTE volume; INT phaseacc; INT freq; INT output_vol; BYTE adder; BYTE duty_pos; } RECTANGLE, *LPRECTANGLE; typedef struct { BYTE reg[3]; BYTE enable; BYTE volume; INT phaseacc; INT freq; INT output_vol; BYTE adder; BYTE accum; BYTE phaseaccum; } SAWTOOTH, *LPSAWTOOTH; INT RectangleRender( RECTANGLE& ch ); INT SawtoothRender( SAWTOOTH& ch ); RECTANGLE ch0, ch1; SAWTOOTH ch2; INT cycle_rate; FLOAT cpu_clock; private: }; #endif // !__APU_VRC6_INCLUDED__