summaryrefslogtreecommitdiff
path: root/graphics/circuit_macros/examples/svg/icsSVG.m4
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/circuit_macros/examples/svg/icsSVG.m4')
-rw-r--r--graphics/circuit_macros/examples/svg/icsSVG.m4193
1 files changed, 123 insertions, 70 deletions
diff --git a/graphics/circuit_macros/examples/svg/icsSVG.m4 b/graphics/circuit_macros/examples/svg/icsSVG.m4
index 0733bbef64..8a3c99b66f 100644
--- a/graphics/circuit_macros/examples/svg/icsSVG.m4
+++ b/graphics/circuit_macros/examples/svg/icsSVG.m4
@@ -1,110 +1,108 @@
divert(-1)
- Macros defining some integrated circuits and connectors
-
-define(`lg_pinsep',3*L_unit) logic pin separation in logic units
-define(`lg_chipwd',18*L_unit) default chip width
-define(`overbar_',`{ line right last "".wid with .c at last "".n+(0,1bp__) }')
+ Macros defining some integrated circuits and connectors for SVG
`A sequence of pins along the east or west side of a chip:
- lg_pinseq(initial pin no,final pin no,
- e|w,initial offset,pinnum_root,Labelroot,[not])'
+ lg_pinseq(initial pin no, final pin no,
+ e|w, initial offset, pinnum_root, Labelroot, [N])'
+ `e.g., lg_pinseq(1,8,w)'
define(`lg_pinseq',`for_($1,$2,1,
`lg_pin( Chip.s`$3'+(0,eval($4+m4x)*lg_pinsep),
$6`'m4x,Pin`'eval($5`'m4x),`$3'`$7',eval($5`'m4x))') ')
+define(`ic_tiny',`iflatex(`\hbox{\tiny `$1'}',ifsvg(`svg_small(`$1')',`$1'))')
+
define(`ic6116',`[ Chip: box wid_ lg_chipwd ht_ 15*lg_pinsep
lg_pin(Chip.sw_+(0,lg_pinsep),GND,Pin12,w,12)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),,Pin18,wN,18)
- "svg_small(CS,75)" wid textht*1.5 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),lg_bartxt(CS),Pin18,wN,18)
lg_pinseq(0,2,w,4,9+,D)
lg_pinseq(3,7,w,4,10+,D)
- lg_pin(Chip.sw_+(0,13*lg_pinsep),,Pin21,w,21)
- "svg_small(R/W,75)" wid textht*2.0 at (Chip.w,last line) ljust
- { line right last "".wid/2 from last "".n+(0,1bp__) }
-
- lg_pin(Chip.sw_+(0,14*lg_pinsep),V`'svg_small(CC,75),Pin24,w,24)
- lg_pin(Chip.se_+(0,lg_pinsep),,Pin20,eN,20)
- "svg_small(OE,75)" wid textht*1.5 at (Chip.e,last line) rjust; overbar_
-
+ lg_pin(Chip.sw_+(0,13*lg_pinsep),R/lg_bartxt(W),Pin21,w,21)
+ lg_pin(Chip.sw_+(0,14*lg_pinsep),V`'ic_tiny(CC),Pin24,w,24)
+ lg_pin(Chip.se_+(0,lg_pinsep),lg_bartxt(OE),Pin20,eN,20)
lg_pinseq(0,7,e,3,8-,A)
lg_pinseq(8,9,e,3,31-,A)
lg_pin(Chip.se_+(0,13*lg_pinsep),A10,Pin19,e,19)
`$1']')
define(`ic6502',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
- lg_pin(Chip.sw_+(0,lg_pinsep),V`'svg_small(SS,75),Pin21,w,21)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),V`'svg_small(SS,75),Pin1,w,1)
- lg_pin(Chip.sw_+(0,4*lg_pinsep),,Pin34,w,34)
- "svg_small(R/W,75)" wid textht*2.0 at (Chip.w,last line) ljust
- { line right last "".wid/2 from last "".n+(0,1bp__) }
-
+ lg_pin(Chip.sw_+(0,lg_pinsep),V`'ic_tiny(SS),Pin21,w,21)
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),V`'ic_tiny(SS),Pin1,w,1)
+ lg_pin(Chip.sw_+(0,4*lg_pinsep),R/lg_bartxt(W),Pin34,w,34)
lg_pinseq(0,7,w,6,33-,D)
- lg_pin(Chip.sw_+(0,15*lg_pinsep),,Pin40,wN,40)
- "svg_small(RESET,75)" wid textht*3.8 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,15*lg_pinsep),lg_bartxt(RESET),Pin40,wN,40)
lg_pin(Chip.sw_+(0,17*lg_pinsep),SYNC,Pin7,w,7)
- lg_pin(Chip.sw_+(0,19*lg_pinsep),,Pin6,wN,6)
- "svg_small(NMI,75)" wid textht*2.1 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,19*lg_pinsep),lg_bartxt(NMI),Pin6,wN,6)
lg_pin(Chip.sw_+(0,21*lg_pinsep),RDY,Pin2,w,2)
lg_pin(Chip.sw_+(0,22*lg_pinsep),SO,Pin38,w,38)
- lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'svg_small(CC,75),Pin8,w,8)
- lg_pin(Chip.se_+(0,lg_pinsep),CK`'svg_small(1,75)(in),Pin39,e,39)
- lg_pin(Chip.se_+(0,4*lg_pinsep),CK`'svg_small(2,75)(out),Pin37,e,37)
+ lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'ic_tiny(CC),Pin8,w,8)
+ lg_pin(Chip.se_+(0,lg_pinsep),CK`'ic_tiny(1)(in),Pin39,e,39)
+ lg_pin(Chip.se_+(0,4*lg_pinsep), CK`'ic_tiny(2)(out),Pin37,e,37)
lg_pinseq(0,11,e,6,9+,A)
lg_pinseq(12,15,e,6,10+,A)
- lg_pin(Chip.se+(0,23*lg_pinsep),,Pin4,eN,4)
- "svg_small(IRQ,75)" wid textht*2.0 at (Chip.e,last line) rjust; overbar_
+ lg_pin(Chip.se+(0,23*lg_pinsep),lg_bartxt(IRQ),Pin4,eN,4)
`$1']')
define(`ic6522',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
- lg_pin(Chip.sw_+(0,lg_pinsep),V`'svg_small(SS,75),Pin1,w,1)
+ lg_pin(Chip.sw_+(0,lg_pinsep),V`'ic_tiny(SS),Pin1,w,1)
lg_pin(Chip.sw_+(0,3*lg_pinsep),CS1,Pin24,w,24)
lg_pin(Chip.sw_+(0,4*lg_pinsep),CK,Pin25,w,25)
- lg_pin(Chip.sw_+(0,5*lg_pinsep),,Pin23,wN,23)
- "svg_small(CS2,75)" wid textht*2.2 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,5*lg_pinsep),lg_bartxt(CS2),Pin23,wN,23)
lg_pin(Chip.sw_+(0,7*lg_pinsep),RS0(A0),Pin38,w,38)
lg_pin(Chip.sw_+(0,8*lg_pinsep),RS1(A1),Pin37,w,37)
lg_pin(Chip.sw_+(0,9*lg_pinsep),RS2(A2),Pin36,w,36)
lg_pin(Chip.sw_+(0,10*lg_pinsep),RS3(A3),Pin35,w,35)
lg_pinseq(0,7,w,12,33-,D)
- lg_pin(Chip.sw_+(0,21*lg_pinsep),,Pin22,w,22)
- "svg_small(R/W,75)" wid textht*2.0 at (Chip.w,last line) ljust
- { line right last "".wid/2 from last "".n+(0,1bp__) }
-
- lg_pin(Chip.sw_+(0,22*lg_pinsep),,Pin21,wN,21)
- "svg_small(IRQ,75)" wid textht*2.0 at (Chip.w,last line) ljust; overbar_
-
- lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'svg_small(CC,75),Pin20,w,20)
+ lg_pin(Chip.sw_+(0,21*lg_pinsep),R/lg_bartxt(W),Pin22,w,22)
+ lg_pin(Chip.sw_+(0,22*lg_pinsep),lg_bartxt(IRQ),Pin21,wN,21)
+ lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'ic_tiny(CC),Pin20,w,20)
lg_pinseq(0,7,e,1,10+,PB)
lg_pinseq(1,2,e,8,17+,CB)
lg_pinseq(0,7,e,12,2+,PA)
lg_pinseq(1,2,e,19,41-,CA)
- lg_pin(Chip.se_+(0,23*lg_pinsep),,Pin34,eN,34)
- "svg_small(RESET,75)" wid textht*3.8 at (Chip.e,last line) rjust; overbar_
-
+ lg_pin(Chip.se_+(0,23*lg_pinsep),lg_bartxt(RESET),Pin34,eN,34)
`$1']')
define(`ic74LS138',`[ Chip: box wid_ lg_chipwd ht_ 11*lg_pinsep
lg_pin(Chip.sw_+(0,lg_pinsep),GND,Pin8,w,8)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),,Pin4,wN,4)
- "svg_small(G2a,75)" wid textht*2.0 at (Chip.w,last line) ljust; overbar_
-
- lg_pin(Chip.sw_+(0,3*lg_pinsep),,Pin5,wN,5)
- "svg_small(G2b,75)" wid textht*2.0 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),lg_bartxt(G2a),Pin4,wN,4)
+ lg_pin(Chip.sw_+(0,3*lg_pinsep),lg_bartxt(G2b),Pin5,wN,5)
lg_pin(Chip.sw_+(0,5*lg_pinsep),A,Pin1,w,1)
lg_pin(Chip.sw_+(0,6*lg_pinsep),B,Pin2,w,2)
lg_pin(Chip.sw_+(0,7*lg_pinsep),C,Pin3,w,3)
lg_pin(Chip.sw_+(0,9*lg_pinsep),G1,Pin6,w,6)
- lg_pin(Chip.sw_+(0,10*lg_pinsep),V`'svg_small(CC,75),Pin16,w,16)
+ lg_pin(Chip.sw_+(0,10*lg_pinsep),V`'ic_tiny(CC),Pin16,w,16)
lg_pinseq(0,6,e,2,15-,Y,n)
lg_pin(Chip.se_+(0,9*lg_pinsep),Y7,Pin7,eN,7)
`$1']')
+define(`ic4017',`[ Chip: DIP_chip_outline(16)
+ Loopover_(`x',
+ `lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
+ PL, Q3, I3, I0, CLE, Q0, TC, GND)
+ Loopover_(`x',
+ `lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+8),e,eval(m4Lx+8))',
+ MR, U/D, Q1, I1, I2, Q2, CLK, Vcc)
+ `$1']')
+
+define(`ic4510',`[ Chip: DIP_chip_outline(16)
+ Loopover_(`x',
+ `lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
+ PL, Q3, I3, I0, CLE, Q0, TC, GND)
+ Loopover_(`x',
+ `lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+8),e,eval(m4Lx+8))',
+ MR, U/D, Q1, I1, I2, Q2, CLK, Vcc)
+ `$1']')
+
+define(`icVS1053',`[ Chip: DIP_chip_outline(32)
+ Loopover_(`x',
+ `lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
+ LOUT,ROUT,GBUF,AGND,AGND,DREG,Vcc,3V3,GND,MISO,MOSI,sclk,RST,CS,DCS,DCS)
+ Loopover_(`x',
+ `lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+16),e,eval(m4Lx+16))',
+ SDCD,RX,TX,7,6,5,4,3,2,1,0,GND,3V3,AGND,MIC`'svg_it(-),MIC`'svg_it(+))
+ `$1']')
+
`ArduinoUno( wid,ht,pinlen )'
define(`ArduinoUno',`[
define(`m4bwid',`ifelse(`$1',,`24*L_unit',`$1')')dnl
@@ -118,7 +116,7 @@ define(`ArduinoUno',`[
Loopover_(`x',`ifelse(x,nul,,
`Pin`'eval(5+m4Lx): line left_ plen from Connector.nw-(0,(5+m4Lx)*lg_pinsep)
{ "x" ljust at last line.start }')',
- IOREF, RESET,`+`'3V3',`+`'5V', GND, GND, VIN,
+ IOREF, RESET,svg_it(+)3V3,svg_it(+)5V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
Loopover_(`x',`ifelse(x,nul,,
@@ -141,7 +139,7 @@ define(`ArduinoLeonardo',`[
Loopover_(`x',`ifelse(x,nul,,
`Pin`'eval(5+m4Lx): line left_ plen from Connector.nw-(0,(5+m4Lx)*lg_pinsep)
{ "x" ljust at last line.start }')',
- IOREF, RESET,`+`'3V3',`+`'5V', GND, GND, VIN,
+ IOREF, RESET,svg_it(+)3V3,svg_it(+)5V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
Loopover_(`x',`ifelse(x,nul,,
@@ -155,8 +153,8 @@ Loopover_(`x',`ifelse(x,nul,,
`RPi( wid,ht,pinlen )'
define(`RPi',`[
- define(`m4bwid',`ifelse(`$1',,`34*L_unit',`$1')')dnl
- define(`m4bht',`ifelse(`$2',,`21*lg_pinsep',`$2')')dnl
+ define(`m4bwid',`ifelse(`$1',,`34*L_unit',`$1')')dnl
+ define(`m4bht',`ifelse(`$2',,`21*lg_pinsep',`$2')')dnl
#
GPIO: box wid m4bwid ht m4bht
plen = ifelse(`$4',,`6*L_unit',`$4')
@@ -171,9 +169,11 @@ Loopover_(`x',`ifelse(x,nul,,`A_LeftGPIO(m4Lx,patsubst(x,;,`,'))')',
;3V3,
2;SDA1, 3;SCL1, 4;GPIO_GCLK,
;GND,
- 17;GPIO_GEN0, 27;GPIO_GEN2, 22;GPIO_GEN3,
+ 17;GPIO_GEN0, 27;GPIO_GEN2,
+ 22;GPIO_GEN3,
;3V3,
- 10;SPI_MOSI, 9;SPI_MISO, 11;SPI_SCLK,
+ 10;SPI_MOSI, 9;SPI_MISO,
+ 11;SPI_SCLK,
;GND,
;ID_SD,
5;, 6;, 13;, 19;, 26;,
@@ -193,7 +193,8 @@ Loopover_(`x',`ifelse(x,nul,,`A_RightGPIO(m4Lx,patsubst(x,;,`,'))')',
;GND,
23;GPIO_GEN4, 24;GPIO_GEN5,
;GND,
- 25;GPIO_GEN6, 8;SPI_CEO_N, 7;SPI_CE1_N,
+ 25;GPIO_GEN6, 8;SPI_CEO_N,
+ 7;SPI_CE1_N,
;ID_SC,
;GND,
12;,
@@ -214,12 +215,14 @@ define(`USB_C_Socket',`[
`B`'eval(13-m4Lx): dnl
line left_ plen from Base.n-(m4bwid/2,(m4Lx+0.5)*lg_pinsep)
{"x" ljust at last line.start}',
- GND, RX1+, RX1-, VBUS, SBU2, D-, D+, CC2, VBUS, TX2-, TX2+, GND)
+ GND, RX1`'svg_it(+), RX1`'svg_it(-), VBUS, SBU2, D`'svg_it(-),
+ D`'svg_it(+), CC2, VBUS, TX2`'svg_it(-), TX2`'svg_it(+), GND)
#
Loopover_(`x',
`A`'m4Lx: line right_ plen from Base.n+(m4bwid/2,-(m4Lx+0.5)*lg_pinsep)
{"x" rjust at last line.start}',
- GND, TX1+, TX1-, VBUS, CC1, D+, D-, SBU1, VBUS, RX2-, RX2+, GND)
+ GND, TX1`'svg_it(+), TX1`'svg_it(-), VBUS, CC1, D`'svg_it(+),
+ D`'svg_it(-), SBU1, VBUS, RX2`'svg_it(-), RX2`'svg_it(+), GND)
#
`$4']')
@@ -238,11 +241,13 @@ define(`HDMI_micro',`[
`Pin`'m4Lx: line left_ plen from Base.nw-(0,m4bwid/3+(m4Lx-1/2)*lg_pinsep)
{"x" ljust at last line.start}
"m4Lx" at last line.c above',
- HPD, UTILITY, D2+, D2_SH, D2-, D1+, D1_SH, D1-, D0+, D0_SH,
- D0-, CLK+, CLK_SH, CLK-, CEC, GND, SCL, SDA, +5V)
- line from Base.nw+(m4bwid*2/3-lg_pinsep,0) up plen
+ HPD, UTILITY, D2`'svg_it(+), D2_SH, D2`'svg_it(-),
+ D1`'svg_it(+), D1_SH, D1`'svg_it(-),D0`'svg_it(+), D0_SH,
+ D0`'svg_it(-), CLK`'svg_it(+), CLK_SH, CLK`'svg_it(-),
+ CEC, GND, SCL, SDA,svg_it(+)5V)
+L1: line from Base.nw+(m4bwid*2/3-lg_pinsep,0) up plen
svg_rot(90,"21" at last line.c +(-2bp__,0))
- svg_rot(90,sprintf("SH2") at last line.start + (4bp__,-8bp__))
+ svg_rot(90,"SH2" at last line.start + (4bp__,-8bp__))
line from Base.nw+(m4bwid*2/3-2*lg_pinsep,0) up plen
svg_rot(90,"20" at last line.c+(-2bp__,0))
svg_rot(90,"SH1" at last line.start + (4bp__,-8bp__))
@@ -255,4 +260,52 @@ define(`HDMI_micro',`[
#
`$4']')
+ `DIP_chip_outline( pin count, wid )'
+define(`DIP_chip_outline',
+ `[ define(`m4pinct',`ifelse(`$1',,16,`$1')')dnl
+ define(`m4chgw',`ifelse(`$2',,(18*L_unit),`$2')')dnl
+ Chip: box invis wid m4chgw ht lg_pinsep*eval((m4pinct)/2+1)
+ arcd(last box.n, lg_pinsep/2, 180, 360)
+ { line to last box.ne chop -linewid bp__/2 }
+ { line from last arc.start to last box.nw chop -linewid bp__/2 }
+ line from last box.nw to last box.sw then to last box.se then to last box.ne
+ `$3']')
+
+ `DIP( pin count, attributes)
+ Dual in-line package
+ attributes=semicolon-separated list of optional terms:
+ bodywid=expr; (default 0.25 = 5*L_unit )
+ bodylen=expr; (default pin count/2 x pinpitch)
+ pinpitch=expr; (default 0.1)
+ pinwid=expr; (default 0.06)
+ pinlen=expr; (default 0.05)
+ direct=U|D|L|R;(default U for up)
+ type=I|Q; (default I for uniform-length pins;
+ Q: staggered) '
+define(`DIP',`[ pinct= ifelse(`$1',,8,`$1')
+ Loopover_(`Z',`setkey_(`$2',patsubst(Z,:.*),patsubst(Z,.*:))',
+ bodywid: 5*L_unit,
+ bodylen: m4pinpitch*int(pinct/2+0.5),
+ pinpitch:2*L_unit,
+ pinwid: 1.2*L_unit,
+ pinlen: L_unit)
+ Loopover_(`Z',`setkey_(`$2',patsubst(Z,:.*),patsubst(Z,.*:),N)',
+ direct:U,
+ type:I)
+ setdir_(m4direct,U)
+ Body: box ht_ m4bodywid wid_ m4bodylen
+ arcs = ifelse(m4dir,right,90,m4dir,up,180,m4dir,left,270,0)
+ arcd(Body.e_, 0.1/2, arcs,arcs+180)
+ np2 = int(pinct/2+0.5)
+ define(`m4bxht',`m4pinlen ifelse(m4type,Q,`*(1+(i%%2))')')dnl
+ for i=0 to np2-1 do {
+ exec sprintf("Pin%g: box ht_ m4bxht wid_ m4pinwid \
+ with .s_ at (i+0.5)/np2 between Body.ne_ and Body.nw_",i+1) }
+ for i=np2+1 to pinct do {
+ exec sprintf("Pin%g: box ht_ m4bxht wid_ m4pinwid \
+ with .n_ at (i-np2-0.5)/(pinct-np2) between Body.sw_ and Body.se_",i) }
+ `$3'; resetdir_
+ popdef(`m4bodywid',`m4bodylen',`m4pinpitch',`m4pinwid',`m4pinlen',`m4direct',
+ `m4type') ]'))
+
divert(0)dnl