// 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 ] (635)\4f9b19f8B509f9b14f8B876f9b14f8B956f9b18f8B