chiark / gitweb /
undo broken deletion
[trains.git] / pcb / generate-netspec.pl
1 #!/usr/bin/perl
2 # -*- fundamental -*-
3
4 # handy rune for grepping net orders etc:
5 # <reversers.net perl -ne 'next unless m/\bPOINTS-(\d+)\b/; printf "%02d\t%s",$1,$_' | sort
6
7 use IO::Handle;
8
9 die unless @ARGV==1;
10 $ARGV[0] =~ m,\b(reversers|detectors)(?:\.net-spec)?$, or die;
11 $$1= 1;
12
13 @indiv= qw(
14                 icsp_pcq
15                 l_gnd
16                 led_red
17                 led_green
18         );
19
20 if ($reversers) {
21         push @indiv, qw(
22                 cdu_enable
23                 booster_shutdown
24                 booster_overload
25                 userfault
26                 booster_dirn
27                 booster_pwm
28                 spare0
29                 spare1
30                 spare2
31                 rs232_rxin
32                 rs232_txout
33                 rs232_fcin
34                 rs232_fcout
35                 );
36         print "INDIV1 26 @indiv\n"; # 25-way D
37         %val = qw(
38                 q       5
39                 p       17
40                 x       qmid=
41                 o       8
42                 );
43         $val{'m'}= '';
44         $val{'M'}= '';
45         $val{'n'}= '';
46 } else {
47         push @indiv, qw(
48                 spare0
49                 analogue
50                 rs232_rxin
51                 rs232_txout
52                 pwmout
53                 extint0
54                 extint1
55                 ptdrain0..10
56                 );
57         %val = qw(
58                 q       20
59                 p       9
60                 x       q=
61                 o       4
62                 );
63         @sensel= qw(18 15 12 9 6 0 3  19 16 13 10 7 1 4  20 17 14 11 8 2 5);
64         $val{'m'}.= "sensei{";
65         for ($j=0; $j<16; $j+=8) {
66                 for ($i=0;$i<4;$i++) {
67                         $val{'m'} .= sprintf " %d %d", $i+$j, $i+$j+4;
68                 }
69         }
70         $val{'m'}.= " sensei19..16 20 }{ @sensel }";
71         $val{'M'}= $val{'m'};
72         $val{'M'} =~ s/sensei/sense/g;
73         @senser= @sensel[0..12];
74         push @senser, qw(20 2 -  4 17 - 8 11 14 5 -);
75         @senser= map { s/^\d/sense$&/; $_ } @senser;
76         print "RAS0 9 l_vcc @senser[0..7]\n";
77         print "RAS1 9 l_vcc @senser[8..15]\n";
78         print "RAS2 9 l_vcc @senser[16..23]\n";
79 }
80
81 print "INDIV0 25 :13-%12/2 @indiv\n"; # 26-way ribbon
82
83 $doing= 1;
84
85 while (<DATA>) {
86         next if m/^\#/;
87         if (m/^\^\=(reversers|detectors)\:\s*$/) {
88                 $doing= $$1;
89                 next;
90         }
91         next unless $doing;
92         s/\^(\w)/ die $1 unless exists $val{$1}; $val{$1}; /ge;
93         print;
94 }
95
96 die $! if STDOUT->error;
97
98 __DATA__
99
100 l_gnd   Power
101 l_vcc   Power
102 rly_gnd Power
103 rly_v12 Power
104
105 !PIC-DEFINE 40
106                 1 mclr
107                 2 RA0..5 RE0..2
108                 11 l_vcc l_gnd clock
109                 14 RA6 RC0..3 RD0 RD1
110                 21 RD2 RD3 RC4..7 RD4..7
111                 31 l_gnd l_vcc
112                 33 RB0..7
113
114 !type Fat q0..^q qmid0..^q
115 !type Power ptdrain0..^p
116
117 # 32-way ribbon
118 BUS 32
119                       icsp_pdw 
120                 l_gnd icsp_pdrany 
121                 l_gnd icsp_pdrall 
122                 l_gnd clock 
123                 l_gnd l_vcc mclr
124                 l_gnd i2c_clock led_reflow i2c_data led_refhigh
125                 rly_gnd rly_v12
126                 cdu_gnd cdu_out
127
128 CAC05 2         l_gnd l_vcc
129 0-1/1 CPIC= 2   l_gnd l_vcc
130
131 0-^q/1 BR= 4
132                 :1+2 sshort=*2
133                 :2 ^x
134                 :4 q
135
136 0-^q/1 RS= 2
137                 sensei= ^x
138
139 AC05 14
140                 :8+
141                 icsp_pdrall icsp_pdrall_mid icsp_pdrall_mid icsp_pd
142                 icsp_pdrany icsp_pd
143                 l_vcc
144                 :7-
145                 l_gnd
146                 icsp_pdw_mid icsp_pdw
147                 ptgate0 icsp_pd
148                 - l_gnd
149
150 RPDR 2          icsp_pdrall_mid l_vcc
151 RPDWU 2         icsp_pdw_mid l_vcc
152 RPDWI 2         icsp_pdw_mid icsp_pd
153 RPT0U 2         ptgate0 l_vcc
154
155 RPCI 2          icsp_pc icsp_pcq
156 RPCL 2          icsp_pcq l_gnd
157 RPCPT 2         icsp_pc ptgate1
158
159 0-^p/1 PTFET= 3 ptgate= ptdrain= cdu_gnd
160 0-^p/1 PTD= 2   cdu_out ptdrain=
161 2-^p/8 RAP= 16  :1 pt<..> :-0- ptgate<..>
162
163 cdu_out         Power
164 cdu_gnd         Power
165
166 TS912 8
167                 :1 ledmid_red perpicled led_reflow
168                 :7- ledmid_green led_refhigh perpicled
169                 :4 l_gnd
170                 :8 l_vcc
171
172 RLG 2           ledmid_green led_green
173 RLR 2           ledmid_red led_red
174 RLL 2           perpicled l_gnd
175
176 0-^q/4 OC= 16==^o ^m ^M
177                 :1+2 sensei<..>
178                 :2+2 q*&
179                 :-1-2 l_gnd*&
180                 :-0-2 sense<..>
181
182 ^=reversers:
183
184 !type Fat t0..5
185
186 !PIC-ASSIGN
187                 1 mclr
188                 spare0
189                 reverse0..2
190                 sense3
191                 reverse3..5
192                 sense2
193                 l_vcc l_gnd clock
194                 sense1
195                 pt17,booster_dirn
196                 pt16,booster_pwm
197                 sense0
198                 i2c_clock
199                 19 sense5..4
200                 :40-
201                 pt0,icsp_pd
202                 pt1,icsp_pc
203                 pt6,cdu_enable
204                 pt7,rs232_fcin
205                 pt2
206                 pt8,booster_shutdown,
207                 pt9,booster_overload
208                 pt10,userfault
209                 l_vcc
210                 l_gnd
211                 pt3
212                 pt11,spare2
213                 pt12,spare1
214                 pt4
215                 pt13,rs232_rxin
216                 pt14,rs232_txout
217                 pt15,rs232_fcout
218                 i2c_data
219                 pt5
220                 21 perpicled
221
222 TERM 14
223                 1 t q
224                 :3+2 t0..5
225                 :4+2 q0..5
226
227 ULN 18
228                 :11 rlydrv5..0
229                 :8- reverse5..0 rly_gnd rly_gnd
230                 :9 rly_gnd
231                 :10 rly_v12
232
233 CULN 2          rly_gnd rly_v12
234
235 RAS 9
236                 l_vcc
237                 :2 sense3..0 sense5..4
238                 - perpicled
239
240 POINTS 25
241                 : 13-1 13 25-1 : ptdrain1..17
242                 :14 ptdrain0
243
244 0-5/1 RLY= 16
245                 :1 rly_v12
246                 :4 q=
247                 :6 qmid=
248                 :8 t
249                 :9 qmid=
250                 :11 t
251                 :13 t=
252                 :16 rlydrv=
253
254 ^=detectors:
255
256 #0-^q/8 RAS= 9
257 #               l_vcc
258 #               :2 line{ line0..20 - - }{ ^r } line&
259
260 RAS2 9
261                 :9 perpicled
262
263 !PIC-ASSIGN
264                 1 mclr
265                 pt4,analogue
266                 pt5,spare0
267                 sense18
268                 sense15
269                 sense12
270                 sense9
271                 sense6
272                 sense0
273                 sense3
274                 l_vcc l_gnd clock
275                 sense19
276                 sense16
277                 sense13
278                 sense10
279                 i2c_clock
280                 sense7
281                 sense1
282                 :40-
283                 pt0,icsp_pd
284                 pt1,icsp_pc
285                 pt2
286                 sense4
287                 sense20
288                 sense17
289                 pt6,extint1
290                 pt7,extint0
291                 l_vcc
292                 l_gnd
293                 sense2
294                 sense11
295                 sense14
296                 pt3,pwmout
297                 pt8,rs232_rxin
298                 pt9,rs232_txout
299                 sense5
300                 i2c_data
301                 sense8
302                 21 perpicled
303
304 TERM 22
305                 q0..20 q