78 lines
1.8 KiB
Java
78 lines
1.8 KiB
Java
package processor.memorysystem;
|
|
|
|
import generic.Element;
|
|
import generic.Event;
|
|
import generic.ExecutionCompleteEvent;
|
|
import generic.MemoryReadEvent;
|
|
import generic.MemoryResponseEvent;
|
|
import generic.MemoryWriteEvent;
|
|
import generic.Simulator;
|
|
import processor.Clock;
|
|
|
|
public class MainMemory implements Element{
|
|
int[] memory;
|
|
|
|
public MainMemory()
|
|
{
|
|
memory = new int[65536];
|
|
}
|
|
|
|
public int getWord(int address)
|
|
{
|
|
return memory[address];
|
|
}
|
|
|
|
public void setWord(int address, int value)
|
|
{
|
|
memory[address] = value;
|
|
}
|
|
|
|
public String getContentsAsString(int startingAddress, int endingAddress)
|
|
{
|
|
if(startingAddress == endingAddress)
|
|
return "";
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("\nMain Memory Contents:\n\n");
|
|
for(int i = startingAddress; i <= endingAddress; i++)
|
|
{
|
|
sb.append(i + "\t\t: " + memory[i] + "\n");
|
|
}
|
|
sb.append("\n");
|
|
return sb.toString();
|
|
}
|
|
|
|
@Override
|
|
public void handleEvent(Event e) {
|
|
if (e.getEventType() == Event.EventType.MemoryRead) {
|
|
System.out.println("Memory Read Event Happening");
|
|
MemoryReadEvent event = (MemoryReadEvent) e ;
|
|
|
|
System.out.println(getWord(event.getAddressToReadFrom()));
|
|
Simulator.getEventQueue().addEvent(
|
|
new MemoryResponseEvent(
|
|
Clock.getCurrentTime(),
|
|
this,
|
|
event.getRequestingElement(),
|
|
getWord(event.getAddressToReadFrom())
|
|
)
|
|
);
|
|
}
|
|
else if(e.getEventType() == Event.EventType.MemoryWrite) {
|
|
System.out.println("Memory Write Event Happening");
|
|
MemoryWriteEvent event = (MemoryWriteEvent) e ;
|
|
System.out.println(getWord(event.getAddressToWriteTo()));
|
|
|
|
this.setWord(event.getAddressToWriteTo(), event.getValue());
|
|
Simulator.getEventQueue().addEvent(
|
|
new ExecutionCompleteEvent(
|
|
Clock.getCurrentTime(),
|
|
this,
|
|
event.getRequestingElement())
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
}
|