Blame as10k1/examples/chorus.asm

Packit 427e91
;;; Simple Chorus
Packit 427e91
;;; Author:Daniel Bertrand
Packit 427e91
;;; Date: Oct 12, 2000
Packit 427e91
Packit 427e91
;;; This program is free software; you can redistribute it and/or modify  
Packit 427e91
;;; it under the terms of the GNU General Public License as published by  
Packit 427e91
;;; the Free Software Foundation; either version 2 of the License, or     
Packit 427e91
;;; (at your option) any later version.
Packit 427e91
Packit 427e91
;;; References:	
Packit 427e91
;;; http://www.harmony-central.com/Effects/Articles/Chorus
Packit 427e91
Packit 427e91
			
Packit 427e91
;;;  speed(formerly "delta")=2*pi*freq/48000
Packit 427e91
;;;  this give us our delta value for a specific freq (0.1-0.3Hz is good)
Packit 427e91
		
Packit 427e91
Packit 427e91
	include "emu_constants.asm"
Packit 427e91
	name "Chorus"
Packit 427e91
		
Packit 427e91
in	IO
Packit 427e91
out	equ in	
Packit 427e91
Packit 427e91
	
Packit 427e91
	
Packit 427e91
speed	  control  4e-05 , 0 , 1e-4 	; Controls frequency (radians)
Packit 427e91
delay   control  &40e-3  ,&10e-3 , &80e-3; twice (2*) average delay (sec)
Packit 427e91
width	  control  #0.3   ,0	 ,0.5	; width control 
Packit 427e91
mix	  control  #1	 ,0      ,#1	; forward mix 
Packit 427e91
Packit 427e91
;; sine generator storage spaces:	
Packit 427e91
sinx  sta  0	
Packit 427e91
cosx  sta  #0.5
Packit 427e91
			
Packit 427e91
tmp  dyn 	
Packit 427e91
tmp2 dyn
Packit 427e91
	
Packit 427e91
;;; Two Delay Lines:	
Packit 427e91
	
Packit 427e91
	
Packit 427e91
dly   delay  &80e-3		;10msec delay line
Packit 427e91
	
Packit 427e91
write	twrite dly,0		; tram writes
Packit 427e91
ready	tread dly,0		; tram reads
Packit 427e91
reada   tread dly,0
Packit 427e91
				
Packit 427e91
;;;The code:	
Packit 427e91
	
Packit 427e91
		
Packit 427e91
;;; two opcode sinewave generator (I love this chip!):
Packit 427e91
	macs  sinx,sinx,speed,cosx
Packit 427e91
	macs1 cosx,cosx,speed,sinx 
Packit 427e91
Packit 427e91
;;; 0.5Asint+0.5:	
Packit 427e91
	macs tmp,C_2^30,sinx,width
Packit 427e91
	
Packit 427e91
;;; calculate address:
Packit 427e91
	macs  ready.a,write.a,delay,tmp
Packit 427e91
Packit 427e91
;second addresses for interpolation:
Packit 427e91
;(interesting how the emu engineers decided that $800 wasn't a needed value) 
Packit 427e91
	macints reada.a,ready.a,C_8,C_256 
Packit 427e91
Packit 427e91
	
Packit 427e91
;;; Write to the delay line:
Packit 427e91
	
Packit 427e91
	macs  write,C_0,in,C_2^29	
Packit 427e91
		
Packit 427e91
	
Packit 427e91
;;; output values:		
Packit 427e91
;;; 0x55 is 00100000 (?)
Packit 427e91
	macints tmp,C_0,reada.a,C_LSshift; get least significant part of address
Packit 427e91
	
Packit 427e91
	interp tmp2,ready,tmp,reada ;interpolate in-between the two delay line readings
Packit 427e91
	
Packit 427e91
	macs  out,in,tmp2,mix
Packit 427e91
	
Packit 427e91
Packit 427e91
Packit 427e91
		
Packit 427e91
	
Packit 427e91
	end
Packit 427e91
Packit 427e91
Packit 427e91
Packit 427e91
Packit 427e91