
;---------------------------------------------------------------
;
; play
;
; joue la musique sur 4 voies
;

play:
	lea.l	adr_son0,a1
	move.l	a1,cd018_1	; silence

	move.w	#$ffff,track_on
	move.w	#$ff,effets

	movem.l	d0-d7/a0-a6,-(sp)
	move.w	tempo,d0
	add.w	d0,d0
	move.w	d0,cd018_3	; regle le tempo


	move.l	$6c,a0
	move.l	a0,f_ttmouse-4
	lea	TRAIT_MOUSE,a0
	move.l	a0,$6c

	jsr	start_sound2

	movem.l	(sp)+,d0-d7/a0-a6
	rts


;################################################
; INTERUPTION BOUTON SOURIS
;
TRAIT_MOUSE:
	clr.w	flagvbl
	tst.w	effets
	beq	pasdeffets
	jsr	playeffets


pasdeffets:
	jmp	0			; adresse de l'interruption 
f_ttmouse:

flagvbl:	dc.w	0


mus_finie:	dc.w	0

;---------------------------------------------------------------
;
; CD018
;
; joue la musique sur 4 voies
;
; entree:  cd018_1.l adresse de la table des adresses des echantillons
;          cd018_2.l 10 adresse des 10 voies
;          cd018_3.l tempo
;

cd018:
start_sound2:

	move.l	#$ffffffff,on1
	move.l	#$ffffffff,on3
		
	move.w	#$f,mus_finie
	move.w	#255,effets
	move.w	#0,AUD0VOL
	move.w	#0,AUD1VOL
	move.w	#0,AUD2VOL
	move.w	#0,AUD3VOL
	move.w	#0,vol_env1
	move.w	#0,vol_env2
	move.w	#0,vol_env3
	move.w	#0,vol_env4
	move.w	#5,no_param1
	move.w	#5,no_param2
	move.w	#5,no_param3
	move.w	#5,no_param4

	move.w	#60,volume_v1
	clr.w	level1
	clr.w	pitch1
	move.w	#60,volume_v2
	clr.w	level2
	clr.w	pitch2
	move.w	#60,volume_v3
	clr.w	level3
	clr.w	pitch3
	move.w	#60,volume_v4
	clr.w	level4
	clr.w	pitch4

	movem.l	d0-d7/a0-a6,-(sp)

	move.w	#1,_compteur
	move.l	#-1,position

	lea	colvoie,a0
	lea	adrvoie,a1
	lea	_v1,a3
	lea	_vv1,a4
	move.w	#0,d1
	move.w	#3,d2
lcd018:	move.w	(a0)+,d0		; n° de voie de la colone x
	lsl.w	#2,d0
	move.l	(a1,d0.w),a2		; adresse de la voie
	lea.l	(a2,d1.w),a2		; adresse de la partition + offset
	move.l	a2,(a3)+
	move.l	a2,(a4)+
	dbra	d2,lcd018

	lea	colvoie,a0
	lea	adrvoie,a1
	lea	v_effets,a3
	lea	vv_effets,a4
	move.w	#0,d1
	move.w	#3,d2
llcd018:
	move.w	(a0)+,d0		; n° de voie de la colone x
	add.w	#5,d0
	lsl.w	#2,d0
	move.l	(a1,d0.w),a2		; adresse de la voie effet
	lea.l	(a2,d1.w),a2		; adresse de la partition + offset
	move.l	a2,(a3)+
	move.l	a2,(a4)+
	dbra	d2,llcd018

	lea	colvoie,a0
	lea	adrvoie,a1
	lea	v_datas,a3
	lea	vv_datas,a4
	move.w	#0,d1
	move.w	#3,d2
lllcd018:
	move.w	(a0)+,d0		; n° de voie de la colone x
	add.w	#10,d0
	lsl.w	#2,d0
	move.l	(a1,d0.w),a2		; adresse de la voie data
	lea.l	(a2,d1.w),a2		; adresse de la partition + offset
	move.l	a2,(a3)+
	move.l	a2,(a4)+
	dbra	d2,lllcd018



	move.l	$78,sauve_vec
	move.l	#vbl2,$78
	clr.b	CIABCRA			; stoppe le timer A
	clr.l	d0
	move.l	#716000,d0
	divu.w	cd018_3,d0		; frequence de l'IT
	move.b	d0,CIABTALO
	lsr.w	#8,d0
	move.b	d0,CIABTAHI
	move.b	#$81,CIABICR		; IT declenchee par timer A
	move.b	#$11,CIABCRA

	movem.l	(sp)+,d0-d7/a0-a6
	rts


