Index: tools/ew.py
===================================================================
--- tools/ew.py	(revision df64dbcec09ca6420de2c8c0944a17482cc56d6b)
+++ tools/ew.py	(revision df64dbcec09ca6420de2c8c0944a17482cc56d6b)
@@ -0,0 +1,166 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2013 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.
+#
+
+
+"""
+Emulator wrapper for running HelenOS
+"""
+
+import os 
+import subprocess 
+import autotool
+
+def run_in_console(cmd, title):
+	cmdline = 'xterm -T ' + '"' + title + '"' + ' -e ' + cmd
+	print cmdline
+	subprocess.call(cmdline, shell = True);
+
+def pc_options():
+	return '-enable-kvm'
+
+def malta_options():
+	return '-cpu 4Kc'
+
+def platform_to_qemu_options(platform, machine):
+	if platform == 'amd64':
+		return 'system-x86_64', pc_options()
+	elif platform == 'arm32':
+		return 'system-arm', ''
+	elif platform == 'ia32':
+		return 'system-i386', pc_options()
+	elif platform == 'mips32':
+		if machine == 'lmalta':
+			return 'system-mipsel', malta_options()
+		elif machine == 'bmalta':
+			return 'system-mips', malta_options()
+	elif platform == 'ppc32':
+		return 'system-ppc', ''
+	elif platform == 'sparc64':
+		return 'system-sparc64', ''
+
+def qemu_bd_options():
+	if not os.path.exists('hdisk.img'):
+		subprocess.call('tools/mkfat.py 1048576 uspace/dist/data hdisk.img', shell = True)
+	return ' -hda hdisk.img'
+
+def qemu_nic_ne2k_options():
+	return ' -device ne2k_isa,irq=5,vlan=0'
+
+def qemu_nic_e1k_options():
+	return ' -device e1000,vlan=0'
+
+def qemu_nic_rtl8139_options():
+	return ' -device rtl8139,vlan=0'
+
+def qemu_net_options():
+	nic_options = qemu_nic_e1k_options()
+	return nic_options + ' -net user -redir udp:8080::8080 -redir udp:8081::8081 -redir tcp:8080::8080 -redir tcp:8081::8081'
+
+def qemu_usb_options():
+	return ''
+
+def qemu_run(platform, machine, console, image, networking, storage, usb):
+	suffix, options = platform_to_qemu_options(platform, machine)
+	cmd = 'qemu-' + suffix
+
+	cmdline = cmd
+	if options != '':
+		cmdline += ' ' + options
+
+	if storage:
+		cmdline += qemu_bd_options()
+	if networking:
+		cmdline += qemu_net_options()
+	if usb:
+		cmdline += qemu_usb_options()
+	
+	if image == 'image.iso':
+		cmdline += ' -boot d -cdrom image.iso'
+	elif image == 'image.boot':
+		cmdline += ' -kernel image.boot'
+
+	if not console:
+		cmdline += ' -nographic'
+
+		title = 'HelenOS/' + platform
+		if machine != '':
+			title += ' on ' + machine
+		run_in_console(cmdline, title)
+	else:
+		print cmdline
+		subprocess.call(cmdline, shell = True)
+		
+def ski_run(platform, machine, console, image, networking, storage, usb):
+	run_in_console('ski -i contrib/conf/ski.conf', 'HelenOS/ia64 on ski')
+
+def msim_run(platform, machine, console, image, networking, storage, usb):
+	run_in_console('msim -c contrib/conf/msim.conf', 'HelenOS/mips32 on msim')
+
+emulators = {}
+emulators['amd64'] = {}
+emulators['arm32'] = {}
+emulators['ia32'] = {}
+emulators['ia64'] = {}
+emulators['mips32'] = {}
+emulators['ppc32'] = {}
+emulators['sparc64'] = {}
+
+emulators['amd64'][''] = qemu_run, True, 'image.iso', True, True, True
+emulators['arm32']['integratorcp'] = qemu_run, True, 'image.boot', False, False, False
+emulators['ia32'][''] = qemu_run, True, 'image.iso', True, True, True
+emulators['ia64']['ski'] = ski_run, False, 'image.boot', False, False, False
+emulators['mips32']['msim'] = msim_run, False, 'image.boot', False, False, False
+emulators['mips32']['lmalta'] = qemu_run, False, 'image.boot', False, False, False
+emulators['mips32']['bmalta'] = qemu_run, False, 'image.boot', False, False, False
+emulators['ppc32'][''] = qemu_run, True, 'image.iso', True, True, True
+emulators['sparc64']['generic'] = qemu_run, True, 'image.iso', True, True, True
+
+def run():
+	config = {}
+	autotool.read_config(autotool.CONFIG, config)
+
+	try:
+		platform = config['PLATFORM']
+	except:
+		platform = ''
+
+	try:
+		mach = config['MACHINE']
+	except:
+		mach = ''
+
+	try:
+		emu_run, console, image, networking, storage, usb = emulators[platform][mach]
+	except:
+		print "Cannot start emulation for the chosen configuration."
+		return
+
+	emu_run(platform, mach, console, image, networking, storage, usb)
+
+run()
