diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/hw/absolute-mouse.c qemu-0.12.3/hw/absolute-mouse.c
--- qemu-0.12.3-orig/hw/absolute-mouse.c	1970-01-01 01:00:00.000000000 +0100
+++ qemu-0.12.3/hw/absolute-mouse.c	2010-04-02 06:22:28.000000000 +0200
@@ -0,0 +1,332 @@
+/*
+ * QEMU Absolute mouse emulation for DOS
+ *
+ * Copyright (c) 2010 Gerhard Wiesinger
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 and not
+ * any later version of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+#include "hw.h"
+#include "isa.h"
+#include "pc.h"
+#include "absolute-mouse.h"
+#include "console.h"
+
+/* debug only mouse */
+//#define DEBUG_MOUSE
+//#define DEBUG_MOUSE_EVENT
+//#define DEBUG_MOUSE_QUEUE
+//#define DEBUG_MOUSE_STATE_LOST
+
+#define SKIP_DUPLICATE_EVENTS 0
+#define ABSOLUTE_MOUSE_QUEUE_SIZE 256
+
+typedef struct {
+    int mouse_dx; /* current values, needed for 'poll' mode */
+    int mouse_dy;
+    int mouse_dz;
+    uint8_t mouse_buttons;
+} AbsoluteMouseSample;
+
+typedef struct {
+    AbsoluteMouseSample data[ABSOLUTE_MOUSE_QUEUE_SIZE];
+    int rptr, wptr, count;
+} AbsoluteMouseQueue;
+
+typedef struct {
+    qemu_irq irq_absolute_mouse;
+    AbsoluteMouseQueue queue;
+} AbsoluteMouseState;
+
+typedef struct ISAAbsoluteMouseState {
+    ISADevice dev;
+    AbsoluteMouseState  absolutemouse;
+} ISAAbsoluteMouseState;
+
+static const VMStateDescription vmstate_absolute_mouse = {
+    .name = "absolutemouse",
+    .version_id = 3,
+    .minimum_version_id = 3,
+    .minimum_version_id_old = 3,
+    .fields      = (VMStateField []) {
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static const VMStateDescription vmstate_absolute_mouse_isa = {
+    .name = "absolutemouse",
+    .version_id = 3,
+    .minimum_version_id = 3,
+    .minimum_version_id_old = 3,
+    .fields      = (VMStateField []) {
+        VMSTATE_STRUCT(absolutemouse, ISAAbsoluteMouseState, 0, vmstate_absolute_mouse, AbsoluteMouseState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static inline int int_clamp(int val, int vmin, int vmax)
+{
+    if (val < vmin)
+        return vmin;
+    else if (val > vmax)
+        return vmax;
+    else
+        return val;
+}
+
+static AbsoluteMouseSample absolute_mouse_peek_data(void* opaque)
+{
+    // Read, but don't remove from queue
+    AbsoluteMouseState* s = (AbsoluteMouseState*)opaque;
+    AbsoluteMouseQueue* q = &s->queue;
+
+    AbsoluteMouseSample val;
+    int index;
+
+    if (q->count == 0) {
+        /* NOTE: if no data left, we return the last one */
+        /* XXX: need a timer to do things correctly */
+        index = q->rptr - 1;
+        if (index < 0)
+            index = ABSOLUTE_MOUSE_QUEUE_SIZE - 1;
+        val = q->data[index];
+    } else {
+        val = q->data[q->rptr];
+    }
+
+    return val;
+}
+
+static void absolute_mouse_queue(void* opaque, AbsoluteMouseSample* state)
+{
+    AbsoluteMouseState* s = (AbsoluteMouseState*)opaque;
+    AbsoluteMouseQueue* q = &s->queue;
+    int i = 0;
+
+    AbsoluteMouseSample oldsample = absolute_mouse_peek_data(s);
+
+    if (
+        oldsample.mouse_dx == state->mouse_dx &&
+        oldsample.mouse_dy == state->mouse_dy &&
+        oldsample.mouse_dz == state->mouse_dz &&
+        oldsample.mouse_buttons == state->mouse_buttons &&
+	(SKIP_DUPLICATE_EVENTS)
+       )
+    {
+        // Skip same data
+        return;
+    }
+
+    if (q->count >= ABSOLUTE_MOUSE_QUEUE_SIZE)
+    {
+#ifdef DEBUG_MOUSE_STATE_LOST
+	printf("absolute_mouse: queue overrun\n");
+#endif
+	// TODO: cleanup queue e.g. cleanup data (mouse button states)
+	for (i = 0; i <ABSOLUTE_MOUSE_QUEUE_SIZE; i++)
+	{
+		q->data[i].mouse_buttons = 0;
+	}
+
+	// Toggle again to trigger again any TSR
+        qemu_set_irq(s->irq_absolute_mouse, 0);
+        qemu_set_irq(s->irq_absolute_mouse, 1);
+        return;
+    }
+
+#ifdef DEBUG_MOUSE_QUEUE
+    printf("absolute_mouse: ***** queue: x=%i, y=%i, z=%i, buttons=%i\n", state->mouse_dx, state->mouse_dy, state->mouse_dz, (int)state->mouse_buttons);
+#endif
+    q->data[q->wptr] = *state;
+    if (++q->wptr == ABSOLUTE_MOUSE_QUEUE_SIZE)
+        q->wptr = 0;
+    q->count++;
+    qemu_set_irq(s->irq_absolute_mouse, 1);
+}
+
+static AbsoluteMouseSample absolute_mouse_read_data(void* opaque)
+{
+    AbsoluteMouseState* s = (AbsoluteMouseState*)opaque;
+    AbsoluteMouseQueue* q = &s->queue;
+
+    AbsoluteMouseSample val;
+    int index;
+
+    if (q->count == 0) {
+        /* NOTE: if no data left, we return the last one */
+        /* XXX: need a timer to do things correctly */
+        index = q->rptr - 1;
+        if (index < 0)
+            index = ABSOLUTE_MOUSE_QUEUE_SIZE - 1;
+        val = q->data[index];
+    } else {
+        val = q->data[q->rptr];
+        if (++q->rptr == ABSOLUTE_MOUSE_QUEUE_SIZE)
+            q->rptr = 0;
+        q->count--;
+        /* reading deasserts IRQ */
+        qemu_set_irq(s->irq_absolute_mouse, 0);
+
+        /* reassert IRQs if data left */
+        if (q->count != 0)
+	{
+	    qemu_set_irq(s->irq_absolute_mouse, 1);
+        }
+    }
+
+    return val;
+}
+
+static void absolute_mouse_event(void *opaque,
+                            int dx, int dy, int dz, int buttons_state)
+{
+    AbsoluteMouseState *s = opaque;
+    AbsoluteMouseSample sample;
+
+#ifdef DEBUG_MOUSE_EVENT
+    printf("absolute_mouse: ***** x=%i, y=%i, z=%i, buttons=%i\n", dx, dy, dz, (int)buttons_state);
+#endif
+    // x=0, y=0, Left, upper corner
+    // x=32767, y=32767, Right, lower corner
+
+    sample.mouse_dx = dx;
+    sample.mouse_dy = dy;
+//    sample.mouse_dz += dz;
+//    sample.mouse_dz = int_clamp(sample.mouse_dz, -127, 127);  
+    sample.mouse_dz = dz;
+    sample.mouse_buttons = buttons_state;;
+
+    absolute_mouse_queue(s, &sample);
+}
+
+static void absolute_mouse_reset(void *opaque)
+{
+#ifdef DEBUG_MOUSE
+    printf("absolute_mouse: reset\n");
+#endif
+
+    AbsoluteMouseState *s = (AbsoluteMouseState *) opaque;
+
+//    printf("sizeof(s->queue.data)=%li\n", sizeof(s->queue.data));
+    memset(&(s->queue.data), 0, sizeof(s->queue.data));
+
+    AbsoluteMouseQueue* q = &s->queue;
+    q->rptr = 0;
+    q->wptr = 0;
+    q->count = 0;
+
+    qemu_set_irq(s->irq_absolute_mouse, 0);
+}
+
+static uint32_t absolute_mouse_ioport_read2(void *opaque, uint32_t addr)
+{
+    uint16_t val = 0;
+
+    AbsoluteMouseState *s = (AbsoluteMouseState *) opaque;
+    AbsoluteMouseSample sample;
+
+    switch (addr)
+    {
+	case 0x1100:
+            // magic cookie
+	    val = 0x5F5F;
+            break;
+	case 0x1102:
+	    // Peek only here
+	    sample = absolute_mouse_peek_data(s);
+	    val = sample.mouse_dx;
+	    break;
+	case 0x1104:
+	    // Peek only here
+	    sample = absolute_mouse_peek_data(s);
+	    val = sample.mouse_dy;
+	    break;
+	case 0x1106:
+	    // Peek only here
+	    sample = absolute_mouse_peek_data(s);
+	    val = sample.mouse_dz;
+	    break;
+	case 0x1108:
+	    // Read here from queue
+	    sample = absolute_mouse_read_data(s);
+	    val = sample.mouse_buttons;
+	    break;
+	default:
+	    printf("absolute-mouse: I/O reserved for future use\n");
+	    break;
+    }
+#ifdef DEBUG_MOUSE
+    printf("absolute_mouse: read from port 0x%04X, value=0x%04X (%i)\n", addr, val, val);
+	
+    if (addr == 0x1108)
+    {
+      //  printf("#########################################################\n");
+        printf("absolute_mouse: read buttons port\n");
+        printf("#########################################################\n");
+    }
+#endif
+    return val;
+}
+
+static int absolute_mouse_initfn(ISADevice *dev)
+{
+#ifdef DEBUG_MOUSE
+    printf("absolute_mouse: init\n");
+#endif
+
+    AbsoluteMouseState *s = &(DO_UPCAST(ISAAbsoluteMouseState, dev, dev)->absolutemouse);
+
+    // http://www.beyondlogic.org/interrupts/interupt.htm
+    // http://www.lammertbies.nl/comm/info/RS-232_io.html
+
+//    isa_init_irq(dev, &s->irq_absolute_mouse, 10); // IRQ 10
+    isa_init_irq(dev, &s->irq_absolute_mouse, 5); // IRQ 5
+    register_ioport_read(0x1100, 16, 2, absolute_mouse_ioport_read2, s);
+
+    // 0 ... relative, 1 ... absolute
+    qemu_add_mouse_event_handler(absolute_mouse_event, s, 1, "QEMU Absolute Mouse");
+    qemu_register_reset(absolute_mouse_reset, s);
+
+#ifdef DEBUG_MOUSE
+    printf("absolute_mouse: init done\n");
+#endif
+
+    return 0;
+}
+
+static ISADeviceInfo absolute_mouse_info = {
+    .qdev.name     = "absolutemouse",
+    .qdev.size     = sizeof(ISAAbsoluteMouseState),
+    .qdev.vmsd     = &vmstate_absolute_mouse_isa,
+    .qdev.no_user  = 1,
+    .init          = absolute_mouse_initfn,
+};
+
+static void absolute_mouse_register(void)
+{
+#ifdef DEBUG_MOUSE
+    printf("absolute_mouse: register\n");
+#endif
+
+    isa_qdev_register(&absolute_mouse_info);
+    // Must be added pc.c
+    // isa_dev = isa_create_simple("i8042");
+    // isa_dev = isa_create_simple("absolutemouse");
+
+#ifdef DEBUG_MOUSE
+    printf("absolute_mouse: register done\n");
+#endif
+}
+
+device_init(absolute_mouse_register)
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/hw/absolute-mouse.h qemu-0.12.3/hw/absolute-mouse.h
--- qemu-0.12.3-orig/hw/absolute-mouse.h	1970-01-01 01:00:00.000000000 +0100
+++ qemu-0.12.3/hw/absolute-mouse.h	2010-04-02 06:23:21.000000000 +0200
@@ -0,0 +1,22 @@
+/*
+ * QEMU Absolute mouse emulation for DOS
+ *
+ * Copyright (c) 2010 Gerhard Wiesinger
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 and not
+ * any later version of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* absolute-mouse.c */
+void *absolute_mouse_init(void (*update_irq)(void *, int), void *update_arg);
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/hw/debugports.c qemu-0.12.3/hw/debugports.c
--- qemu-0.12.3-orig/hw/debugports.c	1970-01-01 01:00:00.000000000 +0100
+++ qemu-0.12.3/hw/debugports.c	2010-04-02 06:21:30.000000000 +0200
@@ -0,0 +1,116 @@
+/*
+ * QEMU Debug ports for drivers and DOS
+ *
+ * Copyright (c) 2010 Gerhard Wiesinger
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 and not
+ * any later version of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+#include "isa.h"
+
+/* debug ports */
+//#define DEBUG_PORTS
+#define DEBUG_DOS
+
+typedef struct ISADebugPortsState {
+    ISADevice dev;
+} ISADebugPortsState;
+
+static const VMStateDescription vmstate_debugports_isa = {
+    .name = "debugports",
+    .version_id = 3,
+    .minimum_version_id = 3,
+    .minimum_version_id_old = 3,
+    .fields      = (VMStateField []) {
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+#ifdef DEBUG_DOS
+static void debugports_ioport_write2(void *opaque, uint32_t addr, uint32_t data)
+{
+	// 0: print everything, 1: print only deltas
+	static uint32_t delta_flags[32] = {0};
+	static uint32_t old_data[32] = {0};
+	uint16_t index = addr - 0x1200;
+	uint16_t index_delta = addr - 0x1220;
+
+	if (addr >= 0x1220 && addr <= 0x123F)
+	{
+		printf("debugports: Delta Port 0x%04X=%i\n", addr, data);		
+		delta_flags[index_delta] = data;
+		return;
+	}
+
+
+//	printf("#########################################################\n");
+	if (delta_flags[index])
+	{
+		// Deltas only
+		if (data != old_data[index])
+		{
+			printf("debugports: ********* Changed: write to port 0x%04X, value=0x%04X (%i)\n", addr, data, data);
+			old_data[index] = data;
+		}
+	}
+	else
+	{
+		printf("debugports: write to port 0x%04X, value=0x%04X (%i)\n", addr, data, data);
+	}
+//	printf("#########################################################\n");
+}
+#endif
+
+static int debugports_initfn(ISADevice *dev)
+{
+#ifdef DEBUG_PORTS
+    printf("debugports: init\n");
+#endif
+
+#ifdef DEBUG_DOS
+    ISADebugPortsState *s = DO_UPCAST(ISADebugPortsState, dev, dev);
+    register_ioport_write(0x1200, 64, 2, debugports_ioport_write2, s);
+#endif
+
+#ifdef DEBUG_PORTS
+    printf("debugports: init done\n");
+#endif
+
+    return 0;
+}
+
+static ISADeviceInfo debugports_info = {
+    .qdev.name     = "debugports",
+    .qdev.size     = sizeof(ISADebugPortsState),
+    .qdev.vmsd     = &vmstate_debugports_isa,
+    .qdev.no_user  = 1,
+    .init          = debugports_initfn,
+};
+
+static void debugports_register(void)
+{
+#ifdef DEBUG_PORTS
+    printf("debugports: register\n");
+#endif
+
+    isa_qdev_register(&debugports_info);
+    // Must be added pc.c
+    // isa_dev = isa_create_simple("i8042");
+    // isa_dev = isa_create_simple("debugports");
+
+#ifdef DEBUG_PORTS
+    printf("debugports: register done\n");
+#endif
+}
+
+device_init(debugports_register)
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/hw/pc.c qemu-0.12.3/hw/pc.c
--- qemu-0.12.3-orig/hw/pc.c	2010-02-23 21:54:38.000000000 +0100
+++ qemu-0.12.3/hw/pc.c	2010-04-02 07:04:58.000000000 +0200
@@ -2,6 +2,7 @@
  * QEMU PC System Emulator
  *
  * Copyright (c) 2003-2004 Fabrice Bellard
+ * Copyright (c) 2010 Gerhard Wiesinger
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -1196,6 +1197,12 @@
     }
 
     isa_dev = isa_create_simple("i8042");
+    if (absolute_mouse) {
+        isa_dev = isa_create_simple("absolutemouse");
+    }
+    if (debugports) {
+        isa_dev = isa_create_simple("debugports");
+    }
     DMA_init(0);
 #ifdef HAS_AUDIO
     audio_init(pci_enabled ? pci_bus : NULL, isa_irq);
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/hw/pc.h qemu-0.12.3/hw/pc.h
--- qemu-0.12.3-orig/hw/pc.h	2010-02-23 21:54:38.000000000 +0100
+++ qemu-0.12.3/hw/pc.h	2010-04-02 07:07:43.000000000 +0200
@@ -90,6 +90,8 @@
 
 /* pc.c */
 extern int fd_bootchk;
+extern int absolute_mouse;
+extern int debugports;
 
 void ioport_set_a20(int enable);
 int ioport_get_a20(void);
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/Makefile.target qemu-0.12.3/Makefile.target
--- qemu-0.12.3-orig/Makefile.target	2010-02-23 21:54:38.000000000 +0100
+++ qemu-0.12.3/Makefile.target	2010-04-01 20:46:55.000000000 +0200
@@ -188,7 +188,7 @@
 
 # Hardware support
 obj-i386-y = ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/piix.o
-obj-i386-y += pckbd.o $(sound-obj-y) dma.o
+obj-i386-y += pckbd.o absolute-mouse.o debugports.o $(sound-obj-y) dma.o
 obj-i386-y += vga.o vga-pci.o vga-isa.o
 obj-i386-y += fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
 obj-i386-y += cirrus_vga.o apic.o ioapic.o parallel.o acpi.o piix_pci.o
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/qemu-options.hx qemu-0.12.3/qemu-options.hx
--- qemu-0.12.3-orig/qemu-options.hx	2010-02-23 21:54:38.000000000 +0100
+++ qemu-0.12.3/qemu-options.hx	2010-04-02 07:08:59.000000000 +0200
@@ -429,6 +429,30 @@
 Set system UUID.
 ETEXI
 
+DEF("absolute-mouse", 0, QEMU_OPTION_absolute_mouse,
+    "-absolute-mouse Proprietary pointer device that uses absolute coordinates (like a touchscreen)\n"
+    "                with VNC for e.g. DOS. This means qemu is able to report the mouse position\n"
+    "                without having to grab the mouse. Needs a DOS TSR to emulate the mouse.\n"
+    "                DOS TSR also emulates a HP-HIL 45911 Tablet using INT 6Fh.\n"
+    "                Also overrides the PS/2 mouse emulation when activated.\n")
+STEXI
+@item -absolute-mouse
+Proprietary pointer device that uses absolute coordinates (like a touchscreen)
+with VNC for e.g. DOS. This means qemu is able to report the mouse position
+without having to grab the mouse. Needs a DOS TSR to emulate the mouse.
+DOS TSR also emulates a HP-HIL 45911 Tablet using INT 6Fh.
+Also overrides the PS/2 mouse emulation when activated.
+ETEXI
+
+DEF("debugports", 0, QEMU_OPTION_debugports,
+    "-debugports     Enables debug ports which can be used by drivers or DOS TSR programs.\n"
+    "                Look at the code of the absolute-mouse DOS TSR for examples.\n")
+STEXI
+@item -debugports
+Enables debug ports which can be used by drivers or DOS TSR programs.
+Look at the code of the absolute-mouse DOS TSR for examples.
+ETEXI
+
 STEXI
 @end table
 ETEXI
diff -Nur --exclude 'config-host.*' --exclude 'config-target.h*' --exclude qemu-monitor.h --exclude qemu-options.h --exclude qemu-img-cmds.h --exclude _vgabios_.c --exclude vbetables.h --exclude pckbd.c --exclude usb-hid.c --exclude 'lsi53c895a.c*' --exclude vnc.c --exclude '*.mak' --exclude Makefile --exclude '*.d' qemu-0.12.3-orig/vl.c qemu-0.12.3/vl.c
--- qemu-0.12.3-orig/vl.c	2010-02-23 21:54:38.000000000 +0100
+++ qemu-0.12.3/vl.c	2010-04-02 07:06:03.000000000 +0200
@@ -266,6 +266,9 @@
 
 uint8_t qemu_uuid[16];
 
+int absolute_mouse = 0;
+int debugports = 0;
+
 static QEMUBootSetHandler *boot_set_handler;
 static void *boot_set_opaque;
 
@@ -5504,6 +5507,12 @@
                     exit(1);
                 }
                 break;
+            case QEMU_OPTION_absolute_mouse:
+                absolute_mouse = 1;
+                break;
+            case QEMU_OPTION_debugports:
+                debugports = 1;
+                break;
 #ifndef _WIN32
 	    case QEMU_OPTION_daemonize:
 		daemonize = 1;
