/***************************************************************************
 *
 * softmixa.h
 *
 ***************************************************************************
 *
 * assembly functions/variables for software mixing
 *
 ***************************************************************************/

#ifndef SOFTMIXA_H_INCLUDED
#define SOFTMIXA_H_INCLUDED

/*
 * includes
 */

/*
 * defines
 */

#define FORMAT_PCM16    0
#define FORMAT_BENLAW   1
#define FORMAT_N64ADPCM 6


/*
 * typedefs
 */

/*
 * structures
 */

struct softChannel
	{
	unsigned char *ptr;
	unsigned long status;
	unsigned long offsetHi;
	unsigned long offsetLo;
	unsigned long incHi;
	unsigned long incLo;
	unsigned long endPt;
	unsigned long lpStart;
	unsigned char vol;
	unsigned char pan;
	unsigned char voll;
	unsigned char volr;
	unsigned long lpEnd;
	unsigned long sample;
	unsigned long format;
	};

/*
 * globals
 */

extern	struct softChannel *asmMixChannelPtr;
extern	unsigned long       asmMixNumChannels;
extern	unsigned long       asmMixSampleCount;
extern	unsigned long *     asmMixWritePtr;
extern	unsigned char *     asmMixFinalWritePtr;
extern	unsigned char *     asmMixVolTablePtr;
extern	unsigned long       asmMixAddValue;
extern	unsigned char       asmMixShiftValue;
extern	unsigned char       asmMixStoreFirst;
extern	signed long         asmMixMinValue;
extern	signed long         asmMixMaxValue;

/*
 * function prototypes
 */

extern	void                AsmMixMono          (void);
extern	void                AsmMixStereo        (void);

extern	void                AsmMixDown8         (void);
extern	void                AsmMixDown16        (void);

extern	void                SoundModuleStart    (void);
extern	void                SoundModuleEnd      (void);

extern	void                PcmMono             (void);
extern	void                PcmStereo           (void);

extern	void                BenLawMono          (void);
extern	void                BenLawStereo        (void);

#endif

