Index: contrib/conf/mips32-gx.sh
===================================================================
--- contrib/conf/mips32-gx.sh	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ contrib/conf/mips32-gx.sh	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -8,3 +8,3 @@
 fi
 
-gxemul $@ -E testmips -C R4000 -X image.boot -d d0:"$DISK_IMG"
+gxemul $@ -E testmips -C R4000 -X image.boot -M 32 -d d0:"$DISK_IMG"
Index: uspace/app/tetris/screen.c
===================================================================
--- uspace/app/tetris/screen.c	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/app/tetris/screen.c	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -63,4 +63,6 @@
 static int isset;               /* true => terminal is in game mode */
 
+static int use_color;		/* true => use colors */
+
 static const struct shape *lastshape;
 
@@ -79,5 +81,6 @@
 {
 	fflush(stdout);
-	console_set_rgb_color(fphone(stdout), 0xf0f0f0, color);
+	console_set_rgb_color(fphone(stdout), 0xf0f0f0,
+	    use_color ? color : 0x000000);
 }
 
@@ -128,4 +131,16 @@
 }
 
+static int get_display_color_sup(void)
+{
+	int rc;
+	int ccap;
+
+	rc = console_get_color_cap(fphone(stdout), &ccap);
+	if (rc != 0)
+		return 0;
+
+	return (ccap >= CONSOLE_CCAP_RGB);
+}
+
 /*
  * Set up screen mode.
@@ -142,4 +157,6 @@
 		Cols = ws.ws_col;
 	}
+
+	use_color = get_display_color_sup();
 	
 	if ((Rows < MINROWS) || (Cols < MINCOLS)) {
Index: uspace/lib/libc/generic/io/console.c
===================================================================
--- uspace/lib/libc/generic/io/console.c	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/lib/libc/generic/io/console.c	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -70,4 +70,15 @@
 }
 
+int console_get_color_cap(int phone, int *ccap)
+{
+	ipcarg_t ccap_tmp;
+	int rc;
+
+	rc = async_req_0_1(phone, CONSOLE_GET_COLOR_CAP, &ccap_tmp);
+	*ccap = ccap_tmp;
+
+	return rc;
+}
+
 void console_kcon_enable(int phone)
 {
Index: uspace/lib/libc/include/io/console.h
===================================================================
--- uspace/lib/libc/include/io/console.h	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/lib/libc/include/io/console.h	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -44,4 +44,11 @@
 } console_ev_type_t;
 
+enum {
+	CONSOLE_CCAP_NONE = 0,
+	CONSOLE_CCAP_STYLE,
+	CONSOLE_CCAP_INDEXED,
+	CONSOLE_CCAP_RGB
+};
+
 /** Console event structure. */
 typedef struct {
@@ -69,4 +76,5 @@
 
 extern void console_cursor_visibility(int phone, bool show);
+extern int console_get_color_cap(int phone, int *ccap);
 extern void console_kcon_enable(int phone);
 
Index: uspace/lib/libc/include/ipc/console.h
===================================================================
--- uspace/lib/libc/include/ipc/console.h	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/lib/libc/include/ipc/console.h	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -41,4 +41,5 @@
 typedef enum {
 	CONSOLE_GET_SIZE = VFS_OUT_LAST,
+	CONSOLE_GET_COLOR_CAP,
 	CONSOLE_GET_EVENT,
 	CONSOLE_GOTO,
Index: uspace/lib/libc/include/ipc/fb.h
===================================================================
--- uspace/lib/libc/include/ipc/fb.h	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/lib/libc/include/ipc/fb.h	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -42,4 +42,5 @@
 	FB_CLEAR,
 	FB_GET_CSIZE,
+	FB_GET_COLOR_CAP,
 	FB_CURSOR_VISIBILITY,
 	FB_CURSOR_GOTO,
@@ -72,4 +73,11 @@
 } fb_request_t;
 
+enum {
+	FB_CCAP_NONE = 0,
+	FB_CCAP_STYLE,
+	FB_CCAP_INDEXED,
+	FB_CCAP_RGB
+};
+
 #endif
 
Index: uspace/srv/console/console.c
===================================================================
--- uspace/srv/console/console.c	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/srv/console/console.c	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -70,4 +70,5 @@
 	ipcarg_t cols;  /**< Framebuffer columns */
 	ipcarg_t rows;  /**< Framebuffer rows */
+	int color_cap;	/**< Color capabilities (FB_CCAP_xxx) */
 } fb_info;
 
