Index: kernel/arch/sparc64/src/console.c
===================================================================
--- kernel/arch/sparc64/src/console.c	(revision e2bf6397425bb03f552f342e22cf4d105a242516)
+++ kernel/arch/sparc64/src/console.c	(revision 253f35a1d714bef0e93e4a79768b7342ccc84123)
@@ -94,4 +94,23 @@
 }
 
+/** Acquire console back for kernel
+ *
+ */
+void arch_grab_console(void)
+{
+#ifdef CONFIG_Z8530
+	z8530_grab();
+#endif
+}
+
+/** Return console to userspace
+ *
+ */
+void arch_release_console(void)
+{
+#ifdef CONFIG_Z8530
+	z8530_release();
+#endif
+}
 /** @}
  */
Index: kernel/arch/sparc64/src/drivers/fhc.c
===================================================================
--- kernel/arch/sparc64/src/drivers/fhc.c	(revision e2bf6397425bb03f552f342e22cf4d105a242516)
+++ kernel/arch/sparc64/src/drivers/fhc.c	(revision 253f35a1d714bef0e93e4a79768b7342ccc84123)
@@ -58,15 +58,10 @@
 	fhc = (void *) hw_map(FHC_UART_ADDR, PAGE_SIZE);
 
-	(void) fhc[FHC_UART_ICLR];
 	fhc[FHC_UART_ICLR] = 0;
-	(void) fhc[FHC_UART_IMAP];
-	fhc[FHC_UART_IMAP] = Z8530_INTRCV_DATA0;	/* hardcoded for Simics simulation */
-	(void) fhc[FHC_UART_IMAP];
-	fhc[FHC_UART_IMAP] = 0x80000000;		/* hardcoded for Simics simulation */
+	fhc[FHC_UART_IMAP] = 0x80000000;
 }
 
 void fhc_uart_reset(void)
 {
-	(void) fhc[FHC_UART_ICLR];
 	fhc[FHC_UART_ICLR] = 0;
 }
Index: kernel/arch/sparc64/src/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sparc64.c	(revision e2bf6397425bb03f552f342e22cf4d105a242516)
+++ kernel/arch/sparc64/src/sparc64.c	(revision 253f35a1d714bef0e93e4a79768b7342ccc84123)
@@ -94,17 +94,4 @@
 }
 
-/** Acquire console back for kernel
- *
- */
-void arch_grab_console(void)
-{
-}
-/** Return console to userspace
- *
- */
-void arch_release_console(void)
-{
-}
-
 /** Switch to userspace. */
 void userspace(uspace_arg_t *kernel_uarg)
Index: kernel/arch/sparc64/src/trap/interrupt.c
===================================================================
--- kernel/arch/sparc64/src/trap/interrupt.c	(revision e2bf6397425bb03f552f342e22cf4d105a242516)
+++ kernel/arch/sparc64/src/trap/interrupt.c	(revision 253f35a1d714bef0e93e4a79768b7342ccc84123)
@@ -43,5 +43,5 @@
 #include <arch/asm.h>
 #include <arch/barrier.h>
-
+#include <print.h>
 #include <genarch/kbd/z8530.h>
 
@@ -62,5 +62,7 @@
 void irq_ipc_bind_arch(unative_t irq)
 {
-	/* TODO */
+#ifdef CONFIG_Z8530
+	z8530_belongs_to_kernel = false;
+#endif
 }
 
@@ -83,7 +85,12 @@
 		 * interrupt traps. Call the interrupt handler directly.
 		 */
+
+		if (z8530_belongs_to_kernel)
+			z8530_interrupt();
+		else
+			ipc_irq_send_notif(0);
 		fhc_uart_reset();
-		z8530_interrupt();
 		break;
+
 #endif
 	}
