I've written a new delay program that has multiple address pointer rutines depending on user input and it all works nicely except for "zipper noise" and I can see that this is solved by using the value @ [address] + value @ [address +1] - fine, but I can't easily figure how to add 1 to the pointer ....
Part of program :
OR $7FFF00 ; Set max
MULX DelayLength
SOF 0.984375 , 0.015625 ; Delay time (Pointer)24-975mS.
RDAX Modulation , 1 ; Add modulation to pointer 0-8mS.
WRAX ADDR_PTR , 1 ; write to delay address pointer
WRAX OldPointerL , 1 ; Save to next time
---- a few other things here, before ----
RMPA 0.5 ; And ADD Value from New delay address set by pointer
So how do I add one to OldPointerL ...?
I can see that many modulations are done in separate memory using the CHO instruction, but I hope this can be avoided as it read the LFO directly + a fixed offset ....
Any help will be appreciated - thanks in advance
Adding 1 to Address Pointer
Moderator: frank
-
- Posts: 13
- Joined: Wed Sep 27, 2017 8:31 am
I thought of a possibility :
OR $7FFF00 ; Set max
MULX DelayLength
SOF 0.984375 , 0.015625 ; Delay time (Pointer)24-975mS.
RDAX Modulation , 1 ; Add modulation to pointer 0-8mS.
WRAX ADDR_PTR , 1 ; write to delay address pointer
WRAX OldPointerL , 1 ; Save to next time
---- a few other things here, before - ACC = 0 ---
RMPA 0.5 ; And ADD Value from New delay address set by pointer
WRAX DelayL , 0
OR $000100 ; Load 1 into ACC
RDAX ADDR_PTR , 1 ; Add them
WRAX ADDR_PTR , 0 ; And write Address +1 back to Pointer
LDAX DelayL ; Read back Previous Value
RMPA 0.5 ; And ADD Value from Next delay address
WRAX DACL , 0
I haven't tested yet - got another appointment now ....
OR $7FFF00 ; Set max
MULX DelayLength
SOF 0.984375 , 0.015625 ; Delay time (Pointer)24-975mS.
RDAX Modulation , 1 ; Add modulation to pointer 0-8mS.
WRAX ADDR_PTR , 1 ; write to delay address pointer
WRAX OldPointerL , 1 ; Save to next time
---- a few other things here, before - ACC = 0 ---
RMPA 0.5 ; And ADD Value from New delay address set by pointer
WRAX DelayL , 0
OR $000100 ; Load 1 into ACC
RDAX ADDR_PTR , 1 ; Add them
WRAX ADDR_PTR , 0 ; And write Address +1 back to Pointer
LDAX DelayL ; Read back Previous Value
RMPA 0.5 ; And ADD Value from Next delay address
WRAX DACL , 0
I haven't tested yet - got another appointment now ....
Something like that should work. You can also try smoothing the modulation source or taking it further and interpolating between samples.
Frank Thomson
Experimental Noize
Experimental Noize
-
- Posts: 13
- Joined: Wed Sep 27, 2017 8:31 am