Cyclone interface for new mem system, minor tweaks
[picodrive.git] / pico / cd / memory.c
index a26cac7..b8998f8 100644 (file)
@@ -787,74 +787,6 @@ static void PicoWriteS68k16_pr(u32 a, u32 d)
 \r
 // -----------------------------------------------------------------\r
 \r
-#ifdef EMU_C68K\r
-static __inline int PicoMemBaseM68k(u32 pc)\r
-{\r
-  if ((pc&0xe00000)==0xe00000)\r
-    return (int)Pico.ram-(pc&0xff0000); // Program Counter in Ram\r
-\r
-  if (pc < 0x20000)\r
-    return (int)Pico_mcd->bios; // Program Counter in BIOS\r
-\r
-  if ((pc&0xfc0000)==0x200000)\r
-  {\r
-    if (!(Pico_mcd->s68k_regs[3]&4))\r
-      return (int)Pico_mcd->word_ram2M - 0x200000; // Program Counter in Word Ram\r
-    if (pc < 0x220000) {\r
-      int bank = Pico_mcd->s68k_regs[3]&1;\r
-      return (int)Pico_mcd->word_ram1M[bank] - 0x200000;\r
-    }\r
-  }\r
-\r
-  // Error - Program Counter is invalid\r
-  elprintf(EL_ANOMALY, "m68k FIXME: unhandled jump to %06x", pc);\r
-\r
-  return (int)Pico_mcd->bios;\r
-}\r
-\r
-\r
-static u32 PicoCheckPcM68k(u32 pc)\r
-{\r
-  pc-=PicoCpuCM68k.membase; // Get real pc\r
-  pc&=0xfffffe;\r
-\r
-  PicoCpuCM68k.membase=PicoMemBaseM68k(pc);\r
-\r
-  return PicoCpuCM68k.membase+pc;\r
-}\r
-\r
-\r
-static __inline int PicoMemBaseS68k(u32 pc)\r
-{\r
-  if (pc < 0x80000)                     // PRG RAM\r
-    return (int)Pico_mcd->prg_ram;\r
-\r
-  if ((pc&0xfc0000)==0x080000)          // WORD RAM 2M area (assume we are in the right mode..)\r
-    return (int)Pico_mcd->word_ram2M - 0x080000;\r
-\r
-  if ((pc&0xfe0000)==0x0c0000) {        // word RAM 1M area\r
-    int bank = (Pico_mcd->s68k_regs[3]&1)^1;\r
-    return (int)Pico_mcd->word_ram1M[bank] - 0x0c0000;\r
-  }\r
-\r
-  // Error - Program Counter is invalid\r
-  elprintf(EL_ANOMALY, "s68k FIXME: unhandled jump to %06x", pc);\r
-\r
-  return (int)Pico_mcd->prg_ram;\r
-}\r
-\r
-\r
-static u32 PicoCheckPcS68k(u32 pc)\r
-{\r
-  pc-=PicoCpuCS68k.membase; // Get real pc\r
-  pc&=0xfffffe;\r
-\r
-  PicoCpuCS68k.membase=PicoMemBaseS68k(pc);\r
-\r
-  return PicoCpuCS68k.membase+pc;\r
-}\r
-#endif\r
-\r
 // TODO: probably split\r
 void PicoMemRemapCD(int r3)\r
 {\r
@@ -963,15 +895,17 @@ PICO_INTERNAL void PicoMemSetupCD(void)
   cpu68k_map_set(s68k_write16_map, 0xff0000, 0xffffff, PicoWriteS68k16_pr, 1);\r
 \r
 #ifdef EMU_C68K\r
-  PicoCpuCM68k.checkpc = PicoCheckPcM68k;\r
   // s68k\r
-  PicoCpuCS68k.checkpc = PicoCheckPcS68k;\r
-  PicoCpuCS68k.fetch8  = PicoCpuCS68k.read8  = s68k_read8;\r
-  PicoCpuCS68k.fetch16 = PicoCpuCS68k.read16 = s68k_read16;\r
-  PicoCpuCS68k.fetch32 = PicoCpuCS68k.read32 = s68k_read32;\r
-  PicoCpuCS68k.write8  = s68k_write8;\r
-  PicoCpuCS68k.write16 = s68k_write16;\r
-  PicoCpuCS68k.write32 = s68k_write32;\r
+  PicoCpuCS68k.read8  = (void *)s68k_read8_map;\r
+  PicoCpuCS68k.read16 = (void *)s68k_read16_map;\r
+  PicoCpuCS68k.read32 = (void *)s68k_read16_map;\r
+  PicoCpuCS68k.write8  = (void *)s68k_write8_map;\r
+  PicoCpuCS68k.write16 = (void *)s68k_write16_map;\r
+  PicoCpuCS68k.write32 = (void *)s68k_write16_map;\r
+  PicoCpuCS68k.checkpc = NULL; /* unused */\r
+  PicoCpuCS68k.fetch8  = NULL;\r
+  PicoCpuCS68k.fetch16 = NULL;\r
+  PicoCpuCS68k.fetch32 = NULL;\r
 #endif\r
 #ifdef EMU_F68K\r
   // s68k\r
@@ -1044,101 +978,12 @@ static void PicoWriteCD32w(unsigned int a, unsigned int d) {
        if (m68ki_cpu_p == &PicoCpuMS68k) s68k_write32(a, d); else m68k_write32(a, d);\r
 }\r
 \r
-// these are allowed to access RAM\r
-static unsigned int  m68k_read_pcrelative_CD8 (unsigned int a)\r
-{\r
-  a&=0xffffff;\r
-  if(m68ki_cpu_p == &PicoCpuMS68k) {\r
-    if (a < 0x80000) return *(u8 *)(Pico_mcd->prg_ram+(a^1)); // PRG Ram\r
-    if ((a&0xfc0000)==0x080000 && !(Pico_mcd->s68k_regs[3]&4)) // word RAM (2M area: 080000-0bffff)\r
-      return *(u8 *)(Pico_mcd->word_ram2M+((a^1)&0x3ffff));\r
-    if ((a&0xfe0000)==0x0c0000 &&  (Pico_mcd->s68k_regs[3]&4)) { // word RAM (1M area: 0c0000-0dffff)\r
-      int bank = (Pico_mcd->s68k_regs[3]&1)^1;\r
-      return *(u8 *)(Pico_mcd->word_ram1M[bank]+((a^1)&0x1ffff));\r
-    }\r
-    elprintf(EL_ANOMALY, "s68k_read_pcrelative_CD8 FIXME: can't handle %06x", a);\r
-  } else {\r
-    if((a&0xe00000)==0xe00000) return *(u8 *)(Pico.ram+((a^1)&0xffff)); // Ram\r
-    if(a<0x20000)              return *(u8 *)(Pico.rom+(a^1)); // Bios\r
-    if((a&0xfc0000)==0x200000) { // word RAM\r
-      if(!(Pico_mcd->s68k_regs[3]&4)) // 2M?\r
-        return *(u8 *)(Pico_mcd->word_ram2M+((a^1)&0x3ffff));\r
-      else if (a < 0x220000) {\r
-        int bank = Pico_mcd->s68k_regs[3]&1;\r
-        return *(u8 *)(Pico_mcd->word_ram1M[bank]+((a^1)&0x1ffff));\r
-      }\r
-    }\r
-    elprintf(EL_ANOMALY, "m68k_read_pcrelative_CD8 FIXME: can't handle %06x", a);\r
-  }\r
-  return 0;//(u8)  lastread_d;\r
-}\r
-static unsigned int  m68k_read_pcrelative_CD16(unsigned int a)\r
-{\r
-  a&=0xffffff;\r
-  if(m68ki_cpu_p == &PicoCpuMS68k) {\r
-    if (a < 0x80000) return *(u16 *)(Pico_mcd->prg_ram+(a&~1)); // PRG Ram\r
-    if ((a&0xfc0000)==0x080000 && !(Pico_mcd->s68k_regs[3]&4)) // word RAM (2M area: 080000-0bffff)\r
-      return *(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe));\r
-    if ((a&0xfe0000)==0x0c0000 &&  (Pico_mcd->s68k_regs[3]&4)) { // word RAM (1M area: 0c0000-0dffff)\r
-      int bank = (Pico_mcd->s68k_regs[3]&1)^1;\r
-      return *(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe));\r
-    }\r
-    elprintf(EL_ANOMALY, "s68k_read_pcrelative_CD16 FIXME: can't handle %06x", a);\r
-  } else {\r
-    if((a&0xe00000)==0xe00000) return *(u16 *)(Pico.ram+(a&0xfffe)); // Ram\r
-    if(a<0x20000)              return *(u16 *)(Pico.rom+(a&~1)); // Bios\r
-    if((a&0xfc0000)==0x200000) { // word RAM\r
-      if(!(Pico_mcd->s68k_regs[3]&4)) // 2M?\r
-        return *(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe));\r
-      else if (a < 0x220000) {\r
-        int bank = Pico_mcd->s68k_regs[3]&1;\r
-        return *(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe));\r
-      }\r
-    }\r
-    elprintf(EL_ANOMALY, "m68k_read_pcrelative_CD16 FIXME: can't handle %06x", a);\r
-  }\r
-  return 0;\r
-}\r
-static unsigned int  m68k_read_pcrelative_CD32(unsigned int a)\r
-{\r
-  u16 *pm;\r
-  a&=0xffffff;\r
-  if(m68ki_cpu_p == &PicoCpuMS68k) {\r
-    if (a < 0x80000) { u16 *pm=(u16 *)(Pico_mcd->prg_ram+(a&~1)); return (pm[0]<<16)|pm[1]; } // PRG Ram\r
-    if ((a&0xfc0000)==0x080000 && !(Pico_mcd->s68k_regs[3]&4)) // word RAM (2M area: 080000-0bffff)\r
-      { pm=(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe)); return (pm[0]<<16)|pm[1]; }\r
-    if ((a&0xfe0000)==0x0c0000 &&  (Pico_mcd->s68k_regs[3]&4)) { // word RAM (1M area: 0c0000-0dffff)\r
-      int bank = (Pico_mcd->s68k_regs[3]&1)^1;\r
-      pm=(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe));\r
-      return (pm[0]<<16)|pm[1];\r
-    }\r
-    elprintf(EL_ANOMALY, "s68k_read_pcrelative_CD32 FIXME: can't handle %06x", a);\r
-  } else {\r
-    if((a&0xe00000)==0xe00000) { u16 *pm=(u16 *)(Pico.ram+(a&0xfffe)); return (pm[0]<<16)|pm[1]; } // Ram\r
-    if(a<0x20000)              { u16 *pm=(u16 *)(Pico.rom+(a&~1));     return (pm[0]<<16)|pm[1]; }\r
-    if((a&0xfc0000)==0x200000) { // word RAM\r
-      if(!(Pico_mcd->s68k_regs[3]&4)) // 2M?\r
-        { pm=(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe)); return (pm[0]<<16)|pm[1]; }\r
-      else if (a < 0x220000) {\r
-        int bank = Pico_mcd->s68k_regs[3]&1;\r
-        pm=(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe));\r
-        return (pm[0]<<16)|pm[1];\r
-      }\r
-    }\r
-    elprintf(EL_ANOMALY, "m68k_read_pcrelative_CD32 FIXME: can't handle %06x", a);\r
-  }\r
-  return 0;\r
-}\r
-\r
 extern unsigned int (*pm68k_read_memory_8) (unsigned int address);\r
 extern unsigned int (*pm68k_read_memory_16)(unsigned int address);\r
 extern unsigned int (*pm68k_read_memory_32)(unsigned int address);\r
 extern void (*pm68k_write_memory_8) (unsigned int address, unsigned char  value);\r
 extern void (*pm68k_write_memory_16)(unsigned int address, unsigned short value);\r
 extern void (*pm68k_write_memory_32)(unsigned int address, unsigned int   value);\r
-extern unsigned int (*pm68k_read_memory_pcr_8) (unsigned int address);\r
-extern unsigned int (*pm68k_read_memory_pcr_16)(unsigned int address);\r
-extern unsigned int (*pm68k_read_memory_pcr_32)(unsigned int address);\r
 \r
 static void m68k_mem_setup_cd(void)\r
 {\r
@@ -1148,9 +993,6 @@ static void m68k_mem_setup_cd(void)
   pm68k_write_memory_8  = PicoWriteCD8w;\r
   pm68k_write_memory_16 = PicoWriteCD16w;\r
   pm68k_write_memory_32 = PicoWriteCD32w;\r
-  pm68k_read_memory_pcr_8  = m68k_read_pcrelative_CD8;\r
-  pm68k_read_memory_pcr_16 = m68k_read_pcrelative_CD16;\r
-  pm68k_read_memory_pcr_32 = m68k_read_pcrelative_CD32;\r
 }\r
 #endif // EMU_M68K\r
 \r