From: Fabian Stemmler Date: Tue, 24 Sep 2019 18:18:19 +0000 (+0200) Subject: Numbers in MemoryView and mpm editor now have leading zeros X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=5e1f40d3029fbd0c77e430d378bb0746f981e4cc Numbers in MemoryView and mpm editor now have leading zeros --- diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java index 909113ce..33ad2608 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java @@ -9,4 +9,7 @@ public interface MainMemory extends Memory public BigInteger getCellAsBigInteger(long address); public void setCellAsBigInteger(long address, BigInteger word); + + @Override + public MainMemoryDefinition getDefinition(); } \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmNumberUtil.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmNumberUtil.java index 580c3249..38323fa8 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmNumberUtil.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmNumberUtil.java @@ -172,6 +172,14 @@ public final class AsmNumberUtil * Formats a {@link BigInteger} in accordance with the pattern associated with the supplied {@link NumberType} */ public static String toString(BigInteger number, NumberType type) + { + return toString(number, type, 0); + } + + /** + * Formats a {@link BigInteger} in accordance with the pattern associated with the supplied {@link NumberType} + */ + public static String toString(BigInteger number, NumberType type, int minBits) { String pattern; switch (type) @@ -189,9 +197,36 @@ public final class AsmNumberUtil case HEXADECIMAL: pattern = preferredHexPat; } + + int digits; + + switch (type.radix) + { + case 2: + digits = minBits; + break; + case 8: + digits = minBits / 3; + break; + case 16: + digits = minBits / 4; + break; + default: + digits = 0; + } + + String numberString, sign; if (number.signum() < 0) - return String.format(pattern, "-", number.abs().toString(type.radix)); - return String.format(pattern, "", number.toString(type.radix)); + { + sign = "-"; + numberString = number.abs().toString(type.radix); + } else + { + sign = ""; + numberString = number.toString(type.radix); + } + numberString = "0".repeat(Integer.max(0, digits - numberString.length())) + numberString; + return String.format(pattern, sign, numberString); } public enum NumberType diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java index a1d81072..b28c5b9c 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java @@ -39,7 +39,7 @@ public abstract class NumberCellEditingSupport extends EditingSupport @Override final protected Object getValue(Object element) { - return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType()); + return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType(), getBitLength(element)); } @Override @@ -59,4 +59,6 @@ public abstract class NumberCellEditingSupport extends EditingSupport protected abstract void setAsBigInteger(Object element, BigInteger value); protected abstract BigInteger getAsBigInteger(Object element); + + protected abstract int getBitLength(Object element); } diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java index 6ee2c2b4..a6e84e72 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java @@ -8,7 +8,7 @@ import net.mograsim.plugin.asm.AsmNumberUtil; public abstract class NumberColumnLabelProvider extends ColumnLabelProvider { - private DisplaySettings displaySettings; + private final DisplaySettings displaySettings; public NumberColumnLabelProvider(DisplaySettings displaySettings) { @@ -18,8 +18,10 @@ public abstract class NumberColumnLabelProvider extends ColumnLabelProvider @Override public String getText(Object element) { - return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType()); + return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType(), getBitLength(element)); } public abstract BigInteger getAsBigInteger(Object element); + + public abstract int getBitLength(Object element); } \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java index 46eefcd9..deaabe26 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java @@ -27,4 +27,10 @@ public class MemoryCellEditingSupport extends NumberCellEditingSupport MemoryTableRow row = (MemoryTableRow) element; return row.getMemory().getCellAsBigInteger(row.address); } + + @Override + public int getBitLength(Object element) + { + return ((MemoryTableRow) element).getMemory().getDefinition().getCellWidth(); + } } \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java index 09368807..e490bd0c 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java @@ -134,6 +134,12 @@ public class MemoryView extends ViewPart implements ContextObserver return row.getMemory().getCellAsBigInteger(row.address); } + @Override + public int getBitLength(Object element) + { + return ((MemoryTableRow) element).getMemory().getDefinition().getCellWidth(); + } + }); col.setEditingSupport(new MemoryCellEditingSupport(viewer, displaySettings)); } diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java index 7134de12..a2d50877 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerColumnLabelProvider.java @@ -23,4 +23,11 @@ public class IntegerColumnLabelProvider extends NumberColumnLabelProvider return ((IntegerImmediate) row.data.getCell(row.address).getParameter(index)).getValueAsBigInteger(); } + @Override + public int getBitLength(Object element) + { + return ((InstructionTableRow) element).getData().getDefinition().getMicroInstructionDefinition().getParameterClassification(index) + .getExpectedBits(); + } + } diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java index a821a76a..365c6e19 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/IntegerEditingSupport.java @@ -48,4 +48,11 @@ public class IntegerEditingSupport extends NumberCellEditingSupport return ((IntegerImmediate) row.data.getCell(row.address).getParameter(index)).getValueAsBigInteger(); } + @Override + public int getBitLength(Object element) + { + return ((InstructionTableRow) element).getData().getDefinition().getMicroInstructionDefinition().getParameterClassification(index) + .getExpectedBits(); + } + }