@***********************************************************
@ File:			ARM_synth_constants.inc
@ Processor:	ARM
@ Description:	Contains constants and defines, most of which
@			  	are mirrored in synth.h
@
@ Copyright Sonic Network Inc. 2004
@****************************************************************
@ Revision Control:
@   $Revision: 741 $
@   $Date: 2007-06-22 16:39:21 -0700 (Fri, 22 Jun 2007) $
@****************************************************************


	.ifdef	SAMPLE_RATE_8000
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 5
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 32
	.endif

	.ifdef	SAMPLE_RATE_16000
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 6
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 64
	.endif

	.ifdef	SAMPLE_RATE_20000
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 7
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 128
	.endif

	.ifdef	SAMPLE_RATE_22050
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 7
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 128
	.endif

	.ifdef	SAMPLE_RATE_24000
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 7
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 128
	.endif

	.ifdef	SAMPLE_RATE_32000
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 7
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 128
	.endif

	.ifdef	SAMPLE_RATE_44100
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 8
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 256
	.endif

	.ifdef	SAMPLE_RATE_48000
	.equ	SYNTH_UPDATE_PERIOD_IN_BITS, 8
	.equ	BUFFER_SIZE_IN_MONO_SAMPLES, 256
	.endif


@ if the OUTPUT PCM sample is 16-bits, then when using indexed addressing,
@ the next sample is this many bytes away
	.equ	NEXT_OUTPUT_PCM, 2

@****************************************************************************
@/* macros for fractional phase accumulator */
	.equ	NUM_PHASE_FRAC_BITS, 15

	.equ	PHASE_FRAC_MASK, 0x7FFF

@ shift for phase accumulator when fraction carries over
	.ifdef	SAMPLES_8_BIT
	.equ	NEXT_INPUT_PCM_SHIFT, 0
	.endif

	.ifdef	SAMPLES_16_BIT
	.equ	NEXT_INPUT_PCM_SHIFT, 1
	.endif

@****************************************************************************
	.equ	NUM_MIXER_GUARD_BITS, 4

@****************************************************************************
@/* Envelope 1 (EG1) calculation macros */
	.equ	NUM_EG1_FRAC_BITS, 15

@****************************************************************************

	.equ	NUM_ENHANCER_FILTER_COEF_FRAC_BITS, 5

@****************************************************************************

@
@ I've temporarily given up on the idea of getting ADS/RV and gcc to
@ handle a struct in a compatible fashion. Switching to old fashion EQU
@

	.if	FILTER_ENABLED
@**************************************
@ typedef struct s_filter_tag
	.equ	m_z1, 0
	.equ	m_z2, 2
	.endif

@**************************************
@ typedef struct s_wt_frame_tag
	.equ	m_gainTarget, 0
	.equ	m_phaseIncrement, 4

	.if	FILTER_ENABLED
	.equ	m_k, 8
	.equ	m_b1, 12
	.equ	m_b2, 16
	.equ	m_pAudioBuffer, 20
	.equ	m_pMixBuffer, 24
	.equ	m_numSamples, 28
	.equ	m_prevGain, 32
	.else
	.equ	m_pAudioBuffer, 8
	.equ	m_pMixBuffer, 12
	.equ	m_numSamples, 16
	.equ	m_prevGain, 20
	.endif


@**************************************
@ typedef struct s_wt_voice_tag
	.equ	m_pLoopEnd, 0	@ /* points to last PCM sample (not 1 beyond last) */
	.equ	m_pLoopStart, 4	@ /* points to first sample at start of loop */
	.equ	m_pPhaseAccum, 8	@ /* points to first sample at start of loop */
	.equ	m_phaseFrac, 12	@ /* points to first sample at start of loop */

	.if	STEREO_OUTPUT
	.equ	m_gainLeft, 16 	@ /* current gain, left ch  */
	.equ	m_gainRight, 18	@ /* current gain, right ch */
	.endif


@****************************************************************************
@ enhancer
	.equ	m_nEnhancerFeedForward1, 0
	.equ	m_nEnhancerFeedback1, 1
	.equ	m_nDriveCoef, 2
	.equ	m_nEnhancerFeedback2, 3
	.equ	m_nWet, 4
	.equ	m_nDry, 5

	.equ	m_zF0L, 6	@ filter 1 zero state var, left
	.equ	m_zF1L, 8	@ filter 1 pole state var, left
	.equ	m_zF2L, 10	@ filter 2 zero state var, left
	.equ	m_zF0R, 12	@ filter 1 zero state var, right
	.equ	m_zF1R, 14	@ filter 1 pole state var, right
	.equ	m_zF2R, 16	@ filter 2 zero state var, right

@****************************************************************************