DIRECTORY CD, CDColors, CDLayers, CDEvents, CDIO, CDPanel, CDPanelExtras, CDTipEtc, CMosB, ColorMaps, FileNames, Rope, TerminalIO, TokenIO; CMosBImpl: CEDAR PROGRAM IMPORTS CD, CDColors, CDLayers, CDEvents, CDIO, CDPanel, CDPanelExtras, CDTipEtc, ColorMaps, FileNames, TerminalIO, TokenIO EXPORTS CMosB SHARES CDLayers = BEGIN cmosB: PUBLIC CD.Technology; lambda: CD.Number = CMosB.lambda; ndif: PUBLIC CD.Layer; pdif: PUBLIC CD.Layer; wndif: PUBLIC CD.Layer; wpdif: PUBLIC CD.Layer; pwell: PUBLIC CD.Layer; nwell: PUBLIC CD.Layer; pwellCont: PUBLIC CD.Layer; nwellCont: PUBLIC CD.Layer; pol: PUBLIC CD.Layer; met: PUBLIC CD.Layer; met2: PUBLIC CD.Layer; ovg: PUBLIC CD.Layer; cut: PUBLIC CD.Layer; cut2: PUBLIC CD.Layer; bur: PUBLIC CD.Layer; imp: PUBLIC CD.Layer; comment: PUBLIC CD.Layer; WriteTechnologyKey: CDEvents.EventProc = BEGIN TokenIO.WriteAtom[$CMosB]; TokenIO.WriteInt[1]; END; ReadTechnologyKey: CDEvents.EventProc = BEGIN dont _ TRUE; IF TokenIO.ReadAtom[]=$CMosB THEN { version: INT = TokenIO.ReadInt[]; IF version=1 THEN dont_FALSE ELSE IF version=0 THEN { TerminalIO.WriteRope["***********************\n"]; TerminalIO.WriteRope["WARNING: objects using p-diffusion\n"]; TerminalIO.WriteRope["may be displaced; chat with Christian\n"]; TerminalIO.WriteRope["***********************\n"]; dont_FALSE }; }; IF dont THEN TerminalIO.WriteRope["CMosB version miss-match\n"]; END; InitKernel: PROC [] = BEGIN cmosB _ CD.RegisterTechnology[$cmosB, "CMosB", lambda]; ndif _ CD.NewLayer[cmosB, $ndif]; pdif _ CD.NewLayer[cmosB, $pdif]; wndif _ CD.NewLayer[cmosB, $wndif]; wpdif _ CD.NewLayer[cmosB, $wpdif]; pwell _ CD.NewLayer[cmosB, $pwel]; nwell _ CD.NewLayer[cmosB, $nwel]; pwellCont _ CD.NewLayer[cmosB, $pwelCont]; nwellCont _ CD.NewLayer[cmosB, $nwelCont]; pol _ CD.NewLayer[cmosB, $pol]; met _ CD.NewLayer[cmosB, $met]; met2 _ CD.NewLayer[cmosB, $met2]; ovg _ CD.NewLayer[cmosB, $ovg]; cut _ CD.NewLayer[cmosB, $cut]; cut2 _ CD.NewLayer[cmosB, $cut2]; ovg _ CD.NewLayer[cmosB, $ovg]; imp _ CD.NewLayer[cmosB, $imp]; bur _ CD.NewLayer[cmosB, $bur]; comment _ CD.NewLayer[cmosB, $comment]; CDLayers.MakeAbstract[abstract: wpdif, represents: pdif]; CDLayers.MakeAbstract[abstract: wndif, represents: ndif]; CDEvents.RegisterEventProc[$WriteTechnologyPrivate, WriteTechnologyKey, cmosB]; CDEvents.RegisterEventProc[$ReadTechnologyPrivate, ReadTechnologyKey, cmosB]; END; InitBricks: PROC [] = BEGIN bit4: CDColors.DisplayType = CDColors.DisplayType[bit4]; bw: CDColors.DisplayType = CDColors.DisplayType[bw]; f: CARDINAL = 1111h; nDiffColor: CARDINAL = 1; pDiffColor: CARDINAL = 2; met1Color: CARDINAL = 4; met2Color: CARDINAL = 8; polyColor: CARDINAL = 16; nWellColor: CARDINAL = 32; pWellColor: CARDINAL = 64; 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[ndif, Full8[nDiffColor], bit8]; CDColors.DefineColor[pdif, Full8[pDiffColor], bit8]; CDColors.DefineColor[met, Full8[met1Color], bit8]; CDColors.DefineColor[met2, Full8[met2Color], bit8]; CDColors.DefineColor[pol, Full8[polyColor], bit8]; CDColors.DefineColor[nwell, Full8[nWellColor], bit8]; CDColors.DefineColor[pwell, Full8[pWellColor], bit8]; CDColors.DefineColor[cut, Full8[black], bit8]; CDColors.DefineColor[cut2, Checker8[black, met1Color], bit8]; CDColors.DefineColor[nwellCont, Checker8[pDiffColor, met1Color], bit8]; CDColors.DefineColor[pwellCont, Checker8[nDiffColor, met1Color], bit8]; CDColors.DefineColor[ovg, Checker8[met1Color, met2Color], bit8]; CDColors.DefineColor[bur, Checker8[black, 0], bit8]; CDColors.DefineColor[imp, NEW[CDColors.Brick_[14, 14, 0, 0]], bit8]; CDColors.DefineColor[CD.backGround, NEW[CDColors.Brick _ [8, 0, 256*8, 0]], bit8]; CDColors.DefineColor[CD.highLightError, NEW[CDColors.Brick _ [255, 0, 0, 0]], bit8]; CDColors.DefineColor[CD.highLightShade, NEW[CDColors.Brick_[0, 255,0 , 255]], bit8]; CDColors.DefineColor[comment, Full8[black], bit8]; DefineDimmer8[ndif, nDiffColor]; DefineDimmer8[pdif, pDiffColor]; DefineDimmer8[met, met1Color]; DefineDimmer8[met2, met2Color]; DefineDimmer8[pol, polyColor]; DefineDimmer8[nwell, nWellColor]; DefineDimmer8[cut, black]; DefineDimmer8[cut2, black]; DefineDimmer8[comment, black]; CDColors.DefineColor[cut, NEW[CDColors.Brick_[7*f, 11*f, 7*f, 11*f]], bit4]; CDColors.DefineColor[cut, NEW[CDColors.Brick_[7*f, 11*f, 7*f, 11*f]], bw]; CDColors.DefineColor[comment, NEW[CDColors.Brick_[11*f, 11*f, 11*f, 11*f]], bit4]; CDColors.DefineColor[comment, NEW[CDColors.Brick_[7*f, 11*f, 13*f, 14*f]], bw]; CDColors.DefineColor[ndif, NEW[CDColors.Brick_[1*f, 1*f, 1*f, 1*f]], bit4]; CDColors.DefineColor[ndif, NEW[CDColors.Brick_[4*f, f, 4*f, f]], bw]; CDColors.DefineColor[pdif, NEW[CDColors.Brick_[1*f, 3*f, 1*f, 1*f]], bit4]; CDColors.DefineColor[pdif, NEW[CDColors.Brick_[5*f, f, 4*f, f]], bw]; CDColors.DefineColor[pwellCont, NEW[CDColors.Brick_[1*f, 1*f, 0*f, 1*f]], bit4]; CDColors.DefineColor[pwellCont, NEW[CDColors.Brick_[0*f, f, 4*f, f]], bw]; CDColors.DefineColor[nwellCont, NEW[CDColors.Brick_[1*f, 1*f, 2*f, 1*f]], bit4]; CDColors.DefineColor[nwellCont, NEW[CDColors.Brick_[2*f, f, 4*f, f]], bw]; CDColors.DefineColor[pol, NEW[CDColors.Brick_[4*f, 4*f, 4*f, 4*f]], bit4]; CDColors.DefineColor[pol, NEW[CDColors.Brick_[8*f, 4*f, 2*f, 1*f]], bw]; CDColors.DefineColor[met, NEW[CDColors.Brick_[2*f, 2*f, 2*f, 2*f]], bit4]; CDColors.DefineColor[met, NEW[CDColors.Brick_[8*f, 2*f, 0, 0]], bw]; CDColors.DefineColor[met2, NEW[CDColors.Brick_[222h, 2222h, 0F222h, 2222h]], bit4]; CDColors.DefineColor[met2, NEW[CDColors.Brick_[8*f, 8*f, 2*f, 2*f]], bw]; CDColors.DefineColor[nwell, NEW[CDColors.Brick_[8, 0, 0, 0]], bit4]; CDColors.DefineColor[nwell, NEW[CDColors.Brick_[4*f, 0, 0, 0]], bw]; CDColors.DefineColor[pwell, NEW[CDColors.Brick_[4, 0, 0, 0]], bit4]; CDColors.DefineColor[pwell, NEW[CDColors.Brick_[2*f, 0, 0, 0]], bw]; CDColors.DefineColor[ovg, NEW[CDColors.Brick_[8*f, 8*f, 8*f, 8*f]], bit4]; CDColors.DefineColor[ovg, NEW[CDColors.Brick_[4*f, 14*f, 4*f, 0*f]], bw]; CDColors.DefineColor[cut2, NEW[CDColors.Brick_[3*f, 14*f, 3*f, 14*f]], bit4]; CDColors.DefineColor[cut2, NEW[CDColors.Brick_[3*f, 14*f, 3*f, 14*f]], bw]; CDColors.DefineColor[bur, NEW[CDColors.Brick_[11*f, 11*f, 11*f, 11*f]], bit4]; CDColors.DefineColor[bur, NEW[CDColors.Brick_[4*f, 14*f, 4*f, 0*f]], bw]; CDColors.DefineColor[imp, NEW[CDColors.Brick_[14*f, 14*f, 14*f, 14*f]], bit4]; CDColors.DefineColor[imp, NEW[CDColors.Brick_[2*f, 0, 2*f, 0]], bw]; CDColors.DefineColor[wpdif, NEW[CDColors.Brick_[3*f, 14*f, 3*f, 14*f]], bit4]; CDColors.DefineColor[wpdif, NEW[CDColors.Brick_[3*f, 14*f, 3*f, 14*f]], bw]; ColorMaps.RegisterMenu["cmos-b", CDIO.MakeName["cmosb", "ColorMap", FileNames.CurrentWorkingDirectory[]]]; END; InitUserInterface: PROC [] = BEGIN CDPanel.DefineLayerEntry[cmosB, ndif, "ndif", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, wpdif, "wpdif", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, pol, "pol", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, met, "met", 0, 3*lambda]; CDPanel.DefineLayerEntry[cmosB, pwellCont, "p-wCnt", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, nwellCont, "n-wCnt", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, nwell, "nwell", 0, 0]; CDPanel.DefineLayerEntry[cmosB, met2, "met2", 0, 4*lambda]; CDPanel.DefineLayerEntry[cmosB, comment, "comment", 0, lambda/2]; CDPanel.DefineLayerEntry[cmosB, ovg, "ovg", 0, 0]; CDPanel.DefineLayerEntry[cmosB, cut, "cut", 0, 0]; CDPanel.DefineLayerEntry[cmosB, cut2, "cut2", 0, 0]; CDPanel.DefineLayerEntry[cmosB, pwell, "(pwell)", 0, 0]; CDPanel.DefineLayerEntry[cmosB, pdif, "(pdif)", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, wndif, "(wndif)", 0, 2*lambda]; CDPanel.DefineLayerEntry[cmosB, bur, "bur", 0, 0]; CDPanel.DefineLayerEntry[cmosB, imp, "imp", 0, 0]; CDPanel.DefineIntEntry[cdValueKey: $CDxSelectNewMode, tech: cmosB, text: "select new:", min: 0, max: 1, default: 1]; CDPanel.DefineNewLine[cmosB]; CDPanelExtras.DefineIntEntryX[cdValueKey: $CDxStepValue, tech: cmosB, text: "step moves size:", min: 1, default: lambda]; CDPanel.DefineNewLine[cmosB]; CDTipEtc.SetIcon[cmosB, "Chipndale.icons", 3]; CDTipEtc.SetPanelIcon[cmosB, "Chipndale.icons", 4]; CDTipEtc.SetTipTable[cmosB, "Standard"]; TerminalIO.WriteRope["cmos-B impl\n"]; END; InitKernel[]; InitBricks[]; InitUserInterface[]; END. :CMosBImpl.mesa Copyright c 1983, 1985 by Xerox Corporation. All rights reserved. by Ch. Jacobi, August 11, 1983 3:56 pm last edited Christian Jacobi, February 19, 1986 7:39:13 pm PST --layers --events --8bit colors-- --8 bit colors -- no dimmers for nwelCont, pwelCont, and ovg --wpdif must never be drawn ΚΊ˜codešœ™Kšœ Οmœ7™BKšœ&™&Kšœ>™>K˜—šΟk ˜ Kšžœ˜Kšœ ˜ Kšœ ˜ K˜ Kšœ˜Kšœ˜K˜K˜ Kšœ˜Kšœ ˜ Kšœ ˜ Kšœ˜Kšœ ˜ Kšœ˜—K˜šΠbl œžœž˜Kšžœžœr˜|Kšžœ˜ Kšžœ ˜—šž˜K˜—Kšœžœžœ ˜K˜Kšœžœ˜!K˜Kšœžœžœ˜Kšœžœžœ˜K˜Kšœžœžœ˜Kšœžœžœ˜K˜Kšœžœžœ˜Kšœžœžœ˜Kšœ žœžœ˜Kšœ žœžœ˜K˜Kšœžœžœ˜Kšœžœžœ˜Kšœžœžœ˜K˜Kšœžœžœ˜Kšœžœžœ˜Kšœžœžœ˜Kšœžœžœ˜Kšœžœžœ˜K˜Kšœ žœžœ˜K˜šΟbœ˜(Kšž˜Kšœ˜Kšœ˜šžœ˜K˜——š œ˜'Kšž˜Kšœžœ˜ šžœžœ˜$Kšœ žœ˜!Kšžœ žœž˜šžœžœ žœ˜Kšœ2˜2Kšœ=˜=Kšœ@˜@Kšœ2˜2Kšœž˜ Kšœ˜—K˜—Kšžœžœ4˜@Kšžœ˜K˜—šΟn œžœ˜Kšž˜Kšœžœ-˜7K™Kšœžœ˜!Kšœžœ˜!Kšœžœ˜#Kšœžœ˜#Kšœžœ˜"Kšœžœ˜"Kšœ žœ˜*Kšœ žœ˜*Kšœžœ˜Kšœžœ˜Kšœžœ˜!Kšœžœ˜Kšœžœ˜Kšœžœ˜!Kšœžœ˜Kšœžœ˜Kšœžœ˜Kšœ žœ˜'Kšœ9˜9Kšœ9˜9K™KšœO˜OKšœM˜MKšžœ˜K˜—K˜š‘ œžœ˜Kšž˜Kšœ8˜8Kšœ4˜4Kšœžœ ˜J˜Kšœ™Jšœ žœ˜Jšœ žœ˜Jšœ žœ˜Jšœ žœ˜Jšœ žœ˜Jšœ žœ˜Jšœ žœ˜Jšœžœ˜K˜š ‘œžœ žœžœžœ˜CJšžœ˜JšžœžœP˜ZJšžœ˜—J˜š‘ œžœžœžœ˜6Jšžœ˜Jšœ?˜?Jšžœ˜—J˜š ‘œžœžœžœžœ˜?Jšž˜Jšžœ˜Jšžœ˜—J˜Jšœ™Jšœ4˜4Jšœ4˜4Jšœ2˜2Jšœ4˜4Jšœ2˜2Jšœ5˜5Jšœ5˜5Jšœ.˜.Jšœ=˜=JšœG˜GJšœG˜GJšœ@˜@Jšœ4˜4Jšœžœ'˜DJšœžœ žœ+˜RJšœžœžœ)˜TJšœžœžœ)˜TKšœ2˜2J˜Jšœ ˜ Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜Jšœ˜Jšœ˜Jšœ-™-K˜Kšœžœ/˜LKšœžœ-˜JK˜Kšœžœ1˜RKšœžœ.˜OK˜Kšœžœ-˜KKšœžœ'˜EK˜Kšœžœ-˜KKšœžœ'˜EK˜Kšœ žœ-˜PKšœ žœ'˜JK˜Kšœ žœ-˜PKšœ žœ'˜JK˜Kšœžœ-˜JKšœžœ+˜HK˜Kšœžœ-˜JKšœžœ'˜DK˜Kšœžœ5˜SKšœžœ+˜IK˜Kšœžœ%˜DKšœžœ%˜DK˜Kšœžœ%˜DKšœžœ%˜DK˜Kšœžœ-˜JKšœžœ,˜IK˜Kšœžœ/˜MKšœžœ-˜KK˜Kšœžœ1˜NKšœžœ,˜IK˜Kšœžœ1˜NKšœžœ'˜DK˜Kšœ™Kšœžœ/˜NKšœžœ-˜LK˜Kšœ!žœE˜jKšžœ˜K˜—š‘œžœ˜Kšž˜Kšœ;˜;Kšœ=˜=Kšœ9˜9Kšœ9˜9KšœB˜BKšœB˜BKšœ6˜6Kšœ;˜;KšœA˜AK˜Kšœ2˜2Kšœ2˜2Kšœ4˜4Kšœ8˜8Kšœ=˜=Kšœ?˜?Kšœ2˜2Kšœ2˜2K˜šœB˜BK˜1—K˜Kšœ{˜{K˜K˜Kšœ.˜.Kšœ3˜3Kšœ(˜(K˜K˜&Kšžœ˜—K˜K˜ Kšœ ˜ Kšœ˜Kšžœ˜K˜—…—!π+δ