1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
/****************************************************************************
*
* 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 */
|