|
|
1.1 root 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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.