// RouteMultiBusA.bcpl - part 1 of 2
// Route description of Interconnection Technology Inc. Multibus Board
// P/N 50062 -- DJ Curry March 16, 1982 3:43 PM
// The V1 and V4 buses are not used (pins are too near edge)
//A1 is A1x,A1y = 24,20 with X in the short dimension
// Pins should be stuffed with VCC on the component side
//"VB" currently set to "VEE" see locations with //// VB -> VEE
get "route.defs"
manifest [ A1x = 24; A1y = 20 ]
static [ maxICs=300; boardInterfaceVersion=interfaceVersion ]
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.
// Note wiring coordinates (after LevelTransform) should be:
// 1-( 24, 480-460) long 2-( 24, 480-20) x
// short short y---|--- y
// 4-(240, 480-460) long 3-(240, 480-20) x
// Machine is set up so that y increases to the right and x down
// Board is clamped on top on the 3 connector edge
case 0: "MultiBusVBisVEE"//// VB -> VEE Board type
case 1: "#A111"// Upper left (wiring side)
case 2: "#A1"// Upper right (wiring side)
case 3: "#AA1"// Lower right (wiring side)
default: "#AA111" ]// Lower left (wiring side)
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 oflevel, 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 whethercomponents 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=12*40-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", 526, CPinPos)
BuildTWNet("GND", 25*15, GNDPinPos)
BuildTWNet("VCC", 25*9, VCCPinPos)
BuildTWNet("VEE", 25, VBPinPos)//// VB -> VEE
BuildTWNet("VD", 25, VDPinPos)
BuildTWNet("VF", 25, VFPinPos)
BuildTWNet("VH", 25, VHPinPos)
BuildTWNet("VK", 25, VKPinPos)
BuildTWNet("VM", 25, VMPinPos)
BuildTWNet("VP", 25, VPPinPos)
BuildTWNet("VR", 25, VRPinPos)
BuildTWNet("VTA", 14, VTAPinPos)
BuildTWNet("VTB", 12, VTBPinPos)
BuildTWNet("VVA", 14, VVAPinPos)
BuildTWNet("VVB", 12, VVBPinPos)
BuildTWNet("V2", 11, V2PinPos)
BuildTWNet("V3", 11, V3PinPos)
]
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 ? (A1x+54*4+13+4), (A1x+54*4+13)
if connIndex eq 1 then // J1
[
if (pinIndex ls 13) % (pinIndex gr 72) then
switchon pinIndex into [
case 7:@py = A1y-4 + 6*4; resultis absolute
case 9:@py = A1y-4 + 7*4; resultis absolute
case 73:
case 74:@py = A1y-4 + 56*4; resultis absolute
case 77:@py = A1y-4 + 61*4; resultis absolute
case 79:@py = A1y-4 + 62*4; resultis absolute
default: resultis illegal ]
let yoffset = (((pinIndex - 13) rem 10) /2) * 4 + A1y-4
switchon (pinIndex - 13) / 10 into [
case 0: @py = 12*4 + yoffset; resultis absolute
case 1: @py = 19*4 + yoffset; resultis absolute
case 2: @py = 27*4 + yoffset; resultis absolute
case 3: @py = 35*4 + yoffset; resultis absolute
case 4: @py = 43*4 + yoffset; resultis absolute
case 5: @py = 51*4 + yoffset; resultis absolute
default: resultis illegal ]
]
if connIndex eq 2 then [ // J2
if (pinIndex ls 1) % (pinIndex gr 60) then resultis illegal
@py = A1y-4 + 80*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 CableConnectors(pyy, index, connsize, bias) = valof [
if (index ls 1) % (index gr connsize) then resultis illegal
@pyy = A1y-4 + bias*4 - ((index-1)/2)*4; resultis absolute ]
let even = (pinIndex rem 2) eq 0
if (connIndex ls 3) % (connIndex gr 5) then resultis illegal
@px = even ? (A1x-5), (A1x-9)
switchon connIndex into [
case 3: resultis CableConnectors(py, pinIndex, 50, 37)
case 4: resultis CableConnectors(py, pinIndex, 50, 72)
case 5: resultis CableConnectors(py, pinIndex, 26, 97)
default: resultis illegal ]
]
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 15*25) then resultis illegal
let column = (pin-1) rem 25
let row = (pin-1) / 25
if row ls 6 then @px = A1x + 2*4 + (12*row)
if row eq 6 then @px = A1x + 23*4
if row gr 6 then @px = A1x + 29*4 + (12*(row-7))
@py = BusColumnYPositions(column)
resultis absolute
]
and VCCPinPos(icinst, pin, px, py, pInfo; numargs na) = valof
[
DefaultArgs(lv na, -4, lv na)
@pInfo = noDisconnect+noReconnect+BottomLevel
if (pin ls 1) % (pin gr 9*25) then resultis illegal
let column = (pin-1) rem 25
let row = (pin-1) / 25
@px = A1x + 4 + (24*row)
@py = BusColumnYPositions(column)
resultis absolute
]
and VBPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 4*4, pin, px, py, ((na ls 5)?0,pInfo))
and VDPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 10*4, pin, px, py, ((na ls 5)?0,pInfo))
and VFPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 16*4, pin, px, py, ((na ls 5)?0,pInfo))
and VHPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 22*4, pin, px, py, ((na ls 5)?0,pInfo))
and VKPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 28*4, pin, px, py, ((na ls 5)?0,pInfo))
and VMPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 34*4, pin, px, py, ((na ls 5)?0,pInfo))
and VPPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 40*4, pin, px, py, ((na ls 5)?0,pInfo))
and VRPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxPinPos( 46*4, pin, px, py, ((na ls 5)?0,pInfo))
and VTAPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxAPinPos( 52*4, pin, px, py, ((na ls 5)?0,pInfo))
and VTBPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxBPinPos( 52*4, pin, px, py, ((na ls 5)?0,pInfo))
and VVAPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxAPinPos( 53*4, pin, px, py, ((na ls 5)?0,pInfo))
and VVBPinPos(icinst, pin, px, py, pInfo; numargs na) =
VxxxBPinPos( 53*4, pin, px, py, ((na ls 5)?0,pInfo))
and V2PinPos(icinst, pin, px, py, pInfo; numargs na) = valof [
DefaultArgs(lv na, -4, lv na)
@pInfo = noDisconnect+noReconnect+BottomLevel
if (pin ls 1) % (pin gr 11) then resultis illegal
@px = A1x + selecton pin into [
case 1: 4
case 11: 53*4
default: 16 + (pin-2)*24 ]
@py = A1y - 11
resultis absolute ]
and V3PinPos(icinst, pin, px, py, pInfo; numargs na) = valof [
DefaultArgs(lv na, -4, lv na)
@pInfo = noDisconnect+noReconnect+BottomLevel
if (pin ls 1) % (pin gr 11) then resultis illegal
@px = A1x + selecton pin into [
case 1: 4
case 11: 53*4
default: 16 + (pin-2)*24 ]
@py = A1y + 110*4 + 11
resultis absolute ]
and VxxxPinPos(xoffset, pin, px, py, pInfo) = valof [
if pInfo ne 0 then
@pInfo = noDisconnect+noReconnect+BottomLevel
if (pin ls 1) % (pin gr 25) then resultis illegal
@px = A1x + xoffset
@py = BusColumnYPositions(pin-1)
resultis absolute ]
and VxxxAPinPos(xoffset, pin, px, py, pInfo) = valof [
if pInfo ne 0 then
@pInfo = noDisconnect+noReconnect+BottomLevel
if (pin ls 1) % (pin gr 14) then resultis illegal
@px = A1x + xoffset
@py = selecton pin into [
case 1: A1y
case 2: A1y + 4
case 14: A1y + 58*4
default: A1y + (pin-2)*20 - 4 ]
resultis absolute ]
and VxxxBPinPos(xoffset, pin, px, py, pInfo) = valof [
if pInfo ne 0 then
@pInfo = noDisconnect+noReconnect+BottomLevel
if (pin ls 1) % (pin gr 12) then resultis illegal
@px = A1x + xoffset
@py = selecton pin into [
case 12: A1y + 110*4
default: A1y + 59*4 + (pin-1)*20 ]
resultis absolute ]
and BusColumnYPositions(busColumnIndex) =
selecton busColumnIndex into [
case 0: A1y
case 1: A1y + 4
case 23: A1y + 109*4
case 24: A1y + 110*4
default: A1y + (busColumnIndex-1)*20 - 4 ]