3 # Definitions for PCI boards
4 # by D.J. Barrow dj_barrow@ariasoft.ie
6 # please note that you will need to edit the saved pcb file
7 # by hand to move the board outline onto a seperate layer
8 # I suggest one of the unused layers.
10 define(`GETNUMARRAYS',`eval(($#)/2)')
13 # $3: boardheight,number of pins,arcradius,..., number of pins
14 define(`PKG_PCIPINARRAY',
17 define(`ARGS',`$4, $5, $6, $7')
19 define(`LEFTOFFSET',`100')
20 define(`EDGEGAP',`12')
21 define(`PINDIST',`50')
22 define(`PINWIDTH',`25')
23 define(`NUMARRAYS',`GETNUMARRAYS(ARGS)')
24 define(`TOTALPINS1',forloop(`IDX',0,eval(NUMARRAYS-1),
25 ``arg'eval((IDX*2)+2) + ')0)
26 define(`TOTALPINS',eval(TOTALPINS1))
27 ifelse(1,eval(NUMARRAYS>1),`
28 define(`TOTALDIAMETER1',forloop(`IDX',0,eval(NUMARRAYS-2),
29 ``arg'eval((IDX*2)+3) + ')0)
30 define(`TOTALDIAMETER',eval(TOTALDIAMETER1))
32 define(`PINCENTER',`eval(LEFTOFFSET+(PINDIST/2))')
33 define(`PINRADIUS',`eval(PINWIDTH/2)')
34 define(`PINLEFT',`eval(PINCENTER-PINRADIUS)')
35 define(`PINRIGHT',`eval(PINCENTER+PINRADIUS)')
36 define(`PENWIDTH',`eval(PINRADIUS+4)')
37 define(`PENRADIUS',`eval(PENWIDTH/2)')
38 define(`MAXIDX',`eval(TOTALPINS - 1)')
39 define(`ARRAYWIDTH', `eval((TOTALPINS*PINDIST)+TOTALDIAMETER)')
40 define(`CENTERX', `eval(((ARRAYWIDTH+LEFTOFFSET)/2))')
44 define(`ARCRADIUS',`12')
45 define(`ARCDIAMETER',`eval(ARCRADIUS*2)')
46 define(`LMAXY',`eval(MAXY+ARCRADIUS)')
47 define(`BOARDTOP',`eval(LMAXY-arg1)')
48 define(`SCREWBORDER',275)
49 Element(0x00 "$1" "`$2'" "$3" CENTERX 10 1 30 0x00)
54 define(`LOOPIDX1',eval(NUMARRAYS-1))
55 define(`LEFT1',`eval(PINLEFT-ARCRADIUS)')
56 define(`ARCRADIUS2',`100')
57 define(`SLOTWIDTH',`1000')
58 define(`BRACKETLEFT',`-1525')
59 define(`LEFT2',`eval(LEFT1-ARCRADIUS2)')
60 define(`LEFT3',`eval(LEFT1+ARCRADIUS2-SLOTWIDTH)')
61 define(`LEFT4',`eval(LEFT1-SLOTWIDTH)')
62 ElementArc(LEFT2 0 ARCRADIUS2 ARCRADIUS2 180 90 1)
63 ElementLine(LEFT2 -ARCRADIUS2 LEFT3 -ARCRADIUS2 1)
64 ElementArc(LEFT3 0 ARCRADIUS2 ARCRADIUS2 270 90 1)
65 ElementLine(LEFT4 0 LEFT4 MAXY 1)
66 define(`LEFT5',`eval(LEFT4-ARCRADIUS)')
67 ElementArc(LEFT5 MAXY ARCRADIUS ARCRADIUS 90 90 1)
68 ElementLine(LEFT5 LMAXY BRACKETLEFT LMAXY 1)
72 define(`ADDDIAMETER',`0')
73 forloop(`IDX1',0,LOOPIDX1,
75 define(`CURRNUMPINS',`arg'eval((IDX1*2)+2))
77 define(`CURRLEFT',`eval((PINDIST*IDX)+(ADDDIAMETER)+PINLEFT)')
78 define(`CURRRIGHT',`eval(CURRLEFT+((CURRNUMPINS-1)*PINDIST)+PINWIDTH)')
79 ElementLine(CURRLEFT LMAXY CURRRIGHT LMAXY 2)
80 ElementArc(CURRLEFT MAXY ARCRADIUS ARCRADIUS 0 90 2)
81 ElementArc(CURRRIGHT MAXY ARCRADIUS ARCRADIUS 90 90 2)
82 define(`CURRLEFT1',`eval(CURRLEFT-ARCRADIUS)')
83 define(`CURRRIGHT1',`eval(CURRRIGHT+ARCRADIUS)')
84 ElementLine(CURRLEFT1 0 CURRLEFT1 MAXY 1)
85 ElementLine(CURRRIGHT1 0 CURRRIGHT1 MAXY 1)
86 ifelse(1,eval((NUMARRAYS>1)&&(IDX1<LOOPIDX1)),`
87 define(`CURRDIAMETER',`arg'eval((IDX1*2)+3))
88 define(`CURRRADIUS',`eval(CURRDIAMETER/2)')
89 ElementArc(eval(CURRRIGHT+EDGEGAP+(CURRDIAMETER/2)) 0 CURRRADIUS CURRRADIUS 180 180 1)
91 ifelse(1,eval(IDX1==LOOPIDX1),`
92 ElementLine(BRACKETLEFT LMAXY BRACKETLEFT BOARDTOP 1)
93 ElementLine(BRACKETLEFT BOARDTOP CURRRIGHT1 BOARDTOP 1)
94 ElementLine(CURRRIGHT1 BOARDTOP CURRRIGHT1 0 1)
96 ElementArc(eval(BRACKETLEFT+SCREWBORDER) eval(LMAXY-SCREWBORDER) 125 125 0 360 1)
97 ElementArc(eval(BRACKETLEFT+SCREWBORDER) eval(BOARDTOP+SCREWBORDER) 125 125 0 360 1)
100 forloop(`IDX2',0,eval(CURRNUMPINS-1),
102 define(`CURRX',`eval((PINDIST*IDX)+(ADDDIAMETER))')
103 define(`MINX',`eval(PINLEFT+CURRX)')
104 define(`MIDX',`eval(PINCENTER+CURRX)')
105 define(`MAXX',`eval(PINRIGHT+CURRX)')
106 define(`PINIDX',`eval(IDX+1+ADDSIDE)')
107 EDGECONN(MINX,MINY,MAXX,MINY,PENWIDTH,PINIDX,FLAG)
108 EDGECONN(MINX,MINY,MINX,MIDY,PENWIDTH,PINIDX,FLAG)
109 EDGECONN(MINX,MIDY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG)
110 EDGECONN(MIDX,MINY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG)
111 EDGECONN(MAXX,MINY,MAXX,MIDY,PENWIDTH,PINIDX,FLAG)
112 EDGECONN(MAXX,MIDY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG)
113 define(`IDX',incr(IDX))
116 ifelse(1,eval((NUMARRAYS>1)&&(IDX1<LOOPIDX1)),`
117 define(`ADDDIAMETER1',forloop(`IDX2',0,eval(IDX1),
118 ``arg'eval((IDX2*2)+3)+')0)
119 define(`ADDDIAMETER',eval(ADDDIAMETER1+(EDGEGAP*2)-PINDIST+PINWIDTH))
122 define(`ADDSIDE',`TOTALPINS')
130 define(`PKG_PCI5V_AVE_HEIGHT', `PKG_PCIPINARRAY(`$1', `$2', `$3', 2810,49,100,11)');
131 define(`PKG_PCI5V_MIN_HEIGHT', `PKG_PCIPINARRAY(`$1', `$2', `$3', 1420,49,100,11)');
132 define(`PKG_PCI5V_MAX_HEIGHT', `PKG_PCIPINARRAY(`$1', `$2', `$3', 4200,49,100,11)');
133 define(`PKG_PCI5V_SMALL_HEIGHT', `PKG_PCIPINARRAY(`$1', `$2', `$3', 2063,49,100,11)');