home *** CD-ROM | disk | FTP | other *** search
- /*-------------------------------------------------------------------------
- * EGA shadow register interface test program
- *
- * Copyright (c) 1988-1989, Microsoft Corporation. All rights reserved.
- *
- * library : EGA.LIB (6.25)
- * compiler : Microsoft C (5.10)
- * run : Make egatestx.mak
- * where x = s, c, m, or l for model
- * by : Tom Hensel 12/14/88
- *
- * Disclaimer: This code is example code only,
- * and does not warranty any product
- * as being Microsoft compatible.
- * Microsoft will not be held responsible
- * for claims made pertaining to this software.
- *
- -------------------------------------------------------------------------*/
-
- #include "egatest.h"
-
- int saveTestRegister, testValue, originalMapMaskRegister;
-
- void
- main()
- {
-
- /* Print copyright notice */
-
- puts("\nEGA Shadow Register Interface test program version 1.00");
- puts("Copyright (c) 1988-1989, Microsoft Corporation. All rights reserved.\n");
-
- CheckEGAInterface(); /* Check if interface installed */
-
- /* Prompt user to get past blank screen */
-
- puts("Screen will now go blank. Hit any key to continue now");
- puts("and any key to continue when screen is blank.");
- getch(); /* Wait for user to continue */
-
- TestF0F1(); /* Test functions F0 and F1: Read/Write One Register */
- TestF2F3(); /* Test functions F2 and F3: Read/Write Register Range */
- TestF4F5(); /* Test functions F4 and F5: Read/Write Register Set */
- TestF6F7(); /* Test functions F6 and F7: Define/Revert Default */
-
- /* Print success message */
-
- puts("\nAll tests passed successfully");
-
- }
-
- /* Check if interface installed */
-
- void
- CheckEGAInterface()
-
- {
-
- int fDriverExist, majorVersion, minorVersion;
- int releaseVersionSegment, releaseVersionOffset;
-
- InterrogateDriver(&fDriverExist,
- &majorVersion,
- &minorVersion,
- &releaseVersionSegment,
- &releaseVersionOffset
- );
-
- if (! fDriverExist)
- {
- puts("EGA shadow register interface not loaded.");
- exit(0);
- }
-
- /* Print version number */
-
- printf("EGA shadow register version is %d.", majorVersion);
-
- if (! (minorVersion / 10))
- printf("0");
-
- printf("%d\n\n", minorVersion);
-
- }
-
- /* Test functions F0 and F1: Read/Write One Register */
-
- void
- TestF0F1()
-
- {
-
- int registerPointer, saveAttrCtrlRegValue;
-
- registerPointer = 4; /* Memory Mode Register */
- ReadOneRegister(®isterPointer, 8);
- saveTestRegister = registerPointer;
- testValue = saveTestRegister & 2 ?
- saveTestRegister & 0xfd :
- saveTestRegister | 2;
-
- registerPointer = 4; /* Memory Mode Register */
- WriteOneRegister(registerPointer, testValue, 8);
- ReadOneRegister(®isterPointer, 8);
-
- if (registerPointer != testValue)
- {
- puts("Read/Write One Register test failed, reboot computer!");
- exit(0);
- }
-
- /* Restore register destroyed */
-
- registerPointer = 4; /* Memory Mode Register */
- WriteOneRegister(registerPointer, saveTestRegister, 8);
-
- /* Test functions F0 and F1 for Attr Ctrl Reg: Read/Write One Register */
-
- registerPointer = 0x12; /* Color Plane Enable Register */
- ReadOneRegister(®isterPointer, 0x18);
- saveAttrCtrlRegValue = registerPointer;
- registerPointer = 0x12; /* Color Plane Enable Register */
- WriteOneRegister(registerPointer, saveAttrCtrlRegValue, 0x18);
- ReadOneRegister(®isterPointer, 0x18);
-
- if (registerPointer != saveAttrCtrlRegValue)
- {
- EnableVideo(); /* Kludge to enable the video screen again */
- puts("Read/Write One Register test failed, reboot computer!");
- exit(0);
- }
-
- }
-
- /* Test functions F2 and F3: Read/Write Register Range */
-
- void
- TestF2F3()
-
- {
-
- int registerPointer;
- char testTable[2];
-
- registerPointer = 3; /* Map Mask Register */
- ReadOneRegister(®isterPointer, 8);
-
- /* Save original Map Mask Register */
-
- testTable[0] = (char) (originalMapMaskRegister = registerPointer);
- testTable[1] = (char) testValue;
- WriteRegisterRange(testTable, 3, 2, 8);
- testTable[1] = (char) ~testValue; /* Force a value change */
- ReadRegisterRange(testTable, 3, 2, 8);
-
- if (testTable[1] != (char) testValue)
- {
- puts("Read/Write Register Range test failed, reboot computer!");
- exit(0);
- }
-
- /* Restore register destroyed */
-
- registerPointer = 4; /* Memory Mode Register */
- WriteOneRegister(registerPointer, saveTestRegister, 8);
-
- /* Test functions F2 and F3 for Attr Ctrl Reg: Read/Write Register Range */
-
- ReadRegisterRange(testTable, 0x12, 2, 0x18);
- testValue = testTable[1];
- WriteRegisterRange(testTable, 0x12, 2, 0x18);
- testTable[1] = (char) ~testValue; /* Force a value change */
- ReadRegisterRange(testTable, 0x12, 2, 0x18);
-
- if (testTable[1] != (char) testValue)
- {
- EnableVideo(); /* Kludge to enable the video screen again */
- puts("Read/Write Register Range test failed, reboot computer!");
- exit(0);
- }
-
- }
-
- /* Test functions F4 and F5: Read/Write Register Set */
-
- void
- TestF4F5()
-
- {
-
- int registerPointer;
- static char testTableSet[8] = { 8, 0, 3, 0, 8, 0, 4, 0 };
-
- /* Get original Map Mask Register */
-
- testTableSet[3] = (char) originalMapMaskRegister;
- testTableSet[7] = (char) testValue;
- WriteRegisterSet(testTableSet, 2);
- testTableSet[7] = (char) ~testValue; /* Force a value change */
- ReadRegisterSet(testTableSet, 2);
-
- if (testTableSet[7] != (char) testValue)
- {
- puts("Read/Write Register Set test failed, reboot computer!");
- exit(0);
- }
-
- /* Restore register destroyed */
-
- registerPointer = 4; /* Memory Mode Register */
- WriteOneRegister(registerPointer, saveTestRegister, 8);
-
- /* Test functions F4 and F5 for Attr Ctrl Reg: Read/Write Register Set */
-
- testTableSet[0] = testTableSet[4] = 0x18;
- testTableSet[2] = 0x12;
- testTableSet[6] = 0x13;
- ReadRegisterSet(testTableSet, 2);
- testValue = testTableSet[7];
- WriteRegisterSet(testTableSet, 2);
- testTableSet[7] = (char) ~testValue; /* Force a value change */
- ReadRegisterSet(testTableSet, 2);
-
- if (testTableSet[7] != (char) testValue)
- {
- EnableVideo(); /* Kludge to enable the video screen again */
- puts("Read/Write Register Set test failed, reboot computer!");
- exit(0);
- }
-
- }
-
- /* Test functions F6 and F7: Define/Revert Default */
-
- void
- TestF6F7()
-
- {
-
- char testTable[0x14];
-
- ReadRegisterRange(testTable, 0, 0x14, 0x18); /* Get all regs */
-
- /* Restore registers for Attribute Controller Register */
-
- DefineDefaultRegisterTable(testTable, 0, 0x18);
- getch(); /* Wait for user to continue */
-
- /* And restore to hardware (re-enables video screen as a side effect) */
-
- RevertToDefaultRegisters();
-
- }
-
- /* Kludge to enable screen video. Not recommended for production code */
-
- void
- EnableVideo()
-
- {
-
- int registerPointer;
-
- /* The following code gets the internal flags of the EGA interface
- code into a state where RevertToDefaultRegisters will work
- as the side effect of video enable */
-
- ReadOneRegister(®isterPointer, 0x20); /* Miscellaneous Output Reg */
- WriteOneRegister(registerPointer, registerPointer, 0x20);
-
- /* Call for side effect of video enable */
-
- RevertToDefaultRegisters();
-
- }
-