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…
==============================================================================
--- 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));
}