+\r
+#if defined(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
+ dprintf("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-=PicoCpu.membase; // Get real pc\r
+ pc&=0xfffffe;\r
+\r
+ PicoCpu.membase=PicoMemBaseM68k(pc);\r
+\r
+ return PicoCpu.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);\r
+ return (int)Pico_mcd->word_ram1M[bank] - 0x0c0000;\r
+ }\r
+\r
+ // Error - Program Counter is invalid\r
+ dprintf("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-=PicoCpuS68k.membase; // Get real pc\r
+ pc&=0xfffffe;\r
+\r
+ PicoCpuS68k.membase=PicoMemBaseS68k(pc);\r
+\r
+ return PicoCpuS68k.membase+pc;\r
+}\r
+#endif\r
+\r
+\r
+PICO_INTERNAL void PicoMemSetupCD(void)\r
+{\r
+ dprintf("PicoMemSetupCD()");\r
+#ifdef EMU_C68K\r
+ // Setup m68k memory callbacks:\r
+ PicoCpu.checkpc=PicoCheckPcM68k;\r
+ PicoCpu.fetch8 =PicoCpu.read8 =PicoReadM68k8;\r
+ PicoCpu.fetch16=PicoCpu.read16=PicoReadM68k16;\r
+ PicoCpu.fetch32=PicoCpu.read32=PicoReadM68k32;\r
+ PicoCpu.write8 =PicoWriteM68k8;\r
+ PicoCpu.write16=PicoWriteM68k16;\r
+ PicoCpu.write32=PicoWriteM68k32;\r
+ // s68k\r
+ PicoCpuS68k.checkpc=PicoCheckPcS68k;\r
+ PicoCpuS68k.fetch8 =PicoCpuS68k.read8 =PicoReadS68k8;\r
+ PicoCpuS68k.fetch16=PicoCpuS68k.read16=PicoReadS68k16;\r
+ PicoCpuS68k.fetch32=PicoCpuS68k.read32=PicoReadS68k32;\r
+ PicoCpuS68k.write8 =PicoWriteS68k8;\r
+ PicoCpuS68k.write16=PicoWriteS68k16;\r
+ PicoCpuS68k.write32=PicoWriteS68k32;\r
+#endif\r
+ // m68k_poll_addr = m68k_poll_cnt = 0;\r
+ s68k_poll_adclk = s68k_poll_cnt = 0;\r
+}\r
+\r
+\r