
#include <devices/ahi.h>

extern __asm BOOL mt_init( register __a2 struct PTData * );
extern __asm BOOL mt_start( register __a2 struct PTData * );
extern __asm void mt_stop( register __a2 struct PTData * );
extern __asm void mt_end( register __a2 struct PTData * );
extern __asm void mt_music( register __a2 struct PTData * );

#define	n_note		0
#define	n_cmd		2
#define	n_cmdlo		3
#define	n_start		4
#define	n_length	8
#define	n_loopstart	10
#define	n_replen	14
#define	n_period	16
#define	n_finetune	18
#define	n_volume	19
#define	n_dmabit	20
#define	n_toneportdirec	22
#define	n_toneportspeed	23
#define	n_wantedperiod	24
#define	n_vibratocmd	26
#define	n_vibratopos	27
#define	n_tremolocmd	28
#define	n_tremolopos	29
#define	n_wavecontrol	30
#define	n_glissfunk	31
#define	n_sampleoffset	32
#define	n_pattpos	33
#define	n_loopcount	34
#define	n_funkoffset	35
#define	n_wavestart	36
#define	n_reallength	40
#define	n_SIZEOF	42

struct PaulaEmul
{
	BOOL	pe_NewSample;			/* Flag				 */
	ULONG	pe_Offset;			/* Offset from sample start	 */
	UWORD	pe_Length;			/* Length in *WORDS* (like Paula)*/
	BOOL	pe_NewLoopSample;		/* Flag				 */
	ULONG	pe_LoopOffset;			/* Offset from sample start	 */
	UWORD	pe_LoopLength;			/* Length in *WORDS* (like Paula)*/
	BOOL	pe_NewPeriod;			/* Flag				 */
	UWORD	pe_Period;			/* Paula period			 */
	BOOL	pe_NewVolume;			/* Flag				 */
	UWORD	pe_Volume;			/* Paula volume, 0-64		 */
};

struct PTData
{
	struct AHIBase		*ptd_AHIBase;		/* Must be initialized!	 */
	struct AHIAudioCtrl	*ptd_AudioCtrl;		/* Must be initialized!	 */
	APTR			 ptd_ModuleAddress;	/* Must be initialized!	 */

	struct PaulaEmul	 ptd_Ch1;		/* Ch1 (left)		 */
	struct PaulaEmul	 ptd_Ch2;		/* Ch2 (right)		 */
	struct PaulaEmul	 ptd_Ch4;		/* Ch4 (left)		 */
	struct PaulaEmul	 ptd_Ch3;		/* Ch3 (right)		 */

	ULONG			 ptd_SampleStarts[31];
	UBYTE			 ptd_chan1temp[n_SIZEOF];
	UBYTE			 ptd_chan2temp[n_SIZEOF];
	UBYTE			 ptd_chan3temp[n_SIZEOF];
	UBYTE			 ptd_chan4temp[n_SIZEOF];

	UWORD			ptd_NewTempo;
	UWORD			ptd_Tempo;

	UBYTE			ptd_speed;
	UBYTE			ptd_counter;
	UBYTE			ptd_SongPos;
	UBYTE			ptd_PBreakPos;
	UBYTE			ptd_PosJumpFlag;
	UBYTE			ptd_PBreakFlag;
	UBYTE			ptd_LowMask;
	UBYTE			ptd_PattDelTime;
	UBYTE			ptd_PattDelTime2;
	UBYTE			ptd_Enable;
	UWORD			ptd_PatternPos;
	UWORD			ptd_DMACONtemp;
};
