diff -ur qemu-0.8.0/target-i386/helper.c qemu-0.8.0-modified/target-i386/helper.c
--- qemu-0.8.0/target-i386/helper.c	2005-12-19 17:51:53.000000000 -0500
+++ qemu-0.8.0-modified/target-i386/helper.c	2006-03-22 12:33:21.000000000 -0500
@@ -19,6 +19,29 @@
  */
 #include "exec.h"
 
+
+FILE *memfile=NULL;
+int trace_tag=0;
+unsigned char memfile_buf[4096];
+
+void helper_dump_memtrace(unsigned long address,
+			  unsigned long value,
+			  int load) {
+   
+   if (memfile==NULL) {
+      memfile=fopen("trace.mem","w");
+       /* 1 = _IOLBF */
+      setvbuf(memfile, memfile_buf, 1 , sizeof(memfile_buf));
+      
+   }
+   
+   fprintf(memfile,"%i: %lx %lx %c\n",trace_tag,
+	   address,value,load==1?'L':'S');
+   fflush(memfile);
+   trace_tag++;
+   
+}
+
 //#define DEBUG_PCALL
 
 #if 0
diff -ur qemu-0.8.0/target-i386/ops_mem.h qemu-0.8.0-modified/target-i386/ops_mem.h
--- qemu-0.8.0/target-i386/ops_mem.h	2005-12-19 17:51:53.000000000 -0500
+++ qemu-0.8.0-modified/target-i386/ops_mem.h	2006-03-22 11:07:07.000000000 -0500
@@ -1,68 +1,81 @@
 void OPPROTO glue(glue(op_ldub, MEMSUFFIX), _T0_A0)(void)
 {
     T0 = glue(ldub, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T0,1);
 }
 
 void OPPROTO glue(glue(op_ldsb, MEMSUFFIX), _T0_A0)(void)
 {
     T0 = glue(ldsb, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T0,1);
 }
 
 void OPPROTO glue(glue(op_lduw, MEMSUFFIX), _T0_A0)(void)
 {
     T0 = glue(lduw, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T0,1);
 }
 
 void OPPROTO glue(glue(op_ldsw, MEMSUFFIX), _T0_A0)(void)
 {
     T0 = glue(ldsw, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T0,1);
 }
 
 void OPPROTO glue(glue(op_ldl, MEMSUFFIX), _T0_A0)(void)
 {
     T0 = (uint32_t)glue(ldl, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T0,1);
 }
 
 void OPPROTO glue(glue(op_ldub, MEMSUFFIX), _T1_A0)(void)
 {
     T1 = glue(ldub, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T1,1);
 }
 
 void OPPROTO glue(glue(op_ldsb, MEMSUFFIX), _T1_A0)(void)
 {
     T1 = glue(ldsb, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T1,1);
 }
 
 void OPPROTO glue(glue(op_lduw, MEMSUFFIX), _T1_A0)(void)
 {
     T1 = glue(lduw, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T1,1);
 }
 
 void OPPROTO glue(glue(op_ldsw, MEMSUFFIX), _T1_A0)(void)
 {
     T1 = glue(ldsw, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T1,1);
 }
 
 void OPPROTO glue(glue(op_ldl, MEMSUFFIX), _T1_A0)(void)
 {
     T1 = (uint32_t)glue(ldl, MEMSUFFIX)(A0);
+    helper_dump_memtrace(A0,T1,1);
 }
 
 void OPPROTO glue(glue(op_stb, MEMSUFFIX), _T0_A0)(void)
 {
     glue(stb, MEMSUFFIX)(A0, T0);
+    helper_dump_memtrace(A0,T0,0);
     FORCE_RET();
 }
 
 void OPPROTO glue(glue(op_stw, MEMSUFFIX), _T0_A0)(void)
 {
     glue(stw, MEMSUFFIX)(A0, T0);
+    helper_dump_memtrace(A0,T0,0);
     FORCE_RET();
 }
 
 void OPPROTO glue(glue(op_stl, MEMSUFFIX), _T0_A0)(void)
 {
     glue(stl, MEMSUFFIX)(A0, T0);
+    helper_dump_memtrace(A0,T0,0);
     FORCE_RET();
 }
 
@@ -77,12 +90,14 @@
 void OPPROTO glue(glue(op_stw, MEMSUFFIX), _T1_A0)(void)
 {
     glue(stw, MEMSUFFIX)(A0, T1);
+    helper_dump_memtrace(A0,T1,0);
     FORCE_RET();
 }
 
 void OPPROTO glue(glue(op_stl, MEMSUFFIX), _T1_A0)(void)
 {
     glue(stl, MEMSUFFIX)(A0, T1);
+    helper_dump_memtrace(A0,T0,0);
     FORCE_RET();
 }
 
