//routedcholes.bcpl

// Board-specific Route extra-hole routines for the D0 ECL Multi-Wire Logic Board
// last modified by S Tom Chang, March 6, 1979 7:12 PM

get "route.defs"

external [ Pin1of3W ]

static [ boardInterfaceVersion = interfaceVersion ]

let ComputeMWCoords(px, py, isMils) be
[
unless isMils do
[
@px = 25*@px
@py = 25*@py
]

let pxsave = @px
let pysave = @py
@px = 1000 + pysave
@py = 1000 + pxsave
]

and DescribeHoles(PrintAHole) be
[
manifest [ plated = true; unplated = not plated; isMils = true ]
manifest
[
socketHoleSize = 44 // mils, after plating & solder coat
extractHoleSize = 113 // mils, unplated
powerHoleSize = 120 // mils, plated
toolHoleSize = 93 // mils, plated
]

let x,y = nil,nil
let forceDrilling = false

for x=0 to 408 do for y=0 to 508 do
if FindIndexFromCoord(x,y) gr 0 then
PrintAHole(x, y, socketHoleSize, plated, false, forceDrilling)

forceDrilling = true

for hole=0 to 1 do // missing feed through holes of the edge connectors
[
PrintAHole(0, 504+hole*4, socketHoleSize, plated, false, forceDrilling)
PrintAHole(212, 504+hole*4, socketHoleSize, plated, false, forceDrilling)
PrintAHole(216, 504+hole*4, socketHoleSize, plated, false, forceDrilling)
]

// bypass capacitors for the VCC and VEE in col’s 1 to 22
for row=0 to 10 do for grp = 1 to 2 do for col=0 to 1 do for hole = 0 to 1 do
[
PrintAHole(col*112, row*42+grp*24+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(4+col*112, row*42+grp*24+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(248+col*112, row*42+grp*24+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(252+col*112, row*42+grp*24+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(40+col*112+hole*36, 24+grp*12+row*42, socketHoleSize, plated, false, forceDrilling)
PrintAHole(224+col*4, row*42+grp*24+hole*12, socketHoleSize, plated, false, forceDrilling)
]

for row=0 to 10 do for hole = 0 to 1 do // bypass capacitors in upper region
[
PrintAHole(288, 36+row*42+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(324, 36+row*42+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(400, 36+row*42+hole*12, socketHoleSize, plated, false, forceDrilling)
]

for grp = 0 to 1 do for col = 0 to 1 do for hole = 0 to 1 do // col-0 FICAPs
[
PrintAHole(112+grp*136+col*112+hole*4, 6, socketHoleSize, plated, false, forceDrilling)
PrintAHole(112+grp*136+col*112+hole*4, 18, socketHoleSize, plated, false, forceDrilling)
]

for row=0 to 10 do for grp = 0 to 1 do // VTT power feed through holes
PrintAHole(228+grp*20, row*42+42, socketHoleSize, plated, false, forceDrilling)

for hole = 0 to 1 do // odd FICAP and power feed through holes in col-0
[
PrintAHole(228+hole*20, 0, socketHoleSize, plated, false, forceDrilling)
PrintAHole(36, 6+hole*12, socketHoleSize, plated, false, forceDrilling)
PrintAHole(40, 6+hole*12, socketHoleSize, plated, false, forceDrilling)
]

for hole = 0 to 3 do // holes for power feed near the edge connectors
PrintAHole(44+hole*112, 492, powerHoleSize, plated, false, forceDrilling)

// holes for power feed near the top and bottom of the board
for grp = 0 to 1 do for col = 0 to 1 do for hole = 0 to 1 do
PrintAHole(grp*416-8, 24+col*320+hole*132, powerHoleSize, plated, false, forceDrilling)

for grp = 0 to 1 do for hole = 0 to 1 do // stiffener holes at the back
PrintAHole(30+grp*232+hole*108, -18, extractHoleSize, unplated, false, forceDrilling)
for col = 0 to 1 do // extractor holes
PrintAHole(-250+col*10500, -450, extractHoleSize, unplated, isMils, forceDrilling)

for grp = 0 to 1 do for col = 0 to 1 do for hole = 0 to 1 do // col-0 vtt FICAP
[
PrintAHole(152+grp*136+col*36, -6+hole*12, socketHoleSize, plated, false, forceDrilling)
]

// 3 more holes for VTT FICAP in col-0
PrintAHole(40, -6, socketHoleSize, plated, false, forceDrilling)
PrintAHole(76, -6, socketHoleSize, plated, false, forceDrilling)
PrintAHole(76, 6, socketHoleSize, plated, false, forceDrilling)

// Tooling holes
PrintAHole(-350, -200,
toolHoleSize, unplated, isMils, forceDrilling)
PrintAHole(-350, 12700,
toolHoleSize, unplated, isMils, forceDrilling)
PrintAHole(10350, 12700,
toolHoleSize, unplated, isMils, forceDrilling)

for hole = 0 to 1 do // holes for VCC feed through near the edge connectors
PrintAHole(236+hole*4, 480, socketHoleSize, plated, false, forceDrilling)

]