- dprintf("s68k_regs w32: [%02x] %08x @ %06x", a&0x1ff, d, SekPcS68k);\r
- s68k_reg_write8(a, d>>24, 32);\r
- s68k_reg_write8(a+1,(d>>16)&0xff, 32);\r
- s68k_reg_write8(a+2,(d>>8) &0xff, 32);\r
- s68k_reg_write8(a+3, d &0xff, 32);\r
+ a &= 0x1fe;\r
+ rdprintf("s68k_regs w32: [%02x] %08x @ %06x", a, d, SekPcS68k);\r
+ if (a >= 0x58 && a < 0x68) {\r
+ gfx_cd_write16(a, d>>16);\r
+ gfx_cd_write16(a+2, d&0xffff);\r
+ } else {\r
+ s68k_reg_write8(a, d>>24);\r
+ s68k_reg_write8(a+1,(d>>16)&0xff);\r
+ s68k_reg_write8(a+2,(d>>8) &0xff);\r
+ s68k_reg_write8(a+3, d &0xff);\r
+ }\r
+ return;\r
+ }\r
+\r
+ // word RAM (2M area)\r
+ if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
+ int r3 = Pico_mcd->s68k_regs[3];\r
+ wrdprintf("s68k_wram2M w32: [%06x] %08x @%06x", a, d, SekPcS68k);\r
+ if (r3 & 4) { // 1M decode mode?\r
+ decode_write16(a , d >> 16, r3);\r
+ decode_write16(a+2, d , r3);\r
+ } else {\r
+ // allow access in any mode, like Gens does\r
+ u16 *pm=(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe));\r
+ pm[0]=(u16)(d>>16); pm[1]=(u16)d;\r
+ }\r
+ return;\r
+ }\r
+\r
+ // word RAM (1M area)\r
+ if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
+ int bank;\r
+ u16 *pm;\r
+ if (d)\r
+ wrdprintf("s68k_wram1M w32: [%06x] %08x @%06x", a, d, SekPcS68k);\r
+// if (!(Pico_mcd->s68k_regs[3]&4))\r
+// dprintf("s68k_wram1M FIXME: wrong mode");\r
+ bank = !(Pico_mcd->s68k_regs[3]&1);\r
+ pm=(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe));\r
+ pm[0]=(u16)(d>>16); pm[1]=(u16)d;\r
+ return;\r
+ }\r
+\r
+ // PCM\r
+ if ((a&0xff8000)==0xff0000) {\r
+ a &= 0x7fff;\r
+ if (a >= 0x2000) {\r
+ a >>= 1;\r
+ Pico_mcd->pcm_ram_b[Pico_mcd->pcm.bank][a&0xfff] = (d >> 16);\r
+ Pico_mcd->pcm_ram_b[Pico_mcd->pcm.bank][(a+1)&0xfff] = d;\r
+ } else if (a < 0x12) {\r
+ a >>= 1;\r
+ pcm_write(a, (d>>16) & 0xff);\r
+ pcm_write(a+1, d & 0xff);\r
+ }\r
+ return;\r
+ }\r
+\r
+ // bram\r
+ if ((a&0xff0000)==0xfe0000) {\r
+ dprintf("s68k_bram w32: [%06x] %08x @%06x", a, d, SekPcS68k);\r
+ a = (a>>1)&0x1fff;\r
+ Pico_mcd->bram[a++] = d >> 16; // middle endian? verify?\r
+ Pico_mcd->bram[a++] = d >> 24;\r
+ Pico_mcd->bram[a++] = d;\r
+ Pico_mcd->bram[a++] = d >> 8;\r
+ SRam.changed = 1;\r