{File name: FixedStartMesa.mc
Description: Mesa Emulator initialization,
Author: R. Johnsson,
Last Edited:
Sturgis: 16-Sep-83 10:47:37: add a patch to zero uStickyReg for Floating point,
a Kludge added because rollBack dosn't do it. Once rollback zeros the
register, all is well and this patch can be removed.
Fiala 11-Jun-86 15:40:48: Prepare for Initial changes by inserting init for u200
and uSDAddr; remove def'n for uStickyRegx.
Fiala 23-Jul-86 15:36:19 Insert changes for alternate configurations from 12.0
product microcode; do not assume that uIOPage contains bank number in rh;
SAx000 code gets new init of PCtl.
Fiala 25-Jul-86 9:47:58 Removed uStickyReg and uSDAddr init to InitDLion.mc.
Fiala 30-Jul-86 10:29:20 Cosmetic.
Fiala 9-Sep-86 15:13:40 Move Display IOPage defn's to Dandelion.dfn.
Fiala 18-Nov-86 14:01:33 Add assembly config switch for Dicentra.
}
Reserve[0F6F]; Reserve[0F78]; Reserve[0F7F,0FFF]; {Kernel}
{Assembly Config # File
0 Mesa.db
1 RavenMesa.db
2 TridentMesa.db
3 TridentRavenMesa.db
4 MagTapeMesa.db
5 TridentMagTapeMesa.db
6 Multiport.db
7 Dicentra
}
Set[xtFC0, 1] {see description of bits in Xfer};
StartAddress[Germ];
{ Normal boot starts at Germ,
Floppy boot starts at Germ+1
Start at Go for Burdock loaded bootfile without 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, 6, SkipTo[Multiport], ];
IfGreater[Config, 3, SkipTo[MagTape], ];
IfEqual[Config, 3, SkipTo[Printer], ];
IfEqual[Config, 1, SkipTo[Printer], ];
TT ← 41, c2;
DCtl ← TT LRot0, c3;
Noop, c1;
TT ← 11, c2;
PCtl ← TT LRot0, c3;
SkipTo[DisplayOrPrinterOrMagTape];
Printer!
DCtl ← 2, c2;
PCtl ← 3, c3;
SkipTo[DisplayOrPrinterOrMagTape];
MagTape!
DCtl ← 2, c2;
TCtl ← 1, c3;
SkipTo[DisplayOrPrinterOrMagTape];
Multiport!
DCtl ← 0, c2;
PCtl ← 3, c3;
DisplayOrPrinterOrMagTape!
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;
rhTT ← cedarIOPageHigh, c1;
Noop, c2;
Noop, 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:
IfGreater[Config, 1, , SkipTo[ShugartInit]];
IfEqual[Config, 4, SkipTo[ShugartInit],];
IfEqual[Config, 6, SkipTo[ShugartInit],];
{Config = 2, 3, or 5 => Trident init}
PC ← 0+0+1, CANCELBR[$,0], c2;
uWDC ← PC, c3;
RCnt ← 0F, c1;
KCtl ← RCnt LRot12, c2;
KCmd ← U0400, c3;
SkipTo[EitherDisk];
ShugartInit! {Config = 0, 1, 4, or 6 => SAx000 init}
KCtl ← 0, PC ← 0+0+1, CANCELBR[$, 0], c2;
uWDC ← PC, c3;
EitherDisk!
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;
LastChance:
TT ← uSDAddr, c1;
T ← TT + 276'b {T ← 1376'b}, c2;
Udest ← T, YDisp, L ← 0, GOTO[EFCHaveLink], c3;