diff -Nur plex86/user/plex86.conf plex86-jens/user/plex86.conf
--- plex86/user/plex86.conf	Sun Apr  9 01:20:24 2000
+++ plex86-jens/user/plex86.conf	Mon Apr 10 13:45:33 2000
@@ -14,8 +14,10 @@
 #plugin = ./plugins/bios/plugin-bios.so ../guest/test/kernel
 #plugin = ./plugins/bios/plugin-bios.so ../guest/virtcode/kernel
 #plugin = ./plugins/bios/plugin-bios.so ../guest/cooperative/kernel
-plugin = ./plugins/bios/plugin-bios.so ../guest/preemptive/kernel
+#plugin = ./plugins/bios/plugin-bios.so ../guest/preemptive/kernel
 #plugin = ./plugins/bios/plugin-bios.so ../guest/paging/kernel
+#plugin = ./plugins/bios/plugin-bios.so ../../solio/src/solio
+plugin = ./plugins/bios/plugin-bios.so ../../l4/kernel/fiasco/src/main
 
 
 
@@ -24,7 +26,7 @@
 ####################################################################
 
 # number of megabytes for vm
-memory = 4
+memory = 8
 
 # linear address of text space
 text_address = 0
diff -Nur plex86/user/plugins/bios/bin.c plex86-jens/user/plugins/bios/bin.c
--- plex86/user/plugins/bios/bin.c	Sun Apr  9 01:20:24 2000
+++ plex86-jens/user/plugins/bios/bin.c	Mon Apr 10 13:55:45 2000
@@ -23,8 +23,10 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <string.h>
 
 #include "bios.h"
+#include "multiboot.h"
 
 
 /************************************************************************/
@@ -38,6 +40,8 @@
     int virtno;
     struct stat stat_buf;
     char *image;
+    int i, multi_boot, multiboot_header_flags = 0;
+    struct multiboot_header mbh;
 
 
     /* load guest code */
@@ -146,6 +150,41 @@
     }
 
     free (image);
+
+    /* is it multiboot compliant? */
+
+    multi_boot = 0;
+    for(i = 0; i<1024;i++)
+      {
+	if( *(Bit32u *)(ptr + vm_conf.text_address + i) == MULTIBOOT_MAGIC)
+	  {
+	    fprintf(stderr,"bios: This is a multiboot compliant kernel.\n");
+	    multi_boot = 1;
+	    multiboot_header_flags = ((struct multiboot_header *)(ptr + vm_conf.text_address + i))->flags;
+	    memcpy(&mbh,ptr + vm_conf.text_address + i,sizeof(mbh));
+	    break;
+	  }
+      }
+    if(multi_boot)
+      {
+	struct multiboot_info mbi;
+
+	memset(&mbi,0,sizeof(mbi));
+	if(multiboot_header_flags & MULTIBOOT_PAGE_ALIGN)
+	  {
+	    fprintf(stderr,"Should align all boot modules to page boundaries.\n"); 
+	  }
+	mbi.flags |= MULTIBOOT_MEMORY;
+	mbi.mem_lower = 1024;
+	mbi.mem_upper = (vm_conf.max_memory - 1) * 1024;
+
+	/* FIXME: find a nice, warm and dry place for multiboot info structure */
+	//fprintf(stderr,"put mbi at 0x%x\n",vm_conf.max_memory * 1024 * 1024 - sizeof(mbi));
+	memcpy(ptr + vm_conf.max_memory * 1024 * 1024 - sizeof(mbi),&mbi,sizeof(mbi));
+	context.ebx = vm_conf.max_memory * 1024 * 1024 - sizeof(mbi);
+	context.eax = MULTIBOOT_VALID;
+      }
+
 
     return 0;
 }
diff -Nur plex86/user/plugins/bios/bios.c plex86-jens/user/plugins/bios/bios.c
--- plex86/user/plugins/bios/bios.c	Sun Apr  9 01:20:24 2000
+++ plex86-jens/user/plugins/bios/bios.c	Mon Apr 10 13:40:01 2000
@@ -50,7 +50,7 @@
 
     /* Prepare VGA BIOS / VM bootstrap */
 
