ftp.nice.ch/pub/next/developer/languages/c/djgpp-NS.s.tar.gz#/djgpp/go32/grdriver.h

This is grdriver.h in view mode; [Download] [Up]

/**
 ** This is file GRDRIVER.H
 **
 ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
 ** Copyright (C) 1992 Csaba Biegl, 820 Stirrup Dr, Nashville, TN 37221
 ** Copyright (C) 1993 Grzegorz Mazur, gbm@ii.pw.edu.pl
 **
 ** This file is distributed under the terms listed in the document
 ** "copying.dj", available from DJ Delorie at the address above.
 ** A copy of "copying.dj" should accompany this file; if not, a copy
 ** should be available from where this file was obtained.  This file
 ** may not be distributed without a verbatim copy of "copying.dj".
 **
 ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
 ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 **/

#ifndef _GRDRIVER_H_
#define _GRDRIVER_H_

#if defined(__GNUC__) && !defined(near)
# define near
# define far
# define huge
#endif

/* ================================================================== */
/*		      DRIVER HEADER STRUCTURES			      */
/* ================================================================== */

typedef struct {
    /*
     * ---------------------- GRD ----------------------------
     * slots present in all (.GRD, .GRN, .VDR) driver versions
     */
    unsigned short  modeset_routine;
    unsigned short  paging_routine;
    unsigned short  driver_flags;
    unsigned short  def_tw;
    unsigned short  def_th;
    unsigned short  def_gw;
    unsigned short  def_gh;
    /*
     * ---------------------- GRN ----------------------------
     * The next fields are present only in the ".GRN" (introduced with GRX 1.01)
     * format drivers. ".GRN" format drivers are indicated by the 'GR_NEW_DRIVER'
     * bit (see below) set in the 'driver_flags' word. The text and graphics
     * table entries are offsets to tables of GR_DRIVER_MODE_ENTRY structures.
     */
    unsigned short  def_numcolor;
    unsigned short  driver_init_routine;
    unsigned short  text_table;
    unsigned short  graphics_table;
    /*
     * The following entry was defined for GRX 1.02, but page flipping was never
     * implemented in this form. The new virtual screen feature of GRX 1.03
     * makes this obsolete.
     */
    unsigned short  pageflip_routine;
    /*
     * ---------------------- VDR ----------------------------
     * All subsequent fields are present only in the ".VDR" driver format
     * introduced with GO32 1.11 and GRX 1.03. ".VDR" format drivers can be
     * recognized by first checking for the ".GRN" format, then comparing
     * the 'vdr_magic' string with ".VDR driver".
     * The next fields are hard-coded in the driver binary:
     */
    unsigned char   vdr_magic[12];	/* indicates VDR format */
    unsigned short  driver_name_offset; /* just for documentation */
    unsigned short  set_screen_start;	/* page flip/scroll function */
    /*
     * field configured by GO32 from env. var. options when driver is loaded:
     */
    unsigned short  driver_options;	/* driver control bits: see defs below */
    /*
     * fields filled out by the driver initialization routine
     */
    unsigned short  memory_size;	/* total video adapter memory in 4KByte units */
    /*
     * fields read/written both by the driver and GO32 during every mode set
     */
    unsigned short  virt_x_res;		/* virtual X res; GO32: writes desired, drv: reports actual */
    unsigned short  virt_y_res;		/* virtual Y res; GO32: writes desired, drv: reports actual */
    void     far  (*VESA_paging_fnc)(); /* VESA paging fn; drv: reports real mode, GO32: cvt to prot */
    /*
     * driver uses these after every mode set to report mode dependent
     * parameters to the extender and graphics libraries
     */
    unsigned short  line_offset;	/* scan line length */
    unsigned short  wr_page_start;	/* start paragraph of the writable (or single R/W) page */
    unsigned short  rd_page_start;	/* start paragraph of the readable page (FFFF => single) */
    unsigned char   page_size_shift;	/* log2 of page size/4kB */
    unsigned char   page_gran_shift;	/* log2 of VESA page size/granularity */
    unsigned char   r_mask,r_offs;	/* pixel format info in VESA 1.2 style: */
    unsigned char   g_mask,g_offs;	/*   used in TrueColor modes by the */
    unsigned char   b_mask,b_offs;	/*   GRX (1.03+) graphics library   */
    unsigned char   f_mask,f_offs;	/* VESA 1.2 says there may be fill bits */
    /*
     * these are here to support future GRX and GO32 developments
     */
    unsigned long   linear_addr;	/* starting at this extended memory address */
    unsigned short  linear_size;	/* if > 0 then map this many 4 kByte pages */
    unsigned short  paging_fnc32;	/* offset of 32 bit paging function */
} GrDriverHeader;

typedef struct {
    unsigned short  width;
    unsigned short  height;
    unsigned short  number_of_colors;
    union {
#if defined(__GNUC__) || defined(__TURBOC__)
       struct {
	   unsigned short BIOS_mode:12;
	   unsigned short custom_setup_index:4;
       } vdr;
#else
#      error Check how your compiler aligns bitfields before you use this code!
#endif
       struct {
	   unsigned char  BIOS_mode;
	   unsigned char  custom_setup_index;
       } grn;
    } mode;
} GrModeEntry,GR_DRIVER_MODE_ENTRY;


/* ================================================================== */
/*	   DRIVER FLAG (THIRD WORD IN DRIVER HEADER) BITS	      */
/* ================================================================== */

#define GRD_NEW_DRIVER  0x0008		/* NEW FORMAT DRIVER IF THIS IS SET */

#define GRD_PAGING_MASK 0x0007		/* mask for paging modes */
#define GRD_NO_RW	0x0000		/* standard paging, no separate R/W */
#define GRD_RW_64K	0x0001		/* two separate (formerly 64K only) R/W pages */
/* !!! THE FOLLOWING THREE OPTIONS ARE NOT SUPPORTED AND/OR OBSOLETE !!! */
#define GRD_RW_32K	0x0002		/* two separate 32Kb pages */
#define GRD_MAP_128K	0x0003		/* 128Kb memory map -- some Tridents do it */
#define GRD_MAP_EXTMEM  0x0004		/* Can be mapped extended, above 1M. */
/* !!! */

#define GRD_TYPE_MASK	0xf000		/* adapter type mask */
#define GRD_VGA		0x0000		/* vga */
#define GRD_EGA		0x1000		/* ega */
#define GRD_HERC	0x2000		/* hercules */
#define GRD_8514A	0x3000		/* IBM 8514A or compatible */
#define GRD_S3		0x4000		/* S3 graphics accelerator */
/* ++ GRX 1.03 ".VDR" format */
#define GRD_W9000	0x5000		/* Weitek 9000 accelerator */

#define GRD_PLANE_MASK  0x0f00		/* bitplane number mask */
#define GRD_8_PLANES	0x0000		/* 8 planes = 256 colors */
#define GRD_4_PLANES	0x0100		/* 4 planes = 16 colors */
#define GRD_1_PLANE	0x0200		/* 1 plane = 2 colors */
#define GRD_16_PLANES	0x0300		/* VGA with 32K colors (really only 15 planes) */
#define GRD_8_X_PLANES  0x0400		/* VGA in mode X w/ 256 colors */
/* ++ GRX 1.03 ".VDR" format */
#define GRD_8_F_PLANES  0x0500		/* VGA 256c switchable betw. linear and modeX */
#define GRD_16_R_PLANES 0x0600		/* The "real" 16 plane mode with 64K colors */
#define GRD_24_PLANES	0x0700		/* 24 plane "TrueColor" mode */

#define GRD_MEM_MASK	0x00f0		/* memory size mask */
#define GRD_M_NOTSPEC	0x0000		/* memory amount not specified */
#define GRD_64K		0x0010		/* 64K display memory */
#define GRD_128K	0x0020		/* 128K display memory */
#define GRD_256K	0x0030		/* 256K display memory */
#define GRD_512K	0x0040		/* 512K display memory */
#define GRD_1024K	0x0050		/* 1MB display memory */
#define GRD_192K	0x0060		/* 192K -- some 640x480 EGA-s */
/* ++ GRX 1.03 ".VDR" format */
#define GRD_1536K	0x0070		/* 1.5 MB */
#define GRD_2048K	0x0080		/* 2.0 MB */
#define GRD_3072K	0x0090		/* 3.0 MB */
#define GRD_4096K	0x00a0		/* 4.0 MB */


/* ================================================================== */
/*	 DRIVER CONTROL BITS (SET BY GO32 WHEN DRIVER IS LOADED)      */
/* ================================================================== */

#define GRD_FAST_256_MODE	1	/* switch betw. lin. and planar 256 c. modes */
#define GRD_PROTECTED_PAGING	2	/* use paging function in protected mode */
#define GRD_15_PLANE_MODE	4	/* VESA reported 16 bpp mode is really only 15 */
#define GRD_ENABLE_LINEAR_VRAM  8	/* ext. memory linear mapping (not sup yet) */


/* ================================================================== */
/*		     COMPILER-DEPENDENT CONSTANTS		      */
/* ================================================================== */

#ifdef __GNUC__
# define VGA_FRAME	0xd0000000	/* VGA video RAM */
# define HERC_FRAME	0xe00b0000	/* Hercules frame addr */
# define EGA_FRAME	0xe00a0000	/* EGA frame addr */
# define RDONLY_OFF	0x00100000	/* VGA dual page: Read only */
# define WRONLY_OFF	0x00200000	/* VGA dual page: Write only */
# define BIG_VGA_FRAME  0xd1000000	/* 16MB VGA video RAM */
# define BIG_RDONLY_OFF 0x01000000	/* 16MB VGA dual page: Read only */
# define BIG_WRONLY_OFF 0x02000000	/* 16MB VGA dual page: Write only */
#endif

#ifdef __TURBOC__
# define VGA_FRAME	0xa0000000UL	/* VGA video RAM */
# define EGA_FRAME	0xa0000000UL	/* EGA video RAM */
# define HERC_FRAME	0xb0000000UL	/* Hercules frame addr */
# define RDONLY_OFF	0		/* VGA dual page: Read only */
# define WRONLY_OFF	0		/* VGA dual page: Write only */
#endif


/* ================================================================== */
/*		      DRIVER INTERFACE FUNCTIONS		      */
/* ================================================================== */

extern long _GrGetDriverModes(GrModeEntry far **t,GrModeEntry far **g);
extern long _GrLowSetMode(int mode,int width,int height,int colors);
#ifdef __TURBOC__
extern void _GrSetVideoPage(int page);
extern void _GrSetAsmPage(void);	/* takes page(s) in AL, AH */

/*
 * Values returned by _GrGetDriverModes and _GrLowSetMode in the
 * upper half of their returned long. (The lower half is the driver
 * option word.) This was introduced in GO32 1.11, before that
 * this word was either zero or sign extended. (Does not matter which
 * since neither can match these return values.) These values can be
 * used by the graphics libraries to determine what version of the
 * extender they are talking to.
 */
#define GR_DRV_VER_GRD  0x19910000L
#define GR_DRV_VER_GRN  0x19920000L
#define GR_DRV_VER_VDR  0x19930000L

#endif

#endif /* whole file */



These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.