{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 }