Index: kernel/arch/amd64/src/boot/multiboot.S
===================================================================
--- kernel/arch/amd64/src/boot/multiboot.S	(revision ec18e45485def102b3bea20e4497792935997f77)
+++ kernel/arch/amd64/src/boot/multiboot.S	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -38,6 +38,4 @@
 #include <arch/cpu.h>
 
-// TODO: most of this file can be rewritten in C
-
 #define START_STACK  (BOOT_OFFSET - BOOT_STACK_SIZE)
 
@@ -52,5 +50,5 @@
 
 .macro pm_status msg
-#if defined(CONFIG_EGA) && !defined(CONFIG_FB)
+#ifdef CONFIG_EGA
 	pushl %esi
 	movl \msg, %esi
@@ -69,11 +67,6 @@
 multiboot_header:
 	.long MULTIBOOT_HEADER_MAGIC
-#ifdef CONFIG_FB
 	.long MULTIBOOT_HEADER_FLAGS
 	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)  /* checksum */
-#else
-	.long MULTIBOOT_HEADER_FLAGS_NOFB
-	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS_NOFB)  /* checksum */
-#endif
 	.long multiboot_header
 	.long unmapped_start
@@ -81,10 +74,4 @@
 	.long 0
 	.long multiboot_image_start
-#ifdef CONFIG_FB
-	.long 0
-	.long CONFIG_BFB_WIDTH
-	.long CONFIG_BFB_HEIGHT
-	.long CONFIG_BFB_BPP
-#endif
 
 SYMBOL(multiboot_image_start)
@@ -171,4 +158,6 @@
 	sse2_supported:
 
+#include "vesa_prot.inc"
+
 	pm2_status $status_prot2
 
@@ -579,4 +568,6 @@
 
 	ret
+
+#include "vesa_real.inc"
 
 .section K_INI_PTLS, "aw", @progbits
@@ -717,6 +708,10 @@
 status_prot:
 	.asciz "[prot] "
+status_vesa_copy:
+	.asciz "[vesa_copy] "
 status_multiboot_cmdline:
 	.asciz "[multiboot_cmdline] "
+status_vesa_real:
+	.asciz "[vesa_real] "
 status_prot2:
 	.asciz "[prot2] "
Index: kernel/arch/amd64/src/boot/vesa_prot.inc
===================================================================
--- kernel/arch/amd64/src/boot/vesa_prot.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/amd64/src/boot/vesa_prot.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,1 @@
+../../../ia32/src/boot/vesa_prot.inc
Index: kernel/arch/amd64/src/boot/vesa_real.inc
===================================================================
--- kernel/arch/amd64/src/boot/vesa_real.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/amd64/src/boot/vesa_real.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,1 @@
+../../../ia32/src/boot/vesa_real.inc
Index: kernel/arch/amd64/src/boot/vesa_ret.inc
===================================================================
--- kernel/arch/amd64/src/boot/vesa_ret.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/amd64/src/boot/vesa_ret.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,24 @@
+.code32
+vesa_init_protected:
+	cli
+	cld
+
+	/* Initialize stack pointer */
+	movl $START_STACK, %esp
+
+	/* Kernel data + stack */
+	movw $GDT_SELECTOR(KDATA_DES), %cx
+	movw %cx, %es
+	movw %cx, %ds
+	movw %cx, %ss
+
+	/*
+	 * Simics seems to remove hidden part of GS on entering user mode
+	 * when _visible_ part of GS does not point to user-mode segment.
+	 */
+
+	movw $GDT_SELECTOR(UDATA_DES), %cx
+	movw %cx, %fs
+	movw %cx, %gs
+
+	jmpl $GDT_SELECTOR(KTEXT32_DES), $vesa_meeting_point
Index: kernel/arch/amd64/src/boot/vga323.pal
===================================================================
--- kernel/arch/amd64/src/boot/vga323.pal	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/amd64/src/boot/vga323.pal	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,1 @@
+../../../ia32/src/boot/vga323.pal
Index: kernel/arch/ia32/src/boot/multiboot.S
===================================================================
--- kernel/arch/ia32/src/boot/multiboot.S	(revision ec18e45485def102b3bea20e4497792935997f77)
+++ kernel/arch/ia32/src/boot/multiboot.S	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -38,6 +38,4 @@
 #include <arch/cpu.h>
 
-// TODO: most of this file can be rewritten in C
-
 #define START_STACK  (BOOT_OFFSET - BOOT_STACK_SIZE)
 
@@ -52,5 +50,5 @@
 
 .macro pm_status msg
-#if defined(CONFIG_EGA) && !defined(CONFIG_FB)
+#ifdef CONFIG_EGA
 	pushl %esi
 	movl \msg, %esi
@@ -68,11 +66,6 @@
 multiboot_header:
 	.long MULTIBOOT_HEADER_MAGIC
-#ifdef CONFIG_FB
 	.long MULTIBOOT_HEADER_FLAGS
 	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)  /* checksum */
-#else
-	.long MULTIBOOT_HEADER_FLAGS_NOFB
-	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS_NOFB)  /* checksum */
-#endif
 	.long multiboot_header
 	.long unmapped_start
@@ -80,10 +73,4 @@
 	.long 0
 	.long multiboot_image_start
-#ifdef CONFIG_FB
-	.long 0
-	.long CONFIG_BFB_WIDTH
-	.long CONFIG_BFB_HEIGHT
-	.long CONFIG_BFB_BPP
-#endif
 
 SYMBOL(multiboot_image_start)
@@ -117,4 +104,6 @@
 
 	pm_status $status_prot
+
+#include "vesa_prot.inc"
 
 #ifndef PROCESSOR_i486
@@ -696,4 +685,6 @@
 	ret
 
+#include "vesa_real.inc"
+
 .section K_DATA_START, "aw", @progbits
 
@@ -729,6 +720,10 @@
 status_non_pse:
 	.asciz "[non_pse] "
+status_vesa_copy:
+	.asciz "[vesa_copy] "
 status_multiboot_cmdline:
 	.asciz "[multiboot_cmdline] "
+status_vesa_real:
+	.asciz "[vesa_real] "
 status_prot2:
 	.asciz "[prot2] "
