From 054e77aca4d4de146205ea64edd60923db5e23d9 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:28:02 +0200 Subject: [PATCH] Created GUINandGate --- .../ui/model/components/GUINandGate.java | 13 +++++++ .../modeladapter/ViewLogicModelAdapter.java | 2 ++ .../componentadapters/NandGateAdapter.java | 34 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java new file mode 100644 index 00000000..6f1e640a --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java @@ -0,0 +1,13 @@ +package net.mograsim.logic.ui.model.components; + +import net.mograsim.logic.ui.model.ViewModelModifiable; + +public class GUINandGate extends SimpleRectangularGUIGate +{ + public GUINandGate(ViewModelModifiable model, int logicWidth) + { + super(model, logicWidth, "&", true); + setInputCount(2);// TODO make variable + // TODO + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index 5a5ff658..df3f9766 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -30,6 +30,7 @@ import net.mograsim.logic.ui.modeladapter.componentadapters.AtomicAm2901NANDBase import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.NandGateAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class ViewLogicModelAdapter @@ -41,6 +42,7 @@ public class ViewLogicModelAdapter componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new)); componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new)); componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o))); + componentAdaptersModifiable.add(new NandGateAdapter()); componentAdaptersModifiable.add(new ManualSwitchAdapter()); componentAdaptersModifiable.add(new BitDisplayAdapter()); componentAdaptersModifiable.add(new AtomicAm2901NANDBasedAdapter()); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java new file mode 100644 index 00000000..761689a3 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java @@ -0,0 +1,34 @@ +package net.mograsim.logic.ui.modeladapter.componentadapters; + +import java.util.Map; + +import net.mograsim.logic.core.components.gates.AndGate; +import net.mograsim.logic.core.components.gates.NotGate; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.ui.model.components.GUINandGate; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; + +public class NandGateAdapter implements ComponentAdapter +{ + @Override + public Class getSupportedClass() + { + return GUINandGate.class; + } + + @Override + @SuppressWarnings("unused") // AndGate and NotGate + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUINandGate guiComponent, + Map logicWiresPerPin) + { + Wire i0 = logicWiresPerPin.get(guiComponent.getInputPins().get(0)); + Wire i1 = logicWiresPerPin.get(guiComponent.getInputPins().get(1)); + Wire o = logicWiresPerPin.get(guiComponent.getOutputPin()); + Wire w = new Wire(timeline, guiComponent.getOutputPin().logicWidth, 1); + + new AndGate(timeline, 1, w.createReadWriteEnd(), i0.createReadOnlyEnd(), i1.createReadOnlyEnd()); + new NotGate(timeline, Math.max(1, params.gateProcessTime - 2), w.createReadOnlyEnd(), o.createReadWriteEnd()); + } +} \ No newline at end of file -- 2.17.1