stop_sound2:
	move.l	f_ttmouse-4,a0
	move.l	a0,$6c

	move.b	#$80,CIABICR
	clr.b	CIABCRA
	move.l	sauve_vec,$78
	move.w	#255,volumes
	move.w	#0,AUD0VOL		; VOLume 1
	move.w	#0,AUD1VOL		; VOLume 2
	move.w	#0,AUD2VOL		; VOLume 3
	move.w	#0,AUD3VOL		; VOLume 4
	move.w	#$f,$dff096
	rts

volumes:	dc.w	0
;-------------------------------------
; programme sous interruption 
; qui gere la partition
;

vbl2:
	move.w	#$2700,sr

	sub.w	#1,_compteur
	bne	f_it		; on ne gere pas encore le prochain temps

	move.l	#vbl22,$78	; a la prochaine IT on execute les sons
	movem.l	d0-d7/a0-a6,-(sp)
	move.w	#2,_compteur	; nbre d'IT avant execution des sons
	addq.l	#1,position
	clr.w	dma_audio

	lea	_v1,a0		; adr des pistes
	move.l	cd018_1,a2	; adr des echantillons
	lea	nonote,a4	; n° des notes correspondant aux sons calcules
	lea	nodo,a5		; n° du DO de la note calculee
	lea	freq_note,a6	; frequences suivant la note a jouer

;
; gestion de la piste 1

	moveq.l	#0,d1
	moveq.l	#NOTEDO,d2
	movea.l	(a0),a1
	move.b	(a1)+,d1		; numero du son dans d1
	and.w	on1,d1
	beq	_v1_inchangee
	cmpi.w	#254,d1
	bmi	_calc_adr1
	cmpi.w	#255,d1
	bmi.s	_stop1
	sub.l	#1,a1		; fin de la partition
	and.w	#15-1,mus_finie
	bra	_v1_inchangee
_stop1:	move.w	#1,$dff096		; stoppe la voie 1
;	clr.w	volume_v1
	bra	_v1_inchangee
_calc_adr1:
	cmp.w	#50,d1
	bmi	cest_do1
	sub.w	#51,d1
	move.b	(a4,d1.w),d2	; n° de la note (0 a 11)
	move.b	(a5,d1.w),d1	; n° du son
	add.w	#1,d1
	
cest_do1:
	add.w	d2,d2
;	move.w	#1,AUD0VOL
	move.w	#1,$dff096
	add.w	#1,dma_audio
	lsl.w	#2,d1
	move.l	(a2,d1.w),a3
	move.w	(a3),d0
	move.w	d0,AUD0LEN
	move.l	a3,dep_son1
	lea	52(a3),a3
	move.l	a3,AUD0LCH		; adr echantillon
	move.w	(a6,d2.w),periode1	; periode
	move.w	on1,voie1
	
_v1_inchangee:
	move.l	 a1,(a0)+

;
; gestion de la piste 4

	moveq.l	#0,d1
	moveq.l	#NOTEDO,d2
	movea.l	(a0),a1
	move.b	(a1)+,d1		; numero du son dans d1
	and.w	on4,d1
	beq	_v4_inchangee
	cmpi.w	#254,d1
	bmi.s	_calc_adr4
	cmpi.w	#255,d1
	bmi.s	_stop4
	sub.l	#1,a1		; fin de la partition
	and.w	#15-2,mus_finie
	bra	_v4_inchangee
_stop4:	move.w	#8,$dff096		; stoppe la voie 4
;	clr.w	volume_v2
	bra	_v4_inchangee
