https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1d2b0fbcd1e933ad403cb1e0a85c2758bc0c7c73

commit 1d2b0fbcd1e933ad403cb1e0a85c2758bc0c7c73
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Sun Dec 22 14:09:43 2019 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
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"

Reply via email to