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