Author: aandrejevic
Date: Tue Jun  9 14:00:43 2015
New Revision: 68090

URL: http://svn.reactos.org/svn/reactos?rev=68090&view=rev
Log:
[NTVDM]
Adjust Bda->ScreenColumns in graphics modes. Fix line wrapping.


Modified:
    trunk/reactos/subsystems/mvdm/ntvdm/bios/vidbios.c

Modified: trunk/reactos/subsystems/mvdm/ntvdm/bios/vidbios.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/mvdm/ntvdm/bios/vidbios.c?rev=68090&r1=68089&r2=68090&view=diff
==============================================================================
--- trunk/reactos/subsystems/mvdm/ntvdm/bios/vidbios.c  [iso-8859-1] (original)
+++ trunk/reactos/subsystems/mvdm/ntvdm/bios/vidbios.c  [iso-8859-1] Tue Jun  9 
14:00:43 2015
@@ -2445,6 +2445,9 @@
     Bda->ScreenColumns = Resolution.X;
     Bda->ScreenRows    = Resolution.Y - 1;
 
+    /* Adjust the number of columns for graphics modes */
+    if (ModeNumber > 3) Bda->ScreenColumns >>= 3;
+
     /* Update the current font */
     Bda->CharacterHeight = VideoModes[ModeNumber].CharacterHeight;
     switch (Bda->CharacterHeight)
@@ -2614,15 +2617,17 @@
 
                     /* Read from VGA memory to load the latch register */
                     EmulatorReadMemory(&EmulatorContext,
-                                       TO_LINEAR(CgaSegment[(Row + i) & 1],
-                                                 ((((Row + i) >> 1) * 
Bda->ScreenColumns) >> 2) + Column * 2),
+                                       TO_LINEAR(CgaSegment[(Row * 
Bda->CharacterHeight + i) & 1],
+                                                 (((Row * Bda->CharacterHeight 
+ i) >> 1)
+                                                 * Bda->ScreenColumns + 
Column) * 2),
                                        (LPVOID)&Dummy,
                                        sizeof(USHORT));
                 }
 
                 EmulatorWriteMemory(&EmulatorContext,
-                                    TO_LINEAR(CgaSegment[(Row + i) & 1],
-                                              ((((Row + i) >> 1) * 
Bda->ScreenColumns) >> 2) + Column * 2),
+                                    TO_LINEAR(CgaSegment[(Row * 
Bda->CharacterHeight + i) & 1],
+                                              (((Row * Bda->CharacterHeight + 
i) >> 1)
+                                              * Bda->ScreenColumns + Column) * 
2),
                                     (LPVOID)&Pixel,
                                     sizeof(USHORT));
             }
@@ -2662,15 +2667,17 @@
 
                     /* Read from VGA memory to load the latch register */
                     EmulatorReadMemory(&EmulatorContext,
-                                       TO_LINEAR(CgaSegment[(Row + i) & 1],
-                                                 ((((Row + i) >> 1) * 
Bda->ScreenColumns) >> 3) + Column),
+                                       TO_LINEAR(CgaSegment[(Row * 
Bda->CharacterHeight + i) & 1],
+                                                 (((Row * Bda->CharacterHeight 
+ i) >> 1)
+                                                 * Bda->ScreenColumns) + 
Column),
                                        (LPVOID)&Dummy,
                                        sizeof(UCHAR));
                 }
 
                 EmulatorWriteMemory(&EmulatorContext,
-                                    TO_LINEAR(CgaSegment[(Row + i) & 1],
-                                              ((((Row + i) >> 1) * 
Bda->ScreenColumns) >> 3) + Column),
+                                    TO_LINEAR(CgaSegment[(Row * 
Bda->CharacterHeight + i) & 1],
+                                              (((Row * Bda->CharacterHeight + 
i) >> 1)
+                                              * Bda->ScreenColumns) + Column),
                                     (LPVOID)&Glyph[i],
                                     sizeof(UCHAR));
             }
@@ -2734,14 +2741,16 @@
                     /* Read from VGA memory to load the latch register */
                     EmulatorReadMemory(&EmulatorContext,
                                        TO_LINEAR(GRAPHICS_VIDEO_SEG,
-                                                 (((Row + i) * 
Bda->ScreenColumns) >> 3) + Column),
+                                                 ((Row * Bda->CharacterHeight 
+ i)
+                                                 * Bda->ScreenColumns) + 
Column),
                                        (LPVOID)&Dummy,
                                        sizeof(UCHAR));
                 }
 
                 EmulatorWriteMemory(&EmulatorContext,
                                     TO_LINEAR(GRAPHICS_VIDEO_SEG,
-                                              (((Row + i) * 
Bda->ScreenColumns) >> 3) + Column),
+                                              ((Row * Bda->CharacterHeight + i)
+                                              * Bda->ScreenColumns) + Column),
                                     (LPVOID)&Glyph[i],
                                     sizeof(UCHAR));
             }
@@ -2782,7 +2791,8 @@
 
                 EmulatorWriteMemory(&EmulatorContext,
                                     TO_LINEAR(GRAPHICS_VIDEO_SEG,
-                                              (Row + i) * Bda->ScreenColumns + 
Column * 8),
+                                              ((Row * Bda->CharacterHeight + i)
+                                              * Bda->ScreenColumns + Column) 
<< 3),
                                     (LPVOID)PixelBuffer,
                                     sizeof(PixelBuffer));
             }


Reply via email to