(FILECREATED "22-Aug-86 12:40:51" {ERIS}<TAMARIN>UCODE>PADRING.;20 16377  

      changes to:  (FNS MakePadRing MakeRiverRouteSpecTop OutputRightRiverRoute)
		   (VARS PadWireLst LeftPadSpec BottomPadSpec TopPadSpec RightPadSpec)

      previous date: " 1-Aug-86 14:24:31" {PHYLUM}<BELL>TAM>PADRING.;1)


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT PADRINGCOMS)

(RPAQQ PADRINGCOMS ((VARS BottomPadSpec LeftPadSpec PadWireLst RightPadSpec TopPadSpec)
	(FNS FindPadDetails MakeCifRiverOutputVert MakePadRing MakeRightRiver MakeRiverRouteSpec 
	     MakeRiverRouteSpecTop MakeRouteSpec MakeTopRiver MakeWires OrientXCoord OrientYCoord 
	     OutputPad OutputPadRow OutputRightRiverRoute OutputTopRiverRoute RiverRouteL 
	     WriteACtiveFiles)))

(RPAQQ BottomPadSpec ((PADBLANK NIL NIL)
			(PADVDD NIL NIL)
			(PADVDD NIL NIL)
			(PADVDD NIL NIL)
			(PADVDD NIL NIL)
			(PADVDD NIL NIL)
			(PADVDD NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)
			(PADBLANK NIL NIL)))

(RPAQQ LeftPadSpec ((PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADBLANK NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADGND NIL NIL)
		      (PADBLANK NIL NIL)))

(RPAQQ PadWireLst ((3 0 75 0 0 VDDP (t r l b))
		     (11 0 75 0 0 VDDP (t r l b))
		     (11 204 25 70 145 V10 (t))
		     (11 204 25 145 145 V10 (r))
		     (11 261 72 70 145 GNDP (t))
		     (11 261 72 140 140 GNDP (r))
		     (11 352 4 145 145 DPADENB~ (t))
		     (11 352 4 145 4865 DPADENB~ (r))
		     (11 352 4 865 1995 RPADENB~ (r))
		     (11 360 4 145 145 PHIREAD (t))
		     (11 360 4 145 4865 PHIREAD (r))
		     (11 368 4 145 145 PHIPRE (t))
		     (11 368 4 145 4865 PHIPRE (r))
		     (11 376 20 70 145 VDDP (t))
		     (11 376 20 145 145 VDDP (r))
		     (11 400 4 145 165 PHIMEMREAD (t))
		     (11 400 4 155 4865 PHIMEMREAD (r))
		     (11 408 20 70 165 GNDP (t))
		     (11 408 20 160 140 GNDP (r))
		     (11 432 130 70 2100 GND (t))
		     (11 181 50 200 200 GND (l))
		     (11 181 75 2000 200 GND (l))
		     (11 181 100 1498 173 VDD (b))
		     (11 432 145 1035 45 VDD (r))))

(RPAQQ RightPadSpec ((PADDATA RD-36 D2-3)
		       (PADDATA RD-37 D2-2)
		       (PADDATA RD-38 D2-1)
		       (PADDATS RD-39 D2-0 PHIMEMREAD PHIPRE PHIREAD DPADENB~ RPADENB~)
		       (PADTRI XRADDR-9 RADDR-9)
		       (PADTRI XRADDR-8 RADDR-8)
		       (PADTRI XRADDR-7 RADDR-7)
		       (PADTRI XRADDR-6 RADDR-6)
		       (PADTRI XRADDR-5 RADDR-5)
		       (PADTRI XRADDR-4 RADDR-4)
		       (PADTRI XRADDR-3 RADDR-3)
		       (PADTRI XRADDR-2 RADDR-2)
		       (PADTRI XRADDR-1 RADDR-1)
		       (PADTRI XRADDR-0 RADDR-0)
		       (PADTRI XRAS~-3 RAS~-3)
		       (PADTRI XRAS~-2 RAS~-2)
		       (PADTRI XRAS~-1 RAS~-1)
		       (PADTRI XRAS~-0 RAS~-0)
		       (PADTRI XCAS~ CAS~)
		       (PADTRI XWE~ WE~)
		       (PADIN XPRE PRECHARGE)
		       (PADIN XCLOCK CLOCK)
		       (PADIN XCLOCKD35 CLOCKD35)
		       (PADIN XCLOCKD10 CLOCKD10)
		       (PADIN XINTERRUPT INTERRUPT)
		       (PADIN XRESET RESET)
		       (PADOUT XOUTPUTINTERRUPT OUTPUTINTERRUPT)
		       (PADIN XHOLD HOLD)
		       (PADOUT XHOLDA HOLDA)
		       (PADIN XREFRESH REFRESH)
		       (PADBLANK NIL NIL)))

