{\r
if (Pico_mcd->s68k_regs[3] & 4)\r
{\r
+ // test: Final Fight\r
+ int bank = !(Pico_mcd->s68k_regs[3]&1);\r
dep = ((DMA_Adr & 0x3FFF) << 3);\r
cdprintf("CD DMA # %04x -> word_ram1M # %06x, len=%i",\r
Pico_mcd->cdc.DAC.N, dep, length);\r
\r
- dep = ((DMA_Adr & 0x3FFF) << 4);\r
- if (!(Pico_mcd->s68k_regs[3]&1)) dep += 2;\r
- dest = (unsigned short *) (Pico_mcd->word_ram + dep);\r
+ dest = (unsigned short *) (Pico_mcd->word_ram1M[bank] + dep);\r
\r
- for (len = length; len > 0; len--, src+=2, dest+=2)\r
+ // TODO: bswapcpy\r
+ for (len = length; len > 0; len--, src+=2, dest++)\r
*dest = (src[0]<<8) | src[1];\r
+\r
+ { // debug\r
+ unsigned char *b1 = Pico_mcd->word_ram1M[bank] + dep;\r
+ unsigned char *b2 = (unsigned char *)dest - 8;\r
+ dprintf("%02x %02x %02x %02x .. %02x %02x %02x %02x",\r
+ b1[0], b1[1], b1[4], b1[5], b2[0], b2[1], b2[4], b2[5]);\r
+ }\r
}\r
else\r
{\r
dep = ((DMA_Adr & 0x7FFF) << 3);\r
cdprintf("CD DMA # %04x -> word_ram2M # %06x, len=%i",\r
Pico_mcd->cdc.DAC.N, dep, length);\r
- dest = (unsigned short *) (Pico_mcd->word_ram + dep);\r
+ dest = (unsigned short *) (Pico_mcd->word_ram2M + dep);\r
\r
for (len = length; len > 0; len--, src+=2, dest++)\r
*dest = (src[0]<<8) | src[1];\r
+\r
+ { // debug\r
+ unsigned char *b1 = Pico_mcd->word_ram2M + dep;\r
+ unsigned char *b2 = (unsigned char *)dest - 4;\r
+ dprintf("%02x %02x %02x %02x .. %02x %02x %02x %02x",\r
+ b1[0], b1[1], b1[2], b1[3], b2[0], b2[1], b2[2], b2[3]);\r
+ }\r
}\r
}\r
else if (which == 4) // PCM RAM\r
dest = (unsigned char *) Ram_PCM;\r
dep = ((DMA_Adr & 0x03FF) << 2) + PCM_Chip.Bank;\r
#else\r
- cdprintf("CD DMA # %04x -> PCD TODO", Pico_mcd->cdc.DAC.N);\r
+ dprintf("FIXME: CD DMA # %04x -> PCM", Pico_mcd->cdc.DAC.N);\r
#endif\r
}\r
else if (which == 5) // PRG RAM\r
\r
for (len = length; len > 0; len--, src+=2, dest++)\r
*dest = (src[0]<<8) | src[1];\r
+\r
+ { // debug\r
+ unsigned char *b1 = Pico_mcd->prg_ram + dep;\r
+ unsigned char *b2 = (unsigned char *)dest - 4;\r
+ dprintf("%02x %02x %02x %02x .. %02x %02x %02x %02x",\r
+ b1[0], b1[1], b1[2], b1[3], b2[0], b2[1], b2[2], b2[3]);\r
+ }\r
}\r
\r
length <<= 1;\r
Pico_mcd->cdc.DAC.N = (Pico_mcd->cdc.DAC.N + length) & 0xFFFF;\r
if (Pico_mcd->scd.Status_CDC & 0x08) Pico_mcd->cdc.DBC.N -= length;\r
else Pico_mcd->cdc.DBC.N = 0;\r
+\r
+ // update DMA_Adr\r
+ length >>= 2;\r
+ if (which != 4) length >>= 1;\r
+ DMA_Adr += length;\r
+ Pico_mcd->s68k_regs[0xA] = DMA_Adr >> 8;\r
+ Pico_mcd->s68k_regs[0xB] = DMA_Adr;\r
}\r
\r
\r
if (!(Pico_mcd->scd.Status_CDC & 0x08))\r
{\r
// Transfer data disabled\r
- cdprintf("Read_CDC_Host: Transfer data disabled");\r
+ cdprintf("Read_CDC_Host FIXME: Transfer data disabled");\r
return 0;\r
}\r
\r
(!is_sub && (Pico_mcd->s68k_regs[4] & 7) != 2))\r
{\r
// Wrong setting\r
- cdprintf("Read_CDC_Host: Wrong setting");\r
+ cdprintf("Read_CDC_Host FIXME: Wrong setting");\r
return 0;\r
}\r
\r