{File name: FixedStartMesa.mc
Description: Mesa Emulator initialization,
Author: R. Johnsson,
Last Edited: Sturgis: 16-Sep-83 10:44:46
Last Edited: BJackson: 18-Nov-85 11:08:34
}
Reserve[0F6F]; Reserve[0F78]; Reserve[0F7F,0FFF]; {Kernel}
Set[xtFC0, 1] {see description of bits in Xfer};
Set[IOPage.DCSB.mask, 0EB];
Set[IOPage.DCSB.flags, 0EC];
Set[IOPage.DCSB.border, 0ED];
Set[IOPage.keyBitsm1, 39];
StartAddress[Germ];
Germ: TOS ← 3E, rhMDS ← 3E, CANCELBR[SetMDS,0F], c1, at[0,2,Germ];
Go: TOS ← 2, rhMDS ← 2, CANCELBR[SetMDS,0F], c1, at[1,2,Germ];
SetMDS: UvMDS ← TOS, c2;
rhT ← xtFC0, c3;
uPCValid ← 0, ClrIntErr, c1;
{ IfEqual[Config, 1, , SkipTo[Display]]; }
DCtl ← 2, c2;
PCtl ← 3, c3;
{ Display!
IfEqual[Config, 1, SkipTo[DisplayOrPrinter], ];
TT ← 41, c2;
DCtl ← TT LRot0, c3;
DisplayOrPrinter! }
MoreInit:
IOPCtl ← IOPInMode, c1;
UvG ← TOS ← 0, c2;
UBrkByte ← 0, c3;
{set all keys up; 1403A thru 14040 ← -1}
rhTT ← TT ← uIOPage, c1;
uXTS ← stackP ← 0, c2;
Q ← 7, c3;
KeyLoop: MAR ← [rhTT,IOPage.keyBitsm1+Q], BRANCH[$,KeyDone], c1;
uTickCount ← 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.DCSB.mask+0]{display interrupt mask}, c1;
MDR ← 0, uWP ← 0, c2;
T ← 88, c3;
MAR ← [rhTT,IOPage.DCSB.flags+0]{display flags}, c1;
MDR ← u8000, c2;
T ← T LRot8, c3;
MAR ← [rhTT,IOPage.DCSB.border+0]{display border}, c1;
MDR ← T or 22{8822}, c2;
uPCCross ← 0, c3;
{following reg def is in cedarFptAll, without the x}
RegDef[uStickyRegx ,U, 24];
LastChance:
uStickyRegx ← 0, {floating point} c1;
{noop} c2;
{noop} c3;
T ← uSDAddr, c1;
T ← T + 276'b{T←1376'b}, c2;
Udest ← T, YDisp, L ← 0, GOTO[EFCHaveLink], c3;
{16-Sep-83 10:47:37: Sturgis: add a patch to zero uStickyReg for Floating point, this is a Kludge added because rollBack dosn't do it. Once rollback zeros the register, all is well and this patch can be removed}