Index: kernel/arch/ia32/src/boot/vesa_prot.inc
===================================================================
--- kernel/arch/ia32/src/boot/vesa_prot.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/ia32/src/boot/vesa_prot.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,127 @@
+#ifdef CONFIG_FB
+
+#define MBINFO_BIT_CMDLINE      2
+#define MBINFO_OFFSET_CMDLINE   16
+
+	/* Copy real mode VESA initialization code */
+
+	pm_status $status_vesa_copy
+
+	mov $vesa_init, %esi
+	mov $VESA_INIT_SEGMENT << 4, %edi
+	mov $e_vesa_init - vesa_init, %ecx
+	rep movsb
+
+	/* Check for multiboot command line */
+
+	pm_status $status_multiboot_cmdline
+
+	mov multiboot_eax, %eax
+	cmp $MULTIBOOT_LOADER_MAGIC, %eax
+	jne no_cmdline
+
+	mov multiboot_ebx, %ebx
+	mov (%ebx), %eax
+	bt $MBINFO_BIT_CMDLINE, %eax
+	jnc no_cmdline
+
+	/* Skip the kernel path in command line */
+
+	mov MBINFO_OFFSET_CMDLINE(%ebx), %esi
+
+	skip_loop:
+		lodsb
+
+		cmp $0, %al
+		je no_cmdline
+
+		cmp $' ', %al
+		je skip_loop_done
+
+		jmp skip_loop
+	skip_loop_done:
+
+	space_loop:
+		mov (%esi), %al
+
+		cmp $0, %al
+		je no_cmdline
+
+		cmp $' ', %al
+		jne space_loop_done
+
+		inc %esi
+		jmp space_loop
+	space_loop_done:
+
+	/* Copy at most 23 characters from command line */
+
+	mov $VESA_INIT_SEGMENT << 4, %edi
+	add $default_mode - vesa_init, %edi
+	mov $23, %ecx
+
+	cmd_loop:
+		lodsb
+		stosb
+
+		cmp $0, %al
+		je cmd_loop_done
+
+		loop cmd_loop
+	cmd_loop_done:
+
+	/* Zero termination */
+
+	xor %eax, %eax
+	stosb
+
+	no_cmdline:
+
+	/* Jump to the real mode */
+
+	pm_status $status_vesa_real
+
+	mov $VESA_INIT_SEGMENT << 4, %edi
+	jmpl *%edi
+
+	vesa_meeting_point:
+		/* Returned back to protected mode */
+
+		/*
+		 * Initialize Global Descriptor Table and
+		 * Interrupt Descriptor Table registers
+		 */
+		lgdtl bootstrap_gdtr
+		lidtl bootstrap_idtr
+
+		movzx %ax, %ecx
+		mov %ecx, KA2PA(bfb_scanline)
+
+		shr $16, %eax
+		mov %ax, KA2PA(bfb_bpp)
+
+		movzx %bx, %ecx
+		mov %ecx, KA2PA(bfb_height)
+
+		shr $16, %ebx
+		mov %ebx, KA2PA(bfb_width)
+
+		mov %dl, KA2PA(bfb_green_pos)
+
+		shr $8, %edx
+		mov %dl, KA2PA(bfb_green_size)
+
+		shr $8, %edx
+		mov %dl, KA2PA(bfb_red_pos)
+
+		shr $8, %edx
+		mov %dl, KA2PA(bfb_red_size)
+
+		mov %esi, %edx
+		mov %dl, KA2PA(bfb_blue_pos)
+
+		shr $8, %edx
+		mov %dl, KA2PA(bfb_blue_size)
+
+		mov %edi, KA2PA(bfb_addr)
+#endif
Index: kernel/arch/ia32/src/boot/vesa_real.inc
===================================================================
--- kernel/arch/ia32/src/boot/vesa_real.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/ia32/src/boot/vesa_real.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,415 @@
+#ifdef CONFIG_FB
+
+#include <macros.h>
+
+#define VESA_INFO_SIZE 1024
+
+#define VESA_MODE_ATTRIBUTES_OFFSET  0
+#define VESA_MODE_LIST_PTR_OFFSET    14
+#define VESA_MODE_SCANLINE_OFFSET    16
+#define VESA_MODE_WIDTH_OFFSET       18
+#define VESA_MODE_HEIGHT_OFFSET      20
+#define VESA_MODE_BPP_OFFSET         25
+#define VESA_MODE_RED_MASK_OFFSET    31
+#define VESA_MODE_RED_POS_OFFSET     32
+#define VESA_MODE_GREEN_MASK_OFFSET  33
+#define VESA_MODE_GREEN_POS_OFFSET   34
+#define VESA_MODE_BLUE_MASK_OFFSET   35
+#define VESA_MODE_BLUE_POS_OFFSET    36
+#define VESA_MODE_PHADDR_OFFSET      40
+
+#define VESA_END_OF_MODES  0xffff
+
+#define VESA_OK  0x4f
+
+#define VESA_GET_INFO       0x4f00
+#define VESA_GET_MODE_INFO  0x4f01
+#define VESA_SET_MODE       0x4f02
+#define VESA_SET_PALETTE    0x4f09
+
+.code32
+vesa_init:
+	lidtl vesa_idtr
+
+	mov $GDT_SELECTOR(VESA_INIT_DATA_DES), %bx
+
+	mov %bx, %es
+	mov %bx, %fs
+	mov %bx, %gs
+	mov %bx, %ds
+	mov %bx, %ss
+
+	jmp $GDT_SELECTOR(VESA_INIT_CODE_DES), $vesa_init_real - vesa_init
+
+vesa_idtr:
+	.word 0x3ff
+	.long 0
+
+.code16
+vesa_init_real:
+	mov %cr0, %eax
+	and $~CR0_PE, %eax
+	mov %eax, %cr0
+
+	jmp $VESA_INIT_SEGMENT, $vesa_init_real2 - vesa_init
+
+vesa_init_real2:
+	mov $VESA_INIT_SEGMENT, %bx
+
+	mov %bx, %es
+	mov %bx, %fs
+	mov %bx, %gs
+	mov %bx, %ds
+	mov %bx, %ss
+
+	movl %esp, %eax
+	movl $0x0000fffc, %esp
+	movl $0x0000fffc, %ebp
+	pushl %eax
+
+	/* Parse default mode string */
+
+	mov $default_mode - vesa_init, %di
+	xor %eax, %eax
+	xor %ebx, %ebx
+
+	mov $8, %ecx
+	parse_width:
+		mov (%di), %al
+
+		/* Check for digit */
+
+		cmp $'0', %al
+		jb parse_width_done
+
+		cmp $'9', %al
+		ja parse_width_done
+
+		sub $'0', %al
+
+		/* Multiply default_width by 10 and add digit */
+
+		mov default_width - vesa_init, %bx
+		lea (%ebx, %ebx, 4), %ebx
+		shl $1, %ebx
+		add %ax, %bx
+		mov %bx, default_width - vesa_init
+
+		inc %di
+		loop parse_width
+	parse_width_done:
+
+	mov (%di), %al
+	cmp $0, %al
+	jz parse_done
+	inc %di
+
+	mov $8, %ecx
+	parse_height:
+		mov (%di), %al
+
+		/* Check for digit */
+
+		cmp $'0', %al
+		jb parse_height_done
+
+		cmp $'9', %al
+		ja parse_height_done
+
+		sub $'0', %al
+
+		/* Multiply default_height by 10 and add digit */
+
+		mov default_height - vesa_init, %bx
+		lea (%ebx, %ebx, 4), %ebx
+		shl $1, %ebx
+		add %ax, %bx
+		mov %bx, default_height - vesa_init
+
+		inc %di
+		loop parse_height
+	parse_height_done:
+
+	mov (%di), %al
+	cmp $0, %al
+	jz parse_done
+	inc %di
+
+	mov $4, %ecx
+	parse_bpp:
+		mov (%di), %al
+
+		/* Check for digit */
+
+		cmp $'0', %al
+		jb parse_bpp_done
+
+		cmp $'9', %al
+		ja parse_bpp_done
+
+		sub $'0', %al
+
+		/* Multiply default_bpp by 10 and add digit */
+
+		mov default_bpp - vesa_init, %bx
+		lea (%ebx, %ebx, 4), %ebx
+		shl $1, %ebx
+		add %ax, %bx
+		mov %bx, default_bpp - vesa_init
+
+		inc %di
+		loop parse_bpp
+	parse_bpp_done:
+
+	parse_done:
+
+	mov $VESA_GET_INFO, %ax
+	mov $e_vesa_init - vesa_init, %di
+	push %di
+	/* Write the "VBE2" signature into the info structure in order
+	 * to get proper mode information. The presence of "VBE2"
+	 * indicates two things:
+	 *
+	 *  - VBE controller information structure is expected to be
+	 *    512 bytes long instead of 256 bytes.
+	 *  - The BIOS should report VBE 3.0 information (potentially
+	 *    including non-standard modes in the mode list).
+	 */
+	movl $0x32454256, (%di)
+	int $0x10
+
+	pop %di
+	cmp $VESA_OK, %al
+	jnz no_mode
+
+	mov 2 + VESA_MODE_LIST_PTR_OFFSET(%di), %si
+	mov %si, %gs
+	mov VESA_MODE_LIST_PTR_OFFSET(%di), %si
+
+	add $VESA_INFO_SIZE, %di
+
+	next_mode:
+		/* Try next mode */
+
+		mov %gs:(%si), %cx
+		cmp $VESA_END_OF_MODES, %cx
+		je no_mode
+
+		inc %si
+		inc %si
+		push %cx
+		push %di
+		push %si
+		mov $VESA_GET_MODE_INFO, %ax
+		int $0x10
+
+		pop %si
+		pop %di
+		pop %cx
+		cmp $VESA_OK, %al
+		jne no_mode
+
+		/*
+		 * Check for proper attributes (supported,
+		 * color, graphics, linear framebuffer).
+		 */
+
+		mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax
+		and $0x99, %ax
+		cmp $0x99, %ax
+		jne next_mode
+
+		/* Check for proper resolution */
+
+		mov default_width - vesa_init, %ax
+		cmp VESA_MODE_WIDTH_OFFSET(%di), %ax
+		jne next_mode
+
+		mov default_height - vesa_init, %ax
+		cmp VESA_MODE_HEIGHT_OFFSET(%di), %ax
+		jne next_mode
+
+		/* Check for proper bpp */
+
+		mov default_bpp - vesa_init, %al
+		cmp VESA_MODE_BPP_OFFSET(%di), %al
+		je set_mode
+
+		mov $24, %al
+		cmp default_bpp - vesa_init, %al
+		jne next_mode
+
+		/* For 24 bpp modes accept also 32 bit bpp */
+
+		mov $32, %al
+		cmp VESA_MODE_BPP_OFFSET(%di), %al
+		jne next_mode
+
+	set_mode:
+		mov %cx, %bx
+		or $0xc000, %bx
+		push %di
+		mov $VESA_SET_MODE, %ax
+		int $0x10
+
+		pop %di
+		cmp $VESA_OK, %al
+		jnz no_mode
+
+		/* Set 3:2:3 VGA palette */
+
+		mov VESA_MODE_BPP_OFFSET(%di), %al
+		cmp $8, %al
+		jnz vga_not_set
+
+		mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax
+		push %di
+		mov $vga323 - vesa_init, %di
+		mov $0x100, %ecx
+
+		/* Test if VGA compatible registers are present */
+		bt $5, %ax
+		jnc vga_compat
+
+			/* Use VESA routine to set the palette */
+
+			mov $VESA_SET_PALETTE, %ax
+			xor %bl, %bl
+			xor %dx, %dx
+			int $0x10
+
+			cmp $0x00, %ah
+			je vga_not_compat
+
+		vga_compat:
+
+			/* Use VGA registers to set the palette */
+
+			movw $0x3c6, %dx  /* set palette mask */
+			movb $0xff, %al
+			outb %al, %dx
+
+			movw $0x3c8, %dx  /* first index to set */
+			xor %al, %al
+			outb %al, %dx
+
+			movw $0x3c9, %dx  /* data port */
+
+			vga_loop:
+				movb %es:2(%di), %al
+				outb %al, %dx
+
+				movb %es:1(%di), %al
+				outb %al, %dx
+
+				movb %es:(%di), %al
+				outb %al, %dx
+
+				addw $4, %di
+			loop vga_loop
+
+		vga_not_compat:
+
+			pop %di
+
+		vga_not_set:
+
+		/*
+		 * Store mode parameters:
+		 *  eax = bpp[16] scanline[16]
+		 *  ebx = width[16]  height[16]
+		 *  edx = red_mask[8] red_pos[8] green_mask[8] green_pos[8]
+		 *  esi = blue_mask[8] blue_pos[8]
+		 *  edi = linear frame buffer
+		 */
+
+		mov VESA_MODE_BPP_OFFSET(%di), %al
+		xor %ah, %ah
+		shl $16, %eax
+		mov VESA_MODE_SCANLINE_OFFSET(%di), %ax
+
+		mov VESA_MODE_WIDTH_OFFSET(%di), %bx
+		shl $16, %ebx
+		mov VESA_MODE_HEIGHT_OFFSET(%di), %bx
+
+		mov VESA_MODE_BLUE_MASK_OFFSET(%di), %dl
+		shl $8, %edx
+		mov VESA_MODE_BLUE_POS_OFFSET(%di), %dl
+		mov %edx, %esi
+
+		mov VESA_MODE_RED_MASK_OFFSET(%di), %dl
+		shl $8, %edx
+		mov VESA_MODE_RED_POS_OFFSET(%di), %dl
+
+		shl $8, %edx
+		mov VESA_MODE_GREEN_MASK_OFFSET(%di), %dl
+		shl $8, %edx
+		mov VESA_MODE_GREEN_POS_OFFSET(%di), %dl
+
+		mov VESA_MODE_PHADDR_OFFSET(%di), %edi
+
+		vesa_leave_real:
+
+			mov %cr0, %ecx
+			or $CR0_PE, %ecx
+			mov %ecx, %cr0
+
+			jmp vesa_leave_real2
+
+		vesa_leave_real2:
+
+			ljmpl $GDT_SELECTOR(KTEXT32_DES), $(vesa_init_protected - vesa_init + VESA_INIT_SEGMENT << 4)
+
+	no_mode:
+
+		/* No prefered mode found */
+
+		mov $0x111, %cx
+		push %di
+		push %cx
+		mov $VESA_GET_MODE_INFO, %ax
+		int $0x10
+
+		pop %cx
+		pop %di
+		cmp $VESA_OK, %al
+		jnz text_mode
+		jz set_mode  /* force relative jump */
+
+	text_mode:
+
+		/* Reset to EGA text mode (because of problems with VESA) */
+
+		mov $0x0003, %ax
+		int $0x10
+
+		xor %eax, %eax
+		xor %ebx, %ebx
+		xor %edx, %edx
+		xor %edi, %edi
+
+		jz vesa_leave_real  /* force relative jump */
+
+vga323:
+#include "vga323.pal"
+
+default_width:
+	.word 0
+
+default_height:
+	.word 0
+
+default_bpp:
+	.byte 0
+
+default_mode:
+	.ascii STRING(CONFIG_BFB_MODE)
+	.ascii "-"
+	.asciz STRING(CONFIG_BFB_BPP)
+	.fill 24
+
+#include "vesa_ret.inc"
+
+.align 4
+e_vesa_init:
+#endif
Index: kernel/arch/ia32/src/boot/vesa_ret.inc
===================================================================
--- kernel/arch/ia32/src/boot/vesa_ret.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/ia32/src/boot/vesa_ret.inc	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,17 @@
+.code32
+vesa_init_protected:
+	cli
+	cld
+
+	/* Initialize stack pointer */
+	movl $START_STACK, %esp
+
+	/* Kernel data + stack */
+	movw $GDT_SELECTOR(KDATA_DES), %cx
+	movw %cx, %es
+	movw %cx, %fs
+	movw %cx, %gs
+	movw %cx, %ds
+	movw %cx, %ss
+
+	jmpl $GDT_SELECTOR(KTEXT_DES), $vesa_meeting_point
Index: kernel/arch/ia32/src/boot/vga323.pal
===================================================================
--- kernel/arch/ia32/src/boot/vga323.pal	(revision 8be323084b791c62927f9cbb14696265246370dd)
+++ kernel/arch/ia32/src/boot/vga323.pal	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -0,0 +1,256 @@
+	.byte 0x3f, 0x3f, 0x3f, 0x00
+	.byte 0x36, 0x3f, 0x3f, 0x00
+	.byte 0x2d, 0x3f, 0x3f, 0x00
+	.byte 0x24, 0x3f, 0x3f, 0x00
+	.byte 0x1b, 0x3f, 0x3f, 0x00
+	.byte 0x12, 0x3f, 0x3f, 0x00
+	.byte 0x09, 0x3f, 0x3f, 0x00
+	.byte 0x00, 0x3f, 0x3f, 0x00
+	.byte 0x3f, 0x2a, 0x3f, 0x00
+	.byte 0x36, 0x2a, 0x3f, 0x00
+	.byte 0x2d, 0x2a, 0x3f, 0x00
+	.byte 0x24, 0x2a, 0x3f, 0x00
+	.byte 0x1b, 0x2a, 0x3f, 0x00
+	.byte 0x12, 0x2a, 0x3f, 0x00
+	.byte 0x09, 0x2a, 0x3f, 0x00
+	.byte 0x00, 0x2a, 0x3f, 0x00
+	.byte 0x3f, 0x15, 0x3f, 0x00
+	.byte 0x36, 0x15, 0x3f, 0x00
+	.byte 0x2d, 0x15, 0x3f, 0x00
+	.byte 0x24, 0x15, 0x3f, 0x00
+	.byte 0x1b, 0x15, 0x3f, 0x00
+	.byte 0x12, 0x15, 0x3f, 0x00
+	.byte 0x09, 0x15, 0x3f, 0x00
+	.byte 0x00, 0x15, 0x3f, 0x00
+	.byte 0x3f, 0x00, 0x3f, 0x00
+	.byte 0x36, 0x00, 0x3f, 0x00
+	.byte 0x2d, 0x00, 0x3f, 0x00
+	.byte 0x24, 0x00, 0x3f, 0x00
+	.byte 0x1b, 0x00, 0x3f, 0x00
+	.byte 0x12, 0x00, 0x3f, 0x00
+	.byte 0x09, 0x00, 0x3f, 0x00
+	.byte 0x00, 0x00, 0x3f, 0x00
+	.byte 0x3f, 0x3f, 0x36, 0x00
+	.byte 0x36, 0x3f, 0x36, 0x00
+	.byte 0x2d, 0x3f, 0x36, 0x00
+	.byte 0x24, 0x3f, 0x36, 0x00
+	.byte 0x1b, 0x3f, 0x36, 0x00
+	.byte 0x12, 0x3f, 0x36, 0x00
+	.byte 0x09, 0x3f, 0x36, 0x00
+	.byte 0x00, 0x3f, 0x36, 0x00
+	.byte 0x3f, 0x2a, 0x36, 0x00
+	.byte 0x36, 0x2a, 0x36, 0x00
+	.byte 0x2d, 0x2a, 0x36, 0x00
+	.byte 0x24, 0x2a, 0x36, 0x00
+	.byte 0x1b, 0x2a, 0x36, 0x00
+	.byte 0x12, 0x2a, 0x36, 0x00
+	.byte 0x09, 0x2a, 0x36, 0x00
+	.byte 0x00, 0x2a, 0x36, 0x00
+	.byte 0x3f, 0x15, 0x36, 0x00
+	.byte 0x36, 0x15, 0x36, 0x00
+	.byte 0x2d, 0x15, 0x36, 0x00
+	.byte 0x24, 0x15, 0x36, 0x00
+	.byte 0x1b, 0x15, 0x36, 0x00
+	.byte 0x12, 0x15, 0x36, 0x00
+	.byte 0x09, 0x15, 0x36, 0x00
+	.byte 0x00, 0x15, 0x36, 0x00
+	.byte 0x3f, 0x00, 0x36, 0x00
+	.byte 0x36, 0x00, 0x36, 0x00
+	.byte 0x2d, 0x00, 0x36, 0x00
+	.byte 0x24, 0x00, 0x36, 0x00
+	.byte 0x1b, 0x00, 0x36, 0x00
+	.byte 0x12, 0x00, 0x36, 0x00
+	.byte 0x09, 0x00, 0x36, 0x00
+	.byte 0x00, 0x00, 0x36, 0x00
+	.byte 0x3f, 0x3f, 0x2d, 0x00
+	.byte 0x36, 0x3f, 0x2d, 0x00
+	.byte 0x2d, 0x3f, 0x2d, 0x00
+	.byte 0x24, 0x3f, 0x2d, 0x00
+	.byte 0x1b, 0x3f, 0x2d, 0x00
+	.byte 0x12, 0x3f, 0x2d, 0x00
+	.byte 0x09, 0x3f, 0x2d, 0x00
+	.byte 0x00, 0x3f, 0x2d, 0x00
+	.byte 0x3f, 0x2a, 0x2d, 0x00
+	.byte 0x36, 0x2a, 0x2d, 0x00
+	.byte 0x2d, 0x2a, 0x2d, 0x00
+	.byte 0x24, 0x2a, 0x2d, 0x00
+	.byte 0x1b, 0x2a, 0x2d, 0x00
+	.byte 0x12, 0x2a, 0x2d, 0x00
+	.byte 0x09, 0x2a, 0x2d, 0x00
+	.byte 0x00, 0x2a, 0x2d, 0x00
+	.byte 0x3f, 0x15, 0x2d, 0x00
+	.byte 0x36, 0x15, 0x2d, 0x00
+	.byte 0x2d, 0x15, 0x2d, 0x00
+	.byte 0x24, 0x15, 0x2d, 0x00
+	.byte 0x1b, 0x15, 0x2d, 0x00
+	.byte 0x12, 0x15, 0x2d, 0x00
+	.byte 0x09, 0x15, 0x2d, 0x00
+	.byte 0x00, 0x15, 0x2d, 0x00
+	.byte 0x3f, 0x00, 0x2d, 0x00
+	.byte 0x36, 0x00, 0x2d, 0x00
+	.byte 0x2d, 0x00, 0x2d, 0x00
+	.byte 0x24, 0x00, 0x2d, 0x00
+	.byte 0x1b, 0x00, 0x2d, 0x00
+	.byte 0x12, 0x00, 0x2d, 0x00
+	.byte 0x09, 0x00, 0x2d, 0x00
+	.byte 0x00, 0x00, 0x2d, 0x00
+	.byte 0x3f, 0x3f, 0x24, 0x00
+	.byte 0x36, 0x3f, 0x24, 0x00
+	.byte 0x2d, 0x3f, 0x24, 0x00
+	.byte 0x24, 0x3f, 0x24, 0x00
+	.byte 0x1b, 0x3f, 0x24, 0x00
+	.byte 0x12, 0x3f, 0x24, 0x00
+	.byte 0x09, 0x3f, 0x24, 0x00
+	.byte 0x00, 0x3f, 0x24, 0x00
+	.byte 0x3f, 0x2a, 0x24, 0x00
+	.byte 0x36, 0x2a, 0x24, 0x00
+	.byte 0x2d, 0x2a, 0x24, 0x00
+	.byte 0x24, 0x2a, 0x24, 0x00
+	.byte 0x1b, 0x2a, 0x24, 0x00
+	.byte 0x12, 0x2a, 0x24, 0x00
+	.byte 0x09, 0x2a, 0x24, 0x00
+	.byte 0x00, 0x2a, 0x24, 0x00
+	.byte 0x3f, 0x15, 0x24, 0x00
+	.byte 0x36, 0x15, 0x24, 0x00
+	.byte 0x2d, 0x15, 0x24, 0x00
+	.byte 0x24, 0x15, 0x24, 0x00
+	.byte 0x1b, 0x15, 0x24, 0x00
+	.byte 0x12, 0x15, 0x24, 0x00
+	.byte 0x09, 0x15, 0x24, 0x00
+	.byte 0x00, 0x15, 0x24, 0x00
+	.byte 0x3f, 0x00, 0x24, 0x00
+	.byte 0x36, 0x00, 0x24, 0x00
+	.byte 0x2d, 0x00, 0x24, 0x00
+	.byte 0x24, 0x00, 0x24, 0x00
+	.byte 0x1b, 0x00, 0x24, 0x00
+	.byte 0x12, 0x00, 0x24, 0x00
+	.byte 0x09, 0x00, 0x24, 0x00
+	.byte 0x00, 0x00, 0x24, 0x00
+	.byte 0x3f, 0x3f, 0x1b, 0x00
+	.byte 0x36, 0x3f, 0x1b, 0x00
+	.byte 0x2d, 0x3f, 0x1b, 0x00
+	.byte 0x24, 0x3f, 0x1b, 0x00
+	.byte 0x1b, 0x3f, 0x1b, 0x00
+	.byte 0x12, 0x3f, 0x1b, 0x00
+	.byte 0x09, 0x3f, 0x1b, 0x00
+	.byte 0x00, 0x3f, 0x1b, 0x00
+	.byte 0x3f, 0x2a, 0x1b, 0x00
+	.byte 0x36, 0x2a, 0x1b, 0x00
+	.byte 0x2d, 0x2a, 0x1b, 0x00
+	.byte 0x24, 0x2a, 0x1b, 0x00
+	.byte 0x1b, 0x2a, 0x1b, 0x00
+	.byte 0x12, 0x2a, 0x1b, 0x00
+	.byte 0x09, 0x2a, 0x1b, 0x00
+	.byte 0x00, 0x2a, 0x1b, 0x00
+	.byte 0x3f, 0x15, 0x1b, 0x00
+	.byte 0x36, 0x15, 0x1b, 0x00
+	.byte 0x2d, 0x15, 0x1b, 0x00
+	.byte 0x24, 0x15, 0x1b, 0x00
+	.byte 0x1b, 0x15, 0x1b, 0x00
+	.byte 0x12, 0x15, 0x1b, 0x00
+	.byte 0x09, 0x15, 0x1b, 0x00
+	.byte 0x00, 0x15, 0x1b, 0x00
+	.byte 0x3f, 0x00, 0x1b, 0x00
+	.byte 0x36, 0x00, 0x1b, 0x00
+	.byte 0x2d, 0x00, 0x1b, 0x00
+	.byte 0x24, 0x00, 0x1b, 0x00
+	.byte 0x1b, 0x00, 0x1b, 0x00
+	.byte 0x12, 0x00, 0x1b, 0x00
+	.byte 0x09, 0x00, 0x1b, 0x00
+	.byte 0x00, 0x00, 0x1b, 0x00
+	.byte 0x3f, 0x3f, 0x12, 0x00
+	.byte 0x36, 0x3f, 0x12, 0x00
+	.byte 0x2d, 0x3f, 0x12, 0x00
+	.byte 0x24, 0x3f, 0x12, 0x00
+	.byte 0x1b, 0x3f, 0x12, 0x00
+	.byte 0x12, 0x3f, 0x12, 0x00
+	.byte 0x09, 0x3f, 0x12, 0x00
+	.byte 0x00, 0x3f, 0x12, 0x00
+	.byte 0x3f, 0x2a, 0x12, 0x00
+	.byte 0x36, 0x2a, 0x12, 0x00
+	.byte 0x2d, 0x2a, 0x12, 0x00
+	.byte 0x24, 0x2a, 0x12, 0x00
+	.byte 0x1b, 0x2a, 0x12, 0x00
+	.byte 0x12, 0x2a, 0x12, 0x00
+	.byte 0x09, 0x2a, 0x12, 0x00
+	.byte 0x00, 0x2a, 0x12, 0x00
+	.byte 0x3f, 0x15, 0x12, 0x00
+	.byte 0x36, 0x15, 0x12, 0x00
+	.byte 0x2d, 0x15, 0x12, 0x00
+	.byte 0x24, 0x15, 0x12, 0x00
+	.byte 0x1b, 0x15, 0x12, 0x00
+	.byte 0x12, 0x15, 0x12, 0x00
+	.byte 0x09, 0x15, 0x12, 0x00
+	.byte 0x00, 0x15, 0x12, 0x00
+	.byte 0x3f, 0x00, 0x12, 0x00
+	.byte 0x36, 0x00, 0x12, 0x00
+	.byte 0x2d, 0x00, 0x12, 0x00
+	.byte 0x24, 0x00, 0x12, 0x00
+	.byte 0x1b, 0x00, 0x12, 0x00
+	.byte 0x12, 0x00, 0x12, 0x00
+	.byte 0x09, 0x00, 0x12, 0x00
+	.byte 0x00, 0x00, 0x12, 0x00
+	.byte 0x3f, 0x3f, 0x09, 0x00
+	.byte 0x36, 0x3f, 0x09, 0x00
+	.byte 0x2d, 0x3f, 0x09, 0x00
+	.byte 0x24, 0x3f, 0x09, 0x00
+	.byte 0x1b, 0x3f, 0x09, 0x00
+	.byte 0x12, 0x3f, 0x09, 0x00
+	.byte 0x09, 0x3f, 0x09, 0x00
+	.byte 0x00, 0x3f, 0x09, 0x00
+	.byte 0x3f, 0x2a, 0x09, 0x00
+	.byte 0x36, 0x2a, 0x09, 0x00
+	.byte 0x2d, 0x2a, 0x09, 0x00
+	.byte 0x24, 0x2a, 0x09, 0x00
+	.byte 0x1b, 0x2a, 0x09, 0x00
+	.byte 0x12, 0x2a, 0x09, 0x00
+	.byte 0x09, 0x2a, 0x09, 0x00
+	.byte 0x00, 0x2a, 0x09, 0x00
+	.byte 0x3f, 0x15, 0x09, 0x00
+	.byte 0x36, 0x15, 0x09, 0x00
+	.byte 0x2d, 0x15, 0x09, 0x00
+	.byte 0x24, 0x15, 0x09, 0x00
+	.byte 0x1b, 0x15, 0x09, 0x00
+	.byte 0x12, 0x15, 0x09, 0x00
+	.byte 0x09, 0x15, 0x09, 0x00
+	.byte 0x00, 0x15, 0x09, 0x00
+	.byte 0x3f, 0x00, 0x09, 0x00
+	.byte 0x36, 0x00, 0x09, 0x00
+	.byte 0x2d, 0x00, 0x09, 0x00
+	.byte 0x24, 0x00, 0x09, 0x00
+	.byte 0x1b, 0x00, 0x09, 0x00
+	.byte 0x12, 0x00, 0x09, 0x00
+	.byte 0x09, 0x00, 0x09, 0x00
+	.byte 0x00, 0x00, 0x09, 0x00
+	.byte 0x3f, 0x3f, 0x00, 0x00
+	.byte 0x36, 0x3f, 0x00, 0x00
+	.byte 0x2d, 0x3f, 0x00, 0x00
+	.byte 0x24, 0x3f, 0x00, 0x00
+	.byte 0x1b, 0x3f, 0x00, 0x00
+	.byte 0x12, 0x3f, 0x00, 0x00
+	.byte 0x09, 0x3f, 0x00, 0x00
+	.byte 0x00, 0x3f, 0x00, 0x00
+	.byte 0x3f, 0x2a, 0x00, 0x00
+	.byte 0x36, 0x2a, 0x00, 0x00
+	.byte 0x2d, 0x2a, 0x00, 0x00
+	.byte 0x24, 0x2a, 0x00, 0x00
+	.byte 0x1b, 0x2a, 0x00, 0x00
+	.byte 0x12, 0x2a, 0x00, 0x00
+	.byte 0x09, 0x2a, 0x00, 0x00
+	.byte 0x00, 0x2a, 0x00, 0x00
+	.byte 0x3f, 0x15, 0x00, 0x00
+	.byte 0x36, 0x15, 0x00, 0x00
+	.byte 0x2d, 0x15, 0x00, 0x00
+	.byte 0x24, 0x15, 0x00, 0x00
+	.byte 0x1b, 0x15, 0x00, 0x00
+	.byte 0x12, 0x15, 0x00, 0x00
+	.byte 0x09, 0x15, 0x00, 0x00
+	.byte 0x00, 0x15, 0x00, 0x00
+	.byte 0x3f, 0x00, 0x00, 0x00
+	.byte 0x36, 0x00, 0x00, 0x00
+	.byte 0x2d, 0x00, 0x00, 0x00
+	.byte 0x24, 0x00, 0x00, 0x00
+	.byte 0x1b, 0x00, 0x00, 0x00
+	.byte 0x12, 0x00, 0x00, 0x00
+	.byte 0x09, 0x00, 0x00, 0x00
+	.byte 0x00, 0x00, 0x00, 0x00
Index: kernel/genarch/include/genarch/multiboot/multiboot.h
===================================================================
--- kernel/genarch/include/genarch/multiboot/multiboot.h	(revision ec18e45485def102b3bea20e4497792935997f77)
+++ kernel/genarch/include/genarch/multiboot/multiboot.h	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -39,23 +39,16 @@
 #include <genarch/multiboot/multiboot_info_struct.h>
 
