X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui.am2900%2Ftest%2Fnet%2Fmograsim%2Flogic%2Fui%2Fam2900%2FTestableAm2901Impl.java;h=455a03cfbeb2c501683f5edb4369f572cdba1690;hb=5ece0acf049bf9af2933f513fe0206565681f622;hp=0f0e25f71dfc23de21ad03a0d408a3ab8888f5c2;hpb=e4a201cb63e74fb7780dae482e2fc953bee58fa5;p=Mograsim.git diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java index 0f0e25f7..455a03cf 100644 --- a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java +++ b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java @@ -3,9 +3,11 @@ package net.mograsim.logic.ui.am2900; import static org.junit.jupiter.api.Assertions.fail; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; +import java.util.List; import java.util.Objects; import java.util.Queue; import java.util.Set; @@ -19,18 +21,19 @@ import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.core.types.BitVector.BitVectorMutator; import net.mograsim.logic.ui.model.ViewModel; import net.mograsim.logic.ui.model.ViewModelModifiable; -import net.mograsim.logic.ui.model.components.GUIBitDisplay; import net.mograsim.logic.ui.model.components.GUIComponent; -import net.mograsim.logic.ui.model.components.GUIManualSwitch; -import net.mograsim.logic.ui.model.components.SubmodelComponent; +import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay; +import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch; import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901; +import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; import net.mograsim.logic.ui.model.wires.GUIWire; +import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.modeladapter.LogicModelParameters; import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; public class TestableAm2901Impl implements TestableAm2901 { - private GUIAm2901 am2901; + private GUIComponent am2901; private Timeline timeline; private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0; private ManualSwitch C; @@ -62,7 +65,7 @@ public class TestableAm2901Impl implements TestableAm2901 timeline.executeNext(); if (!timeline.hasNext()) { - System.out.println("run() took " + eventCounter + " events"); +// System.out.println("run() took " + eventCounter + " events"); return Result.SUCCESS; } } @@ -100,10 +103,21 @@ public class TestableAm2901Impl implements TestableAm2901 { // Create view model ViewModelModifiable viewModel = new ViewModelModifiable(); + // TODO replace with deserialized version as soon as high level states work for deserialized components am2901 = new GUIAm2901(viewModel); +// am2901 = IndirectGUIComponentCreator.createComponent(viewModel, "GUIAm2901"); + // guess which pins are outputs and which are inputs + // TODO this code exists three times... but it seems too "hacky" to put it in a helper class + List inputPinNames = new ArrayList<>(); + List outputPinNames = new ArrayList<>(); + for (Pin p : am2901.getPins().values()) + if (p.getRelX() == 0) + inputPinNames.add(p.name); + else + outputPinNames.add(p.name); // Get switches HashMap idSwitchMap = new HashMap<>(); - for (String id : am2901.getInputPinNames()) + for (String id : inputPinNames) { GUIManualSwitch sw = new GUIManualSwitch(viewModel); new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin()); @@ -111,7 +125,7 @@ public class TestableAm2901Impl implements TestableAm2901 } // Get displays HashMap idDisplayMap = new HashMap<>(); - for (String id : am2901.getOutputPinNames()) + for (String id : outputPinNames) { GUIBitDisplay bd = new GUIBitDisplay(viewModel); // bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue())); @@ -137,7 +151,7 @@ public class TestableAm2901Impl implements TestableAm2901 { ViewModel model = modelsToIterate.poll(); wiresIncludingSubmodels.addAll(model.getWires()); - for (GUIComponent comp : model.getComponents()) + for (GUIComponent comp : model.getComponentsByName().values()) if (comp instanceof SubmodelComponent) modelsToIterate.offer(((SubmodelComponent) comp).submodel); } @@ -181,21 +195,21 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setReg_A(String val_4_bit) { - var bits = BitVector.parse(val_4_bit); - A3.setToValueOf(bits.getBit(0)); - A2.setToValueOf(bits.getBit(1)); - A1.setToValueOf(bits.getBit(2)); - A0.setToValueOf(bits.getBit(3)); + var bits = BitVector.parseMSBFirst(val_4_bit); + A3.setToValueOf(bits.getBit(3)); + A2.setToValueOf(bits.getBit(2)); + A1.setToValueOf(bits.getBit(1)); + A0.setToValueOf(bits.getBit(0)); } @Override public void setReg_B(String val_4_bit) { - var bits = BitVector.parse(val_4_bit); - B3.setToValueOf(bits.getBit(0)); - B2.setToValueOf(bits.getBit(1)); - B1.setToValueOf(bits.getBit(2)); - B0.setToValueOf(bits.getBit(3)); + var bits = BitVector.parseMSBFirst(val_4_bit); + B3.setToValueOf(bits.getBit(3)); + B2.setToValueOf(bits.getBit(2)); + B1.setToValueOf(bits.getBit(1)); + B0.setToValueOf(bits.getBit(0)); } @Override @@ -213,11 +227,11 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setD(String val_4_bit) { - var bits = BitVector.parse(val_4_bit); - D4.setToValueOf(bits.getBit(0)); - D3.setToValueOf(bits.getBit(1)); - D2.setToValueOf(bits.getBit(2)); - D1.setToValueOf(bits.getBit(3)); + var bits = BitVector.parseMSBFirst(val_4_bit); + D4.setToValueOf(bits.getBit(3)); + D3.setToValueOf(bits.getBit(2)); + D2.setToValueOf(bits.getBit(1)); + D1.setToValueOf(bits.getBit(0)); } @Override @@ -317,7 +331,7 @@ public class TestableAm2901Impl implements TestableAm2901 var y2 = Y3.getDisplayedValue(); var y1 = Y2.getDisplayedValue(); var y0 = Y1.getDisplayedValue(); - return y3.concat(y2).concat(y1).concat(y0).toString(); + return y0.concat(y1).concat(y2).concat(y3).toBitStringMSBFirst(); } private void setField(String name, Object value) @@ -349,13 +363,13 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setDirectly(Register r, String val_4_bit) { - am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_4_bit)); + am2901.setHighLevelState(regToStateID(r), BitVector.parseMSBFirst(val_4_bit)); } @Override public String getDirectly(Register r) { - return am2901.getHighLevelState(regToStateID(r)).toString(); + return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toBitStringMSBFirst(); } private static String regToStateID(Register r)