X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model.am2900%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fam2900%2Fcomponents%2FGUIram5_12.java;fp=net.mograsim.logic.model.am2900%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fam2900%2Fcomponents%2FGUIram5_12.java;h=0000000000000000000000000000000000000000;hb=93b398d6271a538a2a4c9f4de07a3b4a8a2a7fd4;hp=4a13c471055e188252fbdf7eebc06e0b10842dc1;hpb=0a04a4ed66ecebd4254541c4977599f6052c115a;p=Mograsim.git diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/GUIram5_12.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/GUIram5_12.java deleted file mode 100644 index 4a13c471..00000000 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/GUIram5_12.java +++ /dev/null @@ -1,119 +0,0 @@ -package net.mograsim.logic.model.am2900.components; - -import static net.mograsim.logic.core.types.Bit.ONE; -import static net.mograsim.logic.core.types.Bit.U; -import static net.mograsim.logic.core.types.Bit.X; -import static net.mograsim.logic.core.types.Bit.Z; -import static net.mograsim.logic.core.types.Bit.ZERO; - -import java.util.Arrays; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.CoreWire.ReadEnd; -import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; -import net.mograsim.logic.model.model.ViewModelModifiable; -import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedGUIComponent; -import net.mograsim.logic.model.model.wires.Pin; -import net.mograsim.logic.model.model.wires.PinUsage; -import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; -import net.mograsim.logic.model.snippets.symbolrenderers.PinNamesSymbolRenderer.PinNamesParams.Position; - -public class GUIram5_12 extends SimpleRectangularHardcodedGUIComponent -{ - public GUIram5_12(ViewModelModifiable model, String name) - { - super(model, "GUIram5_12", name, "RAM\n5 x 12 Bit"); - setSize(40, 40); - addPin(new Pin(this, "A", 3, PinUsage.INPUT, 10, 0), Position.BOTTOM); - addPin(new Pin(this, "B", 3, PinUsage.INPUT, 30, 0), Position.BOTTOM); - addPin(new Pin(this, "WE", 1, PinUsage.INPUT, 0, 5), Position.RIGHT); - addPin(new Pin(this, "C", 1, PinUsage.INPUT, 0, 15), Position.RIGHT); - addPin(new Pin(this, "Y", 12, PinUsage.OUTPUT, 0, 30), Position.RIGHT); - addPin(new Pin(this, "D", 12, PinUsage.INPUT, 20, 40), Position.TOP); - } - - @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 CVal = readEnds.get("C").getValues(); - BitVector oldC = memC[5]; - // TODO is the timing right? - if (oldC.getLSBit(0) == ZERO && CVal.getLSBit(0) == ONE && readEnds.get("WE").getValue() == ONE) - { - int BInt = getAsInt(readEnds.get("B").getValues()); - if (BInt == -1 || BInt > 4) - Arrays.fill(memC, BitVector.of(X, 12)); - else if (BInt == -2) - Arrays.fill(memC, BitVector.of(U, 12)); - else - memC[BInt] = readEnds.get("D").getValues(); - } - int AInt = getAsInt(readEnds.get("A").getValues()); - BitVector YVal = AInt == -1 || AInt > 4 ? BitVector.of(X, 12) : AInt == -2 ? BitVector.of(U, 12) : memC[AInt]; - readWriteEnds.get("Y").feedSignals(YVal); - memC[5] = CVal; - return memC; - } - - /** - * -1 means X, -2 means U - */ - private static int getAsInt(BitVector vect) - { - Bit[] bits = vect.getBits(); - for (int i = 0; i < 3; i++) - if (bits[i] == X) - return -1; - for (int i = 0; i < 3; i++) - if (bits[i] == U) - return -2; - for (int i = 0; i < 3; i++) - if (bits[i] == Z) - return -1; - return (bits[0] == ONE ? 4 : 0) + (bits[1] == ONE ? 2 : 0) + (bits[2] == ONE ? 1 : 0); - } - - Pattern stateIDPattern = Pattern.compile("c(0[10][10]|100)"); - - @Override - protected Object getHighLevelState(Object state, String stateID) - { - Matcher m = stateIDPattern.matcher(stateID); - if (m.matches()) - return ((BitVector[]) state)[Integer.parseInt(m.group(1), 2)]; - return super.getHighLevelState(state, stateID); - } - - @Override - protected Object setHighLevelState(Object lastState, String stateID, Object newHighLevelState) - { - Matcher m = stateIDPattern.matcher(stateID); - if (m.matches()) - { - int addr = Integer.parseInt(m.group(1), 2); - 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); - } - - static - { - IndirectGUIComponentCreator.setComponentSupplier(GUIram5_12.class.getCanonicalName(), (m, p, n) -> new GUIram5_12(m, n)); - } -} \ No newline at end of file