/**************************************************************************** * * 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 */