DMProcessorModelImpl.mesa
Written By: Jean Vuillemin and Pradeep Sindhu
Last Edited By: Pradeep Sindhu September 2, 1985 10:41:20 pm PDT
DIRECTORY
DM,
DMProcessorModel,
DMPBusModel;
DMProcessorModelImpl:
CEDAR
PROGRAM
IMPORTS
DM, DMPBusModel
EXPORTS DMProcessorModel =
BEGIN
OPEN DMProcessorModel;
Create:
PUBLIC
PROC [commandList:
LIST
OF ProcessorCommand ←
NIL, pbus:
DM.Component]
RETURNS [processor:
DM.Component] = {
processor ←
NEW [
DM.ComponentRec ← [
action: [Reset, PhA, EvPhA, PhB, EvPhB],
history:
NIL,
componentType: $Processor,
subComponents:
NIL,
specific:
NEW [ProcessorSpecificRec ← [commandList: commandList, pbus: pbus]]]]
};
EmptyCommandList:
PUBLIC
SIGNAL =
CODE;
PhA:
DM.ActionProc = {
ps: ProcessorSpecific ←
NARROW[component.specific];
IF ps.commandList =
NIL
THEN
SIGNAL EmptyCommandList[];
DMPBusModel.DrCmd[ps.pbus, ps.commandList.first.cmd];
DMPBusModel.DrData[ps.pbus, ps.commandList.first.adrs]
};
EvPhA:
DM.ActionProc = {
};
PhB:
DM.ActionProc = {
ps: ProcessorSpecific ←
NARROW[component.specific];
IF ps.commandList.first.cmd = Store
THEN DMPBusModel.DrData[ps.pbus, ps.commandList.first.data]
};
EvPhB:
DM.ActionProc = {
ps: ProcessorSpecific ←
NARROW[component.specific];
IF DMPBusModel.Reject[ps.pbus]
THEN component.history ←
DM.ConsHistory[EvPhB, ps.commandList.first, component.history]
ELSE {
IF ps.commandList.first.cmd = Fetch
THEN ps.commandList.first.data ← DMPBusModel.Data[ps.pbus];
component.history ←
DM.ConsHistory[EvPhB, ps.commandList.first, component.history];
ps.commandList ← ps.commandList.rest
};
};
Reset:
DM.ActionProc = {
};
END.