Refactored MicroprogramMemory to MicroInstructionMemory
authorFabian Stemmler <stemmler@in.tum.de>
Thu, 5 Sep 2019 15:53:29 +0000 (17:53 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Thu, 5 Sep 2019 15:53:29 +0000 (17:53 +0200)
net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParseException.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemory.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParseException.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroprogramMemory.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTableContentProvider.java
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java

diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemory.java
new file mode 100644 (file)
index 0000000..6d02f7b
--- /dev/null
@@ -0,0 +1,12 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.Memory;
+import net.mograsim.machine.MemoryDefinition;
+
+public interface MicroInstructionMemory extends Memory<MicroInstruction>
+{
+       public static MicroInstructionMemory create(MemoryDefinition def)
+       {
+               return new StandardMicroInstructionMemory(def);
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParseException.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParseException.java
new file mode 100644 (file)
index 0000000..674e418
--- /dev/null
@@ -0,0 +1,28 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.MachineException;
+
+public class MicroInstructionMemoryParseException extends MachineException
+{
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 6820101808901789906L;
+
+       public MicroInstructionMemoryParseException()
+       {
+               super();
+       }
+
+       public MicroInstructionMemoryParseException(String message)
+       {
+               super(message);
+       }
+
+       public MicroInstructionMemoryParseException(Throwable cause)
+       {
+               super(cause);
+       }
+       
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java
new file mode 100644 (file)
index 0000000..44d0098
--- /dev/null
@@ -0,0 +1,107 @@
+package net.mograsim.machine.mi;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.math.BigInteger;
+import java.util.ArrayList;
+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.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.MnemonicFamily.MnemonicPair;
+import net.mograsim.machine.mi.parameters.ParameterClassification;
+
+public class MicroInstructionMemoryParser
+{
+       public static MicroInstructionMemory parseMemory(MicroInstructionDefinition definition, String input) throws IOException
+       {
+               try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(input))))
+               {
+                       return parseMemory(definition, reader);
+               }
+       }
+
+       public static MicroInstructionMemory parseMemory(MicroInstructionDefinition definition, BufferedReader input)
+       {
+               List<MicroInstruction> instructions = new ArrayList<>();
+               try
+               {
+                       String line;
+                       while (input.ready() && !"".equals((line = input.readLine())))
+                               instructions.add(parse(definition, line));
+               } catch (IOException e)
+               {
+                       e.printStackTrace();
+               }
+
+               int maxAddress = instructions.size() - 1;
+               MicroInstructionMemory memory = MicroInstructionMemory
+                               .create(MemoryDefinition.create((int) Math.ceil(Math.log(maxAddress)), 0, maxAddress));
+               int i = 0;
+               for (MicroInstruction inst : instructions)
+                       memory.setCell(i++, inst);
+               return memory;
+       }
+
+       public static MicroInstruction parse(MicroInstructionDefinition definition, String toParse)
+       {
+               int size = definition.size();
+               String[] strings = toParse.split(",");
+               if (size != strings.length)
+                       throw new MicroInstructionMemoryParseException(
+                                       "String does not match definition! The number of parameters does not match.");
+               MicroInstructionParameter[] params = new MicroInstructionParameter[size];
+               ParameterClassification[] classes = definition.getParameterClassifications();
+               try
+               {
+                       for (int i = 0; i < size; i++)
+                       {
+                               params[i] = classes[i].parse(strings[i]);
+                       }
+                       return new StandardMicroInstruction(params);
+               } catch (Exception e)
+               {
+                       throw new MicroInstructionMemoryParseException(e.getCause());
+               }
+       }
+
+       public static void write(MicroInstructionMemory memory, String output) throws IOException
+       {
+               try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(output)))
+               {
+                       write(memory, writer);
+               }
+       }
+
+       public static void write(MicroInstructionMemory memory, OutputStreamWriter output) throws IOException
+       {
+               MemoryDefinition def = memory.getDefinition();
+               long min = def.getMinimalAddress(), max = def.getMaximalAddress() + 1;
+               for (long i = min; i < max; i++)
+               {
+                       output.write(toCSV(memory.getCell(i)) + "\n");
+               }
+       }
+
+       private static String toCSV(MicroInstruction inst)
+       {
+               int max = inst.getSize() - 1;
+               StringBuilder sb = new StringBuilder();
+               for (int i = 0; i < max; i++)
+               {
+                       sb.append(inst.getParameter(i).toString());
+                       sb.append(",");
+               }
+               sb.append(inst.getParameter(max).toString());
+               return sb.toString();
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemory.java
deleted file mode 100644 (file)
index e31ce77..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-package net.mograsim.machine.mi;
-
-import net.mograsim.machine.Memory;
-import net.mograsim.machine.MemoryDefinition;
-
-public interface MicroprogramMemory extends Memory<MicroInstruction>
-{
-       public static MicroprogramMemory create(MemoryDefinition def)
-       {
-               return new StandardMicroprogramMemory(def);
-       }
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParseException.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParseException.java
deleted file mode 100644 (file)
index eea81af..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.mograsim.machine.mi;
-
-import net.mograsim.machine.MachineException;
-
-public class MicroprogramMemoryParseException extends MachineException
-{
-
-       /**
-        * 
-        */
-       private static final long serialVersionUID = 6820101808901789906L;
-
-       public MicroprogramMemoryParseException()
-       {
-               super();
-       }
-
-       public MicroprogramMemoryParseException(String message)
-       {
-               super(message);
-       }
-
-       public MicroprogramMemoryParseException(Throwable cause)
-       {
-               super(cause);
-       }
-       
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java
deleted file mode 100644 (file)
index da3e1e0..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-package net.mograsim.machine.mi;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.math.BigInteger;
-import java.util.ArrayList;
-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.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.MnemonicFamily.MnemonicPair;
-import net.mograsim.machine.mi.parameters.ParameterClassification;
-
-public class MicroprogramMemoryParser
-{
-       public static MicroprogramMemory parseMemory(MicroInstructionDefinition definition, String input) throws IOException
-       {
-               try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(input))))
-               {
-                       return parseMemory(definition, reader);
-               }
-       }
-
-       public static MicroprogramMemory parseMemory(MicroInstructionDefinition definition, BufferedReader input)
-       {
-               List<MicroInstruction> instructions = new ArrayList<>();
-               try
-               {
-                       String line;
-                       while (input.ready() && !"".equals((line = input.readLine())))
-                               instructions.add(parse(definition, line));
-               } catch (IOException e)
-               {
-                       e.printStackTrace();
-               }
-
-               int maxAddress = instructions.size() - 1;
-               MicroprogramMemory memory = MicroprogramMemory
-                               .create(MemoryDefinition.create((int) Math.ceil(Math.log(maxAddress)), 0, maxAddress));
-               int i = 0;
-               for (MicroInstruction inst : instructions)
-                       memory.setCell(i++, inst);
-               return memory;
-       }
-
-       public static MicroInstruction parse(MicroInstructionDefinition definition, String toParse)
-       {
-               int size = definition.size();
-               String[] strings = toParse.split(",");
-               if (size != strings.length)
-                       throw new MicroprogramMemoryParseException(
-                                       "String does not match definition! The number of parameters does not match.");
-               MicroInstructionParameter[] params = new MicroInstructionParameter[size];
-               ParameterClassification[] classes = definition.getParameterClassifications();
-               try
-               {
-                       for (int i = 0; i < size; i++)
-                       {
-                               params[i] = classes[i].parse(strings[i]);
-                       }
-                       return new StandardMicroInstruction(params);
-               } catch (Exception e)
-               {
-                       throw new MicroprogramMemoryParseException(e.getCause());
-               }
-       }
-
-       public static void write(MicroprogramMemory memory, String output) throws IOException
-       {
-               try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(output)))
-               {
-                       write(memory, writer);
-               }
-       }
-
-       public static void write(MicroprogramMemory memory, OutputStreamWriter output) throws IOException
-       {
-               MemoryDefinition def = memory.getDefinition();
-               long min = def.getMinimalAddress(), max = def.getMaximalAddress() + 1;
-               for (long i = min; i < max; i++)
-               {
-                       output.write(toCSV(memory.getCell(i)) + "\n");
-               }
-       }
-
-       private static String toCSV(MicroInstruction inst)
-       {
-               int max = inst.getSize() - 1;
-               StringBuilder sb = new StringBuilder();
-               for (int i = 0; i < max; i++)
-               {
-                       sb.append(inst.getParameter(i).toString());
-                       sb.append(",");
-               }
-               sb.append(inst.getParameter(max).toString());
-               return sb.toString();
-       }
-
-       public static void main(String[] args)
-       {
-               MnemonicFamily family = new MnemonicFamily(new MnemonicPair("ZERO", BitVector.SINGLE_0),
-                               new MnemonicPair("ONE", BitVector.SINGLE_1));
-               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(boolClass.get(false),
-                                       new IntegerImmediate(BigInteger.valueOf(i), 8), family.get(i % 2)));
-               try
-               {
-                       write(memory, "test.txt");
-                       MicroprogramMemory newMemory = parseMemory(def, "test.txt");
-                       write(newMemory, "test2.txt");
-               } catch (IOException e)
-               {
-                       e.printStackTrace();
-               }
-
-       }
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java
new file mode 100644 (file)
index 0000000..6ef54bd
--- /dev/null
@@ -0,0 +1,64 @@
+package net.mograsim.machine.mi;
+
+import java.util.HashSet;
+
+import net.mograsim.machine.MemoryDefinition;
+import net.mograsim.machine.MemoryObserver;
+import net.mograsim.machine.standard.memory.MemoryException;
+
+class StandardMicroInstructionMemory implements MicroInstructionMemory
+{
+       private MicroInstruction[] data;
+       private MemoryDefinition definition;
+       private HashSet<MemoryObserver> observers = new HashSet<>();
+       
+       StandardMicroInstructionMemory(MemoryDefinition definition)
+       {
+               if(definition.size() > Integer.MAX_VALUE)
+                       throw new MemoryException("Size of MicroInstructionMemory must be an int, not a long");
+               this.definition = definition;
+               data = new MicroInstruction[(int) definition.size()];
+       }
+       
+       private int translate(long address)
+       {
+               return (int) (address - definition.getMinimalAddress());
+       }
+       
+       @Override
+       public MicroInstruction getCell(long address)
+       {
+               return data[translate(address)];
+       }
+
+       @Override
+       public void setCell(long address, MicroInstruction data)
+       {
+               this.data[translate(address)] = data;
+       }
+
+       @Override
+       public void registerObserver(MemoryObserver ob)
+       {
+               observers.add(ob);
+       }
+
+       @Override
+       public void deregisterObserver(MemoryObserver ob)
+       {
+               observers.remove(ob);
+       }
+
+       @Override
+       public void notifyObservers(long address)
+       {
+               observers.forEach(ob -> ob.update(address));
+       }
+
+       @Override
+       public MemoryDefinition getDefinition()
+       {
+               return definition;
+       }
+
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroprogramMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroprogramMemory.java
deleted file mode 100644 (file)
index e06a94d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-package net.mograsim.machine.mi;
-
-import java.util.HashSet;
-
-import net.mograsim.machine.MemoryDefinition;
-import net.mograsim.machine.MemoryObserver;
-import net.mograsim.machine.standard.memory.MemoryException;
-
-class StandardMicroprogramMemory implements MicroprogramMemory
-{
-       private MicroInstruction[] data;
-       private MemoryDefinition definition;
-       private HashSet<MemoryObserver> observers = new HashSet<>();
-       
-       StandardMicroprogramMemory(MemoryDefinition definition)
-       {
-               if(definition.size() > Integer.MAX_VALUE)
-                       throw new MemoryException("Size of MicroprogramMemory must be an int, not a long");
-               this.definition = definition;
-               data = new MicroInstruction[(int) definition.size()];
-       }
-       
-       private int translate(long address)
-       {
-               return (int) (address - definition.getMinimalAddress());
-       }
-       
-       @Override
-       public MicroInstruction getCell(long address)
-       {
-               return data[translate(address)];
-       }
-
-       @Override
-       public void setCell(long address, MicroInstruction data)
-       {
-               this.data[translate(address)] = data;
-       }
-
-       @Override
-       public void registerObserver(MemoryObserver ob)
-       {
-               observers.add(ob);
-       }
-
-       @Override
-       public void deregisterObserver(MemoryObserver ob)
-       {
-               observers.remove(ob);
-       }
-
-       @Override
-       public void notifyObservers(long address)
-       {
-               observers.forEach(ob -> ob.update(address));
-       }
-
-       @Override
-       public MemoryDefinition getDefinition()
-       {
-               return definition;
-       }
-
-}
index 00a6f19..605e26d 100644 (file)
@@ -4,12 +4,12 @@ import org.eclipse.jface.viewers.ILazyContentProvider;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 
-import net.mograsim.machine.mi.MicroprogramMemory;
+import net.mograsim.machine.mi.MicroInstructionMemory;
 
 public class InstructionTableContentProvider implements ILazyContentProvider
 {
        private TableViewer viewer;
-       private MicroprogramMemory memory;
+       private MicroInstructionMemory memory;
 
        @Override
        public void updateElement(int index)
@@ -21,7 +21,7 @@ public class InstructionTableContentProvider implements ILazyContentProvider
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
        {
                this.viewer = (TableViewer) viewer;
-               this.memory = (MicroprogramMemory) newInput;
+               this.memory = (MicroInstructionMemory) newInput;
                if (this.memory != null)
                        this.viewer.setItemCount((int) memory.size());
        }
index ee1f5da..167a627 100644 (file)
@@ -17,9 +17,9 @@ import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.part.ViewPart;
 
 import net.mograsim.machine.mi.MicroInstructionDefinition;
-import net.mograsim.machine.mi.MicroprogramMemory;
-import net.mograsim.machine.mi.MicroprogramMemoryParseException;
-import net.mograsim.machine.mi.MicroprogramMemoryParser;
+import net.mograsim.machine.mi.MicroInstructionMemory;
+import net.mograsim.machine.mi.MicroInstructionMemoryParseException;
+import net.mograsim.machine.mi.MicroInstructionMemoryParser;
 import net.mograsim.machine.mi.parameters.ParameterClassification;
 import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
 import net.mograsim.plugin.tables.DisplaySettings;
@@ -33,7 +33,7 @@ public class InstructionView extends ViewPart
        private TableViewer viewer;
        private TableViewerColumn[] columns = new TableViewerColumn[0];
        private MicroInstructionDefinition miDef;
-       private MicroprogramMemory memory;
+       private MicroInstructionMemory memory;
        private DisplaySettings displaySettings;
 
        @SuppressWarnings("unused")
@@ -97,7 +97,7 @@ public class InstructionView extends ViewPart
                        saveLoc = d.getFilterPath() + File.separator + filename;
        }
 
-       public void bindMicroprogramMemory(MicroprogramMemory memory)
+       public void bindMicroprogramMemory(MicroInstructionMemory memory)
        {
                this.memory = memory;
                viewer.setInput(memory);
@@ -178,11 +178,11 @@ public class InstructionView extends ViewPart
                }
                try
                {
-                       MicroprogramMemory newMemory = MicroprogramMemoryParser.parseMemory(miDef, file);
+                       MicroInstructionMemory newMemory = MicroInstructionMemoryParser.parseMemory(miDef, file);
                        bindMicroprogramMemory(newMemory);
                        saveLoc = file;
                }
-               catch (IOException | MicroprogramMemoryParseException e)
+               catch (IOException | MicroInstructionMemoryParseException e)
                {
                        e.printStackTrace();
                }
@@ -198,7 +198,7 @@ public class InstructionView extends ViewPart
                {
                        try
                        {
-                               MicroprogramMemoryParser.write(memory, file);
+                               MicroInstructionMemoryParser.write(memory, file);
                        }
                        catch (IOException e)
                        {