Index: kernel/genarch/include/fb/visuals.h
===================================================================
--- kernel/genarch/include/fb/visuals.h	(revision 2bc137c2ead5aef4703a85727d96bf8f99c6f418)
+++ kernel/genarch/include/fb/visuals.h	(revision 228b13511773d4e4522facc70f00a9efccb1be5e)
@@ -37,4 +37,5 @@
 
 #define VISUAL_INDIRECT_8	0
+
 #define VISUAL_RGB_5_5_5	1
 #define VISUAL_RGB_5_6_5	2
@@ -43,4 +44,6 @@
 #define VISUAL_RGB_0_8_8_8	5
 
+#define VISUAL_BGR_0_8_8_8	6
+
 #endif
 
Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision 2bc137c2ead5aef4703a85727d96bf8f99c6f418)
+++ kernel/genarch/src/fb/fb.c	(revision 228b13511773d4e4522facc70f00a9efccb1be5e)
@@ -106,4 +106,15 @@
 }
 
+static void bgr_byte0888(void *dst, int rgb)
+{
+	*((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 | RED(rgb, 8);
+}
+
+static int byte0888_bgr(void *src)
+{
+	int color = *(uint32_t *)(src);
+	return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) | ((color >> 16) & 0xff);
+}
+
 static void rgb_byte888(void *dst, int rgb)
 {
@@ -403,4 +414,9 @@
 		pixelbytes = 4;
 		break;
+	case VISUAL_BGR_0_8_8_8:
+		rgb2scr = bgr_byte0888;
+		scr2rgb = byte0888_bgr;
+		pixelbytes = 4;
+		break;
 	default:
 		panic("Unsupported visual.\n");
