;*******************************************************************************
; C H A M E L E O N   DSP Assembler file                                       *
;*******************************************************************************
;Aleix Riera
;www.fjarre.com/~aleix
;aleix@fjarre.com
;*******************************************************************************
;
; MODULE: OUT
;	Fill output stereo buffer from the L+R individual buffers, and scaling
;with the global volume
;
;	TempOUT[2i] = IN_L[i]
;	TempOUT[2i+1] = IN_R[i]
;	OUT[i] = Volume * TempOUT[i]
;
; ARGUMENTS:
;	(X)   = InAddr		- Input Stereo buffer (L)
;	(X+1) = OutAddr 	- Output stereo DMAbuffer (X)
;	(X+2) = Volume		- Global volume
;
;******************************************************************************
module_out:
	define	R_InL			'R1'
	define	R_InR			'R5'
	define	R_Out			'R3'

;===============================CODE=====================================

	MOVE	X:(R_X),R_InL
	MOVE	X:(R_X)+,R_InR
	MOVE	X:(R_X)+,R_Out
	MOVE	X:(R_X),X1

	NOP
	MOVE			X:(R_InL)+,X0	Y:(R_InR)+,Y0
	MPYR	X0,X1,A
	.LOOP	#BUFFER_SIZE
	;----------------------------------------------------------------
	MPYR	Y0,X1,B		X:(R_InL)+,X0	Y:(R_InR)+,Y0
	MPYR	X0,X1,A		A,X:(R_Out)+
	MOVE			B,X:(R_Out)+
	;----------------------------------------------------------------
	.ENDL

;===============================CODE=====================================

	undef	R_InL
	undef	R_InR
	undef	R_Out
	
	RTS