Index: arch/amd64/src/boot/boot.S
===================================================================
--- arch/amd64/src/boot/boot.S	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ arch/amd64/src/boot/boot.S	(revision 8ccec3c161d21bb34fa69cec1fd8d025f1a5e72e)
@@ -81,8 +81,23 @@
 1:
 	jmp 1b
+	
+.code32
+.align 4
+multiboot_header:
+	.long MULTIBOOT_HEADER_MAGIC
+	.long MULTIBOOT_HEADER_FLAGS
+	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)	# checksum
+	.long multiboot_header + BOOT_OFFSET
+	.long unmapped_ktext_start + BOOT_OFFSET
+	.long 0
+	.long 0
+	.long multiboot_image_start + BOOT_OFFSET
+
+multiboot_image_start:
+	movl $START_STACK, %esp				# initialize stack pointer
+	# FIXME TODO
 
 # Protected 32-bit. We want to reuse the code-seg descriptor,
 # the Default operand size must not be 1 when entering long mode
-.code32
 now_in_prot:  
 	# Set up stack & data descriptors
Index: arch/amd64/src/boot/memmap.S
===================================================================
--- arch/amd64/src/boot/memmap.S	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ arch/amd64/src/boot/memmap.S	(revision 8ccec3c161d21bb34fa69cec1fd8d025f1a5e72e)
@@ -1,1 +1,115 @@
-../../../ia32/src/boot/memmap.S
+/*
+ * Copyright (C) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <arch/boot/memmap.h>
+
+E820_SMAP = 0x534d4150
+
+.global memmap_arch_init
+.global e801memorysize
+
+.code16
+.section K_TEXT_START_2, "ax"
+
+memmap_arch_init:
+e820begin:
+	xorl	%ebx,%ebx			# during first call, ebx must be 0
+	movw	$e820table_boot,%di
+	movb	$MEMMAP_E820_MAX_RECORDS,e820counter_boot
+e820loop:	
+	movl	$E820_SMAP,%edx 		# control sequence "SMAP"
+
+	movl	$0x0000e820,%eax		# service
+	movl	$MEMMAP_E820_RECORD_SIZE,%ecx
+	int 	$0x15
+	jc	e820err
+	
+	cmpl	$E820_SMAP,%eax			# verifying BIOS
+	jne	e820err
+
+	cmpl	$MEMMAP_E820_RECORD_SIZE,%ecx
+	jne	e820err				# bad record size - bug in bios
+	
+	movw	%di,%ax				# next record
+	addw	$MEMMAP_E820_RECORD_SIZE,%ax
+	movw	%ax,%di
+		
+	decb	e820counter_boot 		# buffer is full
+	jz	e820end
+	
+	testl	%ebx,%ebx	
+	jnz	e820loop
+	
+e820end:
+	movb	$MEMMAP_E820_MAX_RECORDS,%al
+	subb	e820counter_boot,%al
+	movb	%al,e820counter_boot 		# store # of valid entries in e820counter
+
+	jmp	e801begin
+
+e820err:
+	movb	$0,e820counter_boot
+
+# method e801 - get size of memory
+
+e801begin:
+	xorw	%dx,%dx
+	xorw	%cx,%cx
+	xorw	%bx,%bx
+	movw	$0xe801,%ax
+	stc
+	int	$0x15
+	
+	jc	e801end
+	
+	# fix problem with some BIOSes which use ax:bx rather than cx:dx
+	testw	%cx,%cx
+	jnz	e801cxdx
+	testw	%dx,%dx
+	jnz	e801cxdx
+
+	movw	%ax,%cx
+	movw	%bx,%dx
+	
+e801cxdx:
+	andl	$0xffff,%edx
+	shll	$6,%edx
+	andl	$0xffff,%ecx
+	addl	%ecx,%edx
+	addl	$0x0400,%edx  			# add lower 1 MB - it's not included by e801 method
+	movl	%edx,e801memorysize
+e801end:
+	ret
+
+
+.section K_DATA_START, "aw", @progbits
+
+#memory size in 1 kb chunks
+e801memorysize:
+	.long	0
Index: arch/amd64/src/mm/memory_init.c
===================================================================
--- arch/amd64/src/mm/memory_init.c	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ arch/amd64/src/mm/memory_init.c	(revision 8ccec3c161d21bb34fa69cec1fd8d025f1a5e72e)
@@ -1,1 +1,70 @@
-../../../ia32/src/mm/memory_init.c
+/*
+ * Copyright (C) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <arch/boot/memmap.h>
+#include <arch/mm/memory_init.h>
+#include <arch/mm/page.h>
+#include <print.h>
+
+__u8 e820counter __attribute__ ((section ("BOOT_DATA"))) = 0xff;
+struct e820memmap_ e820table[MEMMAP_E820_MAX_RECORDS] __attribute__ ((section ("BOOT_DATA"))) ;
+
+size_t get_memory_size(void) 
+{
+	return e801memorysize*1024;
+}
+
+void memory_print_map(void)
+{
+	__u8 i;
+	
+	for (i=0;i<e820counter;i++) {
+		printf("E820 base: %Q size: %Q type: ", e820table[i].base_address, e820table[i].size);
+		switch (e820table[i].type) {
+			case MEMMAP_MEMORY_AVAILABLE: 
+				printf("available memory\n");
+				break;
+			case MEMMAP_MEMORY_RESERVED: 
+				printf("reserved memory\n");
+				break;
+			case MEMMAP_MEMORY_ACPI: 
+				printf("ACPI table\n");
+				break;
+			case MEMMAP_MEMORY_NVS: 
+				printf("NVS\n");
+				break;
+			case MEMMAP_MEMORY_UNUSABLE: 
+				printf("unusable memory\n");
+				break;
+			default:
+				printf("undefined memory type\n");
+		}
+	}
+
+}
+
Index: arch/ia32/Makefile.inc
===================================================================
--- arch/ia32/Makefile.inc	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ arch/ia32/Makefile.inc	(revision 8ccec3c161d21bb34fa69cec1fd8d025f1a5e72e)
@@ -115,4 +115,3 @@
 	arch/$(ARCH)/src/drivers/ega.c \
 	arch/$(ARCH)/src/boot/boot.S \
-	arch/$(ARCH)/src/boot/memmap.S \
 	arch/$(ARCH)/src/fpu_context.c
Index: arch/ia32/_link.ld.in
===================================================================
--- arch/ia32/_link.ld.in	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ arch/ia32/_link.ld.in	(revision 8ccec3c161d21bb34fa69cec1fd8d025f1a5e72e)
@@ -12,6 +12,4 @@
 #include <arch/boot/boot.h>
 #include <arch/mm/page.h>
-
-ENTRY(kernel_image_start)
 
 SECTIONS {
@@ -29,5 +27,4 @@
 	.mapped (PA2KA(BOOT_OFFSET+BOOTSTRAP_OFFSET)+SIZEOF(.unmapped)): AT (BOOTSTRAP_OFFSET+SIZEOF(.unmapped)) { 
 		ktext_start = .;
-		*(BOOT_DATA);
 		*(.text);
 		ktext_end = .;
Index: arch/ia32/src/boot/boot.S
===================================================================
--- arch/ia32/src/boot/boot.S	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ arch/ia32/src/boot/boot.S	(revision 8ccec3c161d21bb34fa69cec1fd8d025f1a5e72e)
@@ -33,36 +33,8 @@
 
 .section K_TEXT_START, "ax"
-.global kernel_image_start
 
 KTEXT=8
 KDATA=16
 
-.code16
-#
-# This is where we require any SPARTAN-kernel-compatible boot loader
-# to pass control in real mode.
-#
-# Protected mode tables are statically initialised during compile
-# time. So we can just load the respective table registers and
-# switch to protected mode.
-#
-kernel_image_start:
-	cli
-	xorw %ax, %ax
-	movw %ax, %ds
-	movw %ax, %es
-	movw %ax, %ss							# initialize stack segment register
-	movl $BOOTSTRAP_OFFSET - 0x400, %esp				# initialize stack pointer
-	
-	call memmap_arch_init
-	
-	lgdt real_bootstrap_gdtr_boot					# initialize Global Descriptor Table register
-	
-	movl %cr0, %eax
-	orl $0x1, %eax
-	movl %eax, %cr0							# switch to protected mode
-	
-	jmpl $KTEXT, $boot_image_start
-	
 .code32
 .align 4
@@ -77,30 +49,4 @@
 	.long multiboot_image_start + BOOT_OFFSET
 	
-boot_image_start:
-	movw $KDATA, %ax
-	movw %ax, %es
-	movw %ax, %gs
-	movw %ax, %fs
-	movw %ax, %ds							# kernel data + stack
-	movw %ax, %ss
-	
-	movb $0xd1, %al							# enable A20 using i8042 controller
-	outb %al, $0x64
-	movb $0xdf, %al
-	outb %al, $0x60
-	
-	movl $BOOTSTRAP_OFFSET, %esi
-	movl $BOOTSTRAP_OFFSET + BOOT_OFFSET, %edi
-	movl $_hardcoded_kernel_size, %ecx
-	cld
-	rep movsb
-	
-	call map_kernel							# map kernel and turn paging on
-	
-	call main_bsp							# never returns
-
-	cli
-	hlt
-	
 multiboot_image_start:
 	movl $BOOTSTRAP_OFFSET - 0x400, %esp				# initialize stack pointer
Index: ch/ia32/src/boot/memmap.S
===================================================================
--- arch/ia32/src/boot/memmap.S	(revision a59e81e7504cf966a20f750789032f23926fdab3)
+++ 	(revision )
@@ -1,115 +1,0 @@
-/*
- * Copyright (C) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-#include <arch/boot/memmap.h>
-
-E820_SMAP = 0x534d4150
-
-.global memmap_arch_init
-.global e801memorysize
-
-.code16
-.section K_TEXT_START_2, "ax"
-
-memmap_arch_init:
-e820begin:
-	xorl	%ebx,%ebx			# during first call, ebx must be 0
-	movw	$e820table_boot,%di
-	movb	$MEMMAP_E820_MAX_RECORDS,e820counter_boot
-e820loop:	
-	movl	$E820_SMAP,%edx 		# control sequence "SMAP"
-
-	movl	$0x0000e820,%eax		# service
-	movl	$MEMMAP_E820_RECORD_SIZE,%ecx
-	int 	$0x15
-	jc	e820err
-	
-	cmpl	$E820_SMAP,%eax			# verifying BIOS
-	jne	e820err
-
-	cmpl	$MEMMAP_E820_RECORD_SIZE,%ecx
-	jne	e820err				# bad record size - bug in bios
-	
-	movw	%di,%ax				# next record
-	addw	$MEMMAP_E820_RECORD_SIZE,%ax
-	movw	%ax,%di
-		
-	decb	e820counter_boot 		# buffer is full
-	jz	e820end
-	
-	testl	%ebx,%ebx	
-	jnz	e820loop
-	
-e820end:
-	movb	$MEMMAP_E820_MAX_RECORDS,%al
-	subb	e820counter_boot,%al
-	movb	%al,e820counter_boot 		# store # of valid entries in e820counter
-
-	jmp	e801begin
-
-e820err:
-	movb	$0,e820counter_boot
-
-# method e801 - get size of memory
-
-e801begin:
-	xorw	%dx,%dx
-	xorw	%cx,%cx
-	xorw	%bx,%bx
-	movw	$0xe801,%ax
-	stc
-	int	$0x15
-	
-	jc	e801end
-	
-	# fix problem with some BIOSes which use ax:bx rather than cx:dx
-	testw	%cx,%cx
-	jnz	e801cxdx
-	testw	%dx,%dx
-	jnz	e801cxdx
-
-	movw	%ax,%cx
-	movw	%bx,%dx
-	
-e801cxdx:
-	andl	$0xffff,%edx
-	shll	$6,%edx
-	andl	$0xffff,%ecx
-	addl	%ecx,%edx
-	addl	$0x0400,%edx  			# add lower 1 MB - it's not included by e801 method
-	movl	%edx,e801memorysize
-e801end:
-	ret
-
-
-.section K_DATA_START, "aw", @progbits
-
-#memory size in 1 kb chunks
-e801memorysize:
-	.long	0