-    context.ebx = vm_conf.text_address;
+    context.ecx = vm_conf.text_address;
     context.esp = vm_conf.stack_address;
     context.eip = VGA_BIOS_EIP;
     memcpy (ptr + VGA_BIOS_EIP, vga_bios_start,
diff -Nur plex86/user/plugins/bios/multiboot.h plex86-jens/user/plugins/bios/multiboot.h
--- plex86/user/plugins/bios/multiboot.h	Thu Jan  1 01:00:00 1970
+++ plex86-jens/user/plugins/bios/multiboot.h	Mon Apr 10 13:41:13 2000
@@ -0,0 +1,109 @@
+/*
+ *  plex86: run multiple x86 operating systems concurrently
+ *  Copyright (C) 1999-2000  The plex86 developers team
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+#ifndef MULTIBOOT_H
+#define MULTIBOOT_H
+
+/* Magic value identifying the multiboot_header */
+#define MULTIBOOT_MAGIC		0x1badb002
+
+/* Align all boot modules on page (4KB) boundaries.  */
+#define MULTIBOOT_PAGE_ALIGN	0x00000001
+
+/* magic value for eax */
+#define MULTIBOOT_VALID         0x2badb002
+
+#define MULTIBOOT_AOUT_KLUDGE	0x00010000
+
+#define MULTIBOOT_MEMORY	(1L<<0)
+
+struct multiboot_header
+{
+  /* Must be MULTIBOOT_MAGIC */
+  Bit32u magic;
+
+  /* Feature flags - see below.  */
+  Bit32u flags;
+
+  /* Checksum: magic + flags + checksum == 0 */
+  Bit32u checksum;
+
+  /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set.  */
+  Bit32u header_addr;
+  Bit32u load_addr;
+  Bit32u load_end_addr;
+  Bit32u bss_end_addr;
+  Bit32u entry;
+};
+
+struct multiboot_info
+{
+  /* These flags indicate which parts of the multiboot_info are valid;
+     see below for the actual flag bit definitions.  */
+  Bit32u flags;
+
+  /* Lower/Upper memory installed in the machine.
+     Valid only if MULTIBOOT_MEMORY is set in flags word above.  */
+  Bit32u mem_lower;
+  Bit32u mem_upper;
+
+  /* BIOS disk device the kernel was loaded from.
+     Valid only if MULTIBOOT_BOOT_DEVICE is set in flags word above.  */
+  Bit8u boot_device[4];
+
+  /* Command-line for the OS kernel: a null-terminated ASCII string.
+     Valid only if MULTIBOOT_CMDLINE is set in flags word above.  */
+  Bit32u cmdline;
+
+  /* List of boot modules loaded with the kernel.
+     Valid only if MULTIBOOT_MODS is set in flags word above.  */
+  Bit32u mods_count;
+  Bit32u mods_addr;
+
+  /* Symbol information for a.out or ELF executables. */
+  union
+  {
+    struct
+    {
+      /* a.out symbol information valid only if MULTIBOOT_AOUT_SYMS
+	 is set in flags word above.  */
+      Bit32u		tabsize;
+      Bit32u		strsize;
+      Bit32u		addr;
+      unsigned		reserved;
+    } a;
+
+    struct
+    {
+      /* ELF section header information valid only if
+	 MULTIBOOT_ELF_SHDR is set in flags word above.  */
+      unsigned		num;
+      Bit32u		size;
+      Bit32u		addr;
+      Bit32u		shndx;
+    } e;
+  } syms;
+
+  /* Memory map buffer.
+     Valid only if MULTIBOOT_MEM_MAP is set in flags word above.  */
+  Bit32u		mmap_count;
+  Bit32u		mmap_addr;
+};
+
+#endif
diff -Nur plex86/user/plugins/bios/vga.S plex86-jens/user/plugins/bios/vga.S
--- plex86/user/plugins/bios/vga.S	Sun Apr  9 01:20:24 2000
+++ plex86-jens/user/plugins/bios/vga.S	Mon Apr 10 13:49:10 2000
@@ -32,6 +32,7 @@
 
 .globl vga_bios_start
 vga_bios_start:
+	push	%eax
 	movw	$0x3cc,		%dx
 	inb	%dx,		%al
 	movb	$0xc3,		%al
@@ -2458,8 +2459,8 @@
 	movw	$0x3d4,		%dx
 	outw	%ax,		%dx
 
-	movl	%ebx,		%eax
-	call	*%eax
+	pop	%eax
+	call	*%ecx
 
 .globl vga_bios_end
 vga_bios_end:
