chiark / gitweb /
rats nicely laid out etc except for pic pins
authorian <ian>
Sat, 28 Aug 2004 19:28:41 +0000 (19:28 +0000)
committerian <ian>
Sat, 28 Aug 2004 19:28:41 +0000 (19:28 +0000)
pcb/detectors.pcb
pcb/generate-netspec.pl
pcb/netlist-expand

index dc7eb5ed376b06086293c7a0f48b784ec7221645..da59881855ac59c94e7ad059cd2c272e720cdabd 100644 (file)
@@ -1,12 +1,12 @@
 # release: pcb-bin 1.99p
-# date:    Sat Aug 28 19:27:50 2004
+# date:    Sat Aug 28 20:27:40 2004
 # user:    ian (Ian Jackson)
 # host:    anarres.relativity.greenend.org.uk
 
 PCB["detectors.pcb" 1410000 355000]
 
 Grid[2500.00000000 0 0 0]
-Cursor[620000 202500 2.826317]
+Cursor[563442 422582 5.826317]
 Thermal[0.500000]
 DRC[809 400 800 800]
 Flags(0x0000000000001e51)
@@ -1714,7 +1714,7 @@ Element[0x00000000 "Axial non-polar component (typically resistor or capacitor),
 
        )
 
-Element[0x00000000 "generic" "OC4" "DIL 16" 580000 295000 8000 -10000 1 100 0x00000000]
+Element[0x00000000 "generic" "OC4" "DIL 16" 580000 287500 8000 -10000 1 100 0x00000000]
 (
        Pin[0 0 6000 3000 6600 2800 "1" "1" 0x00004101]
        Pin[10000 0 6000 3000 6600 2800 "2" "2" 0x00004001]
@@ -1768,7 +1768,7 @@ Element[0x00000000 "generic" "OC3" "DIL 16" 625000 162500 10000 8000 0 100 0x000
 
        )
 
-Element[0x00000000 "8xR-array 0.25W, common pin" "RAS1" "100" 692500 215000 6000 -6000 0 100 0x00000000]
+Element[0x00000000 "8xR-array 0.25W, common pin" "RAS1" "100" 670000 162500 6000 -6000 0 100 0x00000000]
 (
        Pin[0 0 7000 3000 7500 3000 "common" "1" 0x00000101]
        Pin[0 10000 7000 3000 7500 3000 "1" "2" 0x00000001]
@@ -1857,7 +1857,7 @@ Element[0x00000000 "Axial non-polar component (typically resistor or capacitor),
 
        )
 
-Element[0x00000000 "8xR-array 0.25W, common pin" "RAS2" "100" 670000 162500 6000 -6000 0 100 0x00000000]
+Element[0x00000000 "8xR-array 0.25W, common pin" "RAS2" "100" 690000 215000 6000 -6000 0 100 0x00000000]
 (
        Pin[0 0 7000 3000 7500 3000 "common" "1" 0x00000101]
        Pin[0 10000 7000 3000 7500 3000 "1" "2" 0x00000001]
@@ -2494,6 +2494,55 @@ Rat[532500 45000 1 625000 25000 1  0x00000010]
 Rat[512500 15000 1 615000 25000 1  0x00000010]
 Rat[502500 15000 1 500000 67500 1  0x00000010]
 Rat[500000 67500 1 542500 67500 1  0x00000010]
+Rat[552500 15000 1 580000 27500 1  0x00000010]
+Rat[580000 27500 1 615000 15000 1  0x00000010]
+Rat[615000 15000 1 625000 15000 1  0x00000010]
+Rat[625000 15000 1 635000 15000 1  0x00000010]
+Rat[635000 15000 1 645000 15000 1  0x00000010]
+Rat[645000 15000 1 665000 25000 1  0x00000010]
+Rat[552500 15000 1 492500 15000 1  0x00000010]
+Rat[665000 25000 1 655000 87500 1  0x00000010]
+Rat[655000 87500 1 655000 107500 1  0x00000010]
+Rat[655000 107500 1 655000 127500 1  0x00000010]
+Rat[655000 127500 1 655000 147500 1  0x00000010]
+Rat[655000 147500 1 655000 172500 1  0x00000010]
+Rat[655000 172500 1 655000 192500 1  0x00000010]
+Rat[655000 192500 1 655000 212500 1  0x00000010]
+Rat[655000 212500 1 655000 232500 1  0x00000010]
+Rat[655000 232500 1 650000 257500 1  0x00000010]
+Rat[650000 257500 1 630000 257500 1  0x00000010]
+Rat[630000 257500 1 610000 257500 1  0x00000010]
+Rat[610000 257500 1 590000 257500 1  0x00000010]
+Rat[610000 257500 1 610000 232500 1  0x00000010]
+Rat[610000 232500 1 610000 212500 1  0x00000010]
+Rat[610000 212500 1 610000 192500 1  0x00000010]
+Rat[610000 192500 1 610000 172500 1  0x00000010]
+Rat[610000 172500 1 610000 147500 1  0x00000010]
+Rat[610000 147500 1 610000 127500 1  0x00000010]
+Rat[610000 127500 1 610000 107500 1  0x00000010]
+Rat[610000 107500 1 610000 87500 1  0x00000010]
+Rat[650000 257500 1 675000 265000 1  0x00000010]
+Rat[655000 172500 1 702500 180000 1  0x00000010]
+Rat[702500 180000 1 722500 180000 1  0x00000010]
+Rat[722500 180000 1 782500 160000 1  0x00000010]
+Rat[782500 160000 1 800000 172500 1  0x00000010]
+Rat[675000 265000 1 747500 287500 1  0x00000010]
+Rat[747500 287500 1 815000 292500 1  0x00000010]
+Rat[782500 160000 1 842500 32500 1  0x00000010]
+Rat[842500 32500 1 976900 57400 1  0x00000010]
+Rat[552500 45000 1 552500 67500 1  0x00000010]
+Rat[552500 45000 1 580000 37500 1  0x00000010]
+Rat[580000 37500 1 655000 25000 1  0x00000010]
+Rat[655000 25000 1 670000 67500 1  0x00000010]
+Rat[670000 67500 1 697500 42500 1  0x00000010]
+Rat[552500 45000 1 472500 37500 1  0x00000010]
+Rat[670000 67500 1 670000 162500 1  0x00000010]
+Rat[670000 162500 1 702500 170000 1  0x00000010]
+Rat[702500 170000 1 722500 170000 1  0x00000010]
+Rat[702500 170000 1 690000 215000 1  0x00000010]
+Rat[722500 170000 1 782500 150000 1  0x00000010]
+Rat[782500 150000 1 810000 172500 1  0x00000010]
+Rat[810000 172500 1 845000 262500 1  0x00000010]
 Rat[976900 68200 1 1000000 275000 1  0x00000010]
 Rat[988100 62800 1 950000 290000 1  0x00000010]
 Rat[685000 25000 1 845000 282500 1  0x00000010]
@@ -2553,11 +2602,11 @@ Rat[625000 147500 1 625000 172500 1  0x00000010]
 Rat[625000 172500 1 625000 192500 1  0x00000010]
 Rat[625000 192500 1 625000 212500 1  0x00000010]
 Rat[625000 212500 1 625000 232500 1  0x00000010]
-Rat[625000 232500 1 630000 295000 1  0x00000010]
-Rat[630000 295000 1 650000 295000 1  0x00000010]
-Rat[630000 295000 1 610000 295000 1  0x00000010]
-Rat[610000 295000 1 590000 295000 1  0x00000010]
-Rat[650000 295000 1 675000 295000 1  0x00000010]
+Rat[625000 232500 1 630000 287500 1  0x00000010]
+Rat[630000 287500 1 650000 287500 1  0x00000010]
+Rat[630000 287500 1 610000 287500 1  0x00000010]
+Rat[610000 287500 1 590000 287500 1  0x00000010]
+Rat[650000 287500 1 675000 295000 1  0x00000010]
 Rat[492500 240000 1 497500 240000 1  0x00000010]
 Rat[232500 92500 1 500000 92500 1  0x00000010]
 Rat[487500 237500 1 500000 237500 1  0x00000010]
@@ -2572,69 +2621,69 @@ Rat[457500 302500 1 507500 302500 1  0x00000010]
 Rat[372500 97500 1 495000 97500 1  0x00000010]
 Rat[487500 242500 1 495000 242500 1  0x00000010]
 Rat[302500 95000 1 497500 95000 1  0x00000010]
-Rat[610000 77500 1 670000 77500 1  0x00000010]
-Rat[670000 77500 1 722500 100000 1  0x00000010]
-Rat[610000 97500 1 670000 87500 1  0x00000010]
-Rat[670000 87500 1 722500 110000 1  0x00000010]
-Rat[610000 202500 1 692500 245000 1  0x00000010]
-Rat[692500 245000 1 722500 230000 1  0x00000010]
-Rat[610000 222500 1 692500 255000 1  0x00000010]
-Rat[692500 255000 1 722500 250000 1  0x00000010]
-Rat[655000 162500 1 692500 265000 1  0x00000010]
-Rat[692500 265000 1 722500 260000 1  0x00000010]
-Rat[655000 182500 1 692500 275000 1  0x00000010]
-Rat[692500 275000 1 782500 250000 1  0x00000010]
-Rat[655000 202500 1 692500 285000 1  0x00000010]
-Rat[692500 285000 1 782500 230000 1  0x00000010]
-Rat[655000 222500 1 692500 295000 1  0x00000010]
-Rat[655000 222500 1 782500 190000 1  0x00000010]
-Rat[580000 265000 1 670000 172500 1  0x00000010]
+Rat[655000 117500 1 670000 127500 1  0x00000010]
+Rat[670000 127500 1 722500 100000 1  0x00000010]
+Rat[610000 202500 1 670000 212500 1  0x00000010]
+Rat[670000 212500 1 722500 110000 1  0x00000010]
+Rat[610000 182500 1 670000 192500 1  0x00000010]
+Rat[670000 192500 1 722500 230000 1  0x00000010]
+Rat[600000 257500 1 690000 235000 1  0x00000010]
+Rat[690000 235000 1 722500 250000 1  0x00000010]
+Rat[610000 97500 1 670000 97500 1  0x00000010]
+Rat[670000 97500 1 722500 260000 1  0x00000010]
+Rat[655000 162500 1 670000 182500 1  0x00000010]
+Rat[670000 182500 1 782500 250000 1  0x00000010]
+Rat[580000 257500 1 690000 225000 1  0x00000010]
+Rat[690000 225000 1 782500 230000 1  0x00000010]
+Rat[655000 77500 1 670000 87500 1  0x00000010]
+Rat[670000 87500 1 782500 190000 1  0x00000010]
+Rat[610000 162500 1 670000 172500 1  0x00000010]
 Rat[670000 172500 1 782500 180000 1  0x00000010]
-Rat[600000 265000 1 670000 182500 1  0x00000010]
-Rat[670000 182500 1 782500 170000 1  0x00000010]
-Rat[620000 265000 1 670000 192500 1  0x00000010]
-Rat[670000 192500 1 782500 120000 1  0x00000010]
-Rat[640000 265000 1 670000 202500 1  0x00000010]
-Rat[670000 202500 1 782500 110000 1  0x00000010]
-Rat[610000 117500 1 670000 97500 1  0x00000010]
-Rat[670000 97500 1 722500 120000 1  0x00000010]
-Rat[665000 265000 1 670000 212500 1  0x00000010]
-Rat[670000 212500 1 782500 100000 1  0x00000010]
-Rat[610000 137500 1 670000 107500 1  0x00000010]
-Rat[670000 107500 1 722500 130000 1  0x00000010]
-Rat[655000 77500 1 670000 117500 1  0x00000010]
-Rat[670000 117500 1 722500 140000 1  0x00000010]
-Rat[655000 97500 1 670000 127500 1  0x00000010]
-Rat[670000 127500 1 722500 150000 1  0x00000010]
-Rat[655000 117500 1 670000 137500 1  0x00000010]
-Rat[670000 137500 1 722500 160000 1  0x00000010]
+Rat[655000 222500 1 670000 242500 1  0x00000010]
+Rat[670000 242500 1 782500 170000 1  0x00000010]
+Rat[610000 77500 1 670000 77500 1  0x00000010]
+Rat[670000 77500 1 782500 120000 1  0x00000010]
 Rat[655000 137500 1 670000 147500 1  0x00000010]
-Rat[670000 147500 1 722500 200000 1  0x00000010]
-Rat[610000 162500 1 692500 225000 1  0x00000010]
-Rat[692500 225000 1 722500 210000 1  0x00000010]
-Rat[610000 182500 1 692500 235000 1  0x00000010]
-Rat[692500 235000 1 722500 220000 1  0x00000010]
-Rat[580000 77500 1 562500 142500 1  0x00000010]
-Rat[580000 97500 1 562500 215000 1  0x00000010]
-Rat[580000 202500 1 562500 195000 1  0x00000010]
-Rat[580000 222500 1 562500 267500 1  0x00000010]
-Rat[625000 162500 1 562500 112500 1  0x00000010]
-Rat[625000 182500 1 562500 185000 1  0x00000010]
-Rat[625000 202500 1 562500 257500 1  0x00000010]
-Rat[625000 222500 1 562500 102500 1  0x00000010]
-Rat[580000 295000 1 562500 175000 1  0x00000010]
-Rat[600000 295000 1 562500 247500 1  0x00000010]
-Rat[620000 295000 1 562500 92500 1  0x00000010]
-Rat[640000 295000 1 562500 165000 1  0x00000010]
-Rat[580000 117500 1 562500 287500 1  0x00000010]
-Rat[665000 295000 1 562500 237500 1  0x00000010]
+Rat[670000 147500 1 782500 110000 1  0x00000010]
+Rat[640000 257500 1 690000 255000 1  0x00000010]
+Rat[690000 255000 1 722500 120000 1  0x00000010]
+Rat[610000 222500 1 670000 232500 1  0x00000010]
+Rat[670000 232500 1 782500 100000 1  0x00000010]
+Rat[610000 137500 1 670000 137500 1  0x00000010]
+Rat[670000 137500 1 722500 130000 1  0x00000010]
+Rat[655000 202500 1 670000 222500 1  0x00000010]
+Rat[655000 202500 1 722500 140000 1  0x00000010]
+Rat[665000 265000 1 690000 265000 1  0x00000010]
+Rat[690000 265000 1 722500 150000 1  0x00000010]
+Rat[610000 117500 1 670000 117500 1  0x00000010]
+Rat[670000 117500 1 722500 160000 1  0x00000010]
+Rat[655000 182500 1 670000 202500 1  0x00000010]
+Rat[670000 202500 1 722500 200000 1  0x00000010]
+Rat[620000 257500 1 690000 245000 1  0x00000010]
+Rat[690000 245000 1 722500 210000 1  0x00000010]
+Rat[655000 97500 1 670000 107500 1  0x00000010]
+Rat[670000 107500 1 722500 220000 1  0x00000010]
+Rat[625000 117500 1 562500 142500 1  0x00000010]
+Rat[580000 202500 1 562500 215000 1  0x00000010]
+Rat[580000 182500 1 562500 195000 1  0x00000010]
+Rat[600000 287500 1 562500 267500 1  0x00000010]
+Rat[580000 97500 1 562500 112500 1  0x00000010]
+Rat[625000 162500 1 562500 185000 1  0x00000010]
+Rat[580000 287500 1 562500 257500 1  0x00000010]
+Rat[625000 77500 1 562500 102500 1  0x00000010]
+Rat[580000 162500 1 562500 175000 1  0x00000010]
+Rat[625000 222500 1 562500 247500 1  0x00000010]
+Rat[580000 77500 1 562500 92500 1  0x00000010]
+Rat[625000 137500 1 562500 165000 1  0x00000010]
+Rat[640000 287500 1 562500 287500 1  0x00000010]
+Rat[580000 222500 1 562500 237500 1  0x00000010]
 Rat[580000 137500 1 562500 152500 1  0x00000010]
-Rat[625000 77500 1 562500 225000 1  0x00000010]
-Rat[625000 97500 1 562500 297500 1  0x00000010]
-Rat[625000 117500 1 562500 132500 1  0x00000010]
-Rat[625000 137500 1 562500 205000 1  0x00000010]
-Rat[580000 162500 1 562500 277500 1  0x00000010]
-Rat[580000 182500 1 562500 122500 1  0x00000010]
+Rat[625000 202500 1 562500 225000 1  0x00000010]
+Rat[665000 295000 1 562500 297500 1  0x00000010]
+Rat[580000 117500 1 562500 132500 1  0x00000010]
+Rat[625000 182500 1 562500 205000 1  0x00000010]
+Rat[620000 287500 1 562500 277500 1  0x00000010]
+Rat[625000 97500 1 562500 122500 1  0x00000010]
 Layer(1 "component")
 (
        Line[492500 220000 465000 192500 4000 2000 0x00000020]
@@ -3661,198 +3710,198 @@ NetList()
        )
        Net("sense0" "Signal")
        (
-               Connect("OC0-16")
+               Connect("OC1-12")
                Connect("PIC-4")
-               Connect("RAS0-2")
+               Connect("RAS0-7")
        )
        Net("sense1" "Signal")
        (
-               Connect("OC0-14")
+               Connect("OC2-12")
                Connect("PIC-5")
-               Connect("RAS0-3")
+               Connect("RAS1-6")
        )
        Net("sense10" "Signal")
        (
-               Connect("OC2-12")
+               Connect("OC2-14")
                Connect("PIC-17")
                Connect("RAS1-4")
        )
        Net("sense11" "Signal")
        (
-               Connect("OC2-10")
+               Connect("OC4-14")
                Connect("PIC-19")
-               Connect("RAS1-5")
+               Connect("RAS2-3")
        )
        Net("sense12" "Signal")
        (
-               Connect("OC3-16")
+               Connect("OC0-14")
                Connect("PIC-20")
-               Connect("RAS1-6")
+               Connect("RAS0-4")
        )
        Net("sense13" "Signal")
        (
-               Connect("OC3-14")
+               Connect("OC3-16")
                Connect("PIC-22")
-               Connect("RAS1-7")
+               Connect("RAS1-3")
        )
        Net("sense14" "Signal")
        (
-               Connect("OC3-12")
+               Connect("OC4-16")
                Connect("PIC-24")
-               Connect("RAS1-8")
+               Connect("RAS2-2")
        )
        Net("sense15" "Signal")
        (
-               Connect("OC3-10")
+               Connect("OC1-16")
                Connect("PIC-28")
-               Connect("RAS1-9")
+               Connect("RAS0-3")
        )
        Net("sense16" "Signal")
        (
-               Connect("OC4-16")
+               Connect("OC2-16")
                Connect("PIC-29")
-               Connect("RAS2-2")
+               Connect("RAS1-2")
        )
        Net("sense17" "Signal")
        (
-               Connect("OC4-14")
+               Connect("OC3-10")
                Connect("PIC-30")
-               Connect("RAS2-3")
+               Connect("RAS1-9")
        )
        Net("sense18" "Signal")
        (
-               Connect("OC4-12")
+               Connect("OC0-16")
                Connect("PIC-35")
-               Connect("RAS2-4")
+               Connect("RAS0-2")
        )
        Net("sense19" "Signal")
        (
-               Connect("OC4-10")
+               Connect("OC1-10")
                Connect("PIC-36")
-               Connect("RAS2-5")
+               Connect("RAS0-9")
        )
        Net("sense2" "Signal")
        (
-               Connect("OC0-12")
+               Connect("OC4-10")
                Connect("PIC-6")
-               Connect("RAS0-4")
+               Connect("RAS2-5")
        )
        Net("sense20" "Signal")
        (
-               Connect("OC5-4")
+               Connect("OC2-10")
                Connect("PIC-37")
-               Connect("RAS2-6")
+               Connect("RAS1-8")
        )
        Net("sense3" "Signal")
        (
                Connect("OC0-10")
                Connect("PIC-7")
-               Connect("RAS0-5")
+               Connect("RAS0-8")
        )
        Net("sense4" "Signal")
        (
-               Connect("OC1-16")
+               Connect("OC3-12")
                Connect("PIC-8")
-               Connect("RAS0-6")
+               Connect("RAS1-7")
        )
        Net("sense5" "Signal")
        (
-               Connect("OC1-14")
+               Connect("OC5-4")
                Connect("PIC-9")
-               Connect("RAS0-7")
+               Connect("RAS2-6")
        )
        Net("sense6" "Signal")
        (
-               Connect("OC1-12")
+               Connect("OC0-12")
                Connect("PIC-10")
-               Connect("RAS0-8")
+               Connect("RAS0-6")
        )
        Net("sense7" "Signal")
        (
-               Connect("OC1-10")
+               Connect("OC3-14")
                Connect("PIC-14")
-               Connect("RAS0-9")
+               Connect("RAS1-5")
        )
        Net("sense8" "Signal")
        (
-               Connect("OC2-16")
+               Connect("OC4-12")
                Connect("PIC-15")
-               Connect("RAS1-2")
+               Connect("RAS2-4")
        )
        Net("sense9" "Signal")
        (
-               Connect("OC2-14")
+               Connect("OC1-14")
                Connect("PIC-16")
-               Connect("RAS1-3")
+               Connect("RAS0-5")
        )
        Net("sensei0" "Signal")
        (
-               Connect("OC0-1")
+               Connect("OC1-5")
                Connect("RS0-1")
        )
        Net("sensei1" "Signal")
        (
-               Connect("OC0-3")
+               Connect("OC2-5")
                Connect("RS1-1")
        )
        Net("sensei10" "Signal")
        (
-               Connect("OC2-5")
+               Connect("OC2-3")
                Connect("RS10-1")
        )
        Net("sensei11" "Signal")
        (
-               Connect("OC2-7")
+               Connect("OC4-3")
                Connect("RS11-1")
        )
        Net("sensei12" "Signal")
        (
-               Connect("OC3-1")
+               Connect("OC0-3")
                Connect("RS12-1")
        )
        Net("sensei13" "Signal")
        (
-               Connect("OC3-3")
+               Connect("OC3-1")
                Connect("RS13-1")
        )
        Net("sensei14" "Signal")
        (
-               Connect("OC3-5")
+               Connect("OC4-1")
                Connect("RS14-1")
        )
        Net("sensei15" "Signal")
        (
-               Connect("OC3-7")
+               Connect("OC1-1")
                Connect("RS15-1")
        )
        Net("sensei16" "Signal")
        (
-               Connect("OC4-1")
+               Connect("OC2-1")
                Connect("RS16-1")
        )
        Net("sensei17" "Signal")
        (
-               Connect("OC4-3")
+               Connect("OC3-7")
                Connect("RS17-1")
        )
        Net("sensei18" "Signal")
        (
-               Connect("OC4-5")
+               Connect("OC0-1")
                Connect("RS18-1")
        )
        Net("sensei19" "Signal")
        (
-               Connect("OC4-7")
+               Connect("OC1-7")
                Connect("RS19-1")
        )
        Net("sensei2" "Signal")
        (
-               Connect("OC0-5")
+               Connect("OC4-7")
                Connect("RS2-1")
        )
        Net("sensei20" "Signal")
        (
-               Connect("OC5-1")
+               Connect("OC2-7")
                Connect("RS20-1")
        )
        Net("sensei3" "Signal")
@@ -3862,32 +3911,32 @@ NetList()
        )
        Net("sensei4" "Signal")
        (
-               Connect("OC1-1")
+               Connect("OC3-5")
                Connect("RS4-1")
        )
        Net("sensei5" "Signal")
        (
-               Connect("OC1-3")
+               Connect("OC5-1")
                Connect("RS5-1")
        )
        Net("sensei6" "Signal")
        (
-               Connect("OC1-5")
+               Connect("OC0-5")
                Connect("RS6-1")
        )
        Net("sensei7" "Signal")
        (
-               Connect("OC1-7")
+               Connect("OC3-3")
                Connect("RS7-1")
        )
        Net("sensei8" "Signal")
        (
-               Connect("OC2-1")
+               Connect("OC4-5")
                Connect("RS8-1")
        )
        Net("sensei9" "Signal")
        (
-               Connect("OC2-3")
+               Connect("OC1-3")
                Connect("RS9-1")
        )
        Net("sshort0" "Signal")
index fefb4e1788d6a10a0ca349d41266cadce3bbc54a..fa4ba2115b4c58a6265a53cbf532ddd119f7448c 100755 (executable)
@@ -37,6 +37,9 @@ if ($reversers) {
                x       qmid=
                o       8
                );
+       $val{'m'}= '';
+       $val{'M'}= '';
+       $val{'n'}= '';
 } else {
        push @indiv, qw(
                spare0
@@ -54,6 +57,17 @@ if ($reversers) {
                x       q=
                o       4
                );
+       @sensel= qw(18 15 12 9 6 0 3  19 16 13 10 7 1 4  20 17 14 11 8 2 5);
+       $val{'m'}.= "sensei{";
+       for ($j=0; $j<16; $j+=8) {
+               for ($i=0;$i<4;$i++) {
+                       $val{'m'} .= sprintf " %d %d", $i+$j, $i+$j+4;
+               }
+       }
+       $val{'m'}.= " sensei16..20 }{ @sensel }";
+       $val{'M'}= $val{'m'};
+       $val{'M'} =~ s/sensei/sense/g;
+       $val{'n'}= "sense{ sense0..20 }{ @sensel }";
 }
 
 print "INDIV0 25 :1%13/2 @indiv\n"; # 26-way ribbon
@@ -66,7 +80,7 @@ while (<DATA>) {
                next;
        }
        next unless $doing;
-       s/\^(\w)/ die unless exists $val{$1}; $val{$1}; /ge;
+       s/\^(\w)/ die $1 unless exists $val{$1}; $val{$1}; /ge;
        print;
 }
 
@@ -105,12 +119,6 @@ BUS 32
 CAC05 2                l_gnd l_vcc
 0-1/1 CPIC= 2  l_gnd l_vcc
 
-0-^q/4 OC= 16==^o
-               :1+2 sensei<..>
-               :2+2 q*&
-               :-1-2 l_gnd*&
-               :-0-2 sense<..>
-
 0-^q/1 BR= 4
                :1+2 sshort=*2
                :2 ^x
@@ -156,6 +164,12 @@ RLG 2              ledmid_green led_green
 RLR 2          ledmid_red led_red
 RLL 2          perpicled l_gnd
 
+0-^q/4 OC= 16==^o ^m ^M
+               :1+2 sensei<..>
+               :2+2 q*&
+               :-1-2 l_gnd*&
+               :-0-2 sense<..>
+
 ^=reversers:
 
 !type Fat t0..5
@@ -232,7 +246,7 @@ POINTS 25
 
 0-^q/8 RAS= 9
                l_vcc
-               :2 sense<..>
+               ^n :2 sense<..>
 
 !PIC-ASSIGN
                1 mclr
index 393d3811a91063d4f05c2ca9c88b0fb7a8cc2e76..648189b426fb79ad67e369cf01fc9f1c2aee87d7 100755 (executable)
 #
 #      netspec       assigns next pin to netspec
 #
+#      net{ fornet }{ usegate }
+#                    remapping specification:
+#                    every time net\d+ would be assigned instead,
+#                    this remapping table is consulted.  fornet
+#                    and usegate are lists of net assignments or
+#                    just digits (which are taken to mean net\d+);
+#                    they must be of equal length and will be taken
+#                    pairwise as instructions that each time an entry in
+#                    usegate is to be assigned, the corresponding entry
+#                    from fornet will be used instead.
+#
 #      net\d+..\d+   netrange: specifies sequentially named nets
 #                    nets will be net\d+ where numbers will go from first
 #                    \d+ to 2nd \d+ in pin-spec-item inclusive (whether
@@ -118,6 +129,7 @@ sub unpack_iter_list ($$@) {
     my $limitcounter= '';
     my ($usepin, $remainder, $quotient, $afterlimit);
     my (@toprocess) = @expanded;
+    my (%gatemap);
     while (@toprocess) {
        $_= shift @toprocess;
        if (!length $modulo) {
@@ -131,7 +143,33 @@ sub unpack_iter_list ($$@) {
            ($start +
             $step * $quotient +
             $jump * $remainder);
-       if (m/^\d+$/) {
+       if (m/^(\w+)\{$/) {
+           my ($netbase) = $1;
+           my (@fornet,@usegate,$i);
+           my ($current) = \@fornet;
+           for (;;) {
+               die unless @toprocess;
+               $_= shift @toprocess;
+               if (m/^\}\{$/) {
+                   die unless $current==\@fornet;
+                   $current= \@usegate;
+               } elsif (m/^\}$/) {
+                   die unless $current==\@usegate;
+                   last;
+               } elsif (m/^[a-z]\w*$/) {
+                   push @$current, $&;
+               } elsif (m/^\d+$/) {
+                   push @$current, $netbase.$&;
+               } else {
+                   die "$_ (@in) (@expanded)";
+               }
+           }
+           die "(@fornet) (@usegate (@in) (@expanded)"
+               unless @fornet == @usegate;
+           for ($i=0; $i<@fornet; $i++) {
+               $gatemap{$fornet[$i]}= $usegate[$i];
+           }
+       } elsif (m/^\d+$/) {
            die "$_ != $usepin $max (@in) (@expanded)"
                if $usepin ne $&;
        } elsif (
@@ -162,6 +200,7 @@ sub unpack_iter_list ($$@) {
                    if $usepin > $max;
                die "already $done[$usepin] $_ $max (@in) (@expanded)"
                    if ($options !~ m/r/) && defined $done[$usepin];
+               $_= $gatemap{$_} if exists $gatemap{$_};
                push @out, { Pin => $usepin, Action => $_ };
                $done[$usepin]= $_;
            }