home *** CD-ROM | disk | FTP | other *** search
/ ANews 2 / AnewsCD2.iso / Materiels / AteoConcepts / DOC_DEV / Exemple / Example.c next >
C/C++ Source or Header  |  1999-10-13  |  4KB  |  134 lines

  1. /*
  2. **
  3. ** Atéo Concepts SARL
  4. **
  5. ** Street Adr           Internet Adr
  6. ** ---------------------------------
  7. ** Le Plessis           web: http://www.ateo-concepts.com
  8. ** 44220 COUERON        email: info@ateo-concepts.com
  9. ** FRANCE
  10. **
  11. ** Phone: +33 2.40.85.30.85
  12. ** Fax :  +33 2.40.38.33.21
  13. **
  14. ** -------------------------------------------------------------------------------
  15. ** Example.c
  16. **
  17. ** This is an example of how to acces std Isa hardware on the AteoBus
  18. **
  19. ** Let say we have an hardware card (ISA IO Space)that have two 8 bits registers at
  20. ** 0x102 and 0x104 with 8bits acces only (Register 1 and Register 2) and two others
  21. ** registers at 0x110 and 0x111 with 8 or 16 bits acces (2 x 8bit acces or
  22. ** 1 x 16bit acces)
  23. **
  24. ** Like this:
  25. **
  26. ** ISA IO Base 0x000 +------------+
  27. **                   |            |
  28. **                   +------------+
  29. **             0x102 | Register 1 | 8bits only
  30. **                   |   Empty    |
  31. **             0x104 | Register 2 | 8bits only
  32. **                   .            .
  33. **                   .            .
  34. **
  35. **             0x110 | Register A | 8bits or 16bits
  36. **             0x111 | Register B |
  37. **                   |            |
  38. **                   .            .
  39. **                   .            .
  40. **
  41. ** If you have question or comment regarding this example, please mail to
  42. ** arlequin@ateo-concepts.com
  43. **
  44. **
  45. **
  46. ** Of course, if you have no hardware like this one connected on your AtéoBus,
  47. ** this software will just do nothing....
  48. **
  49. */
  50.  
  51. /* AmigaOS includes */
  52. #include "proto/exec.h"
  53. #include "proto/dos.h"
  54.  
  55. /* AtéoBus includes */
  56. #include "hardware/ateobus.h"
  57. #include "pragmas/ateobus_pragmas.h"
  58. #include "clib/ateobus_protos.h"
  59.  
  60. /* general includes */
  61. #include <stdio.h>
  62.  
  63. /* define for the hardware card (see top of the file for more info about the hardware) */
  64. #define  REGISTER_1   0x102
  65. #define  REGISTER_2   0x104
  66. #define  REGISTER_A   0x110
  67. #define  REGISTER_B   0x111
  68.  
  69. long int main( void )
  70. {
  71. unsigned long int    IsaIOBase;
  72. unsigned char        *Register1;
  73. unsigned char        *Register2;
  74. unsigned short int   *RegisterA;
  75. unsigned char        *RegisterB;
  76.  
  77. AteoBase = OpenLibrary("ateobus.library",2); /* Open the ateobus.library V2+ */
  78.  
  79. if (AteoBase)
  80.    {
  81.    /* OpenLib Ok */
  82.    printf("Library Opened Sucessfully.\n");
  83.  
  84.    /* Get the base of the ISA IO Space */
  85.    IsaIOBase = (unsigned long)AC_GetSpaceBase( ISA_SPACE | IO_SPACE);
  86.  
  87.       {
  88.       unsigned long int Adr;
  89.       /* Calculate the adr for all register */
  90.       Adr = IsaIOBase + REGISTER_1;
  91.       Register1 = (unsigned char *)Adr;
  92.  
  93.       Adr = IsaIOBase + REGISTER_2;
  94.       Register2 = (unsigned char *)Adr;
  95.  
  96.       Adr = IsaIOBase + REGISTER_A;
  97.       RegisterA = (unsigned short int *)Adr;
  98.  
  99.       Adr = IsaIOBase + REGISTER_B;
  100.       RegisterB = (unsigned char *)Adr;
  101.  
  102.       /* print the adr for all register */
  103.       printf(" @ Register1: %8X\n", Register1 );
  104.       printf(" @ Register2: %8X\n", Register2 );
  105.       printf(" @ RegisterA: %8X\n", RegisterA );
  106.       printf(" @ RegisterB: %8X\n", RegisterB );
  107.  
  108.       }
  109.  
  110.    /* Read Register1 */
  111.    printf(" Register1 = %x\n", *Register1 );
  112.  
  113.    /* Read RegisterB */
  114.    printf(" RegisterB = %x\n", *Register2 );
  115.  
  116.    /* Write 0x0672 to RegisterA (16bits mode) */
  117.    /* This will write 0x06 to location 0x110 and 0x72 to location 0x111 */
  118.    *RegisterA = 0x0672;
  119.  
  120.    /* Read the result */
  121.    printf(" RegisterA = %x\n RegisterB = %x\n", *(unsigned char *)RegisterA, *RegisterB );
  122.  
  123.    /* Close the library */
  124.    CloseLibrary(AteoBase);
  125.  
  126.    }
  127. else
  128.    {
  129.    /* trouble with OpenLibrary */
  130.    printf("I need ateobus.library V2.0+\n");
  131.    }
  132.  
  133. }
  134.