// RouteDaffodilC.bcpl // Route description of Daffodil Board part C (3 of 4) // Last modified June 15, 1983 1:05 PM by Diebert get "route.defs" external [ VCCPinPos; UpperLeft; LowerLeft; Right; PinGridPower; InArray; Center ] manifest [ firstDipPin = 1 firstJ1Pin = firstDipPin + 5292 firstJ2Pin = firstJ1Pin + 66 firstJ3Pin = firstJ2Pin + 60 firstJ4Pin = firstJ3Pin + 25 firstJ5Pin = firstJ4Pin + 15 firstJ6Pin = firstJ5Pin + 4 firstJ7Pin = firstJ6Pin + 50 firstJ8Pin = firstJ7Pin + 50 firstGNDPin = firstJ8Pin + 26 firstVCCPin = firstGNDPin + 826 NextIndex = firstVCCPin + 706 ] manifest [ GND = 0 VCC = 1 ] let FindIndexFromCoord(x, y, picclass, pPinNo; numargs na) = valof // Returns index [1..NextIndex=nofpins+1] of pin at x,y (.025" units) // Returns 0 if not a legal position // Returns NextIndex=nofpins+1 if x=y=-1 // If pin is part of trace wired net (TWnet) then // @picclass ← icclass // @pPinNo ← pin number in net [ DefaultArgs(lv na, -2, lv na, lv na) if x eq -1 & y eq -1 then resultis NextIndex x = x * 25; y = y * 25 // convert to .001 // Check for J1 & J2 if x gr 12100 do [ if x eq 12500 do [ if InArray(y, 100, 1600, 2000) then resultis (y-1600)/100 + firstJ1Pin if InArray(y, 100, 2300, 2700) then resultis (y-2300)/100 + firstJ1Pin + 10 if InArray(y, 100, 3100, 3500) then resultis (y-3100)/100 + firstJ1Pin + 20 if InArray(y, 100, 3900, 4300) then resultis (y-3900)/100 + firstJ1Pin + 30 if InArray(y, 100, 4700, 5100) then resultis (y-4700)/100 + firstJ1Pin + 40 if InArray(y, 100, 5500, 6000) then resultis (y-5500)/100 + firstJ1Pin + 50 if InArray(y, 100, 1000, 1100) then resultis (y-1000)/100 + firstJ1Pin + 62 if InArray(y, 100, 6500, 6600) then resultis (y-6500)/100 + firstJ1Pin + 64 if InArray(y, 100, 8400, 11300) then resultis (y-8400)/100 + firstJ2Pin ] if x eq 12600 do [ if InArray(y, 100, 1600, 2000) then resultis (y-1600)/100 + firstJ1Pin + 5 if InArray(y, 100, 2300, 2700) then resultis (y-2300)/100 + firstJ1Pin + 15 if InArray(y, 100, 3100, 3500) then resultis (y-3100)/100 + firstJ1Pin + 25 if InArray(y, 100, 3900, 4300) then resultis (y-3900)/100 + firstJ1Pin + 35 if InArray(y, 100, 4700, 5100) then resultis (y-4700)/100 + firstJ1Pin + 45 if InArray(y, 100, 5500, 6000) then resultis (y-5500)/100 + firstJ1Pin + 56 if InArray(y, 100, 8400, 11300) then resultis (y-8400)/100 + firstJ2Pin + 30 ] resultis 0 ] // Check for J3-J5 if x ls 6100 & y ls 1200 do [ if y eq 1000 do [ if InArray(x, 100, 4300, 5500) then resultis firstJ3Pin + (5500-x) / 100 if InArray(x, 100, 2300, 3000) then resultis firstJ4Pin + (3000-x) / 100 if InArray(x, 100, 1100, 1400) then resultis firstJ5Pin + (1400-x) / 100 ] if y eq 900 do [ if InArray(x, 100, 4400, 5500) then resultis firstJ3Pin + 13 + (5500-x) / 100 if InArray(x, 100, 2400, 3000) then resultis firstJ4Pin + 8 + (3000-x) / 100 ] resultis 0 ] // Check for J6-J8 if x ls 700 do [ if x eq 500 do [ if InArray(y, 100, 1700,4100) then resultis (y-1700) / 100 + firstJ6Pin if InArray(y, 100, 5200, 7600) then resultis (y-5200) / 100 + firstJ7Pin if InArray(y, 100, 8900, 10100) then resultis (y-8900) / 100 + firstJ8Pin ] if x eq 600 do [ if InArray(y, 100, 1700,4100) then resultis (y-1700) / 100 + firstJ6Pin + 25 if InArray(y, 100, 5200, 7600) then resultis (y-5200) / 100 + firstJ7Pin + 25 if InArray(y, 100, 8900, 10100) then resultis (y-8900) / 100 + firstJ8Pin + 13 ] resultis 0 ] // do main logic array if (x ge 700) & (x le 6000) & (y ge 1200) & (y le 5400) do [ if InArray(x, 300, 700, 6000) then resultis (y-1200)/100 + firstDipPin + ((x-700)/300) * 43 if x eq 1800 then resultis (y-1200)/100 + firstDipPin + 774 if x eq 2400 then resultis (y-1200)/100 + firstDipPin + 817 if x eq 5700 then resultis (y-1200)/100 + firstDipPin + 860 unless InArray(y, 500, 1400, 5400) do resultis 0 if (x ge 800) & (x le 1500) then resultis UpperLeft(x-800, y, 1, 1, pPinNo, picclass) if x eq 1700 do [ @pPinNo = (y-1400)/500 + 28 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 2100 then resultis UpperLeft(x-2000, y, 37, 28, pPinNo, picclass) if x eq 2300 do [ @pPinNo = (y-1400)/500 + 46 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 5400 then resultis UpperLeft(x-2600, y, 55, 37, pPinNo, picclass) if x eq 5600 do [ @pPinNo = (y-1400)/500 + 145 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 6000 then resultis UpperLeft(x-5900, y, 154, 127, pPinNo, picclass) resultis 0 ] if (x ge 6100) & (x le 12100) & (y ge 500) & (y le 5400) do [ if InArray(x, 300, 6100, 12100) then resultis (y-500)/100 + firstDipPin + ((x-6100)/300)*50 + 903 if x eq 6300 then resultis (y-500)/100 + firstDipPin + 1953 if x eq 9300 then resultis (y-500)/100 + firstDipPin + 2003 if x eq 9900 then resultis (y-500)/100 + firstDipPin + 2053 unless (y eq 500) % (InArray(y, 500, 900, 5900)) then resultis 0 if x eq 6200 do [ if y eq 500 then y = 400 @pPinNo = (y-400)/500 + 163 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 9000 then resultis LowerLeft(x-6500, y, 174, 136, pPinNo, picclass) if x eq 9200 do [ if y eq 500 then y = 400 @pPinNo = (y-400)/500 + 273 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 9600 then resultis LowerLeft(x-9500, y, 284, 235, pPinNo, picclass) if x eq 9800 do [ if y eq 500 then y = 400 @pPinNo = (y-400)/500 + 295 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 12000 then resultis LowerLeft(x-10100, y, 306, 246, pPinNo, picclass) resultis 0 ] if (x ge 700) & (x le 3200) & (y ge 5900) & (y le 11500) do [ if InArray(x, 300, 700, 3100) then resultis (y-5900)/100 + firstDipPin + ((x-700)/300)*57 + 2103 if x eq 1800 then resultis (y-5900)/100 + firstDipPin + 2616 if x eq 2400 then resultis (y-5900)/100 + firstDipPin + 2673 unless InArray(y, 500, 5900, 11400) do resultis 0 if x le 1500 then resultis Right(x-800, y, 383, 323, pPinNo, picclass) if x eq 1700 do [ @pPinNo = (y-5900)/500 + 419 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 2100 then resultis Right(x-2000, y, 431, 359, pPinNo, picclass) if x eq 2300 do [ @pPinNo = (y-5900)/500 + 443 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 3000 then resultis Right(x-2600, y, 455, 371, pPinNo, picclass) if x eq 3200 do [ @pPinNo = (y-5900)/500 + 479 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] resultis 0 ] if (x ge 3300) & (x le 8700) & (y ge 5900) & (y le 11500) do [ if (x ge 3300) & (x le 4600) & (y ge 5900) & (y le 7200) then resultis (y-5900)/100 + ((x-3300)/100)*14 + firstDipPin + 2730 if (x ge 3300) & (x le 4600) & (y ge 7900) & (y le 9200) then resultis (y-7900)/100 + ((x-3300)/100)*14 + firstDipPin + 2926 if (x ge 3300) & (x le 4600) & (y ge 9900) & (y le 11200) then resultis (y-9900)/100 + ((x-3300)/100)*14 + firstDipPin + 3122 if (x ge 5200) & (x le 6500) & (y ge 5900) & (y le 7200) then resultis (y-5900)/100 + ((x-5200)/100)*14 + firstDipPin + 3318 if (x ge 5200) & (x le 6500) & (y ge 7900) & (y le 9200) then resultis (y-7900)/100 + ((x-5200)/100)*14 + firstDipPin + 3514 if (x ge 5200) & (x le 6500) & (y ge 9900) & (y le 11200) then resultis (y-9900)/100 + ((x-5200)/100)*14 + firstDipPin + 3710 if (x ge 7100) & (x le 8400) & (y ge 5900) & (y le 7200) then resultis (y-5900)/100 + ((x-7100)/100)*14 + firstDipPin + 3906 if (x ge 7100) & (x le 8400) & (y ge 7900) & (y le 9200) then resultis (y-7900)/100 + ((x-7100)/100)*14 + firstDipPin + 4102 if (x ge 7100) & (x le 8400) & (y ge 9900) & (y le 11200) then resultis (y-9900)/100 + ((x-7100)/100)*14 + firstDipPin + 4298 unless (y eq 7700) % (y eq 9700) % (y eq 11500) % InArray(y, 500, 5900, 11400) do resultis 0 if x le 4600 then resultis PinGridPower(x-3300, y, 491, 395, pPinNo, picclass) if x le 5100 then resultis Center(x-4700, y, 533, 437, pPinNo, picclass) if x le 6500 then resultis PinGridPower(x-5200, y, 563, 467, pPinNo, picclass) if x le 7000 then resultis Center(x-6600, y, 605, 509, pPinNo, picclass) if x le 8400 then resultis PinGridPower(x-7100, y, 635, 539, pPinNo, picclass) if x le 8700 then resultis Center(x-8500, y, 677, 581, pPinNo, picclass) resultis 0 ] if (x ge 8800) & (x le 12100) & (y ge 5900) & (y le 11500) do [ if InArray(x, 300, 8800, 12100) then resultis (y-5900)/100 + firstDipPin + ((x-8800)/300)*57 + 4494 if x eq 9300 then resultis (y-5900)/100 + firstDipPin + 5178 if x eq 9900 then resultis (y-5900)/100 + firstDipPin + 5235 unless InArray(y, 500, 5900, 11400) then resultis 0 if x le 9000 then resultis Right(x-8900, y, 695, 599, pPinNo, picclass) if x eq 9200 do [ @pPinNo = (y-5900)/500 + 707 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 9600 then resultis Right(x-9500, y, 719, 611, pPinNo, picclass) if x eq 9800 do [ @pPinNo = (y-5900)/500 + 731 @picclass = MustFindNamee("GND",typeIcclass) resultis @pPinNo + firstGNDPin -1 ] if x le 12000 then resultis Right(x-10100, y, 743, 623, pPinNo, picclass) resultis 0 ] resultis 0 ]