/****************************************************************************
*
*						MegaGraph Graphics Library
*
*                   Copyright (C) 1993 Kendall Bennett.
*							All rights reserved.
*
* Filename:		$RCSfile: drivers.h $
* Version:		$Revision: 1.2 $
*
* Language:		ANSI C
* Environment:	IBM PC (MS DOS)
*
* Description:	Header file providing constant and definitions for the
*				video drivers supported by the library. This is factorised
*				out to make it easier to use the SuperVGA routines outside
*				of the MGL (such as in the SuperVGA kit).
*
* $Id: drivers.h 1.2 1993/03/07 04:03:42 kjb Exp $
*
* Revision History:
* -----------------
*
* $Log: drivers.h $
* Revision 1.2  1993/03/07  04:03:42  kjb
* Numerous bug fixes and enhancements.
*
* Revision 1.1  1993/03/03  10:47:11  kjb
* Initial revision
*
****************************************************************************/

#ifndef	__DRIVERS_H
#define	__DRIVERS_H

#ifndef	__DEBUG_H
#include "debug.h"
#endif

/*---------------------- Macros and type definitions ----------------------*/

/* Define the graphics subsystems available	*/

typedef enum {
	grDETECT,				/* Auto detect the graphics subsystem		*/
	grCGA,					/* Standard CGA - not supported				*/
	grMCGA,					/* Standard MCGA - only 256 color mode		*/
	grEGA,					/* Standard EGA								*/
	grEGA64,				/* EGA with 64kb of RAM - not supported		*/
	grEGAMONO,				/* EGA with mono monitor - not supported	*/
	grEGA64MONO,			/* EGA 64k mono monitor - not supported		*/
	grHERCMONO,				/* Standard Hercules - not supported		*/
	grVGA,					/* Standard VGA								*/
	grSVGA,					/* VESA Super VGA							*/
	grSVGA_ATI,				/* ATI Technologies SuperVGA				*/
	grSVGA_AHEADA,			/* AHEAD A SuperVGA							*/
	grSVGA_AHEADB,			/* AHEAD B SuperVGA							*/
	grSVGA_CHIPS,			/* Chips & Technologies SuperVGA			*/
	grSVGA_EVEREX,			/* Everex SuperVGA							*/
	grSVGA_GENOA,			/* Genoa Systems SuperVGA (GVGA chipset)	*/
	grSVGA_OAKTECH,			/* OAK Technologies SuperVGA				*/
	grSVGA_PARADISE,		/* Paradise SuperVGA						*/
	grSVGA_TRIDENT88,		/* Trident 8800 SuperVGA					*/
	grSVGA_TRIDENT89,		/* Trident 8900 SuperVGA					*/
	grSVGA_VIDEO7,			/* Video7 SuperVGA							*/
	grSVGA_ET3000,			/* Tseng Labs ET3000 SuperVGA				*/
	grSVGA_ET4000,			/* Tseng Labs ET4000 SuperVGA				*/
	grSVGA_NCR,				/* NCR 77C22E SuperVGA						*/
	grSVGA_S3,				/* S3 SuperVGA								*/
	grSVGA_ACUMOS,			/* Acumos SuperVGA							*/
	grSVGA_AL2101,			/* Advance Logic AL2101 SuperVGA			*/
	grSVGA_MXIC,			/* MXIC 68010 SuperVGA						*/
	grSVGA_P2000,			/* Primus 2000 SuperVGA						*/
	grSVGA_RT3106,			/* RealTek 3106 SuperVGA					*/
	grSVGA_CIRRUS54,		/* Cirrus 5422 SuperVGA						*/
	grUSER,					/* User drivers start here					*/
	} MGL_driver;

/* First and last SuperVGA driver numbers	*/

#define	__FIRST_SVGA	grSVGA
#define	__LAST_SVGA		grSVGA_CIRRUS54

/* Video DAC types */

typedef enum {
	grVGADAC,				/* Normal DAC								*/
	grHCDAC,				/* HiColor 15 bit DAC						*/
	grHC2DAC,				/* HiColor 15/16 bit DAC					*/
	grTCDAC,				/* TrueColor 24 bit DAC						*/
	grDETECTDAC		= -1,	/* Auto detect the DAC type					*/
	} MGL_dac;

/* Graphics modes supported	- the only video modes supported by this
 * graphics library are those that support at least 16 colors per pixel.
 */

