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