{File name: Boot.df
Last Edited: Jim Frandeen, August 26, 1981 8:58 AM: Add definitions for Ether booting
Last Edited: Jarvis, March 20, 1981 11:33 AM
Description: Definitions for the booting microcode,
Author: Jarvis,
Created: November 12, 1980,
}
RegDef[acRrh, RH, 0];{base register for IOPage}
RegDef[rBrh, RH, 1];
RegDef[rCrh, RH, 3];
RegDef[rDrh, RH, 4];
{base register for first 64K}
RegDef[rErh, RH, 5];
{base register for second 64K}
RegDef[rFrh, RH, 6];
{not used}

RegDef[acR, R, 0];
RegDef[rB, R, 1];
RegDef[rC, R, 3];
RegDef[rD, R, 4];
RegDef[rE, R, 5];
RegDef[rF, R, 6];
{U registers}

RegDef[passTraps, U, 0];
{0=> die on faults, #0=> reflect traps to ErrorHandlerLoc}
RegDef[uBadBits, U, 1];
{disk transfer error bits}
RegDef[transferIOCB, U, 2];
{base of transfer IOCB}
RegDef[currentCylinder, U, 3];
RegDef[IOPageLow, U, 4];
{low order 16 bits of IO page address}
RegDef[nextPage, U, 5];
{next page to write}
RegDef[transferCount, U, 6];
{number of pages requested for transfer}
RegDef[filePage, U, 7];
{page number of file used in label}
RegDef[germStart, U, 8];
{first page of germ, 0=> germ not yet read or not in progress}
RegDef[seekMask, U, 9];
{firmware enable or driveSelect -- paired with acR -- }
RegDef[headMask, U, 0A];
{F800, head field mask in haltWord and findWord -- paired with acR -- }
RegDef[haltBits, U, 0B];
{420 -- paired with acR -- }
RegDef[UFindSect, U, 0C];
{holds 6 if SA4000, 0 if SA1000 = Find Sector mark bits}
RegDef[topPage, U, 0D];
{next available page in map}
RegDef[uEtherBootDone, U, 0E];{Set by EtherBoot when done}
RegDef[uEtherBootStatus, U, 0F];{1 = failed, 0 = successful}
RegDef[uEtherBootRetries, U, 10];{Max of 10 retries}
RegDef[uTimeout, U, 11];{=1 if Etherboot timeout}

{IOP task}Set[IOPOutMode, 2];
{IOP port output mode}
Set[IOPInMode, 1];
{IOP port input mode}
Set[IOPAWMode, 3];
{IOP port alwaysWU mode}
RegDef[uBlock0, U, 0], RegDef[uBlock1, U, 10], RegDef[uBlock2, U, 20], RegDef[uBlock3, U, 30];
RegDef[uBlock4, U, 40], RegDef[uBlock5, U, 50], RegDef[uBlock6, U, 60], RegDef[uBlock7, U, 70];
RegDef[uBlock8, U, 80], RegDef[uBlock9, U, 90], RegDef[uBlockA, U, 0A0], RegDef[uBlockB, U, 0B0];
RegDef[uBlockC, U, 0C0], RegDef[uBlockD, U, 0D0], RegDef[uBlockE, U, 0E0], RegDef[uBlockF, U, 0F0];
{protected area definitions
The protected area of control store holds those microinstructions that must not be disturbed while the IOP interprets the boot file residing in main storage. In particular, the IOP task, the memory refresh task, the emulator idle loop, the error trap location (location 0), and maintenance panel routines}
Set[ProtectStart, 0], Set[ProtectFence, 0FF];
Set[IdleLoc, 1], Set[Maintenance1Loc, 2], Set[Maintenance2Loc, 3], Set[Maintenance3Loc, 4];
Set[ErrorHandlerLoc, 100];
{boot time error codes}
Set[bootDeviceError, 1];
Set[bootNullGerm, 2];
Set[bootBrokenChain, 3];
{boot chain broken}
Set[bootIllegalCommand, 4];
{IOP sent illegal command}
Set[bootTrap, 5];
{trapped through control store 0}
Set[bootNoDiagnostics, 6];
Set[bootNoEmulator, 7];
Set[bootNoGerm, 8];
{miscellaneous definitions}
Set[mapPages, 40];
{number pages dedicated to map}
Set[virtualIOPage, 0FF];
{virtual page number of IO page}
Set[vacant, 60];
{map flags for a vacant page}
Set[present, 10];
{map flags for a referenced and present page}