--- qemu-0.8.2/kqemu.c-	2006-07-22 21:23:34 +0400
+++ qemu-0.8.2/kqemu.c	2006-08-23 21:20:46 +0400
@@ -60,8 +60,10 @@
 
 #ifdef _WIN32
 #define KQEMU_DEVICE "\\\\.\\kqemu"
+#define QVM86_DEVICE "\\\\.\\qvm86"
 #else
 #define KQEMU_DEVICE "/dev/kqemu"
+#define QVM86_DEVICE "/dev/qvm86"
 #endif
 
 #ifdef _WIN32
@@ -154,7 +156,7 @@ static void kqemu_update_cpuid(CPUState 
        accelerated code */
 }
 
-int kqemu_init(CPUState *env)
+int kqemu_open(CPUState *env, char *dev)
 {
     struct kqemu_init init;
     int ret, version;
@@ -166,15 +168,15 @@ int kqemu_init(CPUState *env)
         return -1;
 
 #ifdef _WIN32
-    kqemu_fd = CreateFile(KQEMU_DEVICE, GENERIC_WRITE | GENERIC_READ,
+    kqemu_fd = CreateFile(dev, GENERIC_WRITE | GENERIC_READ,
                           FILE_SHARE_READ | FILE_SHARE_WRITE,
                           NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
                           NULL);
 #else
-    kqemu_fd = open(KQEMU_DEVICE, O_RDWR);
+    kqemu_fd = open(dev, O_RDWR);
 #endif
     if (kqemu_fd == KQEMU_INVALID_FD) {
-        fprintf(stderr, "Could not open '%s' - QEMU acceleration layer not activated\n", KQEMU_DEVICE);
+        fprintf(stderr, "Could not open '%s' - QEMU acceleration layer not activated\n", dev);
         return -1;
     }
     version = 0;
@@ -239,6 +241,18 @@ int kqemu_init(CPUState *env)
     return 0;
 }
 
+int kqemu_init(CPUState *env)
+{
+	if (kqemu_open(env, KQEMU_DEVICE) >= 0)
+		return 0;
+	if (kqemu_open(env, QVM86_DEVICE) >= 0) {
+		/* flags not supported by qvm86 */
+		env->cpuid_features &= ~(CPUID_PAT | CPUID_PAE | CPUID_SEP);
+		return 0;
+	}
+	return -1;
+}
+
 void kqemu_flush_page(CPUState *env, target_ulong addr)
 {
 #if defined(DEBUG)
