coa-lab/assignment-5/src/processor/memorysystem/MainMemory.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())
);
}
}
}