[ros-kernel] ReactOS 0.2.1 RC1 sources == Nightmare
Filip Navara
xnavara at volny.cz
Thu Mar 4 23:15:35 CET 2004
Waldo Alvarez Cañizares wrote:
...
>Entering and leaving graphics does not restore previous text on the screen and as someone mentioned later the cursor is lost
>seems to be aproblem somewhere in the hal (it appears and gets erased later)
>
...
Can anybody from the kernel developers look at the attached patch? It's
not the correct solution, but it solves this problem for now...
Thanks,
Filip
-------------- next part --------------
Index: hal/halx86/display.c
===================================================================
RCS file: /CVS/ReactOS/reactos/hal/halx86/display.c,v
retrieving revision 1.13
diff -u -r1.13 display.c
--- hal/halx86/display.c 18 Jan 2004 22:35:26 -0000 1.13
+++ hal/halx86/display.c 4 Mar 2004 21:20:46 -0000
@@ -163,6 +163,8 @@
#define CRTC_CURHI 0x0e
#define CRTC_CURLO 0x0f
+#define CRTC_CURSOR_REGS_START 0x0a
+#define CRTC_CURSOR_REGS_END 0x0f
#define CHAR_ATTRIBUTE_BLACK 0x00 /* black on black */
#define CHAR_ATTRIBUTE 0x17 /* grey on blue */
@@ -191,6 +193,7 @@
static UCHAR SavedTextGcReg[VGA_GC_NUM_REGISTERS];
static UCHAR SavedTextSeqReg[VGA_SEQ_NUM_REGISTERS];
static UCHAR SavedTextFont[2][FONT_AMOUNT];
+static PUCHAR SavedTextScreen;
static BOOL TextPaletteEnabled = FALSE;
/* PRIVATE FUNCTIONS *********************************************************/
@@ -639,7 +642,10 @@
HalRestorePalette();
}
HalOwnsDisplay = TRUE;
- HalClearDisplay(CHAR_ATTRIBUTE);
+
+ /* Restore screen buffer contents. */
+ memcpy(VideoBuffer, SavedTextScreen, SizeX * SizeY * 2);
+ ExFreePool(SavedTextScreen);
}
@@ -652,8 +658,20 @@
* reset routine.
*/
{
+ int i;
+
HalOwnsDisplay = FALSE;
HalResetDisplayParameters = ResetDisplayParameters;
+
+ /* Save current screen buffer contents. */
+ SavedTextScreen = ExAllocatePool(NonPagedPool, SizeX * SizeY * 2);
+ memcpy(SavedTextScreen, VideoBuffer, SizeX * SizeY * 2);
+
+ /* Save cursor registers so that we can restore cursor position later. */
+ for (i = CRTC_CURSOR_REGS_START; i <= CRTC_CURSOR_REGS_END; i++)
+ {
+ SavedTextCrtcReg[i] = HalReadCrtc(i);
+ }
}
VOID STDCALL
More information about the Ros-kernel
mailing list