*Only one of these release switches may be 1; the others must be 0. Set[Rubicon,0]; Set[Trinity,0]; Set[Klamath,1]; :IF[Rubicon]; ************************************ TITLE[InitialDefs.Cedar.microcode]; :ELSEIF[Trinity]; ******************************** TITLE[InitialDefs.10.0.microcode]; :ELSEIF[Klamath]; ******************************** TITLE[InitialDefs.11.0.microcode]; :ELSE; ******************************************* ER[BUG..SYSTEM.RELEASE.NOT.SPECIFIED.IN.INITIALDEFS]; :ENDIF; ****************************************** %Ed Fiala 12 March 1984: Renumber OldWordOffset for conflict reported by Blackman. Ed Fiala 6 February 1984: Change some defs for Klamath. Ed Fiala 16 January 1984: Create this file from declarations in GlobalDefs.mc, Initial.mc, and other files. % *Page and location assignments *For Initial.mc Set[InitialPage,10]; Loca[InitBase,InitialPage,100]; Set[Qloc,Add[InitBase,30]]; Set[QretLoc,Add[InitBase,32]]; Set[BootTaskLoc,Add[InitBase,34]]; Set[Task17Start,Add[InitBase,20]]; Set[DeviceDispatch,Add[InitBase,40]]; *Place Task 16 code on a page that will not be smashed by Pilot1 *because Initial's timer task must still be running to handle Midas *breakpoints after Pilot1 is loaded and before Pilot1's timer task starts. Set[InitialPage1,11]; Loca[Task16Start,InitialPage1,0]; *two locations Loca[MidasStopLoc,InitialPage1,3]; *two locations Loca[MC2ErrRet0,InitialPage1,17]; Loca[MC2ErrRet1,InitialPage1,16]; Loca[imBST,InitialPage1,20]; Loca[imFST,InitialPage1,40]; *For SA4000Load.mc Set[SalLoaderPage,12]; *271b mi (could be bummed more) *For E3Load.mc Set[E3Page,4]; *171b mi Loca[E3OutStartLoc,E3Page,130]; Loca[E3InStartLoc,E3Page,110]; Set[EtherBootLoc,1400]; *The starting address for a 3 mb etherboot *in the Boot microcode blown in the EPROMs; *This is known to PromDefs. SA4000Load jumps *to EtherBootLoc if it fails. *For E10Load.mc Set[E10Page,5]; Loca[E10StartLoc,E10Page,101]; *Tasks Set[E3OutTask,2]; *3 mb Ethernet output task Set[E3InTask,3]; *3 mb Ethernet input task Set[E10Task,2]; *10 mb Ethernet task Set[RdcBootTask,4]; *RdcTask (in GlobalDefs.mc) is also used. *The following are for the ESS Initial microcode Set[vdLoaderPage,15]; *302b mi Set[vdLoaderPage2,16]; *163b mi ***NOTE: All the 10mb Ethernet parameters need to be defined. Set[E3BFNOffset,3000]; *3 mb boot servers add E3BFNOffset to BFI *to get BFN. Set[E3AUCodeBFI,Sub[3411,E3BFNOffset]]; *AltoD0.eb BFI Set[E3AltAUCodeBFI,Sub[3431,E3BFNOffset]]; *Alternate AltoD0.eb BFI Set[E10AUCodeBFN,3411]; *AltoD0.eb BFI Set[E10AltAUCodeBFN,3431]; *Alternate AltoD0.eb BFI *GermAddress is the location into which loading of the germ from 3 mb or *10 mb Ethernet or the disk takes place. For Trinity and later system *releases, the location into which the germ is loaded is also its running *location, but for Rubicon, the germ is moved to high virtual memory *by exchanging map entries prior to running. Set[GermAddress,400]; *MDS-relative address where germ starts *Bank 0 is required by the code which computes *page numbers for Rubicon XMaps. MC[CSBAddress,100000]; *Memory address of CSB for SA4000Load MC[IOCBOffset,100]; *Offset of IOCB from the CSB MC[RootPageAddress,100400]; *Memory address of Physical Volume Root Page MC[MicrocodeAddress,101000]; *This address must be large enough that *the germ won't overwrite it, small enough that *the largest emulator won't wrap around and *smash the germ. *The following software constants vary with Rubicon, Trinity, and Klamath *system releases. Changing them requires the microcode to be reassembled. :IF[Rubicon]; ******************************************** MC[GermMDSPage,37000]; MC[GermStartOffset,2]; Set[RealGermAddress,1000]; *MDS-relative address where germ starts Set[RealGermAddressHi,76]; *64k bank number for germ Set[sFirstFree,142]; *Index of sFirstFree (from SDDefs.mesa) Set[GermSwitchesOffset,Add[1100,sFirstFree]]; *Offset of Germ *switches within its MDS: *LOOPHOLE [@SDDefs.SD[SDDDefs.sFirstFree]] Set[GermRequestOffset,1360]; *Offset of Germ Request within its MDS ***I don't know how big the Germ Request area is; 6 is large enough to zero ***the Device ordinal at 2, the 3 mb net number at 4, and the 3 mb host ***number at 5. The RequestSize is used to control the number of words ***zeroed. Set[RequestSize,6]; *Within the request: Set[ReqActionOffset,0]; *Offset of Action MC[bootPhysicalVolume,2]; *For disk boot MC[inLoad,0]; *For 3 mb or 10 mb etherboot Set[ReqDevTypeOffset,1]; *Offset of Device Type MC[PilotDiskDeviceType,3]; *=SA4000DeviceType from Device.mesa MC[E3DevType,5]; MC[E10DevType,6]; ***Not meaningful *Set[ReqDevOrdinal,2]; *Offset of device ordinal (left 0) Set[E3ReqBFN,3]; *Offset of boot file number *Set[E3ReqNetNum,4]; *Offset of 3mb network number (left 0) *Set[E3ReqHostNum,5]; *Offset of 3mb host number (left 0) Set[E3PUCodeBFI,Sub[3425,E3BFNOffset]]; *CedarD0.eb Set[E3GermBFI,Sub[45002,E3BFNOffset]]; *Cedar5D0.eg Set[E3OthelloBFN,45003]; *BasicCedarD0.pb *These are the same for now except CedarOthello replaces BasicCedar. Set[E3AMPUCodeBFI,Sub[3425,E3BFNOffset]]; *Exp. CedarD0.eb Set[E3AMGermBFI,Sub[45002,E3BFNOffset]]; *Exp. Cedar5D0.eg Set[E3AMOthelloBFN,5001]; *CedarOthelloD0.pb :ELSEIF[Trinity]; **************************************** Set[GermRequestOffset,1320]; *Offset of Germ Request within its MDS Set[RequestSize,60]; *Size of Germ Request area *Within the request: Set[ReqVersionOffset,0]; *Offset of Version Set[RequestVersion,3456]; Set[ReqActionOffset,1]; *Offset of Action MC[bootPhysicalVolume,2]; MC[inLoad,0]; Set[ReqDevTypeOffset,2]; *Offset of Device Type MC[PilotDiskDeviceType,100]; ***EAT said SA4000 was 129 MC[E3DevType,7]; MC[E10DevType,6]; Set[ReqExtVersionOffset,15]; *requestExtionsionVersion Set[ReqExtVersion,7123]; *For 10.0 germ Set[ReqSwitches,16]; *Offset of Switches (0) *For 3 mb Ethernet: Set[E3ReqBFN,4]; *Offset of boot file number Set[E3ReqNetNum,5]; *Offset of 3mb network number (0) Set[E3ReqHostNum,6]; *Offset of 3mb host number (0) *For 10 mb ethernet: Set[E10ReqBFN,4]; *Offset of boot file number (3 words) Set[E10ReqNetNum,7]; *Offset of net number (2 words) Set[E10ReqHostNum,11]; *Offset of host number (3 words) Set[E10ReqSocketNum,14]; *Offset of socket number Set[E3PUCodeBFI,Sub[3421,E3BFNOffset]]; *Trinity PilotD0.eb Set[E3GermBFI,Sub[4010,E3BFNOffset]]; *Trinity D0.eg Set[E3OthelloBFN,4011]; *Trinity OthelloD0.pb ***Note that for a UIB terminal, BFI = AMPUCodeBFI+2 which won't work. Set[E3AMPUCodeBFI,Sub[43001,E3BFNOffset]]; *Exp. Trinity PilotD0.eb Set[E3AMGermBFI,Sub[43002,E3BFNOffset]]; *Exp. Trinity D0.eg Set[E3AMOthelloBFN,43003]; *Exp. Trinity OthelloD0.pb %The high-order and middle-order parts of all 10 mb BFN's for the Dolphin are the same for all files of interest here. No Alto emulator BFN has been assigned for 10 mb booting (Alto emulator doesn't include any 10 mb Ethernet driver.). % Set[E10BFNHi,0]; Set[E10BFNMid,125002]; *The low-order part of the BFN for Initial itself is 0. Set[E10PUCodeBFN,1]; *PilotD0.eb Set[E10GermBFN,2]; *D0.germ Set[E10OthelloBFN,3]; *OthelloD0.boot *Set[E10AUCodeBFN,??]; *The low-order part of the BFN for experimental Initial is 10b. Set[E10AMPUCodeBFN,11]; *PilotD0Alt.eb Set[E10AMGermBFN,12]; *D0Alt.germ Set[E10AMOthelloBFN,13]; *OthelloD0Alt.boot *Set[E10AltAUCodeBFN,??]; :ELSEIF[Klamath]; **************************************** Set[GermRequestOffset,1640]; *Offset of Germ Request within its MDS Set[RequestSize,60]; *Size of Germ Request area *Within the request: Set[ReqVersionOffset,0]; *Offset of Version Set[RequestVersion,3456]; Set[ReqActionOffset,1]; *Offset of Action MC[bootPhysicalVolume,2]; MC[inLoad,0]; Set[ReqDevTypeOffset,2]; *Offset of Device Type MC[PilotDiskDeviceType,100]; ***EAT said SA4000 was 129 MC[E3DevType,7]; MC[E10DevType,6]; Set[ReqExtVersionOffset,15]; *requestExtionsionVersion Set[ReqExtVersion,7123]; *For 11.0 germ Set[ReqSwitches,16]; *Offset of Switches (0) *For 3 mb Ethernet: Set[E3ReqBFN,4]; *Offset of boot file number Set[E3ReqNetNum,5]; *Offset of 3mb network number (0) Set[E3ReqHostNum,6]; *Offset of 3mb host number (0) *For 10 mb ethernet: Set[E10ReqBFN,4]; *Offset of boot file number (3 words) Set[E10ReqNetNum,7]; *Offset of net number (2 words) Set[E10ReqHostNum,11]; *Offset of host number (3 words) Set[E10ReqSocketNum,14]; *Offset of socket number Set[E3PUCodeBFI,Sub[3421,E3BFNOffset]]; *Klamath PilotD0.eb Set[E3GermBFI,Sub[4010,E3BFNOffset]]; *Klamath D0.eg Set[E3OthelloBFN,4011]; *Klamath OthelloD0.pb ***Note that for a UIB terminal, BFI = AMPUCodeBFI+2 which won't work. Set[E3AMPUCodeBFI,Sub[43001,E3BFNOffset]]; *Exp. Klamath PilotD0.eb Set[E3AMGermBFI,Sub[43002,E3BFNOffset]]; *Exp. Klamath D0.eg Set[E3AMOthelloBFN,43003]; *Exp. Klamath OthelloD0.pb %The high-order and middle-order parts of all 10 mb BFN's for the Dolphin are the same for all files of interest here. No Alto emulator BFN has been assigned for 10 mb booting (Alto emulator doesn't include any 10 mb Ethernet driver.). % Set[E10BFNHi,0]; Set[E10BFNMid,125002]; *The low-order part of the BFN for Initial itself is 0. Set[E10PUCodeBFN,1]; *PilotD0.eb Set[E10GermBFN,2]; *D0.germ Set[E10OthelloBFN,3]; *OthelloD0.boot *Set[E10AUCodeBFN,??]; *The low-order part of the BFN for experimental Initial is 10b. Set[E10AMPUCodeBFN,11]; *PilotD0Alt.eb Set[E10AMGermBFN,12]; *D0Alt.germ Set[E10AMOthelloBFN,13]; *OthelloD0Alt.boot *Set[E10AltAUCodeBFN,??]; :ENDIF; ************************************************** SetTask[0]; *Registers used in more than one file or which must survive major calls *to other files: RV[BootType,20]; *Must survive call to MemInit.mc *These registers must survive calls to the boot file reading subroutines. RM[BFIMicrocode,IP[BootType]]; RV[BFIGerm,21]; RV[BFNBootFile,22]; RV[PageCount,37]; *Count of 'good' pages; ***Location known to *old versions of Alto emulator. PageCount is *initialized by MemInit.mc and used by Rubicon *Initial.mc and SA4000Load.mc RV[IReturn,50]; RV2[IniBaseLo,IniBasehi,72]; *Also RTemp, RTemp1, xfTemp, xfTemp1, LP, and LPhi *The following are needed only for Rubicon when doing XMap's to relocate *the germ. RV4[IniMap0,IniMap1,IniMap2,IniMap3,14]; RV[IniExchPage,4]; RV[IniFrom,7]; RV[IniTo,13]; RV[IniPageCount,2]; *Initial.mc registers RV[RCnt,51]; *MemInit.mc registers *All RM registers except BootType appear to be available to MemInit.mc, *except that RTemp and RTemp1 (RM 52-53) are smashed by PNIP. RV[StorageFaults,21]; *Number of quadwords with correctable *failures detected by the diagnostic in pages *which had no uncorrectable failures. RV2[XMAdLo,XMAdHi,22]; *Base register RV4[XMBuf0,XMBuf1,XMBuf2,XMBuf3,24]; *Buffer for XMap RV4[RBuf0,RBuf1,RBuf2,RBuf3,24]; *Buffer for PFetch4 RV4[WBuf0,WBuf1,WBuf2,WBuf3,30]; *Buffer for PStore4 RV[RLink0,34]; *Subroutine return link RV[MapAddr,35]; *Current map location RV[RealPage,36]; *Current real storage page RV[Transient,40]; *Holds soft error count during storage test. RV[ZPage,41]; *Virtual page being tested during sweep RV[ZWord,42]; *Word within page being tested during sweep RV[RLink1,43]; *MC2 fault return link RV[RLink2,44]; *Another subroutine return link RV[SoftQThreshold,45]; RV[SoftBadPages,46]; RV[HardBadPages,47]; *E3Load and E10Load registers; E10Task=2, E3OutTask=2, and E3InTask=3. *Since these registers are referenced by both task 0 and task 2 or 3, *they are restricted to be in the range 20 to 77b. RV[Count,3]; RV[BootFileNumber,43]; RV[BytesLeft,62]; RV[Packet,66]; RV[Checksum,67]; RV[Word,70]; *IReturn and IniBaseLo/Hi shared with Initial.mc RV[WordOffset,74]; SetTask[E3OutTask]; RV[OutTemp,41]; RV[OutMask,42]; SetTask[E3InTask]; RV[InTemp,61]; RV[Junk,63]; RV[Source,64]; RV[SourceTemp,65]; RV[Host,77]; SetTask[E10Task]; RV[E10HostID1,41]; RV[E10Source0,42]; RV[E10Source1,44]; RV[E10Source2,45]; RV2[E10HostID2,E10HostID3,46]; RV4[E10Temp0,E10Temp1,E10Temp2,E10Temp3,54]; RV[OldWordOffset,60];(635)\f2