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;
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<>();
@Override
public int getAddressSize() throws DebugException
{
- return Long.BYTES;
+ return (getBigLength().bitLength() + 7) / 8;
}
@Override
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);