-#define MULTIBOOT_HEADER_MAGIC       0x1badb002
-#define MULTIBOOT_HEADER_FLAGS       0x00010007
-#define MULTIBOOT_HEADER_FLAGS_NOFB  0x00010003
+#define MULTIBOOT_HEADER_MAGIC  0x1badb002
+#define MULTIBOOT_HEADER_FLAGS  0x00010003
 
 #define MULTIBOOT_LOADER_MAGIC  0x2badb002
 
-#define MULTIBOOT_INFO_FLAGS_MEM               0x0001
-#define MULTIBOOT_INFO_FLAGS_BOOT              0x0002
-#define MULTIBOOT_INFO_FLAGS_CMDLINE           0x0004
-#define MULTIBOOT_INFO_FLAGS_MODS              0x0008
-#define MULTIBOOT_INFO_FLAGS_SYMS_AOUT         0x0010
-#define MULTIBOOT_INFO_FLAGS_SYMS_ELF          0x0020
-#define MULTIBOOT_INFO_FLAGS_MMAP              0x0040
-#define MULTIBOOT_INFO_FLAGS_DRIVES            0x0080
-#define MULTIBOOT_INFO_FLAGS_CONFIG_TABLE      0x0100
-#define MULTIBOOT_INFO_FLAGS_BOOT_LOADER_NAME  0x0200
-#define MULTIBOOT_INFO_FLAGS_APM               0x0400
-#define MULTIBOOT_INFO_FLAGS_VBE               0x0800
-#define MULTIBOOT_INFO_FLAGS_FB                0x1000
+#define MULTIBOOT_INFO_FLAGS_MEM	0x01
+#define MULTIBOOT_INFO_FLAGS_BOOT	0x02
+#define MULTIBOOT_INFO_FLAGS_CMDLINE	0x04
+#define MULTIBOOT_INFO_FLAGS_MODS	0x08
+#define MULTIBOOT_INFO_FLAGS_SYMS1	0x10
+#define MULTIBOOT_INFO_FLAGS_SYMS2	0x20
+#define MULTIBOOT_INFO_FLAGS_MMAP	0x40
 
 #ifndef __ASSEMBLER__
