ChipmonkNMosWrite.mesaCopyrightc1984byXeroxCorporation.Allrightsreserved.LastEditedby:Jacobi,February20,198412:06pmLastEditedby:Jacobi,March25,19865:05:06pmPSTLastEditedby:RossJuly18,19861:49:46pmPDTDIRECTORYAscii,Atom,BasicsUSING[BITOR,BITSHIFT],CD,CDInstances,CDBasics,CDDirectory,CDIO,CDMarks,CDSimpleOps,CDOrient,CDPrivate,CDProperties,CDRects,CDRepetitions,CDSequencer,CDTexts,CDViewer,FileNames,FS,IO,NMos,NMosContacts,NMosTransistors,Rope,RuntimeError,TerminalIO;ChipmonkNMosWrite:CEDARMONITORIMPORTSAscii,Atom,Basics,CDInstances,CDBasics,CDDirectory,CDIO,CDMarks,CDSimpleOps,CDProperties,CDSequencer,FileNames,FS,IO,NMos,Rope,RuntimeError,TerminalIO=BEGINlambdaInChipmonk:INTEGER=2;--InChipndalewemustmakenoassumptionsaboutthe--valueoflambda.Itcan(anddoes)changefromtimetotime;--butweknowthatchipndaleslambdais>=2lambdaFactor:INT=NMos.lambda/lambdaInChipmonk;codeWordForDataFile:CARDINAL=123751B;instanceCode:INTEGER=1;transistorCode:INTEGER=2;contactCode:INTEGER=3;wireCode:INTEGER=4;pï_,î gï]„îxqîÅï]„pï]„î«îñîËîä î(Nî*—î.dï[Ýîxî”îÛî.îµî"|î$¹î'ÿî+¾ïZ5îxî”îÛî.îµî!î#Wî&�î+†î-ÐïXŽîxî”îÛî.îiîNî ‹î#Ñî(ºî+rïU?î gsïS—îxïQðîxïPHîxrî�ïPHïPHîusïPHîÙrî=ïPHïPHîösîÉïPHïPHrî¥ïPHïPHî_sî ãïPHïPHî!FrïN¡îxsî)ïN¡ïN¡ïLùîx ïKRîxïIªîx ïHîxïF[îxïD³îx ïC îxïAdîx ï?½îx ï>îxïsï¹îdî Iïjîxrîóïjïjî¾sïjî#®î%“ïÃîx rîdïÃïÃîÎsïÃî)îïîxrîïïî~sïîÙî¾ï sîx rîÖï sï sî@sï sîšîï Ìîxrî&ï Ìï Ìî�sï ÌîêîÏÿáTVm$2rectangleCode:INTEGER=5;textCode:INTEGER=6;busCode:INTEGER=7;repeatCode:INTEGER=8;stream:IO.STREAM;PushedState:ERROR=CODE;gMark:INT;OutWord:PROC[w:INT]=BEGINi:INTEGER=w;--trapsifnecessaryc:CARDINAL_LOOPHOLE[i,CARDINAL];IO.PutChar[stream,LOOPHOLE[c/256,CHAR]];IO.PutChar[stream,LOOPHOLE[cMOD256,CHAR]];END;OutNumber:PROC[n:CD.Number]=--doesalambdacorrectionBEGINi:INTEGER=n/lambdaFactor;--trapsifnecessaryc:CARDINAL=LOOPHOLE[i];IO.PutChar[stream,LOOPHOLE[c/256,CHAR]];IO.PutChar[stream,LOOPHOLE[cMOD256,CHAR]];END;OutCard:PROC[c:CARDINAL]=BEGINIO.PutChar[stream,LOOPHOLE[c/256]];IO.PutChar[stream,LOOPHOLE[cMOD256]];END;OutRope:PROC[r:Rope.ROPE]=BEGINleng:[0..256)=MIN[Rope.Length[r],255];IO.PutChar[stream,LOOPHOLE[leng,CHAR]];FORi:CARDINALIN[0..leng)DOIO.PutChar[stream,Rope.Fetch[base:r,index:i]];ENDLOOP;IFlengMOD2=0THENIO.PutChar[stream,LOOPHOLE[0,CHAR]];END;OutRopeUpper:PROC[r:Rope.ROPE]=BEGINleng:[0..256)=MIN[Rope.Length[r],255];IO.PutChar[stream,LOOPHOLE[leng,CHAR]];FORi:CARDINALIN[0..leng)DOIO.PutChar[stream,Ascii.Upper[Rope.Fetch[base:r,index:i]]];ENDLOOP;IFlengMOD2=0THENIO.PutChar[stream,LOOPHOLE[0,CHAR]];END;uïg/îEÉsï_,îx rîôï_,ï_,î]sï_,î¸î�ï]„îxrîÏï]„ï]„î8sï]„î“îxï[Ýîxrî­ï[Ýï[Ýîsï[ÝîrîWïZ5îx rîFïZ5ïZ5î¯sïZ5î îïïVæî gtîSïVæïVærîFïVæïVæî°tî�ïVæïVæsïU>î g rî¤ïU>ïU>î]sïU>î:rîïU>ïU>îêsîeïU>ïU>ïS—î grîPïS—ïS—îºsî[ïS—ïS—tïPHî gsî ïPHïPHrî ïPHïPHî²sïPHî±rîïPHïPHîßîªsî¶ïPHïPHî�rïN îxsïLøîxrîÙïLøïLøîCsïLøî�î‚pîïLøïLøî{îRî©sïKQîxrîïKQïKQîÜsïKQîÌrîYïKQïKQîsî§ïKQïKQî rî JïKQïKQî!sî&�ïKQïKQî&ärïI©îxsî¾ïI©ïI©îrî7ïI©ïI©îðsî †ïI©ïI©î éî"î#=rî&*ïI©ïI©î&õsî)ƒïI©ïI©î)ærïHîxsî¾ïHïHîrî7ïHïHîðsî †ïHïHî érî"ïHïHî#sïHî%`rî(NïHïHî)sî+¦ïHïHî, rïFZîxsîïFZïFZtïC î gsîxïC ïC rîvïC ïC îsïC îrîDïC ïC îsîõïC ïC îLî"8ïAcîxîïîîIî3 rï?¼îxsï>îxrîÙï>ï>îCsï>î�î‚îÍî î"Âpî$Dï>ï>î$½î(”î)ësï{cellCount_cellCount+1};ENDCASE=>NULL;END;EachEntryOutput:CDDirectory.EachEntryAction=--ignoresnameparameter,takesnamefromcell-dataitselfBEGINIFob.marked=gMarkTHENRETURN;ob.marked_gMark;WITHob.specificRefSELECTFROMcptr:CD.CellPtr=>{FORl:CD.InstanceList_cptr.contents,l.restWHILEl#NILDOIFl.first.ob.class.inDirectoryTHEN[]_EachEntryOutput[name:NIL,ob:l.first.ob];ENDLOOP;outputedCellCount_outputedCellCount+1;cellNameA[outputedCellCount]_ob;uïg/îEÉtï_,î gsîìï_,ï_,rîéï_,ï_,î‘sï_,î�rîªï_,ï_,îusî[ï_,ï_,î²î rï]…îxsï[ÝîxrïZ5îxsîïZ5ïZ5tïVæî gsî;ïVæïVærî9ïVæïVæîàsïVæîàrîÅïVæïVæî�sîvïVæïVæîÍî}rïU?îxsïS—îxïQðîxrïPHîxsîïPHïPHtïLùî gsî}ïLùïLùrî{ïLùïLùî#sïLùî"rîïLùïLùîÒsî¸ïLùïLùîî¯rïKRîxsïIªîxïHîxïF[îxïD´îxrïC îxsîïC ïC ï?½î g rî!ï?½ï?½î sî–ï?½ï?½ï>î grîÞï>ï>îÆsîSï>ï>ïsï4)îdîñï0Úî grîzï0Úï0ÚîNï0ÚîEï0Úîësîœï0Úï0ÚîórîÞï0Úï0Úî »sï0Úî!øî&rî'èï0Úï0Úî(Ñsî*¤ï0Úrï0Úî+ï0Úî/­sî1^ï0Úï0Úî1µrî5¡ï0Úï0Úî6}sï0Úî7»rî�ï0Úï0Úî>òï/2î g rîóï/2ï/2îÇï/2î¾sï/2îdrî,»ï/2ï/2î-˜ï/2î.Õsï/2î5�rï-‹îxsî4ï-‹rï-‹î—sï-‹î>rî'•ï-‹ï-‹î(qï-‹î)¯sî/æï-‹ï-‹î0Itï*<î g sîCï*<ï*<îAî*rï(”îxï&ìîxsï&ìî rî ï&ìï&ìî«ï&ìîßsï%Eî‰rîÜï%Eï%Eî§sî�ï%Eï%Eîäî–î, î$î%© rï#�î‰sï#�îŒrî!ï#�ï#�î sîaï#�ï#�rï!öîxsîï!öï!ötï§î gsîßï§ï§îÜî*²pïÿîxîïî™î= îðî"{î&î)\î.×rïXîxï°îxsï°îrîEï°ï°îþï°î sî$òï°ï°ï îxrïaîxsïaî rî ïaïaî«ïaîßsïºî‰rîÜïºïºî§sî�ïºïºîäî–î,rïîšsïîˆrîéïïî´sîšïïîñ î �î"* î*žrî-úïïî/sïî2[rî4ïïî5ïî6®ïkî¬sïkîSrî%êïkïkî&£sïkî)¯î*úî,‡rî;©ïkïkî<’sî=´ïkïkî>‘ïÃî rïî¬sîMïïï tîšî˜î %ï Íîšî&î'‘CTVm$?4OutCard[outputedCellCount];OutRopeUpper[cptr.name];OutSize[ob.size];OutCard[20000];--count???makeitbig,justincaseitissomekindofreferencecountOutList[cptr.contents];};rp:CDRepetitions.RepPtr=>NULL;ENDCASE=>IFob.class.inDirectoryTHEN{TerminalIO.WriteRope["?"];unKnowns_unKnowns+1;};END;sig:SIGNAL=CODE;OutputDesign:ENTRYPROC[d:CD.Design,s:IO.STREAM]=BEGINDoit:PROC[mark:CDMarks.MarkRange]=BEGINMOutputDesign[d,s,mark]END;CDMarks.DoWithMark[d,Doit];END;MOutputDesign:PROC[d:CD.Design,s:IO.STREAM,mark:INT]=BEGINENABLE{UNWIND=>cellNameA_NIL;PushedState=>{GOTOPushed};RuntimeError.BoundsFault=>{TerminalIO.WriteRope["BoundsFault,maybesomefeatureisnotrepresentableforchipmonk;proceedissecure\n"];SIGNALsig;GOTOFailed};RuntimeError.UNCAUGHT=>{TerminalIO.WriteRope["unknownerror,maybesomefeatureisnotrepresentableforchipmonk;proceedissecure\n"];SIGNALsig;GOTOFailed};};gMark_mark;freeAtom_1;auxAtom[0]_[older:0,younger:0];stream_s;design_d;unKnowns_unknownObjects_unknownAtoms_0;cellCount_outputedCellCount_0;uïg/îEÉsï_,îšï]…îšï[ÝîšïZ5îšpîïZ5ïZ5î�îî":î$lî(î)pî,î.©î0Oî3>î4•î6î9kî<ˆî>,ïXŽîmsïVçîšïU?îšïS˜î‰îÒî Êrî#_ïS˜ïS˜î$Hsî&ŸïS˜ïS˜rïQðî‰sïQðîŒrïPIîšsïPIîBrî sïPIïPIî!,sïPIî$8ïN¡î¬ïLúî¬ïKRî¬rïIªîxsîïIªïIªïD´î grîüïD´ïD´îœsïD´îírîÒïD´ïD´î�sîïD´ïD´tïAeî g sî·ïAeïAerîµïAeïAeînïAeî;sïAeîãrî ïAeïAeî Õsî!»ïAeïAeî"î'rî(”ïAeïAeî(þsî)ÚïAerïAeî*2sî.üïAeïAeî/ãrï?½îxtï>îxsî#ï>ï>rî!ï>ï>îÉsï>îÈî8î(Yrïî<³ ï&íîî¼î¬î#äî%P rï%Eî¬sï%Eîœrï#žî¬sï#žî�ï!öî¬ï Oîš rîYï Oï Oî?sï Oî"½î%Rï§î¬î)¼î-†î1÷î5Šî:2î;žî> ïîî¼î¬î#äî%P rïXî¬sïXîœï±î¬îhï î¬ïbîšïºîxîèîuïîxî¡î.ïkîx îìîyîéîvî#GïÄîxîèîuïîxîÇîTï uîxîuî î!†î# î-î.”ï Íîxî¸îEî"Bî#ÏêTVm$o5[]_CDDirectory.Enumerate[design,EachEntryCount];OutCard[codeWordForDataFile];OutCard[8];--versionnumberOutCard[cellCount];cellNameA_NEW[ARRAY[0..maxnum)OFCD.Object_ALL[NIL]];[]_CDDirectory.Enumerate[design,EachEntryOutput];IFoutputedCellCount#cellCountTHENERROR;OutPushedLevels[];OutCard[0];--pushedlayer0OutCard[0];--anychangesOutList[design.actual.first.specific.contents];cellNameA_NIL;IFunKnowns#0THEN{TerminalIO.WriteRope["**unknownfeatures:"];TerminalIO.WriteInt[unKnowns];TerminalIO.WriteLn[];};IFunknownObjects#0THEN{TerminalIO.WriteRope["**unknownobjects:"];TerminalIO.WriteInt[unknownObjects];TerminalIO.WriteLn[];};IFunknownAtoms#0THEN{TerminalIO.WriteRope["**unknownpropertiesorpropertynames:"];TerminalIO.WriteInt[unknownAtoms];TerminalIO.WriteLn[];};EXITSPushed=>{TerminalIO.WriteRope["OutputFailed(pushedincell)\n"]};Failed=>{TerminalIO.WriteRope["OutputFailed\n"]};END;OutPushedLevels:PROC[]=BEGINIFdesign.actual.rest#NILTHEN{TerminalIO.WriteRope["designisinpushedstate\n"];ERRORPushedState};END;freeAtom:INTEGER_1;AuxEntry:TYPE=RECORD[older,younger:INTEGER--doubly-linkedLRUlist--];auxAtom:REFARRAY[0..atomTableSize]OFAuxEntry=NEW[ARRAY[0..atomTableSize]OFAuxEntry];atomTableSize:INTEGER=256;atomTable:REFARRAY[1..atomTableSize]OFRope.ROPE--forshortI/O--=NEW[ARRAY[1..atomTableSize]OFRope.ROPE];ToRope:PROC[a:REFANY]RETURNS[r:Rope.ROPE]=BEGINIFa=NILTHENRETURN[NIL];WITHaSELECTFROMuïg/îEÉsï_,îxîÃîPî$öï]„îxï[Ýîx pî$ï[Ýï[Ýî�î›î0sïZ5îxïXŽîxî£rî/ïXŽïXŽîsîëïXŽrïXŽîOsïXŽîõ rî&ìïXŽïXŽî'ÈïXŽî)sî*¶ïXŽïXŽî+î/rî1 ïXŽïXŽî1ßsî3QïXŽrïXŽî3µsî5ÀïXŽïXŽî6#ïVæîxîÃîPî$örïU>îxsïU>îrî#9ïU>ïU>î#òïU>î&ÿsî+ïU>ïU>ïS—îxïQïîx pî¨ïQïïQïî"îî�îúsïPHîx pî¨ïPHïPHî"î sïN îxð/ïLùîx rî'ïLùïLùîsî2ïLùïLùrïKQîxsïKQî rî.ïKQïKQîçsïKQîóïI©î‰î!lî'î-%ïHî‰ïFZî‰ïD³î‰rïC îxsïC îrîµïC ïC însïC î zïAcî‰î!lî'î,•ï?¼î‰ð$ï>î‰ïïUïUî>âï­î grîÞï­ï­î±ï­î¨sï­îNrî%¸ï­ï­î&”sï­î'Òî.'rïîxsî4ïrïî—sïî>rî!§ïïî"ƒsïî#Á ï^î g rî$ï^ï^îŽsï^îèîÍï¶î g rîºï¶ï¶îŽîjsï¶îrî&zï¶ï¶î'Wsï¶î(”rî,ï¶ï¶î,ðsï¶pî06ï¶ï¶î0¯î1­î3Õî7?î:"sï¶î;™rïîxsî4ïrïî—sïî>rî!§ïïî"ƒsïî#Árî'Iïïî(sî*Zïïî*½tïÀî gsî%ïÀïÀrî#ïÀïÀîÊsïÀîÊrîÐïÀïÀî¤ïÀî›sî*ïÀïÀrîïÀïÀîåsïÀî$î&rî)ŠïÀïÀî*^sî,›ïÀïÀî-ƒrïîxï pîxsï pîrî&ï pï pîï pîµï pî{sï pîçrîJï pï pî3sî Vï pï pî ¹rï Éîxsï Éî rîJï Éï Éîéï ÉîÿvTVm$@6rp:Rope.ROPE=>r_rp;at:ATOM=>r_Atom.GetPName[at];ENDCASE=>{r_"?Unknown?";unknownAtoms_unknownAtoms+1};END;OutAtom:PROC[a:REFANY]=BEGINi:INTEGER;r:Rope.ROPE=ToRope[a];BEGINFORi_auxAtom[0].older,auxAtom[i].olderWHILEi#0DOIFRope.Equal[r,atomTable[i]]THEN{OutCard[LOOPHOLE[-i,CARDINAL]];--re-arrangeLRUqueueauxAtom[auxAtom[i].older].younger_auxAtom[i].younger;auxAtom[auxAtom[i].younger].older_auxAtom[i].older;GOTOTouchi;};ENDLOOP;--addanewatomIFfreeAtom{auxAtom[i].older_auxAtom[0].older;auxAtom[i].younger_0;auxAtom[auxAtom[0].older].younger_i;auxAtom[0].older_i;};END;END;HasSurround:PROC[ob:CD.Object]RETURNS[yes:BOOL_FALSE]=INLINEBEGINyes_FALSERETURN[ob.layer=NMos.pdif]END;AngleExt:PROC[tob:CD.Object]RETURNS[CD.Number]={--copiedfromcmostransistorsimpltp:NMosTransistors.TransistorPtr=NARROW[tob.specificRef];RETURN[tp.width+tp.length+tp.wExt-tob.size.x]};uïg/îEÉsï_7î‰îÒrîZï_7ï_7î.sï_7îðî…îŽîï]�î‰rî›ï]�ï]�îosï]�îšî/î8îÅrï[èî‰sï[èîŒî!îÚîg î%ËrïZ@îxsîïZ@ïZ@tïVñî gsî÷ïVñïVñrîôïVñïVñîœsïVñîœrî¢ïVñïVñîvïVñîlsîüïVñïVñîãrïUIîxsïS¢îxrîÙïS¢ïS¢îCsîïS¢ïS¢ïQúîxîúrî‚ïQúïQúîVsïQúîîý rïPSî‰ïN«î‰sïN«îwî_îëî!rî+«ïN«ïN«î,ÆsïN«î0 rî3ïN«ïN«î3ëïMîšsïMîB î rî%rïMïMî&+sïMî)8ïK\î¬rîFïK\ïK\îsî •ïK\ïK\î ørî"±ïK\ïK\î#|sî(èïK\ïK\î)KpïI´î¬î# î³î ;sïH î¬ð!î*£î,0ïFeî¬ð!î*£î,0rïD½î¬sïD½î�ïCî¬rïAnîšsî<ïAnïAnpï?Æî‰îî–îÊî�rï>î‰sï>î1rî!Éï>ï>î"‚sï>î%�î''î(³î/Vî5î7 rïRETURN[aptr.location];ENDCASE=>RETURN[CDBasics.BaseOfRect[CDInstances.InstRectI[aptr]]];END;OutList:PROC[list:CD.InstanceList]=BEGINOutProps:PROC[props:CD.PropList]=BEGINcount:CARDINAL_0;FORpl:CD.PropList_props,pl.restWHILEpl#NILDOIFISTYPE[pl.first.key,ATOM]AND(pl.first.key=$InstanceNameORpl.first.key=$SignalName)THENcount_count+1ENDLOOP;OutCard[count];FORpl:CD.PropList_props,pl.restWHILEpl#NILDOIFISTYPE[pl.first.key,ATOM]THEN{IFpl.first.key=$InstanceNameORpl.first.key=$SignalNameTHEN{OutCard[1];OutRope[ToRope[pl.first.val]]}ELSE{OutCard[2];OutAtom[pl.first.key];OutAtom[pl.first.val];}}ENDLOOP;END;cnt:NAT_0;FORl:CD.InstanceList_list,l.restWHILEl#NILDOcnt_cnt+1ENDLOOP;OutCard[cnt];FORl:CD.InstanceList_list,l.restWHILEl#NILDOOutSize[AppLocation[l.first]];OutOrient[l.first.orientation];OutObject[l.first.ob,l.first];OutProps[l.first.properties]ENDLOOP;uïg/îEÉtï_,î gsîçï_,ï_,rîäï_,ï_,îŒsï_,î‹rîoï_,ï_,î9sîï_,ï_,îwrîKï_,ï_,îsï_,î#Vrî#ºï_,ï_,î$„sî%jï_,ï_,î%Âî+qrï]„îxsï[Ýîxrîúï[Ýï[ÝîÅsî«ï[Ýï[ÝîîOîÜrïZ5îxsïZ5îrî‘ïZ5ïZ5îmsïZ5îÅrî7ïZ5ïZ5îðïZ5îüsî! ïZ5ïZ5rïXŽîxsïXŽîårïVæîxsîïVæïVætïS—î g sîïS—ïS—rîïS—ïS—î¬sïS—î«rîkïS—ïS—î6sîïS—ïS—îsrî$EïS—ïS—î%sïS—î*Qrî*´ïS—ïS—î+sî,eïS—ïS—î,¼î2lrïQðîxïQðîïPHîxsîïPHïPHî«rî¨ïPHïPHîHî"asïN¡î‰rîéïN¡ïN¡î´sî™ïN¡ïN¡îñî£rî9ïN¡ïN¡î sïN¡î!¥rïLùî‰sïLùîŒrî!ïLùïLùîõsïLùîŽð3rïKRîxsîïKRïKRtïHî gsîïHïHrî ïHïHî´sî/ïHïHî’rîIïHïHîsîúïHïHîQ î"arïF[îxtïC îxsî3ïC ïC rî1ïC ïC îÙsî¾ïC ïC î!rîpïC ïC î;sî!ïC ïC îyî%vrïAdî‰sï?½î‰rîÚï?½ï?½î¤sï?½î•î"rï>î‰sï>îwrîŸï>ï>îj sï>î+î¸î!ærî& ï>ï>î'#sï>î*jrî,õï>ï>î-Ýï>î/…sï>rïrî9 ï{cellNum:NAT_0;OutCard[instanceCode];FORi:NATIN[1..cellCount]DOIFob=cellNameA[i]THEN{cellNum_i;EXIT}uïg/îEÉrï_lîxsîï_lï_ltï\î gsî�ï\ï\rîšï\ï\îBsï\îArî^ï\ï\î(sîï\ï\îf î#rïZuîxsïXÍîxrîïXÍïXÍîÜsïXÍîÌî±î²î—rî×ïXÍïXÍî èsïXÍî#/ïW&îx rïU~îxsîïU~ïU~tïR/î gsî³ïR/ïR/rî±ïR/ïR/îXsîÔïR/ïR/î7rî·ïR/ïR/î‚sîgïR/ïR/î¿î ˆrî-¹ïR/ïR/î.„sî/jïR/ïR/î/Árî5´ïR/ïR/î6�sî7ÀïR/ïR/î8§rïP‡îxtïM8îxsîgïM8ïM8rîeïM8ïM8î sî‡ïM8ïM8îëî mrî#õïM8ïM8î$Ésî'ïM8rïM8î(sî*ïM8ïM8î+î,ærïK‘î‰ïK‘î1sïK‘î3rîŠïK‘ïK‘î CsïK‘î#OïIéî‰î(¡ ïHAî‰tïDòîx sî†ïDòïDòrî„ïDòïDòî,sî§ïDòïDòî rîŠïDòïDòîUsî ;ïDòïDòî ’î%fî'KïCKî‰rî7ïCKïCKî sïCKîîçî,Ÿî.þî2ÉrïA£î‰sïA£î1rîDïA£ïA£îýsïA£î ï?üîšï>Tîšï<¬îšï;îšrï9]î‰sï9]îØï7¶îšï6îšï4fîšï2¿îšï1î‰tï/pîx sîÊï/pï/prîÈï/pï/pîosîêï/pï/pîNrîÎï/pï/pî˜sî~ï/pï/pîÖî$Ÿî(î5�î7rï-Èî‰rî7ï-Èï-Èî sï-Èîîçî,Ÿî.þî2Éï, î‰rîï, ï, îÚsîÀï, ï, îîî� ï*yî‰ï(Ñî‰ï'*î‰ï%‚î‰rï#Ûîxsï#Ûîrîï#Ûï#Ûîëï#Ûî’sï#ÛîXï"3î‰ ï ‹î‰ïäî‰rï<î‰sï•î‰rïEîxsïEî rîqïEïEî+sïEî7rïžîKsî¦ïžïžî ð(î0rî9Fïžïžî:sî>.ïžïžî>ßvïöîxpïöî) vîOïöïöîpïöîî&Œvî)Xïöïöî*#pî.#ïöïöî.ÓrïOîxsïOî rî ïOïOî«ïOîßsï§î‰rîÜï§ï§î§sî�ï§ï§îäî–î,ïîšrî²ïïî›sïî«î8ïXîšrï ±îšsï ±îˆrîéï ±ï ±îÒï ±îâsï ±î¹ rî$ï ±ï ±î%ï î¬sï îSrî!Šï ï î"Csï î%O rî-ƒï ï î.<sî03ï ï ÿQTVm$õ9ENDLOOP;IFcellNum=0THEN{TerminalIO.WriteRope["**badcell\n"];unKnowns_unKnowns+1};OutCard[cellNum];};rp:CD.RectPtr=>{OutRectObject[ob]};--wrp:REFNMos.WellRectRep=>{OutRectObject[ob]};tp:NMosTransistors.TransistorPtr=>{j:CARDINAL;OutCard[transistorCode];OutNumber[tp.width];OutNumber[tp.length];IFtp.lExt/lambdaFactor>63ORtp.wExt/lambdaFactor>63THENERROR;j_tp.lExt/lambdaFactor+tp.wExt/lambdaFactor*64;IFtp.pullupTHENj_Basics.BITOR[j,40000B];IFtp.implant>0THENj_Basics.BITOR[j,100000B];IFtp.angleTHENj_Basics.BITOR[j,20000B];IFHasSurround[ob]THENj_Basics.BITOR[j,10000B];OutCard[j];IFtp.angleTHEN{s:CD.Position=Size[ob];qq:INTEGER_MAX[s.y-tp.wExt-tp.length-2*tp.lExt,0];--maybeoutofrangeOutNumber[qq];--angleextension};IFtp.implant>0THENOutCard[tp.implant];};cp:NMosContacts.ContactPtr=>{j:CARDINAL;s:CD.Position=Size[ob];ss:CARDINAL_s.y;OutCard[contactCode];j_contactTab[cp.typ];j_Basics.BITOR[j,Basics.BITSHIFT[ss,8]];OutCard[j];OutLevel[ob.layer];OutCard[0];--surround...IFcp.typ=burrTHEN{OutNumber[s.x];OutCard[Basics.BITOR[Basics.BITSHIFT[cp.wExt,8],cp.lExt]];};};tp:CDTexts.TextPtr=>{OutRope[tp.text];TerminalIO.WriteRope["text;fontinformationlost\n"];};rp:CDRepetitions.RepPtr=>{OutCard[repeatCode];OutObject[rp.ob];OutCard[0];--wOutCard[0];--lOutSize[rp.offset];OutCard[rp.count];uïg/îEÉrï_eî¬sîMï_eï_erï]¾îšsï]¾îBrîñï]¾ï]¾îªsï]¾î·î3}ï\îmïZoîšïXÇîšïW î‰rîÒïW ïW î�sîƒïW ïW îÚîÛîqpïUxî‰vî–ïUxïUxîapïUxîXî#î&sïSÐî‰î½î%}î(ïR)îšrîûïR)ïR)îÆsî2ïR)ïR)ïP�îšïNÚîšïM2îšrïKŠîšsïKŠîBrî#ºïKŠïKŠî$—sïKŠî%ïrî6ïKŠïKŠî6»ïKŠî9Èsî=ÙïKŠïKŠïIãîšî‚îð-rïH;îšsïH;îBrî5ïH;ïH;îïsïH;îûîâî orî$ZïH;ïH;î%sî'çïH;ïH;î(Jî)‰rïF”îšsïF”îB rîFïF”ïF”îÿsïF”î î óî"€rî&kïF”ïF”î'$sî)÷ïF”ïF”î*Zî+šrïDìîšsïDìîBrîxïDìïDìî1sïDìî>î%î²rî#�ïDìïDìî$Vsî')ïDìïDìî'�î(ÌrïCEîšsïCEîBrîÿïCEïCEî¸sïCEî"Äî#«î%8rî)#ïCEïCEî)Üsî,°ïCEïCEî-î.RïA�îš rï?õîšsï?õîBrîxï?õï?õî1sï?õî>ï>Nî¬rî.ï>Nï>NîùsîÞï>Nï>Nî6î‚îgï<¦î¬rî7ï<¦ï<¦î¡sï<¦îûrîˆï<¦ï<¦îšsî!Aï<¦ï<¦î!¤î4¥pî7:ï<¦ï<¦î7´î;î<íî?Nî@òsï:ÿî¬ pîKï:ÿï:ÿîÄî Âî$csï9Wî¬ï7¯îšî‹ î�î!$ï6îšï4`î‰îéî#î%–ï2¹îšrîûï2¹ï2¹îÆsî2ï2¹ï2¹ï1îšrîï1ï1îçsîÍï1ï1î%îqîVï/jîšrî¡ï/jï/jîlsï/jî\îéï-Âîšï,îšî‚îï*sîšî‚îrî¢ï*sï*sîèsîuï*sï*sîØîrî!«ï*sï*sî!ñsî'/ï*sï*sî'’î)wï(Ëîš ï'$îšï%|îš pîFï%|ï%|îÀ rï#Ôîšsï#ÔîB rî]ï#Ôï#Ôîsï#Ôî "ï"-î¬ï …î¬ rîÚï …ï …î sî!¬ï …ï …î"rî%£ï …ï …î%ésî+'ï …ï …î+Šî1$î3 ïÞî¬ï6îšï�î‰î½îVîìïçîšï?îšî$Éî'· î/Aï˜îšïðî‰îÒî Êî#_ïIîšï¡îšïùîš îFî½ïRîš îFî½ï ªîšï îšTVm$à10OutOrient[rp.orientation];};ENDCASE=>OutUnknownObject["?"];END;COutputDesign:PROC[comm:CDSequencer.Command]=BEGINname,fileName:Rope.ROPE;s:IO.STREAM;wDir:Rope.ROPE_CDIO.GetWorkingDirectory[comm.design];TerminalIO.WriteRope["ChipmonkOutputDesign\n"];IFRope.IsEmpty[wDir]THENwDir_FileNames.CurrentWorkingDirectory[];TerminalIO.WriteRope["Chipmonkoutputfilename"];IF~Rope.IsEmpty[wDir]THEN{TerminalIO.WriteRopes["(",wDir,")"];};name_TerminalIO.RequestRope[">"];fileName_CDIO.MakeName[name,"chip"];IF~Rope.IsEmpty[wDir]THENfileName_FS.ExpandName[fileName,wDir].fullFName;s_FS.StreamOpen[fileName,create!FS.Error=>IFerror.group#bugTHEN{TerminalIO.WriteRope[error.explanation];GOTOFileIOOpenFailed;}];CDSimpleOps.SelectAll[comm.design];CDSimpleOps.TransformSelected[comm.design,CDOrient.rotate180X];OutputDesign[comm.design,s];IO.Close[s];CDSimpleOps.TransformSelected[comm.design,CDOrient.rotate180X];CDSimpleOps.DeselectAll[comm.design];TerminalIO.WriteRope["endoutput\n"];EXITSFileIOOpenFailed=>{TerminalIO.WriteRope["OpenFailed\n"]};END;levelTab[NMos.cut]_0;levelTab[NMos.dif]_1;levelTab[NMos.pol]_2;levelTab[NMos.met]_3;levelTab[NMos.imp]_4;levelTab[NMos.ovg]_5;levelTab[NMos.bur]_6;levelTab[NMos.cut2]_8;levelTab[NMos.met2]_11;levelTab[NMos.cut2]_15;contactTab[burr]_4;contactTab[mDif]_1;contactTab[butt]_3;contactTab[mPol]_2;contactTab[mm2]_5;uïg/îEsï_,îšï]…îšrï[Ýî‰sï[ÝîŒî!rïZ5îxsîïZ5ïZ5tïU?î g sîªïU?ïU?rî¨ïU?ïU?îPsïU?îOîZî/ rïS—îxsïQðîxî�î rî’ïQðïQðîfsî£ïQðïQðïPHîxrîúïPHïPHîdsî@ïPHrïPHî˜sîbïPHïPHïN¡îxîzrîïN¡ïN¡îÖsïN¡î˜î%ð&ïLùîxî$Oî) rïKRîxsïKRîrîöïKRïKRî¯sïKRî ¼î$Dî%Ñð$ïIªîxî$Oî(Áî++rïHîxsïHîrîÿïHïHî¸sïHî!ÄïF[î‰î �î"•î&vïD´î‰ïC îxî8îÅî$¾î%óïAeîxîyîî%€rï?½îxsï?½îrîÿï?½ï?½î¸sï?½î!Äî'Årî)Rï?½ï?½î* sî*ªï?½ï?½î+î9çï>îxî�rîï>ï>îÇsîfï>ï>î½î ïî$ñrïDatools>ChipmonkNmosWrite.mesa!Friday, July 18, 1986 1:54 pm PDT