{File name:  Dandelion.dfn
 Description: Definitions for all Dandelion Microcode,
	Copyright (C) 1981, 1982, 1983, 1986 by Xerox Corporation.  All rights reserved. 

 Created: 3 Jan 80,
 Last Edited:
Jim Frandeen, September 29, 1981  2:04 PM: Rearrange registers for TextBlt bug.
Jim Frandeen, July 2, 1981  9:48 AM: Rearrange registers for TextBlt.
Olmstead, March 23, 1981  5:11 PM:  Remove multiple definition of uCurrentFlags introduced by last edit.
Olmstead, March 23, 1981  4:05 PM:  Changed spelling of all occurrences of "uregMumble" to "uMumble"
Olmstead, March 18, 1981  5:41 PM:  Re-did BandBLT's U registers
Olmstead, March 18, 1981  5:40 PM:  Reserved U regs 0AB-0AF for Disk task
Jim Frandeen, March 11, 1981  4:13 PM: Major reorganization.
Jim Frandeen, February 26, 1981  2:49 PM: Changes for BitBlt to use more stack registers.
Jim Frandeen, February 20, 1981  3:16 PM: Changes for Block
Ed Fiala & Bill Jackson, 22-Jul-86 15:45:00 Absorbed register definitions for
	Initial/booting, Tridents, magtapes, SCC io, LSEP, etc. from the 12.2 product in
	preparation for their use with Cedar's ancient Mesa emulator.  Eliminate U0100
	for Trident; add UMCtl for both SAx000 and Trident tasks.
Fiala 23-Jul-86 16:45:15 Moved defn's for cedarIOPage and cedarIOPageHigh here from
	Boot.dfn since cedarIOPageHigh is now used by both emulator and initial; added
	1 to values for PrinterOverrunOffsetM1 and PrinterRunOffset because uIOPage
	is now 1 less.
Fiala 25-Jul-86 18:30:18 Moved uStickyReg def to here from CedarDefs.dfn so that it can be
	initialized in InitDLion.  Commented out all the BandBLT defs, which we don't expect
	to ever use and the TextBlt defs.
Fiala 26-Aug-86 11:55:33 Added defn's for RavenRunOffset, RavenOverrunOffset,
	and WakeupMaskOffset (0EB) for Cedar 12.1 Raven microcode replacing earlier
	PrinterRunOffset and PrinterOverrunOffsetM1 defn's.
Fiala  5-Sep-86 12:28:47 Move Ethernet CSB and IOCB defs here from EtherDLion.mc; buried
	more BandBlt defs; commented out one remaining TextBlt register def; defined
	uE3FF and uXmitInterrupt from 12.2 Dandelion.dfn.
Fiala  9-Sep-86 15:16:34 Removed commented out Raven register defn's no longer needed; absorb Display IOPage defn's from StartMesa.mc and Boot.dfn.
}

{R AND RH REGISTER DEFINITIONS
Since there are no task specific registers in the machine, task identifiers are not bound to the register numbers with which they are shown.

Q is reserved for the Emulator Task.
Also, the stackP, STK, ib, and pc16 registers are reserved for the Emulator task.}

{REGISTERS 0 - 6: EMULATOR}
RegDef[TOS,		R,	0];
RegDef[Hold,		R,	0];	{BBLoops}
RegDef[Rbb0,		R,	0];	{BitBlt and TextBlt}
RegDef[VS,		R,	0];	{BitBlt}
RegDef[Mask2,		R,	0];	{BitBlt}
RegDef[rhMDS,		RH,	0];	{top element of stack (rhMDS is VA of 64K aligned MDS)}
RegDef[rhVS,		RH,	0];	{BitBlt uses fact that rhVS = rhMDS}
RegDef[acR,		R,	0];	{Protected, Phase0, CoreInitial, SAxx00Initial, EtherInitial, TridentInitial}
RegDef[acRrh,		RH,	0];	{base register for IOPage for Phase0, CoreInitial, Saxx00Initial, EtherInitial, TridentInitial}

RegDef[T,		R,	1];
RegDef[Save,		R,	1];	{BitBlt}
RegDef[VD,		R,	1];	{BitBlt}
RegDef[Rbb1,		R,	1];	{BitBlt and TextBlt}
RegDef[Mask1,		R,	1];	{BitBlt}
RegDef[rhT,		RH,	1];	{temporary}
RegDef[rhVD,		RH,	1];	{BitBlt}
RegDef[rB,		R,	1];	{Protected, CoreInitial, SAxx00Initial, TridentInitial}
RegDef[rBrh,		RH,	1];	{Protected, CoreInitial, SAxx00Initial, TridentInitial}
RegDef[rP,		R,	1];	{EtherBooting}

RegDef[TT,		R,	2];
RegDef[Src,		R,	2];	{BitBlt}
RegDef[Rbb2,		R,	2];	{BitBlt and TextBlt Rbb2 must equal TT to share MaskTbl}
RegDef[Temp,		R,	2];	{BitBlt}
RegDef[TempDelta,	R,	2];	{BitBlt}
RegDef[rhTT,		RH,	2];	{temporary}
RegDef[rhType,		RH,	2];	{BitBlt}
RegDef[rS,		R,	2];	{EtherBooting}
RegDef[Srh,		RH,	2];	{EtherBooting}

RegDef[L,		R,	3];
RegDef[Dst,		R,	3];	{BitBlt}
RegDef[TempBpl,		R,	3];	{BitBlt}
RegDef[Rbb3,		R,	3];	{BitBlt and TextBlt}
RegDef[rhL,		RH,	3];	{local frame (RA, extended by rhL=real rhMDS)}
RegDef[rhWho,		RH,	3];	{BitBlt}
RegDef[rC,		R,	3];	{Phase0, CoreInitial, SAxx00Initial, EtherInitial, TridentInitial}
RegDef[rCrh,		RH,	3];	{base register for first 64K for Phase0, CoreInitial, SAxx00Initial, EtherInitial, TridentInitial}

RegDef[G,		R,	4];
RegDef[SrcA,		R,	4];	{BitBlt}
RegDef[Rbb4,		R,	4];	{BitBlt and TextBlt}
RegDef[rhG,		RH,	4];	{global frame (RA, extended by rhG=real rhMDS)}
RegDef[rhSrcA,		RH,	4];	{BitBlt}
RegDef[rD,		R,	4];	{Booting - Phase0, CoreInitial, SAxx00Initial, TridentInitial}
RegDef[rL,		R,	4];	{Booting - EtherInitial}
RegDef[rDrh,		RH,	4];	{base register for second 64K}
RegDef[rLrh,		RH,	4];	{Booting - EtherInitial}

RegDef[PC,		R,	5];
RegDef[DstA,		R,	5];	{BitBlt}
RegDef[rhPC,		RH,	5];	{word address of next inst (RA, extended by rhPC=real UvChigh)}
RegDef[rhDstA,		RH,	5];	{BitBlt}
RegDef[rE,		R,	5];	{Booting - Phase0, CoreInitial, SAxx00Initial, TridentInitial}
RegDef[rErh,		RH,	5];	{Booting - Phase0, CoreInitial, SAxx00Initial, TridentInitial}
RegDef[rMM,		R,	5];	{EtherInitial}
RegDef[MMrh,		RH,	5];	{EtherInitial}

RegDef[Rx,		R,	6];
RegDef[Lcount,		R,	6];	{BitBlt}
RegDef[TempB,		R,	6];	{BitBlt}
RegDef[RtbChar,		R,	6];	{TextBlt Character pointed to by TextLo,Hi[Index]}
RegDef[rhRx,		RH,	6];	{temporary}
RegDef[rhRet,		RH,	6];	{BitBlt}
RegDef[rG,		R,	6];	{Booting clock high - Protected, Etherbooting, Phase0}


{REGISTERS 7 - 8: DISK(x000&Trident)}

RegDef[RAdr,		R,	7];	{Disk(x000&Trident)}
RegDef[RHRAdr,		RH,	7];	{Disk x000}
RegDef[RHAdr,		RH,	7];	{DiskTrident}
RegDef[rY,		R,	7];	{EtherBooting}
RegDef[Yrh,		RH,	7];	{EtherBooting}

RegDef[RCnt,		R,	8];	{Disk(x000&Trident), StartMesa, CoreInitial}
RegDef[RHRCnt,		RH,	8];	{Diskx000}
RegDef[RHCnt,		RH,	8];	{DiskTrident}
RegDef[rCount,		R,	8];	{EtherBooting}


{REGISTERS 9 - B: DISPLAY/Raven/MagTape}

RegDef[Line,		R,	9];	{Display}
RegDef[dZ,		R,	9];	{Display}
RegDef[rD0,		R,	9];	{Display}
RegDef[rhLine,		RH,	9];	{Display}
RegDef[rhdZ,		RH,	9];	{Display}
RegDef[displayBase0,	RH,	9];	{Display}
RegDef[rTMa,		R,	9];	{MagTape}
RegDef[rhTMa,		RH,	9];	{MagTape}
RegDef[RReg,		R,	9];	{SCC IO}
RegDef[Rh,		RH,	9];	{SCC IO}
RegDef[rM,		R,	9];	{Etherbooting}
RegDef[Mrh,		RH,	9];	{Etherbooting}

RegDef[dX,		R,	0A];	{Display}
RegDef[rD1,		R,	0A];	{Display}
RegDef[rhdX,		RH,	0A];	{Display}
RegDef[displayBase1,	RH,	0A];	{Display}
RegDef[rTRfsh,		R,	0A];	{MagTape Refresh}
RegDef[rhTRfsh,		RH,	0A];	{MagTape Refresh}
RegDef[rJ,		R,	0A];	{Booting clock low - Protected, Phase0, Etherbooting}