Index: kernel/genarch/include/genarch/multiboot/multiboot_info_struct.h
===================================================================
--- kernel/genarch/include/genarch/multiboot/multiboot_info_struct.h	(revision ec18e45485def102b3bea20e4497792935997f77)
+++ kernel/genarch/include/genarch/multiboot/multiboot_info_struct.h	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -30,43 +30,15 @@
 #define KERN_MULTIBOOT_INFO_STRUCT_H_
 
-#define MULTIBOOT_INFO_OFFSET_FLAGS               0x00
-#define MULTIBOOT_INFO_OFFSET_MEM_LOWER           0x04
-#define MULTIBOOT_INFO_OFFSET_MEM_UPPER           0x08
-#define MULTIBOOT_INFO_OFFSET_BOOT_DEVICE         0x0c
-#define MULTIBOOT_INFO_OFFSET_CMD_LINE            0x10
-#define MULTIBOOT_INFO_OFFSET_MODS_COUNT          0x14
-#define MULTIBOOT_INFO_OFFSET_MODS_ADDR           0x18
-#define MULTIBOOT_INFO_OFFSET_SYMS                0x1c
-#define MULTIBOOT_INFO_OFFSET_MMAP_LENGTH         0x2c
-#define MULTIBOOT_INFO_OFFSET_MMAP_ADDR           0x30
-#define MULTIBOOT_INFO_OFFSET_DRIVES_LENGTH       0x34
-#define MULTIBOOT_INFO_OFFSET_DRIVES_ADDR         0x38
-#define MULTIBOOT_INFO_OFFSET_CONFIG_TABLE        0x3c
-#define MULTIBOOT_INFO_OFFSET_BOOT_LOADER_NAME    0x40
-#define MULTIBOOT_INFO_OFFSET_APM_TABLE           0x44
-#define MULTIBOOT_INFO_OFFSET_VBE_CONTROL_INFO    0x48
-#define MULTIBOOT_INFO_OFFSET_VBE_MODE_INFO       0x4c
-#define MULTIBOOT_INFO_OFFSET_VBE_MODE            0x50
-#define MULTIBOOT_INFO_OFFSET_VBE_INTERFACE_SEG   0x52
-#define MULTIBOOT_INFO_OFFSET_VBE_INTERFACE_OFF   0x54
-#define MULTIBOOT_INFO_OFFSET_VBE_INTERFACE_LEN   0x56
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_ADDR    0x58
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_PITCH   0x60
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_WIDTH   0x64
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_HEIGHT  0x68
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_BPP     0x6c
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_TYPE    0x6d
-
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_PALETTE_ADDR          0x6e
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_PALETTE_NUM_COLORS    0x72
-
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_RED_FIELD_POSITION    0x6e
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_RED_MASK_SIZE         0x6f
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_GREEN_FIELD_POSITION  0x70
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_GREEN_MASK_SIZE       0x71
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_BLUE_FIELD_POSITION   0x72
-#define MULTIBOOT_INFO_OFFSET_FRAMEBUFFER_BLUE_MASK_SIZE        0x73
-
-#define MULTIBOOT_INFO_SIZE                0x76
+#define MULTIBOOT_INFO_OFFSET_FLAGS        0x00
+#define MULTIBOOT_INFO_OFFSET_MEM_LOWER    0x04
+#define MULTIBOOT_INFO_OFFSET_MEM_UPPER    0x08
+#define MULTIBOOT_INFO_OFFSET_BOOT_DEVICE  0x0c
+#define MULTIBOOT_INFO_OFFSET_CMD_LINE     0x10
+#define MULTIBOOT_INFO_OFFSET_MODS_COUNT   0x14
+#define MULTIBOOT_INFO_OFFSET_MODS_ADDR    0x18
+#define MULTIBOOT_INFO_OFFSET_SYMS         0x1c
+#define MULTIBOOT_INFO_OFFSET_MMAP_LENGTH  0x2c
+#define MULTIBOOT_INFO_OFFSET_MMAP_ADDR    0x30
+#define MULTIBOOT_INFO_SIZE                0x34
 
 #ifndef __ASSEMBLER__
