From: Fabian Stemmler Date: Tue, 3 Sep 2019 21:10:52 +0000 (+0200) Subject: Booleans in a MicroInstruction are now Mnemonics X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=62d703a95cafb4e98b4c3ffc305fb0224a6aec71 Booleans in a MicroInstruction are now Mnemonics Booleans are now expressed as members of a special MnemonicFamily that only has two values. Booleans can now be named freely. --- diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java index 1e34762b..da3e1e08 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java @@ -13,7 +13,6 @@ import java.util.List; import net.mograsim.logic.core.types.BitVector; import net.mograsim.machine.MemoryDefinition; import net.mograsim.machine.mi.parameters.BooleanClassification; -import net.mograsim.machine.mi.parameters.BooleanImmediate; import net.mograsim.machine.mi.parameters.IntegerClassification; import net.mograsim.machine.mi.parameters.IntegerImmediate; import net.mograsim.machine.mi.parameters.MicroInstructionParameter; @@ -110,11 +109,12 @@ public class MicroprogramMemoryParser { MnemonicFamily family = new MnemonicFamily(new MnemonicPair("ZERO", BitVector.SINGLE_0), new MnemonicPair("ONE", BitVector.SINGLE_1)); - MicroInstructionDefinition def = MicroInstructionDefinition.create(new BooleanClassification(), + BooleanClassification boolClass = new BooleanClassification("H", "L"); + MicroInstructionDefinition def = MicroInstructionDefinition.create(boolClass, new IntegerClassification(8), family); MicroprogramMemory memory = new StandardMicroprogramMemory(MemoryDefinition.create(4, 0, 16)); for (int i = 0; i < 17; i++) - memory.setCell(i, new StandardMicroInstruction(new BooleanImmediate(false), + memory.setCell(i, new StandardMicroInstruction(boolClass.get(false), new IntegerImmediate(BigInteger.valueOf(i), 8), family.get(i % 2))); try { diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanClassification.java b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanClassification.java index 1689cffb..8ee54985 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanClassification.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanClassification.java @@ -1,9 +1,23 @@ package net.mograsim.machine.mi.parameters; +import net.mograsim.logic.core.types.BitVector; import net.mograsim.machine.mi.parameters.MicroInstructionParameter.ParameterType; -public class BooleanClassification implements ParameterClassification +public class BooleanClassification extends MnemonicFamily { + String trueName, falseName; + public BooleanClassification(String trueName, String falseName) + { + super(new MnemonicPair(trueName, BitVector.SINGLE_1), new MnemonicPair(falseName, BitVector.SINGLE_0)); + this.trueName = trueName; + this.falseName = falseName; + } + + public Mnemonic get(boolean value) + { + return get(value ? trueName : falseName); + } + @Override public ParameterType getExpectedType() { @@ -15,10 +29,4 @@ public class BooleanClassification implements ParameterClassification { return 1; } - - @Override - public BooleanImmediate parse(String toParse) - { - return new BooleanImmediate("H".equals(toParse)); - } } diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanImmediate.java b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanImmediate.java deleted file mode 100644 index 3d08840f..00000000 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanImmediate.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.mograsim.machine.mi.parameters; - -import net.mograsim.logic.core.types.BitVector; - -public class BooleanImmediate implements MicroInstructionParameter -{ - private boolean value; - - public BooleanImmediate(boolean value) - { - this.value = value; - } - - @Override - public BitVector getValue() - { - return value ? BitVector.SINGLE_1 : BitVector.SINGLE_0; - } - - public boolean getBooleanValue() - { - return value; - } - - @Override - public ParameterType getType() - { - return ParameterType.BOOLEAN_IMMEDIATE; - } - - @Override - public int hashCode() - { - final int prime = 31; - int result = 1; - result = prime * result + (value ? 1231 : 1237); - return result; - } - - @Override - public boolean equals(Object obj) - { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof BooleanImmediate)) - return false; - BooleanImmediate other = (BooleanImmediate) obj; - if (value != other.value) - return false; - return true; - } - - @Override - public String toString() - { - return value ? "H" : "L"; - } -} diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/Mnemonic.java b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/Mnemonic.java index 46338477..14bbe3be 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/Mnemonic.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/Mnemonic.java @@ -48,7 +48,7 @@ public final class Mnemonic implements MicroInstructionParameter @Override public ParameterType getType() { - return ParameterType.MNEMONIC; + return owner.getExpectedType(); } public int ordinal() diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java index 7d217146..813857d9 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/BooleanEditingSupport.java @@ -5,19 +5,23 @@ import org.eclipse.jface.viewers.CheckboxCellEditor; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TableViewer; +import net.mograsim.logic.core.types.Bit; import net.mograsim.machine.mi.MicroInstruction; -import net.mograsim.machine.mi.parameters.BooleanImmediate; +import net.mograsim.machine.mi.MicroInstructionDefinition; +import net.mograsim.machine.mi.parameters.BooleanClassification; public class BooleanEditingSupport extends EditingSupport { private final CheckboxCellEditor editor; + private final BooleanClassification boolClass; private final TableViewer viewer; private final int index; - public BooleanEditingSupport(TableViewer viewer, int index) + public BooleanEditingSupport(TableViewer viewer, MicroInstructionDefinition definition, int index) { super(viewer); this.viewer = viewer; + this.boolClass = (BooleanClassification) definition.getParameterClassification(index); editor = new CheckboxCellEditor(viewer.getTable()); this.index = index; } @@ -37,13 +41,13 @@ public class BooleanEditingSupport extends EditingSupport @Override protected Object getValue(Object element) { - return ((BooleanImmediate) ((MicroInstruction) element).getParameter(index)).getBooleanValue(); + return ((MicroInstruction) element).getParameter(index).getValue().getMSBit(0).equals(Bit.ONE); } @Override protected void setValue(Object element, Object value) { - ((MicroInstruction) element).setParameter(index, new BooleanImmediate((Boolean) value)); + ((MicroInstruction) element).setParameter(index, boolClass.get((Boolean) value)); viewer.update(element, null); } diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java index 0af63e50..846d9abf 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java @@ -126,7 +126,7 @@ public class InstructionView extends ViewPart switch (parameterClassification.getExpectedType()) { case BOOLEAN_IMMEDIATE: - return new BooleanEditingSupport(viewer, index); + return new BooleanEditingSupport(viewer, miDef, index); case INTEGER_IMMEDIATE: return new IntegerEditingSupport(viewer, miDef, index, new DisplaySettings(NumberType.DECIMAL)); case MNEMONIC: