/**************************************************************************** * * The Universal VESA TSR * * Copyright (C) 1993 Kendall Bennett. * All rights reserved. * * Filename: $RCSfile: uvesa.c $ * Version: $Revision: 1.1 $ * * Language: C++ 3.0 * Environment: any * * Description: Main startup module for the Universal VESA TSR. Performs * all of the command line processing, card detection and * CPU detection. * * MUST be compiled in the large memory model. * * $Id: uvesa.c 1.1 1993/03/07 04:08:09 kjb Exp $ * * Revision History: * ----------------- * * $Log: uvesa.c $ * Revision 1.1 1993/03/07 04:08:09 kjb * Initial revision * ****************************************************************************/ #include #include #include #include "drivers.h" #include "getopt.h" /*---------------------------- Global Variables ---------------------------*/ int driver,chipID,memory,dac; int _grResult; int _VESAFirst = false; int _ignoreSVGA = false; extern char *version; /* Routine to parse command line arguments */ void parseArguments(int argc,char *argv[]); /* Routines to manage the TSR side of things */ bool isLoaded(void); void goTSR(int driver,int chipID,int memory,int dac); /*----------------------------- Implementation ----------------------------*/ typedef struct { ushort attributes; uchar winAAttr; uchar winBAttr; ushort winGran; ushort winSize; ushort startSegA; ushort startSegB; ulong bankSwitch; ushort bytesPerLine; /* Optional VESA Info */ ushort width; ushort height; uchar cwidth; uchar cheight; uchar planes; uchar bitsPerPixel; uchar banks; uchar memMode; uchar bankSize; uchar numPages; } VesaBuf; void testISR(void) /**************************************************************************** * * Function: testISR * * Description: This routine will be called if testing is turned on * during the compilation of the TSR. You can put whatever * code you like into this routine, to test the VESA * interface on your system. * ****************************************************************************/ { #ifdef TESTING int i,*modes; struct REGPACK regs; VesaBuf buf; printf("\n\nInsert your own testing routines in here!\n\n"); printf("List of available VESA modes:\n"); regs.r_ax = 0x4F00; regs.r_di = (int)&buf; regs.r_es = (long)&buf >> 16; intr(0x10,®s); modes = *((int**)(&(((char*)&buf)[14]))); while (*modes != -1) printf("%X ",*modes++); printf("\n\n"); for (i = 0x100; i <= 0x11B; i++) { regs.r_ax = 0x4F01; regs.r_cx = i; regs.r_di = (int)&buf; regs.r_es = (long)&buf >> 16; intr(0x10,®s); if (regs.r_ax == 0x004F) { if (buf.attributes & 2) { printf("Mode: %X, %dx%d, %d bytesPerLine, %d plane, %d bit, %d banks, %d page\n", i,buf.width,buf.height,buf.bytesPerLine,buf.planes, buf.bitsPerPixel,buf.banks,buf.numPages); } else printf("No optional information\n"); } } #endif } void main(int argc,char *argv[]) { parseArguments(argc,argv); printf("UNIVESA - Universal SuperVGA VESA BIOS Extension Version 1.2\n"); printf(" Release %s\n\n",version); printf("Copyright (C) 1993 Kendall Bennett\n\n"); if (isLoaded()) { printf("Universal VESA TSR is already loaded - installation aborted.\n"); exit(1); } if (driver <= grSVGA) { printf("SuperVGA not detected - installation aborted.\n"); exit(1); } printf("Installing for: %s",MGL_driverName(driver)); if (MGL_chipsetName(driver,chipID) != NULL) printf(" (%s)", MGL_chipsetName(driver,chipID)); printf("\nDAC: %s\n", MGL_dacName(dac)); if (memory < 1024) printf("Memory: %d Kb\n",memory); else printf("Memory: %d Mb\n",memory / 1024); goTSR(driver,chipID,memory,dac); }