@@ -85,35 +57,4 @@
 	uint32_t mmap_length;
 	uint32_t mmap_addr;
-	uint32_t drives_length;
-	uint32_t drives_addr;
-	uint32_t config_table;
-	uint32_t boot_loader_name;
-	uint32_t apm_table;
-	uint32_t vbe_control_info;
-	uint32_t vbe_mode_info;
-	uint16_t vbe_mode;
-	uint16_t vbe_interface_seg;
-	uint16_t vbe_interface_off;
-	uint16_t vbe_interface_len;
-	uint64_t framebuffer_addr;
-	uint32_t framebuffer_pitch;
-	uint32_t framebuffer_width;
-	uint32_t framebuffer_height;
-	uint8_t framebuffer_bpp;
-	uint8_t framebuffer_type;
-	union {
-		struct {
-			uint32_t framebuffer_palette_addr;
-			uint32_t framebuffer_palette_num_colors;
-		} __attribute__((packed));
-		struct {
-			uint8_t framebuffer_red_field_position;
-			uint8_t framebuffer_red_mask_size;
-			uint8_t framebuffer_green_field_position;
-			uint8_t framebuffer_green_mask_size;
-			uint8_t framebuffer_blue_field_position;
-			uint8_t framebuffer_blue_mask_size;
-		} __attribute__((packed));
-	} __attribute__((packed));
 } __attribute__((packed)) multiboot_info_t;
 
