X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model.am2900%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fam2900%2Fcomponents%2FModelram5_12.java;h=36562414aedc4351841d09cff7de0374c0483d9d;hb=f19559f6899a17526e24a13127743449afb06fa2;hp=16c20776d881d80309ed60600d16a08e85cda800;hpb=b1249d69d59c5f9606cd3c453ac877c6307ba609;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/Modelram5_12.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/Modelram5_12.java index 16c20776..36562414 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/Modelram5_12.java +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/Modelram5_12.java @@ -41,13 +41,8 @@ public class Modelram5_12 extends SimpleRectangularHardcodedModelComponent @Override public Object recalculate(Object lastState, Map readEnds, Map readWriteEnds) { - BitVector[] memC = (BitVector[]) lastState; - if (memC == null) - { - memC = new BitVector[6]; - Arrays.fill(memC, 0, 5, BitVector.of(U, 12)); - memC[5] = BitVector.of(U); - } + BitVector[] memC = castAndInitState(lastState); + BitVector CVal = readEnds.get("C").getValues(); BitVector oldC = memC[5]; // TODO is the timing right? @@ -91,15 +86,19 @@ public class Modelram5_12 extends SimpleRectangularHardcodedModelComponent @Override protected Object getHighLevelState(Object state, String stateID) { + BitVector[] memC = castAndInitState(state); + Matcher m = stateIDPattern.matcher(stateID); if (m.matches()) - return ((BitVector[]) state)[Integer.parseInt(m.group(1), 2)]; - return super.getHighLevelState(state, stateID); + return memC[Integer.parseInt(m.group(1), 2)]; + return super.getHighLevelState(memC, stateID); } @Override protected Object setHighLevelState(Object lastState, String stateID, Object newHighLevelState) { + BitVector[] memC = castAndInitState(lastState); + Matcher m = stateIDPattern.matcher(stateID); if (m.matches()) { @@ -107,11 +106,22 @@ public class Modelram5_12 extends SimpleRectangularHardcodedModelComponent BitVector newHighLevelStateCasted = (BitVector) newHighLevelState; if (newHighLevelStateCasted.length() != 12) throw new IllegalArgumentException("Expected BitVector of length 12, not " + newHighLevelStateCasted.length()); - BitVector[] memC = (BitVector[]) lastState; memC[addr] = newHighLevelStateCasted; return memC; } - return super.setHighLevelState(lastState, stateID, newHighLevelState); + return super.setHighLevelState(memC, stateID, newHighLevelState); + } + + private static BitVector[] castAndInitState(Object state) + { + BitVector[] memC = (BitVector[]) state; + if (memC == null) + { + memC = new BitVector[6]; + Arrays.fill(memC, 0, 5, BitVector.of(U, 12)); + memC[5] = BitVector.of(U); + } + return memC; } static