{File name dbLispMapB1.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} {--- not used yet RLMapFixB2: Xbus ← Rx LRot0, XwdDisp, c3; Map ← [rhTT,TT], DISP2[RFixRFlagsB1], c1; MDR ← Rx or 80, L0Disp, GOTO[ReReadB1], c2, at[PgClean, 4, RFixRFlagsB1]; MDR ← Rx or 80, L0Disp, GOTO[ReReadB1], c2, at[PgDirty, 4, RFixRFlagsB1]; MDR ← Rx or 80, L0Disp, GOTO[ReReadB1], c2, at[PgProt, 4, RFixRFlagsB1]; L1Disp, GOTO[RWTrapB1], c2, at[PgVacant, 4, RFixRFlagsB1]; ReReadB1: Xbus ← ReadOK, XDisp, RET[RMapFixCallerB1], 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} WLMapFixB1: Xbus ← Rx LRot0, XwdDisp, c3; Map ← [rhTT, TT], WriteDISP2[FixWFlagsB1], c1; MDR ← Rx or 0C0, L0Disp, GOTO[ReWriteB1], c2, at[PgWrtOK, 4, FixWFlagsB1]; L1Disp, GOTO[RWTrapB1], c2, at[PgNoWrt, 4, FixWFlagsB1]; ReWriteB1: Xbus ← PgDirty, XDisp, RET[WMapFixCallerB1], c3; RWTrapB1: DISP4[TrapFixesB1], c3; GOTO[TrapFixesDoneB1c2], c1, at[L1.NoFixesB2, 10, TrapFixesB1]; TOS ← uTOS, c1, at[L1.RestoreTosB2, 10, TrapFixesB1]; TOSH ← uTOSH, GOTO[TrapFixesDoneB1c3], c2; { GOTO[DLFix], c1, at[L1.DLFixesB2, 10, TrapFixesB1];} { GOTO[FFTFix], c1, at[L1.FFTFixesB2, 10, TrapFixesB1];} TrapFixesDoneB1c2: , c2; TrapFixesDoneB1c3: , c3; B1CrossToPFaultc1: Bank ← 0, c1; L1 ← L1.NoFixes,CROSS[PFaultB0], c2; ufnZ3: , c3; ufnZ1: , c1; ufnZ2: TOS ← uTOS, c2; TOSH ← uTOSH, GOTO[ufnX1], c3; ufnX2: , c2; ufnX3: , c3; ufnX1: Bank ← 0, c1; S ← S + 1, CROSS[ufnB0], c2; {OpTable: Bank ← 0, c1, at[OpcodeBase]; CROSS[OpcodeBase],c2; } { E N D }