Index: kernel/arch/ia32/Makefile.inc
===================================================================
--- kernel/arch/ia32/Makefile.inc	(revision 9a63657a13acf6388aee5529b79939a49ee33ec5)
+++ kernel/arch/ia32/Makefile.inc	(revision 0e56eb1a15c7e636f2beb1a2d7ca2c425fec275f)
@@ -111,4 +111,10 @@
 DEFS += -DCONFIG_I8042
 
+## Compile with EGA support
+#
+
+CONFIG_EGA = y
+DEFS += -DCONFIG_EGA
+
 ## Accepted configuration directives
 #
@@ -156,5 +162,4 @@
 	arch/$(ARCH)/src/drivers/i8254.c \
 	arch/$(ARCH)/src/drivers/i8259.c \
-	arch/$(ARCH)/src/drivers/ega.c \
 	arch/$(ARCH)/src/drivers/vesa.c \
 	arch/$(ARCH)/src/boot/boot.S \
Index: kernel/arch/ia32/include/drivers/ega.h
===================================================================
--- kernel/arch/ia32/include/drivers/ega.h	(revision 9a63657a13acf6388aee5529b79939a49ee33ec5)
+++ kernel/arch/ia32/include/drivers/ega.h	(revision 0e56eb1a15c7e636f2beb1a2d7ca2c425fec275f)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2008 Jakub Jermar 
  * All rights reserved.
  *
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia32	
+/** @addtogroup ia32
  * @{
  */
@@ -33,14 +33,9 @@
  */
 
-#ifndef KERN_ia32_EGA_H_
-#define KERN_ia32_EGA_H_
+#ifndef KERN_ia32_EGA_H
+#define KERN_ia32_EGA_H
 
-#define VIDEORAM	0xb8000
-#define ROW		80
-#define ROWS		25
-#define SCREEN		(ROW * ROWS)
-
-extern void ega_redraw(void);
-extern void ega_init(void);
+#define EGA_VIDEORAM 	0xb8000
+#define EGA_BASE	0x3d4
 
 #endif
Index: kernel/arch/ia32/include/types.h
===================================================================
--- kernel/arch/ia32/include/types.h	(revision 9a63657a13acf6388aee5529b79939a49ee33ec5)
+++ kernel/arch/ia32/include/types.h	(revision 0e56eb1a15c7e636f2beb1a2d7ca2c425fec275f)
@@ -58,4 +58,6 @@
 typedef int32_t native_t;
 
+typedef uintptr_t ioport_t;
+
 #define PRIp "x"	/**< Format for uintptr_t. */
 #define PRIs "u"	/**< Format for size_t. */
