// RouteDaffodilD.bcpl
// Route description of Daffodil Board part D (4 of 4)
// Last modified June 15, 1983 11:54 AM 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 InArray(x, inc, min, max) = valof [
if (x ls min) % (x gr max) then resultis false
resultis ((x - min) rem inc) eq 0 ]
and UpperLeft(absX, absY, fstGnd, fstVcc, pPinNo, picclass) = valof
[
let Offset = nil
let type = nil
switchon (absX rem 300) into
[
case 0:
[ // GND first row
test ((absY-1400) rem 1000) eq 0
ifso [ type = GND; Offset = (absY-1400)/1000 ]
ifnot [ type = VCC; Offset = (absY-1900)/1000 ]
endcase ]
case 100:
[ // VCC first row
test ((absY-1400) rem 1000) eq 0
ifso [ type = VCC; Offset = (absY-1400)/1000 + 4]
ifnot [ type = GND; Offset = (absY-1900)/1000 + 5]
endcase ]
default:
[ CallSwat(" HELP!!!!") ]
]
let grp = absX / 300
switchon type into
[
case GND:
[ @pPinNo = grp * 9 + Offset + fstGnd
@picclass = MustFindNamee("GND",typeIcclass)
resultis @pPinNo + firstGNDPin - 1
endcase ]
case VCC:
[ @pPinNo = grp * 9 + Offset + fstVcc
@picclass = MustFindNamee("VCC",typeIcclass)
resultis @pPinNo + firstVCCPin - 1
endcase ]
]
]
and LowerLeft(absX, absY, fstGnd, fstVcc, pPinNo, picclass) = valof
[
if absY eq 500 then absY = 400
let Offset = nil
let type = nil
switchon (absX rem 300) into
[
case 0:
[ // GND first row
test ((absY-400) rem 1000) eq 0
ifso [ type = GND; Offset = (absY-400)/1000 ]
ifnot [ type = VCC; Offset = (absY-900)/1000 ]
endcase ]
case 100:
[ // VCC first row
test ((absY-400) rem 1000) eq 0
ifso [ type = VCC; Offset = (absY-400)/1000 + 5]
ifnot [ type = GND; Offset = (absY-900)/1000 + 6]
endcase ]
default:
[ CallSwat(" HELP!!!!") ]
]
let grp = absX / 300
switchon type into
[
case GND:
[ @pPinNo = grp * 11 + Offset + fstGnd
@picclass = MustFindNamee("GND",typeIcclass)
resultis @pPinNo + firstGNDPin - 1
endcase ]
case VCC:
[ @pPinNo = grp * 11 + Offset + fstVcc
@picclass = MustFindNamee("VCC",typeIcclass)
resultis @pPinNo + firstVCCPin - 1
endcase ]
]
]
and Right(absX, absY, fstGnd, fstVcc, pPinNo, picclass) = valof
[
let Offset = nil
let type = nil
switchon (absX rem 300) into
[
case 0:
[ // VCC first row
test ((absY-5900) rem 1000) eq 0
ifso [ type = VCC; Offset = (absY-5900)/1000 ]
ifnot [ type = GND; Offset = (absY-6400)/1000 ]
endcase ]
case 100:
[ // GND first row
test ((absY-5900) rem 1000) eq 0
ifso [ type = GND; Offset = (absY-5900)/1000 + 6]
ifnot [ type = VCC; Offset = (absY-6400)/1000 + 6]
endcase ]
default:
[ CallSwat(" HELP!!!!") ]
]
let grp = absX / 300
switchon type into
[
case GND:
[ @pPinNo = grp * 12 + Offset + fstGnd
@picclass = MustFindNamee("GND",typeIcclass)
resultis @pPinNo + firstGNDPin - 1
endcase ]
case VCC:
[ @pPinNo = grp * 12 + Offset + fstVcc
@picclass = MustFindNamee("VCC",typeIcclass)
resultis @pPinNo + firstVCCPin - 1
endcase ]
]
]
and Center(absX, absY, fstGnd, fstVcc, pPinNo, picclass) = valof
[
let Offset = nil
let type = nil
switchon (absX rem 200) into
[
case 100:
[ // VCC first row
test ((absY-5900) rem 1000) eq 0
ifso [ type = VCC; Offset = (absY-5900)/1000 + 6 ]
ifnot [ type = GND; Offset = (absY-6400)/1000 + 6 ]
endcase ]
case 0:
[ // GND first row
test ((absY-5900) rem 1000) eq 0
ifso [ type = GND; Offset = (absY-5900)/1000 ]
ifnot [ type = VCC; Offset = (absY-6400)/1000 ]
endcase ]
default:
[ CallSwat(" HELP!!!!") ]
]
let grp = absX / 200
switchon type into
[
case GND:
[ @pPinNo = grp * 12 + Offset + fstGnd
@picclass = MustFindNamee("GND",typeIcclass)
resultis @pPinNo + firstGNDPin - 1
endcase ]
case VCC:
[ @pPinNo = grp * 12 + Offset + fstVcc
@picclass = MustFindNamee("VCC",typeIcclass)
resultis @pPinNo + firstVCCPin - 1
endcase ]
]
]
and PinGridPower(absX, absY, fstGnd, fstVcc, pPinNo, picclass) = valof
[
let Offset = nil
let type = nil
switchon (absX rem 200) into
[
case 0:
[ // VCC first row
switchon absY into
[
case 7400: [ Offset = 0; type = GND; endcase ]
case 7700: [ Offset = 0; type = VCC; endcase ]
case 9400: [ Offset = 1; type = GND; endcase ]
case 9700: [ Offset = 1; type = VCC; endcase ]
case 11400: [ Offset = 2; type = GND; endcase ]
case 11500: [ Offset = 2; type = VCC; endcase ]
default: resultis 0
]
endcase ]
case 100:
[ // GND first row
switchon absY into
[
case 7400: [ Offset = 3; type = VCC; endcase ]
case 7700: [ Offset = 3; type = GND; endcase ]
case 9400: [ Offset = 4; type = VCC; endcase ]
case 9700: [ Offset = 4; type = GND; endcase ]
case 11400: [ Offset = 5; type = VCC; endcase ]
case 11500: [ Offset = 5; type = GND; endcase ]
default: resultis 0
]
endcase ]
default:
[ CallSwat(" HELP!!!!") ]
]
let grp = absX / 200
switchon type into
[
case GND:
[ @pPinNo = grp * 6 + Offset + fstGnd
@picclass = MustFindNamee("GND",typeIcclass)
resultis @pPinNo + firstGNDPin - 1
endcase ]
case VCC:
[ @pPinNo = grp * 6 + Offset + fstVcc
@picclass = MustFindNamee("VCC",typeIcclass)
resultis @pPinNo + firstVCCPin - 1
endcase ]
]
]