famec hack, CPU debug in CD mode
[picodrive.git] / Pico / Memory.c
index 26be012..ca92e81 100644 (file)
@@ -7,7 +7,7 @@
 // For commercial use, separate licencing terms must be obtained.\r
 \r
 \r
-#define __debug_io\r
+//#define __debug_io\r
 \r
 #include "PicoInt.h"\r
 \r
@@ -323,7 +323,7 @@ PICO_INTERNAL_ASM u32 PicoRead8(u32 a)
 \r
 #ifndef EMU_CORE_DEBUG\r
   // sram\r
-  if(a >= SRam.start && a <= SRam.end && (Pico.m.sram_reg&5)) {\r
+  if (a >= SRam.start && a <= SRam.end && (Pico.m.sram_reg&5)) {\r
     d = SRAMRead(a);\r
     elprintf(EL_SRAMIO, "sram r8 [%06x] %02x @ %06x", a, d, SekPc);\r
     goto end;\r
@@ -341,7 +341,7 @@ end:
   dprintf("r8 : %06x,   %02x @%06x", a&0xffffff, (u8)d, SekPc);\r
 #endif\r
 #ifdef EMU_CORE_DEBUG\r
-  if(a>=Pico.romsize/*&&(ppop&0x3f)!=0x3a&&(ppop&0x3f)!=0x3b*/) {\r
+  if (a>=Pico.romsize) {\r
     lastread_a = a;\r
     lastread_d[lrp_cyc++&15] = (u8)d;\r
   }\r
@@ -359,7 +359,7 @@ PICO_INTERNAL_ASM u32 PicoRead16(u32 a)
 \r
 #ifndef EMU_CORE_DEBUG\r
   // sram\r
-  if(a >= SRam.start && a <= SRam.end && (Pico.m.sram_reg&5)) {\r
+  if (a >= SRam.start && a <= SRam.end && (Pico.m.sram_reg&5)) {\r
     d = SRAMRead(a);\r
     d |= d<<8;\r
     elprintf(EL_SRAMIO, "sram r16 [%06x] %04x @ %06x", a, d, SekPc);\r
@@ -377,7 +377,7 @@ end:
   dprintf("r16: %06x, %04x  @%06x", a&0xffffff, d, SekPc);\r
 #endif\r
 #ifdef EMU_CORE_DEBUG\r
-  if(a>=Pico.romsize/*&&(ppop&0x3f)!=0x3a&&(ppop&0x3f)!=0x3b*/) {\r
+  if (a>=Pico.romsize) {\r
     lastread_a = a;\r
     lastread_d[lrp_cyc++&15] = d;\r
   }\r
@@ -411,7 +411,7 @@ end:
   dprintf("r32: %06x, %08x @%06x", a&0xffffff, d, SekPc);\r
 #endif\r
 #ifdef EMU_CORE_DEBUG\r
-  if(a>=Pico.romsize/*&&(ppop&0x3f)!=0x3a&&(ppop&0x3f)!=0x3b*/) {\r
+  if (a>=Pico.romsize) {\r
     lastread_a = a;\r
     lastread_d[lrp_cyc++&15] = d;\r
   }\r
@@ -525,33 +525,36 @@ unsigned int  m68k_read_pcrelative_CD16(unsigned int a);
 unsigned int  m68k_read_pcrelative_CD32(unsigned int a);\r
 \r
 // these are allowed to access RAM\r
-static unsigned int  m68k_read_8 (unsigned int a, int do_fake) {\r
+static unsigned int  m68k_read_8 (unsigned int a, int do_fake)\r
+{\r
   a&=0xffffff;\r
-  if(PicoMCD&1) return m68k_read_pcrelative_CD8(a);\r
-  if(a<Pico.romsize)         return *(u8 *)(Pico.rom+(a^1)); // Rom\r
+  if(a<Pico.romsize && m68ki_cpu_p==&PicoCpuMM68k)    return *(u8 *)(Pico.rom+(a^1)); // Rom\r
 #ifdef EMU_CORE_DEBUG\r
   if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];\r
 #endif\r
+  if(PicoMCD&1) return m68k_read_pcrelative_CD8(a);\r
   if((a&0xe00000)==0xe00000) return *(u8 *)(Pico.ram+((a^1)&0xffff)); // Ram\r
   return 0;\r
 }\r
-static unsigned int  m68k_read_16(unsigned int a, int do_fake) {\r
+static unsigned int  m68k_read_16(unsigned int a, int do_fake)\r
+{\r
   a&=0xffffff;\r
-  if(PicoMCD&1) return m68k_read_pcrelative_CD16(a);\r
-  if(a<Pico.romsize)         return *(u16 *)(Pico.rom+(a&~1)); // Rom\r
+  if(a<Pico.romsize && m68ki_cpu_p==&PicoCpuMM68k)    return *(u16 *)(Pico.rom+(a&~1)); // Rom\r
 #ifdef EMU_CORE_DEBUG\r
   if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];\r
 #endif\r
+  if(PicoMCD&1) return m68k_read_pcrelative_CD16(a);\r
   if((a&0xe00000)==0xe00000) return *(u16 *)(Pico.ram+(a&0xfffe)); // Ram\r
   return 0;\r
 }\r
-static unsigned int  m68k_read_32(unsigned int a, int do_fake) {\r
+static unsigned int  m68k_read_32(unsigned int a, int do_fake)\r
+{\r
   a&=0xffffff;\r
-  if(PicoMCD&1) return m68k_read_pcrelative_CD32(a);\r
-  if(a<Pico.romsize)         { u16 *pm=(u16 *)(Pico.rom+(a&~1));     return (pm[0]<<16)|pm[1]; }\r
+  if(a<Pico.romsize && m68ki_cpu_p==&PicoCpuMM68k) { u16 *pm=(u16 *)(Pico.rom+(a&~1)); return (pm[0]<<16)|pm[1]; }\r
 #ifdef EMU_CORE_DEBUG\r
   if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];\r
 #endif\r
+  if(PicoMCD&1) return m68k_read_pcrelative_CD32(a);\r
   if((a&0xe00000)==0xe00000) { u16 *pm=(u16 *)(Pico.ram+(a&0xfffe)); return (pm[0]<<16)|pm[1]; } // Ram\r
   return 0;\r
 }\r
@@ -570,7 +573,8 @@ unsigned int m68k_read_disassembler_32(unsigned int a) { return m68k_read_32(a,
 unsigned int m68k_read_memory_8(unsigned int a)\r
 {\r
   u8 d;\r
-  if(a<Pico.romsize) d = *(u8 *) (Pico.rom+(a^1));\r
+  if (a<Pico.romsize && m68ki_cpu_p==&PicoCpuMM68k)\r
+       d = *(u8 *) (Pico.rom+(a^1));\r
   else d = (u8) lastread_d[lrp_mus++&15];\r
 #ifdef __debug_io\r
   dprintf("r8_mu : %06x,   %02x @%06x", a&0xffffff, d, SekPc);\r
@@ -580,7 +584,8 @@ unsigned int m68k_read_memory_8(unsigned int a)
 unsigned int m68k_read_memory_16(unsigned int a)\r
 {\r
   u16 d;\r
-  if(a<Pico.romsize) d = *(u16 *)(Pico.rom+(a&~1));\r
+  if (a<Pico.romsize && m68ki_cpu_p==&PicoCpuMM68k)\r
+       d = *(u16 *)(Pico.rom+(a&~1));\r
   else d = (u16) lastread_d[lrp_mus++&15];\r
 #ifdef __debug_io\r
   dprintf("r16_mu: %06x, %04x @%06x", a&0xffffff, d, SekPc);\r
@@ -590,7 +595,9 @@ unsigned int m68k_read_memory_16(unsigned int a)
 unsigned int m68k_read_memory_32(unsigned int a)\r
 {\r
   u32 d;\r
-  if(a<Pico.romsize) {u16 *pm=(u16 *)(Pico.rom+(a&~1));d=(pm[0]<<16)|pm[1];}\r
+  if (a<Pico.romsize && m68ki_cpu_p==&PicoCpuMM68k)\r
+       { u16 *pm=(u16 *)(Pico.rom+(a&~1));d=(pm[0]<<16)|pm[1]; }\r
+  else if (a <= 0x78) d = m68k_read_32(a, 0);\r
   else d = lastread_d[lrp_mus++&15];\r
 #ifdef __debug_io\r
   dprintf("r32_mu: %06x, %08x @%06x", a&0xffffff, d, SekPc);\r