qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] unicore32-softmmu: Add a minimal curses screen supp


From: gxt
Subject: [Qemu-devel] [PATCH] unicore32-softmmu: Add a minimal curses screen support
Date: Thu, 26 Jul 2012 12:33:09 +0800

From: Guan Xuetao <address@hidden>

This patch adds a minimal curses screen support for unicore32-softmmu.
We assume 80*30 screen size to minimize the implementation.
Two problems are not solved, but they are innocuous.
1. curses windows will be blank when switching to monitor screen and back
2. backspace is not handled yet

Signed-off-by: Zhang Mengchi <address@hidden>
Signed-off-by: Guan Xuetao <address@hidden>
---
 target-unicore32/helper.c |   35 +++++++++++++++++++++++++++++++++--
 1 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/target-unicore32/helper.c b/target-unicore32/helper.c
index d6eb758..8556beb 100644
--- a/target-unicore32/helper.c
+++ b/target-unicore32/helper.c
@@ -13,6 +13,7 @@
 #include "gdbstub.h"
 #include "helper.h"
 #include "host-utils.h"
+#include "console.h"
 
 #undef DEBUG_UC32
 
@@ -186,10 +187,40 @@ uint32_t helper_cp0_get(CPUUniCore32State *env, uint32_t 
creg, uint32_t cop)
     return 0;
 }
 
+#ifdef CONFIG_CURSES
+/*
+ * FIXME:
+ *     1. curses windows will be blank when switching back
+ *     2. backspace is not handled yet
+ */
+static void putc_on_screen(unsigned char ch)
+{
+    static WINDOW *localwin;
+    static int init;
+
+    if (!init) {
+        /* Assume 80 * 30 screen to minimize the implementation */
+        localwin = newwin(30, 80, 0, 0);
+        scrollok(localwin, TRUE);
+        init = TRUE;
+    }
+
+    if ((isprint(ch)) || (ch == '\n') || (ch == '\r')) {
+        wprintw(localwin, "%c", ch);
+    } else {
+        wprintw(localwin, "0x%h", ch);
+    }
+
+    wrefresh(localwin);
+}
+#else
+#define putc_on_screen(c)               do { } while (0)
+#endif
+
 void helper_cp1_putc(target_ulong x)
 {
-    /* TODO: curses display should be added here for screen output. */
-    DPRINTF("%c", x);
+    putc_on_screen((unsigned char)x);   /* Output to screen */
+    DPRINTF("%c", x);                   /* Output to stdout */
 }
 #endif
 
-- 
1.7.0.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]