DIRECTORY Commander, Dragon, DragOpsCross, IFUPLAFetchControl, IO, PLAOps; IFUPLAFetchControlImpl: CEDAR PROGRAM IMPORTS Commander, IO, PLAOps = BEGIN OPEN IFUPLAFetchControl, PO: PLAOps; FetchControlPLA: PLAOps.PLA; GenFetchControlPLA: PUBLIC PROC = { pBusFaultIsSig: Dragon.PBusFaults _ LAST [Dragon.PBusFaults]; jump: PO.BoolExpr _ BE[m:[nextMacroJump: TRUE], d:[nextMacroJump: TRUE]]; enabled: PO.BoolExpr _ BE[m:[iPFaulted: TRUE], d:[iPFaulted: FALSE]]; reject: PO.BoolExpr _ BE[m:[iPReject: TRUE], d:[iPReject: TRUE]]; jumpPending: PO.BoolExpr _ BE[m:[jumpPending: TRUE], d:[jumpPending: TRUE]]; fetching: PO.BoolExpr _ BE[m:[fetching: TRUE], d:[fetching: TRUE]]; roomFor1: PO.BoolExpr _ PO.Not[BE[m:[fetchBytesM1: 28], d:[fetchBytesM1: 12]] ]; roomFor2: PO.BoolExpr _ PO.Not[BE[m:[fetchBytesM1: 24], d:[fetchBytesM1: 8]] ]; iPFaulted: PO.BoolExpr _ BE[m:[iPFaulted: TRUE], d:[iPFaulted: TRUE]]; newFault: PO.BoolExpr _ BE[m:[iPFaulting: TRUE], d:[iPFaulting: TRUE]]; jmpOrJmpPend: PO.BoolExpr _ PO.Or[jump, jumpPending]; roomForFetch: PO.BoolExpr _ PO.Or[roomFor2, PO.And[PO.Not[fetching], roomFor1]]; Set[out:[jumpPending: TRUE], s:PO.And[enabled, jmpOrJmpPend, reject ] ]; Set[out:[newFetch: TRUE], -- sets IPCmnd3A to Fetch in next A s:PO.And[ enabled, PO.Not[reject], PO.Or[roomForFetch, jmpOrJmpPend] ] ]; Set[out:[fetching: TRUE], -- enables write in next B s:PO.And[ enabled, PO.Or[ PO.And[ reject, fetching], PO.And[PO.Not[reject], roomForFetch], PO.And[PO.Not[reject], jmpOrJmpPend] ] ] ]; Set[out:[iPFaulted: TRUE], s:PO.And[ PO.Not[jmpOrJmpPend], PO.Or[BE[m:[reset: TRUE], d:[reset: TRUE]], newFault, iPFaulted] ] ]; Set[out:[fetchWtIndexCtl: clear], s: jmpOrJmpPend ]; Set[out:[fetchWtIndexCtl: hold], s:PO.And[ PO.Not[jmpOrJmpPend], PO.Or[PO.Not[fetching], reject, iPFaulted] ] ]; Set[out:[fetchWtIndexCtl: inc], s:PO.And[ PO.Not[jmpOrJmpPend], fetching, PO.Not[reject], PO.Not[iPFaulted] ] ]; }; BE: PROC [m, d: FetchControlIn] RETURNS[PO.BoolExpr] = { mRef: REF FetchControlIn _ NARROW[FetchControlPLA.mask]; dRef: REF FetchControlIn _ NARROW[FetchControlPLA.data]; mRef^ _ m; dRef^ _ d; RETURN[PO.GetBEForDataMask[FetchControlPLA]]}; Set: PROC [s: PO.BoolExpr _ NIL, m, d: FetchControlIn _ [ ], out: FetchControlOut] = { res: REF FetchControlOut _ NARROW[FetchControlPLA.out]; IF s=NIL THEN s _ BE[m,d] ELSE s _ PO.And[s, BE[m,d] ]; res^ _ out; PO.SetOutForBE[FetchControlPLA, s]}; GenFetchControl: Commander.CommandProc = { filename: IO.ROPE _ PO.DefaultCMDLine[cmd.commandLine, defaultFile]; FetchControlPLA _ PO.NewPLA["IFUPLAFetchControl.FetchControlIn", "IFUPLAFetchControl.FetchControlOut"]; GenFetchControlPLA[]; [ ] _ PO.ConvertTermListToCompleteSum[FetchControlPLA.termList, FALSE, FALSE, cmd.out]; [ ] _ PO.FindAMinimalCover[FetchControlPLA.termList, 120, cmd.out]; PO.WritePLAFile[filename, cmd.out, FetchControlPLA] }; defaultFile: IO.ROPE = "IFUPLAFetchControl.ttt"; doc: IO.ROPE = "Expects the name of a ttt file"; Commander.Register[key:"GenFetchControl", proc: GenFetchControl, doc: doc]; END. ¬IFUPLAFetchControlImpl.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Last edited by Curry, July 8, 1986 7:53:03 pm PDT McCreight, June 6, 1986 6:11:48 pm PDT FetchControlProc: PROC[args: FetchControlIn] RETURNS[result: FetchControlOut]; Set[out:[incrPrefetch: TRUE], -- increment addr (AFTER sending old on next phase A) s:PO.And[enabled, PO.Not[reject], roomForFetch, PO.Not[jmpOrJmpPend]] ]; ΚŒ˜šΠbl™Jšœ<™šœžœ˜ Jšœ˜Jšžœ ˜Jšžœ%˜'J˜——šœžœ œ œ™TJšœžœžœžœ™HJ™—šœžœ ˜6šœžœ˜ Jšœ˜šžœ˜Jšžœ˜Jšžœžœ˜%Jšžœžœ"˜+J˜———šœžœ˜šœžœ˜ Jšžœ˜Jšžœžœ žœ žœ˜E——J˜šœ4˜4J˜—šœ ˜ šœžœ˜ Jšžœ˜Jšžœžœ(˜0J˜——šœ˜šœžœ˜ Jšžœ˜Jšœ ˜ Jšžœ ˜Jšžœ˜——Jšœ˜J˜J˜J˜——šžœžœžœžœ˜8Jšœžœžœ˜9Jšœžœžœ˜9Jšœžœžœ%˜D—J˜šŸœžœžœ žœ7˜VJšœžœžœ˜7šžœž˜Jšžœ žœ˜Jšžœžœžœ˜—Jšœ žœ"˜0—J˜šœ*˜*Jšœ žœžœžœ.˜DJšœžœS˜gJšœ˜Jšœžœ8žœžœ ˜WJšœžœ;˜CJšžœ4˜6—J˜J˜Jšœ žœžœ˜0Jšœžœžœ$˜2šœM˜MJ˜—Jšžœ˜J™˜™J™———…— 0h