//gobc.bcpl //new gobbler for sil files get "sysdefs.d" get "gob.defs" external [ BoardA BoardB BoardC BoardD BoardE BoardF BoardG BoardH BoardI BoardJ BoardK BoardL BoardM BoardN BoardO BoardP BoardQ BoardR BoardS BoardT BoardU BoardV BoardW BoardX BoardY BoardZ SendUsedICs ] static [ noroute = false //turns off routing maxn //maximum values for n and alph in a board location maxalph dts termx termy ] static //initialized to point to board specific procedures by SetUpBoardType [ GetSVCoords//(svlet,svindex,cv) GetSVindex//(pinchar,bl,boardpinnumber) returns index of closest svolt pin SVoltReq//vector of space required for SVolt source pins provided by SetUpBoardPins NetHasSVolt//(string) returns netcharacter if special, else 0 LegalBloc //(boardlocation) returns true if board location is legal ChiptoPinPos //(boardloc,chippin) returns board pin number given chip locator GetEpinCoords //(pin,cv) x in cv!0, y in cv!1 - coordinates are in .025" increments GetCpinCoords //(pin,cv) x in cv!0, y in cv!1 - coordinates are in .025" increments GetICcoords //(alph,num,pin,cv) x in cv!0, y in cv!1 - coordinates are in .025" increments AddPotentialTerms //() if the board has special terminator positions, this function adds them //to the Boardvec list (or checks that user defined ones are really terms). If they are //not assigned, they will not be printed out by SendUsedICs FindBestTerm //(x,y) returns a pointer to the best terminator pin to use for the signal //at the given coordinates SetUpTerms //() allows construction of the data structure of your choice before FindBestTerm is called TableZeroString //string to cause stitchwelder to be zeroed GetBoardPins //(boardloc) returns max number of pins at this position ] let SetUpBoardType(char) be //Takes alpha switch and sets up board specific procedures [(1270)\f1 let bp = selecton char into [l4268\f1 case $A: BoardA case $B: BoardB case $C: BoardC case $D: BoardD case $E: BoardE case $F: BoardF case $G: BoardG case $H: BoardH case $I: BoardI case $J: BoardJ case $K: BoardK case $L: BoardL case $M: BoardM case $N: BoardN case $O: BoardO case $P: BoardP case $Q: BoardQ case $R: BoardR case $S: BoardS case $T: BoardT case $U: BoardU case $V: BoardV case $W: BoardW case $X: BoardX case $Y: BoardY case $Z: BoardZ l5538\f1 ] if bp eq 0 then [ CallSwat("Bad Board Type Switch"); finish ] bp()l4268\f1 ] and ErrCfn(x,cv) be [\f1 WSS(ErFile,"*nAttempt to assign Cpin on board without any") cv!0 = 0 cv!1 = 1l4268\f1 ] and ErrTfn() = valof [\f1 WSS(ErFile,"*nTerminator assignment attempted for board with no terminators") resultis 0l4268\f1 ] and Nullfn() = valof [ resultis 0 ] and SendUsedICs() be [\f1 for alph = 0 to maxalph do for n = 1 to maxn do [l4268\f1 let bl = (26*n)+alph let bp = Boardvec!bl if bp eq 0 then loop let bpins = GetBoardPins(bl) //there are as many positions as there //are spaces on the board let used = false for i = 1 to bpins do if bp>>icdesc.pinptr^i ne 0 then [ used = true; break ] unless used then loop let pv = vec 100; pv!0 = 0 AppendC($*n,pv) AppendBL(bl,pv) AppendS(": ",pv) AppendS(lv((bp>>icdesc.stp)>>strec.st),pv) AppendC($:,pv) let sepc = $*s for i = 1 to bpins do [l5538\f1 if bp>>icdesc.pinptr^i ne 0 then loop AppendC(sepc,pv); sepc = $, AppendN(i,pv) l6808\f1 ] WSS(OutFile,pv)l5538\f1 ] WSS(OutFile,"*n@") WSS(OutFile,TableZeroString)l4268\f1 ] and ErrBL(st,bl) be [\f1 let v = vec 50; v!0=0 AppendS(st,v) AppendBL(bl,v) WSS(ErFile,v)l4268\f1 ] and ErrN(st,num) be [\f1 let v = vec 50; v!0 = 0 AppendS(st,v) AppendN(num,v) WSS(ErFile,v) l4268\f1 ] and GetBoardPinsT(boardloc) = valof [\f1 resultis 16l4268\f1 ] and LegalBlocT(bloc) = valof [\f1 let al = bloc rem 26 //letter let num = bloc/26 //number if (al gr maxalph)%(num gr maxn) then resultis false resultis true //bloc is legall4268\f1 ] and ChiptoPinPosT(boardloc,chippin) = valof [\f1 let tp = Boardvec!boardloc let ictype = tp>>icdesc.ictype if ictype eq termtype then resultis chippin //terminators always have 8 pins let maxpins = tp>>icdesc.npins //max pins for chip let mbpins = GetBoardPins(boardloc) //this function handles all types of dip packages (2 rows) //which are plugged in with the chip orientation the same as the //orientation intended for the board test chippin gr maxpins/2 ifso resultis mbpins-(maxpins-chippin) ifnot resultis chippinl4268\f1 ] (635)\f1