_calc_adr4:
	cmp.w	#50,d1
	bmi	cest_do4
	sub.w	#51,d1
	move.b	(a4,d1.w),d2	; n° de la note (0 a 11)
	move.b	(a5,d1.w),d1	; n° du son
	add.w	#1,d1

cest_do4:
	add.w	d2,d2
;	move.w	#1,AUD3VOL
	move.w	#8,$dff096
	add.w	#8,dma_audio
	lsl.w	#2,d1
	move.l	0(a2,d1.w),a3
	move.w	(a3),d0
	move.w	d0,AUD3LEN
	move.l	a3,dep_son4
	lea	52(a3),a3
	move.l	a3,AUD3LCH		; adr echantillon
	move.w	(a6,d2.w),periode2	; periode
	move.w	on4,voie4
	
_v4_inchangee:
	move.l	 a1,(a0)+

;
; gestion de la piste 2

	moveq.l	#0,d1
	moveq.l	#NOTEDO,d2
	movea.l	(a0),a1
	move.b	(a1)+,d1		; numero du son dans d1
	and.w	on2,d1
	beq	_v2_inchangee
	cmpi.w	#254,d1
	bmi.s	_calc_adr2
	cmpi.w	#255,d1
	bmi.s	_stop2
	sub.l	#1,a1		; fin de la partition
	and.w	#15-4,mus_finie
	bra	_v2_inchangee
_stop2:	move.w	#2,$dff096		; stoppe la voie 2
;	clr.w	volume_v3
	bra	_v2_inchangee
_calc_adr2:
	cmp.w	#50,d1
	bmi	cest_do2
	sub.w	#51,d1
	move.b	(a4,d1.w),d2	; n° de la note (0 a 11)
	move.b	(a5,d1.w),d1	; n° du son
	add.w	#1,d1

cest_do2:
	add.w	d2,d2
;	move.w	#1,AUD1VOL
	move.w	#2,$dff096
	add.w	#2,dma_audio
	lsl.w	#2,d1
	move.l	0(a2,d1.w),a3	; adresse de l'echantillon
	move.w	(a3),d0
	move.w	d0,AUD1LEN
	move.l	a3,dep_son2
	lea	52(a3),a3
	move.l	a3,AUD1LCH	; adr echantillon
	move.w	(a6,d2.w),periode3	; periode
	move.w	on2,voie2
	
_v2_inchangee:
	move.l	 a1,(a0)+
;
; gestion de la piste 3

	moveq.l	#0,d1
	moveq.l	#NOTEDO,d2
	movea.l	(a0),a1
	move.b	(a1)+,d1		; numero du son dans d1
	and.w	on3,d1
	beq	_v3_inchangee
	cmpi.w	#254,d1
	bmi.s	_calc_adr3
	cmpi.w	#255,d1
	bmi.s	_stop3
	sub.l	#1,a1		; fin de la partition
	and.w	#15-8,mus_finie
	bra	_v3_inchangee
_stop3:	move.w	#4,$dff096		; stoppe la voie 3
;	clr.w	volume_v4
	bra	_v3_inchangee
_calc_adr3:
	cmp.w	#50,d1
	bmi	cest_do3
	sub.w	#51,d1
	move.b	(a4,d1.w),d2	; n° de la note (0 a 11)
	move.b	(a5,d1.w),d1	; n° du son
	add.w	#1,d1

cest_do3:
	add.w	d2,d2
;	move.w	#1,AUD2VOL
	move.w	#4,$dff096
	add.w	#4,dma_audio
	lsl.w	#2,d1
	move.l	0(a2,d1.w),a3
	move.w	(a3),d0
	move.w	d0,AUD2LEN
	move.l	a3,dep_son3
	lea	52(a3),a3
	move.l	a3,AUD2LCH		; adr echantillon
	move.w	(a6,d2.w),periode4	; periode
	move.w	on3,voie3

_v3_inchangee:
	move.l	 a1,(a0)+

	movem.l	(sp)+,d0-d7/a0-a6

f_it:
	move.b	CIABICR,ciab_lec
	move.w	#$2000,INTREQ
	rte	



vbl22:
	move.w	#$2700,sr
	sub.w	#1,_compteur
	bne	f_it		; on ne gere pas encore le prochain temps

	move.l	#vbl2,$78
	movem.l	d0-d5/a0-a6,-(sp)
	move.w	#13,_compteur	; reinitialise le tempo
	
