*----------------------------------------------------------- Title[GermLoad.mc...November 23, 1982 1:29 PM...Taft]; * Pilot Germ boot sequence *----------------------------------------------------------- TopLevel; DontKnowRBase; Set[XTask, IP[EMU]]; *----------------------------------------------------------- * Data structures, from Boot.mesa *----------------------------------------------------------- * Germ conventions: MC[pageGerm, 1]; * Page where germ's image starts * pRequest: POINTER TO Request = @SD[sFirstGermRequest]; MC[pRequest, SD, sFirstGermRequest]; * Request: TYPE = MACHINE DEPENDENT RECORD [ MC[Req.requestBasicVersion, 0]; * requestBasicVersion: CARDINAL _ MC[currentRequestBasicVersion, 7123]; * currentRequestBasicVersion, MC[Req.action, 1]; * action: Action, MC[Req.deviceType, 2]; * deviceType: Device.type, MC[Req.deviceOrdinal, 3]; * deviceOrdinal: CARDINAL, MC[Req.vp, 4]; * vp: SELECT OVERLAID * FROM * disk => [diskFileID: DiskFileID], * ethernet => [bfn, net, host: CARDINAL]; * Device.Type: TYPE = {...}; MC[DType.t80, 303]; * FIRST[Device.PilotDisk]+131 MC[DType.ethernetOne, 7]; * FIRST[Device.Ethernet]+2 * Action: TYPE = {inLoad, outLoad, bootPhysicalVolume, teleDebug, noOp}; MC[Act.bootPhysicalVolume, 2]; *----------------------------------------------------------- * Entry conditions: * Real memory has been mapped contiguously at the bottom of virtual * memory, and zeroed. Base registers have been set up. * I/O devices have been initialized and are quiescent. * Exit conditions: * Germ loaded into memory and Mesa emulator started executing it. *----------------------------------------------------------- GermLoad: RBase_ RBase[BTemp0]; MemBase_ IOBR; BootDataPtr_ LShift[pageGerm!, 10]C; * Where to load it BTemp2_ Desc.bi.germ, SCall[DiskBootSoft]; * What to load GermBootFailed: Breakpoint, Branch[.]; * +1: boot failed * Store into the Germ the magic values that tell it what to do. T_ HighByte[pRequest]; * Set up the Request T_ T OR (LowByte[pRequest]); BTemp0_ HighByte[currentRequestBasicVersion]; BTemp0_ (BTemp0) OR (LowByte[currentRequestBasicVersion]); T_ (Store_ T)+1, DBuf_ BTemp0; * Req.requestBasicVersion T_ (Store_ T)+1, DBuf_ Act.bootPhysicalVolume; * Req.action T_ (Store_ T)+1, DBuf_ DType.t80; * Req.deviceType Store_ T, DBuf_ 0C, * Req.deviceOrdinal Branch[MesaInitialize]; * Go start it up!