[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