File: flanger.asm

package info (click to toggle)
alsa-tools 1.0.28-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 12,464 kB
  • ctags: 5,787
  • sloc: ansic: 23,609; cpp: 15,057; sh: 12,305; pascal: 1,140; asm: 1,053; xml: 814; makefile: 733; python: 250
file content (83 lines) | stat: -rw-r--r-- 1,877 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
;;; Simple mono flanger
;;; Author:Daniel Bertrand
;;; Date: May 29,2000

;;; This program is free software; you can redistribute it and/or modify  
;;; it under the terms of the GNU General Public License as published by  
;;; the Free Software Foundation; either version 2 of the License, or     
;;; (at your option) any later version.

;;; References:	
;;; http://www.harmony-central.com/Effects/Articles/Flanging/
		
;;;  speed( formerly "delta")=2*pi*freq/48000
;;;  this give us our delta value for a specific freq (0.1-0.3Hz is good)
		

	include "emu_constants.asm"
	name "flanger"
		
in	IO
out	equ in	

	
	
speed	  control  2e-05 , 0 , 1e-4 	; Controls frequency (radians)
delay   control  &7e-3  ,$1600 , 20e-3	; twice (2*) average delay (sec)
width	  control  #0.33  ,0	 ,0.5	; width control 
forward	  control  #1	 ,0      ,#1	; forward mix 
feedback  control  0.3   ,0      ,0.5	; feedback level 

;; sine generator storage spaces:	
sinx  sta  0	
cosx  sta  #0.5
			
tmp  dyn 	
tmp2 dyn
	
;;; Two Delay Lines:	
	
	
dly   delay  &20e-3		;20msec delay line
	
write	twrite dly,0		; tram writes
ready	tread dly,0		; tram reads
reada   tread dly,0
				
;;;The code:	
	
		
;;; two opcode sinewave generator (I love this chip!):
	macs  sinx,sinx,speed,cosx
	macs1 cosx,cosx,speed,sinx 

;;; 0.5Asint+0.5:	
	macs tmp,C_2^30,sinx,width
	
;;; calculate address:
	macs  ready.a,write.a,delay,tmp

;second addresses for interpolation:
;(interesting how the emu engineers decided that $800 wasn't a needed value) 
	macints reada.a,ready.a,C_8,C_256 
	
	
;;; output values:		
;;; 0x55 is 00100000 (?)
	macints tmp,C_0,reada.a,C_LSshift; get least significant part of address
	
	interp tmp2,ready,tmp,reada ;interpolate in-between the two delay line readings
	macs  out,in,tmp2,forward
	

;;; feedback and write to the delay line:
	
	macs  write,in,tmp2,feedback
		
	
	end