{File: otMapBank0.mc
1-Aug-84 18:27:13
Lase Edited by
T.Tokunaga 9-Apr-85 10:15:47 add otMap1Bank0 routine
Makoto Udagawa 16-Mar-85 17:38:35 otMap routine for Bank0.
Makoto Udagawa 28-Feb-85 15:13:55 Comment out Leaf check for Extended memory.
}
{
inputs - otLow is the oop whose mapping is desired -- better not supply a SmallInteger --,
L1 is the return linkage register
output - high portion of address is returned in temp1High, low portion in temp1Low
}
{todo --- put in a check and trap for trying to otMapBank0 lambda!}
otMapBank0:
IfEqual[otMapDebug, debug,,SkipTo[endOtMapBank0Debug]];
{some debugging code to ensure that the oop is even}
Ybus ← otLow, YDisp, c1;
BRANCH[goodOop-otMapBank0, badOop-otMapBank0, 0e], c2;
badOop-otMapBank0:
GOTO[bailoutBank0], c3;
goodOop-otMapBank0:
Noop, c3;
endOtMapBank0Debug!
{the real code for otMapBank0 starts here}
{we can get by with the + 1 because a page cross is impossible --
the OT entry must be at an even address, and only incrementing an
odd address can cause a page fault}
MAR ← [otHigh, otLow + 1], c1;
CANCELBR[$,2], c2;
temp1High ← MD,{ XLDisp {check if this object is a leaf},} c3;
MAR ← [otHigh, otLow + 0], {BRANCH[$,isLeaf-otMapBank0,1],} c1;
L1Disp {this is not a leaf}, c2;
temp1Low ← MD, RET[otMapBank0-return], c3;
{Loom: needs to punt to Mesa to handle this leaf}
{ isLeaf-otMapBank0:
GOTO[bailout3Bank0], c2; }
{todo --- put in a check and trap for trying to otMapBank0 lambda!}
otMap1Bank0:
IfEqual[otMapDebug, debug,,SkipTo[endOtMap1Bank0Debug]];
{some debugging code to ensure that the oop is even}
Ybus ← otLow, YDisp, c1;
BRANCH[goodOop-otMap1Bank0, badOop-otMap1Bank0, 0e], c2;
badOop-otMap1Bank0:
GOTO[bailoutBank0], c3;
goodOop-otMap1Bank0:
Noop, c3;
endOtMap1Bank0Debug!
{the real code for otMap1Bank0 starts here}
{we can get by with the + 1 because a page cross is impossible --
the OT entry must be at an even address, and only incrementing an
odd address can cause a page fault}
MAR ← [otHigh, otLow + 1], c1;
otMap1Bank01:
CANCELBR[$,2], c2;
temp1High ← MD,{ XLDisp {check if this object is a leaf},} c3;
MAR ← [otHigh, otLow + 0], {BRANCH[$,isLeaf-otMap1Bank0,1],} c1;
L1Disp {this is not a leaf}, c2;
temp1Low ← MD, RET[otMap1Bank0-return], c3;
{Loom: needs to punt to Mesa to handle this leaf}
{ isLeaf-otMap1Bank0:
GOTO[bailout3Bank0], c2; }