Index: boot/arch/mips32/include/arch.h
===================================================================
--- boot/arch/mips32/include/arch.h	(revision 14febed99d983f8eb0e743677bbec7ee7df1e157)
+++ boot/arch/mips32/include/arch.h	(revision 192a23f0fc272f3e463db10702dc4c2d8b4d30e9)
@@ -51,5 +51,6 @@
 #define LOADER_OFFSET    0x00103000
 
-#define MALTA_SERIAL     0xb80003f8
+#define YAMON_SUBR_BASE		PA2KA(0x1fc00500)
+#define YAMON_SUBR_PRINT_COUNT	(YAMON_SUBR_BASE + 0x4)
 #endif
 
Index: boot/arch/mips32/src/putchar.c
===================================================================
--- boot/arch/mips32/src/putchar.c	(revision 14febed99d983f8eb0e743677bbec7ee7df1e157)
+++ boot/arch/mips32/src/putchar.c	(revision 192a23f0fc272f3e463db10702dc4c2d8b4d30e9)
@@ -37,9 +37,23 @@
 
 #if defined(MACHINE_msim)
-#define PUTCHAR_ADDRESS MSIM_VIDEORAM_ADDRESS
+#define _putchar(ch)	msim_putchar((ch))
+static void msim_putchar(const wchar_t ch)
+{
+	*((char *) MSIM_VIDEORAM_ADDRESS) = ch;
+}
 #endif
 
 #if defined(MACHINE_lmalta) || defined(MACHINE_bmalta)
-#define PUTCHAR_ADDRESS MALTA_SERIAL
+#define _putchar(ch)	yamon_putchar((ch))
+typedef void (**yamon_print_count_ptr_t)(uint32_t, const char *, uint32_t);
+yamon_print_count_ptr_t yamon_print_count =
+    (yamon_print_count_ptr_t) YAMON_SUBR_PRINT_COUNT;
+
+static void yamon_putchar(const wchar_t wch)
+{
+	const char ch = (char) wch;
+
+	(*yamon_print_count)(0, &ch, 1);
+}
 #endif
 
@@ -47,7 +61,7 @@
 {
 	if (ascii_check(ch))
-		*((char *) PUTCHAR_ADDRESS) = ch;
+		_putchar(ch);
 	else
-		*((char *) PUTCHAR_ADDRESS) = U_SPECIAL;
+		_putchar(U_SPECIAL);
 }
 
