projects
/
Mograsim.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
d281af0
)
MemoryView is now updated when the memory is modified
author
Fabian Stemmler
<stemmler@in.tum.de>
Tue, 27 Aug 2019 21:09:29 +0000
(23:09 +0200)
committer
Fabian Stemmler
<stemmler@in.tum.de>
Tue, 27 Aug 2019 21:09:29 +0000
(23:09 +0200)
net.mograsim.machine/src/net/mograsim/machine/Memory.java
patch
|
blob
|
history
net.mograsim.machine/src/net/mograsim/machine/MemoryObserver.java
[new file with mode: 0644]
patch
|
blob
net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
patch
|
blob
|
history
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java
patch
|
blob
|
history
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java
patch
|
blob
|
history
diff --git
a/net.mograsim.machine/src/net/mograsim/machine/Memory.java
b/net.mograsim.machine/src/net/mograsim/machine/Memory.java
index
8297ebb
..
e421e47
100644
(file)
--- a/
net.mograsim.machine/src/net/mograsim/machine/Memory.java
+++ b/
net.mograsim.machine/src/net/mograsim/machine/Memory.java
@@
-17,4
+17,13
@@
public interface Memory<T>
public void setCell(long address, T data);
public long size();
public void setCell(long address, T data);
public long size();
+
+ /**
+ * Registers an observer to be notified when a memory cell is modified
+ */
+ public void registerObserver(MemoryObserver ob);
+
+ public void deregisterObserver(MemoryObserver ob);
+
+ public void notifyObservers(long address);
}
}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/MemoryObserver.java
b/net.mograsim.machine/src/net/mograsim/machine/MemoryObserver.java
new file mode 100644
(file)
index 0000000..
1d7fc4d
--- /dev/null
+++ b/
net.mograsim.machine/src/net/mograsim/machine/MemoryObserver.java
@@ -0,0
+1,6
@@
+package net.mograsim.machine;
+
+public interface MemoryObserver
+{
+ public void update(long address);
+}
diff --git
a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
index
e828a24
..
516b01f
100644
(file)
--- a/
net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
+++ b/
net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
@@
-3,11
+3,14
@@
package net.mograsim.machine.standard.memory;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.machine.MainMemory;
import net.mograsim.machine.MainMemoryDefinition;
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.machine.MainMemory;
import net.mograsim.machine.MainMemoryDefinition;
+import net.mograsim.machine.MemoryObserver;
public class WordAddressableMemory implements MainMemory
{
public class WordAddressableMemory implements MainMemory
{
@@
-15,6
+18,7
@@
public class WordAddressableMemory implements MainMemory
private final long minimalAddress, maximalAddress;
private final MainMemoryDefinition definition;
private final int pageSize = 64;
private final long minimalAddress, maximalAddress;
private final MainMemoryDefinition definition;
private final int pageSize = 64;
+ private Set<MemoryObserver> observers = new HashSet<>();
private HashMap<Long, Page> pages;
private HashMap<Long, Page> pages;
@@
-55,6
+59,7
@@
public class WordAddressableMemory implements MainMemory
if (p == null)
pages.put(page, p = new Page());
p.setCell(offset, b);
if (p == null)
pages.put(page, p = new Page());
p.setCell(offset, b);
+ notifyObservers(address);
}
@Override
}
@Override
@@
-91,6
+96,7
@@
public class WordAddressableMemory implements MainMemory
if (p == null)
pages.put(page, p = new Page());
p.setCellAsBigInteger(offset, word);
if (p == null)
pages.put(page, p = new Page());
p.setCellAsBigInteger(offset, word);
+ notifyObservers(address);
}
private class Page
}
private class Page
@@
-146,4
+152,22
@@
public class WordAddressableMemory implements MainMemory
{
return definition;
}
{
return definition;
}
+
+ @Override
+ public void registerObserver(MemoryObserver ob)
+ {
+ observers.add(ob);
+ }
+
+ @Override
+ public void deregisterObserver(MemoryObserver ob)
+ {
+ observers.remove(ob);
+ }
+
+ @Override
+ public void notifyObservers(long address)
+ {
+ observers.forEach(ob -> ob.update(address));
+ }
}
}
diff --git
a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java
b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java
index
3ddb32f
..
9f2a9e1
100644
(file)
--- a/
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java
+++ b/
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java
@@
-3,10
+3,12
@@
package net.mograsim.plugin.memory;
import org.eclipse.jface.viewers.ILazyContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ILazyContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
import net.mograsim.machine.MainMemory;
import net.mograsim.machine.MainMemory;
+import net.mograsim.machine.MemoryObserver;
-public class MemoryTableContentProvider implements ILazyContentProvider
+public class MemoryTableContentProvider implements ILazyContentProvider
, MemoryObserver
{
private long lower;
private TableViewer viewer;
{
private long lower;
private TableViewer viewer;
@@
-62,6
+64,16
@@
public class MemoryTableContentProvider implements ILazyContentProvider
{
this.viewer = (TableViewer) viewer;
this.memory = (MainMemory) newInput;
{
this.viewer = (TableViewer) viewer;
this.memory = (MainMemory) newInput;
+ if (oldInput != null)
+ ((MainMemory) oldInput).deregisterObserver(this);
+ if (memory != null)
+ memory.registerObserver(this);
setLowerBound(0L);
}
setLowerBound(0L);
}
+
+ @Override
+ public void update(long address)
+ {
+ Display.getDefault().asyncExec(() -> updateElement((int) (address - lower)));
+ }
}
}
diff --git
a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java
b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java
index
f00f1c9
..
5254745
100644
(file)
--- a/
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java
+++ b/
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java
@@
-57,7
+57,6
@@
public class MemoryView extends ViewPart
{
// Nothing to do here
}
{
// Nothing to do here
}
-// fromText.setText(AsmNumberUtil.toString(BigInteger.valueOf(provider.getLowerBound()), NumberType.HEXADECIMAL));
});
Label amountLabel = new Label(parent, SWT.NONE);
});
Label amountLabel = new Label(parent, SWT.NONE);
@@
-77,7
+76,6
@@
public class MemoryView extends ViewPart
{
// Nothing to do here
}
{
// Nothing to do here
}
-// amountText.setText(Integer.toString(provider.getAmount()));
});
setupRadixSelector(parent);
});
setupRadixSelector(parent);