// RouteDaffodilA.bcpl
// Route description of Daffodil Board part A (1 of 4)
// Last modified August 18, 1983 9:06 AM by Diebert
get "route.defs"
static [ maxICs = 500; boardInterfaceVersion = interfaceVersion ]
external [ VCCPinPos; GNDPinPos ]
let ZeroTablePoint(point) = selecton point into
// If point = 0 then the string name of the board is returned.
// If point is from 1 to 4 the string name of the calibration
// point is returned. The calibration points should form a
// cw rectangle on the board.
// Machine is set up so that y increases to the right and x down
// Board is clamped on top on the 3 card edge connector edge
[
case 0: "Daffodil" //Board type
case 1: "#aa111" //Upper left (wiring side)
case 2: "#aa8" //Upper right (wiring side)
case 3: "#el8" //Lower right (wiring side)
case 4: "#el111" //Lower left (wiring side)
default: empty
]
and LevelTransform(level, x, y, px, py, pName, pPullComponents, pWire; numargs na) = valof
// A given pin is described by different co-ordinates according to
// whether a board is positioned wiring-side up or component-side up.
// For each value of level, this subroutine implements a transformation
// from internal co-ordinates x,y to printing co-ordinates @px,@py.
// @pName is set to a string giving the name of this level. @pPull is
// set according to whether components can be removed at this level.
// @pWire is set according to whether wiring can be done at this
// level.
[
DefaultArgs(lv na, -1, 0, 0,lv na, lv na, lv na, lv na, lv na)
switchon level into [
case TopLevel:
@px = x
@py = y
@pName = "Component side"
@pPullComponents = true
@pWire = false
resultis true
case BottomLevel:
@px = x
@py = 480 - y
@pName = "Wiring side"
@pPullComponents = false
@pWire = true
resultis true
default: resultis false ]
]
and DeclareInitialNets(BuildTWNet, BuildTermNet, BuildConnector) be
//This routine declares all the trace wired nets, terminator
//sets, and connectors that the board has.
[
BuildConnector("E", 260, EPinPos)
BuildConnector("C", 826, CPinPos)
BuildTWNet("GND", 826, GNDPinPos)
BuildTWNet("VCC", 706, VCCPinPos)
]
and EPinPos(icinst, pin, px, py) = valof
[
let connIndex = pin/100
let pinIndex = pin rem 100
let even = (pinIndex rem 2) eq 0
if (connIndex ls 1) % (connIndex gr 2) then resultis illegal
@px = even ? (126 * 4), (125 * 4)
if connIndex eq 1 then // J1
[
if (pinIndex ls 13) % (pinIndex gr 72) then
switchon pinIndex into [
case 7: @py = 10 * 4; resultis absolute // +12V
case 9: @py = 11 * 4; resultis absolute
case 73:
case 74: @py = 60 * 4; resultis absolute // Pin 73 & 74
case 77: @py = 65 * 4; resultis absolute
case 79: @py = 66 * 4; resultis absolute // -12V
default: resultis illegal ]
let yoffset = (((pinIndex - 13) rem 10) /2) * 4
switchon (pinIndex - 13) / 10 into [
case 0: @py = 16 * 4 + yoffset; resultis absolute
case 1: @py = 23 * 4 + yoffset; resultis absolute
case 2: @py = 31 * 4 + yoffset; resultis absolute
case 3: @py = 39 * 4 + yoffset; resultis absolute
case 4: @py = 47 * 4 + yoffset; resultis absolute
case 5: @py = 55 * 4 + yoffset; resultis absolute
default: resultis illegal ]
]
if connIndex eq 2 then [ // J2
if (pinIndex ls 1) % (pinIndex gr 60) then resultis illegal
@py = 84 * 4 + ((pinIndex-1)/2) * 4; resultis absolute ]
resultis illegal
]
and CPinPos(icinst, pin, px, py) = valof
[
let connIndex = pin/100
let pinIndex = pin rem 100
let even = (pinIndex rem 2) eq 0
if (connIndex ls 3) % (connIndex gr 8) then resultis illegal
@px = even ? (6 * 4), (5 * 4)
switchon connIndex into
[
case 3:
[ if (pinIndex ls 1) % (pinIndex gr 25) then resultis illegal
test pinIndex ls 14
ifso [ @py = 10 * 4; @px = 55 * 4 - ((pinIndex - 1) * 4) ]
ifnot [ @py = 9 * 4; @px = 55 * 4 - ((pinIndex - 14) * 4) ]
resultis absolute ]
case 4:
[ if (pinIndex ls 1) % (pinIndex gr 15) then resultis illegal
test pinIndex ls 9
ifso [ @py = 10 * 4; @px = 30 * 4 - ((pinIndex - 1) * 4) ]
ifnot [ @py = 9 * 4; @px = 30 * 4 - ((pinIndex - 9) * 4) ]
resultis absolute ]
case 5:
[ if (pinIndex ls 1) % (pinIndex gr 4) then resultis illegal
@py = 10 * 4; @px = 14 * 4 - ((pinIndex - 1) * 4)
resultis absolute ]
case 6: resultis CableConnectors(py, pinIndex, 50, 41)
case 7: resultis CableConnectors(py, pinIndex, 50, 76)
case 8: resultis CableConnectors(py, pinIndex, 26, 101)
default: resultis illegal
]
]
and CableConnectors(pyy, index, connsize, bias) = valof
[
if (index ls 1) % (index gr connsize) then resultis illegal
@pyy = bias * 4 - ((index - 1) / 2) * 4; resultis absolute
]
and GNDPinPos(icinst, pin, px, py, pInfo; numargs na) = valof
[
DefaultArgs(lv na, -4, lv na)
@pInfo = noDisconnect + noReconnect + BottomLevel
if (pin ls 1) % (pin gr 826) then resultis illegal
if pin ls 28 do
[ let group = (pin - 1) / 9
let subpin = (pin - 1) rem 9
let xoffset = nil
test subpin ls 5
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (14 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 5) * 10 * 4) + (19 * 4) ]
@px = 8 * 4 + (group * 3 * 4) + xoffset
resultis absolute ]
if pin ls 37 do
[ @px = 17 * 4; @py = ((pin - 28) * 5 * 4) + (14 * 4)
resultis absolute ]
if pin ls 42 do
[ @px = 20 * 4; @py = ((pin - 37) * 10 * 4) + (14 * 4)
resultis absolute ]
if pin ls 46 do
[ @px = 21 * 4; @py = ((pin - 42) * 10 * 4) + (19 * 4)
resultis absolute ]
if pin ls 55 do
[ @px = 23 * 4; @py = ((pin - 46) * 5 * 4) + (14 * 4)
resultis absolute ]
if pin ls 145 do
[ let group = (pin - 55) / 9
let subpin = (pin - 55) rem 9
let xoffset = nil
test subpin ls 5
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (14 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 5) * 10 * 4) + (19 * 4) ]
@px = 26 * 4 + (group * 3 * 4) + xoffset
resultis absolute ]
if pin ls 154 do
[ @px = 56 * 4; @py = ((pin - 145) * 5 * 4) + (14 * 4)
resultis absolute ]
if pin ls 159 do
[ @px = 59 * 4; @py = ((pin - 154) * 10 * 4) + (14 * 4)
resultis absolute ]
if pin ls 163 do
[ @px = 60 * 4; @py = ((pin - 159) * 10 * 4) + (19 * 4)
resultis absolute ]
if pin ls 174 do
[ @px = 62 * 4; @py = ((pin - 163) * 5 * 4) + (4 * 4)
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 273 do
[ let group = (pin - 174) / 11
let subpin = (pin - 174) rem 11
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 40) + (4 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 40) + (9 * 4) ]
@px = 65 * 4 + (group * 3 * 4) + xoffset
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 284 do
[ @px = 92 * 4; @py = ((pin - 273) * 5 * 4) + (4 * 4)
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 290 do
[ @px = 95 * 4; @py = ((pin - 284) * 10 * 4) + (4 * 4)
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 295 do
[ @px = 96 * 4; @py = ((pin - 290) * 10 * 4) + (9 * 4)
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 306 do
[ @px = 98 * 4; @py = ((pin - 295) * 5 * 4) + (4 * 4)
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 383 do
[ let group = (pin - 306) / 11
let subpin = (pin - 306) rem 11
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (4 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 10 * 4) + (9 * 4) ]
@px = 101 * 4 + (group * 3 * 4) + xoffset
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
// Right Side
if pin ls 419 do
[ let group = (pin - 383) / 12
let subpin = (pin - 383) rem 12
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (64 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 10 * 4) + (59 * 4) ]
@px = 8 * 4 + (group * 3 * 4) + xoffset
resultis absolute ]
if pin ls 431 do
[ @px = 17 * 4; @py = ((pin - 419) * 5 * 4) + (59 * 4)
resultis absolute ]
if pin ls 437 do
[ @px = 20 * 4; @py = ((pin - 431) * 10 * 4) + (64 * 4)
resultis absolute ]
if pin ls 443 do
[ @px = 21 * 4; @py = ((pin - 437) * 10 * 4) + (59 * 4)
resultis absolute ]
if pin ls 455 do
[ @px = 23 * 4; @py = ((pin - 443) * 5 * 4) + (59 * 4)
resultis absolute ]
if pin ls 479 do
[ let group = (pin - 455) / 12
let subpin = (pin - 455) rem 12
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (64 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 10 * 4) + (59 * 4) ]
@px = 26 * 4 + (group * 3 * 4) + xoffset
resultis absolute ]
if pin ls 491 do
[ @px = 32 * 4; @py = ((pin - 479) * 5 * 4) + (59 * 4)
resultis absolute ]
if pin ls 533 do
[ let group = (pin - 491) / 6
let subpin = (pin - 491) rem 6
let xoffset = nil
test subpin ls 3
ifso [ xoffset = 0; @py = ((subpin) * 20 * 4) + (74 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 3) * 20 * 4) + (77 * 4) ]
if @py eq (117 * 4) then @py = 115 * 4
@px = 33 * 4 + (group * 2 * 4) + xoffset
resultis absolute ]
if pin ls 563 do
[ let group = (pin - 533) / 12
let subpin = (pin - 533) rem 12
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (59 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 10 * 4) + (64 * 4) ]
@px = 47 * 4 + (group * 2 * 4) + xoffset
resultis absolute ]
if pin ls 605 do
[ let group = (pin - 563) / 6
let subpin = (pin - 563) rem 6
let xoffset = nil
test subpin ls 3
ifso [ xoffset = 0; @py = ((subpin) * 20 * 4) + (74 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 3) * 20 * 4) + (77 * 4) ]
if @py eq (117 * 4) then @py = 115 * 4
@px = 52 * 4 + (group * 2 * 4) + xoffset
resultis absolute ]
if pin ls 635 do
[ let group = (pin - 605) / 12
let subpin = (pin - 605) rem 12
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (59 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 10 * 4) + (64 * 4) ]
@px = 66 * 4 + (group * 2 * 4) + xoffset
resultis absolute ]
if pin ls 677 do
[ let group = (pin - 635) / 6
let subpin = (pin - 635) rem 6
let xoffset = nil
test subpin ls 3
ifso [ xoffset = 0; @py = ((subpin) * 20 * 4) + (74 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 3) * 20 * 4) + (77 * 4) ]
if @py eq (117 * 4) then @py = 115 * 4
@px = 71 * 4 + (group * 2 * 4) + xoffset
resultis absolute ]
if pin ls 683 do
[ @px = 85 * 4; @py = ((pin - 677) * 10 * 4) + (59 * 4)
resultis absolute ]
if pin ls 707 do
[ let group = (pin - 683) / 12
let subpin = (pin - 683) rem 12
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 40) + (64 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 40) + (59 * 4) ]
@px = 86 * 4 + (group * 3 * 4) + xoffset
resultis absolute ]
if pin ls 719 do
[ @px = 92 * 4; @py = ((pin - 707) * 5 * 4) + (59 * 4)
resultis absolute ]
if pin ls 725 do
[ @px = 95 * 4; @py = ((pin - 719) * 10 * 4) + (64 * 4)
if @py eq (4 * 4) then @py = 5 * 4
resultis absolute ]
if pin ls 731 do
[ @px = 96 * 4; @py = ((pin - 725) * 10 * 4) + (59 * 4)
resultis absolute ]
if pin ls 743 do
[ @px = 98 * 4; @py = ((pin - 731) * 5 * 4) + (59 * 4)
resultis absolute ]
if pin ls 827 do
[ let group = (pin - 743) / 12
let subpin = (pin - 743) rem 12
let xoffset = nil
test subpin ls 6
ifso [ xoffset = 0; @py = ((subpin) * 10 * 4) + (64 * 4) ]
ifnot [ xoffset = 4; @py = ((subpin - 6) * 10 * 4) + (59 * 4) ]
@px = 101 * 4 + (group * 3 * 4) + xoffset
resultis absolute ]
resultis illegal
]