Index: kernel/arch/ia32/src/drivers/ega.c
===================================================================
--- kernel/arch/ia32/src/drivers/ega.c	(revision 9a63657a13acf6388aee5529b79939a49ee33ec5)
+++ 	(revision )
@@ -1,170 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * 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 ia32	
- * @{
- */
-/**
- * @file
- * @brief EGA driver.
- */
-
-#include <arch/drivers/ega.h>
-#include <putchar.h>
-#include <mm/page.h>
-#include <mm/as.h>
-#include <mm/slab.h>
-#include <arch/mm/page.h>
-#include <synch/spinlock.h>
-#include <arch/types.h>
-#include <arch/asm.h>
-#include <memstr.h>
-#include <console/chardev.h>
-#include <console/console.h>
-#include <sysinfo/sysinfo.h>
-#include <ddi/ddi.h>
-
-/*
- * The EGA driver.
- * Simple and short. Function for displaying characters and "scrolling".
- */
-
-static parea_t ega_parea;	/**< Physical memory area for EGA video RAM. */
-
-SPINLOCK_INITIALIZE(egalock);
-static uint32_t ega_cursor;
-static uint8_t *videoram;
-static uint8_t *backbuf;
-
-static void ega_putchar(chardev_t *d, const char ch);
-
-chardev_t ega_console;
-static chardev_operations_t ega_ops = {
-	.write = ega_putchar
-};
-
-static void ega_move_cursor(void);
-
-void ega_init(void)
-{
-	uint8_t hi, lo;
-
-	backbuf = (uint8_t *) malloc(SCREEN * 2, 0);
-	if (!backbuf)
-		panic("Unable to allocate backbuffer.\n");
-	
-	videoram = (uint8_t *) hw_map(VIDEORAM, SCREEN * 2);
-	outb(0x3d4, 0xe);
-	hi = inb(0x3d5);
-	outb(0x3d4, 0xf);
-	lo = inb(0x3d5);
-	ega_cursor = (hi << 8) | lo;
-
-	chardev_initialize("ega_out", &ega_console, &ega_ops);
-	stdout = &ega_console;
-	
-	ega_parea.pbase = VIDEORAM;
-	ega_parea.vbase = (uintptr_t) videoram;
-	ega_parea.frames = 1;
-	ega_parea.cacheable = false;
-	ddi_parea_register(&ega_parea);
-
-	sysinfo_set_item_val("fb", NULL, true);
-	sysinfo_set_item_val("fb.kind", NULL, 2);
-	sysinfo_set_item_val("fb.width", NULL, ROW);
-	sysinfo_set_item_val("fb.height", NULL, ROWS);
-	sysinfo_set_item_val("fb.address.physical", NULL, VIDEORAM);
-}
-
-static void ega_display_char(char ch)
-{
-	videoram[ega_cursor * 2] = ch;
-	backbuf[ega_cursor * 2] = ch;
-}
-
-/*
- * This function takes care of scrolling.
- */
-static void ega_check_cursor(void)
-{
-	if (ega_cursor < SCREEN)
-		return;
-
-	memmove((void *) videoram, (void *) (videoram + ROW * 2), (SCREEN - ROW) * 2);
-	memmove((void *) backbuf, (void *) (backbuf + ROW * 2), (SCREEN - ROW) * 2);
-	memsetw(videoram + (SCREEN - ROW) * 2, ROW, 0x0720);
-	memsetw(backbuf + (SCREEN - ROW) * 2, ROW, 0x0720);
-	ega_cursor = ega_cursor - ROW;
-}
-
-void ega_putchar(chardev_t *d __attribute__((unused)), const char ch)
-{
-	ipl_t ipl;
-
-	ipl = interrupts_disable();
-	spinlock_lock(&egalock);
-
-	switch (ch) {
-	case '\n':
-		ega_cursor = (ega_cursor + ROW) - ega_cursor % ROW;
-		break;
-	case '\t':
-		ega_cursor = (ega_cursor + 8) - ega_cursor % 8;
-		break; 
-	case '\b':
-		if (ega_cursor % ROW)
-			ega_cursor--;
-		break;
-	default:
-		ega_display_char(ch);
-		ega_cursor++;
-		break;
-	}
-	ega_check_cursor();
-	ega_move_cursor();
-
-	spinlock_unlock(&egalock);
-	interrupts_restore(ipl);
-}
-
-void ega_move_cursor(void)
-{
-	outb(0x3d4, 0xe);
-	outb(0x3d5, (uint8_t) ((ega_cursor >> 8) & 0xff));
-	outb(0x3d4, 0xf);
-	outb(0x3d5, (uint8_t) (ega_cursor & 0xff));	
-}
-
-void ega_redraw(void)
-{
-	memcpy(videoram, backbuf, SCREEN * 2);
-	ega_move_cursor();
-}
-
-/** @}
- */
Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision 9a63657a13acf6388aee5529b79939a49ee33ec5)
+++ kernel/arch/ia32/src/ia32.c	(revision 0e56eb1a15c7e636f2beb1a2d7ca2c425fec275f)
@@ -40,4 +40,5 @@
 
 #include <arch/drivers/ega.h>
+#include <genarch/drivers/ega/ega.h>
 #include <arch/drivers/vesa.h>
 #include <genarch/kbd/i8042.h>
@@ -94,5 +95,5 @@
 		else
 #endif
-			ega_init(); /* video */
+			ega_init(EGA_BASE, EGA_VIDEORAM);	/* video */
 		
 		/* Enable debugger */
