Implement some video routines for Xen Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c _____
Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c --- branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c 2005-05-16 17:19:10 UTC (rev 15345) +++ branches/xen/reactos/boot/freeldr/freeldr/arch/i386/machxen.c 2005-05-16 18:02:10 UTC (rev 15346) @@ -210,44 +210,12 @@
return 0; }
-VIDEODISPLAYMODE -XenVideoSetDisplayMode(char *DisplayMode, BOOL Init) - { - XEN_UNIMPLEMENTED("XenVideoSetDisplayMode"); - return VideoTextMode; - } - VOID -XenVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth) - { - XEN_UNIMPLEMENTED("XenVideoGetDisplaySize"); - } - -ULONG -XenVideoGetBufferSize(VOID) - { - XEN_UNIMPLEMENTED("XenVideoGetBufferSize"); - return 0; - } - -VOID XenVideoSetTextCursorPosition(ULONG X, ULONG Y) { XEN_UNIMPLEMENTED("XenVideoSetTextCursorPosition"); }
-VOID -XenVideoHideShowTextCursor(BOOL Show) - { - XEN_UNIMPLEMENTED("XenVideoHideShowTextCursor"); - } - -VOID -XenVideoCopyOffScreenBufferToVRAM(PVOID Buffer) - { - XEN_UNIMPLEMENTED("XenVideoCopyOffScreenBufferToVRAM"); - } - BOOL XenVideoIsPaletteFixed(VOID) { _____
Modified: branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c --- branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c 2005-05-16 17:19:10 UTC (rev 15345) +++ branches/xen/reactos/boot/freeldr/freeldr/arch/i386/xenvideo.c 2005-05-16 18:02:10 UTC (rev 15346) @@ -90,6 +90,29 @@
return; }
+ /* Translate some line-drawing characters */ + if (0x80 <= Ch) + { + switch(Ch) + { + case 0xc9: /* top-left double corner */ + case 0xbb: /* top-right double corner */ + case 0xc8: /* bottom-left double corner */ + case 0xbc: /* bottom-right double corner */ + Ch = '+'; + break; + case 0xcd: /* horizontal double */ + Ch = '-'; + break; + case 0xba: /* vertical double */ + Ch = '|'; + break; + case 0xb1: /* dotted pattern */ + Ch = ' '; + break; + } + } + if (X != CurrentX || Y != CurrentY) { AnsiMoveToPos(X, Y); @@ -102,4 +125,48 @@ CurrentX++; }
+VIDEODISPLAYMODE +XenVideoSetDisplayMode(char *DisplayMode, BOOL Init) +{ + /* We only have one mode: text */ + return VideoTextMode; +} + +VOID +XenVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth) +{ + *Width = COLS; + *Height = ROWS; + *Depth = 0; +} + +VOID +XenVideoHideShowTextCursor(BOOL Show) +{ + /* We can't hide the cursor */ +} + +ULONG +XenVideoGetBufferSize(VOID) +{ + return COLS * ROWS * 2; +} + +VOID +XenVideoCopyOffScreenBufferToVRAM(PVOID Buffer) +{ + unsigned X, Y; + PUCHAR BufPtr = (PUCHAR) Buffer; + + for (Y = 0; Y < ROWS; Y++) + { + for (X = 0; X < COLS; X++) + { + XenVideoPutChar(BufPtr[0], BufPtr[1], X, Y); + BufPtr += 2; + } + } + XenConsFlush(); +} + /* EOF */