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;
}
_______________________________________________
Qemu-devel mailing list
address@hidden
http://mail.nongnu.org/mailman/listinfo/qemu-devel