File:  [RetroPC.NET] / xmil / sound / psggen.h
Revision 1.4: download - view: text, annotated - select for diffs
Tue Jun 3 05:07:32 2008 JST (17 years, 4 months ago) by yui
Branches: MAIN
CVS tags: HEAD
change to c style comment


enum {
	PSGFREQPADBIT		= 12,
	PSGADDEDBIT			= 3
};

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

typedef struct {
	SINT32	freq;
	SINT32	count;
	SINT32	*pvol;			/* !! */
	UINT16	puchi;
	UINT8	pan;
	UINT8	padding;
} PSGTONE;

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

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

typedef struct {
	PSGTONE		tone[3];
	PSGNOISE	noise;
	PSGREG		reg;
	UINT32		envcnt;
	UINT32		envmax;
	UINT8		mixer;
	UINT8		envmode;
	UINT8		envvol;
	SINT8		envvolcnt;
	SINT32		evol;			/* !! */
	UINT		puchicount;
} _PSGGEN, *PSGGEN;

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


#ifdef __cplusplus
extern "C" {
#endif

extern const UINT8 psggen_deftbl[0x10];

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

void psggen_reset(PSGGEN psg);
void psggen_restore(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>