DIRECTORY Core, CoreFrame, CoreName, CoreXform, DragOpsCross, IFUSrc, IFUCoreData;

IFUSrcLSForm: CEDAR PROGRAM	
IMPORTS CoreFrame, CoreName, IFUCoreData, IFUSrc
EXPORTS IFUSrc =
BEGIN

ROPE:		TYPE = Core.ROPE;

GND:		ROPE = CoreName.RopeNm["GND"];
VDD:		ROPE = CoreName.RopeNm["VDD"];
xBus:		ROPE = CoreName.RopeNm["XBus."];
zero:			ROPE = "GND";
version:		ROPE = "(GND, GND, GND, GND, GND, GND, GND, VDD )";
lSum17: 	ROPE = "(NIL		LSum.1  LSum.2  LSum.3  LSum.4  LSum.5  LSum.6  LSum.7)";
lSum17in: ROPE = "(GND	LSum.1  LSum.2  LSum.3  LSum.4  LSum.5  LSum.6  LSum.7)";
sSum17:	ROPE = "(NIL		SSum.1  SSum.2  SSum.3  SSum.4  SSum.5  SSum.6  SSum.7)";
sSum17in: ROPE = "(GND	SSum.1  SSum.2  SSum.3  SSum.4  SSum.5  SSum.6  SSum.7)";
cSum17: ROPE = "
(GND  CSum.1  CSum.2  CSum.3  CSum.4  CSum.5  CSum.6  CSum.7)";
cOffset:	ROPE = "(
NotCRegOffBA.0 NotCRegOffBA.0	NotCRegOffBA.0	NotCRegOffBA.0
NotCRegOffBA.0 NotCRegOffBA.0 	CRegOffBA.1 	CRegOffBA.2 )";
cBase:		REF = IFUSrc.ProcRegToList[euConstant];
aBase:		REF = IFUSrc.ProcRegToList[euAux];
noStore:	REF = IFUSrc.ProcRegToList[euJunk];

userTrapsDisRec:	DragOpsCross.StackedStatusWord _ [userMode: TRUE, trapsEnabled: FALSE];
userTrapsDisCard:	LONG CARDINAL _ LOOPHOLE[userTrapsDisRec];
flagBubbleByte:		CARDINAL _ userTrapsDisCard MOD 256;	-- (record words swapped)
flagBubble:			REF = IFUSrc.CardToList[flagBubbleByte, 8];

one: ROPE = "
(GND  GND  GND  GND  GND  GND  GND  VDD)";
op47: ROPE = "
(GND  GND  GND  GND  OpBA.4  OpBA.5  OpBA.6  OpBA.7)";
s2AB: ROPE = "
(S2AB.0 S2AB.1 S2AB.2 S2AB.3 S2AB.4 S2AB.5 S2AB.6 S2AB.7)";
alpha: ROPE = "AlphaBA.";
alpha47: ROPE = "
(GND  GND  GND  GND  AlphaBA.4  AlphaBA.5  AlphaBA.6  AlphaBA.7)";
beta: ROPE = "BetaBA.";
beta47: ROPE = "
(GND  GND  GND  GND  BetaBA.4  BetaBA.5  BetaBA.6  BetaBA.7)";
beta03: ROPE = "
(GND  GND  GND  GND  BetaBA.0  BetaBA.1  BetaBA.2  BetaBA.3)";
op47AlBeBA: LIST OF REF = LIST[op47, NIL, alpha, beta ];

StatStackRdPreChargeTop:		LIST OF REF = LIST -- Op03 dropped here
[xBus, op47AlBeBA, NIL, "StatStackWtDataA.", "NotStatStackRdDataA." ];

StatStackRdPreCharge:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"StatStackRdPreCharge",
type:		"DpPreChg",
top:		StatStackRdPreChargeTop,
left:	 	"(	NotPhB	)",
out:		"( NotStatStackRdDataA. )",
bot:		StatStackRdPreChargeTop,
xform:		IFUCoreData.Interleaved48 ]};

StatStackRdInv:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"StatStackRdInv",
type:		"DpInv",
top:		StatStackRdPreChargeTop,
in:			"( NotStatStackRdDataA. )",
out:		"( StatStackRdDataA. )",
bot:		StatStackRdMuxTop,
xform:		IFUCoreData.Interleaved48 ]};

StatStackRdMuxTop:		LIST OF REF = LIST
[xBus, op47AlBeBA, "StatStackRdDataA.", "StatStackWtDataA."];

StatStackRdMux:				PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"StatStackRdMux",
top:		StatStackRdMuxTop,
left:	 	"(	Push3BA				NotPush3BA	)",
in:			"(	 StatStackWtDataA.	StatStackRdDataA. )",
out:		"(	SelStatStackRdDataA.	)",
bot:		StatStackRdLatchATop,
xform:		IFUCoreData.Interleaved48 ]};

StatStackRdLatchATop:		LIST OF REF = LIST
[xBus, op47AlBeBA, NIL, "StatStackWtDataA.", NIL, "SelStatStackRdDataA." ];

StatStackRdLatchA:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"StatStackRdLatchA",
type:		"DpLatch",
top:		StatStackRdLatchATop,
left:	 	"(	PhA VBB			)",
in:			"(	SelStatStackRdDataA.	)",
out:		"(( VStkTopAB. FlagsStkTopAB. SStkTopAB. LStkTopAB. ))",
bot:		StatStackXBusDrTop,
xform:		IFUCoreData.Interleaved48 ]};

StatStackXBusDrTop:		LIST OF REF = LIST [
xBus,
op47AlBeBA,
NIL,
"StatStackWtDataA.",
NIL,
"( VStkTopAB. FlagsStkTopAB. SStkTopAB. LStkTopAB. )" ];

StatStackXBusDr:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"StatStackXBusDr",
type:		"DpTriDr",
top:		StatStackXBusDrTop,
right:		"(	X1ASrcStackLAc NotX1ASrcStackLAc	)",		-- from InstrDecode
in:			"(( VStkTopAB. FlagsStkTopAB. SStkTopAB. LStkTopAB. ))",
out:		"(	XBus.	)",
bot:		StatStackWtBufTop,
xform:		IFUCoreData.Interleaved48 ]};

StatStackWtBufTop:		LIST OF REF = LIST [
xBus,
op47AlBeBA,
NIL,
"StatStackWtDataA.",
NIL,
"( NIL FlagsStkTopAB. NIL LStkTopAB. )" ];

StatStackWtBuf:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"StatStackWtBuf",
type:		"DpBuf",
top:		StatStackWtBufTop,
in:			"(	PreStatStackWtDataA.	)",
out:		"(	StatStackWtDataA.		)",
bot:		StatStackWtMuxTop,
xform:		IFUCoreData.Interleaved48 ]};

StatStackWtMuxTop:		LIST OF REF = LIST [
xBus,
op47AlBeBA,
"PreStatStackWtDataA.",
NIL,
NIL,
"( NIL FlagsStkTopAB. NIL LStkTopAB. )" ];

StatStackWtMux:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"StatStackWtMux",
top:		StatStackWtMuxTop,
right: 	"(	X1ADstStackBA		NotX1ADstStackBA	GND)",
in:			LIST[
xBus,
LIST[ version, "Flags3BA.", GND, "L3BA."],
NIL ],
out:		"(	PreStatStackWtDataA.	)",
bot:		LSMuxSwitchingTop,
xform:		IFUCoreData.Interleaved48 ]};

LSMuxSwitchingTop:		LIST OF REF = LIST [
xBus,
op47AlBeBA,
NIL,
NIL,
LIST[ version,	"Flags3BA.",			"S3BA.",		"L3BA."],
LIST[ NIL,		"FlagsStkTopAB.",	NIL,			"LStkTopAB." ] ];

LSMuxSwitching:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"SwitchBox",
name:		"LSMuxSwitching",
top:		LSMuxSwitchingTop,
left:		NIL,
right:		"( PopSaBA NotCRegOffBA.0 CRegOffBA.1 CRegOffBA.2 )",
bot:		LSCDRtArgFormMuxTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCDRtArgFormMuxTop:			LIST OF REF = LIST [
xBus,
op47AlBeBA,
LIST[	"AlphaBA.",		"AlphaBA.",	"S3BA.",	"Flags3BA."			],
LIST[	"LStkTopAB.",	"SDeltaB.",	NIL,		"FlagsStkTopAB."	],
LIST[	NIL,				NIL,			op47,		"SDeltaB." 			],
LIST[	NIL,				NIL,			"L3BA.",	"PopSaBA"			],
GND,
VDD,
LIST[	NIL,				NIL,			beta,		NIL		],
LIST[	NIL,				NIL,			beta03,	NIL		],
LIST[	NIL,				NIL,			cOffset,	NIL		]	];

LSCDRtArgFormMux:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"LSCDRtArgFormMux",
top:		LSCDRtArgFormMuxTop,
right:		"(
LSourceRtZeroBA	LSourceRtAlphaBA	LSourceRtStackBA	LSourceRtOneBA
SSourceRtDeltaSBA	SSourceRtAlphaBA	SSourceRtZeroBA	SSourceRtOneBA
CRegRtOp47BA		CRegRtAlphaBA								CRegRtAlpha47BA
CRegRtOffsetBA		CRegRtBetaBA		CRegRtBeta03BA		CRegRtBeta47BA	)",
in:	 LIST[
LIST[	zero,				NIL,			NIL,			NIL	],
LIST[	alpha,				NIL,			NIL,			NIL	],
LIST[	"LStkTopAB.",	NIL,			NIL,			NIL	],
LIST[	one,				NIL,			NIL,			NIL	],
LIST[	NIL,				"SDeltaB.",	NIL,			NIL	],
LIST[	NIL,				alpha,			NIL,			NIL	],
LIST[	NIL,				zero,			NIL,			NIL	],
LIST[	NIL,				one,			NIL,			NIL	],
LIST[	NIL,				NIL,			op47,			NIL	],
LIST[	NIL,				NIL,			alpha,			NIL	],
LIST[	NIL,				NIL,			alpha47,		NIL	],
LIST[	NIL,				NIL,			cOffset,		NIL	],
LIST[	NIL,				NIL,			beta,			NIL	],
LIST[	NIL,				NIL,			beta03,		NIL	],
LIST[	NIL,				NIL,			beta47,		NIL	] ],
out:		"( ( LSumRt.		SSumRt.		CRt.			NIL ) )",
bot:		LSCDAdderTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCDAdderTop:			LIST OF REF = LIST[
xBus,
op47AlBeBA,
"(	NIL			NIL			S3BA.		Flags3BA.		)",
"(	NIL			NIL			CRt.		FlagsStkTopAB.	)",
"(	NIL			NIL			NIL		SDeltaB.			)",
"(	LSumRt.		SSumRt.		L3BA.		PopSaBA		)"	];

LSCDAdder:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Adder",
name:		"LSCDAdder",
top:		LSCDAdderTop,
right:		"(	GND GND GND PushScBA	)",	-- automatically becomes NotPushScBA
in:			"(	
(			LSumRt.	SSumRt.		CRt.		PopSaBA	)
(			LSumLt.	SSumLt.		CLt.		PopSbBA	) 	)",	-- no dot expansion.
out:	LIST[ LIST[	lSum17,	sSum17,		"CSum.",		"SDeltaB."	] ],
bot:		LSCDLtArgFormTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCDLtArgFormTop:			LIST OF REF = LIST[
xBus,
op47AlBeBA,
"(		NIL			NIL			S3BA.		Flags3BA.		)",
"(		NIL			NIL			CLt.		FlagsStkTopAB.	)",
LIST[	lSum17,		sSum17,		"CSum.",	NIL				],
"(		LSumLt.		SSumLt.		L3BA.		PopSbBA			)"	];

LSCDLtArgForm: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"LSCDLtArgForm",
top:		LSCDLtArgFormTop,
right:		"(
LSourceLtLBA		LSourceLtSBA		LSourceLtZeroBA	LSourceLtL3BA
SSourceLtSBA		SSourceLtLBA		SSourceLtS2BA		SSourceLtS3BA
CRegLtCBaseBA	 CRegLtABaseBA	CRegLtSBA	CRegLtLBA	CRegLtZeroBA
GND )",
in:	 LIST[
"(		LAB.		NIL		NIL		NIL	)",
"(		SAB.		NIL		NIL		NIL	)",
LIST[	zero,		NIL,		NIL,		NIL	],
"(		L3AB.		NIL		NIL		NIL	)",
"(		NIL		SAB.		NIL		NIL	)",
"(		NIL		LAB.		NIL		NIL	)",
"(		NIL		S2AB.		NIL		NIL	)",
"(		NIL		S3AB.		NIL		NIL	)",
LIST[	NIL,		NIL,		cBase,		NIL	],
LIST[	NIL,		NIL,		aBase,		NIL	],
"(		NIL		NIL		SAB.		NIL	)",
"(		NIL		NIL		LAB.		NIL	)",
LIST[	NIL,		NIL,		zero,		NIL	],
NIL ],
out:	"( ( LSumLt.	SSumLt.	CLt.		NIL	) )",
bot:		LSCrossConnLSTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCrossConnLSTop:			LIST OF REF = LIST[
xBus,
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			S3BA.		Flags3BA.		)",
"(		L3AB.			S3AB.			NIL		FlagsStkTopAB.	)",
LIST[	lSum17,		sSum17,		"CSum.",	NIL				],
"(		NIL			NIL			L3BA.		PopSbBA			)",
GND, VDD,
"(		SAB.			LAB.			LAB.		NIL			)",
"(		NIL			NIL			SAB.		NIL			)" ];

LSCrossConnLS:		PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"SwitchBox",
name:		"LSCrossConnLS",
top:		LSCrossConnLSTop,
left:		NIL,
right:		"( PopSbBA )",
bot:		ChopCMuxTop,
xform:		IFUCoreData.Interleaved48 ]};

ChopCMuxTop:			LIST OF REF = LIST[
xBus,
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.		)",
"(		L3AB.			S3AB.			NIL		FlagsStkTopAB.	)",
LIST[	lSum17,		sSum17,		"CSum.",	NIL				],
"(		L3BA.			S3BA.			NIL		NIL				)" ];

ChopCMux: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"ChopCMux",
top:		ChopCMuxTop,
right:		"(	CRegModFullBA CRegModHalfBA )",
in:	 LIST[
LIST[	NIL,	NIL,	"CSum.",	NIL	],
LIST[	NIL,	NIL,	cSum17,	NIL	] ],
out:		"( (	NIL	NIL	CSumx.	NIL	) )",
bot:		FlagMuxTop,
xform:		IFUCoreData.Interleaved48 ]};

FlagMuxTop:			LIST OF REF = LIST[
xBus,
LIST[	op47,			s2AB,			alpha,		beta				],
"(		LAB.			SAB.			NIL		Flags3BA.		)",
"(		L3AB.			S3AB.			CSumx.	FlagsStkTopAB.	)",
LIST[	lSum17,		sSum17,		NIL,		NIL				],
"(		L3BA.			S3BA.			NIL		NIL				)" ];

FlagMux: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"FlagMux",
top:		FlagMuxTop,
right:		"(	FlagSrcLev3BA FlagSrcSameBA FlagSrcClearBA FlagSrcStackBA )",
in:	 "(
( NIL NIL NIL	Flag3AB. 		),
( NIL NIL NIL	FlagAB 			),
( NIL NIL NIL	GND				),
( NIL NIL NIL	FlagsStkTopAB.	) )",
out: "( (	NIL	NIL	NIL	FlagB.	) )",
bot:		LSLatchBTop,
xform:		IFUCoreData.Interleaved48 ]};

LSLatchBTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			CSumx.	Flag3AB.		)",
LIST[	lSum17,		sSum17,		NIL,		"FlagB."	],
"(		L3BA.			S3BA.			NIL		FlagAB.		)" ];

LSLatchB:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSLatchB",
type: 		"DpLatch",
top:		LSLatchBTop,
left:		"(	PhB VBB	)",
in:			LIST[LIST[	lSum17in,	sSum17in,	NIL,	"FlagB."		]],
out:		LIST[LIST[	"LBA.",		"SBA.",		NIL,	"FlagBA."	]],
bot:		LSLatchATop,
xform:		IFUCoreData.Interleaved48 ]};

LSLatchATop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			CSumx.	Flag3AB.		)",
"(		LBA.			SBA.			NIL		FlagBA.		)",
"(		L3BA.			S3BA.			NIL		FlagAB.		)" ];

LSLatchA:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSLatchA",
type: 		"DpLatch",
top:		LSLatchATop,
left:		"(	PhA VBB	)",
in:			"((	LBA.	SBA.	NIL	FlagBA.		))",
out:		"((	LAB.	SAB.	NIL	FlagAB.		))",
bot:		LSCLatch0BTop,
xform:		IFUCoreData.Interleaved48 ]};

SwitchABFlag:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"SwitchBox",
name:		"SwitchABFlag",
top:		LSCLatch0BTop,
right:		"( FlagAB.6 )",	-- UserMode2BA to right pads
bot:		LSCLatch0BTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch0BTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			CSumx.	Flag3AB.		)",
"(		NIL			NIL			NIL		NIL		)",
"(		L3BA.			S3BA.			NIL		FlagAB.		)" ];
 
LSCLatch0B:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch0B",
type: 		"DpLatch",
top:		LSCLatch0BTop,
left:		"(	PhB VBB	)",
in:			"(	(	LAB.	SAB.	CSumx.	FlagAB.		))",
out:		"(	(	L0BA.	S0BA.	C0BA.		Flag0BA.		))",
bot:		LSCLatch1ATop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch1ATop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			NIL		Flag3AB.		)",
"(		L0BA.			S0BA.			C0BA.		Flag0BA.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

LSCLatch1A:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch1A",
type: 		"DpLatch",
top:		LSCLatch1ATop,
left:		"(	LoadStage1Ac VBB	)",
in:			"(	(	L0BA.	S0BA.	C0BA.	Flag0BA.		))",
out:		"(	(	L1AB.	S1AB.	C1AB.	Flag1AB.		))",
bot:		LSCLatch1BTop,
xform:		IFUCoreData.Interleaved48 ]};

DebugLSCF: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"DebugLSCF",
type: 		"DpDebugDr",
top:		LSCLatch1BTop,
right:		"(	DebugLSCF	)",
in:			"(	( LAB. SAB. C1AB. Flag1AB. ) )",
out:		"(	XBus.			)",
bot:		LSCLatch1BTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch1BTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			NIL		Flag3AB.		)",
"(		L1AB.			S1AB.			C1AB.		Flag1AB.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

LSCLatch1B:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch1B",
type: 		"DpLatch",
top:		LSCLatch1BTop,
left:		"(	LoadStage1Bc VBB	)",
in:			"(	(	L1AB.	S1AB.	C1AB.	Flag1AB.		))",
out:		"(	(	L1BA.	S1BA.	C1BA.	Flag1BA.		))",
bot:		CMux2ATop,
xform:		IFUCoreData.Interleaved48 ]};

CMux2ATop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			NIL		Flag3AB.		)",
"(		L1BA.			S1BA.			NIL		NIL			)",
"(		L3BA.			S3BA.			C1BA.		Flag1BA.		)" ];

CMux2A: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"CMux2A",
top:		CMux2ATop,
left:		"(	Stage2ANormalBA Stage2ABubbleBA GND)",
in:	 LIST[
LIST[			NIL,	NIL,	"C1BA.",	"Flag1BA."	],
LIST[			NIL,	NIL,	noStore,	flagBubble	],
NIL ],
out:		"( (	NIL	NIL	C2A.		Flag2A.		) )",
bot:		LSCLatch2ATop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch2ATop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			NIL		Flag3AB.		)",
"(		L1BA.			S1BA.			C2A.		Flag2A.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

LSCLatch2A:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch2A",
type: 		"DpLatch",
top:		LSCLatch2ATop,
left:		"(	LoadStage2Ac VBB	)",
in:			"(	(	L1BA.	S1BA.	C2A.	Flag2A.		))",
out:		"(	(	L2AB.	S2AB.	C2AB.	Flag2AB.		))",
bot:		CMux2BTop,
xform:		IFUCoreData.Interleaved48 ]};

CMux2BTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			C2AB.		Flag3AB.		)",
"(		L2AB.			S2AB.			NIL		Flag2AB.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

CMux2B: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"CMux2B",
top:		CMux2BTop,
left:		"(	Stage2BNormalAB Stage2BAbortAB GND )",
in:	 LIST[
LIST[			NIL,	NIL,	"C2AB.",	NIL	],
LIST[			NIL,	NIL,	noStore,	NIL	],
NIL ],
out:		"( (	NIL	NIL	C2B.	NIL	) )",
bot:		LSCLatch2BTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch2BTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			s2AB,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			C2AB.		Flag3AB.		)",
"(		L2AB.			S2AB.			C2B.		Flag2AB.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

LSCLatch2B:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch2B",
type: 		"DpLatch",
top:		LSCLatch2BTop,
left:		"(	PhB VBB	)",
in:			"(	(	L2AB.	S2AB.	C2B.	Flag2AB.		))",
out:		"(	(	L2BA.	S2BA.	C2BA.	Flag2BA.		))",
bot:		CMux3ATop,
xform:		IFUCoreData.Interleaved48 ]};

Switch2BAFlags:			PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"SwitchBox",
name:		"Switch2BAFlags",
top:		CMux3ATop,
left:		"( Flag2BA.7 )",	-- TrapsEnabled2BA to left control
right:		"( Flag2BA.6 )",	-- UserMode2BA to right pads
bot:		CMux3ATop,
xform:		IFUCoreData.Interleaved48 ]};

CMux3ATop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			NIL,			alpha,		beta			],
"(		LAB.			SAB.			C2BA.		Flags3BA.	)",
"(		L3AB.			S3AB.			C2AB.		Flag3AB.		)",
"(		L2BA.			S2BA.			NIL		Flag2BA.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

CMux3A: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"CMux3A",
top:		CMux3ATop,
left:		"(	Stage3ANormalBA Stage3AAbortBA )",
in:	 LIST[
LIST[			NIL,	NIL,	"C2BA.",	NIL	],
LIST[			NIL,	NIL,	noStore,	NIL	] ],
out:		"( (	NIL	NIL		C3A.		NIL	) )",
bot:		LSCLatch3ATop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch3ATop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			NIL,			alpha,		beta			],
"(		LAB.			SAB.			NIL		Flags3BA.	)",
"(		L3AB.			S3AB.			C2AB.		Flag3AB.		)",
"(		L2BA.			S2BA.			C3A.		Flag2BA.		)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

LSCLatch3A:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch3A",
type: 		"DpLatch",
top:		LSCLatch3ATop,
left:		"(	LoadStage3Ac VBB	)",
in:			"(	(	L2BA.	S2BA.	C3A.	Flag2BA.		))",
out:		"(	(	L3AB.	S3AB.	C3AB.	Flag3AB.		))",
bot:		CMux3BTop,
xform:		IFUCoreData.Interleaved48 ]};

CMux3BTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			NIL,			alpha,		beta			],
"(		LAB.			SAB.			C3AB.		Flags3BA.	)",
"(		L3AB.			S3AB.			C2AB.		Flag3AB.		)",
"(		NIL			NIL			NIL		NIL			)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

CMux3B: PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"Mux",
name:		"CMux3B",
top:		CMux3BTop,
left:		"(	Stage3BCPipeNormalAB Stage3BCPipeAbortAB GND )",
in:	 LIST[
LIST[			NIL,	NIL,	"C3AB.",	NIL	],
LIST[			NIL,	NIL,	noStore,	NIL	],
NIL ],
out:		"( (	NIL	NIL	C3B.		NIL	) )",
bot:		LSCLatch3BTop,
xform:		IFUCoreData.Interleaved48 ]};

LSCLatch3BTop:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			NIL,			alpha,		beta			],
"(		LAB.			SAB.			C3AB.		Flags3BA.	)",
"(		L3AB.			S3AB.			C2AB.		Flag3AB.		)",
"(		NIL			NIL			C3B.		NIL			)",
"(		L3BA.			S3BA.			NIL		NIL			)" ];

LSCLatch3B:					PROC RETURNS[cellType: Core.CellType] = {
cellType _ IFUCoreData.CellProc[
subClass:	"GPRow",
name:		"LSCLatch3B",
type: 		"DpLatch",
top:		LSCLatch3BTop,
left:		"(	PhB VBB	)",
in:			"(	(	L3AB.	S3AB.	C3B.	Flag3AB.		))",
out:		"(	(	L3BA.	S3BA.	C3BA.	Flags3BA.		))",
bot:		LSCBot,
xform:		IFUCoreData.Interleaved48 ]};

LSCBot:			LIST OF REF = LIST[
xBus,	
LIST[	op47,			NIL,			alpha,		beta	],
"(		LAB.			SAB.			C3AB.		NIL	)",
"(		NIL			NIL			C2AB.		NIL	)",
"(		NIL			NIL			C3BA.		NIL	)" ];


LSForm: PUBLIC PROC RETURNS[cellType: Core.CellType] = {
name:	ROPE _ CoreName.RopeNm["IFULSForm"];
IF (cellType _ CoreFrame.ReadFrameCache[name])=NIL THEN {
cellType _ CoreFrame.NewFrameCells[
name:		name,
rec:		[first: top],
cells: LIST[
StatStackRdPreCharge[],
StatStackRdInv[],
StatStackRdMux[],
StatStackRdLatchA[],
StatStackXBusDr[],
StatStackWtBuf[],
StatStackWtMux[],
LSMuxSwitching[],
LSCDRtArgFormMux[],
LSCDAdder[],
LSCDLtArgForm[],
LSCrossConnLS[],
ChopCMux[],
FlagMux[],
LSLatchB[],
LSLatchA[],
SwitchABFlag[],
LSCLatch0B[],
LSCLatch1A[],
DebugLSCF[],
LSCLatch1B[],
CMux2A[],
LSCLatch2A[],
CMux2B[],
LSCLatch2B[],
Switch2BAFlags[],
CMux3A[],
LSCLatch3A[],
CMux3B[],
LSCLatch3B[]	 ] ];
CoreFrame.WriteFrameCache[cellType]}};

END. 
����ö��IFUSrcLSForm.mesa 
Copyright c 1986 by Xerox Corporation.  All rights reserved.
Curry, October 21, 1986 9:18:43 pm PDT
Don Curry October 25, 1986 2:00:33 pm PDT

LIST[ version, "Flags3BA.", "S3BA.", "L3BA."] ],	-- wb easy to stack S here

�ÊŸ��˜�šœ™Icodešœ<™<K™&K™)—J™�JšÏk	œI˜RJ˜�šÏnœœœ˜Jšœ)˜0Jšœ	˜Jš˜J˜�Jšœœœ˜J˜�Jšœœ˜$Jšœœ˜$Jšœœ˜'Jšœœ	˜Jšœ
œ/˜=Jšœ	œC˜PJšœ
œB˜PJšœœC˜OJšœ
œB˜Pšœœ˜Jšœœ;˜?—Jšœ	œ}˜ŠJšœœ$˜/Jšœœ˜*Jšœ	œ ˜,J˜�Jšœ=œœ˜XJšœœœœ˜<JšœœœÏc˜OJšœœ(˜9J˜�šœœ˜
Jšœœœœœœœœœ˜*—šœœ˜Jš	œœœœœ#˜6—šœœ˜Jšœ;˜;—Jšœœ˜šœ	œ˜Jš	œœœœœ/˜B—Jšœœ
˜šœœ˜Jš	œœœœœ+˜>—šœœ˜Jš	œœœœœ+˜>—Jšœœœœœœ˜8J˜�šžœœœœœŸ˜AJšœœ0˜FJ˜�—šžœœœ˜Ašœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜Jšœ%˜%——J˜�šžœœœ˜;šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜Jšœ˜Jšœ%˜%——J˜�š
ÐbnÏbœœœœ˜&Jšœ=˜=J˜�—šžœœœ˜<šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ$˜$Jšœ1˜1Jšœ!˜!Jšœ˜Jšœ%˜%——J˜�š	žœœœœ˜)Jšœœœ˜KJ˜�—šžœœœ˜>šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ>˜>Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜)Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ8˜8J˜�—šžœœœ˜<šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ1Ÿ˜DJšœ>˜>Jšœ˜Jšœ˜Jšœ%˜%——J˜�š	žœœœœ˜(Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ*˜*J˜�—šžœœœ˜;šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜Jšœ˜Jšœ%˜%——J˜�šžœ˜(Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ*˜*J˜�—šžœœœ˜;šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ1˜1šœœ˜Jšœ˜JšœG™KJšœœ˜*Jšœ˜—Jšœ!˜!Jšœ˜Jšœ%˜%——J˜�šžœ˜(Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ-˜1Jšœœœ˜6J˜�—šžœœœ˜;šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœœ˜Jšœ=˜=Jšœ˜Jšœ%˜%——J˜�šžœœ˜+Jšœ˜Jšœ˜Jšœ4˜8Jšœœ˜9Jšœœœ˜,Jšœœœ˜,Jšœ˜Jšœ˜Jšœœœœ˜#Jšœœœœ˜$Jšœœœ
œ˜'J˜�—šžœœœ˜=šœ ˜ Jšœ˜Jšœ˜Jšœ˜šœ
˜
Jšœ@˜@JšœA˜AJšœ2˜2Jšœ@˜@—šœœ˜
Jšœœœœ˜#Jšœœœœ˜$Jšœœœœ˜(Jšœ
œœœ˜"Jšœœœœ˜'Jšœœœœ˜$Jšœœ
œœ˜#Jšœœœœ˜"Jšœœœœ˜#Jšœœœ
œ˜$Jšœœœœ˜%Jšœœœœ˜%Jšœœœœ˜#Jšœœœ
œ˜$Jšœœœ
œ˜&—Jšœ-˜-Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜#Jšœ˜Jšœ˜Jšœ$˜$Jšœ'˜'Jšœ"˜"Jšœ*˜*J˜�—šž	œœœ˜8šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ$Ÿ$˜Hšœ	˜	Jšœ$˜$Jšœ>˜>—Jšœœœ,˜;Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜'Jšœ˜Jšœ˜Jšœ%˜%Jšœ(˜(Jšœœ˜*Jšœ,˜,J˜�—šž
œœœ˜8šœ ˜ Jšœ˜Jšœ˜Jšœ˜šœ
˜
Jšœ9˜9Jšœ8˜8Jšœ=˜=Jšœ˜—šœœ˜
Jšœ˜Jšœ˜Jšœ	œœœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœœœœ˜ Jšœœœœ˜ Jšœ˜Jšœ˜Jšœœœ
œ˜Jšœ˜—Jšœ)˜)Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜'Jšœ˜Jšœ#˜'Jšœ'˜'Jšœ+˜+Jšœœ˜*Jšœ$˜$Jšœœ˜	Jšœ!˜!Jšœ!˜!J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœœ˜Jšœ˜Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜"Jšœ˜Jšœ#˜'Jšœ%˜%Jšœ+˜+Jšœœ˜*Jšœ%˜%J˜�—šžœœœ˜3šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ*˜*šœœ˜
Jšœœœœ˜Jšœœœ
œ˜ —Jšœ#˜#Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜!Jšœ˜Jšœ$˜(Jšœ%˜%Jšœ-˜-Jšœœœ˜'Jšœ%˜%J˜�—šžœœœ˜2šœ ˜ Jšœ˜Jšœ˜Jšœ˜JšœH˜Hšœ˜Jšœœœœ˜Jšœœœœ
˜Jš	œœœœœ˜Jšœœœœ˜"—Jšœ"˜"Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜"Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ(˜(Jšœœ˜)Jšœ'˜'J˜�—šžœœœ˜7šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœœœœ˜7Jšœœœœ˜5Jšœ˜Jšœ%˜%——J˜�š
žœœœœœ˜"Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ(˜(Jšœ#˜#Jšœ'˜'J˜�—šžœœœ˜7šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ%˜%Jšœ%˜%Jšœ˜Jšœ%˜%——J˜�šžœœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜JšœŸ˜4Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜$Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ(˜(Jšœ˜Jšœ'˜'J˜—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ)˜)Jšœ,˜,Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜$Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ&˜&Jšœ(˜(Jšœ$˜$J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ+˜+Jšœ+˜+Jšœ˜Jšœ%˜%——J˜�šž	œœœ˜4šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ)˜)Jšœ˜Jšœ˜Jšœ%˜%—J˜�—š
ž
œœœœœ˜$Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ&˜&Jšœ(˜(Jšœ$˜$J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ+˜+Jšœ+˜+Jšœ˜Jšœ%˜%——J˜�š
ž	œœœœœ˜ Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ&˜&Jšœ"˜"Jšœ*˜*J˜�—šžœœœ˜1šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ0˜0šœœ˜
Jšœœœ˜(Jšœœœ˜(Jšœ˜—Jšœ'˜'Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜$Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ&˜&Jšœ&˜&Jšœ$˜$J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ)˜)Jšœ+˜+Jšœ˜Jšœ%˜%——J˜�š
ž	œœœœœ˜ Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ(˜(Jšœ&˜&Jšœ$˜$J˜�—šžœœœ˜1šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ0˜0šœœ˜
Jšœœœœ˜!Jšœœœœ˜!Jšœ˜—Jšœ!˜!Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜$Jšœ˜Jšœ#˜'Jšœ$˜$Jšœ(˜(Jšœ'˜'Jšœ$˜$J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ*˜*Jšœ+˜+Jšœ˜Jšœ%˜%——J˜�šžœœœ˜;šœ ˜ Jšœ˜Jšœžœ˜Jšœ˜Jšœ:˜:Jšœ5˜5Jšœ˜Jšœ%˜%——J˜�š
ž	œœœœœ˜ Jšœ˜Jšœ
œ˜&Jšœ&˜&Jšœ(˜(Jšœ&˜&Jšœ$˜$J˜�—šžœœœ˜1šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ,˜,šœœ˜
Jšœœœœ˜!Jšœœœœ˜#—Jšœ#˜#Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜$Jšœ˜Jšœ
œ˜&Jšœ$˜$Jšœ(˜(Jšœ'˜'Jšœ$˜$J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ*˜*Jšœ+˜+Jšœ˜Jšœ%˜%——J˜�š
ž	œœœœœ˜ Jšœ˜Jšœ
œ˜&Jšœ&˜&Jšœ(˜(Jšœ˜Jšœ$˜$J˜�—šžœœœ˜1šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ:˜:šœœ˜
Jšœœœœ˜!Jšœœœœ˜!Jšœ˜—Jšœ"˜"Jšœ˜Jšœ%˜%——J˜�š
ž
œœœœœ˜$Jšœ˜Jšœ
œ˜&Jšœ&˜&Jšœ(˜(Jšœ˜Jšœ$˜$J˜�—šž
œœœ˜9šœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ*˜*Jšœ,˜,Jšœ
˜
Jšœ%˜%——J˜�š
žœœœœœ˜Jšœ˜Jšœ
œ˜$Jšœ ˜ Jšœ˜Jšœ ˜ J˜�—J˜�šžœœœœ˜8Jšœœ ˜*šœ-œœ˜9šœ#˜#Jšœ˜Jšœ˜šœœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ
˜
Jšœ˜Jšœ˜Jšœ˜Jšœ
˜
Jšœ
˜
Jšœ˜Jšœ
˜
Jšœ	˜	Jšœ
˜
Jšœ	˜	Jšœ
˜
Jšœ˜Jšœ	˜	Jšœ
˜
Jšœ	˜	Jšœ˜——Jšœ&˜&——J˜�Jšœ˜—J™�—�…—����NØ��im��