Index: kernel/genarch/src/multiboot/multiboot.c
===================================================================
--- kernel/genarch/src/multiboot/multiboot.c	(revision ec18e45485def102b3bea20e4497792935997f77)
+++ kernel/genarch/src/multiboot/multiboot.c	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -35,5 +35,4 @@
 #include <typedefs.h>
 #include <genarch/multiboot/multiboot.h>
-#include <genarch/fb/bfb.h>
 #include <config.h>
 #include <stddef.h>
@@ -169,29 +168,4 @@
 		multiboot_memmap(info->mmap_length,
 		    (multiboot_memmap_t *) MULTIBOOT_PTR(info->mmap_addr));
-
-#ifdef CONFIG_FB
-
-	/* Initialize framebuffer. */
-	if ((info->flags & MULTIBOOT_INFO_FLAGS_FB) != 0) {
-		if (info->framebuffer_type != 1) {
-			/* Can't use this framebuffer. */
-			// FIXME: framebuffer_type == 2 is EGA mode, we should be able to use that.
-			return;
-		}
-
-		bfb_addr = info->framebuffer_addr;
-		bfb_width = info->framebuffer_width;
-		bfb_height = info->framebuffer_height;
-		bfb_bpp = info->framebuffer_bpp;
-		bfb_scanline = info->framebuffer_pitch;
-		bfb_red_pos = info->framebuffer_red_field_position;
-		bfb_red_size = info->framebuffer_red_mask_size;
-		bfb_green_pos = info->framebuffer_green_field_position;
-		bfb_green_size = info->framebuffer_green_mask_size;
-		bfb_blue_pos = info->framebuffer_blue_field_position;
-		bfb_blue_size = info->framebuffer_blue_mask_size;
-	}
-
-#endif
 }
 
Index: tools/autocheck.awk
===================================================================
--- tools/autocheck.awk	(revision ec18e45485def102b3bea20e4497792935997f77)
+++ tools/autocheck.awk	(revision 8be323084b791c62927f9cbb14696265246370dd)
@@ -38,14 +38,16 @@
 
 /}.*;/ {
-	pattern = "}( __attribute__\\(.*\\))? " struct_name "_t;"
-	if ($0 ~ pattern) {
-		macro_name = toupper(struct_name) "_SIZE"
-		print "_Static_assert(" macro_name " == sizeof(struct " struct_name "), \"\");"
-		struct_name = ""
+	pattern = "}( __attribute__\\(.*\\))? (" struct_name "_t)?;"
+	if ($0 !~ pattern) {
+		print("Bad struct ending: " $0) > "/dev/stderr"
+		exit 1
 	}
+	macro_name = toupper(struct_name) "_SIZE"
+	print "_Static_assert(" macro_name " == sizeof(struct " struct_name "), \"\");"
+	struct_name = ""
 }
 
 /;$/ {
-	if (struct_name != "" && $0 !~ "}") {
+	if (struct_name != "") {
 		# Remove array subscript, if any.
 		sub("(\\[.*\\])?;", "", $0)
