+ switch (a >> 17)\r
+ {\r
+ case 0x00>>1: // BIOS: 000000 - 020000\r
+ d = *(u16 *)(Pico_mcd->bios+a);\r
+ break;\r
+ case 0x02>>1: // prg RAM\r
+ if ((Pico_mcd->m.busreq&3)!=1) {\r
+ u8 *prg_bank = Pico_mcd->prg_ram_b[Pico_mcd->s68k_regs[3]>>6];\r
+ wrdprintf("m68k_prgram r16: [%i,%06x] @%06x", Pico_mcd->s68k_regs[3]>>6, a, SekPc);\r
+ d = *(u16 *)(prg_bank+(a&0x1fffe));\r
+ wrdprintf("ret = %04x", d);\r
+ }\r
+ break;\r
+ case 0x20>>1: // word RAM: 200000 - 220000\r
+ wrdprintf("m68k_wram r16: [%06x] @%06x", a, SekPc);\r
+ a &= 0x1fffe;\r
+ if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
+ int bank = Pico_mcd->s68k_regs[3]&1;\r
+ d = *(u16 *)(Pico_mcd->word_ram1M[bank]+a);\r
+ } else {\r
+ // allow access in any mode, like Gens does\r
+ d = *(u16 *)(Pico_mcd->word_ram2M+a);\r
+ }\r
+ wrdprintf("ret = %04x", d);\r
+ break;\r
+ case 0x22>>1: // word RAM: 220000 - 240000\r
+ wrdprintf("m68k_wram r16: [%06x] @%06x", a, SekPc);\r
+ if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
+ int bank = Pico_mcd->s68k_regs[3]&1;\r
+ a = (a&2) | (cell_map(a >> 2) << 2); // cell arranged\r
+ d = *(u16 *)(Pico_mcd->word_ram1M[bank]+a);\r
+ } else {\r
+ // allow access in any mode, like Gens does\r
+ d = *(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe));\r
+ }\r
+ wrdprintf("ret = %04x", d);\r
+ break;\r
+ case 0xc0>>1: case 0xc2>>1: case 0xc4>>1: case 0xc6>>1:\r
+ case 0xc8>>1: case 0xca>>1: case 0xcc>>1: case 0xce>>1:\r
+ case 0xd0>>1: case 0xd2>>1: case 0xd4>>1: case 0xd6>>1:\r
+ case 0xd8>>1: case 0xda>>1: case 0xdc>>1: case 0xde>>1:\r
+ // VDP\r
+ if ((a&0xe700e0)==0xc00000)\r
+ d=PicoVideoRead(a);\r
+ break;\r
+ case 0xe0>>1: case 0xe2>>1: case 0xe4>>1: case 0xe6>>1:\r
+ case 0xe8>>1: case 0xea>>1: case 0xec>>1: case 0xee>>1:\r
+ case 0xf0>>1: case 0xf2>>1: case 0xf4>>1: case 0xf6>>1:\r
+ case 0xf8>>1: case 0xfa>>1: case 0xfc>>1: case 0xfe>>1:\r
+ // RAM:\r
+ d=*(u16 *)(Pico.ram+(a&0xfffe));\r
+ break;\r
+ default:\r
+ if ((a&0xffffc0)==0xa12000)\r
+ rdprintf("m68k_regs r16: [%02x] @%06x", a&0x3f, SekPc);\r