X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Flaunch%2FMainMemoryBlockExtension.java;h=5d4cf5decbf235156c6c86d12cea0669c1f2aa7b;hb=13577856cd85c46f2cd4ad956332697bc820f425;hp=8d169988111713e9c1707dd799d84eee850cc556;hpb=c08544713fa962229e512a6447f09d889ebde31b;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java index 8d169988..5d4cf5de 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java @@ -25,7 +25,8 @@ import net.mograsim.preferences.Preferences; public class MainMemoryBlockExtension extends PlatformObject implements IMemoryBlockExtension { - // TODO do we want to make the memory accessible byte-wise? + private static final byte MEM_BYTE_FLAGS = (byte) (MemoryByte.READABLE | MemoryByte.WRITABLE | MemoryByte.ENDIANESS_KNOWN + | MemoryByte.BIG_ENDIAN); private final String expression; private final MachineDebugTarget debugTarget; @@ -71,7 +72,7 @@ public class MainMemoryBlockExtension extends PlatformObject implements IMemoryB if (baseAddrWords.compareTo(minAddrWords) < 0 || baseAddrWords.compareTo(maxAddrWords) > 0) throwDebugException("Base address out of range"); - if (baseAddrWords.add(lengthWords).compareTo(maxAddrWords) > 0) + if (baseAddrWords.add(lengthWords).subtract(BigInteger.ONE).compareTo(maxAddrWords) > 0) throwDebugException("End address out of range"); this.clients = new HashSet<>(); @@ -194,7 +195,7 @@ public class MainMemoryBlockExtension extends PlatformObject implements IMemoryB @Override public int getAddressSize() throws DebugException { - return Long.BYTES; + return (getBigLength().bitLength() + 7) / 8; } @Override @@ -242,9 +243,9 @@ public class MainMemoryBlockExtension extends PlatformObject implements IMemoryB int l = wordBytes[0] == 0 ? 1 : 0; int k; for (k = 0; k < cellWidthBytes - wordBytes.length + l; k++) - bytes[i + k] = new MemoryByte(); + bytes[i + k] = new MemoryByte((byte) 0, MEM_BYTE_FLAGS); for (; k < cellWidthBytes; k++, l++) - bytes[i + k] = new MemoryByte(wordBytes[l]); + bytes[i + k] = new MemoryByte(wordBytes[l], MEM_BYTE_FLAGS); } else for (int k = 0; k < cellWidthBytes; k++) bytes[i + k] = new MemoryByte((byte) 0, (byte) 0);