xref: /reactos/drivers/base/bootvid/i386/pc/pc.h (revision 3b62a89d)
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 definitions
5  * COPYRIGHT:   Copyright 2007 Alex Ionescu <alex.ionescu@reactos.org>
6  */
7 
8 #pragma once
9 
10 extern ULONG_PTR VgaRegisterBase;
11 extern ULONG_PTR VgaBase;
12 extern USHORT AT_Initialization[];
13 extern USHORT VGA_640x480[];
14 extern UCHAR PixelMask[8];
15 
16 #define __inpb(Port) \
17     READ_PORT_UCHAR((PUCHAR)(VgaRegisterBase + (Port)))
18 
19 #define __inpw(Port) \
20     READ_PORT_USHORT((PUSHORT)(VgaRegisterBase + (Port)))
21 
22 #define __outpb(Port, Value) \
23     WRITE_PORT_UCHAR((PUCHAR)(VgaRegisterBase + (Port)), (UCHAR)(Value))
24 
25 #define __outpw(Port, Value) \
26     WRITE_PORT_USHORT((PUSHORT)(VgaRegisterBase + (Port)), (USHORT)(Value))
27 
28 VOID
29 InitPaletteWithTable(
30     _In_ PULONG Table,
31     _In_ ULONG Count);
32 
33 VOID
34 PrepareForSetPixel(VOID);
35 
36 FORCEINLINE
37 VOID
SetPixel(_In_ ULONG Left,_In_ ULONG Top,_In_ UCHAR Color)38 SetPixel(
39     _In_ ULONG Left,
40     _In_ ULONG Top,
41     _In_ UCHAR Color)
42 {
43     PUCHAR PixelPosition;
44 
45     /* Calculate the pixel position */
46     PixelPosition = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
47 
48     /* Select the bitmask register and write the mask */
49     __outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (PixelMask[Left & 7] << 8) | IND_BIT_MASK);
50 
51     /* Dummy read to load latch registers */
52     (VOID)READ_REGISTER_UCHAR(PixelPosition);
53 
54     /* Set the new color */
55     WRITE_REGISTER_UCHAR(PixelPosition, Color);
56 }
57 
58 VOID
59 PreserveRow(
60     _In_ ULONG CurrentTop,
61     _In_ ULONG TopDelta,
62     _In_ BOOLEAN Restore);
63 
64 VOID
65 DoScroll(
66     _In_ ULONG Scroll);
67 
68 VOID
69 DisplayCharacter(
70     _In_ CHAR Character,
71     _In_ ULONG Left,
72     _In_ ULONG Top,
73     _In_ ULONG TextColor,
74     _In_ ULONG BackColor);
75