Blame as10k1/examples/flanger.asm

Packit 427e91
;;; Simple mono flanger
Packit 427e91
;;; Author:Daniel Bertrand
Packit 427e91
;;; Date: May 29,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/Flanging/
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 "flanger"
Packit 427e91
		
Packit 427e91
in	IO
Packit 427e91
out	equ in	
Packit 427e91
Packit 427e91
	
Packit 427e91
	
Packit 427e91
speed	  control  2e-05 , 0 , 1e-4 	; Controls frequency (radians)
Packit 427e91
delay   control  &7e-3  ,$1600 , 20e-3	; twice (2*) average delay (sec)
Packit 427e91
width	  control  #0.33  ,0	 ,0.5	; width control 
Packit 427e91
forward	  control  #1	 ,0      ,#1	; forward mix 
Packit 427e91
feedback  control  0.3   ,0      ,0.5	; feedback level 
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  &20e-3		;20msec 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
;;; 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
	macs  out,in,tmp2,forward
Packit 427e91
	
Packit 427e91
Packit 427e91
;;; feedback and write to the delay line:
Packit 427e91
	
Packit 427e91
	macs  write,in,tmp2,feedback
Packit 427e91
		
Packit 427e91
	
Packit 427e91
	end
Packit 427e91
Packit 427e91
Packit 427e91
Packit 427e91
Packit 427e91