home *** CD-ROM | disk | FTP | other *** search
/ Best Objectech Shareware Selections / UNTITLED.iso / boss / grap / util / 006 / ramdac.txt < prev    next >
Text File  |  1993-01-22  |  5KB  |  220 lines

  1. RAMDACs
  2.  
  3. Brooktree:
  4. Bt476        6-bit DAC.
  5. Bt478        8-bit DAC.
  6.  
  7. Sierra  "Mark1":  
  8. SC11481      15-bit.    6-bit DAC.   Overlay. Only "Tseng" double edge mode.  
  9. SC11486      15-bit.    6-bit DAC.            Only "Tseng" double egde mode.
  10. SC11488      15 bit.    6/8 bit DAC. Overlay. Only "Tseng" double edge mode.
  11.  
  12. Sierra  "Mark2":
  13. SC11482      15-bit.    6-bit DAC.   Overlay.
  14. SC11483      15-bit.    6-bit DAC.
  15. SC11484      15-bit.    6/8 bit DAC. Overlay.
  16.  
  17. Sierra  "Mark3":
  18. SC11485      15/16 bit. 6-bit DAC.   Overlay.
  19. SC11487      15/16 bit. 6-bit DAC. 
  20. SC11489      15/16 bit. 6/8 bit DAC. Overlay.
  21.  
  22. SC15025      15/16/24 bit.
  23. SC15026      15/16/24 bit.
  24.  
  25. AcuMos:
  26. ADAC1        15/16/24 bit.
  27.  
  28. AT&T:
  29. ATT20C492    15/16/24 bit 
  30. ATT20C491    15/16/24 bit. 
  31.  
  32.  
  33. MUSIC:
  34. MU9C4870     15-bit 
  35.  
  36.  
  37. Diamond:
  38. SS2410       15/24 bit.     Might be the same as the MUSIC. A test program for
  39.                 Diamond Stealth ID's it as 'MUSIC', but then they
  40.                 probably got the test from Tseng in the first place.
  41.  
  42. Avance Logic:
  43. ALG1101      16-bit.        Appears to be different from the other HiColor DACs.
  44.  
  45. ATI:
  46. ATI68830     15/16/24bit    Up to 80 MHz    !
  47. ATI68875     15/16/24bit    Up to 135 MHz   ! Used in ATI Graphics Ultra + and Pro
  48.  
  49.  
  50.  
  51. 15-bit modes have 5 bits of each basic color:
  52. bit  0- 4 blue.
  53.      5- 9 green.
  54.     10-14 red.
  55. The pixel is stored in two bytes in Intel style (little endian).
  56.  
  57. 16-bit modes have 5 bits of red and blue, and 6 bits of green:
  58. bits 0- 4  blue.
  59.      5-10  green.
  60.     11-15  red.
  61. The pixel is stored in two bytes in Intel style (little endian).
  62.  
  63. 24-bit modes have 8 bits of each basic color:
  64. bits 0- 7  blue.
  65.      8-15  green
  66.     16=23  red.
  67. The pixel is stored in three bytes in Intel style (little endian).
  68.  
  69.  
  70.  
  71.  
  72. HiColor DACs have a command register at 3C6h:
  73.  
  74. bit 7  Set in HiColor modes.
  75.     
  76.     6  Set in 16-bit modes. Clear in 15-bit modes.
  77.        Appear to exist but have no effect in SC11483s.
  78.        (ATT) Set in 16 and 24 bit modes, clear in 15 bit modes.
  79.  
  80.     5  (Sierra "Mark 2/3")
  81.        If set two pixel clocks are used to latch the two bytes
  82.        needed for each pixel. Low byte is latched first.
  83.        If clear the low byte is latched on the rising edge of the
  84.        pixel clock and the high byte is latched on the falling edge.
  85.        Only some VGA chips (Tseng 4000) can handle this.
  86.        In SC11486 this bit has no effect.
  87.     
  88.  
  89.     5  (ATT) Set in 15 and 24 bit modes. clear in 16bit modes.
  90.   
  91.  
  92.  
  93.  
  94.  
  95.  
  96. Forcing HiColor DACs into command mode:
  97.  
  98. procedure dactocomm;   {switches DAC to command register}
  99. var x:word;
  100. begin
  101.   x:=inp($3C8);    {clear old state}
  102.   x:=inp($3C6);
  103.   x:=inp($3C6);
  104.   x:=inp($3C6);    {Read $3C6 4 times.}
  105.   x:=inp($3C6);
  106. end;
  107.  
  108. Now reads and writes to $3C6 will access the command register.
  109. Any access to $3C7-$3C9 will switch back to the PEL mask register.
  110.  
  111.  
  112. Forcing HiColor DACs into normal bode:
  113.  
  114. procedure dactopel;  {switches DAC back to normal mode}
  115. var x:word;
  116. begin
  117.   x:=inp($3C8);
  118. end;
  119.  
  120.  
  121.  
  122. function testdac:string;
  123. var
  124.   x,y,z,v,oldcommreg,oldpelreg:word;
  125.  
  126. begin
  127.   IF chip=__al2101 then    (* Special case -- weird DAC *)
  128.   begin
  129.     dactype:=_dac16;
  130.     testdac:='AVL DAC 16';
  131.     exit;
  132.   end;
  133.   testdac:='Normal';
  134.   dactype:=_dac8;
  135.   dactopel;
  136.   x:=inp($3c6);
  137.   repeat
  138.     y:=x;
  139.     x:=inp($3c6);
  140.   until (x=y);
  141.   z:=x;
  142.   x:=inp($3c8);
  143.   x:=inp($3c6);
  144.   x:=inp($3c6);     {Same as DacToComm, but keep last value read}
  145.   x:=inp($3c6);    
  146.   x:=inp($3c6); 
  147.   y:=8;
  148.   while (x<>$8E) and (y>0) do
  149.   begin
  150.     x:=inp($3c6);
  151.     dec(y);
  152.   end;
  153.   if x=$8e then                 {Special tests for SS2410 DAC}
  154.   begin
  155.     dactype:=_dacss24;
  156.     testdac:='SS24';
  157.     dactopel;              {bavk to PE mode}
  158.   end
  159.   else begin
  160.     dactocomm;
  161.     oldcommreg:=inp($3c6);
  162.     dactopel;
  163.     oldpelreg:=inp($3c6);
  164.     x:=oldcommreg xor 255;
  165.     outp($3c6,x);
  166.     dactocomm;
  167.     v:=inp($3c6);
  168.     if v<>x then
  169.     begin
  170.       dactocomm;
  171.       x:=oldcommreg xor $60;
  172.       outp($3c6,x);
  173.       dactocomm;
  174.       v:=inp($3c6);
  175.       testdac:='Sierra SC11486';
  176.       dactype:=_dac15;
  177.  
  178.       if (x and $e0)=(v and $e0) then
  179.       begin
  180.     x:=inp($3c6);
  181.     dactopel;
  182.     testdac:='Sierra 32k/64k';
  183.     dactype:=_dac15;             (* Can't tell the difference *)
  184.  
  185.     if x=inp($3c6) then
  186.     begin
  187.       testdac:='ATT 20c492';       {or ATT20c491}
  188.       dactype:=_dacatt492;
  189.       dactocomm;
  190.       outp($3c6,255);
  191.       dactocomm;
  192.       if inp($3c6)<>255 then
  193.       begin
  194.         testdac:='AcuMos ADAC1';   {I this correct??}
  195.         dactype:=_weirdDAC;
  196.       end;
  197.     end;
  198.       end;
  199.  
  200.       dactocomm;
  201.       outp($3c6,oldcommreg);      {restore command register}
  202.     end;
  203.     dactopel;
  204.     outp($3c6,oldpelreg);         {restore PEL register}
  205.   end;
  206. end;
  207.  
  208. This rutine identifies:
  209.   
  210.  
  211. Sierra "Mark1"   as Sierra 32K
  212.  
  213. Sierra "Mark2"   is misidentified as Sierra 64k (Mark3).
  214.  
  215. Sierra "Mark3"   as Sierra 64k.
  216.  
  217. ATT20C491/492    as ATT
  218.  
  219. SS2410           as SS24        
  220.