(RPAQQ TopPadSpec ((PADBLANK)
		     (PADBLANK)
		     (PADDATA RD-8 D2-31)
		     (PADDATA RD-9 D2-30)
		     (PADDATA RD-10 D2-29)
		     (PADDATA RD-11 D2-28)
		     (PADDATA RD-12 D2-27)
		     (PADDATA RD-13 D2-26)
		     (PADDATA RD-14 D2-25)
		     (PADDATA RD-15 D2-24)
		     (PADDATA RD-16 D2-23)
		     (PADDATA RD-17 D2-22)
		     (PADDATA RD-18 D2-21)
		     (PADDATA RD-19 D2-20)
		     (PADDATA RD-20 D2-19)
		     (PADBLANK)
		     (PADDATA RD-21 D2-18)
		     (PADDATA RD-22 D2-17)
		     (PADDATA RD-23 D2-16)
		     (PADDATA RD-24 D2-15)
		     (PADDATA RD-25 D2-14)
		     (PADDATA RD-26 D2-13)
		     (PADDATA RD-27 D2-12)
		     (PADDATA RD-28 D2-11)
		     (PADDATA RD-29 D2-10)
		     (PADDATA RD-30 D2-9)
		     (PADDATA RD-31 D2-8)
		     (PADDATA RD-32 D2-7)
		     (PADDATA RD-33 D2-6)
		     (PADDATA RD-34 D2-5)
		     (PADDATA RD-35 D2-4)))
