--- /dev/null
+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);
+ }
+}
--- /dev/null
+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);
+ }
+
+}
--- /dev/null
+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();
+ }
+}
+++ /dev/null
-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);
- }
-}
+++ /dev/null
-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);
- }
-
-}
+++ /dev/null
-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();
- }
-
- }
-}
--- /dev/null
+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;
+ }
+
+}
+++ /dev/null
-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;
- }
-
-}
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)
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());
}
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;
private TableViewer viewer;
private TableViewerColumn[] columns = new TableViewerColumn[0];
private MicroInstructionDefinition miDef;
- private MicroprogramMemory memory;
+ private MicroInstructionMemory memory;
private DisplaySettings displaySettings;
@SuppressWarnings("unused")
saveLoc = d.getFilterPath() + File.separator + filename;
}
- public void bindMicroprogramMemory(MicroprogramMemory memory)
+ public void bindMicroprogramMemory(MicroInstructionMemory memory)
{
this.memory = memory;
viewer.setInput(memory);
}
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();
}
{
try
{
- MicroprogramMemoryParser.write(memory, file);
+ MicroInstructionMemoryParser.write(memory, file);
}
catch (IOException e)
{