blob: bae0e09b141347f07c6626aaf422cdd2925bb91c [file] [log] [blame]
/****************************************************************************
*
* VBE 2.0 Linear Framebuffer Profiler
* By Kendall Bennett and Brian Hook
*
* Filename: LFBPROF.H
* Language: ANSI C
* Environment: Watcom C/C++ 10.0a with DOS4GW
*
* Description: Header file for the LFBPROF.C progam.
*
****************************************************************************/
#ifndef __LFBPROF_H
#define __LFBPROF_H
/*---------------------- Macros and type definitions ----------------------*/
#pragma pack(1)
/* SuperVGA information block */
typedef struct {
char VESASignature[4]; /* 'VESA' 4 byte signature */
short VESAVersion; /* VBE version number */
long OemStringPtr; /* Pointer to OEM string */
long Capabilities; /* Capabilities of video card */
long VideoModePtr; /* Pointer to supported modes */
short TotalMemory; /* Number of 64kb memory blocks */
/* VBE 2.0 extensions */
short OemSoftwareRev; /* OEM Software revision number */
long OemVendorNamePtr; /* Pointer to Vendor Name string */
long OemProductNamePtr; /* Pointer to Product Name string */
long OemProductRevPtr; /* Pointer to Product Revision str */
char reserved[222]; /* Pad to 256 byte block size */
char OemDATA[256]; /* Scratch pad for OEM data */
} VBE_vgaInfo;
/* SuperVGA mode information block */
typedef struct {
short ModeAttributes; /* Mode attributes */
char WinAAttributes; /* Window A attributes */
char WinBAttributes; /* Window B attributes */
short WinGranularity; /* Window granularity in k */
short WinSize; /* Window size in k */
short WinASegment; /* Window A segment */
short WinBSegment; /* Window B segment */
long WinFuncPtr; /* Pointer to window function */
short BytesPerScanLine; /* Bytes per scanline */
short XResolution; /* Horizontal resolution */
short YResolution; /* Vertical resolution */
char XCharSize; /* Character cell width */
char YCharSize; /* Character cell height */
char NumberOfPlanes; /* Number of memory planes */
char BitsPerPixel; /* Bits per pixel */
char NumberOfBanks; /* Number of CGA style banks */
char MemoryModel; /* Memory model type */
char BankSize; /* Size of CGA style banks */
char NumberOfImagePages; /* Number of images pages */
char res1; /* Reserved */
char RedMaskSize; /* Size of direct color red mask */
char RedFieldPosition; /* Bit posn of lsb of red mask */
char GreenMaskSize; /* Size of direct color green mask */
char GreenFieldPosition; /* Bit posn of lsb of green mask */
char BlueMaskSize; /* Size of direct color blue mask */
char BlueFieldPosition; /* Bit posn of lsb of blue mask */
char RsvdMaskSize; /* Size of direct color res mask */
char RsvdFieldPosition; /* Bit posn of lsb of res mask */
char DirectColorModeInfo; /* Direct color mode attributes */
/* VBE 2.0 extensions */
long PhysBasePtr; /* Physical address for linear buf */
long OffScreenMemOffset; /* Pointer to start of offscreen mem*/
short OffScreenMemSize; /* Amount of offscreen mem in 1K's */
char res2[206]; /* Pad to 256 byte block size */
} VBE_modeInfo;
#define vbeMemPK 4 /* Packed Pixel memory model */
#define vbeUseLFB 0x4000 /* Enable linear framebuffer mode */
/* Flags for the mode attributes returned by VBE_getModeInfo. If
* vbeMdNonBanked is set to 1 and vbeMdLinear is also set to 1, then only
* the linear framebuffer mode is available.
*/
#define vbeMdAvailable 0x0001 /* Video mode is available */
#define vbeMdColorMode 0x0008 /* Mode is a color video mode */
#define vbeMdGraphMode 0x0010 /* Mode is a graphics mode */
#define vbeMdNonBanked 0x0040 /* Banked mode is not supported */
#define vbeMdLinear 0x0080 /* Linear mode supported */
/* Structures for issuing real mode interrupts with DPMI */
struct _RMWORDREGS {
unsigned short ax, bx, cx, dx, si, di, cflag;
};
struct _RMBYTEREGS {
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
};
typedef union {
struct _RMWORDREGS x;
struct _RMBYTEREGS h;
} RMREGS;
typedef struct {
unsigned short es;
unsigned short cs;
unsigned short ss;
unsigned short ds;
} RMSREGS;
/* Inline assembler block fill/move routines */
void LfbMemset(void *p,int c,int n);
#pragma aux LfbMemset = \
"shr ecx,2" \
"xor eax,eax" \
"mov al,bl" \
"shl ebx,8" \
"or ax,bx" \
"mov ebx,eax" \
"shl ebx,16" \
"or eax,ebx" \
"rep stosd" \
parm [edi] [ebx] [ecx];
void LfbMemcpy(void *dst,void *src,int n);
#pragma aux LfbMemcpy = \
"shr ecx,2" \
"rep movsd" \
parm [edi] [esi] [ecx];
/* Map a real mode pointer into address space */
#define LfbMapRealPointer(p) (void*)(((unsigned)((p) & 0xFFFF0000) >> 12) + ((p) & 0xFFFF))
/* Get the current timer tick count */
#define LfbGetTicks() *((long*)0x46C)
#pragma pack()
#endif /* __LFBPROF_H */