#include #include #include #include #include /* Uses the CXL windows functions */ #define NO_DISPLAY 0 #define MDA 1 #define CGA 2 #define COLOR_EGA 4 #define MONO_EGA 5 #define PGC 6 #define MONO_VGA 7 #define COLOR_VGA 8 char *VideoDCCs[] = { "No Display Adapter", "MDA", "CGA", "MDA + CGA", "EGA", "EGA + MDA", "Mono EGA", "Mono EGA + CGA", "PGC", "PGC + MDA", "PGC + Mono EGA", "Color VGA", "Color VGA + MDA", "Mono VGA", "Mono VGA + CGA", "Mono VGA + PGC", NULL }; char *VideoCards[] = { "None", "MDA", "CGA", "reserved", "Color EGA", "Mono EGA", "PGC", "Mono VGA", "Color VGA", NULL }; void main(void) { unsigned char VideoDCC; unsigned char Buffer[80]; int PrimaryVideo; int SecondaryVideo; int Status; union REGS regs; clrscr(); wopen(1, 10, 11, 70, 1, YELLOW, LCYAN|_BLUE); wcenters(0, LCYAN|_BLUE, "BIOSFIX"); wcenters(1, LCYAN|_BLUE, "Copyright (c) 1990 Gregory A. Law"); wcenters(3, LCYAN|_BLUE, "Select the video card you have installed"); wcenters(4, LCYAN|_BLUE, "in your system by using the arrow keys"); wcenters(5, LCYAN|_BLUE, "and press the ENTER key."); VideoDCC = peekb(0x0040, 0x008A); if(VideoDCC > 15) VideoDCC = 0; sprintf(Buffer, "Current Video Adapter = %s", VideoDCCs[VideoDCC]); wcenters(7, LCYAN|_BLUE, Buffer); regs.x.ax = 0x1A00; int86(0x10, ®s, ®s); PrimaryVideo = regs.h.bl; SecondaryVideo = regs.h.bh; if(PrimaryVideo > 8) PrimaryVideo = 0; if(SecondaryVideo > 8) SecondaryVideo = 0; sprintf(Buffer, "Primary Video = %s Secondary Video = %s", VideoCards[PrimaryVideo], VideoCards[SecondaryVideo]); wcenters(8, LCYAN|_BLUE, Buffer); VideoDCC = wpickstr(13, 15, 23, 65, 1, YELLOW, LCYAN|_BLUE, BLUE|_LGREY, VideoDCCs, NULL, NULL); wcloseall(); clrscr(); if(VideoDCC == '\xFF') exit(0); PrimaryVideo = 0; SecondaryVideo = 0; switch(VideoDCC) { case 0: break; case 1: PrimaryVideo = MDA; break; case 2: PrimaryVideo = CGA; break; case 3: PrimaryVideo = MDA; SecondaryVideo = CGA; break; case 4: PrimaryVideo = COLOR_EGA; break; case 5: PrimaryVideo = COLOR_EGA; SecondaryVideo = MDA; break; case 6: PrimaryVideo = MONO_EGA; break; case 7: PrimaryVideo = MONO_EGA; SecondaryVideo = CGA; break; case 8: PrimaryVideo = PGC; break; case 9: PrimaryVideo = PGC; SecondaryVideo = MDA; break; case 10: PrimaryVideo = PGC; SecondaryVideo = MONO_EGA; break; case 11: PrimaryVideo = COLOR_VGA; break; case 12: PrimaryVideo = COLOR_VGA; SecondaryVideo = MDA; break; case 13: PrimaryVideo = MONO_VGA; break; case 14: PrimaryVideo = MONO_VGA; SecondaryVideo = CGA; break; case 15: PrimaryVideo = MONO_VGA; SecondaryVideo = PGC; break; } regs.h.ah = 0x1A; regs.h.al = 0x01; regs.h.bh = SecondaryVideo; regs.h.bl = PrimaryVideo; Status = int86(0x10, ®s, ®s); pokeb(0x0040, 0x008A, VideoDCC); exit(0); }