RegDef[dY,		R,	0B];	{Display}
RegDef[rD2,		R,	0B];	{Display}
RegDef[rhdY,		RH,	0B];	{Display}
RegDef[displayBase2,	RH,	0B];	{Display}
RegDef[rTWc,		R,	0B];	{MagTape}
RegDef[rhTWc,		RH,	0B];	{MagTape}
RegDef[TReg,		R,	0B];	{SCC IO}
RegDef[TRh,		RH,	0B];	{SCC IO}
RegDef[rEtherBootRetries, R,	0B];	{Number of times we have attempted to boot}
RegDef[RPageCount,	R,	0B];	{TridentBootDLion}


{REGISTERS C - D: ETHER}

RegDef[E,		R,	0C];	{Ether}
RegDef[rhE,		RH,	0C];	{Ether}
RegDef[rFrh,		RH,	0C];	{Booting - SAxx00Initial, TridentInitial}
RegDef[rhEE,		RH,	0D];	{Ether}

RegDef[rF,		R,	0C];	{Booting - SAxx00Initial, TridentInitial}
RegDef[rWord,		R,	0C];	{EtherBooting}
RegDef[EE,		R,	0D];	{Ether}
RegDef[rN,		R,	0D];	{Protected}

{REGISTER E: IOP}

RegDef[rIAd,		R,	0E];	{IOP Port}
RegDef[rIOP,		R,	0E];	{IOP Port}
RegDef[RHrIAd,		RH,	0E];	{IOP Port}
RegDef[rhIOP,		RH,	0E];	{IOP Port}

{
    REGISTER F: IOP/KERNEL
}

RegDef[rK,		R,	0F];
RegDef[rTmp,		R,	0F];	{IOP Port}
RegDef[RHrK,		RH,	0F];
RegDef[RPgCnt,		R,	0F];	{TridentBoot}


{The allocation of Link registers:

#    task
0    Emulator
1    Emulator
2    Emulator
3    Emulator
4    Disk
5    Display/LSEP
6    Ethernet
7    IOP
}

{U REGISTER DEFINITIONS
Registers indicated by ** contain Emulator state and must not be modified.}

{U REGISTER BLOCK 0 -- EMULATOR STACK}

RegDef[uBlock0,		U,	0]:
RegDef[uStack1,		U,	1];
RegDef[uStack2,		U,	2];
RegDef[uStack3,		U,	3];
RegDef[uStack4,		U,	4];
RegDef[uStack5,		U,	5];
RegDef[uStack6,		U,	6];
RegDef[uStack7,		U,	7];
RegDef[uStack8,		U,	8];
RegDef[uStack9,		U,	9];
RegDef[uStackA,		U,	0A];
RegDef[uStackB,		U,	0B];
RegDef[uStackC,		U,	0C];
RegDef[uStackD,		U,	0D];
RegDef[uStackE,		U,	0E];
RegDef[uStackF,		U,	0F];

RegDef[UBitBltArg,	U,	2];	{BitBlt}
RegDef[UHeight,		U,	3];	{BitBlt}
RegDef[UDstVALo,	U,	4];	{BitBlt}
RegDef[UDstBit,		U,	5];	{BitBlt}
RegDef[USrcVALo,	U,	6];	{BitBlt}
RegDef[USrcBit,		U,	7];	{BitBlt}
RegDef[UGray,		U,	8];	{BitBlt -- shares with USrcBpl}
RegDef[USrcBpl,		U,	8];	{BitBlt -- shares with UGray}
RegDef[UDstBpl,		U,	9];	{BitBlt}
RegDef[UrhVS,		U,	0A];	{BitBlt}
RegDef[UrhVD,		U,	0B];	{BitBlt}
RegDef[UFlags,		U,	0C];	{BitBlt}
RegDef[UWidth,		U,	0D];	{BitBlt}

RegDef[passTraps,	U,	0];	{Booting}
RegDef[uBadBits,	U,	1];	{SAxx00Initial - disk transfer error bits}
RegDef[tiUnumHeads,	U,	1];	{TridentInitial}
RegDef[stepCount,	U,	1];	{Booting}
RegDef[transferIOCB,	U,	2];	{SAxx00Initial - base of transfer IOCB}
RegDef[uDevOrd,		U,	2];	{TridentInitial}
RegDef[currentCylinder,	U,	3];	{SAxx00Initial}
RegDef[nextPage,	U,	5];	{SAxx00Initial, TridentInitial - next page to write}
RegDef[transferCount,	U,	6];	{SAxx00Initial, TridentInitial - number of pages requested for transfer}
RegDef[filePage,	U,	7];	{SAxx00Initial, TridentInitial - page number of file used in label}
RegDef[germStart,	U,	8];	{SAxx00Initial, TridentInitial - first page of germ, 0=> germ not yet read or not in progress}
RegDef[seekMask,	U,	9];	{SAxx00Initial - firmware enable or driveSelect -- paired with acR -- }
RegDef[headMask,	U,	0A];	{SAxx00Initial - F800, head field mask in haltWord and findWord -- paired with acR -- }
RegDef[haltBits,	U,	0B];	{SAxx00Initial - 420 -- paired with acR -- }
RegDef[UFindSect,	U,	0C];	{SAxx00Initial - holds 6 if SA4000, 0 if SA1000 = Find Sector mark bits}
RegDef[topPage,		U,	0D];	{CoreInitial, SAxx00Initial, TridentInitial - next available page in map}
RegDef[uQuantumSA1000MaxHeadNum, U, 0E]; {SAxx00Initial}


{U REGISTER BLOCK 1 -- EMULATOR}

RegDef[uHeaderBlock,	UY,	1];
RegDef[uBlock1,		U,	10];
RegDef[uWP,		U,	10];	{** wakeups pending}
RegDef[u3FFF,		U,	11];	{** constant, rA = T}
RegDef[uPCCross,	U,	12];	{**}
RegDef[uPPMask,		U,	13];	{** rA = T, constant = 7000 (and BandBLT depends on it)}
RegDef[uWW,		U,	14];
RegDef[uXTS,		U,	15];	{** Xfer Trap Status}
RegDef[uPMask,		U,	16];	{** rA = T; constant = 0FFC}
RegDef[UXferType,	U,	17];	{type of Xfer in progress}
RegDef[uWDC,		U,	18];	{** wakeup disable counter}
RegDef[UGsave,		U,	19];
RegDef[Udest,		U,	1A];	{rA = T; destination link of Xfer in progress}
RegDef[uPsbLink,	U,	1B];	{rA = T, fZ = ←RH}
RegDef[UvLPhigh,	U,	1B];
RegDef[Ufsi,		U,	1C];	{rA = T, fZ = ←ibNA; frame size index}
RegDef[uTemp,		U,	1D];	{rA = T, fZ = ←ib}
RegDef[UrhMDSsave,	U,	1E];
RegDef[uBLTTemp,	U,	1F];

{RegDef[UtbWidth,	U,	14];	{TextBlt temporary}
RegDef[UtbRgFlags,	U,	17];	{TextBlt Used to save RgFlags[Char], rA = T}
RegDef[UtbCount,	U,	1A];	{TextBlt Count parameter, rA = T fZ = ErrnIBnStkp}
RegDef[UtbArgPtr,	U,	1D];	{TextBlt ArgPtr parameter from Stack, rA = T,}}

RegDef[CPBootDevice,	U,	14];	{Booting - Phase0}


{U REGISTER BLOCK 2 -- EMULATOR}

RegDef[uBlock2,		U,	20]:
RegDef[UvL,		U,	20];	{** rA = TT, local frame address  (VA)}
RegDef[UvG,		U,	21];	{** rA = TT, global frame address  (VA)}
RegDef[UvChigh,		U,	22];	{** rA = TT, high address bits of code segment (VA)}
RegDef[UvMDS,		U,	23];	{** rA = TT; MDS pointer (VA)}

{uStickyReg should be part of process state, though PSB storage to save its value
was not assigned until product release 11.0; presently this register is global to
all processes.  Bit [0] is non-zero if fpt microcode should trap on inexact result,
and [15] is non-zero if there has been a non-trapped inexact result.}
RegDef[uStickyReg,	U,	24];	{** rA = TT}
RegDef[uFrame,		U,	25];	{rA = TT}
RegDef[uSDAddr,		U,	26];	{** constant = 1100'b}
RegDef[uTTemp,		U,	27];	{rA = TT}
RegDef[uSourceHighSave,	U,	27];	{rA = TT = 2. }
RegDef[UvPCpage,	U,	28];	{** rA = TT; (PC page address)}
RegDef[UTrapParm,	U,	29];	{**}
RegDef[uTicks,		U,	2A];
RegDef[UvC,		U,	2B];	{** fZ = ←RH; low 16-bit address of code segment (VA, extended by UvChigh)}
RegDef[uAVAddr,		U,	2C];	{** constant = 200}
RegDef[u200,		U,	2C];	{** constant}
RegDef[UBrkByte,	U,	2D];	{** fZ = 0D; loaded by LST, used by Xfer}
RegDef[u1FFF,		U,	2E];	{** constant}
RegDef[u7FF,		U,	2F];	{** constant}

{RegDef[UtbIndex,	U,	25];	{TextBlt Index parameter from Stack, rA = TT}
RegDef[UtbMicaPos,	U,	2A];	{TextBlt parameter, rA = TT, fZ = ErrnIBnStkp}}

RegDef[uEtherBootDone,	U,	20];	{Booting - Set by EtherBoot when done}
RegDef[uEtherBootStatus, U,	21];	{Booting - Nonzero = failed, 0 = successful}
RegDef[uTimeout,	U,	22];	{Booting - =1 if Etherboot timeout}
RegDef[uBootFileType,	U,	23];	{EtherBooting}
RegDef[uBackoffMask,	U,	24];	{EtherBooting}
RegDef[uOldMask,	U,	25];	{EtherBooting}
RegDef[uPacketType,	U,	28];	{EtherBooting}
RegDef[uFileNumber2,	U,	29];	{Etherbooting}
RegDef[uGotFirstCode,	U,	2A];	{EtherInitial}
RegDef[uNextAddress,	U,	2B];	{EtherInitial}


{U REGISTER BLOCK 3 -- EMULATOR}

RegDef[uBlock3,		U,	30];
RegDef[uStackPSave,	U,	31];	{used by Block rA = L = 3}  
RegDef[uPTC,		U,	32];	{** Process Tick Count}
RegDef[uStkDepth,	U,	33]	{temp in Process, Xfer}
RegDef[Usource,		U,	36]	{rA = L, source link of Xfer in progress}
RegDef[uFaultParm1,	U,	37];	{fault parameter}
RegDef[uFaultParm0,	U,	38];	{fault parameter}
RegDef[uPSB,		U,	39];	{** Current PSB}
RegDef[ULsave,		U,	3A];	{rA = L = 3. fZ = ErrnIBnStkp = A}
RegDef[UrL,		U,	3B];	{rA = L, fZ = ←RH}
RegDef[UrhLsave,	U,	3B];	{bank 3, 'B' = ← rh }	
RegDef[UrLHi,		U,	3C];
RegDef[uCrSaveStkp,	U,	3E];	{**}
RegDef[uTickCount,	U,	3F];	{** process tick interval}

RegDef[UQSave,		U,	31];	{BitBlt temp}
RegDef[UWidthM1,	U,	34];	{BitBlt temp}	
RegDef[Umask1,		U,	35];	{BitBlt temp}
RegDef[Umask2,		U,	37];	{BitBlt temp}
RegDef[UmaskL,		U,	38];	{BitBlt temp}

{RegDef[UtbFlags,	U,	3D];	{** TextBlt constant = 6400}
}


{U REGISTER BLOCK 4 -- EMULATOR}

RegDef[uBlock4,		U,	40];
RegDef[uCrSaveTOS,	U,	40];	{**}
RegDef[uCrSavePC,	U,	41];	{**}
RegDef[UvQ1Hi,		U,	42];
RegDef[UvQ1,		U,	43];
RegDef[UvQ2Hi,		U,	44];
RegDef[UvQ2,		U,	45];	{rA = G}
RegDef[UvQTempHi,	U,	46];
RegDef[UvQTemp,		U,	47];
RegDef[uIntLevel,	U,	48];	{rA = G; used in interrupts}
RegDef[UrG,		U,	4B];	{rA = G, fZ = ←RH}
RegDef[UrhGsave,	U,	4B];	{rA = G, fZ = ←RH}
RegDef[UrGHi,		U,	4C];

RegDef[UXsave,		U,	42];	{BitBlt temp}
RegDef[UVSsave,		U,	43];	{BitBlt temp}
RegDef[USrcVALoSav,	U,	44];	{BitBlt temp}

{RegDef[UtbNewMicaPos,	U,	45];	{TextBlt temp}
RegDef[UtbBitPos,	U,	4A];	{TextBlt BitPos parameter, rA = G, fZ = ErrnIBnStkp}
RegDef[UtbMicaWidth,	U,	4D];	{TextBlt Used to save MicaWidth[Char]}}


{U REGISTER BLOCK 5 -- EMULATOR}

RegDef[uBlock5,		U,	50];
RegDef[uPCValid,	U,	51];	{** rA = PC; flag for faults}
RegDef[UrPC,		U,	5B];	{rA = PC, fZ = ←RH}
RegDef[UrhPCsave,	U,	5B];	{rA = PC, fZ = ←RH}
RegDef[UrPCHi,		U,	5C];
RegDef[UreturnPC,	U,	5D];	{rA = PC, fZ = ←ib}

RegDef[UDstVALoSav,	U,	52];	{BitBlt temp}
RegDef[UWidthW,		U,	5D];	{BitBlt temp}

{RegDef[UtbFontData,	UY,	5];	{TextBlt tbFetchFontDataLoop}
{53 - 58 are destroyed by tbFetchFontDataLoop}
RegDef[UtbFontBodyLo,	U,	53];	{TextBlt FontBodyLo parameter, must be 53}
RegDef[UtbFontBodyHi,	U,	54];	{TextBlt FontBodyHi parameter, must be 54}
RegDef[UtbFlagsLo,	U,	55];	{TextBlt FlagsLo parameter, must be 55}
RegDef[UtbFlagsHi,	U,	56];	{TextBlt FlagsHi parameter, must be 56}
RegDef[UtbHeight,	U,	57];	{TextBlt Height parameter, must be 57}}


{U REGISTER BLOCK 6 -- EMULATOR}

RegDef[uBlock6,		U,	60];
RegDef[u8000,		U,	61];	{** rA = Rx; constant = 8000, must be 61 for tbFetchArg}
RegDef[uPMask2,		U,	62];	{** rA = Rx; constant = 0FFC, must be 60 for tbFetchArg}
RegDef[uSourceLowSave,	U,	66];	{used by Block rA = Rx = 6}
RegDef[uSourceOffset,	U,	6A];	{used by Block rA = Rx = 6}

RegDef[ULcntsav,	U,	60];	{BitBlt temp rA = Lcount}

{{All but 61 and 62 are destroyed by TextBlt tbFetchArg}
RegDef[tbParmBlock,	UY,	6];	{TextBlt tbFetchArgLoop}
RegDef[UtbFunction,	U,	63];	{Function parameter from TextBltArg, must be 63}
RegDef[UtbLast,		U,	64];	{Last parameter from TextBltArg, must be 64}
RegDef[UtbTextLo,	U,	65];	{TextLo parameter from TextBltArg, must be 65}
RegDef[UtbTextHi,	U,	66];	{TextHi parameter from TextBltArg, must be 66}
RegDef[UtbFontLo,	U,	67];	{FontLo parameter from TextBltArg, must be 67}
RegDef[UtbFontHi,	U,	68];	{FontHi parameter from TextBltArg, must be 68}
RegDef[UtbDstLo,	U,	69];	{DestLo parameter from TextBltArg, must be 69}
RegDef[UtbDstHi,	U,	6A];	{DestHi parameter from TextBltArg, must be 6A}
RegDef[UtbDstBpl,	U,	6B];	{DestBpl parameter from TextBltArg, must be 6B}
RegDef[UtbMargin,	U,	6C];	{Margin parameter from TextBltArg, must be 6C}
RegDef[UtbSpace,	U,	6D];	{TextBlt Space parameter from TextBltArg, must be 6D}
RegDef[UtbCoordLo,	U,	6E];	{CoordLo parameter from TextBltArg, must be 6E}}


{U REGISTER BLOCK 7 -- DISK}

RegDef[uBlock7,		U,	70];
RegDef[URAdrBlk,	UY,	7];	
RegDef[UFreezeCmd,	U,	70];	{Disk Transfer Run of Pages parameters}
RegDef[USaveRAdr,	U,	71];	{Disk}
RegDef[UWaitCmd,	U,	72];	{Disk Transfer subroutine parameters}
RegDef[UWdCount,	U,	73];	{Disk Transfer subroutine parameters}
RegDef[UXferCmd,	U,	74];	{Disk Transfer subroutine parameters}
RegDef[USyncAdrMk,	U,	75];	{Disk used to optimize the code for speed}
RegDef[UMaxSectTst,	U,	76];	{Disk used to optimize the code for speed}
RegDef[UHeadSectorAddr,	U,	77];	{Disk used to optimize the code for speed}
RegDef[ULabelCmd,	U,	78];	{Disk Transfer Run of Pages parameters}
RegDef[ULabelLen,	U,	79];	{Disk Transfer Run of Pages parameters}
RegDef[ULabelAddr,	U,	7A];	{Disk Transfer Run of Pages parameters}
RegDef[ULabelQuitMsk,	U,	7B];	{Disk Transfer Run of Pages parameters}
RegDef[UDataCmd,	U,	7C];	{Disk Transfer Run of Pages parameters}
RegDef[UDataLen,	U,	7D];	{Disk Transfer Run of Pages parameters}
RegDef[UDataPgNum,	U,	7E];	{Disk Transfer Run of Pages parameters}
RegDef[UDataQuitMsk,	U,	7F];	{Disk Transfer Run of Pages parameters}

RegDef[ULblWd5,		U,	70];	{Trident}
RegDef[USIP,		U,	71];	{Trident - Set in InitDLion to 0}	
RegDef[UCStatMask,	U,	72];	{Trident - Set in InitDLion to 1E07}
RegDef[USvAdrLo,	U,	73];	{Trident}
RegDef[USvAdrHi,	U,	74];	{Trident}
RegDef[UDtPtrLo,	U,	75];	{Trident}
RegDef[UDtPtrHi,	U,	76];	{Trident}
RegDef[UScratch,	U,	77];	{Trident}
RegDef[UPgCnt,		U,	78];	{Trident}
RegDef[UCStat,		U,	79];	{Trident}
RegDef[UDStat,		U,	7A];	{Trident}
RegDef[UCurCyl,		U,	7B];	{Trident}
RegDef[UCurHdSec,	U,	7C];	{Trident}
RegDef[URetry,		U,	7D];	{Trident}
RegDef[UIOCBLink,	U,	7E];	{Trident}
RegDef[UDskAdr,		U,	7F];	{Trident}

RegDef[bU0400,		U,	70];	{TridentBootDLion}
RegDef[bUMask,		U,	71];	{TridentBootDLion}
RegDef[bU0C00,		U,	72];	{TridentBootDLion}
RegDef[bU0C04,		U,	73];	{TridentBootDLion} 
RegDef[bU0C0A,		U,	74];	{TridentBootDLion}
RegDef[bU2C04,		U,	75];	{TridentBootDLion}
RegDef[bUF000,		U,	76];	{TridentBootDLion }
RegDef[bUDtPtrLo,	U,	77];	{TridentBootDLion - Initialized with 100}
RegDef[bUBitSignAdr,	U,	78];	{TridentBootDLion, TridentInitial}

RegDef[dbUDataAddr,	U,	70];	{DiskBootDLion - Address of Data buffer in 1st 64k of real memory}
RegDef[dbUFindIndexMkCmd, U,	71];	{DiskBootDLion - command used to find the Index Mark on the disk}
RegDef[dbUFindSectMkCmd, U,	72];	{DiskBootDLion - Command used to find the sector mark on the disk}
RegDef[dbUFreezeCmd,	U,	73];	{DiskBootDLion - Command used to stop the controller after each field}
RegDef[dbUHeaderAddr,	U,	74];	{DiskBootDLion - address of Header Template in bottom 64k or real memory}
RegDef[dbUHeaderQuitMsk, U,	75];	{DiskBootDLion - mask used to detect error flags after Header Read}
RegDef[dbUHeadIncr,	U,	76];	{DiskBootDLion - constant used to increment head number in command words}
RegDef[dbULabelAddr,	U,	77];	{DiskBootDLion - address of Label template in bottom 64 k or real memory}
RegDef[dbULabelDataQuitMsk, U,	78];	{DiskBootDLion - mask used to detect error flags after Label or Data Read}
RegDef[dbUReadCmd,	U,	79];	{DiskBootDLion - command word causing read operation on one field of the sector}
RegDef[dbUSectorCount,	U,	7A];	{DiskBootDLion - number of sectors to be read}
RegDef[dbUSectorsLeftInTrack, U,	7B];	{DiskBootDLion - number of sectors left in the track being read}
RegDef[dbUSectorsPerTrack, U,	7C];	{DiskBootDLion - number of Sectors per track on the disk connected to the controller}
RegDef[dbUSeekCompleteWaitCmd, U, 7D];	{DiskBootDLion - command word causing the hardware to generate a service request
					while Seek complete is true (heads have settled and drive is selected)}
RegDef[dbUVerifyCmd,	U,	7E];	{DiskBootDLion - command used to verify Headers on SA1000}
RegDef[dbUHeadSect,	U,	7F];	{DiskBootDLion - Head and Sector numbers for first sector of file}

RegDef[uGSourceBlock,	UY,	7];
RegDef[uSourceBlock,	UY,	7];	{EtherBooting}
RegDef[uSource2,	U,	70];	{EtherBooting - this cannot change from 70}
RegDef[uSource0,	U,	7E];	{EtherBooting - this cannot change from 7E}
RegDef[uSource1,	U,	7F];	{EtherBooting - this cannot change from 7F}


{U REGISTER BLOCK 8 -- DISK}

RegDef[uBlock8,		U,	80];
RegDef[URCntBlk,	UY,	8];	
RegDef[UFindSectMkCmd,	U,	80];	{Disk Transfer Run of Pages parameters}
RegDef[USectorCount,	U,	81];	{Disk Transfer Run of Pages parameters}
RegDef[UFailCount,	U,	82];	{Disk Transfer Run of Pages parameters}
RegDef[UHeaderCmd,	U,	83];	{Disk Transfer Run of Pages parameters}
RegDef[UHeaderLen,	U,	84];	{Disk Transfer Run of Pages parameters}
RegDef[UHeaderAddr,	U,	85];	{Disk Transfer Run of Pages parameters}
RegDef[UHeaderQuitMsk,	U,	86];	{Disk Transfer Run of Pages parameters}
RegDef[UHeaderLoopMsk,	U,	87];	{Disk Transfer Run of Pages parameters}
RegDef[UHeaderNotOkMsk,	U,	88];	{Disk used to optimize the code for speed}
RegDef[UStatus,		U,	89];	
RegDef[UField,		U,	8A];	{Disk FinishIOCB parameters}
RegDef[UInterruptMsk,	U,	8B];	{Disk FinishIOCB parameters}
RegDef[ULabPgLo,	U,	8C];	{Disk used to optimize the code for speed}
RegDef[ULabPgAddr,	U,	8D];	{Disk used to optimize the code for speed}
RegDef[USectorCntAddr,	U,	8E];	
RegDef[UHeadSector,	U,	8F];	{Disk used to optimize the code for speed}

RegDef[UDMask,		U,	80];	{Trident}
RegDef[UIntMask,	U,	81];	{Trident}
RegDef[UBitSignAdr,	U,	82];	{Trident}
RegDef[UCylAdr,		U,	83];	{Trident}
RegDef[UHdOffset,	U,	84];	{Trident}
RegDef[UHdrOp,		U,	85];	{Trident}
RegDef[UHCmd,		U,	86];	{Trident}
RegDef[UHCntl,		U,	87];	{Trident}
RegDef[UHMask,		U,	88];	{Trident}
RegDef[ULblOp,		U,	89];	{Trident}
RegDef[ULCmd,		U,	8A];	{Trident}
RegDef[ULCntl,		U,	8B];	{Trident}
RegDef[ULMask,		U,	8C];	{Trident}
RegDef[UDtOp,		U,	8D];	{Trident}
RegDef[UDCmd,		U,	8E];	{Trident}
RegDef[UDCntl,		U,	8F];	{Trident}

RegDef[dbUField,	U,	80];	{DiskBootDLion - indicates which field being processed (80=>Header, 100=>Label, 180=>Data)}
RegDef[dbUFieldCmd,	U,	81];	{DiskBootDLion - command for field being transferred (ReadCmd OR FreezeCmd (which has Head 			#))}
RegDef[dbUStatus,	U,	82];	{DiskBootDLion - final status of read of run of pages, 0=>all OK.  Else field num in bits 7,8, error in 			9..15}
RegDef[dbUWdCount,	U,	83];	{DiskBootDLion - length of field being read (Header=>2, Label=>0C, Data=>100'X)}


{U REGISTER BLOCK 9 -- DISPLAY/BandBLT}

RegDef[uBlock9,		U,	90];
RegDef[uDCBLoc,		U,	90];	{Display}
RegDef[uInitCurBufAddr,	U,	91];	{Display}
RegDef[uCopyCount,	U,	94];	{Display}
RegDef[uCursorFifo0,	U,	95];	{Display}
RegDef[uCursorFifo1,	U,	96];	{Display}

RegDef[uyParamBase,	UY,	9];	{Raven}
RegDef[uBandStatus,	U,	90];	{Raven rA = rD0 -- pointer to band status word}
RegDef[uLineCount,	U,	91];	{Raven band line counter}
RegDef[uLineAddress,	U,	92];	{Raven pointer to base of current scan line}
RegDef[uThis,		U,	94];	{Raven pointer band record}
RegDef[uInterruptMask,	U,	9A];	{Raven (contiguous CSB) paired with rD0 -- interrupt mask word}
RegDef[uBandSize,	U,	9B];	{Raven (contiguous CSB) number of scan lines in a band}
RegDef[uActiveScan,	U,	9C];	{Raven (contiguous CSB) number of words with image data on a line}
RegDef[uLineSize,	U,	9D];	{Raven (contiguous CSB) number of words in line buffer}
RegDef[uTabCnt,		U,	9E];	{Raven (contiguous CSB) number of wakeups to skip after line sync}
RegDef[uScans,		U,	9F];	{Raven (contiguous CSB) number of blank scan lines after page sync --must be last}


{U REGISTER BLOCK A -- DISPLAY/BandBLT}
RegDef[uBlockA,		U,	0A0];
RegDef[uNoPic,		U,	0A0];	{Display rA = dX}
RegDef[uDWakeup,	U,	0A1];	{Display rA = dX}
RegDef[uInitCurMapAddr,	U,	0A2];	{Display rA = dX}
RegDef[uCursorDiff,	U,	0A3];	{Display rA = dX}
RegDef[uCursorMask,	U,	0A4];	{Display rA = dX}
RegDef[uCursorFifo2,	U,	0A5];	{Display rA = dX}
RegDef[uClockLow,	U,	0A6];	{Display rA = dX}

RegDef[DiskReserved0A7,	U,	0A7];	{Reserved for Disk task}
RegDef[UNxtIOCBLnk,	U,	0A8];	{Disk FinishIOCB parameters}
RegDef[UStatusMsk,	U,	0AA];	{Disk FinishIOCB parameters}
RegDef[DiskReserved0AB,	U,	0AB];	{Reserved for Disk task}
RegDef[DiskReserved0AC,	U,	0AC];	{Reserved for Disk task}
RegDef[DiskReserved0AD,	U,	0AD];	{Reserved for Disk task}
RegDef[DiskReserved0AE,	U,	0AE];	{Reserved for Disk task}
RegDef[DiskReserved0AF,	U,	0AF];	{Reserved for Disk task}

RegDef[UF000,		U,	0A7];	{Trident - Sequence constant}
RegDef[U4000,		U,	0A8];	{Trident}
RegDef[U0C00,		U,	0A9];	{Trident}
RegDef[UF001,		U,	0AA];	{Trident}
RegDef[U0400,		U,	0AB];	{Trident}
RegDef[UMCtl,		U,	0AC];	{Disk, Trident, InitDLion MCtl constant for disk task}
{RegDef[U0100,		U,	0AC];	{Trident} no longer needed}
RegDef[U0C04,		U,	0AD];	{Trident}
RegDef[U2C04,		U,	0AE];	{Trident}
RegDef[U2C05,		U,	0AF];	{Trident}


{U REGISTER BLOCK B -- DISPLAY/LSEP/Refresh/BandBLT}

RegDef[uBlockB,		U,	0B0];
RegDef[uExitLength	,U,	0B0];	{Display rA = dY}
RegDef[u3FF	,U,	0B1];	{Display rA = dY constant}
RegDef[uCurBufAddr	,U,	0B2];	{Display rA = dY }
RegDef[uCurVisAddr	,U,	0B3];	{Display rA = dY }
RegDef[uStartPic	,U,	0B4];	{Display rA = dY }
RegDef[uDoCursor	,U,	0B5];	{Display, BandBLT?}
RegDef[uCursorStop	,U,	0B6];	{Display rA = dY }
RegDef[uClockBits	,U,	0B7];	{Display rA = dY }
RegDef[uInitPicLength	,U,	0B8];	{Display rA = dY }
RegDef[uClockHigh	,U,	0B9];	{Display }
RegDef[uPicLength	,U,	0BA];	{Display rA = dY }
RegDef[uCurMapAddr	,U,	0BB];	{Display rA = dY, fZ = ←RH }

RegDef[uRefreshTemp	,U,	0B2];	{Raven Refresh task}
RegDef[uRefreshLine	,U,	0B3];	{Raven Refresh task line count}
RegDef[uPWakeup		,U,	0B4];	{Raven Refresh task}

{***NEW DEFS COMMENTED OUT FOR NOW
RegDef[DisplayIOCBblock, UY,	9];	{Display IOCB parameters}
RegDef[uClockHigh,	U,	90];	{Display  rA = dZ, Refresh tasks}
RegDef[uPatchOffset,	U,	91];	{Display}
RegDef[uCopyCount,	U,	92];	{Display rA = dZ}
RegDef[uScrollWakeupMask, U,	93];	{Display rA = dZ}
RegDef[uPatchFlags,	U,	94];	{Display rA = dZ}
RegDef[uPatchCount,	U,	95];	{Display rA = dZ}
RegDef[uFifoA,		U,	96];	{Display rA = dZ}
RegDef[uFifoB,		U,	97];	{Display rA = dZ}
RegDef[uPatchSize,	U,	98];	{Display rA = dZ}
RegDef[uPatchLine,	U,	99];	{Display rA = dZ}
RegDef[uCurMapAddr,	U,	9A];	{Display rA = dZ}
RegDef[uOddField,	U,	9B];	{Display rA = dZ}
RegDef[uCurBufAddr,	U,	9C];	{Display rA = dZ}
RegDef[uPicLength,	U,	9D];	{Display rA = dZ}
RegDef[uInitCurBufAddr,	U,	9E];	{Display}
RegDef[u3F0,		U,	9F];	{Display rA = dZ}

RegDef[uPatchPtr,	U,	0A0];	{Display}
RegDef[uInitCurMapAddr,	U,	0A2];	{Display}
RegDef[u3FF,		U,	0A3];	{Display}
RegDef[uInitBorder,	U,	0A4];	{Display}
RegDef[uInitPicLength,	U,	0A5];	{Display }
RegDef[uCursorShifted,	U,	0A6];	{Display }
RegDef[uRRefreshLine,	U,	0A6];	{Display }
RegDef[DisplayParmBlock, UY,	0B];	{Display CSB parameters}
RegDef[uBorder,		U,	0B0];	{Display CSB parameter 8}
RegDef[uClockLow,	U,	0B1];	{Display rA = dY, Refresh tasks}
RegDef[uNormalFifo,	U,	0B2];	{Display constant=FC00 rA = dY}
RegDef[uClockBits,	U,	0B3];	{Display rA = dY, Refresh tasks}
RegDef[uLastPatchLine,	U,	0B4];	{Display rA = dY}
RegDef[uCursorMask,	U,	0B6];	{Display rA = dY}
RegDef[uCurVisAddr,	U,	0B7];	{Display rA = dY}
RegDef[uDisplayJunk,	U,	0B8];	{Display stores here}
RegDef[uCurrentIOCBLow,	U,	0B9];	{Display CSB parameter 1}
RegDef[uCurrentIOCBHi,	U,	0BA];	{Display CSB parameter 2}
RegDef[uFieldCmd,	U,	0BB];	{Display CSB parameter 3}
RegDef[uWakeupMask,	U,	0BC];	{Display CSB parameter 4}
RegDef[uSyncCmd,	U,	0BD];	{Display CSB parameter 5}
RegDef[uCursorX,	U,	0BE];	{Display CSB parameter 6}
RegDef[uCursorY,	U,	0BF];	{Display CSB parameter 7}

RegDef[uTBlock,		UY,	9];	{MagTape IOCB parameters}
RegDef[uTNxtIOCB,	U,	91];	{MagTape}
RegDef[uTCmd,		U,	92];	{MagTape}
RegDef[uTCmdNP,		U,	93];	{MagTape}
RegDef[uTCmdP,		U,	94];	{MagTape}
RegDef[uTCmdWE,		U,	95];	{MagTape}
RegDef[uTCmdDaNF,	U,	96];	{MagTape}
RegDef[uTCmdWc,		U,	97];	{MagTape}
RegDef[uTVirtAddrLo,	U,	98];	{MagTape}
RegDef[uTVirtAddrHi,	U,	99];	{MagTape}
RegDef[uTSMsk,		U,	9A];	{MagTape}
RegDef[uTSCmp,		U,	9B];	{MagTape}
RegDef[uTStat0,		U,	9C];	{MagTape}
RegDef[uTStat1,		U,	9D];	{MagTape}
RegDef[uTLastMa,	U,	9E];	{MagTape}
RegDef[uTIntBitHld,	U,	9F];	{MagTape}

RegDef[uTHld,		U,	0A0];   {MagTape}
RegDef[uTWakeup,	U,	0A4];   {MagTape Refresh}

RegDef[uTHldData,	U,	0B0];	{MagTape}
RegDef[uTRefreshTemp,	U,	0B2];	{MagTape Refresh}
RegDef[uTIntBit,	U,	0B4];	{MagTape}
RegDef[uThisIOCBAdr,	U,	0B5];	{MagTape rA=rTWc}
RegDef[uThisIOCBAdrHi,	U,	0B6];	{MagTape}
RegDef[uTRefreshLine,	U,	0B7];	{MagTape Refresh}
RegDef[uTMErRst,	U,	0B9];	{MagTape}
RegDef[uTWc,		U,	0BB];	{MagTape}

RegDef[uRxAddr0,	U,	91];	{SCC IO: current write Address channel 0}
RegDef[uMTemp2,		U,	92];	{SCC IO}
RegDef[uSendChar0,	U,	93];	{SCC IO}
RegDef[uFirstAddr0,	U,	94];	{SCC IO: first address RX buffer channel 0}
RegDef[uLastAddr0,	U,	95];	{SCC IO: first address TX buffer channel 0}
RegDef[uRefreshLine,	U,	96];	{Refresh task}
RegDef[uTxByteCnt0,	U,	96];	{SCC IO: Transmit Byte count channel 0}
RegDef[uTxAddr0,	U,	97];	{SCC IO: Transmit buffer Address channel 0}
RegDef[uRxAddr1,	U,	98];	{SCC IO: current write Address channel 1}
RegDef[uSendChar1,	U,	99];	{SCC IO}
RegDef[uFirstAddr1,	U,	9B];	{SCC IO: first address RX buffer channel 1}
RegDef[uLastAddr1,	U,	9C];	{SCC IO: first address TX buffer channel 1}
RegDef[uTxByteCnt1,	U,	9D];	{SCC IO: Transmit Byte count channel 1}
RegDef[uTxAddr1,	U,	9E];	{SCC IO: Transmit buffer Address channel 1}
RegDef[uNakedMask,	U,	9F];	{SCC IO: Naked MNotify Mask}

RegDef[Channel0State,	U,	0A0];	{SCC IO}
RegDef[uLsepInterruptMask, U,	0A1];	{LSEP rA = dX}
RegDef[Channel1State,	U,	0A1];	{SCC IO}
RegDef[Channel2State,	U,	0A2];	{SCC IO}
RegDef[Channel3State,	U,	0A3];	{SCC IO}
RegDef[uRWakeup,	U,	0A4];	{SCC IO}
RegDef[uRRefreshTemp,	U,	0A5];	{SCC IO}

RegDef[uSendChar2,	U,	0B0];	{SCC IO}
RegDef[uRxAddr2,	U,	0B2];	{SCC IO: current write Address channel 2}
RegDef[uFirstAddr2,	U,	0B4];	{SCC IO: first address RX buffer channel 2}
RegDef[uLastAddr2,	U,	0B5];	{SCC IO: first address TX buffer channel 2}
RegDef[uTxByteCnt2,	U,	0B6];	{SCC IO: Transmit Byte count channel 2}
RegDef[uTxAddr2,	U,	0B7];	{SCC IO: Transmit buffer Address channel 2}
RegDef[uRxAddr3,	U,	0B8];	{SCC IO: current write Address channel 3}
RegDef[uMTemp,		U,	0B9];	{SCC IO}
RegDef[uSendChar3,	U,	0BA];	{SCC IO}
RegDef[uFirstAddr3,	U,	0BB];	{SCC IO: first address RX buffer channel 3}
RegDef[uLastAddr3,	U,	0BC];	{SCC IO: first address TX buffer channel 3}
RegDef[uTxByteCnt3,	U,	0BD];	{SCC IO: Transmit Byte count channel 3}
RegDef[uTxAddr3,	U,	0BE];	{SCC IO: Transmit buffer Address channel 3}
RegDef[uIntSaveReg,	U,	0BF];	{SCC IO: Interrupt vector Saved}
***END OF COMMENTED OUT DEFS}


{U REGISTER BLOCK C -- ETHER/LSEP}

RegDef[uBlockC,		U,	0C0];
RegDef[uEPreamble,	U,	0C2];	{Ether constant = 0AAAA}
RegDef[uELastPreamble,	U,	0C3];	{Ether constant = 0AADA}
RegDef[uESize,		U,	0C4];	{Ether}
RegDef[uEIOCB,		U,	0C5];	{Ether}
RegDef[uEBufferHi,	U,	0C6];	{Ether rA = E}
RegDef[uEBuffer,	U,	0C7];	{Ether rA = E, fZ = EStrobe}
RegDef[uE3FF,		U,	0C8];	{Ether constant 3FF rA = E}
RegDef[uEDest0,		U,	0C9];	{Ether rA = E}
RegDef[uEDest1,		U,	0CA];	{Ether}
RegDef[uEDest2,		U,	0CB];	{Ether}


{U REGISTER BLOCK D -- ETHER/LSEP}

RegDef[uBlockD,		U,	0D0];
RegDef[uETemp2,		U,	0D0];	{Ether rA = EE, fZ = ←EIData}
RegDef[uETemp,		U,	0D1];	{Ether}
RegDef[uEStatus,	U,	0D2];	{Ether}
RegDef[uEHost0,		U,	0D4];	{Ether rA = EE}
RegDef[uEHost1,		U,	0D5];	{Ether rA = EE}
RegDef[uEHost2,		U,	0D6];	{Ether rA = EE}
RegDef[uXmitInterrupt,	U,	0D7];	{Ether fZ = EStrobe = 7}
RegDef[uEOldMask,	U,	0D8];	{Ether rA = EE}

RegDef[uLsepLineCount,	U,	0D3];	{LSEP}
RegDef[uLsepInterrupMask, U,	0D9];	{LSEP}
RegDef[uEndBandScan,	U,	0DB];	{LSEP}
RegDef[uBandBufAddrLow,	U,	0DC];	{LSEP}
RegDef[uLsepTemporary,	U,	0DD];	{LSEP}


{U REGISTER BLOCK E -- ETHER/KERNEL/EMULATOR/IOP}

RegDef[uBlockE,		U,	0E0];
RegDef[uBufMax,		U,	0E0];	{IOP Port -- constrained by WHiByte+2}
{***changed 23 July 86 to not contain the 01 bank number in the rh***}
RegDef[uIOPage	,U,	0E4];	{Ether contains 4001; allows rhR ← R ← uIOPage; MAR ← [rhR, R+xx] **Do not modify}
RegDef[ uBootStart	,U,	0EA];	{starting memory address of boot file, IOP looks for high byte # 0}
RegDef[uPFlags,		U,	0EB];	{Emulator -- fZ = ←RH; flags for process}
RegDef[uDiagnostic,	U,	0EC];	{IOP #0=> diagnostic boot, =0> emulator and germ boot}
RegDef[bootDevice,	U,	0ED];	{IOP 0=> wait, 1=> SA4000, 2=> SA1000, 3=> ether, 4=> floppy}
RegDef[uBootBlock,	U,	0EE];	{IOP Port -- base of loaded U register block}
RegDef[UKSaveDisp,	U,	0EF];


{***NEW DEFS COMMENTED OUT FOR NOW
RegDef[uBufMaxLow,	U,	0E0];	{IOP Port -- constrained by WHiByte+2}
RegDef[uIOPVirtLow,	U,	0E1];	{IOP}
RegDef[uIOPVirtHigh,	U,	0E2];	{IOP}
RegDef[uBufMaxHigh,	U,	0E6];	{IOP}
RegDef[uBootStart,	U,	0EA];	{starting memory address of boot file, IOP looks for high byte # 0}

RegDef[uStartActive,	U,	0E3];	{LSEP}
RegDef[uDisableLSEP,	U,	0E5];	{LSEP}

RegDef[uCFrameAddr0,	U,	0E5];	{SCC IO: uCode address of start of current frame channel 0}
RegDef[uCFrameAddr1,	U,	0E7];	{SCC IO: uCode address of start of current frame channel 2}
RegDef[uCFrameAddr2,	U,	0E8];	{SCC IO: uCode address of start of current frame channel 1}
RegDef[uCFrameAddr3,	U,	0E9];	{SCC IO: uCode address of start of current frame channel 3}
***END OF COMMENTED OUT DEFS}

{U REGISTER BLOCK F -- KERNEL/EMULATOR/IOP}
RegDef[uBlockF,		U,	0F0];

RegDef[UPCsave,		U,	0F0];	{Emulator}
RegDef[UrefillType,	U,	0F1];	{BitBlt}
RegDef[uKSaveR,		U,	0F4];
RegDef[uIOPStatusSave,	U,	0F5];
RegDef[uKSaveQ,		U,	0F6];
RegDef[uKernAC,		U,	0F7];
RegDef[uData,		U,	0F8];	{IOP Port -- constrained by WLo+1}
RegDef[uIOPIDataSave,	U,	0F9];	{rA = rK, fZ = ←IOPStatus}
RegDef[uKTRefCnt,	U,	0F9];	{uIOPIDataSave = uKTRefCnt}
RegDef[uIOPCtlSave,	U,	0FA];
RegDef[u1F,		U,	0FB];	{01F'x}
RegDef[uKAddr,		U,	0FC];
RegDef[uKCount,		U,	0FD];
RegDef[UKernMD,		U,	0FE];
RegDef[UBreakID,	U,	0FF];	{UBreakID[0-3] = rK}
RegDef[UKTemp,		U,	0FF];	{UBreakID = UKTemp}

{***NEW DEFS COMMENTED OUT FOR NOW
RegDef[uRegsKern,	U,	0FC];
***END OF COMMENTED OUT DEFS}



{This defn added 7/24/86 for new DiskDLionA & TridentDLion modules}
Set[DiskCSBOffsetIOCB, 1]; {DiskDLionA, Trident}



{I/O PAGE:
 Author: Roy Ogus
 Created: May 28, 1980  10:18 AM,
 Last Edited: Roy Ogus, May 28, 1980  10:19 AM
 Last Edited: Dan Davies, June 18, 1980  3:58 PM

The I/O Page is the first page above the map, with address range 14000-140FF.
Please notify Roy Ogus before changing or adding any I/O Page assignment, since
the IOP is sensitive to many of the assignments.

	Address	Device	Format
	14000	Rigid disk	cylinder(0): CARDINAL
	14001	Rigid disk	state.next(0):Environment.Base RELATIVE POINTER TO
			ChannelCommand
	14002	Rigid disk	state.tail(1):Environment.Base RELATIVE POINTER TO
			IOCB
	14003	Rigid Disk	state.transferMask(2): WORD --channel interrupt flags
	14004	Rigid Disk	state.needRecalibrate (3:0..15): BOOLEAN
	14005-1400F	(unused)	------------

	14010-1401D	Raven Data	RavenDataRecord
	1401E-1402F	(unused)	------------

	14030-33	Raven Control (IOP)	SerialLineRecord
	14034-37	Raven Status (IOP)	SerialLineRecord

	14038	Mouse X coordinate	CARDINAL [0..1008]
	14039	Mouse Y coordinate	CARDINAL [0..792]

	1403A-40	Keyboard	KeyBits

	14041	Maintenance Panel CSB	RECORD [full: BOOLEAN, number: CARDINAL[0..9999]]

	14042	Mouse Change CSB	RECORD [full: BOOLEAN, xCoord: CARDINAL[0..1008]]
	14043	Mouse Change CSB	yCoord: CARDINAL[0..792]
	14044	CP Block Read CSB	address: CARDINAL
	14045	CP Block Read CSB	addressHi: CARDINAL
	14046	CP Block Read CSB	count: CARDINAL
	14047	CP Block Read CSB	RECORD [full: BOOLEAN, unused: CARDINAL[0..77777B]]

	14048-140BF	(unused)	------------

	140C0-CF	Ethernet CSB	(TBD)

	140DA-E9	Burdock/Ethernet CSB	(TBD)

	140EA	Display CSB	(reserved)
	140EB	Display CSB	wakeup Mask
	140EC	Display CSB	control
	140ED	Display CSB	border Pattern
	140EE	Display CSB	cursor X coordinate
	140EF	Display CSB	cursor Y coordinate
	140F0-140FF	Display CSB	cursor bit map
}

{KERNEL
 Author: R. Garner
 Created: 4 Oct 79,
 Last Edited: R. Garner, October 28, 1980  2:16 PM}

Set[IOPAttnInMode, 5];
Set[IOPInMode, 1];
Set[IOPDisableMode, 0];

Set[KBufferLoc, 0FF4], Set[KBufferEnd, 0FFF];  {First location of overlay area, had better be even!}
Set[GetIOPByteLoc, 0FD0];
Set[KBufferExtenLoc, Add[GetIOPByteLoc, 8]], Set[KBufferExtenEnd, Add[GetIOPByteLoc, 0F]];
Set[KWaitLoc, 0FE0];
Set[K1EntryLoc, 0F80];
Set[K2EntryLoc, 0FBF];
Set[K3EntryLoc, 0FCF];
Set[KcLoc, 0FA0];  {WriteLink exploits the fact that IA.7=0}
Set[K1ELoc, 0FB8];
Set[KBELoc, 0FB9];


{EMULATOR}

{BitBlt definitions}
	{BitBlt must have the following registers be distinct sets}
	{Set1: VS, VD, TempDelta, TempBpl, SrcA, DstA, TempB}
	{Set2: Hold, Save, Src, Dst, SrcA, DstA, Lcount}
	{Set3: Rbb0, Rbb1, Rbb2, SrcA, DstA, Lcount}
	{Set4: Mask1, Mask2, Src, Dst, SrcA, DstA, Lcount}
	{Set5: Rbb0, Rbb1, Rbb2, Rbb3, Rbb4}

{constant and macro definitions for BitBlt}

		{gray (gr) values}
Set[gr.gray,1],Set[gr.notgray,5],Set[gr.mask,1],Set[grM,8],

		{source function (sf) values}
Set[sf.true,4],Set[sf.comp,5],Set[sf.mask,4],Set[sfM,8],

		{direction (dir) values}
Set[dir.forward,6],Set[dir.backwards,0E],Set[dirM,10],

		{dest function (df) values}
Set[df.null,8],Set[df.and,0A],Set[df.or,0C],Set[df.xor,0E],Set[dfM,10],

		{srcdst function (sd) values}
Set[sd.src,0],Set[sd.dst,1],Set[sd.spec,2],Set[sdM,4],

{Return points for RestoreRandRHRegs}
MacroDef[RestoreBlockRegsRet,at[#1,10,RestoreCallers]];
Set[restore.term, Sub[grM,1] ],{MUST BE Sub[grM,1]}
Set[restore.int, 0 ],{restore if interrupt }
Set[restore.pf, 2 ],{restore if page fault}
Set[restore.trap,3]; {used by Block if trap}
Set[restore.BandBLT, 6]{used by BandBLT for at BandBLT's point of return to emulator};
Set[BLTfini,0F]; {used by Block, must = F}
Set[BLEQfini,0E]; {used by Block, must = E}

{Return points for DstVAMod}
MacroDef[DstVAModRet,at[#1,4,DstVAModRet]];
Set[sdWidth, 2 ],{for DstVAMod and SrcVAMod}
Set[sdBpl, 1 ],{ DstVAMod and SrcVAMod}
Set[Dest,3], {for TextBlt to call DstVAMod}

{Return points for SrcMap}
MacroDef[SrcMapSpecRet,at[#1,10,SrcMapRet]];
Set[argMap, 1 ],{for mapping BitBltArg}
Set[sdMap, 0 ],{for SrcMap and DstMap}
Set[MapOne, 2 ],{for SrcMap and DstMap}
Set[MapArg, 3], {for TextBlt to map TextBltArg}
Set[Fetch, 5], {for TextBlt FetchVS subroutine}
Set[MapFont, 7], {for TextBlt to map FontBody pointer, must be 7}

{Return points for SaveRandRHRegs}
MacroDef[SaveBlockRegsRet,at[#1,10,SavebbRegsRet]];
MacroDef[SavebbRegsRet,at[#1,10,SavebbRegsRet]];
Set[Savebb.BitBlt,0]; {Return from SavebbRegs for BitBlt, must = 0}
Set[BLT,3]; { Block Transfer, must = 3}
Set[BLEQ,2]; {Block Equal, must = 2}
Set[BLTL,7]; {Block Transfer Long, must = 7}
Set[BLEQL,6]; {Block Equal Long, must = 6}
Set[BLEQCL,0E]; {Block Equal Code Long, must = E}
Set[BLTC,0B]; {Block Transfer Code, must = 0B}
Set[BLEQC,0A]; {Block Equal Code, must = 0A}
Set[Checksum,4]; {Checksum  must = 4}
Set[Savebb.BLT,BLT]; {Return from SavebbRegs for BLEQ (Block Transfer), must = 3}
Set[Savebb.BLEQ,BLEQ]; {Return from SavebbRegs for BLEQ (Block Equal), must = 2}
Set[Savebb.BLTL,BLTL]; {Return from SavebbRegs for BLTL (Block Transfer Long), must = 7}
Set[Savebb.BLEQL,BLEQL]; {Return from SavebbRegs for BLEQL (Block Equal Long), must = 6}
Set[Savebb.BLEQCL,BLEQCL]; {Return from SavebbRegs for BLEQCL (Block Equal Code Long), must = E}
Set[Savebb.BLTC,BLTC]; {Return from SavebbRegs for BLTC (Block Transfer Code), must = 0B}
Set[Savebb.BLEQC,BLEQC]; {Return from SavebbRegs for BLEQC (Block Equal Code), must = 0A}
Set[Savebb.Checksum,Checksum]; {Return from SavebbRegs for Checksum  must = 4}
Set[Savebb.BandBlt,0C]; {Return from SavebbRegs for BandBlt}
Set[Savebb.TextBlt,0D]; {Return from SavebbRegs for TextBlt}


Set[hbs.0, Or[ Xor[0F, 0] , 6 ] ];
Set[hbs.1, Or[ Xor[0F, 1] , 6 ] ];
Set[hbs.2, Or[ Xor[0F, 2] , 6 ] ];
Set[hbs.A, Or[ Xor[0F, 0A] , 6 ] ];
Set[hbs.B, Or[ Xor[0F, 0B] , 6 ] ];
Set[hbs.C, Or[ Xor[0F, 0C] , 6 ] ];
Set[hbs.D, Or[ Xor[0F, 0D] , 6 ] ];

MacroDef[scDisp,L0Disp],
MacroDef[dfDisp,L1Disp],
MacroDef[dirDisp,L1Disp],
MacroDef[sdDisp,L2Disp];
MacroDef[sfDisp,L3Disp],
MacroDef[grDisp,L3Disp];

MacroDef[sc1DISP,DISP4[#1,0E]],
MacroDef[sc2DISP,DISP4[#1,03]],
MacroDef[sc3DISP,DISP4[#1,0D]],
MacroDef[dirDISP,DISP4[#1,6]],
MacroDef[dfDISP,DISP4[#1,8]],
MacroDef[sfDISP,DISP3[#1,sf.mask]],
MacroDef[grDISP,DISP3[#1,gr.mask]];
MacroDef[sdDISP,DISP2[#1]];

Set[SRaRet, 2 ],{rhRet value for SrcLRemap}
Set[SRcRet, 3 ],{rhRet value for SrcLRemap}

Set[DRaRet, 02 ],{rhRet value for DstLRemap}
Set[DRbRet, 03 ],{rhRet value for DstLRemap}
Set[ret.L1pcr, 08 ],{rhRet value for DstLRemap}
Set[ret.L2pcr, 09 ],{rhRet value for DstLRemap}
Set[ret.L1Tpcr, 0A ],{rhRet value for DstLRemap}

Set[StkSize.normal, 1 ],{used for HowBigStack}
Set[StkSize.interrupt, 7 ],{used for HowBigStack}

Set[Type.normal, 0 ],{value in rhType}
Set[Type.LSEP, 1 ],{value in rhType}
Set[Type.TextBlt,4], {value in rhType tells what to do if page fault}
Set[type.notsmall,7],Set[type.small,5],Set[typeM,8],

Set[dtRet.L0, 0 ],{constant value for dT}
Set[dtRet.L1, 1 ],{constant value for dT}
Set[dtRet.L3, 3 ],{constant value for dT}
Set[dtRet.L4, 4]{used by BandBLT for dT};

Set[VAaRet, 0 ],{rhRet value for VAModSub}{even, < 8}
Set[VAbRet, 2 ],{rhRet value for VAModSub}{even, < 8}
Set[srcTP, 4 ],{rhRet value for VAModSub}{even, < 8}
Set[dstTP, 6 ],{rhRet value for VAModSub}{even, < 8}

Set[NoPgCr, 0 ],
Set[PgCr, 2 ],
Set[LCeq0, 1 ],

Set[dbsb0, 0 ],
Set[sbneq0, 1 ],
Set[dbneq0, 3 ],
;


{Stuff for the display}
Set[IOPage.DCSB.mask, 0EB];
Set[IOPage.DCSB.flags, 0EC];
Set[IOPage.DCSB.border, 0ED];
{Set[IOPage.DCSB.cursorMap, 0F0];}
Set[IOPage.DCSB, 0EB];
Set[DCSB.cursorMap, 5];
Set[PicLenShifted, 0CA]; {PicLength = 328'x = 808'd. PicLenShifted = RShift2 PicLength}

Set[IOPage.keyBitsm1, 39];




{Raven printer definitions}
{**Old definitions for Raven.mc
Set[PrinterRunOffset, 10]; {added to uIOPage=(0)4000}
Set[PrinterOverrunOffsetM1, 10]; {added to uIOPage=(0)4000}
}
Set[RavenRunOffset, 10]; {=44 in product 12.2 Dandelion.dfn}
Set[RavenOverrunOffset, 11]; {=45 in product 12.2 Dandelion.dfn}
Set[WakeupMaskOffset, 0EB];


{Ethernet}
{Offsets and Magic locations}
Set[IOPage.ECSB, 0C0];
Set[ECSB.host0, 0];
Set[ECSB.host1, 1];
Set[ECSB.host2, 2];
Set[ECSB.icb, 3];
Set[ECSB.iWakeup, 4];
Set[ECSB.ocb, 5];
Set[ECSB.oWakeup, 6];
Set[ECSB.lost, 7];
Set[IOPage.ECSB.host0, Add[IOPage.ECSB, ECSB.host0]];
Set[IOPage.ECSB.host1, Add[IOPage.ECSB, ECSB.host1]];
Set[IOPage.ECSB.host2, Add[IOPage.ECSB, ECSB.host2]];
Set[IOPage.ECSB.icb, Add[IOPage.ECSB, ECSB.icb]];
Set[IOPage.ECSB.iWakeup, Add[IOPage.ECSB, ECSB.iWakeup]];
Set[IOPage.ECSB.ocb, Add[IOPage.ECSB, ECSB.ocb]];
Set[IOPage.ECSB.oWakeup, Add[IOPage.ECSB, ECSB.oWakeup]];
Set[IOPage.ECSB.lost, Add[IOPage.ECSB, ECSB.lost]];


MacroDef[SuppressTimingWarning,LOOPHOLE[stw]];
MacroDef[WriteOK,LOOPHOLE[wok]];
MacroDef[PgCrBRANCH, BRANCH[#1, #2, 1]];
MacroDef[CancelPgCross, IfEqual[#0, 1, CANCELBR[#1, 2], CANCELBR[#1, #2]]];
MacroDef[CancelDisp, CANCELBR[#1, 0F]];

{** IO page location is specific to PrincOps version! **}

Set[cedarIOPage, 40];	{used only in initial microcode}
Set[cedarIOPageHigh, 1]; {Used in emulator and initial microcode}



{***BandBLT defs not needed.  Tim Diebert says BandBLT is a subset of BitBlt which
was needed when microstore was limited but not when BitBlt can fit.  So we won't ever use it.

{BandBLT definitions
   Description: Definitions for use by BandBLT.mc and BandBLTSubs.mc
   Author: Pat Olmstead
   Created: June 10, 1980
   Last edit: Olmstead  March 17, 1981  3:00 PM
}
	Set[ParamBlkSize, 9];
	Set[Arg0, Sub[17'd, ParamBlkSize]];

RegDef[rYheight,	R,	0];	{BandBLT}
RegDef[rCC,		R,	0];	{BandBLT}

RegDef[rScratch,	R,	1];	{BandBLT}
RegDef[rXDisp,		R,	1];	{BandBLT}
RegDef[rXwidth,		R,	1];	{BandBLT}

RegDef[rYloc,		R,	2];	{BandBLT paired with u1FFF}
RegDef[rLOwriteP,	R,	2];	{BandBLT paired with u1FFF}
RegDef[rhLOwriteP,	RH,	2];	{BandBLT}

{***NEW DEF NOT USED YET
RegDef[TempWpl,		R,	3];	{BandBLT's special BitBlt (words per line)}
***END OF DEF NOT USED}
RegDef[rLOwriteV,	R,	3];	{BandBLT}
RegDef[rUindex,		R,	3];	{BandBLT}
RegDef[rLoop,		R,	3];	{BandBLT}
RegDef[rFont,		R,	3];	{BandBLT}
RegDef[rhLOwriteV,	RH,	3];	{BandBLT}

RegDef[rNlines,		R,	4];	{BandBLT}
RegDef[rReadP,		R,	4];	{BandBLT}
RegDef[rhReadP,		RH,	4];	{BandBLT}

RegDef[rReadV,		R,	5];	{BandBLT}
RegDef[rDest,		R,	5];	{BandBLT}
RegDef[rJunk,		R,	5];	{BandBLT--paired with uCurrentLevelCmd, but only to do u ← r xor ~r}
RegDef[rhReadV,		RH,	5];	{BandBLT}
RegDef[rhDest,		RH,	5];	{BandBLT}

RegDef[rTemp,		R,	6];	{BandBLT}
RegDef[rhTemp,		RH,	6];	{BandBLT}

RegDef[USrcWpl,		U,	8];	{BandBLT's special BitBlt -- shares with UGray (source words per line}
RegDef[uLastInkLOwritten, U,	30];	{BandBLT -- rA = rLoop}	
RegDef[uLastLevelLOwritten, U,	3C];	{BandBLT -- rA = rLoop}
RegDef[uOtherVirtPage,	U,	4A];	{BandBLT}
RegDef[uInkHigh,	U,	4D];	{BandBLT}
RegDef[uInkLow,		U,	4E];	{BandBLT}
RegDef[uCurrentInkwell,	U,	4F];	{BandBLT}
RegDef[uSaveLOwritePLow, U,	50];	{BandBLT rA = rJunk}
RegDef[uSaveList,	U,	56];	{BandBLT}
RegDef[uCurrentLevelCmd, U,	58];	{BandBLT--rA = rJunk, but any r-reg will work (u ← r xor ~r)}
RegDef[uOtherListHigh,	U,	59];	{BandBLT}
RegDef[uSaveReadPHigh,	U,	5A];	{BandBLT}
RegDef[uyBlk,		UY,	6];	{BandBLT}
RegDef[uRect0,		U,	63];	{BandBLT, rA = rTemp = 6}
RegDef[uChar0,		U,	63];	{BandBLT, rA = rTemp = 6}
RegDef[uRect1,		U,	64];	{BandBLT, rA = rTemp = 6}
RegDef[uChar1,		U,	64];	{BandBLT, rA = rTemp = 6}
RegDef[uRect2,		U,	65];	{BandBLT, rA = rTemp = 6}
RegDef[uChar2,		U,	65];	{BandBLT, rA = rTemp = 6}
RegDef[uLOreadV,	U,	68];	{BandBLT Arg0}
RegDef[uBLreadLow,	U,	69];	{BandBLT Arg1}
RegDef[uBLreadHigh,	U,	6A];	{BandBLT Arg2}
RegDef[uLOwriteV,	U,	6B];	{BandBLT Arg3}
RegDef[uBandBufLow,	U,	6C];	{BandBLT Arg4}
RegDef[uBandBufHigh,	U,	6D];	{BandBLT Arg5}
RegDef[uFPTPage,	U,	6E];	{BandBLT Arg6}
RegDef[uBitmapMemPage,	U,	6F];	{BandBLT Arg7}

RegDef[uOtherFlags,	U,	95];	{BandBLT}
RegDef[uCurrentInkCmd,	U,	97];	{BandBLT}
RegDef[uOtherListLow,	U,	98];	{BandBLT}
RegDef[uOtherLevelCmd,	U,	99];	{BandBLT}
RegDef[uCurrentInkCmd,	U,	97];	{BandBLT}
RegDef[uOtherLevelCmd,	U,	99];	{BandBLT }

RegDef[uOtherInkCmd	,U,	0A0];	{BandBLT}
RegDef[uBitmapMemLow	,U,	0A1];	{BandBLT}
RegDef[uRetPage	,U,	0A2];	{BandBLT}
RegDef[uRetWord	,U,	0A3];	{BandBLT}
RegDef[uCurrentFlags	,U,	0A4];	{BandBLT}

RegDef[uOtherInkCmd,	U,	0A0];	{BandBLT}
RegDef[uBitmapMemLow,	U,	0A1];	{BandBLT}
RegDef[uRetPage,	U,	0A2];	{BandBLT}
RegDef[uRetWord,	U,	0A3];	{BandBLT}
RegDef[uCurrentFlags,	U,	0A4];	{BandBLT}

RegDef[uSaveReadPLow	,U,	0B5];	{BandBLT}
RegDef[uSaveLOwritePHigh	,U,	0B6];	{BandBLT}
RegDef[uSaveVirtPage	,U,	0B8];	{BandBLT}
RegDef[uRasterHigh	,U,	0BA];	{BandBLT}
RegDef[uOtherInkwell	,U,	0BC];	{BandBLT}
RegDef[uFPTLow	,U,	0BD];	{BandBLT}
RegDef[uFPTHigh	,U,	0BE];	{BandBLT}
RegDef[uBitmapMemHigh	,U,	0BF];	{BandBLT}
RegDef[uSaveReadPLow,	U,	0B5];	{BandBLT}
RegDef[uSaveLOwritePHigh, U,	0B6];	{BandBLT}
RegDef[uSaveVirtPage,	U,	0B8];	{BandBLT}
RegDef[uFPTHigh,	U,	0B9];	{BandBLT}
RegDef[uRasterHigh,	U,	0BA];	{BandBLT}
RegDef[uBitmapMemHigh,	U,	0BB];	{BandBLT}
RegDef[uOtherInkwell,	U,	0BC];	{BandBLT}
RegDef[uFPTLow,		U,	0BD];	{BandBLT}
RegDef[uOtherListLow,	U,	0BE];	{BandBLT}
RegDef[uOtherFlags,	U,	0BF];	{BandBLT}
RegDef[uVirtPage,	U,	0F2];	{BandBLT}
RegDef[uRasterLow,	U,	0F3];	{BandBLT}
RegDef[UDstRA,		U,	0F1];	{BandBLT's special BitBlt; replaces UrefillType}
***End of BandBLT commented out definitions}