DIY Stompboxes > Digital & DSP

MN3011 Block in SpinCad Help.

(1/6) > >>

carvindc125:
Greetings!
I am currently working with a couple of brilliant gents on a project to modernize and bring back the Rockman X100.
We've been on the project over a year now and it is coming along quite nicely. While diving in to the circuitry we realized very quickly that the old MN3011 BBD chip it uses for reverb was not going to be practical to source. They are too expensive and nearly impossible to find.
So we began looking at digital options. Although I believe we have honed in on a couple ideas for our final echo design I discovered in a happy accident one day that spinCAD has a MN3011 block! The FV-1 can easily reproduce the chips characteristics however in another conversation Digital Larry brought up the block needs to be slightly redesigned. The 6 taps are summed together when it should be alternating taps summed to two outs. 1,3, and 5 to Out1 and 2,4and 6 to Out2
I don't know enough of the actual code to edit this but Digital Larry was kind enough to post the original code of the MN3011 in spincad.
Is there anyone here who can edit this so the taps are summed as Tap 1, Tap 3, Tap 5 summed to one output and tap 2, Tap 4, and Tap 6 summed to a second output.
Quote and code from Digital Larry below.

--- Quote from: Digital Larry on April 03, 2021, 05:42:51 AM --- ...Now that I look at it though I realize that the MN3011 block I designed is a little silly in that I mix all taps to a single output.  All this time and nobody ever said anything about it.  That is easy enough to change even manually.

I've used the MN3011 block as a reverb in more complex patches.  Unless you are playing really isolated guitar notes, to my ear, you can get away with a really simple implementation in many cases.


--- Code: ---;
; ----------------------------
;------ Input
;------ Feedback Output
;------ MN3011
RDAX REG0,0.5000000000
RDAX ADCL,0.5000000000
WRA 0,0.0
RDA 7839,1.0
WRAX REG1,0.0000000000
RDA 7839,0.28183829312644537
RDA 932,0.5
RDA 1559,0.31622776601683794
RDA 2812,0.3981071705534972
RDA 4065,0.28183829312644537
RDA 6571,0.22387211385683395
WRAX REG2,0.0000000000
;------ FB In 1
RDAX REG1,1.0000000000
WRAX REG0,0.0000000000
;------ Output
RDAX REG2,1.0000000000
WRAX DACL,0.0000000000
--- End code ---

--- End quote ---

Ice-9:
Having a quick look though that MN3011 block I think it shouldn't be too difficult to organize the correct delay taps to the two outputs, I haven't looked at the X100 so one question I have is around the feedback path. How should this be taken into account? Will the feedback from all taps be common to both outputs? The MN3011 block from spincad looks like feedback is only from tap6.

Ice-9:
A very quick edit of the code that you might try. I haven't looked much at it but try this and see how it might work. I am more used to using SpinASM so I had to first see what SpinCad was doing so I could very much be on the wrong track. I have added remarks to the code so that it might explain. I have not tested


--- Code: ---;
; ----------------------------
;------ Input
;------ Feedback Output
;------ MN3011
RDAX REG0,0.5000000000 ;feedback register
RDAX ADCL,0.5000000000 ;read input left
WRA 0,0.0 ;write to head of delay

RDA 7839,1.0 ;read tap6
WRAX REG1,0.0000000000 ;write to reg1 for feedback and clear the acc

;RDA 7839,0.28183829312644537 ;read tap6 at .28
RDA 932,0.5 ;read tap1 at 0.5
RDA 2812,0.3981071705534972 ;read tap3 at .39
RDA 6571,0.22387211385683395 ;read tap 5 at 0.22
WRAX REG2,0.0000000000 ;write to reg2


RDA 1559,0.31622776601683794 ;read tap2 at 0.31
RDA 4065,0.28183829312644537 ;read tap4 at 0.28
RDA 7839,0.28183829312644537 ;read tap6 at .28

WRAX REG3,0.0000000000 ;write to reg2

;------ FB In 1
RDAX REG1,1.0000000000 ;read tap 6 for feedback and keep in acc
WRAX REG0,0.0000000000 ;read actual feedback register, clear acc
;------ Output
RDAX REG2,1.0000000000 ;read all taps and keep in acc
WRAX DACL,0.0000000000 ;write to dacl and clear acc
RDAX REG3,1.0000000000 ;read all taps and keep in acc
WRAX DACR,0.0000000000 ;write to dacl and clear acc

--- End code ---

potul:
A quick mod to the code should be something like this:


