home *** CD-ROM | disk | FTP | other *** search
/ Sound Sensations! / sound_sensations.iso / covox / port / port.c < prev   
Text File  |  1990-06-01  |  1KB  |  88 lines

  1.  
  2.  
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. typedef unsigned int Boolean;
  7. enum { False, True };
  8.  
  9. unsigned int ports[4] = { 0x220, 0x240, 0x280, 0x2c0 };
  10.  
  11. Boolean PortSearch(void);
  12. void WriteRegister(unsigned int, unsigned char, unsigned char);
  13. unsigned char ReadRegister(unsigned int, unsigned char);
  14.  
  15.  
  16. main()
  17. {
  18.     PortSearch();
  19. }
  20.  
  21.  
  22. Boolean PortSearch(void)
  23. {
  24.     int i, j;
  25.  
  26.     for(i = 3; i >= 0; i--)
  27.     {
  28.         printf("Checking port %x\n", ports[i]);
  29.  
  30.         // use the 16 bit tone period registers to write a specific pattern of data
  31.         for(j = 0; j <= 5; j++)
  32.         {
  33.             WriteRegister(ports[i], j, j);
  34.         }
  35.  
  36.         for(j = 0; j <= 5; j++)
  37.         {
  38.             if(ReadRegister(ports[i], j) != j)
  39.             {
  40.                 break;
  41.             }
  42.         }
  43.  
  44.         if(j == 6)
  45.         {
  46.             printf("Port found %x\n", ports[i]);
  47.             break; 
  48.         }
  49.         else
  50.         {
  51.             printf("Port %x  detection failed\n", ports[i]);
  52.         }
  53.     }
  54. }
  55.  
  56.  
  57. void WriteRegister(port, reg, data)
  58. unsigned int port;
  59. unsigned char reg;
  60. unsigned char data;
  61. {
  62.     int i;
  63.  
  64.     // select register
  65.     outp(port, reg);
  66.  
  67.     // write and verify register
  68.     for(i = 0; i < 10; i++)
  69.     {
  70.         outp(port + 1, data);
  71.  
  72.         if(inp(port + 1) == data)
  73.         {
  74.             break;
  75.         }
  76.     }
  77. }
  78.  
  79. unsigned char ReadRegister(port, reg)
  80. unsigned int port;
  81. unsigned char reg;
  82. {
  83.     outp(port, reg);
  84.     return(inp(port + 1));
  85. }
  86.  
  87.  
  88.