{File name dbLispMapB0.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}

{  nobody calls this yet
RLMapFixB2:
	Xbus ← Rx LRot0, XwdDisp,	c3;

	Map ← [rhTT,TT], DISP2[RFixRFlagsB2],	c1;

	MDR ← Rx or 80, L0Disp, GOTO[ReReadB2],	c2, at[PgClean, 4, RFixRFlagsB2];
	MDR ← Rx or 80, L0Disp, GOTO[ReReadB2],	c2, at[PgDirty, 4, RFixRFlagsB2];
	MDR ← Rx or 80, L0Disp, GOTO[ReReadB2],	c2, at[PgProt, 4, RFixRFlagsB2];
	L1Disp, GOTO[RWTrapB2],	c2, at[PgVacant, 4, RFixRFlagsB2];

ReReadB2:
	Xbus ← ReadOK, 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], WriteDISP2[FixWFlagsB2],	c1;

	MDR ← Rx or 0C0, L0Disp, GOTO[ReWriteB2],	c2, at[PgWrtOK, 4, FixWFlagsB2];
	L1Disp, GOTO[RWTrapB2],	c2, at[PgNoWrt, 4, FixWFlagsB2];

ReWriteB2:
	Xbus ← PgDirty, 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;

TrapFixesDoneB2c2:
	,	c2;
TrapFixesDoneB2c3:
	,	c3;

B2CrossToPFaultc1:
	,	c1;
	L1 ← L1.NoFixes,	c2;
	GOTO[PFault],	c3;


	{ E N D }