Fix tinycurses color output on the VGA console.
authorUlf Jordan <jordan@chalmers.se>
Mon, 18 Aug 2008 19:28:42 +0000 (19:28 +0000)
committerJordan Crouse <jordan.crouse@amd.com>
Mon, 18 Aug 2008 19:28:42 +0000 (19:28 +0000)
The CGA compatible 16 color VGA text mode expects Intensity RGB color
specifications, in the order IRGB from most to least significant bit.
Curses COLOR_ macros follows ANSI X3.64/ISO 6429/ECMA-48, specifying
RGB color in the order BGR from most to least significant bit.
Consequently, it is necessary to swap the red and blue bits.

Signed-off-by: Ulf Jordan <jordan@chalmers.se>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3516 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

payloads/libpayload/curses/tinycurses.c

index b3f7bbc5027cf94e0044dc973ec2ce65b0e77aba..c901ff66b0547c32436e0bef1662bc4b375a9513 100644 (file)
@@ -658,6 +658,8 @@ int whline(WINDOW *win, chtype ch, int n)
        return OK;
 }
 
+#define SWAP_RED_BLUE(c) \
+       (((c) & 0x4400) >> 2) | ((c) & 0xAA00) | (((c) & 0x1100) << 2)
 int wnoutrefresh(WINDOW *win)
 {
        // FIXME.
@@ -720,6 +722,8 @@ int wnoutrefresh(WINDOW *win)
                                serial_putchar(ch);
                        }
 
+                       c = SWAP_RED_BLUE(c);
+
                        if (curses_flags & F_ENABLE_CONSOLE) {
                                ch = win->_line[y].text[x].chars[0];