;	move.w	dma_audio,$dff096

;	move.w	#120,d0
;paus1:	nop
;	dbra	d0,paus1
		
	move.w	dma_audio,d0
	add.w	#$8000,d0
	move.w	d0,$dff096

	move.w	#120,d0
paus11:	nop
	dbra	d0,paus11

	moveq.l	#0,d0
	moveq.l	#0,d1
	lea	dep_son1,a0

	move.w	vol_env1,d2
	move.w	vol_env2,d3
	move.w	vol_env3,d4
	move.w	vol_env4,d5

t1:	move.l	(a0)+,a1		; adr. depart son
	tst.w	voie1
	beq	t2
	move.w	dV1(a1),d2		; volume de depart
	move.w	6(a1),d0		; dep loop
	move.w	8(a1),d1		; len loop
	add.l	d0,a1
	lea	52(a1),a1		; dep son
	move.l	a1,AUD0LCH
	move.w	d1,AUD0LEN
	clr.w	cpt1_t			; parametres pour enveloppe de volume
	clr.w	no_param1		; on commence au debut de l'enveloppe
	clr.w	vol_env1
	move.w	#1,cpt1_vbl		; lance l'enveloppe 1 dans 2 VBLs
	cmp.w	#1,d1
	bne	pasclear0
	clr.b	(a1)
	clr.b	1(a1)
pasclear0:
	
t2:	move.l	(a0)+,a1
	tst.w	voie2
	beq	t3
	move.w	dV1(a1),d4		; volume de depart
	move.w	6(a1),d0
	move.w	8(a1),d1
	add.l	d0,a1
	lea	52(a1),a1
	move.l	a1,AUD1LCH
	move.w	d1,AUD1LEN
	clr.w	cpt3_t			; parametres pour enveloppe de volume
	clr.w	no_param3		; on commence au debut de l'enveloppe
	clr.w	vol_env3
	move.w	#2,cpt3_vbl		; lance l'enveloppe 1 dans 2 VBLs
	cmp.w	#1,d1
	bne	pasclear1
	clr.b	(a1)
	clr.b	1(a1)
pasclear1:
	
t3:
	move.l	(a0)+,a1
	tst.w	voie3
	beq	t4
	move.w	dV1(a1),d5		; volume de depart
	move.w	6(a1),d0
	move.w	8(a1),d1
	add.l	d0,a1
	lea	52(a1),a1
	move.l	a1,AUD2LCH
	move.w	d1,AUD2LEN
	clr.w	cpt4_t			; parametres pour enveloppe de volume
	clr.w	no_param4		; on commence au debut de l'enveloppe
	clr.w	vol_env4
	move.w	#2,cpt4_vbl		; lance l'enveloppe 1 dans 2 VBLs
	cmp.w	#1,d1
	bne	pasclear2
	clr.b	(a1)
	clr.b	1(a1)
pasclear2:

t4:
	move.l	(a0)+,a1
	tst.w	voie4
	beq	t5
	move.w	dV1(a1),d3		; volume de depart
	move.w	6(a1),d0
	move.w	8(a1),d1
	add.l	d0,a1
	lea	52(a1),a1
	move.l	a1,AUD3LCH
	move.w	d1,AUD3LEN
	clr.w	cpt2_t			; parametres pour enveloppe de volume
	clr.w	no_param2		; on commence au debut de l'enveloppe
	clr.w	vol_env2
	move.w	#2,cpt2_vbl		; lance l'enveloppe 1 dans 2 VBLs
	cmp.w	#1,d1
	bne	pasclear3
	clr.b	(a1)
	clr.b	1(a1)
pasclear3:

t5:		
		
;****** EFFETS DE LA PARTITION ****************

	lea	v_effets,a2
	lea	v_datas,a3

;       VOIE 1

	clr.w	d0
	clr.w	d1
	move.l	(a2),a4		; adr. piste effets
	move.l	(a3),a5		; adr. piste datas
	btst.b	#0,track_on
	bne	pascoupeff1
	clr.w	level1		; pas d'effets
	clr.w	pitch1
	bra	ef2
