File:  [RetroPC.NET] / np2 / sound / psggen.h
Revision 1.6: download - view: text, annotated - select for diffs
Mon Dec 8 09:55:33 2003 JST (21 years, 10 months ago) by yui
Branches: MAIN
CVS tags: HEAD
add IA32 etc... (T.Yui)


enum {
	PSGFREQPADBIT		= 12,
	PSGADDEDBIT			= 3
};

enum {
	PSGENV_INC			= 15,
	PSGENV_ONESHOT		= 16,
	PSGENV_LASTON		= 32,
	PSGENV_ONECYCLE		= 64
};

typedef struct {
	SINT32	freq;
	SINT32	count;
	BYTE	*pvol;
	UINT16	puchi;
	BYTE	pan;
	BYTE	padding;
} PSGTONE;

typedef struct {
	SINT32	freq;
	SINT32	count;
	UINT	base;
} PSGNOISE;

typedef struct {
	BYTE	tune[3][2];		// 0
	BYTE	noise;			// 6
	BYTE	mixer;			// 7
	BYTE	vol[3];			// 8
	BYTE	envtime[2];		// b
	BYTE	env;			// d
	BYTE	io1;
	BYTE	io2;
} PSGREG;

typedef struct {
	PSGTONE		tone[3];
	PSGNOISE	noise;
	PSGREG		reg;
	UINT16		envcnt;
	UINT16		envmax;
	BYTE		mixer;
	BYTE		envmode;
	BYTE		envvol;
	char		envvolcnt;
	UINT		puchicount;
} _PSGGEN, *PSGGEN;

typedef struct {
	SINT32	volume[16];
	SINT32	voltbl[16];
	UINT	rate;
	UINT32	base;
	UINT16	puchidec;
} PSGGENCFG;


#ifdef __cplusplus
extern "C" {
#endif

void psggen_initialize(UINT rate);
void psggen_setvol(UINT vol);

void psggen_reset(PSGGEN psg);
void psggen_setreg(PSGGEN psg, REG8 reg, REG8 val);
REG8 psggen_getreg(PSGGEN psg, REG8 reg);
void psggen_setpan(PSGGEN psg, UINT ch, REG8 pan);

void SOUNDCALL psggen_getpcm(PSGGEN psg, SINT32 *pcm, UINT count);

#ifdef __cplusplus
}
#endif


RetroPC.NET-CVS <cvs@retropc.net>