@@ -171,4 +172,17 @@
 		break;
 	}
+}
+
+int ccap_fb_to_con(int ccap_fb, int *ccap_con)
+{
+	switch (ccap_fb) {
+	case FB_CCAP_NONE: *ccap_con = CONSOLE_CCAP_NONE; break;
+	case FB_CCAP_STYLE: *ccap_con = CONSOLE_CCAP_STYLE; break;
+	case FB_CCAP_INDEXED: *ccap_con = CONSOLE_CCAP_INDEXED; break;
+	case FB_CCAP_RGB: *ccap_con = CONSOLE_CCAP_RGB; break;
+	default: return EINVAL;
+	}
+
+	return EOK;
 }
 
@@ -527,4 +541,7 @@
 	ipcarg_t arg2;
 	ipcarg_t arg3;
+
+	int cons_ccap;
+	int rc;
 	
 	async_serialize_start();
@@ -589,4 +606,12 @@
 			arg2 = fb_info.rows;
 			break;
+		case CONSOLE_GET_COLOR_CAP:
+			rc = ccap_fb_to_con(fb_info.color_cap, &cons_ccap);
+			if (rc != EOK) {
+				ipc_answer_0(callid, rc);
+				continue;
+			}
+			arg1 = cons_ccap;
+			break;
 		case CONSOLE_SET_STYLE:
 			fb_pending_flush();
@@ -640,4 +665,6 @@
 static bool console_init(void)
 {
+	ipcarg_t color_cap;
+
 	/* Connect to keyboard driver */
 	kbd_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_KEYBOARD, 0, 0);
@@ -675,4 +702,6 @@
 	async_req_0_0(fb_info.phone, FB_FLUSH);
 	async_req_0_2(fb_info.phone, FB_GET_CSIZE, &fb_info.cols, &fb_info.rows);
+	async_req_0_1(fb_info.phone, FB_GET_COLOR_CAP, &color_cap);
+	fb_info.color_cap = color_cap;
 	
 	/* Set up shared memory buffer. */
Index: uspace/srv/fb/ega.c
===================================================================
--- uspace/srv/fb/ega.c	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/srv/fb/ega.c	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -320,4 +320,7 @@
 			ipc_answer_2(callid, EOK, scr_width, scr_height);
 			continue;
+		case FB_GET_COLOR_CAP:
+			ipc_answer_1(callid, EOK, FB_CCAP_INDEXED);
+			continue;
 		case FB_CLEAR:
 			clrscr();
Index: uspace/srv/fb/fb.c
===================================================================
--- uspace/srv/fb/fb.c	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/srv/fb/fb.c	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -1648,4 +1648,7 @@
 			ipc_answer_2(callid, EOK, vport->cols, vport->rows);
 			continue;
+		case FB_GET_COLOR_CAP:
+			ipc_answer_1(callid, EOK, FB_CCAP_RGB);
+			continue;
 		case FB_SCROLL:
 			scroll = IPC_GET_ARG1(call);
Index: uspace/srv/fb/serial_console.c
===================================================================
--- uspace/srv/fb/serial_console.c	(revision 7d885873ba8a207aeca8500bbff5a801de79f26d)
+++ uspace/srv/fb/serial_console.c	(revision 50cfa6cd85f434dea3072039821d26b5943f656d)
@@ -389,4 +389,8 @@
 			ipc_answer_2(callid, EOK, scr_width, scr_height);
 			continue;
+		case FB_GET_COLOR_CAP:
+			ipc_answer_1(callid, EOK, color ? FB_CCAP_INDEXED :
+			    FB_CCAP_STYLE);
+			continue;
 		case FB_CLEAR:
 			serial_clrscr();
