Index: boot/arch/arm32/loader/Makefile
===================================================================
--- boot/arch/arm32/loader/Makefile	(revision 2a18193cff1ab235b82cb6c1fd4897417beec7c3)
+++ boot/arch/arm32/loader/Makefile	(revision 5e738155aabe3b1083edd0a2e466ca19dd31d8ed)
@@ -42,4 +42,13 @@
 TOOLCHAIN_DIR = $(CROSS_PREFIX)/arm/bin
 
+ifeq ($(MACHINE), testarm)
+	DMACHINE = MACHINE_GXEMUL_TESTARM
+endif
+
+ifeq ($(MACHINE), integratorcp)
+	DMACHINE = MACHINE_ICP
+endif
+
+
 ifeq ($(COMPILER),gcc_native)
 	CC = gcc
@@ -65,5 +74,5 @@
 	asm.S \
 	mm.c \
-	print/gxemul.c \
+	print/print.c \
 	_components.c \
 	../../../generic/printf.c \
@@ -93,6 +102,9 @@
 	$(USPACEDIR)/srv/fs/tmpfs/tmpfs \
 	$(USPACEDIR)/srv/fs/fat/fat \
-	$(USPACEDIR)/srv/bd/file_bd/file_bd \
-	$(USPACEDIR)/srv/bd/gxe_bd/gxe_bd
+	$(USPACEDIR)/srv/bd/file_bd/file_bd
+ifeq ($(MACHINE), testarm)
+	RD_SRVS += \
+		$(USPACEDIR)/srv/bd/gxe_bd/gxe_bd
+endif
 
 RD_APPS = \
@@ -149,3 +161,3 @@
 
 %.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
+	$(CC) -D$(DMACHINE) $(DEFS) $(CFLAGS) -c $< -o $@
Index: boot/arch/arm32/loader/_link.ld.in
===================================================================
--- boot/arch/arm32/loader/_link.ld.in	(revision 2a18193cff1ab235b82cb6c1fd4897417beec7c3)
+++ boot/arch/arm32/loader/_link.ld.in	(revision 5e738155aabe3b1083edd0a2e466ca19dd31d8ed)
@@ -18,4 +18,7 @@
 		*(.reginfo);
 
+		. = 0x2000;
+		*(ST);			/* bootloader stack section */
+
 		. = 0x4000;
 		*(PT);			/* page table placed at 0x4000 */
Index: boot/arch/arm32/loader/boot.S
===================================================================
--- boot/arch/arm32/loader/boot.S	(revision 2a18193cff1ab235b82cb6c1fd4897417beec7c3)
+++ boot/arch/arm32/loader/boot.S	(revision 5e738155aabe3b1083edd0a2e466ca19dd31d8ed)
@@ -35,6 +35,8 @@
 .global jump_to_kernel
 .global page_table
+.global boot_stack
 
 start:
+	ldr sp, =boot_stack
 	b bootstrap
 
@@ -47,4 +49,8 @@
 	bx r0
 
+#bootloader stack
+.section ST
+	.space 4096
+boot_stack:
 
 # place page_table to PT section
Index: boot/arch/arm32/loader/main.c
===================================================================
--- boot/arch/arm32/loader/main.c	(revision 2a18193cff1ab235b82cb6c1fd4897417beec7c3)
+++ boot/arch/arm32/loader/main.c	(revision 5e738155aabe3b1083edd0a2e466ca19dd31d8ed)
@@ -68,5 +68,5 @@
 static void version_print(void)
 {
-	printf("HelenOS ARM32 Bootloader\nRelease %s%s%s\nCopyright (c) 2007 HelenOS project\n", 
+	printf("HelenOS ARM32 Bootloader\nRelease %s%s%s\nCopyright (c) 2009 HelenOS project\n", 
 		release, revision, timestamp);
 }
@@ -92,6 +92,4 @@
 	unsigned int i, j;
 	for (i = 0; i < COMPONENTS; i++) {
-		printf(" %L: %s image (size %d bytes)\n", 
-		    components[i].start, components[i].name, components[i].size);
 		top = ALIGN_UP(top, KERNEL_PAGE_SIZE);
 		if (i > 0) {
@@ -107,16 +105,15 @@
 
 	printf("\nCopying components\n");
-
+	printf("Component\tAddress\t\tSize (Bytes)\n");
+	printf("============================================\n");
 	for (i = COMPONENTS - 1; i > 0; i--, j--) {
-		printf(" %s...", components[i].name);
+		printf("%s\t\t0x%x\t%d\n", components[i].name, bootinfo.tasks[j].addr, components[i].size);
 		memcpy((void *)bootinfo.tasks[j].addr, components[i].start,
 		    components[i].size);
-		printf("done.\n");
 	}
-	
-	printf("\nCopying kernel...");
+	printf("KERNEL\t\t0x%x\t%d\n", KERNEL_VIRTUAL_ADDRESS, components[0].size);
+
 	memcpy((void *)KERNEL_VIRTUAL_ADDRESS, components[0].start,
 	    components[0].size);
-	printf("done.\n");
 
 	printf("\nBooting the kernel...\n");
Index: boot/arch/arm32/loader/print/gxemul.c
===================================================================
--- boot/arch/arm32/loader/print/gxemul.c	(revision 2a18193cff1ab235b82cb6c1fd4897417beec7c3)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * 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.
- */
-
-
-/** @addtogroup arm32boot
- * @{
- */
-/** @file
- *  @brief GXemul specific code.
- */ 
-
-
-#include <printf.h>
-
-
-/** Address where characters to be printed are expected. */
-#define PUTC_ADDRESS	0x10000000
-
-
-/** Prints a character to the console.
- *
- * @param ch Character to be printed.
- */
-static void putc(char ch)
-{
-	*((volatile char *) PUTC_ADDRESS) = ch;
-}
-
-
-/** Prints a string to the console.
- *
- * @param str String to be printed.
- * @param len Number of characters to be printed.
- */
-void write(const char *str, const int len)
-{
-	int i;
-	for (i = 0; i < len; ++i) {
-		putc(str[i]);
-	}
-}
-
-/** @}
- */
-
Index: boot/arch/arm32/loader/print/print.c
===================================================================
--- boot/arch/arm32/loader/print/print.c	(revision 5e738155aabe3b1083edd0a2e466ca19dd31d8ed)
+++ boot/arch/arm32/loader/print/print.c	(revision 5e738155aabe3b1083edd0a2e466ca19dd31d8ed)
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * Copyright (c) 2009 Vineeth Pillai
+ * 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.
+ */
+
+
+/** @addtogroup arm32boot
+ * @{
+ */
+/** @file
+ *  @brief bootloader output logic
+ */ 
+
+
+#include <printf.h>
+
+
+/** Address where characters to be printed are expected. */
+#ifdef MACHINE_GXEMUL_TESTARM
+#define PUTC_ADDRESS	0x10000000
+#endif
+#ifdef MACHINE_ICP
+#define  PUTC_ADDRESS    0x16000000
+#endif
+
+
+
+/** Prints a character to the console.
+ *
+ * @param ch Character to be printed.
+ */
+static void putc(char ch)
+{
+	if (ch == '\n')
+		*((volatile char *) PUTC_ADDRESS) = '\r';
+	*((volatile char *) PUTC_ADDRESS) = ch;
+}
+
+
+/** Prints a string to the console.
+ *
+ * @param str String to be printed.
+ * @param len Number of characters to be printed.
+ */
+void write(const char *str, const int len)
+{
+	int i;
+	for (i = 0; i < len; ++i) {
+		putc(str[i]);
+	}
+}
+
+/** @}
+ */
+
