Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision 94d614ef2057652d47a2a1df5f4c4809bbe31b2f)
+++ kernel/genarch/src/fb/fb.c	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -135,5 +135,12 @@
 }
 
-/** Put pixel - 8-bit depth (3:2:3) */
+/** Put pixel - 8-bit depth (color palette/3:2:3)
+ *
+ * Even though we try 3:2:3 color scheme here, an 8-bit framebuffer
+ * will most likely use a color palette. The color appearance
+ * will be pretty random and depend on the default installed
+ * palette. This could be fixed by supporting custom palette
+ * and setting it to simulate the 8-bit truecolor.
+ */
 static void rgb_1byte(void *dst, int rgb)
 {
@@ -141,5 +148,8 @@
 }
 
-/** Return pixel color - 8-bit depth (3:2:3) */
+/** Return pixel color - 8-bit depth (color palette/3:2:3)
+ *
+ * See the comment for rgb_1byte().
+ */
 static int byte1_rgb(void *src)
 {
@@ -330,12 +340,12 @@
 /** Initialize framebuffer as a chardev output device
  *
- * @param addr Physical address of the framebuffer
- * @param x    Screen width in pixels
- * @param y    Screen height in pixels
- * @param bpp  Bits per pixel (8, 16, 24, 32)
- * @param scan Bytes per one scanline
- *
- */
-void fb_init(uintptr_t addr, unsigned int x, unsigned int y, unsigned int bpp, unsigned int scan)
+ * @param addr 	Physical address of the framebuffer
+ * @param x    	Screen width in pixels
+ * @param y    	Screen height in pixels
+ * @param bpp  	Bits per pixel (8, 16, 24, 32)
+ * @param scan 	Bytes per one scanline
+ * @param align	Request alignment for 24bpp mode.
+ */
+void fb_init(uintptr_t addr, unsigned int x, unsigned int y, unsigned int bpp, unsigned int scan, bool align)
 {
 	switch (bpp) {
@@ -353,5 +363,8 @@
 			rgb2scr = rgb_3byte;
 			scr2rgb = byte3_rgb;
-			pixelbytes = 3;
+			if (align)
+				pixelbytes = 4;
+			else
+				pixelbytes = 3;
 			break;
 		case 32:
