home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / MSMOUSE2.ZIP / UTILS.ZIP / EGATEST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-10  |  7.1 KB  |  276 lines

  1. /*-------------------------------------------------------------------------
  2.  *    EGA shadow register interface test program
  3.  *
  4.  * Copyright (c) 1988-1989, Microsoft Corporation.  All rights reserved.
  5.  *
  6.  *        library :    EGA.LIB (6.25)
  7.  *        compiler :      Microsoft C (5.10)
  8.  *        run :        Make egatestx.mak
  9.  *                where x = s, c, m, or l for model
  10.  *        by : Tom Hensel        12/14/88
  11.  *
  12.  *        Disclaimer:    This code is example code only,
  13.  *                and does not warranty any product
  14.  *                as being Microsoft compatible.
  15.  *                Microsoft will not be held responsible
  16.  *                for claims made pertaining to this software.
  17.  *
  18.  -------------------------------------------------------------------------*/
  19.  
  20. #include "egatest.h"
  21.  
  22.     int saveTestRegister, testValue, originalMapMaskRegister;
  23.  
  24. void
  25. main()
  26. {
  27.  
  28. /* Print copyright notice */
  29.  
  30.     puts("\nEGA Shadow Register Interface test program version 1.00");
  31.     puts("Copyright (c) 1988-1989, Microsoft Corporation.  All rights reserved.\n");
  32.  
  33.     CheckEGAInterface();    /* Check if interface installed */
  34.  
  35. /* Prompt user to get past blank screen */
  36.  
  37.     puts("Screen will now go blank.  Hit any key to continue now");
  38.     puts("and any key to continue when screen is blank.");
  39.     getch();    /* Wait for user to continue */
  40.  
  41.     TestF0F1(); /* Test functions F0 and F1:  Read/Write One Register */
  42.     TestF2F3(); /* Test functions F2 and F3:  Read/Write Register Range */
  43.     TestF4F5(); /* Test functions F4 and F5:  Read/Write Register Set */
  44.     TestF6F7(); /* Test functions F6 and F7:  Define/Revert Default */
  45.  
  46. /* Print success message */
  47.  
  48.     puts("\nAll tests passed successfully");
  49.  
  50. }
  51.  
  52. /* Check if interface installed */
  53.  
  54. void
  55. CheckEGAInterface()
  56.  
  57. {
  58.  
  59.     int fDriverExist, majorVersion, minorVersion;
  60.     int releaseVersionSegment, releaseVersionOffset;
  61.  
  62.     InterrogateDriver(&fDriverExist,
  63.                       &majorVersion,
  64.                       &minorVersion,
  65.                       &releaseVersionSegment,
  66.                       &releaseVersionOffset
  67.                      );
  68.  
  69.     if (! fDriverExist)
  70.         {
  71.         puts("EGA shadow register interface not loaded.");
  72.         exit(0);
  73.         }
  74.  
  75. /* Print version number */
  76.  
  77.     printf("EGA shadow register version is %d.", majorVersion);
  78.  
  79.     if (! (minorVersion / 10))
  80.         printf("0");
  81.  
  82.     printf("%d\n\n", minorVersion);
  83.  
  84. }
  85.  
  86. /* Test functions F0 and F1:  Read/Write One Register */
  87.  
  88. void
  89. TestF0F1()
  90.  
  91. {
  92.  
  93.     int registerPointer, saveAttrCtrlRegValue;
  94.  
  95.     registerPointer = 4;    /* Memory Mode Register */
  96.     ReadOneRegister(®isterPointer, 8);
  97.     saveTestRegister = registerPointer;
  98.     testValue = saveTestRegister & 2 ?
  99.                   saveTestRegister & 0xfd :
  100.                   saveTestRegister | 2;
  101.  
  102.     registerPointer = 4;    /* Memory Mode Register */
  103.     WriteOneRegister(registerPointer, testValue, 8);
  104.     ReadOneRegister(®isterPointer, 8);
  105.  
  106.     if (registerPointer != testValue)
  107.         {
  108.         puts("Read/Write One Register test failed, reboot computer!");
  109.         exit(0);
  110.         }
  111.  
  112. /* Restore register destroyed */
  113.  
  114.     registerPointer = 4;    /* Memory Mode Register */
  115.     WriteOneRegister(registerPointer, saveTestRegister, 8);
  116.  
  117. /* Test functions F0 and F1 for Attr Ctrl Reg:  Read/Write One Register */
  118.  
  119.     registerPointer = 0x12;    /* Color Plane Enable Register */
  120.     ReadOneRegister(®isterPointer, 0x18);
  121.     saveAttrCtrlRegValue = registerPointer;
  122.     registerPointer = 0x12;    /* Color Plane Enable Register */
  123.     WriteOneRegister(registerPointer, saveAttrCtrlRegValue, 0x18);
  124.     ReadOneRegister(®isterPointer, 0x18);
  125.  
  126.     if (registerPointer != saveAttrCtrlRegValue)
  127.         {
  128.         EnableVideo();    /* Kludge to enable the video screen again */
  129.         puts("Read/Write One Register test failed, reboot computer!");
  130.         exit(0);
  131.         }
  132.  
  133. }
  134.  
  135. /* Test functions F2 and F3:  Read/Write Register Range */
  136.  
  137. void
  138. TestF2F3()
  139.  
  140. {
  141.  
  142.     int registerPointer;
  143.     char testTable[2];
  144.  
  145.     registerPointer = 3;    /* Map Mask Register */
  146.     ReadOneRegister(®isterPointer, 8);
  147.  
  148.     /* Save original Map Mask Register */
  149.  
  150.     testTable[0] = (char) (originalMapMaskRegister = registerPointer);
  151.     testTable[1] = (char) testValue;
  152.     WriteRegisterRange(testTable, 3, 2, 8);
  153.     testTable[1] = (char) ~testValue;    /* Force a value change */
  154.     ReadRegisterRange(testTable, 3, 2, 8);
  155.  
  156.     if (testTable[1] != (char) testValue)
  157.         {
  158.         puts("Read/Write Register Range test failed, reboot computer!");
  159.         exit(0);
  160.         }
  161.  
  162. /* Restore register destroyed */
  163.  
  164.     registerPointer = 4;    /* Memory Mode Register */
  165.     WriteOneRegister(registerPointer, saveTestRegister, 8);
  166.  
  167. /* Test functions F2 and F3 for Attr Ctrl Reg:  Read/Write Register Range */
  168.  
  169.     ReadRegisterRange(testTable, 0x12, 2, 0x18);
  170.     testValue = testTable[1];
  171.     WriteRegisterRange(testTable, 0x12, 2, 0x18);
  172.     testTable[1] = (char) ~testValue;    /* Force a value change */
  173.     ReadRegisterRange(testTable, 0x12, 2, 0x18);
  174.  
  175.     if (testTable[1] != (char) testValue)
  176.         {
  177.         EnableVideo();    /* Kludge to enable the video screen again */
  178.         puts("Read/Write Register Range test failed, reboot computer!");
  179.         exit(0);
  180.         }
  181.  
  182. }
  183.  
  184. /* Test functions F4 and F5:  Read/Write Register Set */
  185.  
  186. void
  187. TestF4F5()
  188.  
  189. {
  190.  
  191.     int registerPointer;
  192. static    char testTableSet[8] = { 8, 0, 3, 0, 8, 0, 4, 0 };
  193.  
  194.     /* Get original Map Mask Register */
  195.  
  196.     testTableSet[3] = (char) originalMapMaskRegister;
  197.     testTableSet[7] = (char) testValue;
  198.     WriteRegisterSet(testTableSet, 2);
  199.     testTableSet[7] = (char) ~testValue;    /* Force a value change */
  200.     ReadRegisterSet(testTableSet, 2);
  201.  
  202.     if (testTableSet[7] != (char) testValue)
  203.         {
  204.         puts("Read/Write Register Set test failed, reboot computer!");
  205.         exit(0);
  206.         }
  207.  
  208. /* Restore register destroyed */
  209.  
  210.     registerPointer = 4;    /* Memory Mode Register */
  211.     WriteOneRegister(registerPointer, saveTestRegister, 8);
  212.  
  213. /* Test functions F4 and F5 for Attr Ctrl Reg:  Read/Write Register Set */
  214.  
  215.     testTableSet[0] = testTableSet[4] = 0x18;
  216.     testTableSet[2] = 0x12;
  217.     testTableSet[6] = 0x13;
  218.     ReadRegisterSet(testTableSet, 2);
  219.     testValue = testTableSet[7];
  220.     WriteRegisterSet(testTableSet, 2);
  221.     testTableSet[7] = (char) ~testValue;    /* Force a value change */
  222.     ReadRegisterSet(testTableSet, 2);
  223.  
  224.     if (testTableSet[7] != (char) testValue)
  225.         {
  226.         EnableVideo();    /* Kludge to enable the video screen again */
  227.         puts("Read/Write Register Set test failed, reboot computer!");
  228.         exit(0);
  229.         }
  230.  
  231. }
  232.  
  233. /* Test functions F6 and F7:  Define/Revert Default */
  234.  
  235. void
  236. TestF6F7()
  237.  
  238. {
  239.  
  240.     char testTable[0x14];
  241.  
  242.     ReadRegisterRange(testTable, 0, 0x14, 0x18); /* Get all regs */
  243.  
  244. /* Restore registers for Attribute Controller Register */
  245.  
  246.     DefineDefaultRegisterTable(testTable, 0, 0x18);
  247.     getch();    /* Wait for user to continue */
  248.  
  249. /* And restore to hardware (re-enables video screen as a side effect) */
  250.  
  251.     RevertToDefaultRegisters();
  252.  
  253. }
  254.  
  255. /* Kludge to enable screen video.  Not recommended for production code */
  256.  
  257. void
  258. EnableVideo()
  259.  
  260. {
  261.  
  262.     int registerPointer;
  263.  
  264.     /* The following code gets the internal flags of the EGA interface
  265.        code into a state where RevertToDefaultRegisters will work
  266.        as the side effect of video enable */
  267.  
  268.     ReadOneRegister(®isterPointer, 0x20); /* Miscellaneous Output Reg */
  269.     WriteOneRegister(registerPointer, registerPointer, 0x20);
  270.  
  271.     /* Call for side effect of video enable */
  272.  
  273.     RevertToDefaultRegisters();
  274.  
  275. }
  276.