4 # PCB, interactive printed circuit board design
5 # Copyright (C) 1994,1995,1996 Thomas Nau
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 # Contact addresses for paper mail and Email:
22 # Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany
23 # Thomas.Nau@rz.uni-ulm.de
29 # -------------------------------------------------------------------
30 # the definition of a SD (ZIP) package
31 # based on 'old style format' by Olaf Kaluza (olaf@criseis.ruhr.de)
33 # For example, see http://focus.ti.com/lit/ml/mczi002/mczi002.pdf
34 # for the Texas Instruments SDZ (R-PZIP-T16) Ceramic Zig Zag package
35 # That drawing shows the pin width varying from 0.45mm to 0.65mm
36 # (18 to 26 mils) and the width in the other dimension from .23mm
37 # to .35mm. The cross section is rectangular. This gives a diagonal
38 # from 0.505mm (19.9 mil) to 0.738mm (29 mil).
46 `define(`MAXY', `eval(`$4' / 2 * 100 + 50)')
47 Element(0x00 "$1" "`$2'" "$3" 275 50 3 100 0x00)
49 forloop(`i', 1, eval($4 / 2),
50 `PIN(50, eval(100*(i-1)+50), 60, 35, eval(2*i-1))
51 PIN(150, eval(100*(i-1)+100), 60, 35, eval(2*i))
54 ElementLine(0 0 0 MAXY 20)
55 ElementLine(0 MAXY 200 MAXY 20)
56 ElementLine(200 MAXY 200 0 20)
57 ElementLine(200 0 0 0 20)
58 ElementLine(100 0 100 100 10)
59 ElementLine(100 100 0 100 10)
64 # -------------------------------------------------------------------
65 # the definition of a plastic power package vertical
66 # for TO220 (2-7pins), TO251, TOP3, MULTIWATT(8-15pins)
67 # based on 'old style format' by Olaf Kaluza (olaf@criseis.ruhr.de)
73 # $6: body length (dimension parallel to rows of pins)
74 # $7: body width (dimension perpendicular to rows of pins)
78 # $11: pin row spacing
80 define(`GENERIC_PL_POWER',
81 `define(`pin1X', `eval((`$6' - (`$4' - 1) * `$5')/2)')
82 Element(0x00 "$1" "`$2'" "$3" eval(`$6'+60) 50 3 100 0x00)
85 `PIN(eval(pin1X + (i-1)*`$5'), ifelse(eval(i % 2 == 0), 0, eval(`$8'+`$11'), `$8'), `$9', `$10', i)
87 ElementLine(0 0 0 `$7' 20)
88 ElementLine(0 `$7' `$6' `$7' 20)
89 ElementLine(`$6' `$7' `$6' 0 20)
90 ElementLine(`$6' 0 0 0 20)
91 ElementLine(0 50 `$6' 50 10)
92 ElementLine(eval(`$6'/2 - 75) 0 eval(`$6'/2 - 75) 50 10)
93 ElementLine(eval(`$6'/2 + 75) 0 eval(`$6'/2 + 75) 50 10)
94 Mark(pin1X eval(`$7'+`$10'))
97 # -------------------------------------------------------------------
98 # the definition of a resistor (0.25W) package
103 `Element(0x00 "$1" "`$2'" "$3" 120 30 0 100 0x00)
105 PIN(0, 50, 68, 38, 1)
106 PIN(400, 50, 68, 38, 2)
107 ElementLine(100 0 300 0 20)
108 ElementLine(300 0 300 100 20)
109 ElementLine(300 100 100 100 20)
110 ElementLine(100 100 100 0 20)
111 ElementLine(0 50 100 50 20)
112 ElementLine(300 50 400 50 20)
116 # -------------------------------------------------------------------
117 # the definition of a SIL package without a common pin
123 `define(`MAXY', `eval(`$4' * 100 -50)')
124 Element(0x00 "$1" "`$2'" "$3" 160 10 3 100 0x00)
127 `PIN(50, eval(i * 100 -50), 60, 28, i)
129 ElementLine( 0 50 0 MAXY 20)
130 ElementLine(100 50 100 MAXY 20)
131 ElementArc(50 50 50 50 180 180 20)
132 ElementArc(50 MAXY 50 50 0 180 20)
133 forloop(`i', 1, eval($4 /2 -1),
134 `ElementLine(0 eval(i * 200) 100 eval(i * 200) 10)
139 # -------------------------------------------------------------------
140 # the definition of a SIL package with a common pin
146 `define(`MAXY', `eval(`$4' * 100 -50)')
147 Element(0x00 "$1" "`$2'" "$3" 160 10 3 100 0x00)
150 `PIN(50, eval(i * 100 -50), 60, 28, i)
152 ElementLine( 0 50 0 MAXY 20)
153 ElementLine(100 50 100 MAXY 20)
154 ElementLine( 0 100 100 100 10)
155 ElementArc(50 50 50 50 180 180 20)
156 ElementArc(50 MAXY 50 50 0 180 20)
160 # -------------------------------------------------------------------
161 # a QFP-132 pin flat pack
167 # based on mail by Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de)
169 `Element(0x00 "$1" "`$2'" "$3" 250 200 0 150 0x00)
172 `define(`XPOS', eval(625 -i*25))'
173 `PAD(XPOS, 40, XPOS, 90, 15, i)
176 `define(`XPOS', eval(1025 -i*25))'
177 `PAD(XPOS, 40, XPOS, 90, 15, eval(i+116))
180 `define(`YPOS', eval(175 +i*25))'
181 `PAD(30, YPOS, 80, YPOS, 15, i)
184 `define(`XPOS', eval(175 +i*25))'
185 `PAD(XPOS, 1160, XPOS, 1110, 15, eval(i+50))
188 `define(`YPOS', eval(1025 -i*25))'
189 `PAD(1120, YPOS, 1170, YPOS, 15, i)
193 ElementArc(600 150 10 10 0 360 5)
195 # Nase links oben (PIN 17/18)
196 ElementLine( 125 175 75 150 20)
197 ElementLine( 75 150 75 125 20)
198 ElementLine( 75 125 125 75 20)
199 ElementLine( 125 75 150 75 20)
200 ElementLine( 150 75 175 125 20)
202 # Verbindungsline zur Ecke rechts oben
203 ElementLine( 175 125 1025 125 20)
205 # Nase rechts oben (PIN 116/117)
206 ElementLine(1025 125 1050 75 20)
207 ElementLine(1050 75 1075 75 20)
208 ElementLine(1075 75 1125 125 20)
209 ElementLine(1125 125 1125 150 20)
210 ElementLine(1125 150 1075 175 20)
212 # Verbindungsline zur Ecke rechts unten
213 ElementLine(1075 175 1075 1025 20)
215 # Nase rechts unten (PIN 83/84)
216 ElementLine(1075 1025 1125 1050 20)
217 ElementLine(1125 1050 1125 1075 20)
218 ElementLine(1125 1075 1075 1125 20)
219 ElementLine(1075 1125 1050 1125 20)
220 ElementLine(1050 1125 1025 1075 20)
222 # Verbindungsline zur Ecke links unten
223 ElementLine(1025 1075 175 1075 20)
225 # Nase links unten (PIN 50/51)
226 ElementLine( 175 1075 150 1125 20)
227 ElementLine( 150 1125 125 1125 20)
228 ElementLine( 125 1125 75 1075 20)
229 ElementLine( 75 1075 75 1050 20)
230 ElementLine( 75 1050 125 1025 20)
232 # Verbindungsline zur Ecke links oben
233 ElementLine( 125 1025 125 175 20)
235 # Markierung so anordnen, dass Pinanchse im 25-MIL-Raster zu liegen kommt
239 # -------------------------------------------------------------------
248 # based on mail by Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de)
250 `define(`RADIUS1', `eval(`$4' /2)')
251 define(`RADIUS2', `eval(`$4' /2 +20)')
252 Element(0x00 "$1" "`$2'" "$3" 100 70 0 100 0x00)
254 # typical LED is 0.5 mm or 0.020" square pin. See for example
255 # http://www.lumex.com and part number SSL-LX3054LGD.
256 # 0.020" square is 0.0288" diagonal. A number 57 drill is
257 # 0.043" which should be enough. a 65 mil pad gives 11 mils
260 PIN(-50, 0, 65, 43, 1)
261 PIN(50, 0, 65, 43, 2)
262 ifelse( eval(RADIUS1 - 10 > 85), 1,
263 ElementArc(0 0 RADIUS1 RADIUS1 0 360 10)
265 ElementArc(0 0 RADIUS1 RADIUS1 45 90 10)
266 ElementArc(0 0 RADIUS1 RADIUS1 225 90 10)
268 ifelse( eval(RADIUS2 - 10 > 85), 1,
269 ElementArc(0 0 RADIUS2 RADIUS2 0 360 10)
271 ElementArc(0 0 RADIUS2 RADIUS2 45 90 10)
272 ElementArc(0 0 RADIUS2 RADIUS2 225 90 10)
277 # -------------------------------------------------------------------
284 # $4: distance in mil
286 define(`PKG_DIODE_LAY',
287 `define(`X1', `eval(`$4' /3)')
288 define(`X2', `eval(`$4' -X1)')
289 define(`Y', `eval(`$4' /2)')
290 define(`DELTA', `eval(X1 /2)')
291 define(`PINSIZE', `ifelse(eval($4 >= 500), 1, 80, 50)')
292 Element(0x00 "$1" "`$2'" "$3" eval(X2+20) eval(Y-DELTA) 0 100 0x00)
294 PIN(0, Y, PINSIZE, 20, 1)
295 PIN($4, Y, PINSIZE, 20, 2)
297 ElementLine(0 Y X1 Y 10)
298 ElementLine(X2 Y $4 Y 10)
300 ElementLine(X1 Y X2 eval(Y-DELTA) 10)
301 ElementLine(X2 eval(Y-DELTA) X2 eval(Y+DELTA) 10)
302 ElementLine(X2 eval(Y+DELTA) X1 Y 10)
303 ElementLine(X1 eval(Y-DELTA) X1 eval(Y+DELTA) 10)
307 # -------------------------------------------------------------------
308 # the definition of a general axial package
312 # $4: distance in mil
313 # $5: 1 for polarized, 0 for non polarized
314 define(`PKG_AXIAL_LAY',
315 `define(`X1', `eval(`$4' /4)')
316 define(`X2', `eval(`$4' -X1)')
317 define(`Y1', `eval(X1 /3)')
318 define(`Y2', `eval(Y1 *2)')
319 define(`PINSIZE', `ifelse(eval($4 >= 600), 1, 80, 55)')
320 define(`DRILLSIZE', `ifelse(eval($4 >= 600), 1, 50, 30)')
321 define(`YPT', `eval(Y1 - PINSIZE/2 - 10)')
322 define(`YPC', `eval(YPT - 20)')
323 define(`YPB', `eval(YPT - 40)')
324 Element(0x00 "$1" "`$2'" "$3" eval(X2+20) eval(Y2+20) 0 100 0x00)
326 PIN(0, Y1, PINSIZE, DRILLSIZE, 1)
327 PIN($4, Y1, PINSIZE, DRILLSIZE, 2)
329 ElementLine(0 Y1 X1 Y1 10)
330 ElementLine(X2 Y1 $4 Y1 10)
332 ElementLine(X1 0 X2 0 10)
333 ElementLine(X2 0 X2 Y2 10)
334 ElementLine(X2 Y2 X1 Y2 10)
335 ElementLine(X1 Y2 X1 0 10)
338 ElementLine(0 YPB 0 YPT 10)
339 ElementLine(-20 YPC 20 YPC 10)
340 ElementLine(`eval($4 - 20)' YPC `eval($4 + 20)' YPC 10)
343 # ElementArc(X1 Y 50 50 270 180 10)
344 # ElementArc(X2 Y 50 50 90 180 10)
349 # -------------------------------------------------------------------
351 # general purpose crystal standing, 2 or 3 pins
355 # $4: pin spacing in mil
356 # $5: length of component in mil
357 # $6: width of component in mil
358 # $7: diametr of pad in mil
359 # $8: diametr of drill in mil
362 define(`PKG_CRYSTAL_V',
363 `define(`spacing', `$4')
367 define(`drill', `$8')
368 define(`centerY', `eval(sizY / 2)')
369 define(`pinX', `eval((sizX - spacing * (`$9'-1)) /2)')
371 Element(0x00 "$1" "$2" "$3" 0 eval(0 - 60) 0 100 0x00)
373 PIN(pinX, centerY, pad, drill, 1)
374 PIN(eval(pinX + spacing), centerY, pad, drill, 2)
375 ifelse(eval(`$9' == 3), 1,
376 PIN(eval(pinX + 2 * spacing), centerY, pad, drill, 3))
378 ElementLine(centerY 0 eval(sizX-centerY) 0 20)
379 ElementArc(eval(sizX-centerY) centerY centerY centerY 90 180 20)
380 ElementLine(eval(sizX-centerY) sizY centerY sizY 20)
381 ElementArc(centerY centerY centerY centerY 270 180 20)
387 # general purpose crystal laying, 2 or 3 pins
391 # $4: pin spacing in mil
392 # $5: length of component in mil
393 # $6: height of component in mil
394 # $7: diametr of pad in mil
395 # $8: diametr of drill in mil
398 define(`PKG_CRYSTAL_H',
399 `define(`base', `$4')
403 define(`drill', `$8')
404 define(`pinX', `eval((sizX - base * (`$9'-1)) /2)')
405 define(`pinY', `ifelse(eval(sizX > 500),1,eval(sizY+200),eval(sizY+100))')
406 define(`maxY', `eval(sizY + offset)')
408 Element(0x00 "$1" "$2" "$3" 0 eval(0 - 60) 0 100 0x00)
410 PIN(pinX, pinY, pad, drill, 1)
411 PIN(eval(pinX + base), pinY, pad, drill, 2)
412 ifelse(eval(`$9' == 3), 1,
413 PIN(eval(pinX + 2 * base), pinY, pad, drill, 3))
415 ElementLine(0 0 sizX 0 20)
416 ElementLine(sizX 0 sizX sizY 20)
417 ElementLine(sizX sizY 0 sizY 20)
418 ElementLine(0 sizY 0 0 20)
423 # a crystal package for backward compatibility
428 # $4: package width in MIL
430 define(`PKG_CRYSTAL',`PKG_CRYSTAL_V(`$1',`$2',`$3',`eval($4-100)',`$4',`100',`60',`28',`2')')
433 # -------------------------------------------------------------------
434 # a can oscillator package
441 `Element(0x00 "$1" "`$2'" "$3" 270 300 3 100 0x00)
443 Pin(100 100 50 28 "NC" 0x01)
444 Pin(100 700 50 28 "GND" 0x01)
445 Pin(400 700 50 28 "CLK" 0x01)
446 Pin(400 100 50 28 "VCC" 0x01)
448 ElementLine(5 5 400 5 10)
449 ElementArc(400 100 95 95 180 90 10)
450 ElementLine(495 100 495 700 10)
451 ElementArc(400 700 95 95 90 90 10)
452 ElementLine(400 795 100 795 10)
453 ElementArc(100 700 95 95 0 90 10)
454 ElementLine(5 700 5 5 10)
456 ElementLine(100 60 400 60 10)
457 ElementArc(400 100 40 40 180 90 10)
458 ElementLine(440 100 440 700 10)
459 ElementArc(400 700 40 40 90 90 10)
460 ElementLine(400 740 100 740 10)
461 ElementArc(100 700 40 40 0 90 10)
462 ElementLine(60 700 60 100 10)
463 ElementArc(100 100 40 40 270 90 10)
468 # -------------------------------------------------------------------
469 # 8 bit ISA Slot card
471 # Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de), 12/95
478 `Element(0x00 "$1" "`$2'" "$3" 4000 0 0 100 0x00)
480 # Pins, entspr. Anschl. auf Loetseite (b31..b1)
481 Pin( 200 3850 60 35 "Gnd (b31)" 0x01)
482 Pin( 300 3850 60 35 "Osc" 0x01)
483 Pin( 400 3850 60 35 "+5V" 0x01)
484 Pin( 500 3850 60 35 "BALE" 0x01)
485 Pin( 600 3850 60 35 "TC" 0x01)
486 Pin( 700 3850 60 35 "/DAck2" 0x01)
487 Pin( 800 3850 60 35 "IRq3" 0x01)
488 Pin( 900 3850 60 35 "IRq4" 0x01)
489 Pin(1000 3850 60 35 "IRq5" 0x01)
490 Pin(1100 3850 60 35 "IRq6" 0x01)
491 Pin(1200 3850 60 35 "IRq7" 0x01)
492 Pin(1300 3850 60 35 "Clock" 0x01)
493 Pin(1400 3850 60 35 "/Ref" 0x01)
494 Pin(1500 3850 60 35 "DRq1" 0x01)
495 Pin(1600 3850 60 35 "/DAck1" 0x01)
496 Pin(1700 3850 60 35 "DRq3" 0x01)
497 Pin(1800 3850 60 35 "/DAck3" 0x01)
498 Pin(1900 3850 60 35 "/IOR" 0x01)
499 Pin(2000 3850 60 35 "/IOW" 0x01)
500 Pin(2100 3850 60 35 "/SMEMR" 0x01)
501 Pin(2200 3850 60 35 "/SMEMW" 0x01)
502 Pin(2300 3850 60 35 "Gnd" 0x01)
503 Pin(2400 3850 60 35 "+12V" 0x01)
504 Pin(2500 3850 60 35 "/0WS" 0x01)
505 Pin(2600 3850 60 35 "-12V" 0x01)
506 Pin(2700 3850 60 35 "DRq2" 0x01)
507 Pin(2800 3850 60 35 "-5V" 0x01)
508 Pin(2900 3850 60 35 "IEQ2" 0x01)
509 Pin(3000 3850 60 35 "+5V" 0x01)
510 Pin(3100 3850 60 35 "ResDrv" 0x01)
511 Pin(3200 3850 60 35 "Gnd (b1)" 0x01)
513 # Pins, entspr. Anschl. auf Bestueckseite
514 Pin( 200 3950 60 35 "SA0 (a31)" 0x01)
515 Pin( 300 3950 60 35 "SA1" 0x01)
516 Pin( 400 3950 60 35 "SA2" 0x01)
517 Pin( 500 3950 60 35 "SA3" 0x01)
518 Pin( 600 3950 60 35 "SA4" 0x01)
519 Pin( 700 3950 60 35 "SA5" 0x01)
520 Pin( 800 3950 60 35 "SA6" 0x01)
521 Pin( 900 3950 60 35 "SA7" 0x01)
522 Pin(1000 3950 60 35 "SA8" 0x01)
523 Pin(1100 3950 60 35 "SA9" 0x01)
524 Pin(1200 3950 60 35 "SA10" 0x01)
525 Pin(1300 3950 60 35 "SA11" 0x01)
526 Pin(1400 3950 60 35 "SA12" 0x01)
527 Pin(1500 3950 60 35 "SA13" 0x01)
528 Pin(1600 3950 60 35 "SA14" 0x01)
529 Pin(1700 3950 60 35 "SA15" 0x01)
530 Pin(1800 3950 60 35 "SA16" 0x01)
531 Pin(1900 3950 60 35 "SA17" 0x01)
532 Pin(2000 3950 60 35 "SA18" 0x01)
533 Pin(2100 3950 60 35 "SA19" 0x01)
534 Pin(2200 3950 60 35 "AEN" 0x01)
535 Pin(2300 3950 60 35 "IOChRdy" 0x01)
536 Pin(2400 3950 60 35 "SD0" 0x01)
537 Pin(2500 3950 60 35 "SD1" 0x01)
538 Pin(2600 3950 60 35 "SD2" 0x01)
539 Pin(2700 3950 60 35 "SD3" 0x01)
540 Pin(2800 3950 60 35 "SD4" 0x01)
541 Pin(2900 3950 60 35 "SD5" 0x01)
542 Pin(3000 3950 60 35 "SD6" 0x01)
543 Pin(3100 3950 60 35 "SD7" 0x01)
544 Pin(3200 3950 60 35 "/IOChCk (a1)" 0x01)
547 ElementLine( 0 100 100 100 2)
548 ElementLine( 100 0 100 100 2)
549 ElementLine( 100 100 4250 100 5)
550 ElementLine(4250 100 4250 3810 5)
551 ElementLine(4250 3810 3620 3810 5)
552 ElementLine(3620 3810 3620 3510 5)
553 ElementLine(3620 3510 3300 3510 5)
554 ElementLine(3300 3510 3300 3810 5)
555 ElementLine(3300 3810 100 3810 5)
556 ElementLine( 100 3810 100 3510 5)
557 ElementLine( 100 3510 0 3510 2)
559 # Markierung == Pin B1
563 # -------------------------------------------------------------------
564 # an ovenized-oscillator package
569 # Text(620 320 0 100 "GROUND" 0x0001)
570 # Text(620 520 0 100 "VECTRON LABORATORIES, INC." 0x0001)
571 # Text(620 720 0 100 "CO711 SERIES OSC" 0x0001)
572 # Text(620 920 0 100 "711-04-006" 0x0001)
573 # Text(620 1680 0 100 "+12 -> 15 VOLTS DC" 0x0001)
574 define(`PKG_OVEN_OSC',
575 `Element(0x00 "$1" "`$2'" "$3" 580 280 0 100 0x00)
577 Pin(320 320 150 35 "NC" 0x01)
578 Pin(320 1000 150 35 "VCC" 0x01)
579 Pin(320 1680 150 35 "CLK" 0x01)
580 Pin(1680 320 150 35 "+12V" 0x01)
581 Pin(1680 1680 150 35 "GND" 0x01)
583 ElementLine(2020 1125 2020 875 10)
584 ElementLine(2100 875 2020 875 10)
585 ElementLine(2100 975 2100 875 10)
586 ElementLine(2075 975 2100 975 10)
587 ElementLine(2075 1025 2075 975 10)
588 ElementLine(2100 1025 2075 1025 10)
589 ElementLine(2100 1125 2100 1025 10)
590 ElementLine(2100 1125 2020 1125 10)
592 ElementLine(2000 320 2000 1680 10)
593 ElementLine(320 0 1680 0 10)
594 ElementLine(0 1680 0 320 10)
595 ElementLine(1680 2000 320 2000 10)
597 ElementArc(320 320 320 320 270 90 10)
598 ElementArc(320 1680 320 320 0 90 10)
599 ElementArc(1680 320 320 320 180 90 10)
600 ElementArc(1680 1680 320 320 90 90 10)
605 # a radial capacitor package
610 # $4: package width in MIL
611 # $5: set to 1 if a polarized part
612 define(`PKG_RADIAL_CAN',
613 `define(`X1', `eval(`$4' /4)')
614 define(`X2', `eval(`$4' -X1)')
615 define(`X3', `eval(`$4' /2)')
616 define(`Y', `eval(`$4' /2)')
617 define(`R', `eval(`$4' /2)')
618 define(`PINSIZE', `ifelse(eval($4 >= 600), 1, 80, 55)')
619 define(`DRILLSIZE', `ifelse(eval($4 >= 600), 1, 50, 30)')
620 Element(0x00 "$1" "`$2'" "$3" eval(`$4') 0 0 100 0x00)
622 PIN(X1, Y, 60, DRILLSIZE, 1)
623 PIN(X2, Y, 60, DRILLSIZE, 2)
624 ElementArc(X3 Y R R 0 360 10)
627 ElementLine(-60 Y -20 Y 10)
628 ElementLine(-40 `eval(Y-20)' -40 `eval(Y+20)' 10)
629 ElementLine(`eval($4 + 20)' Y `eval($4 + 60)' Y 10)
635 # a core surface mount package
636 # 12/99 Larry Doolittle <LRDoolittle@lbl.gov>
641 # $4: device length in MIL
642 # $5: device width in MIL
644 # Note that the pad width, length, and separation are derived from
645 # the given device dimensions. I <LRDoolittle@lbl.gov> don't
646 # claim to have followed any industry standards here, these sizes
647 # are based on someone else's measurements:
648 # 0603 is 30x40 mil pads on 60 mil pad ctr
649 # 0805 is 44x60 mil pads on 80 mil pad ctr
650 # on a PC motherboard. If you know the "real" values, please educate
651 # me and/or adjust this code.
653 define(`PKG_SMD_BASE',
654 `define(`T', `eval(`$4'/4+`$5'/2)')
655 define(`W', `eval(T/2+15)')
659 define(`Y1', `eval(Y-(`$5'-T)/2-5)')
660 define(`Y2', `eval(Y+(`$5'-T)/2+5)')
661 # Silkscreen box coordinates
662 define(`X1L', `eval(X1-W)')
663 define(`X2L', `eval(X2+W)')
664 define(`Y1L', `eval(Y1-W)')
665 define(`Y2L', `eval(Y2+W)')
666 Element(0x00 "$1" "`$2'" "$3" eval(10+T/2) eval(Y2L+15) 0 100 0x00)
668 # PAD(X1, Y1, X1, Y2, T, 1)
669 # PAD(X2, Y1, X2, Y2, T, 2)
670 # Use Pad instead of PAD so both pads come out square
671 Pad(X1 Y1 X1 Y2 T "1" 0x100)
672 Pad(X2 Y1 X2 Y2 T "2" 0x100)
673 ElementLine(X1L Y1L X1L Y2L 8)
674 ElementLine(X1L Y2L X2L Y2L 8)
675 ElementLine(X2L Y2L X2L Y1L 8)
676 ElementLine(X2L Y1L X1L Y1L 8)
680 define(`PKG_SMD_SIMPLE',
681 `define(`SMD_OUTLINE_EXTRA', `')
682 PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
685 define(`PKG_SMD_DIODE',
686 `define(`SMD_OUTLINE_EXTRA',
688 define(`XBAR', `eval(X1L+10)')
689 ElementLine( XBAR Y1L XBAR Y2L 8 )
691 PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
694 define(`PKG_SMD_POLAR',
695 `define(`SMD_OUTLINE_EXTRA',
698 # ElementLine( X1 eval(Y2L+20) X1 eval(Y2L+70) 8)
699 # ElementLine( eval(X1-25) eval(Y2L+45) eval(X1+25) eval(Y2L+45) 8)
700 define(`XBAR', `eval(X1L+10)')
701 ElementLine( XBAR Y1L XBAR Y2L 8 )
704 PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
707 # a smd chip package, capacitor or resistor
712 # $4: package designator length in MIL *100 + width in MIL /10
713 # ie 402 == 40 X 20; 603 == 60 X 30
715 define(`PKG_SMD_CHIP',
716 `define(`X1', `eval(eval(`$4' /100)*10)')
717 define(`Y1', `eval(eval(`$4'- X1 *10) *10)')
718 # line radius (LR) depicts offset to pads lines and pad "band width"
719 define(`LR', `ifelse(eval(Y1 < 40), 1, eval(Y1/4), 10)')
720 Element(0x00 "$1" "`$2'" "$3" 0 0 0 25 0x00)
722 PAD(LR LR LR eval(Y1-LR) eval(LR*2) )
723 PAD(eval(X1-LR) LR eval(X1-LR) eval(Y1-LR) eval(LR*2) )
725 ElementLine( 0 0 X1 0 5)
726 ElementLine(X1 0 X1 Y1 5)
727 ElementLine(X1 Y1 0 Y1 5)
728 ElementLine( 0 Y1 0 0 5)
730 Mark(eval(X1/2) eval(Y1/2))