allow inverted inputs at substituted circuits

This commit is contained in:
hneemann 2019-06-28 18:28:41 +02:00
parent 1b60465081
commit 8bf231b2cb
7 changed files with 459 additions and 125 deletions

View File

@ -37,9 +37,9 @@ public class SubstituteLibrary implements LibraryInterface {
private static final Map<String, SubstituteInterface> MAP = new HashMap<>();
static {
MAP.put("JK_FF", new Substitute("JK_FF.dig"));
MAP.put("JK_FF", new SubstituteGenericHGSParser("JK_FF.dig"));
MAP.put("T_FF", new SubstituteMatching()
.add(attr -> attr.get(Keys.WITH_ENABLE), new Substitute("T_FF_EN.dig"))
.add(attr -> attr.get(Keys.WITH_ENABLE), new SubstituteGenericHGSParser("T_FF_EN.dig"))
.add(attr -> true, new Substitute("T_FF.dig"))
);
MAP.put("Counter", new SubstituteGenericHGSParser("Counter.dig"));

View File

@ -7,13 +7,15 @@ package de.neemann.digital.draw.model;
import de.neemann.digital.core.NodeWithoutDelay;
import de.neemann.digital.core.ObservableValue;
import de.neemann.digital.hdl.hgs.HGSMap;
import java.util.HashSet;
import java.util.Objects;
/**
* Manages the input inverting of a component
*/
public class InverterConfig {
public class InverterConfig implements HGSMap {
private HashSet<String> inputs;
@ -103,7 +105,7 @@ public class InverterConfig {
InverterConfig that = (InverterConfig) o;
return inputs != null ? inputs.equals(that.inputs) : that.inputs == null;
return Objects.equals(inputs, that.inputs);
}
@Override
@ -119,4 +121,12 @@ public class InverterConfig {
return 0;
return inputs.size();
}
@Override
public Object hgsMapGet(String key) {
if (inputs == null)
return false;
return inputs.contains(key);
}
}

View File

@ -147,11 +147,6 @@ public class ModelCreator implements Iterable<ModelEntry> {
ModelEntry me = it.next();
if (me.getElement() instanceof CustomElement) { // at first look for custom elements
// Input invert of custom components is not jet supported!
InverterConfig ic = me.getVisualElement().getElementAttributes().get(Keys.INVERTER_CONFIG);
if (!ic.isEmpty())
throw new NodeException(Lang.get("err_customComponentInputInvert", me.getVisualElement().getElementName()));
CustomElement ce = (CustomElement) me.getElement();
ModelCreator child = ce.getModelCreator(
combineNames(subName, me.getVisualElement().getElementAttributes().getLabel()),

View File

@ -11,7 +11,7 @@
<string>en</string>
</entry>
</elementAttributes>
<pos x="240" y="260"/>
<pos x="220" y="300"/>
</visualElement>
<visualElement>
<elementName>Clock</elementName>
@ -21,7 +21,7 @@
<string>C</string>
</entry>
</elementAttributes>
<pos x="240" y="340"/>
<pos x="220" y="420"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -31,7 +31,7 @@
<string>clr</string>
</entry>
</elementAttributes>
<pos x="240" y="300"/>
<pos x="220" y="380"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -59,7 +59,7 @@
<string>ovf</string>
</entry>
</elementAttributes>
<pos x="540" y="240"/>
<pos x="540" y="260"/>
</visualElement>
<visualElement>
<elementName>D_FF</elementName>
@ -157,7 +157,49 @@
<visualElement>
<elementName>And</elementName>
<elementAttributes/>
<pos x="460" y="220"/>
<pos x="460" y="240"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="240" y="260"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.en) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="220" y="260"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="240" y="340"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.clr) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="220" y="340"/>
</visualElement>
</visualElements>
<wires>
@ -181,6 +223,34 @@
<p1 x="520" y="160"/>
<p2 x="540" y="160"/>
</wire>
<wire>
<p1 x="220" y="260"/>
<p2 x="240" y="260"/>
</wire>
<wire>
<p1 x="520" y="260"/>
<p2 x="540" y="260"/>
</wire>
<wire>
<p1 x="220" y="420"/>
<p2 x="420" y="420"/>
</wire>
<wire>
<p1 x="300" y="360"/>
<p2 x="380" y="360"/>
</wire>
<wire>
<p1 x="200" y="200"/>
<p2 x="220" y="200"/>
</wire>
<wire>
<p1 x="340" y="140"/>
<p2 x="360" y="140"/>
</wire>
<wire>
<p1 x="220" y="300"/>
<p2 x="240" y="300"/>
</wire>
<wire>
<p1 x="200" y="80"/>
<p2 x="280" y="80"/>
@ -190,20 +260,8 @@
<p2 x="520" y="80"/>
</wire>
<wire>
<p1 x="520" y="240"/>
<p2 x="540" y="240"/>
</wire>
<wire>
<p1 x="240" y="340"/>
<p2 x="420" y="340"/>
</wire>
<wire>
<p1 x="240" y="260"/>
<p2 x="320" y="260"/>
</wire>
<wire>
<p1 x="320" y="260"/>
<p2 x="460" y="260"/>
<p1 x="300" y="240"/>
<p2 x="460" y="240"/>
</wire>
<wire>
<p1 x="340" y="180"/>
@ -221,33 +279,33 @@
<p1 x="280" y="180"/>
<p2 x="300" y="180"/>
</wire>
<wire>
<p1 x="220" y="340"/>
<p2 x="240" y="340"/>
</wire>
<wire>
<p1 x="300" y="280"/>
<p2 x="320" y="280"/>
</wire>
<wire>
<p1 x="320" y="280"/>
<p2 x="460" y="280"/>
</wire>
<wire>
<p1 x="280" y="120"/>
<p2 x="300" y="120"/>
</wire>
<wire>
<p1 x="200" y="200"/>
<p2 x="220" y="200"/>
</wire>
<wire>
<p1 x="240" y="300"/>
<p2 x="380" y="300"/>
</wire>
<wire>
<p1 x="340" y="140"/>
<p2 x="360" y="140"/>
</wire>
<wire>
<p1 x="300" y="220"/>
<p2 x="460" y="220"/>
<p1 x="220" y="380"/>
<p2 x="240" y="380"/>
</wire>
<wire>
<p1 x="320" y="160"/>
<p2 x="320" y="260"/>
<p2 x="320" y="280"/>
</wire>
<wire>
<p1 x="420" y="180"/>
<p2 x="420" y="340"/>
<p2 x="420" y="420"/>
</wire>
<wire>
<p1 x="340" y="180"/>
@ -271,11 +329,11 @@
</wire>
<wire>
<p1 x="380" y="180"/>
<p2 x="380" y="300"/>
<p2 x="380" y="360"/>
</wire>
<wire>
<p1 x="300" y="180"/>
<p2 x="300" y="220"/>
<p2 x="300" y="240"/>
</wire>
</wires>
<measurementOrdering/>

View File

@ -11,7 +11,7 @@
<string>en</string>
</entry>
</elementAttributes>
<pos x="-60" y="560"/>
<pos x="-140" y="660"/>
</visualElement>
<visualElement>
<elementName>Clock</elementName>
@ -20,6 +20,10 @@
<string>runRealTime</string>
<boolean>true</boolean>
</entry>
<entry>
<string>rotation</string>
<rotation rotation="1"/>
</entry>
<entry>
<string>Label</string>
<string>C</string>
@ -29,7 +33,7 @@
<int>2</int>
</entry>
</elementAttributes>
<pos x="-60" y="460"/>
<pos x="620" y="240"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -39,7 +43,7 @@
<string>dir</string>
</entry>
</elementAttributes>
<pos x="-60" y="260"/>
<pos x="-140" y="280"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -57,7 +61,7 @@
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="660" y="180"/>
<pos x="740" y="180"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -67,7 +71,7 @@
<string>ovf</string>
</entry>
</elementAttributes>
<pos x="660" y="540"/>
<pos x="740" y="620"/>
</visualElement>
<visualElement>
<elementName>D_FF</elementName>
@ -85,7 +89,7 @@
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="560" y="180"/>
<pos x="640" y="180"/>
</visualElement>
<visualElement>
<elementName>Multiplexer</elementName>
@ -151,7 +155,7 @@
<visualElement>
<elementName>And</elementName>
<elementAttributes/>
<pos x="360" y="520"/>
<pos x="360" y="600"/>
</visualElement>
<visualElement>
<elementName>Multiplexer</elementName>
@ -205,7 +209,7 @@
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="460" y="240"/>
<pos x="520" y="420"/>
</visualElement>
<visualElement>
<elementName>Comparator</elementName>
@ -219,7 +223,7 @@
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="240" y="500"/>
<pos x="240" y="580"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
@ -242,7 +246,7 @@ if (orig.maxValue=0) {
}</string>
</entry>
</elementAttributes>
<pos x="-60" y="500"/>
<pos x="-60" y="580"/>
</visualElement>
<visualElement>
<elementName>Or</elementName>
@ -310,7 +314,7 @@ if (orig.maxValue=0) {
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="480" y="160"/>
<pos x="560" y="160"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -324,7 +328,7 @@ if (orig.maxValue=0) {
<string>ld</string>
</entry>
</elementAttributes>
<pos x="500" y="240"/>
<pos x="600" y="420"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -334,7 +338,7 @@ if (orig.maxValue=0) {
<string>clr</string>
</entry>
</elementAttributes>
<pos x="-60" y="420"/>
<pos x="-140" y="440"/>
</visualElement>
<visualElement>
<elementName>Multiplexer</elementName>
@ -352,7 +356,7 @@ if (orig.maxValue=0) {
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="160" y="500"/>
<pos x="160" y="580"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
@ -370,13 +374,141 @@ if (orig.maxValue=0) {
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="140" y="540"/>
<pos x="140" y="620"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="-120" y="400"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.clr) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="-140" y="400"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="-120" y="620"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.en) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="-140" y="620"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="-120" y="240"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.dir) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="-140" y="240"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="1"/>
</entry>
</elementAttributes>
<pos x="560" y="400"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="1"/>
</entry>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.ld) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="560" y="420"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="1"/>
</entry>
<entry>
<string>generic</string>
<string>this.Bits=orig.Bits;</string>
</entry>
</elementAttributes>
<pos x="480" y="400"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="1"/>
</entry>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>this.Bits=orig.Bits;
if (orig.inverterConfig.in) {
this.Value=-1;
}</string>
</entry>
</elementAttributes>
<pos x="480" y="420"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="440" y="160"/>
<p2 x="480" y="160"/>
<p2 x="560" y="160"/>
</wire>
<wire>
<p1 x="20" y="160"/>
@ -394,6 +526,14 @@ if (orig.maxValue=0) {
<p1 x="80" y="320"/>
<p2 x="300" y="320"/>
</wire>
<wire>
<p1 x="-60" y="640"/>
<p2 x="340" y="640"/>
</wire>
<wire>
<p1 x="340" y="640"/>
<p2 x="360" y="640"/>
</wire>
<wire>
<p1 x="-60" y="420"/>
<p2 x="-20" y="420"/>
@ -410,6 +550,18 @@ if (orig.maxValue=0) {
<p1 x="-20" y="260"/>
<p2 x="180" y="260"/>
</wire>
<wire>
<p1 x="-60" y="580"/>
<p2 x="100" y="580"/>
</wire>
<wire>
<p1 x="220" y="580"/>
<p2 x="240" y="580"/>
</wire>
<wire>
<p1 x="100" y="580"/>
<p2 x="160" y="580"/>
</wire>
<wire>
<p1 x="20" y="200"/>
<p2 x="40" y="200"/>
@ -423,40 +575,36 @@ if (orig.maxValue=0) {
<p2 x="280" y="200"/>
</wire>
<wire>
<p1 x="540" y="200"/>
<p1 x="620" y="200"/>
<p2 x="640" y="200"/>
</wire>
<wire>
<p1 x="500" y="200"/>
<p2 x="560" y="200"/>
</wire>
<wire>
<p1 x="460" y="200"/>
<p2 x="480" y="200"/>
</wire>
<wire>
<p1 x="300" y="520"/>
<p2 x="360" y="520"/>
</wire>
<wire>
<p1 x="200" y="520"/>
<p2 x="240" y="520"/>
</wire>
<wire>
<p1 x="360" y="140"/>
<p2 x="400" y="140"/>
</wire>
<wire>
<p1 x="-60" y="460"/>
<p2 x="540" y="460"/>
</wire>
<wire>
<p1 x="-20" y="300"/>
<p2 x="20" y="300"/>
</wire>
<wire>
<p1 x="-60" y="560"/>
<p2 x="340" y="560"/>
<p1 x="140" y="620"/>
<p2 x="160" y="620"/>
</wire>
<wire>
<p1 x="340" y="560"/>
<p2 x="360" y="560"/>
<p1 x="420" y="620"/>
<p2 x="440" y="620"/>
</wire>
<wire>
<p1 x="-140" y="620"/>
<p2 x="-120" y="620"/>
</wire>
<wire>
<p1 x="440" y="620"/>
<p2 x="740" y="620"/>
</wire>
<wire>
<p1 x="20" y="80"/>
@ -464,27 +612,23 @@ if (orig.maxValue=0) {
</wire>
<wire>
<p1 x="220" y="80"/>
<p2 x="640" y="80"/>
<p2 x="720" y="80"/>
</wire>
<wire>
<p1 x="100" y="240"/>
<p2 x="280" y="240"/>
</wire>
<wire>
<p1 x="-60" y="500"/>
<p2 x="100" y="500"/>
<p1 x="-140" y="240"/>
<p2 x="-120" y="240"/>
</wire>
<wire>
<p1 x="220" y="500"/>
<p2 x="240" y="500"/>
<p1 x="-140" y="400"/>
<p2 x="-120" y="400"/>
</wire>
<wire>
<p1 x="100" y="500"/>
<p2 x="160" y="500"/>
</wire>
<wire>
<p1 x="620" y="180"/>
<p2 x="640" y="180"/>
<p1 x="700" y="180"/>
<p2 x="720" y="180"/>
</wire>
<wire>
<p1 x="360" y="180"/>
@ -495,40 +639,48 @@ if (orig.maxValue=0) {
<p2 x="40" y="180"/>
</wire>
<wire>
<p1 x="520" y="180"/>
<p2 x="560" y="180"/>
<p1 x="600" y="180"/>
<p2 x="640" y="180"/>
</wire>
<wire>
<p1 x="640" y="180"/>
<p2 x="660" y="180"/>
<p1 x="720" y="180"/>
<p2 x="740" y="180"/>
</wire>
<wire>
<p1 x="-20" y="340"/>
<p2 x="0" y="340"/>
</wire>
<wire>
<p1 x="-140" y="660"/>
<p2 x="-120" y="660"/>
</wire>
<wire>
<p1 x="-140" y="440"/>
<p2 x="-120" y="440"/>
</wire>
<wire>
<p1 x="300" y="600"/>
<p2 x="360" y="600"/>
</wire>
<wire>
<p1 x="200" y="600"/>
<p2 x="240" y="600"/>
</wire>
<wire>
<p1 x="220" y="120"/>
<p2 x="320" y="120"/>
</wire>
<wire>
<p1 x="140" y="540"/>
<p2 x="160" y="540"/>
</wire>
<wire>
<p1 x="420" y="540"/>
<p2 x="440" y="540"/>
</wire>
<wire>
<p1 x="440" y="540"/>
<p2 x="660" y="540"/>
<p1 x="-140" y="280"/>
<p2 x="-120" y="280"/>
</wire>
<wire>
<p1 x="320" y="220"/>
<p2 x="360" y="220"/>
</wire>
<wire>
<p1 x="640" y="80"/>
<p2 x="640" y="180"/>
<p1 x="480" y="400"/>
<p2 x="480" y="420"/>
</wire>
<wire>
<p1 x="420" y="180"/>
@ -536,19 +688,35 @@ if (orig.maxValue=0) {
</wire>
<wire>
<p1 x="100" y="240"/>
<p2 x="100" y="500"/>
<p2 x="100" y="580"/>
</wire>
<wire>
<p1 x="580" y="200"/>
<p2 x="580" y="340"/>
</wire>
<wire>
<p1 x="360" y="180"/>
<p2 x="360" y="220"/>
</wire>
<wire>
<p1 x="520" y="400"/>
<p2 x="520" y="420"/>
</wire>
<wire>
<p1 x="620" y="200"/>
<p2 x="620" y="240"/>
</wire>
<wire>
<p1 x="300" y="240"/>
<p2 x="300" y="320"/>
</wire>
<wire>
<p1 x="460" y="200"/>
<p2 x="460" y="240"/>
<p1 x="560" y="400"/>
<p2 x="560" y="420"/>
</wire>
<wire>
<p1 x="720" y="80"/>
<p2 x="720" y="180"/>
</wire>
<wire>
<p1 x="400" y="400"/>
@ -568,11 +736,11 @@ if (orig.maxValue=0) {
</wire>
<wire>
<p1 x="500" y="200"/>
<p2 x="500" y="240"/>
<p2 x="500" y="340"/>
</wire>
<wire>
<p1 x="340" y="160"/>
<p2 x="340" y="560"/>
<p2 x="340" y="640"/>
</wire>
<wire>
<p1 x="20" y="80"/>
@ -584,11 +752,15 @@ if (orig.maxValue=0) {
</wire>
<wire>
<p1 x="180" y="260"/>
<p2 x="180" y="500"/>
<p2 x="180" y="580"/>
</wire>
<wire>
<p1 x="600" y="400"/>
<p2 x="600" y="420"/>
</wire>
<wire>
<p1 x="440" y="400"/>
<p2 x="440" y="540"/>
<p2 x="440" y="620"/>
</wire>
<wire>
<p1 x="220" y="80"/>
@ -596,11 +768,7 @@ if (orig.maxValue=0) {
</wire>
<wire>
<p1 x="220" y="120"/>
<p2 x="220" y="500"/>
</wire>
<wire>
<p1 x="540" y="200"/>
<p2 x="540" y="460"/>
<p2 x="220" y="580"/>
</wire>
</wires>
<measurementOrdering/>

View File

@ -75,7 +75,7 @@
<string>J</string>
</entry>
</elementAttributes>
<pos x="0" y="80"/>
<pos x="-100" y="80"/>
</visualElement>
<visualElement>
<elementName>Clock</elementName>
@ -103,7 +103,49 @@
<string>K</string>
</entry>
</elementAttributes>
<pos x="0" y="40"/>
<pos x="-100" y="40"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="-80" y="0"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="-80" y="80"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.J) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="-100" y="0"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.K) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="-100" y="120"/>
</visualElement>
</visualElements>
<wires>
@ -111,6 +153,10 @@
<p1 x="20" y="0"/>
<p2 x="40" y="0"/>
</wire>
<wire>
<p1 x="-100" y="0"/>
<p2 x="-80" y="0"/>
</wire>
<wire>
<p1 x="120" y="80"/>
<p2 x="140" y="80"/>
@ -127,6 +173,10 @@
<p1 x="0" y="80"/>
<p2 x="40" y="80"/>
</wire>
<wire>
<p1 x="-100" y="80"/>
<p2 x="-80" y="80"/>
</wire>
<wire>
<p1 x="320" y="80"/>
<p2 x="340" y="80"/>
@ -139,10 +189,18 @@
<p1 x="100" y="20"/>
<p2 x="120" y="20"/>
</wire>
<wire>
<p1 x="-20" y="20"/>
<p2 x="0" y="20"/>
</wire>
<wire>
<p1 x="100" y="100"/>
<p2 x="120" y="100"/>
</wire>
<wire>
<p1 x="-20" y="100"/>
<p2 x="0" y="100"/>
</wire>
<wire>
<p1 x="20" y="-40"/>
<p2 x="320" y="-40"/>
@ -159,6 +217,10 @@
<p1 x="320" y="40"/>
<p2 x="340" y="40"/>
</wire>
<wire>
<p1 x="-100" y="40"/>
<p2 x="-80" y="40"/>
</wire>
<wire>
<p1 x="20" y="120"/>
<p2 x="40" y="120"/>
@ -167,6 +229,10 @@
<p1 x="200" y="120"/>
<p2 x="220" y="120"/>
</wire>
<wire>
<p1 x="-100" y="120"/>
<p2 x="-80" y="120"/>
</wire>
<wire>
<p1 x="200" y="60"/>
<p2 x="240" y="60"/>
@ -187,6 +253,14 @@
<p1 x="320" y="40"/>
<p2 x="320" y="60"/>
</wire>
<wire>
<p1 x="0" y="20"/>
<p2 x="0" y="40"/>
</wire>
<wire>
<p1 x="0" y="80"/>
<p2 x="0" y="100"/>
</wire>
<wire>
<p1 x="20" y="120"/>
<p2 x="20" y="160"/>

View File

@ -75,7 +75,7 @@
<string>T</string>
</entry>
</elementAttributes>
<pos x="-20" y="40"/>
<pos x="-100" y="60"/>
</visualElement>
<visualElement>
<elementName>Clock</elementName>
@ -95,6 +95,27 @@
</elementAttributes>
<pos x="200" y="120"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes/>
<pos x="-80" y="20"/>
</visualElement>
<visualElement>
<elementName>Const</elementName>
<elementAttributes>
<entry>
<string>Value</string>
<long>0</long>
</entry>
<entry>
<string>generic</string>
<string>if (orig.inverterConfig.T) {
this.Value=1;
}</string>
</entry>
</elementAttributes>
<pos x="-100" y="20"/>
</visualElement>
</visualElements>
<wires>
<wire>
@ -129,6 +150,10 @@
<p1 x="100" y="20"/>
<p2 x="120" y="20"/>
</wire>
<wire>
<p1 x="-100" y="20"/>
<p2 x="-80" y="20"/>
</wire>
<wire>
<p1 x="100" y="100"/>
<p2 x="120" y="100"/>
@ -161,6 +186,10 @@
<p1 x="200" y="120"/>
<p2 x="220" y="120"/>
</wire>
<wire>
<p1 x="-100" y="60"/>
<p2 x="-80" y="60"/>
</wire>
<wire>
<p1 x="200" y="60"/>
<p2 x="240" y="60"/>