--- Code: ---;
; ----------------------------
;------ Input
;------ Feedback Output
;------ MN3011
RDAX REG0,0.5000000000 ;feedback input
RDAX ADCL,0.5000000000 ;adc
WRA 0,0.0
RDA 7839,1.0 ;tap 6
WRAX REG1,0.0000000000 ;feedback from tap 6
RDA 932,0.5 ;tap 1
RDA 2812,0.3981071705534972 ;tap 3
RDA 6571,0.22387211385683395 ;tap 5
WRAX REG2,0 ;ouput1
RDA 1559,0.31622776601683794 ;tap 2
RDA 4065,0.28183829312644537 ;tap 4
RDA 7839,0.28183829312644537 ;tap 6
WRAX REG3,0.0000000000 ;output2
;------ FB In 1
RDAX REG1,1.0000000000
WRAX REG0,0.0000000000
;------ Output1
RDAX REG2,1.0000000000
WRAX DACL,0.0000000000
;------ Output2
RDAX REG3,1.0000000000
WRAX DACR,0.0000000000

--- End code ---

I haven't tried myself, but it should work. One output to each channel. Feedback from tap 6
Note that this code can be optimized if needed.

Edit: I see I crossed postings with Mick. I think we did more or less the same things to the code.

carvindc125:

--- Quote from: Ice-9 on November 23, 2021, 12:35:53 PM ---A very quick edit of the code that you might try. I haven't looked much at it but try this and see how it might work. I am more used to using SpinASM so I had to first see what SpinCad was doing so I could very much be on the wrong track. I have added remarks to the code so that it might explain. I have not tested


--- Code: ---;
; ----------------------------
;------ Input
;------ Feedback Output
;------ MN3011
RDAX REG0,0.5000000000 ;feedback register
RDAX ADCL,0.5000000000 ;read input left
WRA 0,0.0 ;write to head of delay

RDA 7839,1.0 ;read tap6
WRAX REG1,0.0000000000 ;write to reg1 for feedback and clear the acc

;RDA 7839,0.28183829312644537 ;read tap6 at .28
RDA 932,0.5 ;read tap1 at 0.5
RDA 2812,0.3981071705534972 ;read tap3 at .39
RDA 6571,0.22387211385683395 ;read tap 5 at 0.22
WRAX REG2,0.0000000000 ;write to reg2


RDA 1559,0.31622776601683794 ;read tap2 at 0.31
RDA 4065,0.28183829312644537 ;read tap4 at 0.28
RDA 7839,0.28183829312644537 ;read tap6 at .28

WRAX REG3,0.0000000000 ;write to reg2

;------ FB In 1
RDAX REG1,1.0000000000 ;read tap 6 for feedback and keep in acc
WRAX REG0,0.0000000000 ;read actual feedback register, clear acc
;------ Output
RDAX REG2,1.0000000000 ;read all taps and keep in acc
WRAX DACL,0.0000000000 ;write to dacl and clear acc
RDAX REG3,1.0000000000 ;read all taps and keep in acc
WRAX DACR,0.0000000000 ;write to dacl and clear acc

--- End code ---

--- End quote ---


--- Quote from: potul on November 23, 2021, 12:44:36 PM ---A quick mod to the code should be something like this:


--- Code: ---;
; ----------------------------
;------ Input
;------ Feedback Output
;------ MN3011
RDAX REG0,0.5000000000 ;feedback input
RDAX ADCL,0.5000000000 ;adc
WRA 0,0.0
RDA 7839,1.0 ;tap 6
WRAX REG1,0.0000000000 ;feedback from tap 6
RDA 932,0.5 ;tap 1
RDA 2812,0.3981071705534972 ;tap 3
RDA 6571,0.22387211385683395 ;tap 5
WRAX REG2,0 ;ouput1
RDA 1559,0.31622776601683794 ;tap 2
RDA 4065,0.28183829312644537 ;tap 4
RDA 7839,0.28183829312644537 ;tap 6
WRAX REG3,0.0000000000 ;output2
;------ FB In 1
RDAX REG1,1.0000000000
WRAX REG0,0.0000000000
;------ Output1
RDAX REG2,1.0000000000
WRAX DACL,0.0000000000
;------ Output2
RDAX REG3,1.0000000000
WRAX DACR,0.0000000000

--- End code ---

I haven't tried myself, but it should work. One output to each channel. Feedback from tap 6
Note that this code can be optimized if needed.

Edit: I see I crossed postings with Mick. I think we did more or less the same things to the code.

--- End quote ---

Thanks guys!
After a quick look at the schematic it appears in the X100 all 6 taps are feeding back into the input. However I havent had a chance to try the edits you have made above so im not sure exactly how much of a difference it will make.

Navigation

[0] Message Index

[#] Next page

Go to full version