@Override
protected TimelineEventHandler compute()
{
- if (!address.hasNumericValue())
+ if (!address.getValues().isBinary())
{
if (read.equals(rWBit.getValue()))
return e -> data.feedSignals(Bit.U.toVector(data.width()));// TODO don't always feed U, but decide to feed X or U.
return e -> data.clearSignals();
}
- long addressed = address.getUnsignedValue();
+ long addressed = address.getValues().getUnsignedValueLong();
if (read.equals(rWBit.getValue()))
{
BitVector storedData = memory.getCell(addressed);
return e -> data.feedSignals(storedData);
}
BitVector transData = data.getValues();
- if (transData.equals(memory.getCell(addressed)))
- return null;
+ boolean isNewData = !transData.equals(memory.getCell(addressed));
return e ->
{
data.clearSignals();
- memory.setCell(addressed, transData);
+ if (isNewData)
+ memory.setCell(addressed, transData);
};
}