{File name LispMapB2.mc
Created: 24-Apr-84 10:00:25
}
SetTask[0];
{*************************
Read Map Update Subroutine
**************************}
{Timing: 4 cycles}
{Enter at cycle 3, returns to cycle1}
{returns thru L0 if map fixed ok}
{returns thru L1 if wants to trap}
RLMapFixB2:
Xbus ← Rx LRot0, XwdDisp, c3;
Map ← [rhTT,TT], DISP2[RFixRFlagsB2], c1;
MDR ← Rx or 10, L0Disp, GOTO[ReReadB2], c2, at[0, 4, RFixRFlagsB2];
MDR ← Rx or 10, L0Disp, GOTO[ReReadB2], c2, at[1, 4, RFixRFlagsB2];
MDR ← Rx or 10, L0Disp, GOTO[ReReadB2], c2, at[2, 4, RFixRFlagsB2];
L1Disp, GOTO[RWTrapB2], c2, at[3, 4, RFixRFlagsB2];
ReReadB2:
Xbus ← 1, XDisp, RET[RMapFixCallerB2], c3;
{*************************
Write Map Update Subroutine
**************************}
{Timing: 4 cycles}
{Enter at cycle 3, returns to cycle1}
{returns thru L0 if map fixed ok}
{returns thru L1 if wants to trap}
WLMapFixB2:
Xbus ← Rx LRot0, XwdDisp, c3;
Map ← [rhTT, TT], DISP2[FixWFlagsB2], c1;
MDR ← Rx or 030, L0Disp, GOTO[ReWriteB2], c2, at[0, 4, FixWFlagsB2];
MDR ← Rx or 030, L0Disp, GOTO[ReWriteB2], c2, at[1, 4, FixWFlagsB2];
L1Disp, GOTO[RWTrapB2], c2, at[2, 4, FixWFlagsB2];
L1Disp, GOTO[RWTrapB2], c2, at[3, 4, FixWFlagsB2];
ReWriteB2:
Xbus ← 1, XDisp, RET[WMapFixCallerB2], c3;
RWTrapB2:
DISP4[TrapFixesB2], c3;
GOTO[TrapFixesDoneB2c2], c1, at[L1.NoFixesB2, 10, TrapFixesB2];
TOS ← uTOS, c1, at[L1.RestoreTosB2, 10, TrapFixesB2];
TOSH ← uTOSH, GOTO[TrapFixesDoneB2c3], c2;
{ GOTO[DLFix], c1, at[L1.DLFixesB2, 10, TrapFixesB2];}
{ GOTO[FFTFix], c1, at[L1.FFTFixesB2, 10, TrapFixesB2];}
TrapFixesDoneB2c2:
, c2;
TrapFixesDoneB2c3:
, c3;
B2CrossToPFaultc1:
Bank ← EmuBank, c1;
L1 ← L1.NoFixes, c2;
CROSS[PFaultB1], c3;
ufnZ3:
, c3;
ufnZ1:
, c1;
ufnZ2:
TOS ← uTOS, c2;
TOSH ← uTOSH, GOTO[ufnX1], c3;
ufnX2:
, c2;
ufnX3:
, c3;
ufnX1:
Bank ← EmuBank, c1;
, c2;
S ← S + 1, CROSS[ufnB1], c3;
OpTable:
Bank ← EmuBank, c1, at[OpcodeBase];
, c2;
CROSS[OpcodeBase], c3;
{ E N D }