net.mograsim.logic.model.am2900;bundle-version="0.1.0";visibility:=reexport,
javax.annotation;bundle-version="1.0.0",
net.mograsim.preferences;bundle-version="0.1.0",
- net.mograsim.machine
+ net.mograsim.machine,
+ net.mograsim.plugin.core
Bundle-RequiredExecutionEnvironment: JavaSE-11
Automatic-Module-Name: net.mograsim.plugin.core
Bundle-Vendor: %Bundle-Vendor.0
--- /dev/null
+package net.mograsim.plugin.tables;
+
+import java.math.BigInteger;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+
+import net.mograsim.plugin.asm.AsmNumberUtil;
+import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
+
+public class AddressLabelProvider extends ColumnLabelProvider
+{
+ @Override
+ public String getText(Object element)
+ {
+ @SuppressWarnings("rawtypes")
+ TableRow row = (TableRow) element;
+ return AsmNumberUtil.toString(BigInteger.valueOf(row.address), NumberType.HEXADECIMAL);
+ }
+}
--- /dev/null
+package net.mograsim.plugin.tables;
+
+public class TableRow<T>
+{
+ public final T data;
+ public final long address;
+
+ public TableRow(long address, T data)
+ {
+ this.data = data;
+ this.address = address;
+ }
+
+ public T getData()
+ {
+ return data;
+ }
+
+ public long getAddress()
+ {
+ return address;
+ }
+}
package net.mograsim.plugin.tables.memory;
import net.mograsim.machine.MainMemory;
+import net.mograsim.plugin.tables.TableRow;
-public class MemoryTableRow
+public class MemoryTableRow extends TableRow<MainMemory>
{
- public final long address;
- private final MainMemory memory;
-
public MemoryTableRow(long address, MainMemory memory)
{
- this.address = address;
- this.memory = memory;
+ super(address, memory);
}
public MainMemory getMemory()
{
- return memory;
+ return getData();
}
-}
+}
\ No newline at end of file
import java.math.BigInteger;
import java.util.Optional;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import net.mograsim.plugin.MachineContext;
import net.mograsim.plugin.MachineContext.ContextObserver;
import net.mograsim.plugin.asm.AsmNumberUtil;
+import net.mograsim.plugin.tables.AddressLabelProvider;
import net.mograsim.plugin.tables.DisplaySettings;
import net.mograsim.plugin.tables.NumberColumnLabelProvider;
import net.mograsim.plugin.tables.RadixSelector;
private TableViewer viewer;
private MemoryTableContentProvider provider;
private DisplaySettings displaySettings;
- private String addressFormat;
@Override
public void createPartControl(Composite parent)
int[] bounds = { 100, 100 };
TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0]);
- col.setLabelProvider(new ColumnLabelProvider()
- {
- @Override
- public String getText(Object element)
- {
- MemoryTableRow row = (MemoryTableRow) element;
- return String.format(addressFormat, row.address);
- }
- });
+ col.setLabelProvider(new AddressLabelProvider());
col = createTableViewerColumn(titles[1], bounds[1]);
col.setLabelProvider(new NumberColumnLabelProvider(displaySettings)
private void bindMainMemory(MainMemory m)
{
- int hexAddressLength = Long.toUnsignedString(m.getDefinition().getMaximalAddress(), 16).length();
- addressFormat = "0x%0" + hexAddressLength + "X";
viewer.setInput(m);
}
import org.eclipse.jface.viewers.TableViewer;
import net.mograsim.logic.core.types.Bit;
-import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.BooleanClassification;
@Override
protected Object getValue(Object element)
{
- return ((MicroInstruction) element).getParameter(index).getValue().getMSBit(0).equals(Bit.ONE);
+ return ((InstructionTableRow) element).data.getParameter(index).getValue().getMSBit(0).equals(Bit.ONE);
}
@Override
protected void setValue(Object element, Object value)
{
- ((MicroInstruction) element).setParameter(index, boolClass.get((Boolean) value));
+ ((InstructionTableRow) element).data.setParameter(index, boolClass.get((Boolean) value));
viewer.update(element, null);
}
@Override
public void updateElement(int index)
{
- viewer.replace(memory.getCell(index), index);
+ long address = memory.getDefinition().getMinimalAddress() + index;
+ viewer.replace(new InstructionTableRow(address, memory.getCell(address)), index);
}
@Override
--- /dev/null
+package net.mograsim.plugin.tables.mi;
+
+import net.mograsim.machine.mi.MicroInstruction;
+import net.mograsim.plugin.tables.TableRow;
+
+public class InstructionTableRow extends TableRow<MicroInstruction>
+{
+ public InstructionTableRow(long address, MicroInstruction data)
+ {
+ super(address, data);
+ }
+}
import net.mograsim.plugin.MachineContext;
import net.mograsim.plugin.MachineContext.ContextObserver;
import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
+import net.mograsim.plugin.tables.AddressLabelProvider;
import net.mograsim.plugin.tables.DisplaySettings;
import net.mograsim.plugin.tables.RadixSelector;
import net.mograsim.plugin.util.DropDownMenu;
private void createColumns()
{
+ TableViewerColumn col = createTableViewerColumn("Address", 200);
+ col.setLabelProvider(new AddressLabelProvider());
+
int size = miDef.size();
int bit = 0;
columns = new TableViewerColumn[size];
String name = startBit == endBit ? Integer.toString(startBit) : startBit + "..." + endBit;
int bounds = 20 + 20 * classes[i].getExpectedBits();
- TableViewerColumn col = createTableViewerColumn(name, bounds);
- createEditingAndLabel(col, miDef, i);
+ createEditingAndLabel(createTableViewerColumn(name, bounds), miDef, i);
}
}
import java.math.BigInteger;
-import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.parameters.IntegerImmediate;
import net.mograsim.plugin.tables.DisplaySettings;
import net.mograsim.plugin.tables.NumberColumnLabelProvider;
@Override
public BigInteger getAsBigInteger(Object element)
{
- return ((IntegerImmediate) ((MicroInstruction) element).getParameter(index)).getValueAsBigInteger();
+ return ((IntegerImmediate) ((InstructionTableRow) element).data.getParameter(index)).getValueAsBigInteger();
}
}
import org.eclipse.jface.viewers.TableViewer;
-import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.IntegerClassification;
import net.mograsim.machine.mi.parameters.IntegerImmediate;
@Override
protected void setAsBigInteger(Object element, BigInteger value)
{
- ((MicroInstruction) element).setParameter(index, new IntegerImmediate(value, classification.getExpectedBits()));
+ ((InstructionTableRow) element).data.setParameter(index, new IntegerImmediate(value, classification.getExpectedBits()));
}
@Override
protected BigInteger getAsBigInteger(Object element)
{
- return ((IntegerImmediate) ((MicroInstruction) element).getParameter(index)).getValueAsBigInteger();
+ return ((IntegerImmediate) ((InstructionTableRow) element).data.getParameter(index)).getValueAsBigInteger();
}
}
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
-import net.mograsim.machine.mi.MicroInstruction;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.parameters.Mnemonic;
import net.mograsim.machine.mi.parameters.MnemonicFamily;
@Override
protected Object getValue(Object element)
{
- return ((Mnemonic) ((MicroInstruction) element).getParameter(index)).ordinal();
+ return ((Mnemonic) ((InstructionTableRow) element).data.getParameter(index)).ordinal();
}
@Override
protected void setValue(Object element, Object value)
{
- ((MicroInstruction) element).setParameter(index, family.get((Integer) value));
+ ((InstructionTableRow) element).data.setParameter(index, family.get((Integer) value));
viewer.update(element, null);
}
import org.eclipse.jface.viewers.ColumnLabelProvider;
-import net.mograsim.machine.mi.MicroInstruction;
-
public class ParameterLabelProvider extends ColumnLabelProvider
{
private final int index;
@Override
public String getText(Object element)
{
- return ((MicroInstruction) element).getParameter(index).toString();
+ return ((InstructionTableRow) element).data.getParameter(index).toString();
}
}