{File name: StartLisp12K.mc
don 29-Dec-83 10:17:06
last modified by don 13-Mar-84 14:58:44 added logout
last modified by don 8-Feb-84 18:29:05 for LCS
}
Reserve[0F6F]; Reserve[0F78]; Reserve[0F7F,0FFF]; {Kernel}
SetTask[0];
StartAddress[Germ];
Germ:
rhTT ← 0, CANCELBR[SetMDS,0F], c1, at[0,2,Germ];
rhTT ← 0, CANCELBR[SetMDS,0F], c1, at[1,2,Germ];
SetMDS:
TT ← 0FF, c2;
TT{0FF00} ← TT LRot8, c3;
Rx ← 40, c1;
Rx ← Rx LRot8, c2;
uPageFault ← 0{notFaulting}, c3;
Map ← [rhTT,TT], c1;
MDR ← Rx{4000} or {0B1}31, c2;
Q ← 0, c3;
L ← 41, c1;
IOPCtl ← IOPInMode, c2;
DCtl ← L LRot0, c3;
uWP ← 0, ClrIntErr, c1;
TOS ← 0, rhMDS ← 0 c2;
rhTT ← TT ← uIOPage, c3;
{set all keys up; 1403D thru 14043 ← -1}
stackP ← 0, c1;
T ← 0FF LShift1, SE ← 1, c2;
Q ← 7, c3;
KeyLoop: MAR ← [rhTT,IOPage.keyBitsm1+Q], BRANCH[$,KeyDone], c1;
MDR ← L xor ~L, CANCELBR[$,0], c2;
Q ← Q - 1, ZeroBr, GOTO[KeyLoop], c3;
KeyDone:
{KCtl ← 0,} PC ← 0+0+1, CANCELBR[$,0], c2;
uWDC ← PC, c3;
MAR ← [rhTT, IOPage.DSCB.fieldCmd+0], c1;
MDR ← L, c2;
, c3;
LastChance:
MAR ← [rhTT, IOPage.DSCB.syncCmd+0], c1;
MDR ← L, c2;
L ← 0, c3;
Rx ← LH.FMP, c1;
Rx ← Rx LRot8, c2;
Rx ← Rx or RH.FMP, c3;
MAR ← [rhTT, IOPage.MP+0], c1;
MDR ← Rx or 1, c2;
Rx ← 080, c3;
{ShowDisplay:}
BegSD: rhRx ← Rx ← uIOPage, CANCELBR[$, 0F], c1;
TT ← 88, c2;
, c3;
MAR ← [rhRx, 0EC+0], c1;
MDR ← uFF00{was 0}, c2;
TT ← TT LRot8, c3;
MAR ← [rhRx, 0ED{0EF}+0], c1;
MDR ← TT{88} or 22, c2;
PC ← 1 + PC + PC16, c3;
Q ← 71, c1;
DCtl←Q LRot0, c2;
Rx ← 080, c3;
Stall: BRANCH[Stall0, Stall1], c1;
Stall0: GOTO[StallJn], c2;
Stall1: Rx ← Rx - 1, ZeroBr, GOTO[StallJn], c2;
StallJn: Q ← Q - 1, ZeroBr, BRANCH[Stall, $], c3;
SkipBurd: Noop, CANCELBR[SkipBurdock, 0F], c1;
Burdock: IOPCtl ← 1, CANCELBR[$, 0F], c1;
Noop, GOTO[Burd3], c2;
SkipBurdock: Noop, c2;
Burd3: GOTO[LispFloatInit], c3;
LispFloatInitDone:
Bank ← LispStartBank, c1, at[LispStart];
Noop, c2;
CROSS[LispStart], c3;
Off: MAR ← [rhRx, IOPage.ProcessorCommand+0], c1, at[LOGOUT];
MDR{4} ← 4, c2;
Noop, GOTO[Off], c3;
{END}