From: Daniel Kirschten Date: Sun, 30 Jun 2019 16:39:00 +0000 (+0200) Subject: Added MSB first versions of parse() and toString() X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=4ac977cb31feb34f24e05e9d5e7976951dccf557;p=Mograsim.git Added MSB first versions of parse() and toString() --- diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java index 4d5365a0..9e09f43a 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java @@ -286,26 +286,45 @@ public final class BitVector implements StrictLogicType, Iterable, Iterable= 0; i++, j--) + { + values[i] = Bit.parse(s, j); + } + return new BitVector(values); + } + @Override public Iterator iterator() { diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java index 67a2730d..3cb35b3d 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java @@ -16,7 +16,7 @@ public class BitVectorFormatter { if (bitVector == null) return "null"; - return bitVector.toString(); + return bitVector.toBitStringMSBFirst(); } // TODO doesn't this belong to logic.ui? 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 0b1adc2b..1862ae38 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 @@ -181,8 +181,7 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setReg_A(String val_4_bit) { - // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end - var bits = BitVector.parse(new StringBuilder(val_4_bit).reverse().toString()); + var bits = BitVector.parseMSBFirst(val_4_bit); A3.setToValueOf(bits.getBit(3)); A2.setToValueOf(bits.getBit(2)); A1.setToValueOf(bits.getBit(1)); @@ -192,8 +191,7 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setReg_B(String val_4_bit) { - // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end - var bits = BitVector.parse(new StringBuilder(val_4_bit).reverse().toString()); + var bits = BitVector.parseMSBFirst(val_4_bit); B3.setToValueOf(bits.getBit(3)); B2.setToValueOf(bits.getBit(2)); B1.setToValueOf(bits.getBit(1)); @@ -215,8 +213,7 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setD(String val_4_bit) { - // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end - var bits = BitVector.parse(new StringBuilder(val_4_bit).reverse().toString()); + var bits = BitVector.parseMSBFirst(val_4_bit); D4.setToValueOf(bits.getBit(3)); D3.setToValueOf(bits.getBit(2)); D2.setToValueOf(bits.getBit(1)); @@ -320,8 +317,7 @@ public class TestableAm2901Impl implements TestableAm2901 var y2 = Y3.getDisplayedValue(); var y1 = Y2.getDisplayedValue(); var y0 = Y1.getDisplayedValue(); - // reverse because BitVector.toString() returns the LSBit at the beginning and the MSBit at the end - return new StringBuilder(y0.concat(y1).concat(y2).concat(y3).toString()).reverse().toString(); + return y0.concat(y1).concat(y2).concat(y3).toBitStringMSBFirst(); } private void setField(String name, Object value) @@ -353,15 +349,13 @@ public class TestableAm2901Impl implements TestableAm2901 @Override public void setDirectly(Register r, String val_4_bit) { - // reverse because the BitVector.parse() expects the LSBit at the beginning and the MSBit at the end - am2901.setHighLevelState(regToStateID(r), BitVector.parse(new StringBuilder(val_4_bit).reverse().toString())); + am2901.setHighLevelState(regToStateID(r), BitVector.parseMSBFirst(val_4_bit)); } @Override public String getDirectly(Register r) { - // reverse because BitVector.toString() returns the LSBit at the beginning and the MSBit at the end - return new StringBuilder(am2901.getHighLevelState(regToStateID(r)).toString()).reverse().toString(); + return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toBitStringMSBFirst(); } private static String regToStateID(Register r) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java index 73c1f06b..2974278f 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java @@ -122,7 +122,7 @@ public class LogicUICanvas extends ZoomableCanvas if (radioBit.getSelection()) value = Bit.parse(valueString); else if (radioBitVector.getSelection()) - value = BitVector.parse(new StringBuilder(valueString).reverse().toString()); + value = BitVector.parseMSBFirst(valueString); else throw new RuntimeException("No value type selected"); target.setHighLevelState(stateIDText.getText(), value);