pascoupeff1:
	move.b	(a4),d0		; effet
	cmp.w	#255,d0
	beq	ef2		; fin effets
	lea	1(a4),a4
	move.b	(a5)+,d1
	tst.w	d0
	beq	ef2		; pas d'effet
lev_v1:
	cmp.w	#1,d0		; positionne le volume
	bne	levup1
	move.w	d1,volume_v1
	clr.w	level1
	bra	ef2
levup1:
	cmp.w	#2,d0
	bne	levdo1
	move.w	d1,level1
	bra	ef2
levdo1:
	cmp.w	#3,d0
	bne	pitchup1
	neg	d1
	move.w	d1,level1
	bra	ef2
pitchup1:
	cmp.w	#4,d0
	bne	pitchdo1
	move.w	d1,pitch1
	bra	ef2
pitchdo1:
	cmp.w	#5,d0
	bne	ef2
	neg	d1
	move.w	d1,pitch1
			
ef2:	move.w	volume_v1,d0
	add.w	level1,d0
	bpl	vol1
	clr.w	d0
vol1:
	move.w	d0,volume_v1
	tst.w	on1
	beq	enreg1
	lsr.w	#8,d2
	mulu.w	d2,d0
	lsr.w	#6,d0
	move.w	d0,AUD0VOL
enreg1:	move.w	periode1,d0
	add.w	pitch1,d0
	cmp.w	#127,d0
	bge	per1
	move.w	#128,d0
per1:	move.w	d0,AUD0PER
	move.w	d0,periode1
	
	move.l	a4,(a2)+
	move.l	a5,(a3)+

;       VOIE 2

	clr.w	d0
	clr.w	d1
	move.l	(a2),a4		; adr. piste effets
	move.l	(a3),a5		; adr. piste datas
	btst.b	#1,track_on
	bne	pascoupeff2
	clr.w	level1		; pas d'effets
	clr.w	pitch1
	bra	ef3
pascoupeff2:
	move.b	(a4),d0		; effet
	cmp.w	#255,d0
	beq	ef3		; fin effets
	lea	1(a4),a4
	move.b	(a5)+,d1
	clr.w	cpt2_t		; nouvelle enveloppe
	tst.w	d0
	beq	ef3		; pas d'effet
lev_v2:
	cmp.w	#1,d0		; positionne le volume
	bne	levup2
	move.w	d1,volume_v2
	clr.w	level2
	bra	ef3
levup2:
	cmp.w	#2,d0
	bne	levdo2
	move.w	d1,level2
	bra	ef3
levdo2:
	cmp.w	#3,d0
	bne	pitchup2
	neg	d1
	move.w	d1,level2
	bra	ef3
pitchup2:
	cmp.w	#4,d0
	bne	pitchdo2
	move.w	d1,pitch2
	bra	ef3
pitchdo2:
	cmp.w	#5,d0
	bne	ef3
	neg	d1
	move.w	d1,pitch2
			
ef3:	move.w	volume_v2,d0
	add.w	level2,d0
	bpl	vol2
	clr.w	d0
vol2:
	move.w	d0,volume_v2
	tst.w	on4
	beq	enreg2
	lsr.w	#8,d3
	mulu.w	d3,d0
	lsr.w	#6,d0
	move.w	d0,AUD3VOL
enreg2:	move.w	periode2,d0
	add.w	pitch2,d0
	cmp.w	#127,d0
	bge	per2
	move.w	#128,d0
per2:	move.w	d0,AUD3PER
	move.w	d0,periode2
	
	move.l	a4,(a2)+
	move.l	a5,(a3)+

;       VOIE 3

	clr.w	d0
	clr.w	d1
	move.l	(a2),a4		; adr. piste effets
	move.l	(a3),a5		; adr. piste datas
	btst.b	#2,track_on
	bne	pascoupeff3
	clr.w	level3		; pas d'effets
	clr.w	pitch3
	bra	ef4
