home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / c / tptc17tc.lzh / DIA.PAS < prev    next >
Pascal/Delphi Source File  |  1988-03-25  |  5KB  |  245 lines

  1.  
  2. (*
  3.  * hardware diagnostic utility
  4.  * s.h.smith, 13-jan-87
  5.  *
  6.  *)
  7. {$c-}
  8.  
  9. type
  10.    anystring = string[80];
  11. var
  12.    hardware:  char;
  13.  
  14. function digit(i: integer): char;
  15. begin
  16.    i := i and 15;
  17.    if i > 9 then i := i + 7;
  18.    digit := chr(i + ord('0'));
  19. end;
  20.  
  21. function itoh(i: integer): anystring;
  22. begin
  23.    itoh := {digit(i shr 12) + digit(i shr 8) + }
  24.             digit(i shr 4) + digit(i);
  25. end;
  26.  
  27. function itob(i: integer): anystring;
  28. const
  29.    bits: array[0..15] of anystring =
  30.       ('0000','0001','0010','0011',
  31.        '0100','0101','0110','0111',
  32.        '1000','1001','1010','1011',
  33.        '1100','1101','1110','1111');
  34. begin
  35.    itob := bits[(i shr 4) and 15] + bits[i and 15];
  36. end;
  37.  
  38. function htoi(h:anystring): integer;
  39. var
  40.    i,j: integer;
  41. begin
  42.    j := 0;
  43.    for i := 1 to length(h) do
  44.       j := j * 16 + pos(upcase(h[i]),'123456789ABCDEF');
  45.    htoi := j;
  46. end;
  47.  
  48. procedure determine_hardware;
  49. begin
  50.    port[$342] := 6;
  51.    case port[$342] and 7 of
  52.       1:    hardware := 'B';
  53.       7,0:  hardware := 'A';
  54.       else  hardware := 'B';
  55.    end;
  56.  
  57.    writeln('hardware: rev ',hardware);
  58. end;
  59.  
  60.  
  61. procedure readanalog;
  62. var
  63.    h,l: integer;
  64.    s:   anystring;
  65.    d:   char;
  66.  
  67. begin
  68.    write('display data (y/n/b)? ');
  69.    read(kbd,s[1]);
  70.    d := upcase(s[1]);
  71.  
  72.    while not keypressed do
  73.    begin
  74.       port[$341] := 0;   {start conversion};
  75.       repeat
  76.         l := port[$342];
  77.       until ((l and $80) = 0) or keypressed;
  78.  
  79.       l := port[$340];
  80.       h := port[$341];
  81.  
  82.       case d of
  83.          'Y': write(itoh(h),itoh(l),'    ');
  84.          'B': write(itob(h),itob(l),'    ');
  85.       end;
  86.    end;
  87. end;
  88.  
  89.  
  90. procedure readport;
  91. var
  92.    p: integer;
  93.    s: anystring;
  94.    d: integer;
  95.  
  96. begin
  97.    write('read what port(hex): ');
  98.    readln(s);
  99.    p := htoi(s);
  100.  
  101.    write('display data(y/n/b)? ');
  102.    read(kbd,s[1]);
  103.  
  104.    writeln('reading from port $',itoh(hi(p)), itoh(lo(p)));
  105.  
  106.    if upcase(s[1]) = 'Y' then
  107.    while not keypressed do
  108.       write(itoh(port[p]),'  ')
  109.    else
  110.  
  111.    if upcase(s[1]) = 'B' then
  112.    while not keypressed do
  113.       write(itob(port[p]),'  ')
  114.  
  115.    else
  116.       while not keypressed do
  117.          d := port[p];
  118. end;
  119.  
  120.  
  121. procedure writetest;
  122. var
  123.    p: integer;
  124.    d: integer;
  125.    d2:integer;
  126.    s: anystring;
  127.  
  128. begin
  129.    write('write what port(hex): ');
  130.    readln(s);
  131.    p := htoi(s);
  132.  
  133.    write('write what data(hex): ');
  134.    readln(s);
  135.    d := htoi(s);
  136.  
  137.    writeln('writing data $',itoh(lo(d)),
  138.            ' to port $',itoh(hi(p)), itoh(lo(p)));
  139.  
  140.    while not keypressed do
  141.       port[p] := d;
  142. end;
  143.  
  144.  
  145.  
  146. procedure writetoggle;
  147. var
  148.    p: integer;
  149.    d: integer;
  150.    d1: integer;
  151.    s: anystring;
  152.    v: integer;
  153.  
  154. begin
  155.    write('write toggle to what port(hex): ');
  156.    readln(s);
  157.    p := htoi(s);
  158.  
  159.    write('toggle from bits(hex): ');
  160.    read(s);
  161.    d := htoi(s);
  162.  
  163.    write('   to bits(hex): ');
  164.    readln(s);
  165.    d1 := htoi(s);
  166.  
  167.    writeln('toggle data between $',itoh(d),' and $',itoh(d1),
  168.            ' to port $',itoh(hi(p)), itoh(lo(p)));
  169.  
  170.    while not keypressed do
  171.    for v := 1 to 5 do
  172.    begin
  173.       port[p] := d;
  174.       port[p] := d1;
  175.    end;
  176. end;
  177.  
  178.  
  179. procedure setmux;
  180. var
  181.    m: integer;
  182. begin
  183.    write('what mux channel 0..7: ');
  184.    readln(m);
  185.    port[$342] := m;
  186. end;
  187.  
  188.  
  189. procedure pause;
  190. begin
  191.    writeln;
  192.    write('press <enter> to continue');
  193.    readln;
  194.    writeln;
  195. end;
  196.  
  197. procedure map_ports;
  198. begin
  199.    writeln('DASH8_base_address = $340;');
  200.    writeln('DASH8_data_lo      = $340;   {low data register}');
  201.    writeln('DASH8_data_hi      = $341;   {high data register}');
  202.    writeln('DASH8_start_cmd    = $341;   {start-conversion by writing to this port}');
  203.    writeln('DASH8_op_port      = $342;   {parallel output}');
  204.    writeln('  ANALOG_mux_bits = $07;         {multiplex select bits}');
  205.    writeln('  old_ANALOG_power_supply_enable_bit = $80;');
  206.    writeln('DASH8_ip_port      = $342;   {parallel input}');
  207.    writeln('  hardware_version_mask = $7;');
  208.    writeln('  ANALOG_end_conversion = $80;   {low when conversion is finished}');
  209.    pause;      
  210. end;
  211.  
  212. var
  213.    cmd: anystring;
  214.  
  215. begin
  216.  textbackground(0);
  217.  clrscr;
  218.  
  219.  repeat
  220.    writeln;
  221.    writeln('hardware diagnostic 14-jan-87 (30-apr-87)');
  222.    determine_hardware;
  223.  
  224.    writeln;
  225.    write('read, write, toggle, analog, mux, ?=map (r/w/t/a/m/?/q)? ');
  226.    read(kbd,cmd[1]);
  227.    writeln(cmd[1]);
  228.  
  229.    case upcase(cmd[1]) of
  230.       'R':  readport;
  231.       'W':  writetest;
  232.       'T':  writetoggle;
  233.       'A':  readanalog;
  234.       'M':  setmux;
  235.       'Q':  halt;
  236.       '?':  map_ports;
  237.    end;
  238.  
  239.    if keypressed then
  240.       read(kbd,cmd[1]);
  241.  
  242.  until true=false;
  243. end.
  244.  
  245.