qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Here is a patch to build qemu with powerpc (system) support


From: Martin
Subject: [Qemu-devel] Here is a patch to build qemu with powerpc (system) support on win32
Date: Mon, 10 May 2004 01:57:08 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5b) Gecko/20030823

I mad a little patch to be able to enable powerpc system emulation on windows
The patch is against qemu 0.5.5.
Just run configure with
./configure --target-list=i386-softmmu ppc-softmmu
(Which is the default with this patch)
and it builds both qemu.exe (which is i386 system emulation) and qemu-system-ppc.exe (which is ppc system emulation)

I tested it with the VGA framebuffer enabled linux kernel zIamge and the debian install disk on Jocelyns page
http://jocelyn.mayer.free.fr/qemu-ppc/

It seems to work for me.
I used the commandline:
qemu-system-ppc.exe --kernel zImage_vgafb.prep --fda debian_install_root.bin --boot a
and it just boots.

If anyone is interested I can make my binary qemu-system-ppc.exe available but I think it would be better to place one on the Fabrices qemu homepage or on Jocelyns qemu-ppc homepage if it is ready for primetime

Strange thing about the patch is I had to manually set the env struct to zero in cpu_ppc_init (in translate.c)
for(i=0;i<sizeof(CPUPPCState);i++)
{
   ((char*) env)[i]=0;
}

With the standard
memset(env, 0, sizeof(CPUPPCState));
The compiler complained about not being able to free a register.

Greetings,
Martin

diff -urbN qemu-0.5.5/configure qemu-0.5.5-win32/configure
--- qemu-0.5.5/configure        2004-05-08 16:51:18.000000000 +0200
+++ qemu-0.5.5-win32/configure  2004-05-10 00:48:46.000000000 +0200
@@ -140,7 +140,7 @@
 strip="${cross_prefix}${strip}"
 
 if test "$mingw32" = "yes" ; then
-    target_list="i386-softmmu"
+    target_list="i386-softmmu ppc-softmmu"
     EXESUF=".exe"
     gdbstub="no"
 fi
diff -urbN qemu-0.5.5/hw/m48t59.c qemu-0.5.5-win32/hw/m48t59.c
--- qemu-0.5.5/hw/m48t59.c      2004-05-08 16:51:18.000000000 +0200
+++ qemu-0.5.5-win32/hw/m48t59.c        2004-05-10 00:20:44.000000000 +0200
@@ -67,7 +67,11 @@
     time_t t;
 
     t = time(NULL) + NVRAM->time_offset;
-    localtime_r(&t, tm);
+    #ifdef WIN32
+         memcpy(tm,localtime(&t),sizeof(*tm));
+       #else
+         localtime_r (&t, &local) ;
+       #endif
 }
 
 static void set_time (m48t59_t *NVRAM, struct tm *tm)
@@ -129,7 +133,11 @@
 
 static void get_alarm (m48t59_t *NVRAM, struct tm *tm)
 {
-    localtime_r(&NVRAM->alarm, tm);
+       #ifdef WIN32
+         memcpy(tm,localtime(&NVRAM->alarm),sizeof(*tm));
+       #else
+          localtime_r (&NVRAM->alarm, tm);
+       #endif
 }
 
 static void set_alarm (m48t59_t *NVRAM, struct tm *tm)
diff -urbN qemu-0.5.5/target-ppc/helper.c qemu-0.5.5-win32/target-ppc/helper.c
--- qemu-0.5.5/target-ppc/helper.c      2004-05-08 16:51:18.000000000 +0200
+++ qemu-0.5.5-win32/target-ppc/helper.c        2004-05-10 00:02:46.000000000 
+0200
@@ -17,7 +17,13 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
+#ifdef _WIN32
+#define PROT_READ  1
+#define PROT_WRITE 2
+#else
 #include <sys/mman.h>
+#endif
 
 #include "exec.h"
 #if defined (USE_OPEN_FIRMWARE)
diff -urbN qemu-0.5.5/target-ppc/translate.c 
qemu-0.5.5-win32/target-ppc/translate.c
--- qemu-0.5.5/target-ppc/translate.c   2004-05-08 16:51:18.000000000 +0200
+++ qemu-0.5.5-win32/target-ppc/translate.c     2004-05-10 01:30:06.000000000 
+0200
@@ -2933,13 +2933,21 @@
 CPUPPCState *cpu_ppc_init(void)
 {
     CPUPPCState *env;
+    int i;
 
     cpu_exec_init();
 
     env = malloc(sizeof(CPUPPCState));
     if (!env)
         return NULL;
+#ifdef WIN32
+for(i=0;i<sizeof(CPUPPCState);i++)
+{
+       ((char*) env)[i]=0;
+}
+#else
     memset(env, 0, sizeof(CPUPPCState));
+#endif
 #if !defined(CONFIG_USER_ONLY) && defined (USE_OPEN_FIRMWARE)
     setup_machine(env, 0);
 #else
@@ -2961,7 +2969,6 @@
     msr_pr = 1;
 #endif
     env->access_type = ACCESS_INT;
-
     return env;
 }
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]