pascoupeff3:
	move.b	(a4),d0		; effet
	cmp.w	#255,d0
	beq	ef4		; fin effets
	lea	1(a4),a4
	move.b	(a5)+,d1
	clr.w	cpt3_t		; nouvelle enveloppe
	tst.w	d0
	beq	ef4		; pas d'effet
lev_v3:
	cmp.w	#1,d0		; positionne le volume
	bne	levup3
	move.w	d1,volume_v3
	clr.w	level3
	bra	ef4
levup3:
	cmp.w	#2,d0
	bne	levdo3
	move.w	d1,level3
	bra	ef4
levdo3:
	cmp.w	#3,d0
	bne	pitchup3
	neg	d1
	move.w	d1,level3
	bra	ef4
pitchup3:
	cmp.w	#4,d0
	bne	pitchdo3
	move.w	d1,pitch3
	bra	ef4
pitchdo3:
	cmp.w	#5,d0
	bne	ef4
	neg	d1
	move.w	d1,pitch3
			
ef4:	move.w	volume_v3,d0
	add.w	level3,d0
	bpl	vol3
	clr.w	d0
vol3:
	move.w	d0,volume_v3
	tst.w	on2
	beq	enreg3
	lsr.w	#8,d4
	mulu.w	d4,d0
	lsr.w	#6,d0
	move.w	d0,AUD1VOL
enreg3:	move.w	periode3,d0
	add.w	pitch3,d0
	cmp.w	#127,d0
	bge	per3
	move.w	#128,d0
per3:	move.w	d0,AUD1PER
	move.w	d0,periode3
	
	move.l	a4,(a2)+
	move.l	a5,(a3)+

;       VOIE 4

	clr.w	d0
	clr.w	d1
	move.l	(a2),a4		; adr. piste effets
	move.l	(a3),a5		; adr. piste datas
	btst.b	#3,track_on
	bne	pascoupeff4
	clr.w	level4		; pas d'effets
	clr.w	pitch4
	bra	ef5
pascoupeff4:
	move.b	(a4),d0		; effet
	cmp.w	#255,d0
	beq	ef5		; fin effets
	lea	1(a4),a4
	move.b	(a5)+,d1
	clr.w	cpt4_t		; nouvelle enveloppe
	tst.w	d0
	beq	ef5		; pas d'effet
lev_v4:
	cmp.w	#1,d0		; positionne le volume
	bne	levup4
	move.w	d1,volume_v4
	clr.w	level4
	bra	ef5
levup4:
	cmp.w	#2,d0
	bne	levdo4
	move.w	d1,level4
	bra	ef5
levdo4:
	cmp.w	#3,d0
	bne	pitchup4
	neg	d1
	move.w	d1,level4
	bra	ef5
pitchup4:
	cmp.w	#4,d0
	bne	pitchdo4
	move.w	d1,pitch4
	bra	ef5
pitchdo4:
	cmp.w	#5,d0
	bne	ef5
	neg	d1
	move.w	d1,pitch4
			
ef5:	move.w	volume_v4,d0
	add.w	level4,d0
	bpl	vol4
	clr.w	d0
vol4:
	move.w	d0,volume_v4
	tst.w	on3
	beq	enreg4
	lsr.w	#8,d5
	mulu.w	d5,d0
	lsr.w	#6,d0
	move.w	d0,AUD2VOL
enreg4:	move.w	periode4,d0
	add.w	pitch4,d0
	cmp.w	#127,d0
	bge	per4
	move.w	#128,d0
per4:	move.w	d0,AUD2PER
	move.w	d0,periode4

	move.l	a4,(a2)+
	move.l	a5,(a3)+

	clr.w	voie1
	clr.w	voie2
	clr.w	voie3
	clr.w	voie4

	movem.l	(sp)+,d0-d5/a0-a6

	move.b	CIABICR,ciab_lec
	move.w	#$2000,INTREQ
	rte




;--------------------------------------
; JOUE LES EFFETS D'ENVELOPPE
;
playeffets:
	movem.l	d0-a6,-(sp)

;****************************************

EFFET1:	sub.w	#1,cpt1_vbl		; compteur de vbl de la voie 1	
	bne	EFFET2
	move.w	#3,cpt1_vbl

EFF1:	cmp.w	#4,no_param1
	bge	EFFET2			; enveloppe 1 finie

	move.w	no_param1,d1
	lsl.w	#2,d1
	move.l	dep_son1,a0
	lea	16(a0),a0		; pointe sur les parametres T1,L1
	lea	(a0,d1.w),a0		; pointe sur le bon couple T,L (1 a 4)
	add.w	#1,cpt1_t		; compteur enveloppe 1
	move.w	cpt1_t,d0

	move.w	vol_env1,d3		; ancien volume * 256
	move.w	(a0),d1			; t1n
	cmp.w	d0,d1
	bge	no_param1_ok
	add.w	#1,no_param1		; on change de droite (ADSR)
	clr.w	cpt1_t
	bra	EFF1
no_param1_ok:
	moveq.l	#0,d2
	move.w	2(a0),d2		; k1n
	bpl	k1positif
	neg.w	d2			; pente negative
	sub.w	d2,d3
	bra.s	play_vol1
k1positif:				; pente positive
	add.w	d2,d3			; vol_env1=vol_env1+(k1n/t1n)
; joue le son au bon volume
; teste les debordements
play_vol1:
	tst.w	d3
	bpl	vol1_ok0
	clr.w	d3
vol1_ok0:
	cmp.w	#16384,d3
	ble.s	vol1_ok1
	move.w	#16384,d3
vol1_ok1:
; le volume 1 est ok
	move.w	d3,vol_env1
	lsr.w	#8,d3
	move.w	volume_v1,d0
	mulu.w	d3,d0
	lsr.w	#6,d0
	move.w	d0,AUD0VOL

;****************************************

EFFET2:	sub.w	#1,cpt2_vbl		; compteur de vbl de la voie 2
	bne	EFFET3
	move.w	#3,cpt2_vbl

EFF2:	cmp.w	#4,no_param2
	bge	EFFET3			; enveloppe 2 finie

	move.w	no_param2,d1
	lsl.w	#2,d1
	move.l	dep_son4,a0
	lea	16(a0),a0		; pointe sur les parametres T1,L1
	lea	(a0,d1.w),a0		; pointe sur le bon couple T,L (1 a 4)
	add.w	#1,cpt2_t		; compteur enveloppe 2
	move.w	cpt2_t,d0

	move.w	vol_env2,d3		; ancien volume * 256
	move.w	(a0),d1			; t1n
	cmp.w	d0,d1
	bge	no_param2_ok
	add.w	#1,no_param2		; on change de droite (ADSR)
	clr.w	cpt2_t
	bra	EFF2
no_param2_ok:
	moveq.l	#0,d2
	move.w	2(a0),d2		; k2n
	bpl	k2positif
	neg.w	d2			; pente negative
	sub.w	d2,d3
	bra.s	play_vol2
k2positif:				; pente positive
	add.w	d2,d3			; vol_env2=vol_env2+(k2n/t2n)
; joue le son au bon volume
; teste les debordements
play_vol2:
	tst.w	d3
	bpl	vol2_ok0
	clr.w	d3
vol2_ok0:
	cmp.w	#16384,d3
	ble.s	vol2_ok1
	move.w	#16384,d3
vol2_ok1:
; le volume 2 est ok
	move.w	d3,vol_env2
	lsr.w	#8,d3
	move.w	volume_v2,d0
	mulu.w	d3,d0
	lsr.w	#6,d0
	move.w	d0,AUD3VOL

;****************************************

EFFET3:	sub.w	#1,cpt3_vbl		; compteur de vbl de la voie 3
	bne	EFFET4
	move.w	#3,cpt3_vbl

EFF3:	cmp.w	#4,no_param3
	bge	EFFET4			; enveloppe 3 finie

	move.w	no_param3,d1
	lsl.w	#2,d1
	move.l	dep_son2,a0
	lea	16(a0),a0		; pointe sur les parametres T1,L1
	lea	(a0,d1.w),a0		; pointe sur le bon couple T,L (1 a 4)
	add.w	#1,cpt3_t		; compteur enveloppe 3
	move.w	cpt3_t,d0

	move.w	vol_env3,d3		; ancien volume * 256
	move.w	(a0),d1			; t3n
	cmp.w	d0,d1
	bge	no_param3_ok
	add.w	#1,no_param3		; on change de droite (ADSR)
	clr.w	cpt3_t
	bra	EFF3
