package dcpu;
import java.util.HashSet;
import java.util.Set;
public class DcpuMemory {
public char[] physical_memory;
public Set<MemoryPlugin> mapped;
public Set<MemoryWatcher> watchers;
public DcpuMemory() {
physical_memory = new char[0x10000];
mapped = new HashSet<MemoryPlugin>();
watchers = new HashSet<MemoryWatcher>();
}
public void set(char addr, char value) {
physical_memory[addr] = value;
for (MemoryPlugin pl : mapped) {
if (pl.contains(addr)) {
pl.set(addr,value);
}
}
notifyOfChange(addr, addr);
}
public char get(char addr) {
if (mapped.isEmpty()) {
return physical_memory[addr];
} else {
for (MemoryPlugin pl : mapped) {
if (pl.contains(addr))
return pl.get(addr);
}
return physical_memory[addr];
}
}
public void notifyOfChange(char start, char end) {
for (MemoryWatcher wa: watchers) {
wa.memoryChanged(start, end);
}
}
}