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;
{
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
{
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()
{
{
return 1;
}
-
- @Override
- public BooleanImmediate parse(String toParse)
- {
- return new BooleanImmediate("H".equals(toParse));
- }
}
+++ /dev/null
-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";
- }
-}
@Override
public ParameterType getType()
{
- return ParameterType.MNEMONIC;
+ return owner.getExpectedType();
}
public int ordinal()
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;
}
@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);
}
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: