
; Listing14-7b:		** MODULIEREN DER FREQUENZ EINER HARMONISCHEN  **

	SECTION	MODULATION,CODE

Start:
	lea	ModFq,a0
	moveq	#123,d0
	move.w	#500-1,d7
.Lp1:	
	move.w	d0,(a0)+
	addq.w	#1,d0
	dbra	d7,.Lp1
	move.w	#500-1,d7
.Lp2:	
	move.w	d0,(a0)+
	subq.w	#1,d0
	dbra	d7,.Lp2

_LVODisable	equ	-120
_LVOEnable	equ	-126

	move.l	4.w,a6
	jsr	_LVODisable(a6)

	bset	#1,$bfe001			; schaltet den Tiefpassfilter aus

	lea	$dff000,a6
	move.w	$2(a6),d7			; speichern DMA von OS
	move.w	$10(a6),d6			; speichern ADKCON von OS

CLOCK equ 3546895

	move.l	#Harmonic,$b0(a6)						; AUD1LCH
	move.w	#16/2,$b4(a6)							; AUD1LEN (in word)
	move.w	#64,$b8(a6)								; AUD1VOL

	move.l	#ModFq,$a0(a6)							; AUD0LCH
	move.w	#(ModFqEnd-ModFq)/2,$a4(a6)				; AUD0LEN (in word)
	move.w	#CLOCK/((ModFqEnd-ModFq)/2),$a6(a6)		; AUD0PER

	move.w	#$8010,$9e(a6)		; USE0P1 einstellen
	move.w	#$8203,$96(a6)		; einschalten AUD0 und AUD1 in DMACONW

Mouse:	
	btst	#6,$bfe001		; linke Maustaste gedrückt?
	bne.s	Mouse

	move.w	#$0010,$9e(a6)		; USE0P1 ausschalten
	or.w	#$8000,d6			; Bit 15 schaltet ein (SET/CLR)
	move.w	d6,$9e(a6)			; rücksetzen ADKCON von OS
	move.w	#$0003,$96(a6)		; ausschalten AUD0 und AUD1
	or.w	#$8000,d7			; Bit 15 schaltet ein (SET/CLR)
	move.w	d7,$96(a6)			; rücksetzen DMA von OS
	move.l	4.w,a6
	jsr	_LVOEnable(a6)
	rts

	SECTION	SAMPLE,DATA_C		; Wird es von der DMA gelesen, muss es sich im CHIP befinden


Harmonic:	; Harmonische von 16 Werten, die mit dem IC des Trash'm-One erzeugt wurden
	dc.b	$19,$46,$69,$7c,$7d,$6a,$47,$1a,$e8,$bb,$97,$84,$83,$95,$b8,$e5
ModFq:
	blk.w	500*2
ModFqEnd:
	end


Diesmal wurde AUD1VOL eingestellt, was nicht geschehen ist für das 
AUD1PER, da es kontinuierlich vom Modulatorkanal modifiziert wird.
Der AUD0PER wurde stattdessen so eingestellt, das die 1000-Wörter-Tabelle 
in 2 Sekunden gelesen wird mit der Taktkonstante geteilt durch die halbe
Länge der Tabelle, also bei 1Hz werden 500 Wörter gelesen, das heißt
alles in "halben" Hz lesen.
