ReactOS 0.4.16-dev-2104-gb84fa49
vga.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Boot Video Driver for VGA-compatible cards
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: VGA helper functions
5 * COPYRIGHT: Copyright 2007 Alex Ionescu <alex.ionescu@reactos.org>
6 * Copyright 2013 Timo Kreuzer <timo.kreuzer@reactos.org>
7 * Copyright 2019 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
8 * Copyright 2020 Stanislav Motylkov <x86corez@gmail.com>
9 */
10
11#include "precomp.h"
12
13/* GLOBALS *******************************************************************/
14
15static const UCHAR lMaskTable[8] =
16{
17 (1 << 8) - (1 << 0),
18 (1 << 7) - (1 << 0),
19 (1 << 6) - (1 << 0),
20 (1 << 5) - (1 << 0),
21 (1 << 4) - (1 << 0),
22 (1 << 3) - (1 << 0),
23 (1 << 2) - (1 << 0),
24 (1 << 1) - (1 << 0)
25};
26static const UCHAR rMaskTable[8] =
27{
28 (1 << 7),
29 (1 << 7) + (1 << 6),
30 (1 << 7) + (1 << 6) + (1 << 5),
31 (1 << 7) + (1 << 6) + (1 << 5) + (1 << 4),
32 (1 << 7) + (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3),
33 (1 << 7) + (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2),
34 (1 << 7) + (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1 << 1),
35 (1 << 7) + (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1 << 1) + (1 << 0),
36};
37const UCHAR PixelMask[8] =
38{
39 (1 << 7),
40 (1 << 6),
41 (1 << 5),
42 (1 << 4),
43 (1 << 3),
44 (1 << 2),
45 (1 << 1),
46 (1 << 0),
47};
48static const ULONG lookup[16] =
49{
50 0x0000,
51 0x0100,
52 0x1000,
53 0x1100,
54 0x0001,
55 0x0101,
56 0x1001,
57 0x1101,
58 0x0010,
59 0x0110,
60 0x1010,
61 0x1110,
62 0x0011,
63 0x0111,
64 0x1011,
65 0x1111,
66};
67
70
71/* PRIVATE FUNCTIONS *********************************************************/
72
73static VOID
76{
78
79 /* Switch to graphics mode register */
81
82 /* Get the current register value, minus the current mode */
84
85 /* Set the new mode */
87}
88
89VOID
91{
92 /* Switch to mode 10 */
93 ReadWriteMode(10);
94
95 /* Clear the 4 planes (we're already in unchained mode here) */
97
98 /* Select the color don't care register */
100}
101
102#define SET_PIXELS(_PixelPtr, _PixelMask, _TextColor) \
103do { \
104 /* Select the bitmask register and write the mask */ \
105 __outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, ((_PixelMask) << 8) | IND_BIT_MASK); \
106 /* Dummy read to load latch registers */ \
107 (VOID)READ_REGISTER_UCHAR((_PixelPtr)); \
108 /* Set the new color */ \
109 WRITE_REGISTER_UCHAR((_PixelPtr), (UCHAR)(_TextColor)); \
110} while (0);
111
112VOID
114 _In_ CHAR Character,
115 _In_ ULONG Left,
116 _In_ ULONG Top,
117 _In_ ULONG TextColor,
118 _In_ ULONG BackColor)
119{
120 const UCHAR* FontChar;
121 PUCHAR PixelPtr;
123 UCHAR Shift;
124
126
127 /* Calculate shift */
128 Shift = Left & 7;
129
130 /* Get the font and pixel pointer */
131 FontChar = GetFontPtr(Character);
132 PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
133
134 /* Loop all pixel rows */
135 for (Height = BOOTCHAR_HEIGHT; Height > 0; --Height)
136 {
137 SET_PIXELS(PixelPtr, *FontChar >> Shift, TextColor);
138 PixelPtr += (SCREEN_WIDTH / 8);
139 FontChar += FONT_PTR_DELTA;
140 }
141
142 /* Check if we need to update neighbor bytes */
143 if (Shift)
144 {
145 /* Calculate shift for 2nd byte */
146 Shift = 8 - Shift;
147
148 /* Get the font and pixel pointer (2nd byte) */
149 FontChar = GetFontPtr(Character);
150 PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)) + 1);
151
152 /* Loop all pixel rows */
153 for (Height = BOOTCHAR_HEIGHT; Height > 0; --Height)
154 {
155 SET_PIXELS(PixelPtr, *FontChar << Shift, TextColor);
156 PixelPtr += (SCREEN_WIDTH / 8);
157 FontChar += FONT_PTR_DELTA;
158 }
159 }
160
161 /* Check if the background color is transparent */
162 if (BackColor >= BV_COLOR_NONE)
163 {
164 /* We are done */
165 return;
166 }
167
168 /* Calculate shift */
169 Shift = Left & 7;
170
171 /* Get the font and pixel pointer */
172 FontChar = GetFontPtr(Character);
173 PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
174
175 /* Loop all pixel rows */
176 for (Height = BOOTCHAR_HEIGHT; Height > 0; --Height)
177 {
178 SET_PIXELS(PixelPtr, ~*FontChar >> Shift, BackColor);
179 PixelPtr += (SCREEN_WIDTH / 8);
180 FontChar += FONT_PTR_DELTA;
181 }
182
183 /* Check if we need to update neighbor bytes */
184 if (Shift)
185 {
186 /* Calculate shift for 2nd byte */
187 Shift = 8 - Shift;
188
189 /* Get the font and pixel pointer (2nd byte) */
190 FontChar = GetFontPtr(Character);
191 PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)) + 1);
192
193 /* Loop all pixel rows */
194 for (Height = BOOTCHAR_HEIGHT; Height > 0; --Height)
195 {
196 SET_PIXELS(PixelPtr, ~*FontChar << Shift, BackColor);
197 PixelPtr += (SCREEN_WIDTH / 8);
198 FontChar += FONT_PTR_DELTA;
199 }
200 }
201}
202
203static VOID
205 _In_ ULONG Id,
206 _In_ RGBQUAD Rgb)
207{
208 /* Set the palette index */
210
211 /* Set RGB colors */
215}
216
217VOID
219 _In_reads_(Count) const ULONG* Table,
221{
222 const ULONG* Entry = Table;
223 ULONG i;
224
225 for (i = 0; i < Count; i++, Entry++)
226 {
228 }
229}
230
231VOID
233 _In_ ULONG Scroll)
234{
235 ULONG Top, RowSize;
236 PUCHAR OldPosition, NewPosition;
237
238 /* Clear the 4 planes */
240
241 /* Set the bitmask to 0xFF for all 4 planes */
243
244 /* Set Mode 1 */
245 ReadWriteMode(1);
246
247 RowSize = (VidpScrollRegion.Right - VidpScrollRegion.Left + 1) / 8;
248
249 /* Calculate the position in memory for the row */
250 OldPosition = (PUCHAR)(VgaBase + (VidpScrollRegion.Top + Scroll) * (SCREEN_WIDTH / 8) + VidpScrollRegion.Left / 8);
251 NewPosition = (PUCHAR)(VgaBase + VidpScrollRegion.Top * (SCREEN_WIDTH / 8) + VidpScrollRegion.Left / 8);
252
253 /* Start loop */
255 {
256#if defined(_M_IX86) || defined(_M_AMD64)
257 __movsb(NewPosition, OldPosition, RowSize);
258#else
259 ULONG i;
260
261 /* Scroll the row */
262 for (i = 0; i < RowSize; ++i)
263 WRITE_REGISTER_UCHAR(NewPosition + i, READ_REGISTER_UCHAR(OldPosition + i));
264#endif
265 OldPosition += (SCREEN_WIDTH / 8);
266 NewPosition += (SCREEN_WIDTH / 8);
267 }
268}
269
270VOID
272 _In_ ULONG CurrentTop,
273 _In_ ULONG TopDelta,
274 _In_ BOOLEAN Restore)
275{
276 PUCHAR Position1, Position2;
277 ULONG Count;
278
279 /* Clear the 4 planes */
281
282 /* Set the bitmask to 0xFF for all 4 planes */
284
285 /* Set Mode 1 */
286 ReadWriteMode(1);
287
288 /* Calculate the position in memory for the row */
289 if (Restore)
290 {
291 /* Restore the row by copying back the contents saved off-screen */
292 Position1 = (PUCHAR)(VgaBase + CurrentTop * (SCREEN_WIDTH / 8));
293 Position2 = (PUCHAR)(VgaBase + SCREEN_HEIGHT * (SCREEN_WIDTH / 8));
294 }
295 else
296 {
297 /* Preserve the row by saving its contents off-screen */
298 Position1 = (PUCHAR)(VgaBase + SCREEN_HEIGHT * (SCREEN_WIDTH / 8));
299 Position2 = (PUCHAR)(VgaBase + CurrentTop * (SCREEN_WIDTH / 8));
300 }
301
302 /* Set the count and loop every pixel */
303 Count = TopDelta * (SCREEN_WIDTH / 8);
304#if defined(_M_IX86) || defined(_M_AMD64)
305 __movsb(Position1, Position2, Count);
306#else
307 while (Count--)
308 {
309 /* Write the data back on the other position */
310 WRITE_REGISTER_UCHAR(Position1, READ_REGISTER_UCHAR(Position2));
311
312 /* Increase both positions */
313 Position1++;
314 Position2++;
315 }
316#endif
317}
318
319/* PUBLIC FUNCTIONS **********************************************************/
320
321VOID
322NTAPI
324{
325 /* Select bit mask register and clear it */
328}
329
330VOID
331NTAPI
334 _In_ ULONG Left,
335 _In_ ULONG Top,
338 _In_ ULONG Delta)
339{
340 ULONG Plane;
341 ULONG XDistance;
342 ULONG LeftDelta, RightDelta;
343 ULONG PixelOffset;
344 PUCHAR PixelPosition;
345 PUCHAR k, i;
346 PULONG m;
347 UCHAR Value, Value2;
348 UCHAR a;
349 ULONG b;
350 ULONG x, y;
351
352 /* Calculate total distance to copy on X */
353 XDistance = Left + Width - 1;
354
355 /* Calculate the 8-byte left and right deltas */
356 LeftDelta = Left & 7;
357 RightDelta = 8 - LeftDelta;
358
359 /* Clear the destination buffer */
360 RtlZeroMemory(Buffer, Delta * Height);
361
362 /* Calculate the pixel offset and convert the X distance into byte form */
363 PixelOffset = Top * (SCREEN_WIDTH / 8) + (Left >> 3);
364 XDistance >>= 3;
365
366 /* Loop the 4 planes */
367 for (Plane = 0; Plane < 4; ++Plane)
368 {
369 /* Set the current pixel position and reset buffer loop variable */
370 PixelPosition = (PUCHAR)(VgaBase + PixelOffset);
371 i = Buffer;
372
373 /* Set Mode 0 */
374 ReadWriteMode(0);
375
376 /* Set the current plane */
378
379 /* Start the outer Y height loop */
380 for (y = Height; y > 0; --y)
381 {
382 /* Read the current value */
383 m = (PULONG)i;
384 Value = READ_REGISTER_UCHAR(PixelPosition);
385
386 /* Set Pixel Position loop variable */
387 k = PixelPosition + 1;
388
389 /* Check if we're still within bounds */
390 if (Left <= XDistance)
391 {
392 /* Start the X inner loop */
393 for (x = (XDistance - Left) + 1; x > 0; --x)
394 {
395 /* Read the current value */
396 Value2 = READ_REGISTER_UCHAR(k);
397
398 /* Increase pixel position */
399 k++;
400
401 /* Do the blt */
402 a = Value2 >> (UCHAR)RightDelta;
403 a |= Value << (UCHAR)LeftDelta;
404 b = lookup[a & 0xF];
405 a >>= 4;
406 b <<= 16;
407 b |= lookup[a];
408
409 /* Save new value to buffer */
410 *m |= (b << Plane);
411
412 /* Move to next destination location */
413 m++;
414
415 /* Write new value */
416 Value = Value2;
417 }
418 }
419
420 /* Update pixel position */
421 PixelPosition += (SCREEN_WIDTH / 8);
422 i += Delta;
423 }
424 }
425}
426
427VOID
428NTAPI
430 _In_ ULONG Left,
431 _In_ ULONG Top,
432 _In_ ULONG Right,
435{
436 ULONG rMask, lMask;
437 ULONG LeftOffset, RightOffset, Distance;
439 ULONG i, j;
440
441 /* Get the left and right masks, shifts, and delta */
442 LeftOffset = Left >> 3;
443 lMask = (lMaskTable[Left & 0x7] << 8) | IND_BIT_MASK;
444 RightOffset = Right >> 3;
445 rMask = (rMaskTable[Right & 0x7] << 8) | IND_BIT_MASK;
446 Distance = RightOffset - LeftOffset;
447
448 /* If there is no distance, then combine the right and left masks */
449 if (!Distance) lMask &= rMask;
450
452
453 /* Calculate pixel position for the read */
454 Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + LeftOffset);
455
456 /* Select the bitmask register and write the mask */
458
459 /* Check if the top coord is below the bottom one */
460 if (Top <= Bottom)
461 {
462 /* Start looping each line */
463 for (i = (Bottom - Top) + 1; i > 0; --i)
464 {
465 /* Read the previous value and add our color */
467
468 /* Move to the next line */
469 Offset += (SCREEN_WIDTH / 8);
470 }
471 }
472
473 /* Check if we have a delta */
474 if (Distance > 0)
475 {
476 /* Calculate new pixel position */
477 Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + RightOffset);
478 Distance--;
479
480 /* Select the bitmask register and write the mask */
482
483 /* Check if the top coord is below the bottom one */
484 if (Top <= Bottom)
485 {
486 /* Start looping each line */
487 for (i = (Bottom - Top) + 1; i > 0; --i)
488 {
489 /* Read the previous value and add our color */
491
492 /* Move to the next line */
493 Offset += (SCREEN_WIDTH / 8);
494 }
495 }
496
497 /* Check if we still have a delta */
498 if (Distance > 0)
499 {
500 /* Calculate new pixel position */
501 Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + LeftOffset + 1);
502
503 /* Set the bitmask to 0xFF for all 4 planes */
505
506 /* Check if the top coord is below the bottom one */
507 if (Top <= Bottom)
508 {
509 /* Start looping each line */
510 for (i = (Bottom - Top) + 1; i > 0; --i)
511 {
512 /* Loop the shift delta */
513 for (j = Distance; j > 0; Offset++, --j)
514 {
515 /* Write the color */
517 }
518
519 /* Update position in memory */
520 Offset += ((SCREEN_WIDTH / 8) - Distance);
521 }
522 }
523 }
524 }
525}
DWORD Id
unsigned char BOOLEAN
#define PrepareForSetPixel()
Definition: arm.h:21
static LPHIST_ENTRY Bottom
Definition: history.c:54
static LPHIST_ENTRY Top
Definition: history.c:53
Definition: bufpool.h:45
URECT VidpScrollRegion
Definition: console.c:17
static VOID ReadWriteMode(_In_ UCHAR Mode)
Definition: vga.c:74
VOID NTAPI VidScreenToBufferBlt(_Out_writes_bytes_all_(Delta *Height) PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: vga.c:332
static const UCHAR rMaskTable[8]
Definition: vga.c:26
ULONG_PTR VgaRegisterBase
Definition: vga.c:68
VOID PreserveRow(_In_ ULONG CurrentTop, _In_ ULONG TopDelta, _In_ BOOLEAN Restore)
Definition: vga.c:271
VOID NTAPI VidSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR Color)
Definition: vga.c:429
VOID NTAPI VidCleanUp(VOID)
Definition: vga.c:323
static const UCHAR lMaskTable[8]
Definition: vga.c:15
ULONG_PTR VgaBase
Definition: vga.c:69
#define SET_PIXELS(_PixelPtr, _PixelMask, _TextColor)
Definition: vga.c:102
static const ULONG lookup[16]
Definition: vga.c:48
VOID InitPaletteWithTable(_In_reads_(Count) const ULONG *Table, _In_ ULONG Count)
Definition: vga.c:218
const UCHAR PixelMask[8]
Definition: vga.c:37
VOID DisplayCharacter(_In_ CHAR Character, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG TextColor, _In_ ULONG BackColor)
Definition: vga.c:113
VOID DoScroll(_In_ ULONG Scroll)
Definition: vga.c:232
static VOID SetPaletteEntryRGB(_In_ ULONG Id, _In_ RGBQUAD Rgb)
Definition: vga.c:204
#define DAC_DATA_REG_PORT
Definition: vga.h:77
#define DAC_ADDRESS_WRITE_PORT
Definition: vga.h:76
#define SEQ_ADDRESS_PORT
Definition: vga.h:69
#define GRAPH_ADDRESS_PORT
Definition: vga.h:81
#define GRAPH_DATA_PORT
Definition: vga.h:82
#define IND_GRAPH_MODE
Definition: vga.h:112
#define BIT_MASK_DEFAULT
Definition: vga.h:167
#define IND_BIT_MASK
Definition: vga.h:114
#define IND_READ_MAP
Definition: vga.h:111
#define VGA_BASE_IO_PORT
Definition: vga.h:38
#define GetBValue(quad)
Definition: precomp.h:82
#define GetFontPtr(_Char)
Definition: precomp.h:90
#define GetGValue(quad)
Definition: precomp.h:81
ULONG RGBQUAD
Definition: precomp.h:58
#define GetRValue(quad)
Definition: precomp.h:80
#define FONT_PTR_DELTA
Definition: precomp.h:91
#define BOOTCHAR_HEIGHT
Definition: precomp.h:35
ASMGENDATA Table[]
Definition: genincdata.c:61
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
const GLfloat * m
Definition: glext.h:10848
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
_In_ ULONG Mode
Definition: hubbusif.h:303
PPC_QUAL void __movsb(unsigned char *Destination, const unsigned char *Source, unsigned long Count)
Definition: intrin_ppc.h:323
#define a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79
int k
Definition: mpi.c:3369
#define _In_reads_(s)
Definition: no_sal2.h:168
#define _In_
Definition: no_sal2.h:158
#define _Out_writes_bytes_all_(s)
Definition: no_sal2.h:194
int Count
Definition: noreturn.cpp:7
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
#define SCREEN_WIDTH
Definition: pc98video.c:24
#define SCREEN_HEIGHT
Definition: pc98video.c:25
#define __inpb(Port)
Definition: pc.h:18
#define __outpw(Port, Value)
Definition: pc.h:27
#define __outpb(Port, Value)
Definition: pc.h:24
unsigned short USHORT
Definition: pedump.c:61
#define BV_COLOR_NONE
Definition: display.h:31
base of all file and directory entries
Definition: entries.h:83
ULONG Right
Definition: precomp.h:64
ULONG Top
Definition: precomp.h:63
ULONG Bottom
Definition: precomp.h:65
ULONG Left
Definition: precomp.h:62
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
NTKERNELAPI VOID NTAPI WRITE_REGISTER_UCHAR(IN PUCHAR Register, IN UCHAR Value)
NTKERNELAPI UCHAR NTAPI READ_REGISTER_UCHAR(IN PUCHAR Register)
_In_ ULONG Shift
Definition: rtlfuncs.h:2698
unsigned char UCHAR
Definition: xmlstorage.h:181
char CHAR
Definition: xmlstorage.h:175