commit f3f21a92bedc48064aeffdd24404bfd604d24932
parent c11117d3569ce62941b884ec22fa484055b60303
Author: Matt Demanett <matt@demanett.net>
Date: Thu, 1 Oct 2020 22:03:36 -0400
ASX: chainable 8-step expander for ADDR-SEQ. #139
Diffstat:
32 files changed, 2660 insertions(+), 369 deletions(-)
diff --git a/README-prerelease.md b/README-prerelease.md
@@ -899,12 +899,20 @@ _Polyphony:_ Same as 8:1.
#### <a name="addrseq"></a> ADDR-SEQ
-ADDR-SEQ is an 8-step sequencer where the step values are set by 8 knobs (with default output range of +/-10V). It has the same clocked or voltage-addressed control circuit as 8:1 and 1:8.
+ADDR-SEQ is an 8-step sequencer where the step values are set by 8 knobs (with default output range of +/-10V). It has the same clocked or voltage-addressed control circuit as 8:1 and 1:8. It can be expanded to more steps, 8 at a time, with <a href="#addrseqx">ASX</a>.
The output range of the knobs may be set on the context (right-click) menu to a variety of bipolar (e.g. +/-5V) and unipolar ranges (e.g. 0-5V).
_Polyphony:_ Same as 8:1.
+#### <a name="addrseqx"></a> ASX
+
+ASX is a chainable expander for <a href="addrseq">ADDR-SEQ</a>, adding 8 steps to the base sequence.
+
+When ASXs are added to an ADDR-SEQ, ADDR-SEQ's STEPS and SELECT knobs (and select CV input) work over the total number of steps, including the expanders. The knob dials will still read 1-8, but the knob will set the step length (or step selection) over the full count of steps. The parameter tooltips, if enabled, will show the real values.
+
+Each ASX in a chain must be positioned to the right of, and adjacent to, the previous ASX in the chain, or the base ADDR-SEQ module. See <a href="#expanders">notes on expanders</a>.
+

