https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1d2b0fbcd1e933ad403cb…
commit 1d2b0fbcd1e933ad403cb1e0a85c2758bc0c7c73
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Dec 22 14:09:43 2019 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Mon Dec 23 21:06:57 2019 +0100
[BOOTVID] Replace hardcoded screen and font size numbers by #define-d values.
---
drivers/base/bootvid/arm/bootvid.c | 36 +++++++++++------------
drivers/base/bootvid/i386/bootvid.c | 2 +-
drivers/base/bootvid/i386/vga.c | 57 ++++++++++++++++++-------------------
drivers/base/bootvid/precomp.h | 9 +++++-
4 files changed, 55 insertions(+), 49 deletions(-)
diff --git a/drivers/base/bootvid/arm/bootvid.c b/drivers/base/bootvid/arm/bootvid.c
index 16ba24c6a7a..5d6722fbf42 100644
--- a/drivers/base/bootvid/arm/bootvid.c
+++ b/drivers/base/bootvid/arm/bootvid.c
@@ -33,8 +33,8 @@ ULONG VidpScrollRegion[4] =
{
0,
0,
- 640 - 1,
- 480 - 1
+ SCREEN_WIDTH - 1,
+ SCREEN_HEIGHT - 1
};
typedef struct _VGA_COLOR
@@ -97,7 +97,7 @@ VidpSetPixel(IN ULONG Left,
//
// Calculate the pixel position
//
- PixelPosition = &VgaArmBase[Left + (Top * 640)];
+ PixelPosition = &VgaArmBase[Left + (Top * SCREEN_WIDTH)];
//
// Set our color
@@ -117,10 +117,10 @@ DisplayCharacter(IN CHAR Character,
ULONG i, j, XOffset;
/* Get the font line for this character */
- FontChar = &FontData[Character * 13 - Top];
+ FontChar = &FontData[Character * BOOTCHAR_HEIGHT - Top];
/* Loop each pixel height */
- i = 13;
+ i = BOOTCHAR_HEIGHT;
do
{
/* Loop each pixel width */
@@ -159,8 +159,8 @@ VgaScroll(IN ULONG Scroll)
PUSHORT i, j;
/* Set memory positions of the scroll */
- SourceOffset = &VgaArmBase[(VidpScrollRegion[1] * 80) + (VidpScrollRegion[0]
>> 3)];
- DestOffset = &SourceOffset[Scroll * 80];
+ SourceOffset = &VgaArmBase[(VidpScrollRegion[1] * (SCREEN_WIDTH / 8)) +
(VidpScrollRegion[0] >> 3)];
+ DestOffset = &SourceOffset[Scroll * (SCREEN_WIDTH / 8)];
/* Save top and check if it's above the bottom */
Top = VidpScrollRegion[1];
@@ -196,8 +196,8 @@ VgaScroll(IN ULONG Scroll)
}
/* Move to the next line */
- SourceOffset += 80;
- DestOffset += 80;
+ SourceOffset += (SCREEN_WIDTH / 8);
+ DestOffset += (SCREEN_WIDTH / 8);
/* Increase top */
Top++;
@@ -219,18 +219,18 @@ PreserveRow(IN ULONG CurrentTop,
if (Direction)
{
/* Calculate the position in memory for the row */
- Position1 = &VgaArmBase[CurrentTop * 80];
- Position2 = &VgaArmBase[0x9600];
+ Position1 = &VgaArmBase[CurrentTop * (SCREEN_WIDTH / 8)];
+ Position2 = &VgaArmBase[SCREEN_HEIGHT * (SCREEN_WIDTH / 8)];
}
else
{
/* Calculate the position in memory for the row */
- Position1 = &VgaArmBase[0x9600];
- Position2 = &VgaArmBase[CurrentTop * 80];
+ Position1 = &VgaArmBase[SCREEN_HEIGHT * (SCREEN_WIDTH / 8)];
+ Position2 = &VgaArmBase[CurrentTop * (SCREEN_WIDTH / 8)];
}
/* Set the count and loop every pixel */
- Count = TopDelta * 80;
+ Count = TopDelta * (SCREEN_WIDTH / 8);
while (Count--)
{
/* Write the data back on the other position */
@@ -255,8 +255,8 @@ VidpInitializeDisplay(VOID)
//
// Initialize timings to 640x480
//
- WRITE_REGISTER_ULONG(PL110_LCDTIMING0, LCDTIMING0_PPL(640));
- WRITE_REGISTER_ULONG(PL110_LCDTIMING1, LCDTIMING1_LPP(480));
+ WRITE_REGISTER_ULONG(PL110_LCDTIMING0, LCDTIMING0_PPL(SCREEN_WIDTH));
+ WRITE_REGISTER_ULONG(PL110_LCDTIMING1, LCDTIMING1_LPP(SCREEN_HEIGHT));
//
// Enable the LCD Display
@@ -327,7 +327,7 @@ VidResetDisplay(IN BOOLEAN HalReset)
// Re-initialize the palette and fill the screen black
//
//InitializePalette();
- VidSolidColorFill(0, 0, 639, 479, 0);
+ VidSolidColorFill(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0);
}
/*
@@ -424,7 +424,7 @@ VOID
NTAPI
VidDisplayString(IN PUCHAR String)
{
- ULONG TopDelta = 14;
+ ULONG TopDelta = BOOTCHAR_HEIGHT + 1;
/* Start looping the string */
while (*String)
diff --git a/drivers/base/bootvid/i386/bootvid.c b/drivers/base/bootvid/i386/bootvid.c
index db81548a1ba..afc3553e344 100644
--- a/drivers/base/bootvid/i386/bootvid.c
+++ b/drivers/base/bootvid/i386/bootvid.c
@@ -485,5 +485,5 @@ VidResetDisplay(IN BOOLEAN HalReset)
/* Re-initialize the palette and fill the screen black */
InitializePalette();
- VidSolidColorFill(0, 0, 639, 479, 0);
+ VidSolidColorFill(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0);
}
diff --git a/drivers/base/bootvid/i386/vga.c b/drivers/base/bootvid/i386/vga.c
index 382e825d7ac..c2398ac40eb 100644
--- a/drivers/base/bootvid/i386/vga.c
+++ b/drivers/base/bootvid/i386/vga.c
@@ -6,8 +6,8 @@ static ULONG ScrollRegion[4] =
{
0,
0,
- 640 - 1,
- 480 - 1
+ SCREEN_WIDTH - 1,
+ SCREEN_HEIGHT - 1
};
static UCHAR lMaskTable[8] =
{
@@ -97,7 +97,7 @@ SetPixel(IN ULONG Left,
PUCHAR PixelPosition;
/* Calculate the pixel position. */
- PixelPosition = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80));
+ PixelPosition = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
/* Select the bitmask register and write the mask */
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (PixelMask[Left & 7] << 8) |
IND_BIT_MASK);
@@ -149,14 +149,14 @@ DisplayCharacter(IN CHAR Character,
/* Get the font and pixel pointer */
FontChar = GetFontPtr(Character);
- PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80));
+ PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
/* Loop all pixel rows */
Height = BOOTCHAR_HEIGHT;
do
{
SET_PIXELS(PixelPtr, *FontChar >> Shift, TextColor);
- PixelPtr += 80;
+ PixelPtr += (SCREEN_WIDTH / 8);
FontChar += FONT_PTR_DELTA;
} while (--Height);
@@ -168,14 +168,14 @@ DisplayCharacter(IN CHAR Character,
/* Get the font and pixel pointer (2nd byte) */
FontChar = GetFontPtr(Character);
- PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80) + 1);
+ PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)) +
1);
/* Loop all pixel rows */
Height = BOOTCHAR_HEIGHT;
do
{
SET_PIXELS(PixelPtr, *FontChar << Shift, TextColor);
- PixelPtr += 80;
+ PixelPtr += (SCREEN_WIDTH / 8);
FontChar += FONT_PTR_DELTA;
} while (--Height);
}
@@ -192,14 +192,14 @@ DisplayCharacter(IN CHAR Character,
/* Get the font and pixel pointer */
FontChar = GetFontPtr(Character);
- PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80));
+ PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
/* Loop all pixel rows */
Height = BOOTCHAR_HEIGHT;
do
{
SET_PIXELS(PixelPtr, ~*FontChar >> Shift, BackColor);
- PixelPtr += 80;
+ PixelPtr += (SCREEN_WIDTH / 8);
FontChar += FONT_PTR_DELTA;
} while (--Height);
@@ -211,14 +211,14 @@ DisplayCharacter(IN CHAR Character,
/* Get the font and pixel pointer (2nd byte) */
FontChar = GetFontPtr(Character);
- PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80) + 1);
+ PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)) +
1);
/* Loop all pixel rows */
Height = BOOTCHAR_HEIGHT;
do
{
SET_PIXELS(PixelPtr, ~*FontChar << Shift, BackColor);
- PixelPtr += 80;
+ PixelPtr += (SCREEN_WIDTH / 8);
FontChar += FONT_PTR_DELTA;
} while (--Height);
}
@@ -335,8 +335,8 @@ VgaScroll(IN ULONG Scroll)
RowSize = (ScrollRegion[2] - ScrollRegion[0] + 1) / 8;
/* Calculate the position in memory for the row */
- OldPosition = (PUCHAR)(VgaBase + (ScrollRegion[1] + Scroll) * 80 + ScrollRegion[0] /
8);
- NewPosition = (PUCHAR)(VgaBase + ScrollRegion[1] * 80 + ScrollRegion[0] / 8);
+ OldPosition = (PUCHAR)(VgaBase + (ScrollRegion[1] + Scroll) * (SCREEN_WIDTH / 8) +
ScrollRegion[0] / 8);
+ NewPosition = (PUCHAR)(VgaBase + ScrollRegion[1] * (SCREEN_WIDTH / 8) +
ScrollRegion[0] / 8);
/* Start loop */
for (Top = ScrollRegion[1]; Top <= ScrollRegion[3]; ++Top)
@@ -350,8 +350,8 @@ VgaScroll(IN ULONG Scroll)
for (i = 0; i < RowSize; ++i)
WRITE_REGISTER_UCHAR(NewPosition + i, READ_REGISTER_UCHAR(OldPosition + i));
#endif
- OldPosition += 80;
- NewPosition += 80;
+ OldPosition += (SCREEN_WIDTH / 8);
+ NewPosition += (SCREEN_WIDTH / 8);
}
}
@@ -377,19 +377,18 @@ PreserveRow(IN ULONG CurrentTop,
if (Direction)
{
/* Calculate the position in memory for the row */
- Position1 = (PUCHAR)(VgaBase + CurrentTop * 80);
- Position2 = (PUCHAR)(VgaBase + 0x9600);
+ Position1 = (PUCHAR)(VgaBase + CurrentTop * (SCREEN_WIDTH / 8));
+ Position2 = (PUCHAR)(VgaBase + SCREEN_HEIGHT * (SCREEN_WIDTH / 8));
}
else
{
/* Calculate the position in memory for the row */
- Position1 = (PUCHAR)(VgaBase + 0x9600);
- Position2 = (PUCHAR)(VgaBase + CurrentTop * 80);
+ Position1 = (PUCHAR)(VgaBase + SCREEN_HEIGHT * (SCREEN_WIDTH / 8));
+ Position2 = (PUCHAR)(VgaBase + CurrentTop * (SCREEN_WIDTH / 8));
}
/* Set the count and loop every pixel */
- Count = TopDelta * 80;
-
+ Count = TopDelta * (SCREEN_WIDTH / 8);
#if defined(_M_IX86) || defined(_M_AMD64)
__movsb(Position1, Position2, Count);
#else
@@ -966,7 +965,7 @@ VidScreenToBufferBlt(IN PUCHAR Buffer,
RtlZeroMemory(Buffer, Delta * Height);
/* Calculate the pixel offset and convert the X distance into byte form */
- PixelOffset = Top * 80 + (Left >> 3);
+ PixelOffset = Top * (SCREEN_WIDTH / 8) + (Left >> 3);
XDistance >>= 3;
/* Loop the 4 planes */
@@ -1029,7 +1028,7 @@ VidScreenToBufferBlt(IN PUCHAR Buffer,
}
/* Update pixel position */
- PixelPosition += 80;
+ PixelPosition += (SCREEN_WIDTH / 8);
i += Delta;
} while (--y);
}
@@ -1072,7 +1071,7 @@ VidSolidColorFill(IN ULONG Left,
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, 7);
/* Calculate pixel position for the read */
- Offset = (PUCHAR)(VgaBase + (Top * 80) + LeftOffset);
+ Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + LeftOffset);
/* Select the bitmask register and write the mask */
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (USHORT)lMask);
@@ -1088,7 +1087,7 @@ VidSolidColorFill(IN ULONG Left,
WRITE_REGISTER_UCHAR(Offset, READ_REGISTER_UCHAR(Offset) & Color);
/* Move to the next line */
- Offset += 80;
+ Offset += (SCREEN_WIDTH / 8);
} while (--i);
}
@@ -1096,7 +1095,7 @@ VidSolidColorFill(IN ULONG Left,
if (Distance)
{
/* Calculate new pixel position */
- Offset = (PUCHAR)(VgaBase + (Top * 80) + RightOffset);
+ Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + RightOffset);
Distance--;
/* Select the bitmask register and write the mask */
@@ -1114,7 +1113,7 @@ VidSolidColorFill(IN ULONG Left,
READ_REGISTER_UCHAR(Offset) & Color);
/* Move to the next line */
- Offset += 80;
+ Offset += (SCREEN_WIDTH / 8);
} while (--i);
}
@@ -1122,7 +1121,7 @@ VidSolidColorFill(IN ULONG Left,
if (Distance)
{
/* Calculate new pixel position */
- Offset = (PUCHAR)(VgaBase + (Top * 80) + LeftOffset + 1);
+ Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + LeftOffset + 1);
/* Set the bitmask to 0xFF for all 4 planes */
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, 0xFF08);
@@ -1145,7 +1144,7 @@ VidSolidColorFill(IN ULONG Left,
}
/* Update position in memory */
- Offset += (80 - Distance);
+ Offset += ((SCREEN_WIDTH / 8) - Distance);
} while (--i);
}
}
diff --git a/drivers/base/bootvid/precomp.h b/drivers/base/bootvid/precomp.h
index 407447e762b..18bc611a99a 100644
--- a/drivers/base/bootvid/precomp.h
+++ b/drivers/base/bootvid/precomp.h
@@ -8,7 +8,14 @@
/* Define if FontData has upside down characters */
#undef CHAR_GEN_UPSIDE_DOWN
-#define BOOTCHAR_HEIGHT 13
+#define BOOTCHAR_HEIGHT 13
+#define BOOTCHAR_WIDTH 8 // Each character line is encoded in a UCHAR.
+
+/*
+ * Screen resolution (for default VGA)
+ */
+#define SCREEN_WIDTH 640
+#define SCREEN_HEIGHT 480
#ifndef _M_ARM
#include "vga.h"