Index: boot/arch/sparc64/loader/main.c
===================================================================
--- boot/arch/sparc64/loader/main.c	(revision 0fbfa0d39223c599e79b827b86e228bada23961b)
+++ boot/arch/sparc64/loader/main.c	(revision 8b4be29e60da1d7e6355cb2b0bf8ae7e3c561965)
@@ -32,4 +32,5 @@
 #include "_components.h"
 #include <ofw.h>
+#include "ofwarch.h"
 #include <align.h>
 
@@ -60,8 +61,10 @@
 	}
 	bootinfo.screen.addr = ofw_translate(bootinfo.screen.addr);
+	/* transform scanline to bytes with respect to potential alignment */
+	bootinfo.screen.scanline = bootinfo.screen.scanline*bpp2align[bootinfo.screen.bpp >> 3];
 	
 	if (!ofw_keyboard(&bootinfo.keyboard))
 		printf("Error: unable to get keyboard properties\n");
-	
+
 	printf("\nDevice statistics\n");
 	printf(" memory: %dM\n", bootinfo.memmap.total>>20);
Index: boot/arch/sparc64/loader/ofwarch.c
===================================================================
--- boot/arch/sparc64/loader/ofwarch.c	(revision 0fbfa0d39223c599e79b827b86e228bada23961b)
+++ boot/arch/sparc64/loader/ofwarch.c	(revision 8b4be29e60da1d7e6355cb2b0bf8ae7e3c561965)
@@ -36,4 +36,12 @@
 #include <printf.h>
 
+int bpp2align[] = {
+	[0] = 0,		/** Invalid bpp. */
+	[1] = 1,		/** 8bpp is not aligned. */
+	[2] = 2,		/** 16bpp is naturally aligned. */
+	[3] = 4,		/** 24bpp is aligned on 4 byte boundary. */
+	[4] = 4,		/** 32bpp is naturally aligned. */
+};
+
 void write(const char *str, const int len)
 {
Index: boot/arch/sparc64/loader/ofwarch.h
===================================================================
--- boot/arch/sparc64/loader/ofwarch.h	(revision 0fbfa0d39223c599e79b827b86e228bada23961b)
+++ boot/arch/sparc64/loader/ofwarch.h	(revision 8b4be29e60da1d7e6355cb2b0bf8ae7e3c561965)
@@ -33,3 +33,5 @@
 #define OFW_SIZE_CELLS		2
 
+extern int bpp2align[];
+
 #endif