(DEFINEQ

(FindPadDetails
  [LAMBDA (pad)                                              (* agb: "19-Jul-86 21:45")
    (OR [ASSOC (CAR pad)
		   (QUOTE ((PADDATA PADDATA (108 411)
				      (55 120 11)
				      (84 429 3))
			      (PADSEAL PADSEAL)
			      (PADVDD PADVDD)
			      (PADGND PADGND)
			      (PADBLANK PADBLANK)
			      (PADDATS PADDATS (108 411)
				       (55 120 11)
				       (84 429 3)
				       (109 429 3)
				       (117 429 3)
				       (124 429 3)
				       (131 429 3)
				       (138 429 3))
			      (PADOUT PADOUT (108 411)
				      (55 120 11)
				      (26 429 3))
			      (PADTRI PADTRI (108 411)
				      (55 120 11)
				      (26 429 3))
			      (PADIN PADIN (108 411)
				     (55 120 11)
				     (94 429 3]
	  (QUOTE (PADDATA PADDATA (108 411)
			    (55 120 11)
			    (84 429 3])

(MakeCifRiverOutputVert
  [LAMBDA (res file bot top base)                            (* agb: "19-Jul-86 13:17")
    (for i in res bind lpoint maxH
       do (ChipWire 3 3 base (CAAR i)
			bot
			(CAAR i))
	    (for j in i as height from bot by -6
	       do                                          (* PRINT j)
		    [if (IGEQ (CAR j)
				  (CADR j))
			then (ChipWire 3 3 height (IPLUS 3 (CAR j))
					   height
					   (IPLUS 0 (CADR j)))
		      else (ChipWire 3 3 height (CAR j)
					 height
					 (IPLUS 3 (CADR j]
		    (ChipWire 3 3 height (CADR j)
				(DIFFERENCE height 6)
				(CADR j))
		    (SETQ maxH height)
		    (SETQ lpoint (CADR j)))
	    (ChipWire 3 3 maxH lpoint top lpoint])

(MakePadRing
  [LAMBDA (file)                                             (* agb: "22-Aug-86 12:37")
    (PROG NIL
	    (SETQ ULCornerX 297)
	    (SETQ ULCornerY 266)
	    (SETQ SpacingX 136)
	    (SETQ SpacingY 174)
	    (SETQ PadDepth 429)
	    (SETQ PadWidth 108)
	    [if file
		then (ChipHdrFile (MKATOM (CONCAT "{DSK18}PADRNG" file ".CHIP"))
				      (SETQ foo2 (GetFile (QUOTE {DSK18}PADDATA.CHIP]
	    (SETQ TopTerm (OutputPadRow TopPadSpec ULCornerX 0 0 SpacingX 0))
	    (OutputPadRow (REVERSE LeftPadSpec)
			    0
			    (PLUS PadWidth ULCornerY)
			    3 0 SpacingY)
	    (SETQ BottomRowY (PLUS ULCornerY 374 (TIMES 32 SpacingY)))
	    (SETQ RightRowX (PLUS ULCornerX 405 (TIMES 32 SpacingX)))
	    (OutputPadRow (REVERSE BottomPadSpec)
			    (PLUS PadWidth ULCornerX)
			    BottomRowY 2 SpacingX 0)
	    (SETQ RightTerm (OutputPadRow RightPadSpec RightRowX ULCornerY 1 0 SpacingY))
	    (OutputRightRiverRoute T (DIFFERENCE RightRowX PadDepth)
				     907)
	    (OutputTopRiverRoute T PadDepth (PLUS ULCornerX 15 -28))
	    (ChipSymCall (QUOTE CORNERUL)
			   0 0 0)
	    (ChipSymCall (QUOTE CORNERUR)
			   RightRowX 0 1)
	    (ChipSymCall (QUOTE CORNERLL)
			   0 BottomRowY 3)
	    (ChipSymCall (QUOTE CORNERLR)
			   RightRowX BottomRowY 2)
	    (MakeWires)
	    (ChipTrailer])

(MakeRightRiver
  [LAMBDA (file)                                             (* agb: "17-Jul-86 20:03")
    (PROG (size)
	    (ChipHdr (MKATOM (CONCAT "{DSK18}RR" file ".CHIP")))
                                                             (* SETQ size (PLUS 16 (TIMES 8 
							     (LENGTH rte))))
	    (OutputRightRiverRoute T 5165 1700)
	    (ChipTrailer])

(MakeRiverRouteSpec
  [LAMBDA (terms rightEdge height n)                         (* agb: "27-Jul-86 16:39")
    (PROG (rt rt1)
	    [SETQ rt (for i in terms when (EQ rightEdge (CADR i))
			  collect (LIST (CADDR i]
	    (SORT rt T)
	    [SETQ rt1 (for i in rt as k from 0
			   collect (LIST (CAR i)
					     (PLUS height (TIMES k (OR n 6]
	    (RETURN rt1])

(MakeRiverRouteSpecTop
  [LAMBDA (terms topEdge left)                               (* agb: "13-Aug-86 19:51")
    (PROG (rt rt1)
	    [SETQ rt (for i in terms when (EQ topEdge (CADDR i))
			  collect (LIST (CADR i]
	    (SORT rt T)
	    [SETQ rt1 (for i in rt as k from 0
			   collect (LIST (CAR i)
					     (PLUS left (TIMES 40 (IREMAINDER k 4))
						     (TIMES 180 (IQUOTIENT k 4]
	    (RETURN rt1])

(MakeRouteSpec
  [LAMBDA (terms height)                                     (* agb: "17-Jul-86 17:40")
    (SETQ rt (for i in terms when (EQ 5165 (CADR i)) collect (LIST (CADDR i)
										   0])

(MakeTopRiver
  [LAMBDA (file)                                             (* agb: "17-Jul-86 21:16")
    (PROG NIL
	    (ChipHdr (MKATOM (CONCAT "{DSK18}TR" file ".CHIP")))
	    (OutputTopRiverRoute T 412 1000)
	    (ChipTrailer])

(MakeWires
  [LAMBDA NIL                                                (* agb: "19-Jul-86 13:16")
    (SETQ eCornerX (DIFFERENCE RightRowX ULCornerX))
    (SETQ eCornerY (DIFFERENCE BottomRowY ULCornerY))
    (for i in PadWireLst
       do [if (MEMB (QUOTE t)
			  (CADDR (CDDDDR i)))
		then (ChipWire (CAR i)
				   (CADDR i)
				   (PLUS ULCornerX (CADDDR i))
				   (CADR i)
				   (DIFFERENCE eCornerX (CAR (CDDDDR i)))
				   (CADR i)
				   (CADR (CDDDDR i]
	    [if (MEMB (QUOTE b)
			  (CADDR (CDDDDR i)))
		then (ChipWire (CAR i)
				   (CADDR i)
				   (PLUS ULCornerX (CADDDR i))
				   (DIFFERENCE BottomRowY (PLUS (CADDR i)
								    (CADR i)))
				   (DIFFERENCE eCornerX (CAR (CDDDDR i)))
				   (DIFFERENCE BottomRowY (PLUS (CADDR i)
								    (CADR i)))
				   (CADR (CDDDDR i]
	    [if (MEMB (QUOTE l)
			  (CADDR (CDDDDR i)))
		then (ChipWire (CAR i)
				   (CADDR i)
				   (CADR i)
				   (PLUS ULCornerY (CADDDR i))
				   (CADR i)
				   (DIFFERENCE eCornerY (CAR (CDDDDR i)))
				   (CADR (CDDDDR i]
	    (if (MEMB (QUOTE r)
			  (CADDR (CDDDDR i)))
		then (ChipWire (CAR i)
				   (CADDR i)
				   (DIFFERENCE RightRowX (PLUS (CADDR i)
								   (CADR i)))
				   (PLUS ULCornerY (CADDDR i))
				   (DIFFERENCE RightRowX (PLUS (CADDR i)
								   (CADR i)))
				   (DIFFERENCE eCornerY (CAR (CDDDDR i)))
				   (CADR (CDDDDR i])

(OrientXCoord
  [LAMBDA (xbase x y orient)                                 (* agb: "17-Jul-86 09:04")
    (PLUS xbase (SELECTQ orient
			     (0 x)
			     (1 (MINUS y))
			     (2 (MINUS x))
			     (3 y)
			     (HELP])

(OrientYCoord
  [LAMBDA (ybase x y orient)                                 (* agb: "17-Jul-86 09:04")
    (PLUS ybase (SELECTQ orient
			     (0 y)
			     (1 x)
			     (2 (MINUS y))
			     (3 (MINUS x))
			     (HELP])

(OutputPad
  [LAMBDA (pad x y orient)                                   (* agb: "17-Jul-86 10:03")
    (PROG (padlst)
	    (SETQ padlst (FindPadDetails pad))
	    (ChipSymCall (CADR padlst)
			   x y orient)
	    (RETURN (for i in (CDDDR padlst) as j in (CDR pad) when (AND i j)
			 collect (ChipWire (CADDR i)
					       3
					       (OrientXCoord x (CAR i)
							       (CADR i)
							       orient)
					       (OrientYCoord y (CAR i)
							       (CADR i)
							       orient)
					       (OrientXCoord x (CAR i)
							       (PLUS 3 (CADR i))
							       orient)
					       (OrientYCoord y (CAR i)
							       (PLUS 3 (CADR i))
							       orient)
					       j)
				   (LIST j (OrientXCoord x (CAR i)
							     (CADR i)
							     orient)
					   (OrientYCoord y (CAR i)
							   (CADR i)
							   orient])

(OutputPadRow
  [LAMBDA (spec x y orient xspacing yspacing)                (* agb: "17-Jul-86 11:30")
    (for pad in spec as xpos from (PLUS x xspacing) by xspacing as ypos
       from (PLUS y yspacing) by yspacing join (OutputPad pad xpos ypos orient])

(OutputRightRiverRoute
  [LAMBDA (fileP rightEdge top)                              (* agb: " 3-Aug-86 18:28")
    (PROG (rt)
	    (SETQ rt (MakeRiverRouteSpec RightTerm rightEdge top 8))
	    (SETQ rte (RiverRoute rt))
	    (SETQ rtel (RiverRouteL (REVERSE rt)))
	    (if fileP
		then (MakeCifRiverOutputVert (CAR rte)
						 NIL
						 (DIFFERENCE rightEdge 8)
						 2736 rightEdge)
		       (MakeCifRiverOutputVert (CAR rtel)
						 NIL
						 (DIFFERENCE rightEdge 8)
						 2736 rightEdge])

(OutputTopRiverRoute
  [LAMBDA (fileP topEdge left)                               (* agb: "17-Jul-86 21:16")
    (PROG (rt)
	    (SETQ rt (MakeRiverRouteSpecTop TopTerm topEdge left))
	    (SETQ rte (RiverRoute rt))
	    (SETQ rtel (RiverRouteL (REVERSE rt)))
	    (if fileP
		then [SETQ routeLen (MAX (LENGTH (CADR rte))
					       (LENGTH (CADR rtel]
		       (MakeCifRiverOutput (CAR rte)
					     NIL
					     (PLUS topEdge 8)
					     (PLUS topEdge 8 (TIMES 6 routeLen))
					     topEdge)
		       (MakeCifRiverOutput (CAR rtel)
					     NIL
					     (PLUS topEdge 8)
					     (PLUS topEdge 8 (TIMES 6 routeLen))
					     topEdge])

(RiverRouteL
  [LAMBDA (spec)                                             (* agb: "17-Jul-86 20:00")
    (PROG (taken res last)
	    [for elt in spec when (LESSP (CAR elt)
						 (CADR elt))
	       do (SETQ last (CAR elt))
		    (SETQ res (CONS NIL res))
		    [for limit in taken as limitLoc on taken until (EQ last (CADR
										     elt))
		       do [RPLACA res (NCONC (CAR res)
						   (LIST (LIST last (MIN limit (CADR elt]
			    (RPLACA limitLoc (IDIFFERENCE last 10))
			    (SETQ last (MIN limit (CADR elt]
		    (if (NEQ last (CADR elt))
			then (SETQ taken (NCONC1 taken (IDIFFERENCE last 7)))
			       (RPLACA res (NCONC (CAR res)
						      (LIST (LIST last (CADR elt]
	    (RETURN (LIST res taken])

(WriteACtiveFiles
  [LAMBDA NIL                                                (* agb: "17-Jul-86 21:50")
    (MAKEFILE (QUOTE CIFGEN))
    (MAKEFILE (QUOTE RIVER))
    (MAKEFILE (QUOTE PADRING])
)
(PUTPROPS PADRING COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (5197 16299 (FindPadDetails 5207 . 6054) (MakeCifRiverOutputVert 6056 . 6906) (
MakePadRing 6908 . 8395) (MakeRightRiver 8397 . 8797) (MakeRiverRouteSpec 8799 . 9258) (
MakeRiverRouteSpecTop 9260 . 9774) (MakeRouteSpec 9776 . 10016) (MakeTopRiver 10018 . 10281) (
MakeWires 10283 . 12015) (OrientXCoord 12017 . 12266) (OrientYCoord 12268 . 12517) (OutputPad 12519 . 
13510) (OutputPadRow 13512 . 13822) (OutputRightRiverRoute 13824 . 14392) (OutputTopRiverRoute 14394
 . 15151) (RiverRouteL 15153 . 16068) (WriteACtiveFiles 16070 . 16297)))))
STOP