From 4606fe443e558793dd4cb541f86b2a7e4bd65364 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 2 Apr 2016 20:32:18 +0200 Subject: [PATCH] Probe does no bit size checking --- .../java/de/neemann/digital/core/Model.java | 4 ++ .../java/de/neemann/digital/core/io/Out.java | 6 -- .../de/neemann/digital/core/io/Probe.java | 51 ++++++++++++++++ .../digital/draw/library/ElementLibrary.java | 3 +- .../digital/draw/shapes/ShapeFactory.java | 3 +- .../neemann/digital/gui/TraceGenerator.java | 58 ------------------- 6 files changed, 59 insertions(+), 66 deletions(-) create mode 100644 src/main/java/de/neemann/digital/core/io/Probe.java delete mode 100644 src/main/java/de/neemann/digital/gui/TraceGenerator.java diff --git a/src/main/java/de/neemann/digital/core/Model.java b/src/main/java/de/neemann/digital/core/Model.java index 39b37f531..7b7bf01a4 100644 --- a/src/main/java/de/neemann/digital/core/Model.java +++ b/src/main/java/de/neemann/digital/core/Model.java @@ -235,6 +235,10 @@ public class Model { return clocks.size() == 1 && breaks.size() == 1; } + public ArrayList getSignals() { + return signals; + } + public static class Signal { private final String name; diff --git a/src/main/java/de/neemann/digital/core/io/Out.java b/src/main/java/de/neemann/digital/core/io/Out.java index 33d18f8fd..2068b27eb 100644 --- a/src/main/java/de/neemann/digital/core/io/Out.java +++ b/src/main/java/de/neemann/digital/core/io/Out.java @@ -19,12 +19,6 @@ public class Out implements Element { .addAttribute(AttributeKey.Bits) .addAttribute(AttributeKey.Label); - public static final ElementTypeDescription PROBEDESCRIPTION - = new ElementTypeDescription("Probe", Out.class, "in") - .addAttribute(AttributeKey.Rotate) - .addAttribute(AttributeKey.Bits) - .addAttribute(AttributeKey.Label); - public static final ElementTypeDescription LEDDESCRIPTION = new ElementTypeDescription("LED", Out.class, "in") .addAttribute(AttributeKey.Rotate) diff --git a/src/main/java/de/neemann/digital/core/io/Probe.java b/src/main/java/de/neemann/digital/core/io/Probe.java new file mode 100644 index 000000000..98686776c --- /dev/null +++ b/src/main/java/de/neemann/digital/core/io/Probe.java @@ -0,0 +1,51 @@ +package de.neemann.digital.core.io; + +import de.neemann.digital.core.Model; +import de.neemann.digital.core.NodeException; +import de.neemann.digital.core.ObservableValue; +import de.neemann.digital.core.element.AttributeKey; +import de.neemann.digital.core.element.Element; +import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.ElementTypeDescription; + +/** + * @author hneemann + */ +public class Probe implements Element { + + + public static final ElementTypeDescription DESCRIPTION + = new ElementTypeDescription("Probe", Probe.class, "in") + .addAttribute(AttributeKey.Rotate) + .addAttribute(AttributeKey.Label); + + private final String label; + private ObservableValue value; + + public Probe(ElementAttributes attributes) { + label = attributes.get(AttributeKey.Label); + } + + public Probe(int bits) { + label = null; + } + + @Override + public void setInputs(ObservableValue... inputs) throws NodeException { + value = inputs[0]; + } + + @Override + public ObservableValue[] getOutputs() { + return new ObservableValue[0]; + } + + @Override + public void registerNodes(Model model) { + model.addSignal(label, value); + } + + public ObservableValue getValue() { + return value; + } +} diff --git a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java index d446b2b77..fcd82eb76 100644 --- a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java +++ b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java @@ -13,6 +13,7 @@ import de.neemann.digital.core.flipflops.T_FF; import de.neemann.digital.core.io.Const; import de.neemann.digital.core.io.In; import de.neemann.digital.core.io.Out; +import de.neemann.digital.core.io.Probe; import de.neemann.digital.core.memory.*; import de.neemann.digital.core.wiring.*; import de.neemann.digital.gui.components.terminal.Terminal; @@ -46,7 +47,7 @@ public class ElementLibrary implements Iterable add(In.DESCRIPTION, menu); add(Out.DESCRIPTION, menu); add(Out.LEDDESCRIPTION, menu); - add(Out.PROBEDESCRIPTION, menu); + add(Probe.DESCRIPTION, menu); add(Clock.DESCRIPTION, menu); add(Reset.DESCRIPTION, menu); add(Break.DESCRIPTION, menu); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java index 6270586cc..ccdc0e771 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java @@ -9,6 +9,7 @@ import de.neemann.digital.core.element.ElementTypeDescription; import de.neemann.digital.core.io.Const; import de.neemann.digital.core.io.In; import de.neemann.digital.core.io.Out; +import de.neemann.digital.core.io.Probe; import de.neemann.digital.core.memory.RAMDualPort; import de.neemann.digital.core.memory.RAMSinglePort; import de.neemann.digital.core.wiring.*; @@ -46,7 +47,7 @@ public final class ShapeFactory { map.put(Const.DESCRIPTION.getName(), attr -> new ConstShape(attr.get(AttributeKey.Value))); map.put(Out.DESCRIPTION.getName(), attr -> new OutputShape(attr.get(AttributeKey.Label))); map.put(Out.LEDDESCRIPTION.getName(), attr -> new LEDShape(attr.get(AttributeKey.Label), attr.get(AttributeKey.Color))); - map.put(Out.PROBEDESCRIPTION.getName(), attr -> new ProbeShape(attr.get(AttributeKey.Label))); + map.put(Probe.DESCRIPTION.getName(), attr -> new ProbeShape(attr.get(AttributeKey.Label))); map.put(Clock.DESCRIPTION.getName(), attr -> new ClockShape(attr.get(AttributeKey.Label))); map.put(Out.SEVENDESCRIPTION.getName(), attr -> new SevenSegShape(attr.get(AttributeKey.Label), attr.get(AttributeKey.Color))); map.put(Out.SEVENHEXDESCRIPTION.getName(), attr -> new SevenSegHexShape(attr.get(AttributeKey.Label), attr.get(AttributeKey.Color))); diff --git a/src/main/java/de/neemann/digital/gui/TraceGenerator.java b/src/main/java/de/neemann/digital/gui/TraceGenerator.java deleted file mode 100644 index 47c29b506..000000000 --- a/src/main/java/de/neemann/digital/gui/TraceGenerator.java +++ /dev/null @@ -1,58 +0,0 @@ -package de.neemann.digital.gui; - -import de.neemann.digital.core.Model; -import de.neemann.digital.core.ModelEvent; -import de.neemann.digital.core.ModelStateObserver; -import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.element.AttributeKey; -import de.neemann.digital.core.io.In; -import de.neemann.digital.core.io.Out; -import de.neemann.digital.draw.library.ElementLibrary; -import de.neemann.digital.draw.model.ModelDescription; -import de.neemann.digital.draw.model.ModelEntry; - -/** - * @author hneemann - */ -public class TraceGenerator implements ModelStateObserver { - - private final Model model; - - public TraceGenerator(ModelDescription modelDescription, Model model, ElementLibrary library) { - this.model = model; - for (ModelEntry me : modelDescription) { - String name = me.getVisualElement().getElementName(); - if (library.getElementType(name) == In.DESCRIPTION) - register(me); - if (library.getElementType(name) == Out.DESCRIPTION) - register(me); - if (library.getElementType(name) == Out.LEDDESCRIPTION) - register(me); - if (library.getElementType(name) == Out.PROBEDESCRIPTION) - register(me); - } - model.addObserver(this); - } - - private void register(ModelEntry me) { - ObservableValue value = me.getPins().get(0).getValue(); - String labelName = me.getVisualElement().getElementAttributes().get(AttributeKey.Label); - if (value != null && labelName != null && labelName.length() > 0) { - - - } - } - - - @Override - public void handleEvent(ModelEvent event) { - switch (event.getType()) { - case STEP: - break; - case STOPPED: - model.removeObserver(this); - break; - } - } - -}