#### <a name="pgmr"></a> PGMR
diff --git a/plugin.json b/plugin.json
@@ -740,6 +740,17 @@
]
},
{
+ "slug": "Bogaudio-AddrSeqX",
+ "name": "ASX",
+ "description": "8-step chainable expander for ADDR-SEQ",
+ "manualUrl": "https://github.com/bogaudio/BogaudioModules/blob/master/README.md#addrseqx",
+ "tags": [
+ "Sequencer",
+ "Expander",
+ "Polyphonic"
+ ]
+ },
+ {
"slug": "Bogaudio-Pgmr",
"name": "PGMR",
"description": "4-step programmer and sequencer",
diff --git a/res-pp/AddrSeq-dark-pp.svg b/res-pp/AddrSeq-dark-pp.svg
@@ -17,6 +17,9 @@ text.brand {
polyline {
stroke: #333;
}
+polyline.guide {
+ stroke: #0f0;
+}
path {
stroke: #333;
}
@@ -135,36 +138,6 @@ polyline.knob-tick {
}
</style>
- <defs>
- <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px">
- <g transform="translate(20 20)">
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
- <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
-
- <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
-
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
- </g>
- </symbol>
- </defs>
-
<rect class="module-background background-fill" width="90.0" height="380.0"/>
@@ -289,7 +262,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 -8)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
<g transform="translate(17 26.5)"><svg id="OUT1_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -302,7 +301,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 33.3)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
<g transform="translate(17 67.8)"><svg id="OUT2_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -315,7 +340,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 74.6)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
<g transform="translate(17 109.1)"><svg id="OUT3_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -328,7 +379,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 115.9)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
<g transform="translate(17 150.4)"><svg id="OUT4_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -341,7 +418,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 157.1)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
<g transform="translate(17 191.6)"><svg id="OUT5_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -354,7 +457,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 198.4)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
<g transform="translate(17 232.9)"><svg id="OUT6_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -367,7 +496,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 239.7)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
<g transform="translate(17 274.2)"><svg id="OUT7_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -380,7 +535,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 281)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
<g transform="translate(17 315.5)"><svg id="OUT8_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
diff --git a/res-pp/AddrSeq-lowcontrast-pp.svg b/res-pp/AddrSeq-lowcontrast-pp.svg
@@ -17,6 +17,9 @@ text.brand {
polyline {
stroke: #333;
}
+polyline.guide {
+ stroke: #0f0;
+}
path {
stroke: #333;
}
@@ -115,7 +118,7 @@ polyline.output-label, path.output-label {
}
circle.port-rim {
- stroke: #ccc;
+ stroke: #bbb;
}
circle.port-barrel {
stroke: #222;
@@ -135,36 +138,6 @@ polyline.knob-tick {
}
</style>
- <defs>
- <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px">
- <g transform="translate(20 20)">
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
- <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
-
- <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
-
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
- </g>
- </symbol>
- </defs>
-
<rect class="module-background background-fill" width="90.0" height="380.0"/>
@@ -289,7 +262,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 -8)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
<g transform="translate(17 26.5)"><svg id="OUT1_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -302,7 +301,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 33.3)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
<g transform="translate(17 67.8)"><svg id="OUT2_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -315,7 +340,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 74.6)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
<g transform="translate(17 109.1)"><svg id="OUT3_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -328,7 +379,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 115.9)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
<g transform="translate(17 150.4)"><svg id="OUT4_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -341,7 +418,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 157.1)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
<g transform="translate(17 191.6)"><svg id="OUT5_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -354,7 +457,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 198.4)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
<g transform="translate(17 232.9)"><svg id="OUT6_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -367,7 +496,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 239.7)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
<g transform="translate(17 274.2)"><svg id="OUT7_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -380,7 +535,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 281)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
<g transform="translate(17 315.5)"><svg id="OUT8_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
diff --git a/res-pp/AddrSeq-pp.svg b/res-pp/AddrSeq-pp.svg
@@ -17,6 +17,9 @@ text.brand {
polyline {
stroke: #333;
}
+polyline.guide {
+ stroke: #0f0;
+}
path {
stroke: #333;
}
@@ -71,36 +74,6 @@ polyline.knob-tick {
}
</style>
- <defs>
- <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px">
- <g transform="translate(20 20)">
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
- <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
-
- <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
-
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
- </g>
- </symbol>
- </defs>
-
<rect class="module-background background-fill" width="90.0" height="380.0"/>
@@ -225,7 +198,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 -8)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
<g transform="translate(17 26.5)"><svg id="OUT1_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -238,7 +237,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 33.3)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
<g transform="translate(17 67.8)"><svg id="OUT2_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -251,7 +276,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 74.6)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
<g transform="translate(17 109.1)"><svg id="OUT3_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -264,7 +315,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 115.9)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
<g transform="translate(17 150.4)"><svg id="OUT4_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -277,7 +354,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 157.1)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
<g transform="translate(17 191.6)"><svg id="OUT5_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -290,7 +393,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 198.4)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
<g transform="translate(17 232.9)"><svg id="OUT6_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -303,7 +432,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 239.7)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
<g transform="translate(17 274.2)"><svg id="OUT7_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
@@ -316,7 +471,33 @@ polyline.knob-tick {
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)" href="#dial-bipolar-addrseq"/>
+ <g transform="translate(-3 281)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
<g transform="translate(17 315.5)"><svg id="OUT8_LIGHT">
<rect width="6.4" height="6.4" fill="#0f0"/>
diff --git a/res-pp/AddrSeqX-dark-pp.svg b/res-pp/AddrSeqX-dark-pp.svg
@@ -0,0 +1,474 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="45.0" height="380.0" viewBox="0 0 45.0 380.0">
+ <style>text {
+ fill: #333;
+ font-family: 'Roboto', sans-serif;
+ font-weight: bold;
+}
+text.title {
+ font-family: 'Comfortaa', sans-serif;
+ font-weight: normal;
+}
+text.brand {
+ font-family: 'Audiowide', sans-serif;
+ font-weight: bold;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+
+
+text {
+ fill: #eee;
+}
+
+polyline {
+ stroke: #ccc;
+}
+path {
+ stroke: #ccc;
+}
+
+rect.module-background, .background-fill {
+ fill: #111;
+}
+polyline.module-border-inner {
+ stroke: #191919;
+}
+polyline.module-border-middle {
+ stroke: #111;
+}
+polyline.module-border-outer {
+ stroke: #000;
+}
+
+rect.input-background, rect.input-background-filler {
+ fill: #aaa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #666;
+}
+text.input-label {
+ fill: #222;
+}
+polyline.input-label, path.input-label {
+ stroke: #222;
+}
+text.output-label {
+ fill: #ddd;
+}
+polyline.output-label, path.output-label {
+ stroke: #ddd;
+}
+
+circle.port-rim {
+ stroke: #c0c0c0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #888;
+}
+circle.knob-rim {
+ fill: #444;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="45.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 44.0,1 44.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 45.0,0 45.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="7pt" letter-spacing="2px" text-anchor="end" transform="translate(40.0 13)">ASX</text>
+ <g transform="translate(3 363.0)">
+ <g transform="translate(0 12)">
+ <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text>
+ <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/>
+ </g>
+ </g>
+
+
+
+
+ <g transform="translate(5.5 32)">
+ <g transform="translate(9 4)"><svg id="OUT1_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 -8)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
+ <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 45.3)"><svg id="OUT2_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 33.3)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
+ <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 86.6)"><svg id="OUT3_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 74.6)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
+ <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 127.9)"><svg id="OUT4_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 115.9)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
+ <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 169.1)"><svg id="OUT5_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 157.1)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
+ <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 210.4)"><svg id="OUT6_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 198.4)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
+ <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 251.7)"><svg id="OUT7_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 239.7)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
+ <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 293)"><svg id="OUT8_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 281)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
+ <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+ </g>
+</svg>
diff --git a/res-pp/AddrSeqX-lowcontrast-pp.svg b/res-pp/AddrSeqX-lowcontrast-pp.svg
@@ -0,0 +1,474 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="45.0" height="380.0" viewBox="0 0 45.0 380.0">
+ <style>text {
+ fill: #333;
+ font-family: 'Roboto', sans-serif;
+ font-weight: bold;
+}
+text.title {
+ font-family: 'Comfortaa', sans-serif;
+ font-weight: normal;
+}
+text.brand {
+ font-family: 'Audiowide', sans-serif;
+ font-weight: bold;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+
+
+text {
+ fill: #b3b3b3;
+}
+
+polyline {
+ stroke: #b3b3b3;
+}
+path {
+ stroke: #b3b3b3;
+}
+
+rect.module-background, .background-fill {
+ fill: #333;
+}
+polyline.module-border-inner {
+ stroke: #191919;
+}
+polyline.module-border-middle {
+ stroke: #111;
+}
+polyline.module-border-outer {
+ stroke: #000;
+}
+
+rect.input-background, rect.input-background-filler {
+ fill: #b3b3b3;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #888;
+}
+text.input-label {
+ fill: #666;
+}
+polyline.input-label, path.input-label {
+ stroke: #666;
+}
+text.output-label {
+ fill: #ccc;
+}
+polyline.output-label, path.output-label {
+ stroke: #ccc;
+}
+
+circle.port-rim {
+ stroke: #bbb;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #bbb;
+}
+circle.knob-rim {
+ fill: #555;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="45.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 44.0,1 44.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 45.0,0 45.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="7pt" letter-spacing="2px" text-anchor="end" transform="translate(40.0 13)">ASX</text>
+ <g transform="translate(3 363.0)">
+ <g transform="translate(0 12)">
+ <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text>
+ <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/>
+ </g>
+ </g>
+
+
+
+
+ <g transform="translate(5.5 32)">
+ <g transform="translate(9 4)"><svg id="OUT1_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 -8)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
+ <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 45.3)"><svg id="OUT2_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 33.3)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
+ <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 86.6)"><svg id="OUT3_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 74.6)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
+ <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 127.9)"><svg id="OUT4_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 115.9)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
+ <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 169.1)"><svg id="OUT5_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 157.1)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
+ <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 210.4)"><svg id="OUT6_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 198.4)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
+ <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 251.7)"><svg id="OUT7_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 239.7)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
+ <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 293)"><svg id="OUT8_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 281)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
+ <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+ </g>
+</svg>
diff --git a/res-pp/AddrSeqX-pp.svg b/res-pp/AddrSeqX-pp.svg
@@ -0,0 +1,410 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="45.0" height="380.0" viewBox="0 0 45.0 380.0">
+ <style>text {
+ fill: #333;
+ font-family: 'Roboto', sans-serif;
+ font-weight: bold;
+}
+text.title {
+ font-family: 'Comfortaa', sans-serif;
+ font-weight: normal;
+}
+text.brand {
+ font-family: 'Audiowide', sans-serif;
+ font-weight: bold;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="45.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 44.0,1 44.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 45.0,0 45.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="7pt" letter-spacing="2px" text-anchor="end" transform="translate(40.0 13)">ASX</text>
+ <g transform="translate(3 363.0)">
+ <g transform="translate(0 12)">
+ <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text>
+ <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/>
+ </g>
+ </g>
+
+
+
+
+ <g transform="translate(5.5 32)">
+ <g transform="translate(9 4)"><svg id="OUT1_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 -8)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
+ <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 45.3)"><svg id="OUT2_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 33.3)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
+ <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 86.6)"><svg id="OUT3_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 74.6)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
+ <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 127.9)"><svg id="OUT4_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 115.9)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
+ <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 169.1)"><svg id="OUT5_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 157.1)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
+ <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 210.4)"><svg id="OUT6_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 198.4)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
+ <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 251.7)"><svg id="OUT7_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 239.7)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
+ <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+
+ <g transform="translate(9 293)"><svg id="OUT8_PARAM">
+ <g transform="translate(8 8)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
+ <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
+ </g>
+ </svg></g>
+ <g transform="translate(-3 281)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </g>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
+ <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT">
+ <rect width="6.4" height="6.4" fill="#0f0"/>
+ </svg></g>
+ </g>
+</svg>
diff --git a/res-src/AddrSeq-src.svg b/res-src/AddrSeq-src.svg
@@ -2,36 +2,6 @@
<module hp="6">
<style/>
- <defs>
- <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px">
- <g transform="translate(20 20)">
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
- <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
-
- <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
-
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
- <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
- <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
- </g>
- </symbol>
- </defs>
-
<def xlink:href="#module6" var-name="ADDR-SEQ" var-letterspacing="0.5"/>
<g class="io-group" transform="translate(6.5 32)">
@@ -79,42 +49,42 @@
<g transform="translate(49.5 32)">
<def id="OUT1_PARAM" xlink:href="#knob16" transform="translate(9 4)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
<def id="OUT1_LIGHT" xlink:href="#light-small" transform="translate(17 26.5)"/>
<def id="OUT2_PARAM" xlink:href="#knob16" transform="translate(9 45.3)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
<def id="OUT2_LIGHT" xlink:href="#light-small" transform="translate(17 67.8)"/>
<def id="OUT3_PARAM" xlink:href="#knob16" transform="translate(9 86.6)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
<def id="OUT3_LIGHT" xlink:href="#light-small" transform="translate(17 109.1)"/>
<def id="OUT4_PARAM" xlink:href="#knob16" transform="translate(9 127.9)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
<def id="OUT4_LIGHT" xlink:href="#light-small" transform="translate(17 150.4)"/>
<def id="OUT5_PARAM" xlink:href="#knob16" transform="translate(9 169.1)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
<def id="OUT5_LIGHT" xlink:href="#light-small" transform="translate(17 191.6)"/>
<def id="OUT6_PARAM" xlink:href="#knob16" transform="translate(9 210.4)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
<def id="OUT6_LIGHT" xlink:href="#light-small" transform="translate(17 232.9)"/>
<def id="OUT7_PARAM" xlink:href="#knob16" transform="translate(9 251.7)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
<def id="OUT7_LIGHT" xlink:href="#light-small" transform="translate(17 274.2)"/>
<def id="OUT8_PARAM" xlink:href="#knob16" transform="translate(9 293)"/>
- <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)"/>
<text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
<def id="OUT8_LIGHT" xlink:href="#light-small" transform="translate(17 315.5)"/>
</g>
diff --git a/res-src/AddrSeqX-src.svg b/res-src/AddrSeqX-src.svg
@@ -0,0 +1,49 @@
+<module hp="3">
+ <style/>
+
+ <def xlink:href="#module3h" var-name="ASX"/>
+
+ <!-- <polyline class="guide" points="0,0 0,380" stroke-width="1" fill="none" transform="translate($width/2.0 0)" /> -->
+
+ <g transform="translate(5.5 32)">
+ <def id="OUT1_PARAM" xlink:href="#knob16" transform="translate(9 4)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text>
+ <def id="OUT1_LIGHT" xlink:href="#light-small" transform="translate(17 26.5)"/>
+
+ <def id="OUT2_PARAM" xlink:href="#knob16" transform="translate(9 45.3)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text>
+ <def id="OUT2_LIGHT" xlink:href="#light-small" transform="translate(17 67.8)"/>
+
+ <def id="OUT3_PARAM" xlink:href="#knob16" transform="translate(9 86.6)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text>
+ <def id="OUT3_LIGHT" xlink:href="#light-small" transform="translate(17 109.1)"/>
+
+ <def id="OUT4_PARAM" xlink:href="#knob16" transform="translate(9 127.9)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text>
+ <def id="OUT4_LIGHT" xlink:href="#light-small" transform="translate(17 150.4)"/>
+
+ <def id="OUT5_PARAM" xlink:href="#knob16" transform="translate(9 169.1)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text>
+ <def id="OUT5_LIGHT" xlink:href="#light-small" transform="translate(17 191.6)"/>
+
+ <def id="OUT6_PARAM" xlink:href="#knob16" transform="translate(9 210.4)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text>
+ <def id="OUT6_LIGHT" xlink:href="#light-small" transform="translate(17 232.9)"/>
+
+ <def id="OUT7_PARAM" xlink:href="#knob16" transform="translate(9 251.7)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text>
+ <def id="OUT7_LIGHT" xlink:href="#light-small" transform="translate(17 274.2)"/>
+
+ <def id="OUT8_PARAM" xlink:href="#knob16" transform="translate(9 293)"/>
+ <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)"/>
+ <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text>
+ <def id="OUT8_LIGHT" xlink:href="#light-small" transform="translate(17 315.5)"/>
+ </g>
+</module>
diff --git a/res-src/defs.svg b/res-src/defs.svg
@@ -63,6 +63,18 @@
</g>
</symbol>
+ <symbol id="module3h">
+ <def xlink:href="#module-background"/>
+ <def xlink:href="#module-border"/>
+ <text class="title" font-size="7pt" letter-spacing="${letterspacing}px" default-letterspacing="2" text-anchor="end" transform="translate($width-5 13)">$name</text>
+ <g transform="translate(3 $height-17)">
+ <g transform="translate(0 12)">
+ <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text>
+ <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/>
+ </g>
+ </g>
+ </symbol>
+
<symbol id="button" viewBox="0 0 18px 18px">
<g transform="translate(9 9)">
<circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
@@ -251,6 +263,34 @@
</g>
</symbol>
+ <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/>
+ <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/>
+
+ <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
+
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/>
+ <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/>
+ <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/>
+ </g>
+ </symbol>
+
<symbol id="dial-centertick" viewBox="0 0 40px 40px">
<g transform="translate(20 20)">
<polyline points="0,0 4,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/>
diff --git a/res/AddrSeq-dark.svg b/res/AddrSeq-dark.svg
Binary files differ.
diff --git a/res/AddrSeq-lowcontrast.svg b/res/AddrSeq-lowcontrast.svg
Binary files differ.
diff --git a/res/AddrSeq.svg b/res/AddrSeq.svg
Binary files differ.
diff --git a/res/AddrSeqX-dark.svg b/res/AddrSeqX-dark.svg
Binary files differ.
diff --git a/res/AddrSeqX-lowcontrast.svg b/res/AddrSeqX-lowcontrast.svg
Binary files differ.
diff --git a/res/AddrSeqX.svg b/res/AddrSeqX.svg
Binary files differ.
diff --git a/src/AddrSeq.cpp b/src/AddrSeq.cpp
@@ -2,10 +2,26 @@
#include "AddrSeq.hpp"
void AddrSeq::processAlways(const ProcessArgs& args) {
- std::fill(_lightSums, _lightSums + 8, 0.0f);
+ if (expanderConnected()) {
+ AddrSeqExpanderMessage* te = toExpander();
+ te->baseID = _id;
+ te->position = 1;
+ te->rangeOffset = _rangeOffset;
+ te->rangeScale = _rangeScale;
+ }
}
void AddrSeq::processChannel(const ProcessArgs& args, int c) {
+ std::lock_guard<SpinLock> lock(_elementsLock);
+ std::vector<AddrSeqStep*>& steps = _elements;
+ int stepsN = steps.size();
+
+ if (c == 0) {
+ for (int i = 0; i < stepsN; ++i) {
+ steps[i]->lightSum = 0.0f;
+ }
+ }
+
int step = nextStep(
c,
&inputs[RESET_INPUT],
@@ -13,23 +29,22 @@ void AddrSeq::processChannel(const ProcessArgs& args, int c) {
¶ms[STEPS_PARAM],
params[DIRECTION_PARAM],
¶ms[SELECT_PARAM],
- inputs[SELECT_INPUT]
+ inputs[SELECT_INPUT],
+ stepsN
);
- float out = params[OUT1_PARAM + step].getValue();
+ float out = steps[step]->param.getValue();
out += _rangeOffset;
out *= _rangeScale;
outputs[OUT_OUTPUT].setChannels(_channels);
outputs[OUT_OUTPUT].setVoltage(out, c);
- for (int i = 0; i < 8; ++i) {
- _lightSums[i] += step == i;
- }
-}
+ steps[step]->lightSum += 1;
-void AddrSeq::postProcessAlways(const ProcessArgs& args) {
- for (int i = 0; i < 8; ++i) {
- lights[OUT1_LIGHT + i].value = _lightSums[i] * _inverseChannels;
+ if (c == _channels - 1) {
+ for (int i = 0; i < stepsN; ++i) {
+ steps[i]->light.value = steps[i]->lightSum * _inverseChannels;
+ }
}
}
@@ -71,17 +86,9 @@ struct AddrSeqWidget : AddressableSequenceModuleWidget {
auto out8LightPosition = Vec(66.5, 347.5);
// end generated by svg_widgets.rb
- {
- auto w = createParam<Knob16>(stepsParamPosition, module, AddrSeq::STEPS_PARAM);
- dynamic_cast<Knob*>(w)->snap = true;
- addParam(w);
- }
+ addParam(createParam<Knob16>(stepsParamPosition, module, AddrSeq::STEPS_PARAM));
addParam(createParam<SliderSwitch2State14>(directionParamPosition, module, AddrSeq::DIRECTION_PARAM));
- {
- auto w = createParam<Knob29>(selectParamPosition, module, AddrSeq::SELECT_PARAM);
- dynamic_cast<Knob*>(w)->snap = true;
- addParam(w);
- }
+ addParam(createParam<Knob29>(selectParamPosition, module, AddrSeq::SELECT_PARAM));
addParam(createParam<Knob16>(out1ParamPosition, module, AddrSeq::OUT1_PARAM));
addParam(createParam<Knob16>(out2ParamPosition, module, AddrSeq::OUT2_PARAM));
addParam(createParam<Knob16>(out3ParamPosition, module, AddrSeq::OUT3_PARAM));
diff --git a/src/AddrSeq.hpp b/src/AddrSeq.hpp
@@ -1,13 +1,12 @@
#pragma once
-#include "bogaudio.hpp"
-#include "addressable_sequence.hpp"
-
-extern Model* modelAddrSeq;
+#include "AddrSeq_shared.hpp"
namespace bogaudio {
-struct AddrSeq : OutputRangeAddressableSequenceModule {
+typedef ChainableExpandableModule<AddrSeqExpanderMessage, AddrSeqStep, 8, OutputRangeAddressableSequenceModule> AddrSeqBase;
+
+struct AddrSeq : AddrSeqBase {
enum ParamsIds {
STEPS_PARAM,
DIRECTION_PARAM,
@@ -47,13 +46,79 @@ struct AddrSeq : OutputRangeAddressableSequenceModule {
NUM_LIGHTS
};
- float _lightSums[8] {};
+ struct StepsParamQuantity : ParamQuantity {
+ float getDisplayValue() override {
+ float v = getValue();
+ if (!module) {
+ return v;
+ }
+
+ auto m = dynamic_cast<AddrSeq*>(module);
+ std::lock_guard<SpinLock> lock(m->_elementsLock);
+ int n = m->_elements.size();
+ v = clamp(v, 1.0f, 8.0f);
+ v -= 1.0f;
+ v /= 7.0f;
+ v *= n - 1;
+ v += 1.0f;
+ return (int)v;
+ }
+
+ void setDisplayValue(float dv) override {
+ if (!module) {
+ return;
+ }
+
+ auto m = dynamic_cast<AddrSeq*>(module);
+ std::lock_guard<SpinLock> lock(m->_elementsLock);
+ int n = m->_elements.size();
+ dv = clamp(dv, 1.0f, (float)n);
+ dv -= 1.0f;
+ dv /= (float)(n - 1);
+ dv *= 7.0f;
+ dv += 1.0f;
+ setValue(dv);
+ }
+ };
+
+ struct SelectParamQuantity : ParamQuantity {
+ float getDisplayValue() override {
+ float v = getValue();
+ if (!module) {
+ return v;
+ }
+
+ auto m = dynamic_cast<AddrSeq*>(module);
+ std::lock_guard<SpinLock> lock(m->_elementsLock);
+ int n = m->_elements.size();
+ v = clamp(v, 0.0f, 7.0f);
+ v /= 7.0f;
+ v *= n - 1;
+ v += 1.0f;
+ return (int)v;
+ }
+
+ void setDisplayValue(float dv) override {
+ if (!module) {
+ return;
+ }
- AddrSeq() {
+ auto m = dynamic_cast<AddrSeq*>(module);
+ std::lock_guard<SpinLock> lock(m->_elementsLock);
+ int n = m->_elements.size();
+ dv = clamp(dv, 1.0f, (float)n);
+ dv -= 1.0f;
+ dv /= (float)(n - 1);
+ dv *= 7.0f;
+ setValue(dv);
+ }
+ };
+
+ AddrSeq() : AddrSeqBase(AddrSeqRegistry::registry()) {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
- configParam(STEPS_PARAM, 1.0f, 8.0f, 8.0f, "Steps");
+ configParam<StepsParamQuantity>(STEPS_PARAM, 1.0f, 8.0f, 8.0f, "Steps");
configParam(DIRECTION_PARAM, 0.0f, 1.0f, 1.0f, "Direction");
- configParam(SELECT_PARAM, 0.0f, 7.0f, 0.0f, "Select step");
+ configParam<SelectParamQuantity>(SELECT_PARAM, 0.0f, 7.0f, 0.0f, "Select step");
configParam<OutputRangeParamQuantity>(OUT1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1", " V");
configParam<OutputRangeParamQuantity>(OUT2_PARAM, -1.0f, 1.0f, 0.0f, "Step 2", " V");
configParam<OutputRangeParamQuantity>(OUT3_PARAM, -1.0f, 1.0f, 0.0f, "Step 3", " V");
@@ -63,11 +128,23 @@ struct AddrSeq : OutputRangeAddressableSequenceModule {
configParam<OutputRangeParamQuantity>(OUT7_PARAM, -1.0f, 1.0f, 0.0f, "Step 7", " V");
configParam<OutputRangeParamQuantity>(OUT8_PARAM, -1.0f, 1.0f, 0.0f, "Step 8", " V");
setInputIDs(CLOCK_INPUT, SELECT_INPUT);
+
+ setLocalElements({
+ new AddrSeqStep(params[OUT1_PARAM], lights[OUT1_LIGHT]),
+ new AddrSeqStep(params[OUT2_PARAM], lights[OUT2_LIGHT]),
+ new AddrSeqStep(params[OUT3_PARAM], lights[OUT3_LIGHT]),
+ new AddrSeqStep(params[OUT4_PARAM], lights[OUT4_LIGHT]),
+ new AddrSeqStep(params[OUT5_PARAM], lights[OUT5_LIGHT]),
+ new AddrSeqStep(params[OUT6_PARAM], lights[OUT6_LIGHT]),
+ new AddrSeqStep(params[OUT7_PARAM], lights[OUT7_LIGHT]),
+ new AddrSeqStep(params[OUT8_PARAM], lights[OUT8_LIGHT])
+ });
+ registerBase();
+ setExpanderModelPredicate([](Model* m) { return m == modelAddrSeqX; });
}
void processAlways(const ProcessArgs& args) override;
void processChannel(const ProcessArgs& args, int c) override;
- void postProcessAlways(const ProcessArgs& args) override;
};
} // namespace bogaudio
diff --git a/src/AddrSeqX.cpp b/src/AddrSeqX.cpp
@@ -0,0 +1,79 @@
+
+#include "AddrSeqX.hpp"
+
+void AddrSeqX::processAlways(const ProcessArgs& args) {
+ int position = 0;
+ int baseID = 0;
+ if (baseConnected()) {
+ AddrSeqExpanderMessage* bm = fromBase();
+ baseID = bm->baseID;
+ position = bm->position;
+ _rangeOffset = bm->rangeOffset;
+ _rangeScale = bm->rangeScale;
+ }
+ setBaseIDAndPosition(baseID, position);
+ if (_position < 1) {
+ for (int i = 0; i < 4; ++i) {
+ _localElements[i]->light.value = 0.0f;
+ }
+ }
+
+ if (expanderConnected()) {
+ AddrSeqExpanderMessage* te = toExpander();
+ te->baseID = _baseID;
+ te->position = _position > 0 ? _position + 1 : 0;
+ te->rangeOffset = _rangeOffset;
+ te->rangeScale = _rangeScale;
+ }
+}
+
+struct AddrSeqXWidget : BGModuleWidget {
+ static constexpr int hp = 3;
+
+ AddrSeqXWidget(AddrSeqX* module) {
+ setModule(module);
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+ setPanel(box.size, "AddrSeqX");
+ createScrews();
+
+ // generated by svg_widgets.rb
+ auto out1ParamPosition = Vec(14.5, 36.0);
+ auto out2ParamPosition = Vec(14.5, 77.3);
+ auto out3ParamPosition = Vec(14.5, 118.6);
+ auto out4ParamPosition = Vec(14.5, 159.9);
+ auto out5ParamPosition = Vec(14.5, 201.1);
+ auto out6ParamPosition = Vec(14.5, 242.4);
+ auto out7ParamPosition = Vec(14.5, 283.7);
+ auto out8ParamPosition = Vec(14.5, 325.0);
+
+ auto out1LightPosition = Vec(22.5, 58.5);
+ auto out2LightPosition = Vec(22.5, 99.8);
+ auto out3LightPosition = Vec(22.5, 141.1);
+ auto out4LightPosition = Vec(22.5, 182.4);
+ auto out5LightPosition = Vec(22.5, 223.6);
+ auto out6LightPosition = Vec(22.5, 264.9);
+ auto out7LightPosition = Vec(22.5, 306.2);
+ auto out8LightPosition = Vec(22.5, 347.5);
+ // end generated by svg_widgets.rb
+
+ addParam(createParam<Knob16>(out1ParamPosition, module, AddrSeqX::OUT1_PARAM));
+ addParam(createParam<Knob16>(out2ParamPosition, module, AddrSeqX::OUT2_PARAM));
+ addParam(createParam<Knob16>(out3ParamPosition, module, AddrSeqX::OUT3_PARAM));
+ addParam(createParam<Knob16>(out4ParamPosition, module, AddrSeqX::OUT4_PARAM));
+ addParam(createParam<Knob16>(out5ParamPosition, module, AddrSeqX::OUT5_PARAM));
+ addParam(createParam<Knob16>(out6ParamPosition, module, AddrSeqX::OUT6_PARAM));
+ addParam(createParam<Knob16>(out7ParamPosition, module, AddrSeqX::OUT7_PARAM));
+ addParam(createParam<Knob16>(out8ParamPosition, module, AddrSeqX::OUT8_PARAM));
+
+ addChild(createLight<SmallLight<GreenLight>>(out1LightPosition, module, AddrSeqX::OUT1_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out2LightPosition, module, AddrSeqX::OUT2_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out3LightPosition, module, AddrSeqX::OUT3_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out4LightPosition, module, AddrSeqX::OUT4_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out5LightPosition, module, AddrSeqX::OUT5_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out6LightPosition, module, AddrSeqX::OUT6_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out7LightPosition, module, AddrSeqX::OUT7_LIGHT));
+ addChild(createLight<SmallLight<GreenLight>>(out8LightPosition, module, AddrSeqX::OUT8_LIGHT));
+ }
+};
+
+Model* modelAddrSeqX = createModel<AddrSeqX, AddrSeqXWidget>("Bogaudio-AddrSeqX", "ASX", "8-step chainable expander for ADDR-SEQ", "Sequencer", "Expander", "Polyphonic");
diff --git a/src/AddrSeqX.hpp b/src/AddrSeqX.hpp
@@ -0,0 +1,70 @@
+#pragma once
+
+#include "AddrSeq_shared.hpp"
+
+namespace bogaudio {
+
+typedef ChainableExpanderModule<AddrSeqExpanderMessage, AddrSeqStep, 8, BGModule> AddrSeqXBase;
+
+struct AddrSeqX : AddrSeqXBase, OutputRange {
+ enum ParamsIds {
+ OUT1_PARAM,
+ OUT2_PARAM,
+ OUT3_PARAM,
+ OUT4_PARAM,
+ OUT5_PARAM,
+ OUT6_PARAM,
+ OUT7_PARAM,
+ OUT8_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ OUT1_LIGHT,
+ OUT2_LIGHT,
+ OUT3_LIGHT,
+ OUT4_LIGHT,
+ OUT5_LIGHT,
+ OUT6_LIGHT,
+ OUT7_LIGHT,
+ OUT8_LIGHT,
+ NUM_LIGHTS
+ };
+
+ AddrSeqX() : AddrSeqXBase(AddrSeqRegistry::registry()) {
+ config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
+ configParam<OutputRangeParamQuantity>(OUT1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1", " V");
+ configParam<OutputRangeParamQuantity>(OUT2_PARAM, -1.0f, 1.0f, 0.0f, "Step 2", " V");
+ configParam<OutputRangeParamQuantity>(OUT3_PARAM, -1.0f, 1.0f, 0.0f, "Step 3", " V");
+ configParam<OutputRangeParamQuantity>(OUT4_PARAM, -1.0f, 1.0f, 0.0f, "Step 4", " V");
+ configParam<OutputRangeParamQuantity>(OUT5_PARAM, -1.0f, 1.0f, 0.0f, "Step 5", " V");
+ configParam<OutputRangeParamQuantity>(OUT6_PARAM, -1.0f, 1.0f, 0.0f, "Step 6", " V");
+ configParam<OutputRangeParamQuantity>(OUT7_PARAM, -1.0f, 1.0f, 0.0f, "Step 7", " V");
+ configParam<OutputRangeParamQuantity>(OUT8_PARAM, -1.0f, 1.0f, 0.0f, "Step 8", " V");
+
+ setLocalElements({
+ new AddrSeqStep(params[OUT1_PARAM], lights[OUT1_LIGHT]),
+ new AddrSeqStep(params[OUT2_PARAM], lights[OUT2_LIGHT]),
+ new AddrSeqStep(params[OUT3_PARAM], lights[OUT3_LIGHT]),
+ new AddrSeqStep(params[OUT4_PARAM], lights[OUT4_LIGHT]),
+ new AddrSeqStep(params[OUT5_PARAM], lights[OUT5_LIGHT]),
+ new AddrSeqStep(params[OUT6_PARAM], lights[OUT6_LIGHT]),
+ new AddrSeqStep(params[OUT7_PARAM], lights[OUT7_LIGHT]),
+ new AddrSeqStep(params[OUT8_PARAM], lights[OUT8_LIGHT])
+ });
+ setBaseModelPredicate([](Model* m) { return m == modelAddrSeq || m == modelAddrSeqX; });
+ setExpanderModelPredicate([](Model* m) { return m == modelAddrSeqX; });
+ }
+
+ void processAlways(const ProcessArgs& args) override;
+};
+
+} // namespace bogaudio
diff --git a/src/AddrSeq_shared.hpp b/src/AddrSeq_shared.hpp
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "addressable_sequence.hpp"
+#include "expanders.hpp"
+
+extern Model* modelAddrSeq;
+extern Model* modelAddrSeqX;
+
+namespace bogaudio {
+
+struct AddrSeqExpanderMessage : ExpanderMessage {
+ int baseID = -1;
+ int position = -1;
+ float rangeOffset = 0.0f;
+ float rangeScale = 10.0f;
+};
+
+struct AddrSeqStep {
+ Param& param;
+ Light& light;
+ float lightSum = 0.0f;
+
+ AddrSeqStep(
+ Param& param,
+ Light& light
+ )
+ : param(param)
+ , light(light)
+ {}
+};
+
+typedef ChainableRegistry<AddrSeqStep, 8> AddrSeqRegistry;
+
+} // namespace bogaudio
diff --git a/src/Pgmr.cpp b/src/Pgmr.cpp
@@ -4,14 +4,14 @@
#define SELECT_TRIGGERS "SELECT_TRIGGERS"
void Pgmr::reset() {
- std::lock_guard<SpinLock> lock(_stepsLock);
+ std::lock_guard<SpinLock> lock(_elementsLock);
for (int c = 0; c < maxChannels; ++c) {
_lastSteps[c] = -1;
_allPulseGens[c].process(1000.0f);
}
- for (int i = 0, n = _steps.size(); i < n; ++i) {
- _steps[i]->reset();
+ for (auto* element : _elements) {
+ element->reset();
}
}
@@ -48,11 +48,13 @@ void Pgmr::processAlways(const ProcessArgs& args) {
}
void Pgmr::processChannel(const ProcessArgs& args, int c) {
- std::lock_guard<SpinLock> lock(_stepsLock);
- int steps = _steps.size();
+ std::lock_guard<SpinLock> lock(_elementsLock);
+ std::vector<PgmrStep*>& steps = _elements;
+ int stepsN = steps.size();
+
if (c == 0) {
- for (int i = 0, n = _steps.size(); i < n; ++i) {
- _steps[i]->lightSum = 0.0f;
+ for (int i = 0; i < stepsN; ++i) {
+ steps[i]->lightSum = 0.0f;
}
}
@@ -64,37 +66,37 @@ void Pgmr::processChannel(const ProcessArgs& args, int c) {
params[DIRECTION_PARAM],
NULL,
inputs[SELECT_INPUT],
- steps
+ stepsN
);
- for (int i = 0; i < steps; ++i) {
- if (_steps[i]->triggers[c].process(_steps[i]->selectParam.getValue() + _steps[i]->selectInput.getPolyVoltage(c))) {
- step = setStep(c, i, steps);
+ for (int i = 0; i < stepsN; ++i) {
+ if (steps[i]->triggers[c].process(steps[i]->selectParam.getValue() + steps[i]->selectInput.getPolyVoltage(c))) {
+ step = setStep(c, i, stepsN);
}
}
{
- float out = _steps[step]->aParam.getValue();
+ float out = steps[step]->aParam.getValue();
out += _rangeOffset;
out *= _rangeScale;
outputs[A_OUTPUT].setChannels(_channels);
outputs[A_OUTPUT].setVoltage(out, c);
}
{
- float out = _steps[step]->bParam.getValue();
+ float out = steps[step]->bParam.getValue();
out += _rangeOffset;
out *= _rangeScale;
outputs[B_OUTPUT].setChannels(_channels);
outputs[B_OUTPUT].setVoltage(out, c);
}
{
- float out = _steps[step]->cParam.getValue();
+ float out = steps[step]->cParam.getValue();
out += _rangeOffset;
out *= _rangeScale;
outputs[C_OUTPUT].setChannels(_channels);
outputs[C_OUTPUT].setVoltage(out, c);
}
{
- float out = _steps[step]->dParam.getValue();
+ float out = steps[step]->dParam.getValue();
out += _rangeOffset;
out *= _rangeScale;
outputs[D_OUTPUT].setChannels(_channels);
@@ -104,30 +106,25 @@ void Pgmr::processChannel(const ProcessArgs& args, int c) {
if (step != _lastSteps[c]) {
_lastSteps[c] = step;
_allPulseGens[c].trigger(0.001f);
- _steps[step]->pulseGens[c].trigger(0.001f);
+ steps[step]->pulseGens[c].trigger(0.001f);
}
outputs[SELECT_ALL_OUTPUT].setChannels(_channels);
outputs[SELECT_ALL_OUTPUT].setVoltage(_allPulseGens[c].process(_sampleTime) * 5.0f, c);
- for (int i = 0; i < steps; ++i) {
- _steps[i]->selectedOutput.setChannels(_channels);
- _steps[i]->selectedOutput.setVoltage((_steps[i]->pulseGens[c].process(_sampleTime) || (!_selectTriggers && step == i)) * 5.0f, c);
+ for (int i = 0; i < stepsN; ++i) {
+ steps[i]->selectedOutput.setChannels(_channels);
+ steps[i]->selectedOutput.setVoltage((steps[i]->pulseGens[c].process(_sampleTime) || (!_selectTriggers && step == i)) * 5.0f, c);
- _steps[i]->lightSum += step == i;
+ steps[i]->lightSum += step == i;
}
if (c == _channels - 1) {
- for (int i = 0, n = _steps.size(); i < n; ++i) {
- _steps[i]->selectedLight.value = _steps[i]->lightSum * _inverseChannels;
+ for (int i = 0; i < stepsN; ++i) {
+ steps[i]->selectedLight.value = steps[i]->lightSum * _inverseChannels;
}
}
}
-void Pgmr::setSteps(std::vector<PgmrStep*>& steps) {
- std::lock_guard<SpinLock> lock(_stepsLock);
- _steps = steps;
-}
-
struct PgmrWidget : AddressableSequenceBaseModuleWidget {
static constexpr int hp = 15;
diff --git a/src/Pgmr.hpp b/src/Pgmr.hpp
@@ -4,7 +4,9 @@
namespace bogaudio {
-struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequenceModule>, PgmrBase {
+typedef ChainableExpandableModule<PgmrExpanderMessage, PgmrStep, 4, OutputRangeAddressableSequenceModule> PgmrBase;
+
+struct Pgmr : PgmrBase {
enum ParamsIds {
DIRECTION_PARAM,
SELECT_ON_CLOCK_PARAM,
@@ -64,13 +66,10 @@ struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequen
float _sampleTime = 0.001f;
bool _selectTriggers = false;
- SpinLock _stepsLock;
- std::vector<PgmrStep*> _steps;
int _lastSteps[maxChannels] {};
rack::dsp::PulseGenerator _allPulseGens[maxChannels];
- int _id = -1;
- Pgmr() {
+ Pgmr() : PgmrBase(PgmrRegistry::registry()) {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
configParam(DIRECTION_PARAM, 0.0f, 1.0f, 1.0f, "Forward");
configParam(SELECT_ON_CLOCK_PARAM, 0.0f, 1.0f, 0.0f, "Select on clock");
@@ -96,16 +95,14 @@ struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequen
configParam(SELECT4_PARAM, 0.0f, 1.0f, 0.0f, "Select 4");
setInputIDs(CLOCK_INPUT, SELECT_INPUT);
- _localSteps[0] = new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]);
- _localSteps[1] = new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]);
- _localSteps[2] = new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]);
- _localSteps[3] = new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT]);
-
+ setLocalElements({
+ new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]),
+ new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]),
+ new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]),
+ new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT])
+ });
+ registerBase();
setExpanderModelPredicate([](Model* m) { return m == modelPgmrX; });
- _id = PgmrRegistry::registry().registerBase(*this);
- }
- virtual ~Pgmr() {
- PgmrRegistry::registry().deregisterBase(_id);
}
void reset() override;
@@ -115,7 +112,6 @@ struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequen
void modulate() override;
void processAlways(const ProcessArgs& args) override;
void processChannel(const ProcessArgs& args, int c) override;
- void setSteps(std::vector<PgmrStep*>& steps);
};
} // namespace bogaudio
diff --git a/src/PgmrX.cpp b/src/PgmrX.cpp
@@ -11,25 +11,13 @@ void PgmrX::processAlways(const ProcessArgs& args) {
_rangeOffset = bm->rangeOffset;
_rangeScale = bm->rangeScale;
}
-
- if (_registered && (position <= 0 || position != _position)) {
- PgmrRegistry::registry().deregisterExpander(_baseID, _position);
- _registered = false;
- _baseID = 0;
- _position = 0;
- }
- else if (!_registered && position > 0) {
- _registered = true;
- _baseID = baseID;
- _position = position;
- PgmrRegistry::registry().registerExpander(_baseID, _position, *this);
- }
-
+ setBaseIDAndPosition(baseID, position);
if (_position < 1) {
for (int i = 0; i < 4; ++i) {
- _localSteps[i]->selectedLight.value = 0.0f;
+ _localElements[i]->selectedLight.value = 0.0f;
}
}
+
if (expanderConnected()) {
PgmrExpanderMessage* te = toExpander();
te->baseID = _baseID;
diff --git a/src/PgmrX.hpp b/src/PgmrX.hpp
@@ -4,7 +4,9 @@
namespace bogaudio {
-struct PgmrX : ExpanderModule<PgmrExpanderMessage, ExpandableModule<PgmrExpanderMessage, BGModule>>, PgmrBase, OutputRange {
+typedef ChainableExpanderModule<PgmrExpanderMessage, PgmrStep, 4, BGModule> PgmrXBase;
+
+struct PgmrX : PgmrXBase, OutputRange {
enum ParamsIds {
CVA1_PARAM,
CVB1_PARAM,
@@ -53,11 +55,7 @@ struct PgmrX : ExpanderModule<PgmrExpanderMessage, ExpandableModule<PgmrExpander
NUM_LIGHTS
};
- bool _registered = false;
- int _baseID = -1;
- int _position = -1;
-
- PgmrX() {
+ PgmrX() : PgmrXBase(PgmrRegistry::registry()) {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
configParam<OutputRangeParamQuantity>(CVA1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1A", " V");
configParam<OutputRangeParamQuantity>(CVB1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1B", " V");
@@ -80,17 +78,15 @@ struct PgmrX : ExpanderModule<PgmrExpanderMessage, ExpandableModule<PgmrExpander
configParam<OutputRangeParamQuantity>(CVD4_PARAM, -1.0f, 1.0f, 0.0f, "Step 4D", " V");
configParam<OutputRangeParamQuantity>(SELECT4_PARAM, 0.0f, 1.0f, 0.0f, "Select 4");
- _localSteps[0] = new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]);
- _localSteps[1] = new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]);
- _localSteps[2] = new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]);
- _localSteps[3] = new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT]);
-
+ setLocalElements({
+ new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]),
+ new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]),
+ new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]),
+ new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT])
+ });
setBaseModelPredicate([](Model* m) { return m == modelPgmr || m == modelPgmrX; });
setExpanderModelPredicate([](Model* m) { return m == modelPgmrX; });
}
- virtual ~PgmrX() {
- PgmrRegistry::registry().deregisterExpander(_baseID, _position);
- }
void processAlways(const ProcessArgs& args) override;
};
diff --git a/src/Pgmr_shared.cpp b/src/Pgmr_shared.cpp
@@ -1,7 +1,5 @@
#include "Pgmr_shared.hpp"
-#include "Pgmr.hpp"
-#include "PgmrX.hpp"
void PgmrStep::reset() {
for (int c = 0; c < BGModule::maxChannels; ++c) {
@@ -9,71 +7,3 @@ void PgmrStep::reset() {
pulseGens[c].process(1000.0f);
}
}
-
-
-PgmrRegistry::Base::Base(Pgmr& b) : module(b) {
- std::copy(b._localSteps, b._localSteps + 4, std::back_inserter(steps));
-}
-
-int PgmrRegistry::registerBase(Pgmr& b) {
- std::lock_guard<std::mutex> lock(_lock);
-
- int id = _nextID;
- ++_nextID;
- auto p = _bases.emplace(id, Base(b));
- b.setSteps(p.first->second.steps);
- return id;
-}
-
-void PgmrRegistry::deregisterBase(int id) {
- std::lock_guard<std::mutex> lock(_lock);
- _bases.erase(id);
-}
-
-void PgmrRegistry::registerExpander(int baseID, int position, PgmrX& x) {
- std::lock_guard<std::mutex> lock(_lock);
-
- assert(position > 0);
- auto base = _bases.find(baseID);
- if (base != _bases.end()) {
- int i = 4 * position;
- if (i < (int)base->second.steps.size()) {
- assert(!base->second.steps[i]);
- std::copy(x._localSteps, x._localSteps + 4, base->second.steps.begin() + i);
- }
- else {
- base->second.steps.resize(i + 4, NULL);
- std::copy(x._localSteps, x._localSteps + 4, base->second.steps.begin() + i);
- }
- for (auto i = base->second.steps.begin(), n = base->second.steps.end(); i != n; ++i) {
- if (!*i) {
- return;
- }
- }
- base->second.module.setSteps(base->second.steps);
- }
-}
-
-void PgmrRegistry::deregisterExpander(int baseID, int position) {
- std::lock_guard<std::mutex> lock(_lock);
-
- auto base = _bases.find(baseID);
- if (base != _bases.end()) {
- int n = 4 * position;
- if (n < (int)base->second.steps.size()) {
- int i = 0;
- for (; i < n; ++i) {
- if (!base->second.steps[i]) {
- break;
- }
- }
- base->second.steps.resize(i);
- base->second.module.setSteps(base->second.steps);
- }
- }
-}
-
-PgmrRegistry& PgmrRegistry::registry() {
- static PgmrRegistry instance;
- return instance;
-}
diff --git a/src/Pgmr_shared.hpp b/src/Pgmr_shared.hpp
@@ -57,41 +57,6 @@ struct PgmrStep {
void reset();
};
-struct PgmrBase {
- PgmrStep* _localSteps[4] {};
-
- virtual ~PgmrBase() {
- for (int i = 0; i < 4; ++i) {
- if (_localSteps[i]) {
- delete _localSteps[i];
- }
- }
- }
-};
-
-struct Pgmr;
-struct PgmrX;
-
-struct PgmrRegistry {
-private:
- struct Base {
- Pgmr& module;
- std::vector<PgmrStep*> steps;
-
- Base(Pgmr& b);
- };
-
- std::mutex _lock;
- int _nextID = 1;
- std::unordered_map<int, Base> _bases;
-
-public:
- int registerBase(Pgmr& b);
- void deregisterBase(int id);
- void registerExpander(int baseID, int position, PgmrX& x);
- void deregisterExpander(int baseID, int position);
-
- static PgmrRegistry& registry();
-};
+typedef ChainableRegistry<PgmrStep, 4> PgmrRegistry;
} // namespace bogaudio
diff --git a/src/addressable_sequence.cpp b/src/addressable_sequence.cpp
@@ -6,6 +6,12 @@
#define TRIGGERED_SELECT "triggered_select"
#define REVERSE_ON_NEGATIVE_CLOCK "reverse_on_negative_clock"
+void AddressableSequenceModule::setInputIDs(int clockInputID, int selectInputID) {
+ _polyInputID = clockInputID;
+ _clockInputID = clockInputID;
+ _selectInputID = selectInputID;
+}
+
void AddressableSequenceModule::reset() {
for (int i = 0; i < maxChannels; ++i) {
_step[i] = 0;
@@ -85,7 +91,12 @@ int AddressableSequenceModule::nextStep(
int steps = n;
if (stepsParam) {
- steps = clamp(stepsParam->getValue(), 1.0f, (float)n);
+ float s = clamp(stepsParam->getValue(), 1.0f, 8.0f);
+ s -= 1.0f;
+ s /= 7.0f;
+ s *= n - 1;
+ s += 1.0f;
+ steps = s;
}
int reverse = 1 - 2 * (directionParam.getValue() == 0.0f);
_step[c] = (_step[c] + reverse * clock + -reverse * negativeClock) % steps;
@@ -94,7 +105,8 @@ int AddressableSequenceModule::nextStep(
float select = n;
if (selectParam) {
- select = clamp(selectParam->getValue(), 0.0f, (float)(n - 1));
+ float s = clamp(selectParam->getValue(), 0.0f, 7.0f) / 7.0f;
+ select = s * (n - 1);
}
if (_triggeredSelect) {
if (_selectTrigger[c].process(selectInput.getPolyVoltage(c))) {
@@ -103,7 +115,7 @@ int AddressableSequenceModule::nextStep(
_select[c] -= _select[c] * reset;
}
else {
- select += clamp(selectInput.getPolyVoltage(c), -9.99f, 9.99f) * 0.1f * (float)n;
+ select += clamp(selectInput.getPolyVoltage(c), -10.0f, 10.0f) * 0.1f * (float)(n - 1);
if (!_selectOnClock || clock) {
_select[c] = select;
}
diff --git a/src/addressable_sequence.hpp b/src/addressable_sequence.hpp
@@ -23,11 +23,7 @@ struct AddressableSequenceModule : BGModule {
bool _triggeredSelect = false;
bool _reverseOnNegativeClock = false;
- void setInputIDs(int clockInputID, int selectInputID) {
- _polyInputID = clockInputID;
- _clockInputID = clockInputID;
- _selectInputID = selectInputID;
- }
+ void setInputIDs(int clockInputID, int selectInputID);
void reset() override;
void sampleRateChange() override;
json_t* toJson(json_t* root) override;
diff --git a/src/bogaudio.cpp b/src/bogaudio.cpp
@@ -5,6 +5,7 @@
#include "ADSR.hpp"
#include "Additator.hpp"
#include "AddrSeq.hpp"
+#include "AddrSeqX.hpp"
#include "AMRM.hpp"
#include "Analyzer.hpp"
#include "AnalyzerXL.hpp"
@@ -200,6 +201,7 @@ void init(rack::Plugin *p) {
p->addModel(modelOneEight);
p->addModel(modelEightOne);
p->addModel(modelAddrSeq);
+ p->addModel(modelAddrSeqX);
p->addModel(modelPgmr);
p->addModel(modelPgmrX);
diff --git a/src/expanders.hpp b/src/expanders.hpp
@@ -107,4 +107,166 @@ struct ExpanderModule : BASE {
}
};
+template<class E, int N>
+struct ChainableRegistry {
+public:
+ struct Chainable {
+ E* _localElements[N] {};
+
+ virtual ~Chainable() {
+ for (int i = 0; i < N; ++i) {
+ if (_localElements[i]) {
+ delete _localElements[i];
+ }
+ }
+ }
+
+ void setLocalElements(std::vector<E*> es) {
+ assert(es.size() == N);
+ for (int i = 0; i < N; ++i) {
+ _localElements[i] = es[i];
+ }
+ }
+ };
+
+ struct ChainableBase : Chainable {
+ SpinLock _elementsLock;
+ std::vector<E*> _elements;
+
+ void setElements(const std::vector<E*>& elements) {
+ std::lock_guard<SpinLock> lock(_elementsLock);
+ _elements = elements;
+ }
+ };
+
+ typedef Chainable ChainableExpander;
+
+private:
+ struct Base {
+ ChainableBase& module;
+ std::vector<E*> elements;
+
+ Base(ChainableBase& b) : module(b) {
+ std::copy(b._localElements, b._localElements + N, std::back_inserter(elements));
+ }
+ };
+
+ std::mutex _lock;
+ int _nextID = 1;
+ std::unordered_map<int, Base> _bases;
+
+public:
+ int registerBase(ChainableBase& b) {
+ std::lock_guard<std::mutex> lock(_lock);
+
+ int id = _nextID;
+ ++_nextID;
+ auto p = _bases.emplace(id, Base(b));
+ b.setElements(p.first->second.elements);
+ return id;
+ }
+
+ void deregisterBase(int id) {
+ std::lock_guard<std::mutex> lock(_lock);
+ _bases.erase(id);
+ }
+
+ void registerExpander(int baseID, int position, ChainableExpander& x) {
+ std::lock_guard<std::mutex> lock(_lock);
+
+ assert(position > 0);
+ auto base = _bases.find(baseID);
+ if (base != _bases.end()) {
+ int i = N * position;
+ if (i < (int)base->second.elements.size()) {
+ assert(!base->second.elements[i]);
+ std::copy(x._localElements, x._localElements + N, base->second.elements.begin() + i);
+ }
+ else {
+ base->second.elements.resize(i + N, NULL);
+ std::copy(x._localElements, x._localElements + N, base->second.elements.begin() + i);
+ }
+ for (auto i = base->second.elements.begin(), n = base->second.elements.end(); i != n; ++i) {
+ if (!*i) {
+ return;
+ }
+ }
+ base->second.module.setElements(base->second.elements);
+ }
+ }
+
+ void deregisterExpander(int baseID, int position) {
+ std::lock_guard<std::mutex> lock(_lock);
+
+ auto base = _bases.find(baseID);
+ if (base != _bases.end()) {
+ int n = N * position;
+ if (n < (int)base->second.elements.size()) {
+ int i = 0;
+ for (; i < n; ++i) {
+ if (!base->second.elements[i]) {
+ break;
+ }
+ }
+ base->second.elements.resize(i);
+ base->second.module.setElements(base->second.elements);
+ }
+ }
+ }
+
+ static ChainableRegistry& registry() {
+ static ChainableRegistry<E, N> instance;
+ return instance;
+ }
+};
+
+template<class MESSAGE, class ELEMENT, int N, class BASE>
+struct ChainableExpandableModule
+: ExpandableModule<MESSAGE, BASE>
+, ChainableRegistry<ELEMENT, N>::ChainableBase
+{
+ ChainableRegistry<ELEMENT, N>& _registry;
+ int _id = -1;
+
+ ChainableExpandableModule(ChainableRegistry<ELEMENT, N>& registry) : _registry(registry) {}
+ virtual ~ChainableExpandableModule() {
+ _registry.deregisterBase(_id);
+ }
+
+ void registerBase() {
+ _id = _registry.registerBase(*this);
+ }
+};
+
+template<class MESSAGE, class ELEMENT, int N, class BASE>
+struct ChainableExpanderModule
+: ExpanderModule<MESSAGE, ExpandableModule<MESSAGE, BASE>>
+, ChainableRegistry<ELEMENT, N>::ChainableExpander
+{
+ ChainableRegistry<ELEMENT, N>& _registry;
+ bool _registered = false;
+ int _baseID = -1;
+ int _position = -1;
+
+ ChainableExpanderModule(ChainableRegistry<ELEMENT, N>& registry) : _registry(registry) {}
+ virtual ~ChainableExpanderModule() {
+ _registry.deregisterExpander(_baseID, _position);
+ }
+
+ void setBaseIDAndPosition(int baseID, int position) {
+ if (_registered && (position <= 0 || position != _position)) {
+ _registry.deregisterExpander(_baseID, _position);
+ _registered = false;
+ _baseID = 0;
+ _position = 0;
+ }
+ else if (!_registered && position > 0) {
+ _registered = true;
+ _baseID = baseID;
+ _position = position;
+ _registry.registerExpander(_baseID, _position, *this);
+ }
+ }
+};
+
} // namespace bogaudio