NMosImpl.mesa
Copyright © 1983, 1986 by Xerox Corporation. All rights reserved.
by Ch. Jacobi, August 11, 1983 3:56 pm
Last Edited by: Christian Jacobi, August 4, 1986 8:38:16 pm PDT
DIRECTORY
CD,
CDColors,
CDEvents,
CDIO,
CDLayers,
CDOps,
CDPanel,
CDSequencer,
CDEnvironment,
CDViewer,
ColorMaps,
Commander USING [CommandProc, Register],
FileNames,
ImagerColor USING [ColorFromRGB],
IO,
NMos,
Rope,
TerminalIO,
TokenIO;
NMosImpl: CEDAR PROGRAM
IMPORTS CD, CDColors, CDEvents, CDIO, CDLayers, CDOps, CDPanel, CDSequencer, CDEnvironment, CDViewer, ColorMaps, Commander, FileNames, ImagerColor, IO, TerminalIO, TokenIO
EXPORTS NMos =
BEGIN
nmos: PUBLIC CD.Technology;
pol: PUBLIC CD.Layer;
dif: PUBLIC CD.Layer;
met: PUBLIC CD.Layer;
met2: PUBLIC CD.Layer;
imp: PUBLIC CD.Layer;
imp0: PUBLIC CD.Layer;
impWeak: PUBLIC CD.Layer;
ovg: PUBLIC CD.Layer;
bur: PUBLIC CD.Layer;
cut: PUBLIC CD.Layer;
cut2: PUBLIC CD.Layer;
RegisterObjectClass: PUBLIC PROC [a: ATOM] RETURNS [CD.ObjectClass] =
BEGIN
RETURN [ CD.RegisterObjectClass[a, [technology: nmos]] ];
END;
Load: Commander.CommandProc =
BEGIN
cmd.out.PutRope["nmos loaded\n"];
END;
NewNWorld: Commander.CommandProc =
BEGIN
design: CD.Design ← CDOps.CreateDesign[nmos];
[] ← CDViewer.CreateViewer[design];
END;
SetLayerDif: PROC [comm: CDSequencer.Command] =
BEGIN
TerminalIO.WriteRope["diffusion for default\n"];
CDLayers.SetCurrentLayer[comm.design, dif]
END;
SetLayerPol: PROC [comm: CDSequencer.Command] =
BEGIN
TerminalIO.WriteRope["poly for default\n"];
CDLayers.SetCurrentLayer[comm.design, pol]
END;
SetLayerMet: PROC [comm: CDSequencer.Command] =
BEGIN
TerminalIO.WriteRope["metal for default\n"];
CDLayers.SetCurrentLayer[comm.design, met]
END;
SetLayerMet2: PROC [comm: CDSequencer.Command] =
BEGIN
TerminalIO.WriteRope["metal-2 for default\n"];
CDLayers.SetCurrentLayer[comm.design, met2]
END;
WriteTechnologyKey: CDEvents.EventProc =
BEGIN
TokenIO.WriteAtom[$Version];
TokenIO.WriteInt[0];
END;
ReadTechnologyKey: CDEvents.EventProc =
BEGIN
dont←TRUE;
IF TokenIO.ReadAtom[]=$Version THEN
IF TokenIO.ReadInt[]=0 THEN dont←FALSE;
IF dont THEN TerminalIO.WriteRope["NMos version miss-match\n"];
END;
InitBricks: PROC [] =
BEGIN
Init8Patterns: PROC [] =
--all parameter are discarded
BEGIN
green1: CARDINAL = 1;
yellow: CARDINAL = 2;
blue: CARDINAL = 4;
pinktr: CARDINAL = 8;
red: CARDINAL = 16;
black: CARDINAL = 127;
Checker8: PROC[col1, col2: CARDINAL] RETURNS[REF CDColors.Brick] =
BEGIN
RETURN[NEW[CDColors.Brick ← [col1*256+col2, col2*256+col1, col1*256+col2, col2*256+col1]]]
END;
DefineDimmer8: PROC[lev: CD.Layer, color: CARDINAL] =
BEGIN
CDColors.DefineColor[lev, Checker8[color, 0], bit8, pushedOut];
END;
Full8: PROC[color: CARDINAL] RETURNS [b: REF CDColors.Brick] =
BEGIN
RETURN[Checker8[color, color]]
END;
CDColors.DefineColor[dif, Full8[green1], bit8];
CDColors.DefineColor[met, Full8[blue], bit8];
CDColors.DefineColor[met2, Full8[pinktr], bit8];
CDColors.DefineColor[pol, Full8[red], bit8];
CDColors.DefineColor[cut, Full8[black], bit8];
CDColors.DefineColor[imp, Full8[yellow], bit8];
CDColors.DefineColor[imp0, Checker8[yellow, 0], bit8];
CDColors.DefineColor[impWeak, Checker8[yellow, 0], bit8];
CDColors.DefineColor[cut2, Checker8[black, blue], bit8];
CDColors.DefineColor[bur, Checker8[black, 0], bit8];
CDColors.DefineColor[ovg, Checker8[blue, pinktr], bit8];
CDColors.DefineColor[CD.backgroundLayer, NEW[CDColors.Brick ← [8, 0, 256*8, 0]], bit8];
CDColors.DefineColor[CD.errorLayer, NEW[CDColors.Brick ← [255, 0, 0, 0]], bit8];
CDColors.DefineColor[CD.shadeLayer, NEW[CDColors.Brick←[0, 255,0 , 255]], bit8];
DefineDimmer8[dif, green1];
DefineDimmer8[met, blue];
DefineDimmer8[met2, pinktr];
DefineDimmer8[pol, red];
DefineDimmer8[imp, yellow];
DefineDimmer8[cut, black];
DefineDimmer8[cut2, black];
-- no change for bur and ovgc for this background
-- no change for bur, nwelCont, pwelCont, and ovgc for this background
END;
s1: CARDINAL = 1;
s2: CARDINAL = 16;
s3: CARDINAL = 16*16;
s4: CARDINAL = 16*16*16;
ss: CARDINAL = s1+s2+s3+s4;
sf: CARDINAL = s1+s3;
--4bit colors--
green: CARDINAL = 1;
blue: CARDINAL = 2;
red: CARDINAL = 4;
yellow: CARDINAL = 14;
CDColors.DefineColor[cut, NEW[CDColors.Brick←[7*ss, 11*ss, 7*ss, 11*ss]], bit4];
CDColors.DefineColor[cut, NEW[CDColors.Brick←[7*ss, 11*ss, 7*ss, 11*ss]], bw];
CDColors.DefineColor[dif, NEW[CDColors.Brick←[green*ss, green*ss, green*ss, green*ss]], bit4];
CDColors.DefineColor[dif, NEW[CDColors.Brick←[4*ss, ss, 4*ss, ss]], bw];
CDColors.DefineColor[pol, NEW[CDColors.Brick←[8*ss, 4*ss, 2*ss, 1*ss]], bw];
CDColors.DefineColor[pol, NEW[CDColors.Brick←[red*ss, red*ss, red*ss, red*ss]], bit4];
CDColors.DefineColor[met, NEW[CDColors.Brick←[8*ss, 2*ss, 0, 0]], bw];
CDColors.DefineColor[met, NEW[CDColors.Brick←[blue*ss, blue*ss, blue*ss, blue*ss]], bit4];
CDColors.DefineColor[imp, NEW[CDColors.Brick←[yellow*ss, yellow*ss, yellow*ss, yellow*ss]], bit4];
CDColors.DefineColor[imp, NEW[CDColors.Brick←[2*ss, 0, 2*ss, 0]], bw];
CDColors.DefineColor[imp0, NEW[CDColors.Brick←[14, 14, 0, 1]], bit4];
CDColors.DefineColor[imp0, NEW[CDColors.Brick←[2*ss, 0, 2*ss, 1]], bw];
CDColors.DefineColor[impWeak, NEW[CDColors.Brick←[14, 14, 0, 2]], bit4];
CDColors.DefineColor[impWeak, NEW[CDColors.Brick←[2*ss, 0, 2*ss, 2]], bw];
CDColors.DefineColor[met2, NEW[CDColors.Brick←[2*(s1+s2+s3), 2*ss, 2*(s1+s2+s3)+15*s4, 2*ss]], bit4];
CDColors.DefineColor[met2, NEW[CDColors.Brick←[8*ss, 8*ss, 2*ss, 2*ss]], bw];
CDColors.DefineColor[bur, NEW[CDColors.Brick←[11*ss, 11*ss, 11*ss, 11*ss]], bit4];
CDColors.DefineColor[bur, NEW[CDColors.Brick←[4*ss, 14*ss, 4*ss, 0*ss]], bw];
CDColors.DefineColor[ovg, NEW[CDColors.Brick←[4*ss, 14*ss, 4*ss, 0*ss]], bw];
CDColors.DefineColor[ovg, NEW[CDColors.Brick←[8*ss, 8*ss, 8*ss, 8*ss]], bit4];
CDColors.DefineColor[cut2, NEW[CDColors.Brick←[3*ss, 14*ss, 3*ss, 14*ss]], bw];
CDColors.DefineColor[cut2, NEW[CDColors.Brick←[3*ss, 14*ss, 3*ss, 14*ss]], bit4];
CDColors.DefineIColor[dif, ImagerColor.ColorFromRGB[[0, 1, 0]], bit8];
CDColors.DefineIColor[pol, ImagerColor.ColorFromRGB[[1, 0, 0]], bit8];
CDColors.DefineIColor[met, ImagerColor.ColorFromRGB[[0, 0, 1]], bit8];
CDColors.DefineIColor[met2, ImagerColor.ColorFromRGB[[0.7, 0.4, 0.7]], bit8];
CDColors.DefineIColor[ovg, ImagerColor.ColorFromRGB[[0.5, 0.5, 0.5]], bit8];
CDColors.DefineIColor[cut, ImagerColor.ColorFromRGB[[0, 0, 0.1]], bit8];
CDColors.DefineIColor[cut2, ImagerColor.ColorFromRGB[[0, 0.1, 0]], bit8];
CDColors.DefineIColor[bur, ImagerColor.ColorFromRGB[[0.1, 0.1, 0]], bit8];
CDColors.DefineIColor[imp, ImagerColor.ColorFromRGB[[1, 1, 0]], bit8];
CDColors.DefineIColor[imp0, ImagerColor.ColorFromRGB[[0.8, 0.8, 0]], bit8];
CDColors.DefineIColor[impWeak, ImagerColor.ColorFromRGB[[0.9, 0.9, 0]], bit8];
Init8Patterns[]
END;
Init: PROC [] =
BEGIN
nmos ← CD.RegisterTechnology[$nmos, "nmos", 2];
IF nmos=NIL THEN ERROR;
cut ← CD.NewLayer[nmos, $cut];
pol ← CD.NewLayer[nmos, $pol];
dif ← CD.NewLayer[nmos, $dif];
met ← CD.NewLayer[nmos, $met];
imp ← CD.NewLayer[nmos, $imp];
imp0 ← CD.NewLayer[nmos, $imp0];
impWeak ← CD.NewLayer[nmos, $impWeak];
ovg ← CD.NewLayer[nmos, $ovg];
bur ← CD.NewLayer[nmos, $bur];
met2 ← CD.NewLayer[nmos, $met2];
cut2 ← CD.NewLayer[nmos, $cut2];
ColorMaps.RegisterMenu["NMos", CDIO.MakeName["NMos", "ColorMap", FileNames.CurrentWorkingDirectory[]]];
CDPanel.DefineLayerEntry[nmos, dif, "dif", 0, 2*NMos.lambda];
CDPanel.DefineLayerEntry[nmos, pol, "pol", 0, 2*NMos.lambda];
CDPanel.DefineLayerEntry[nmos, met, "met", 0, 3*NMos.lambda];
CDPanel.DefineLayerEntry[nmos, met2, "met2", 0, 4*NMos.lambda];
CDPanel.DefineLayerEntry[nmos, cut, "cut", 0, 0];
CDPanel.DefineLayerEntry[nmos, cut2, "cut2", 0, 0];
CDPanel.DefineLayerEntry[nmos, ovg, "ovg", 0, 0];
CDPanel.DefineLayerEntry[nmos, imp, "imp", 0, 0];
CDPanel.DefineLayerEntry[nmos, imp0, "imp0", 0, 0];
CDPanel.DefineLayerEntry[nmos, impWeak, "impWeak", 0, 0];
CDPanel.DefineIntEntry[cdValueKey: $CDxSelectNewMode, tech: nmos,
text: "select new:", min: 0, max: 1, default: 1, lambda: 1];
CDPanel.DefineIntEntry[cdValueKey: $CDxStepValue, tech: nmos, text: "step moves size:", min: 1, default: 1];
CDPanel.DefineNewLine[nmos];
CDEvents.RegisterEventProc[$WriteTechnologyPrivate, WriteTechnologyKey, nmos];
CDEvents.RegisterEventProc[$ReadTechnologyPrivate, ReadTechnologyKey, nmos];
CDSequencer.ImplementCommand[$SetLayerNDif, SetLayerDif, nmos];
CDSequencer.ImplementCommand[$SetLayerPol, SetLayerPol, nmos];
CDSequencer.ImplementCommand[$SetLayerMet, SetLayerMet, nmos];
CDSequencer.ImplementCommand[$SetLayerMet2, SetLayerMet2, nmos];
CDEnvironment.SetTipTable[nmos, "Standard"];
CDEnvironment.SetIcon[nmos, "Chipndale.icons", 5];
CDEnvironment.SetPanelIcon[nmos, "Chipndale.icons", 4];
InitBricks[];
Commander.Register[
key: "///Commands/CDNmos",
proc: Load,
doc: "loads nmos ChipNDale"
];
Commander.Register[
key: "///Commands/CDNewNmos",
proc: NewNWorld,
doc: "Creates new nmos design"
];
TerminalIO.WriteRope["nmos impl\n"];
END;
Init[];
END.