diff engine.c @ 21:1925cfa982fe

fixing trace
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 09 Jul 2018 11:25:28 +0900
parents e3b08716aa53
children 5217f23f2f9e
line wrap: on
line diff
--- a/engine.c	Mon Jul 09 09:29:33 2018 +0900
+++ b/engine.c	Mon Jul 09 11:25:28 2018 +0900
@@ -39,12 +39,29 @@
 static int tracetrick=0;
 extern long romstart;
 
-#ifdef USE_MMU
+#ifndef USE_MMU
+
+static Byte mem1(Word adr) {
+    if ((adr&0xfe00)==(IOPAGE&0xfe00)) return do_input(adr&0x1ff);
+    return mem[adr];
+}
+
+static void SETBYTE1(Word a,Byte n) {
+    if ((a&0xfe00)==(IOPAGE&0xfe00)) do_output(a&0x1ff,n);
+    if(!(a>=romstart))mem[a]=n;
+}
+#define mem(a) mem1(a)
+#define SETBYTE(a,n) SETBYTE1(a,n);
+
+#else
+
+int paddr(Word adr, Byte *immu) { 
+    if ((adr&0xfe00)==(IOPAGE&0xfe00)) return memsize-0x10000+adr;
+    return  (immu[ (adr) >> 13 ] <<13 ) + ((adr) & 0x1fff ); 
+}
 
 Byte * mem0(Byte *iphymem, Word adr, Byte *immu) { 
-    if ((adr&0xfe00)==(IOPAGE&0xfe00)) return &mem[adr];
-    int addr = (immu[ (adr) >> 13 ] <<13 ) + ((adr) & 0x1fff ); 
-    return & iphymem[ addr ];
+    return & iphymem[ paddr(adr,immu) ];
 }
 
 static Byte mem1(Byte *iphymem, Word adr, Byte *immu) {
@@ -72,21 +89,6 @@
     } \
 } 
 
-
-#else
-
-static Byte mem1(Word adr) {
-    if ((adr&0xfe00)==(IOPAGE&0xfe00)) return do_input(adr&0x1ff);
-    return mem[adr];
-}
-
-static void SETBYTE1(Word a,Byte n) {
-    if ((a&0xfe00)==(IOPAGE&0xfe00)) do_output(a&0x1ff,n);
-    if(!(a>=romstart))mem[a]=n;
-}
-#define mem(a) mem1(a)
-#define SETBYTE(a,n) SETBYTE1(a,n);
-
 #endif
 
 #define GETWORD(a) (mem(a)<<8|mem((a)+1))