Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[Mograsim.git] / net.mograsim.machine / src / net / mograsim / machine / mi / MicroInstructionDefinition.java
index fcdbdc4..6625fa6 100644 (file)
@@ -1,16 +1,11 @@
 package net.mograsim.machine.mi;
 
-import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Optional;
 
 import net.mograsim.logic.core.types.Bit;
-import net.mograsim.machine.mi.parameters.IntegerClassification;
-import net.mograsim.machine.mi.parameters.IntegerImmediate;
 import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
-import net.mograsim.machine.mi.parameters.MnemonicFamily;
 import net.mograsim.machine.mi.parameters.ParameterClassification;
-import net.mograsim.machine.mi.parameters.MicroInstructionParameter.ParameterType;
 
 public interface MicroInstructionDefinition
 {
@@ -40,31 +35,17 @@ public interface MicroInstructionDefinition
                return Arrays.stream(getParameterClassifications()).mapToInt(e -> e.getExpectedBits()).reduce(0, (a, b) -> a + b);
        }
 
-       public default MicroInstruction createDefaultInstruction()
+       public default MicroInstruction createDefaultInstruction(Runnable updateCallback)
        {
                int size = size();
                MicroInstructionParameter[] params = new MicroInstructionParameter[size];
                ParameterClassification[] classes = getParameterClassifications();
                for (int i = 0; i < size; i++)
                {
-                       MicroInstructionParameter newParam;
                        ParameterClassification classification = classes[i];
-                       ParameterType type = classification.getExpectedType();
-                       switch (type)
-                       {
-                       case BOOLEAN_IMMEDIATE:
-                       case MNEMONIC:
-                               newParam = ((MnemonicFamily) classification).get(0);
-                               break;
-                       case INTEGER_IMMEDIATE:
-                               newParam = new IntegerImmediate(BigInteger.valueOf(0), ((IntegerClassification) classification).getExpectedBits());
-                               break;
-                       default:
-                               throw new IllegalStateException("Unknown ParameterType " + type);
-                       }
-                       params[i] = newParam;
+                       params[i] = classification.getDefault();
                }
-               return new StandardMicroInstruction(params);
+               return new StandardMicroInstruction(updateCallback, params);
        }
 
        public Optional<String> getParameterDescription(int index);