IFUAsmStackControler.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by Curry, January 23, 1986 6:51:41 pm PST
DIRECTORY CDFrame, Commander, IFUAsm, IFUPW, IFUPWControl, IO, PLAOps, REFBit, Rope;
IFUAsmStackControler: CEDAR PROGRAM
IMPORTS CDFrame, Commander, IFUAsm, IFUPW, IFUPWControl, IO, PLAOps, REFBit
EXPORTS IFUAsm =
BEGIN OPEN IFUAsm, IFUPWControl, CDF: CDFrame;
module:  ROPE ← "IFUAsmStackControler";
StackControlProc: CDF.ExpandProc = {
decode, aControl, bControl: Frame;
plaType: TYPE = {aCnt, bCnt, dec};
frm: INT ← 0;
max: INT ← 0;
plas: ARRAY plaType OF PLAOps.PLA;
ins: REF ← REFBit.NEWFromName["IFUPLAStackControlx.StackControlIn"];
drs, sb: Frame;
sb  ← CDF.Glue[t: conn, r: conn];
drs ← RefToDriverFrame
[name: "StackInDrs", xory: y, data: NIL, unordered: FALSE, refRec: ins,
initial: [drDir: in, dualOut: TRUE, in: [pos, BA], ref: [pos, B], out: [pos, BA]] ];
plas[dec]  ← PLAOps.ReadPLAFile["IFUPLAStackDecode.ttt"];
plas[bCnt] ← PLAOps.ReadPLAFile["IFUPLAStackBControl.ttt"];
plas[aCnt] ← PLAOps.ReadPLAFile["IFUPLAStackAControl.ttt"];
decode ← DrivenPLA[
DrPLA["Decode", plas[dec], decoder, BA, B, Ac], design, 0, 2, FALSE, 16];
aControl ← DrivenPLA[
DrPLA["AControl", plas[aCnt], static, BA, A, AB], design, 2, 1, TRUE];
bControl ← DrivenPLA[
DrPLA["BControl", plas[bCnt], static, BA, B, BA], design, 2, 1, TRUE];
new ← IFUPW.NFS["StackControl", x, LIST[ CDF.Glue[l: ext, r: conn],
IFUPW.NFS["Data", y, LIST[
IFUPW.NFS["StackDecodeFill", x, LIST[decode[0], decode[1]]],
IFUPW.NFS["StackIn", x, LIST[CDF.Glue[t:conn, b:conn, r:conn], drs ]],
IFUPW.NFS["StackBot2", x, LIST[
IFUPW.NFS["StackBot1", x, LIST[
CDF.Glue[l: ext, r: conn],
IFUPW.NFS["StackBot0",y,LIST[
aControl[0],
bControl[0] ]] ]],
IFUPW.NFS["StackBot",y,LIST[
aControl[1],
bControl[1] ]]
]] ]] ]] };
StackControl: Frame ←
CDF.NewExpandFrame["Control", StackControlProc];
StackControler: PUBLIC Frame ← IFUPW.NFS[module, y, LIST[
IFUPWControl.DriverFill[],
StackControl,
IFUPWControl.DriverFill[],
CDF.Glue[t:conn, b:conn, r:diff],
StackIndexing
] ];
StackControlerCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], StackControler, cmd ] };
StackControlerCD: IFUPW.PWUserProc =
{RETURN[CDF.FrameToObject[StackControler, design]]};
Commander.Register [proc:   StackControlerCT,  key: module];
IFUPW.Register  [userProc: StackControlerCD,  name: module];
END.