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