DIRECTORY
DoradoBoard
;
Fluke: CEDAR PROGRAM
EXPORTS DoradoBoard
= BEGIN
OPEN DoradoBoard;
scanCard: TYPE = [0..57];
pin: TYPE = [0..128];
rowType: TYPE = [0..11];
bMiny: INTEGER = 1310; --minimum y in main pattern
bMaxy: INTEGER = 14410;
bMinx: INTEGER = 4050; --minimum x in main pattern
bMaxx: INTEGER = 16150;
MaxRows: INTEGER= (bMaxy - bMiny)/50;
maxX: INTEGER = (bMaxx - bMinx)/50;
rowDesc: TYPE = RECORD[ sc: scanCard, p: pin, rt: rowType];
X: rowDesc = [0,0,0]; --no legal row at this y coordinate
rowRef: TYPE = REF Rows;
Rows: TYPE = ARRAY[0..MaxRows] OF rowDesc ← [
[01,01,10],X,[01,93,10],X,X,
[02,057,1],X,X,X,X,X,[03,037,2],X,X,[04,025,3],X,X,[04,128,4],X,X,X,X,X,[05,117,11],X,X,
[06,105,1],X,X,X,X,X,[07,085,2],X,X,[08,073,3],X,X,[09,048,4],X,X,X,X,X,[10,037,11],X,X,
[11,025,1],X,X,X,X,X,[12,005,2],X,X,[12,121,3],X,X,[13,096,4],X,X,X,X,X,[14,085,11],X,X,
[15,073,1],X,X,X,X,X,[16,053,2],X,X,[17,041,3],X,X,[18,016,4],X,X,X,X,X,[19,005,11],X,X,
[19,121,1],X,X,X,X,X,[20,101,2],X,X,[21,089,3],X,X,[22,064,4],X,X,X,X,X,[23,053,11],X,X,
[24,041,1],X,X,X,X,X,[25,021,2],X,X,[26,009,3],X,X,[26,112,4],X,X,X,X,X,[27,101,11],X,X,
[28,089,1],X,X,X,X,X,[29,069,2],X,X,[30,057,3],X,X,[31,032,4],X,X,X,X,X,[32,021,11],X,X,
[33,009,1],X,[33,117,5],X,X,X,[34,037,2],X,X,[35,025,3],X,X,[35,128,4],X,[36,117,5],X,X,X,[37,037,11],X,X,
[38,025,1],X,X,X,X,X,[39,005,2],X,X,[39,121,3],X,X,[40,096,4],X,X,X,X,X,[41,085,11],X,X,
[42,073,6],X,X,X,X,X,[43,055,2],X,X,[44,043,7],X,X,[45,020,4],X,X,X,X,X,[46,009,11],X,X,
[46,125,8],X,X,X,X,X,[47,111,2],X,X,[48,099,9],X,X,[49,081,4],X,X,X,X,X,[50,069,11],X,X,
[51,057,1],X,X,X,X,X,[52,037,2],X,X,[53,025,3],X,X,[53,128,4],X,X,X,X,X,[54,117,11],X,X,
X,X,X,[55,105,10],X,[56,69,10]
];
chan: TYPE = INTEGER; --probe channel within a row+1 (or zero if there is no probe at that x.
probe: TYPE = ARRAY [0..maxX] OF chan; --index with x/50 to get channel number+1, or 0 if there
--is no probe at that x.
probeRef: TYPE = REF probe;
probeArray: TYPE = ARRAY rowType OF probeRef;
pArray: probeArray ← [
NIL, --there really isn't a row type 0
NEW[probe ← [
0,
0,-5,108,-1,107,0,106,0,105,0,
104,0,103,0,102,0,101,0,100,0,
99,0,0,0,98,0,97,0,96,0,
95,0,94,0,93,0,92,0,91,0,
0,0,90,0,89,0,88,0,87,0,
86,0,85,0,84,-1,83,-5,82,-1,
81,0,80,0,79,0,78,0,77,0,
76,0,75,0,74,0,73,0,0,0,
72,0,71,0,70,0,69,0,68,0,
67,0,66,0,65,0,0,0,64,0,
63,0,62,0,61,0,60,0,59,0,
58,-1,57,-5,56,-1,55,0,0,0,
0,0,0,0,-5,54,-1,53,0,52,
0,51,0,50,0,49,0,48,0,47,
0,46,0,45,0,0,0,44,0,43,
0,42,0,41,0,40,0,39,0,38,
0,37,0,0,0,36,0,35,0,34,
0,33,0,32,0,31,0,30,-1,29,
-5,28,-1,27,0,26,0,25,0,24,
0,23,0,22,0,21,0,20,0,19,
0,0,0,18,0,17,0,16,0,15,
0,14,0,13,0,12,0,11,0,0,
0,10,0,9,0,8,0,7,0,6,
0,5,0,4,-1,3,-5,2,-1,1,
0,0]], --type 1 row
NEW[probe ← [
0,
0,-1,116,-2,115,0,114,0,113,0,
112,0,111,0,110,0,109,0,108,0,
107,-4,106,-2,105,0,104,0,103,0,
102,0,101,0,100,0,99,0,98,-4,
97,-2,96,0,95,0,94,0,93,0,
92,0,91,0,90,0,89,-1,88,-2,
87,0,86,0,85,0,84,0,83,0,
82,0,81,0,80,0,79,-4,78,-2,
77,0,76,0,75,0,74,0,73,0,
72,0,71,0,70,-4,69,-2,68,0,
67,0,66,0,65,0,64,0,63,0,
62,0,61,-1,60,-2,59,0,0,0,
0,0,0,0,-1,58,-2,57,0,56,
0,55,0,54,0,53,0,52,0,51,
0,50,0,49,-4,48,-2,47,0,46,
0,45,0,44,0,43,0,42,0,41,
0,40,-4,39,-2,38,0,37,0,36,
0,35,0,34,0,33,0,32,0,31,
-1,30,-2,29,0,28,0,27,0,26,
0,25,0,24,0,23,0,22,0,21,
-4,20,-2,19,0,18,0,17,0,16,
0,15,0,14,0,13,0,12,-4,11,
-2,10,0,9,0,8,0,7,0,6,
0,5,0,4,0,3,-1,2,-2,1,
0,0]], --type 2 row
NEW[probe ← [
-4,
103,0,0,-3,102,0,101,0,100,0,
99,0,98,0,97,0,96,0,95,0,
94,0,0,0,93,0,92,0,91,0,
90,0,89,0,88,0,87,0,86,0,
0,0,85,0,84,0,83,0,82,0,
81,0,80,0,79,-4,78,0,0,-3,
77,0,76,0,75,0,74,0,73,0,
72,0,71,0,70,0,69,0,0,0,
68,0,67,0,66,0,65,0,64,0,
63,0,62,0,61,0,0,0,60,0,
59,0,58,0,57,0,56,0,55,0,
54,-4,53,0,0,-3,52,0,0,0,
0,0,0,0,0,0,-3,51,0,50,
0,49,0,48,0,47,0,46,0,45,
0,44,0,43,0,0,0,42,0,41,
0,40,0,39,0,38,0,37,0,36,
0,35,0,0,0,34,0,33,0,32,
0,31,0,30,0,29,0,28,-4,27,
0,0,-3,26,0,25,0,24,0,23,
0,22,0,21,0,20,0,19,0,18,
0,0,0,17,0,16,0,15,0,14,
0,13,0,12,0,11,0,10,0,0,
0,9,0,8,0,7,0,6,0,5,
0,4,0,3,-4,2,0,0,-3,1,
0,0]], --type 3 row
NEW[probe ← [
0,
0,-1,117,0,116,0,115,0,114,0,
113,0,112,0,111,0,110,0,109,0,
108,-1,107,0,106,0,105,0,104,0,
103,0,102,0,101,0,100,-1,99,-1,
98,0,97,0,96,0,95,0,94,0,
93,0,92,0,91,0,90,-1,89,0,
88,0,87,0,86,0,85,0,84,0,
83,0,82,0,81,0,80,-1,79,0,
78,0,77,0,76,0,75,0,74,0,
73,0,72,-1,71,-1,70,0,69,0,
68,0,67,0,66,0,65,0,64,0,
63,0,62,-1,61,0,60,0,0,0,
0,0,0,0,-1,59,0,58,0,57,
0,56,0,55,0,54,0,53,0,52,
0,51,0,50,-1,49,0,48,0,47,
0,46,0,45,0,44,0,43,0,42,
-1,41,-1,40,0,39,0,38,0,37,
0,36,0,35,0,34,0,33,0,32,
-1,31,0,30,0,29,0,28,0,27,
0,26,0,25,0,24,0,23,0,22,
-1,21,0,20,0,19,0,18,0,17,
0,16,0,15,0,14,-1,13,-1,12,
0,11,0,10,0,9,0,8,0,7,
0,6,0,5,0,4,-1,3,0,2,
0,1]], --type 4 row
NEW[probe ← [
0,
0,0,0,0,0,0,48,0,47,0,
46,0,45,0,44,0,43,0,42,0,
41,0,40,0,39,0,38,0,37,0,
0,0,0,0,36,0,35,0,34,0,
33,0,32,0,31,0,30,0,29,0,
28,0,27,0,26,0,25,0,0,0,
0,0,24,0,23,0,22,0,21,0,
20,0,19,0,18,0,17,0,16,0,
15,0,14,0,13,0,0,0,0,0,
12,0,11,0,10,0,9,0,8,0,
7,0,6,0,5,0,4,0,3,0,
2,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0]], --type 5 row
NEW[probe ← [
0,
0,-5,110,-1,109,0,108,0,107,0,
106,0,105,0,104,0,103,0,102,0,
101,0,100,0,99,0,98,0,97,0,
96,0,95,0,94,0,93,0,92,0,
91,0,90,0,89,0,88,0,87,0,
86,0,85,0,84,-1,83,-5,82,-1,
81,0,80,0,79,0,78,0,77,0,
76,0,75,0,74,0,73,0,0,0,
72,0,71,0,70,0,69,0,68,0,
67,0,66,0,65,0,0,0,64,0,
63,0,62,0,61,0,60,0,59,0,
58,-1,57,-5,56,-1,55,0,0,0,
0,0,0,0,-5,54,-1,53,0,52,
0,51,0,50,0,49,0,48,0,47,
0,46,0,45,0,0,0,44,0,43,
0,42,0,41,0,40,0,39,0,38,
0,37,0,0,0,36,0,35,0,34,
0,33,0,32,0,31,0,30,-1,29,
-5,28,-1,27,0,26,0,25,0,24,
0,23,0,22,0,21,0,20,0,19,
0,0,0,18,0,17,0,16,0,15,
0,14,0,13,0,12,0,11,0,0,
0,10,0,9,0,8,0,7,0,6,
0,5,0,4,-1,3,-5,2,-1,1,
0,0]], --type 6 row
NEW[probe ← [
-4,
105,0,0,-3,104,0,103,0,102,0,
101,0,100,0,99,0,98,0,97,0,
96,0,95,0,94,0,93,0,92,0,
91,0,90,0,89,0,88,0,87,0,
86,0,85,0,84,0,83,0,82,0,
81,0,80,0,79,-4,78,0,0,-3,
77,0,76,0,75,0,74,0,73,0,
72,0,71,0,70,0,69,0,0,0,
68,0,67,0,66,0,65,0,64,0,
63,0,62,0,61,0,0,0,60,0,
59,0,58,0,57,0,56,0,55,0,
54,-4,53,0,0,-3,52,0,0,0,
0,0,0,0,0,0,-3,51,0,50,
0,49,0,48,0,47,0,46,0,45,
0,44,0,43,0,0,0,42,0,41,
0,40,0,39,0,38,0,37,0,36,
0,35,0,0,0,34,0,33,0,32,
0,31,0,30,0,29,0,28,-4,27,
0,0,-3,26,0,25,0,24,0,23,
0,22,0,21,0,20,0,19,0,18,
0,0,0,17,0,16,0,15,0,14,
0,13,0,12,0,11,0,10,0,0,
0,9,0,8,0,7,0,6,0,5,
0,4,0,3,-4,2,0,0,-3,1,
0,0]], --type 7 row
NEW[probe ← [
0,
0,-5,114,-1,113,0,112,0,111,0,
110,0,109,0,108,0,107,0,106,0,
105,0,104,0,103,0,102,0,101,0,
100,0,99,0,98,0,97,0,96,0,
95,0,94,0,93,0,92,0,91,0,
90,0,89,0,88,-1,87,-5,86,-1,
85,0,84,0,83,0,82,0,81,0,
80,0,79,0,78,0,77,0,76,0,
75,0,74,0,73,0,72,0,71,0,
70,0,69,0,68,0,67,0,66,0,
65,0,64,0,63,0,62,0,61,0,
60,-1,59,-5,58,-1,57,0,0,0,
0,0,0,0,-5,56,-1,55,0,54,
0,53,0,52,0,51,0,50,0,49,
0,48,0,47,0,46,0,45,0,44,
0,43,0,42,0,41,0,40,0,39,
0,38,0,37,0,36,0,35,0,34,
0,33,0,32,0,31,0,30,-1,29,
-5,28,-1,27,0,26,0,25,0,24,
0,23,0,22,0,21,0,20,0,19,
0,0,0,18,0,17,0,16,0,15,
0,14,0,13,0,12,0,11,0,0,
0,10,0,9,0,8,0,7,0,6,
0,5,0,4,-1,3,-5,2,-1,1,
0,0]], --type 8 row
NEW[probe ← [
-4,
109,0,0,-3,108,0,107,0,106,0,
105,0,104,0,103,0,102,0,101,0,
100,0,99,0,98,0,97,0,96,0,
95,0,94,0,93,0,92,0,91,0,
90,0,89,0,88,0,87,0,86,0,
85,0,84,0,83,-4,82,0,0,-3,
81,0,80,0,79,0,78,0,77,0,
76,0,75,0,74,0,73,0,72,0,
71,0,70,0,69,0,68,0,67,0,
66,0,65,0,64,0,63,0,62,0,
61,0,60,0,59,0,58,0,57,0,
56,-4,55,0,0,-3,54,0,0,0,
0,0,0,0,0,0,-3,53,0,52,
0,51,0,50,0,49,0,48,0,47,
0,46,0,45,0,44,0,43,0,42,
0,41,0,40,0,39,0,38,0,37,
0,36,0,35,0,34,0,33,0,32,
0,31,0,30,0,29,0,28,-4,27,
0,0,-3,26,0,25,0,24,0,23,
0,22,0,21,0,20,0,19,0,18,
0,0,0,17,0,16,0,15,0,14,
0,13,0,12,0,11,0,10,0,0,
0,9,0,8,0,7,0,6,0,5,
0,4,0,3,-4,2,0,0,-3,1,
0,0]], --type 9 row
NEW[probe ← [
0,
0,0,0,0,0,0,0,0,0,0,0,0,0,
92,0,91,0,0,90,0,89,0,0,
88,0,87,0,0,86,0,85,0,0,
84,0,83,0,0,82,0,81,0,0,
80,0,79,0,0,78,0,77,0,0,
76,0,75,0,0,74,0,73,0,0,
72,0,71,0,0,70,0,69,0,0,
68,0,67,0,0,66,0,65,0,0,
64,0,63,0,0,62,0,61,0,0,
60,0,59,0,0,58,0,57,0,0,
56,0,55,0,0,54,0,53,0,0,
52,0,51,0,0,50,0,49,0,0,
48,0,47,0,0,46,0,45,0,0,
44,0,43,0,0,42,0,41,0,0,
40,0,39,0,0,38,0,37,0,0,
36,0,35,0,0,34,0,33,0,0,
32,0,31,0,0,30,0,29,0,0,
28,0,27,0,0,26,0,25,0,0,
24,0,23,0,0,22,0,21,0,0,
20,0,19,0,0,18,0,17,0,0,
16,0,15,0,0,14,0,13,0,0,
12,0,11,0,0,10,0,09,0,0,
08,0,07,0,0,06,0,05,0,0,
04,0,03,0,0,02,0,01,0]],--type 10 row
NEW[probe ← [
0,
0,0,116,-2,115,0,114,0,113,0,
112,0,111,0,110,0,109,0,108,0,
107,-1,106,-2,105,0,104,0,103,0,
102,0,101,0,100,0,99,0,98,-1,
97,-2,96,0,95,0,94,0,93,0,
92,0,91,0,90,0,89,0,88,-2,
87,0,86,0,85,0,84,0,83,0,
82,0,81,0,80,0,79,-1,78,-2,
77,0,76,0,75,0,74,0,73,0,
72,0,71,0,70,-1,69,-2,68,0,
67,0,66,0,65,0,64,0,63,0,
62,0,61,0,60,-2,59,0,0,0,
0,0,0,0,0,58,-2,57,0,56,
0,55,0,54,0,53,0,52,0,51,
0,50,0,49,-1,48,-2,47,0,46,
0,45,0,44,0,43,0,42,0,41,
0,40,-1,39,-2,38,0,37,0,36,
0,35,0,34,0,33,0,32,0,31,
0,30,-2,29,0,28,0,27,0,26,
0,25,0,24,0,23,0,22,0,21,
-1,20,-2,19,0,18,0,17,0,16,
0,15,0,14,0,13,0,12,-1,11,
-2,10,0,9,0,8,0,7,0,6,
0,5,0,4,0,3,0,2,-2,1,
0,0]] --type 11 row
];
cardRows: rowRef ← NEW[Rows];
ASItoFluke: PUBLIC PROC[x,y: INTEGER] RETURNS [pt: PadType ← [noProbe,0]] =
TRUSTED BEGIN
rd: rowDesc;
ch: INTEGER;
IF y<bMiny OR y>bMaxy THEN RETURN;
IF x<bMinx OR x>bMaxx THEN
SELECT y FROM --The power pins at the corners of the board are handled
--as a special case, since several pins on the board are considered connected
--and are probed by a single probe.
1310 => { SELECT x FROM
4000 => RETURN[pt ←[vee,7203]];
16350 => RETURN[pt ←[vcc,7202]];
ENDCASE => RETURN};
14410 => { SELECT x FROM
4000 => RETURN[pt ←[vtt,7200]];
16350 => RETURN[pt ←[vdd,7201]];
ENDCASE => RETURN};
ENDCASE => RETURN;
y ← y-bMiny;
IF y MOD 50 # 0 THEN RETURN; --not on 50 mil grid
y ← y/50;
x ← x - bMinx;
IF x MOD 50 # 0 THEN RETURN;
x ← x/50;
rd ← cardRows[y];
IF rd.rt = 0 THEN RETURN;
ch ← pArray[rd.rt][x];
IF ch = 0 THEN RETURN;
pt.n ← ch + rd.p + 128*(rd.sc-1) - 2; --the -2 is because both ch and rd.p are 1-origined
pt.t ← SELECT pArray[rd.rt][x-1] FROM
0 => signal,
-1 => gnd,
-2 => vee,
-3 => vdd,
-4 => vtt,
-5 => vcc,
ENDCASE => noProbe;
END;
END.