Index: arch/mips32/src/console.c
===================================================================
--- arch/mips32/src/console.c	(revision 3de6dd7a4839361e603eef18d218d6b8fd8419a9)
+++ arch/mips32/src/console.c	(revision e7ed98680bd5e7de4b6d0a2a5bed181a601437e5)
@@ -43,2 +43,17 @@
 	}
 }
+
+/** Acquire console back for kernel
+ *
+ */
+void arch_grab_console(void)
+{
+	msim_kbd_grab();
+}
+/** Return console to userspace
+ *
+ */
+void arch_release_console(void)
+{
+	msim_kbd_release();
+}
Index: arch/mips32/src/drivers/msim.c
===================================================================
--- arch/mips32/src/drivers/msim.c	(revision 3de6dd7a4839361e603eef18d218d6b8fd8419a9)
+++ arch/mips32/src/drivers/msim.c	(revision e7ed98680bd5e7de4b6d0a2a5bed181a601437e5)
@@ -109,2 +109,12 @@
 	stdout = &console;
 }
+
+static iroutine oldvector;
+void msim_kbd_grab(void)
+{
+	oldvector = int_register(MSIM_KBD_IRQ, "msim_kbd", msim_interrupt);
+}
+void msim_kbd_release(void)
+{
+	int_register(MSIM_KBD_IRQ, "user_interrupt", oldvector);
+}
Index: arch/mips32/src/mips32.c
===================================================================
--- arch/mips32/src/mips32.c	(revision 3de6dd7a4839361e603eef18d218d6b8fd8419a9)
+++ arch/mips32/src/mips32.c	(revision e7ed98680bd5e7de4b6d0a2a5bed181a601437e5)
@@ -172,2 +172,3 @@
 	return 0;
 }
+