no_param3_ok:
	moveq.l	#0,d2
	move.w	2(a0),d2		; k3n
	bpl	k3positif
	neg.w	d2			; pente negative
	sub.w	d2,d3
	bra.s	play_vol3
k3positif:				; pente positive
	add.w	d2,d3			; vol_env3=vol_env3+(k3n/t3n)
; joue le son au bon volume
; teste les debordements
play_vol3:
	tst.w	d3
	bpl	vol3_ok0
	clr.w	d3
vol3_ok0:
	cmp.w	#16384,d3
	ble.s	vol3_ok1
	move.w	#16384,d3
vol3_ok1:
; le volume 3 est ok
	move.w	d3,vol_env3
	lsr.w	#8,d3
	move.w	volume_v3,d0
	mulu.w	d3,d0
	lsr.w	#6,d0
	move.w	d0,AUD1VOL

;****************************************

EFFET4:	sub.w	#1,cpt4_vbl		; compteur de vbl de la voie 4	
	bne	EFFET5
	move.w	#3,cpt4_vbl

EFF4:	cmp.w	#4,no_param4
	bge	EFFET5			; enveloppe 4 finie

	move.w	no_param4,d1
	lsl.w	#2,d1
	move.l	dep_son3,a0
	lea	16(a0),a0		; pointe sur les parametres T1,L1
	lea	(a0,d1.w),a0		; pointe sur le bon couple T,L (1 a 4)
	add.w	#1,cpt4_t		; compteur enveloppe 4
	move.w	cpt4_t,d0

	move.w	vol_env4,d3		; ancien volume * 256
	move.w	(a0),d1			; t4n
	cmp.w	d0,d1
	bge	no_param4_ok
	add.w	#1,no_param4		; on change de droite (ADSR)
	clr.w	cpt4_t
	bra	EFF4
no_param4_ok:
	moveq.l	#0,d2
	move.w	2(a0),d2		; k4n
	bpl	k4positif
	neg.w	d2			; pente negative
	sub.w	d2,d3
	bra.s	play_vol4
k4positif:				; pente positive
	add.w	d2,d3			; vol_env4=vol_env4+(k4n/t4n)
; joue le son au bon volume
; teste les debordements
play_vol4:
	tst.w	d3
	bpl	vol4_ok0
	clr.w	d3
vol4_ok0:
	cmp.w	#16384,d3
	ble.s	vol4_ok1
	move.w	#16384,d3
vol4_ok1:
; le volume 4 est ok
	move.w	d3,vol_env4
	lsr.w	#8,d3
	move.w	volume_v4,d0
	mulu.w	d3,d0
	lsr.w	#6,d0
	move.w	d0,AUD2VOL

;*******************************************

EFFET5:

pas_effet:
	movem.l	(sp)+,d0-a6
	rts



;**********************************************



no_param1:	dc.w	0
no_param2:	dc.w	0
no_param3:	dc.w	0
no_param4:	dc.w	0



volume_v1:	dc.w	0
volume_v2:	dc.w	0
volume_v3:	dc.w	0
volume_v4:	dc.w	0

periode1:	dc.w	0
periode2:	dc.w	0
periode3:	dc.w	0
periode4:	dc.w	0

cpt1_vbl:	dc.w	0
cpt2_vbl:	dc.w	0
cpt3_vbl:	dc.w	0
cpt4_vbl:	dc.w	0

vol_env1:	dc.w	0
vol_env2:	dc.w	0
vol_env3:	dc.w	0
vol_env4:	dc.w	0

cpt1_t:		dc.w	0
cpt2_t:		dc.w	0
cpt3_t:		dc.w	0
cpt4_t:		dc.w	0

pitch1:		dc.w	0
level1:		dc.w	0

pitch2:		dc.w	0
level2:		dc.w	0

pitch3:		dc.w	0
level3:		dc.w	0

pitch4:		dc.w	0
level4:		dc.w	0



