|
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 |
|