{File name: StartCedar1.mc
Description: Cedar emulator initialization,
Last Edited:
Trow 28-Oct-87 2:44:31 Created.
}
Set[xtFC0, 1] {see description of bits in Xfer};
GOTOABS[B1MP799], c3, at[BxMP799];
{write 799 in maintenance panel}
MP799:
TT ← uMaintPanel, {maint panel code} c1, at[B1MP799];
rhTT ← uIORgnHigh, c2;
Noop, c3;
TOS ← 1F, c1;
TOS ← TOS LRot8, c2;
TOS ← TOS or 3 {1F03 byteswapped = 799'd}, c3;
MAR ← [rhTT, TT + 0], c1;
MDR ← TOS, c2;
TT ← TT + 1, {maint panel down-notify mask} c3;
MAR ← [rhTT, TT + 0], c1;
Noop, c2;
TOS ← MD, c3;
{TOS contains notify mask: byte-mask in high byte, byte offset in low}
T ← uMesaProc, c1;
rhT ← uIORgnHigh, c2;
TT ← LShift1 (T + downNotifyBits),
LOOPHOLE[niblTiming], c3;
MAR ← [rhT, T + notifiersLockMask], c1;
STK ← TOS, T ← TOS and ~0FF, CANCELBR[$,0], c2;
TOS ← MD, L4 ← SoftwareLockRets.StartCedar, c3;
rhTT ← STK, XLDisp, c1;
{the following branch is reversal of Mesa byte order to do byte-swapping for IOP}
TT ← RShift1 (TT + rhTT), LOOPHOLE[niblTiming],
BRANCH[LowByteMask,$,2], c2;
rhT ← lock.or, SetMPIntIOP, CALL[SoftwareLock], c3;
LowByteMask:
rhT ← lock.or, SetMPIntIOP, c3;
MAR ← [rhIORgn, rIORgn + iopRequestsLock], c1;
T ← T LRot8, CANCELBR[SoftwareLockSideDoor,0], c2;
MDR ← 0, CANCELBR[$,0], c2, at[SoftwareLockRets.StartCedar,10,SoftwareLockRets];
TOS ← rhMDS, ClrMPIntIOP, c3;
LastChance:
Noop, c1;
SetIE, c2;
rhT ← xtFC0, c3;
TT ← uSDAddr, c1;
T ← TT + 276'b {T ← 1376'b}, c2;
Udest ← T, L ← 0, YDisp, GOTO[EFCHaveLink], c3;