{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;