typedef enum {
	/* 16 color EGA video modes */

	grEGA_320x200x16	= 0,	/* 320x200 16 color 8 page				*/
	grEGA_640x200x16	= 1,	/* 640x200 16 color 4 page				*/
	grEGA_640x350x16	= 2,	/* 640x350 16 color 2 page				*/

	/* 16 color VGA video modes */

	grVGA_640x400x16	= 3,	/* 640x400 16 color 2 page				*/
	grVGA_640x480x16	= 4,	/* 640x480 16 color 1 page				*/

	/* 256 color VGA video modes */

	grVGA_320x200x256	= 5,	/* 320x200 256 color 1 page				*/

	/* 256 color VGA ModeX video modes */

	grVGAX_320x200x256	= 6,	/* 320x200 256 color 4 page				*/
	grVGAX_320x240x256	= 7,	/* 320x240 256 color 3 page				*/
	grVGAX_320x400x256	= 8,	/* 320x400 256 color 2 page				*/
	grVGAX_320x480x256	= 9,	/* 320x480 256 color 1 page				*/
	grVGAX_360x200x256	= 10,	/* 360x200 256 color 3 page				*/
	grVGAX_360x240x256	= 11,	/* 360x240 256 color 3 page				*/
	grVGAX_360x400x256	= 12,	/* 360x400 256 color 1 page				*/
	grVGAX_360x480x256	= 13,	/* 360x480 256 color 1 page				*/

	/* 16 color Super VGA video modes */

	grSVGA_800x600x16	= 14,	/* 800x600 16 color 1 page				*/
	grSVGA_1024x768x16	= 15,	/* 1024x768 16 color 1 page				*/
	grSVGA_1280x1024x16	= 16,	/* 1280x1024 16 color 1 page			*/

	/* 256 color Super VGA video modes */

	grSVGA_640x350x256	= 17,	/* 640x250 256 color 1 page				*/
	grSVGA_640x400x256	= 18,	/* 640x400 256 color 1 page				*/
	grSVGA_640x480x256	= 19,	/* 640x480 256 color 1 page				*/
	grSVGA_800x600x256	= 20,	/* 800x600 256 color 1 page				*/
	grSVGA_1024x768x256	= 21,	/* 1024x768 256 color 1 page			*/
	grSVGA_1280x1024x256= 22,	/* 1280x1024 256 color 1 page			*/

	/* 32,768 color Super VGA video modes */

	grSVGA_320x200x32k	= 23,	/* 320x200 32,768 color 1 page			*/
	grSVGA_640x350x32k	= 24,	/* 640x350 32,768 color 1 page			*/
	grSVGA_640x400x32k	= 25,	/* 640x400 32,768 color 1 page			*/
	grSVGA_640x480x32k	= 26,	/* 640x480 32,768 color 1 page			*/
	grSVGA_800x600x32k	= 27,	/* 800x600 32,768 color 1 page			*/
	grSVGA_1024x768x32k	= 28,	/* 1024x768 32,768 color 1 page			*/
	grSVGA_1280x1024x32k= 29,	/* 1280x1024 32,768 color 1 page		*/

	/* 16 million color Super VGA video modes */

	grSVGA_320x200x16m	= 30,	/* 320x200 16 million color 1 page		*/
	grSVGA_640x350x16m	= 31,	/* 640x350 16 million color 1 page		*/
	grSVGA_640x400x16m	= 32,	/* 640x400 16 million color 1 page		*/
	grSVGA_640x480x16m	= 33,	/* 640x480 16 million color 1 page		*/
	grSVGA_800x600x16m	= 34,	/* 800x600 16 million color 1 page		*/
	grSVGA_1024x768x16m	= 35,	/* 1024x768 16 million color 1 page		*/
	grSVGA_1280x1024x16m= 36,	/* 1280x1024 16 million color 1 page	*/

	grMAXMODE			= 36,	/* Maximum mode number					*/
	} MGL_mode;

/*------------------------- Function Prototypes ---------------------------*/

#ifdef	__cplusplus
extern "C" {			/* Use "C" linkage when in C++ mode	*/
#endif

/* In detectgr.asm */

void 	MGL_detectGraph(int far *graphdriver,int far *chipID,
		int far *memory,int far *dac,int far *graphmode);

/* In names.c */

char	* MGL_modeName(int mode);
char	* MGL_driverName(int driver);
char 	* MGL_dacName(int dac);
char	* MGL_chipsetName(int driver,int chipset);

/* In modes.c */

int     * MGL_availableModes(int driver,int memory);
int		MGL_availablePages(int driver,int memory,int mode);

#ifdef	__cplusplus
}						/* End of "C" linkage for C++	*/
#endif

#endif	/* __DRIVERS_H */
