diff --git a/src/main/java/de/neemann/digital/core/BurnException.java b/src/main/java/de/neemann/digital/core/BurnException.java index 47f7a2202..93757d210 100644 --- a/src/main/java/de/neemann/digital/core/BurnException.java +++ b/src/main/java/de/neemann/digital/core/BurnException.java @@ -1,7 +1,5 @@ package de.neemann.digital.core; -import de.neemann.digital.lang.Lang; - import java.util.List; /** @@ -14,9 +12,12 @@ public class BurnException extends RuntimeException { /** * Creates a new instance + * + * @param message the message + * @param values the values connected to the net */ - public BurnException(List values) { - super(Lang.get("err_burnError")); + public BurnException(String message, List values) { + super(message); this.values = values; } diff --git a/src/main/java/de/neemann/digital/core/wiring/bus/AbstractBusHandler.java b/src/main/java/de/neemann/digital/core/wiring/bus/AbstractBusHandler.java index a881403e1..b1cf8a910 100644 --- a/src/main/java/de/neemann/digital/core/wiring/bus/AbstractBusHandler.java +++ b/src/main/java/de/neemann/digital/core/wiring/bus/AbstractBusHandler.java @@ -3,6 +3,7 @@ package de.neemann.digital.core.wiring.bus; import de.neemann.digital.core.BurnException; import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.element.PinDescription; +import de.neemann.digital.lang.Lang; import java.util.List; @@ -15,7 +16,9 @@ import java.util.List; public abstract class AbstractBusHandler { private final BusModelStateObserver obs; - private boolean burn; + + private enum State {ok, burn, both} + private State burn; private int addedVersion = -1; /** @@ -53,9 +56,9 @@ public abstract class AbstractBusHandler { */ public void recalculate() { long value = 0; - burn = false; + burn = State.ok; if (getResistor().equals(PinDescription.PullResistor.both)) { - burn = true; + burn = State.both; set(0, true); } else { boolean highz = true; @@ -66,7 +69,7 @@ public abstract class AbstractBusHandler { value = input.getValue(); } else { if (value != input.getValue()) - burn = true; + burn = State.burn; } } } @@ -86,7 +89,7 @@ public abstract class AbstractBusHandler { } // if burn condition and not yet added for post step check add for post step check - if (burn && (obs.getVersion() != addedVersion)) { + if (burn != State.ok && (obs.getVersion() != addedVersion)) { addedVersion = obs.getVersion(); obs.addCheck(this); } @@ -99,8 +102,12 @@ public abstract class AbstractBusHandler { * an exception is thrown. */ public void checkBurn() { - if (burn) - throw new BurnException(getInputs()); + switch (burn) { + case burn: + throw new BurnException(Lang.get("err_burnError"), getInputs()); + case both: + throw new BurnException(Lang.get("err_pullUpAndDown"), getInputs()); + } } } diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 8f12efec0..b9dd80446 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -379,7 +379,8 @@ Die gesammte Speichergröße beträgt damit damit dx*dy*2 Speicherworte.Nach {0} Zyklen ist kein Break aufgetreten Ausdruck {0} wird nicht unterstützt. Operation {0} wird nicht unterstützt. - Es sind mehrere zusammengeschaltete Ausgänge gleichzeitig aktiv + Es sind mehrere zusammengeschaltete Ausgänge gleichzeitig aktiv und haben einen Kurzschluss erzeugt. + Ein Pull-Up- und Pull-Down-Widerstand in einem Netz ist nicht erlaubt. Element {0} kann nicht analysiert werden. Enthält [var] und [nicht var] Pin {0} in Element {1} exitiert mehrfach diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 226ceb12c..e752a0562 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -366,7 +366,8 @@ Break timeout after {0} cycles Expression {0} not supported Operation {0} not supported - More then one output is active on a wire + More then one output is active on a wire, causing a short circuit. + It is not allowed to connect a pull-up and pull-down resistor to the same net. Cannot analyse Node {0} Contains [var] and [not var] Pin {0} in component {1} exists twice