1 /**************************************************************************** 2 * 3 * VBE 2.0 Linear Framebuffer Profiler 4 * By Kendall Bennett and Brian Hook 5 * 6 * Filename: LFBPROF.H 7 * Language: ANSI C 8 * Environment: Watcom C/C++ 10.0a with DOS4GW 9 * 10 * Description: Header file for the LFBPROF.C progam. 11 * 12 ****************************************************************************/ 13 14 #ifndef __LFBPROF_H 15 #define __LFBPROF_H 16 17 /*---------------------- Macros and type definitions ----------------------*/ 18 19 #pragma pack(1) 20 21 /* SuperVGA information block */ 22 23 typedef struct { 24 char VESASignature[4]; /* 'VESA' 4 byte signature */ 25 short VESAVersion; /* VBE version number */ 26 long OemStringPtr; /* Pointer to OEM string */ 27 long Capabilities; /* Capabilities of video card */ 28 long VideoModePtr; /* Pointer to supported modes */ 29 short TotalMemory; /* Number of 64kb memory blocks */ 30 31 /* VBE 2.0 extensions */ 32 33 short OemSoftwareRev; /* OEM Software revision number */ 34 long OemVendorNamePtr; /* Pointer to Vendor Name string */ 35 long OemProductNamePtr; /* Pointer to Product Name string */ 36 long OemProductRevPtr; /* Pointer to Product Revision str */ 37 char reserved[222]; /* Pad to 256 byte block size */ 38 char OemDATA[256]; /* Scratch pad for OEM data */ 39 } VBE_vgaInfo; 40 41 /* SuperVGA mode information block */ 42 43 typedef struct { 44 short ModeAttributes; /* Mode attributes */ 45 char WinAAttributes; /* Window A attributes */ 46 char WinBAttributes; /* Window B attributes */ 47 short WinGranularity; /* Window granularity in k */ 48 short WinSize; /* Window size in k */ 49 short WinASegment; /* Window A segment */ 50 short WinBSegment; /* Window B segment */ 51 long WinFuncPtr; /* Pointer to window function */ 52 short BytesPerScanLine; /* Bytes per scanline */ 53 short XResolution; /* Horizontal resolution */ 54 short YResolution; /* Vertical resolution */ 55 char XCharSize; /* Character cell width */ 56 char YCharSize; /* Character cell height */ 57 char NumberOfPlanes; /* Number of memory planes */ 58 char BitsPerPixel; /* Bits per pixel */ 59 char NumberOfBanks; /* Number of CGA style banks */ 60 char MemoryModel; /* Memory model type */ 61 char BankSize; /* Size of CGA style banks */ 62 char NumberOfImagePages; /* Number of images pages */ 63 char res1; /* Reserved */ 64 char RedMaskSize; /* Size of direct color red mask */ 65 char RedFieldPosition; /* Bit posn of lsb of red mask */ 66 char GreenMaskSize; /* Size of direct color green mask */ 67 char GreenFieldPosition; /* Bit posn of lsb of green mask */ 68 char BlueMaskSize; /* Size of direct color blue mask */ 69 char BlueFieldPosition; /* Bit posn of lsb of blue mask */ 70 char RsvdMaskSize; /* Size of direct color res mask */ 71 char RsvdFieldPosition; /* Bit posn of lsb of res mask */ 72 char DirectColorModeInfo; /* Direct color mode attributes */ 73 74 /* VBE 2.0 extensions */ 75 76 long PhysBasePtr; /* Physical address for linear buf */ 77 long OffScreenMemOffset; /* Pointer to start of offscreen mem*/ 78 short OffScreenMemSize; /* Amount of offscreen mem in 1K's */ 79 char res2[206]; /* Pad to 256 byte block size */ 80 } VBE_modeInfo; 81 82 #define vbeMemPK 4 /* Packed Pixel memory model */ 83 #define vbeUseLFB 0x4000 /* Enable linear framebuffer mode */ 84 85 /* Flags for the mode attributes returned by VBE_getModeInfo. If 86 * vbeMdNonBanked is set to 1 and vbeMdLinear is also set to 1, then only 87 * the linear framebuffer mode is available. 88 */ 89 90 #define vbeMdAvailable 0x0001 /* Video mode is available */ 91 #define vbeMdColorMode 0x0008 /* Mode is a color video mode */ 92 #define vbeMdGraphMode 0x0010 /* Mode is a graphics mode */ 93 #define vbeMdNonBanked 0x0040 /* Banked mode is not supported */ 94 #define vbeMdLinear 0x0080 /* Linear mode supported */ 95 96 /* Structures for issuing real mode interrupts with DPMI */ 97 98 struct _RMWORDREGS { 99 unsigned short ax, bx, cx, dx, si, di, cflag; 100 }; 101 102 struct _RMBYTEREGS { 103 unsigned char al, ah, bl, bh, cl, ch, dl, dh; 104 }; 105 106 typedef union { 107 struct _RMWORDREGS x; 108 struct _RMBYTEREGS h; 109 } RMREGS; 110 111 typedef struct { 112 unsigned short es; 113 unsigned short cs; 114 unsigned short ss; 115 unsigned short ds; 116 } RMSREGS; 117 118 /* Inline assembler block fill/move routines */ 119 120 void LfbMemset(void *p,int c,int n); 121 #pragma aux LfbMemset = \ 122 "shr ecx,2" \ 123 "xor eax,eax" \ 124 "mov al,bl" \ 125 "shl ebx,8" \ 126 "or ax,bx" \ 127 "mov ebx,eax" \ 128 "shl ebx,16" \ 129 "or eax,ebx" \ 130 "rep stosd" \ 131 parm [edi] [ebx] [ecx]; 132 133 void LfbMemcpy(void *dst,void *src,int n); 134 #pragma aux LfbMemcpy = \ 135 "shr ecx,2" \ 136 "rep movsd" \ 137 parm [edi] [esi] [ecx]; 138 139 /* Map a real mode pointer into address space */ 140 141 #define LfbMapRealPointer(p) (void*)(((unsigned)((p) & 0xFFFF0000) >> 12) + ((p) & 0xFFFF)) 142 143 /* Get the current timer tick count */ 144 145 #define LfbGetTicks() *((long*)0x46C) 146 147 #pragma pack() 148 149 #endif /* __LFBPROF_H */ 150