X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=Pico%2Fcd%2FLC89510.c;h=1f00607392d7dffd031c00a286422ecd8e247cf7;hb=fa1e5e2948e9b06dec3353081081173f7ae4d742;hp=a45bbf728efdc2afd439de7c303ca61f9389e939;hpb=75736070161d40608ba3052b4c95b42943f9de3d;p=picodrive.git diff --git a/Pico/cd/LC89510.c b/Pico/cd/LC89510.c index a45bbf7..1f00607 100644 --- a/Pico/cd/LC89510.c +++ b/Pico/cd/LC89510.c @@ -104,26 +104,41 @@ void Update_CDC_TRansfer(int which) { if (Pico_mcd->s68k_regs[3] & 4) { + // test: Final Fight + int bank = !(Pico_mcd->s68k_regs[3]&1); dep = ((DMA_Adr & 0x3FFF) << 3); cdprintf("CD DMA # %04x -> word_ram1M # %06x, len=%i", Pico_mcd->cdc.DAC.N, dep, length); - dep = ((DMA_Adr & 0x3FFF) << 4); - if (!(Pico_mcd->s68k_regs[3]&1)) dep += 2; - dest = (unsigned short *) (Pico_mcd->word_ram + dep); + dest = (unsigned short *) (Pico_mcd->word_ram1M[bank] + dep); - for (len = length; len > 0; len--, src+=2, dest+=2) + // TODO: bswapcpy + for (len = length; len > 0; len--, src+=2, dest++) *dest = (src[0]<<8) | src[1]; + + { // debug + unsigned char *b1 = Pico_mcd->word_ram1M[bank] + dep; + unsigned char *b2 = (unsigned char *)dest - 8; + dprintf("%02x %02x %02x %02x .. %02x %02x %02x %02x", + b1[0], b1[1], b1[4], b1[5], b2[0], b2[1], b2[4], b2[5]); + } } else { dep = ((DMA_Adr & 0x7FFF) << 3); cdprintf("CD DMA # %04x -> word_ram2M # %06x, len=%i", Pico_mcd->cdc.DAC.N, dep, length); - dest = (unsigned short *) (Pico_mcd->word_ram + dep); + dest = (unsigned short *) (Pico_mcd->word_ram2M + dep); for (len = length; len > 0; len--, src+=2, dest++) *dest = (src[0]<<8) | src[1]; + + { // debug + unsigned char *b1 = Pico_mcd->word_ram2M + dep; + unsigned char *b2 = (unsigned char *)dest - 4; + dprintf("%02x %02x %02x %02x .. %02x %02x %02x %02x", + b1[0], b1[1], b1[2], b1[3], b2[0], b2[1], b2[2], b2[3]); + } } } else if (which == 4) // PCM RAM @@ -132,7 +147,7 @@ void Update_CDC_TRansfer(int which) dest = (unsigned char *) Ram_PCM; dep = ((DMA_Adr & 0x03FF) << 2) + PCM_Chip.Bank; #else - cdprintf("CD DMA # %04x -> PCD TODO", Pico_mcd->cdc.DAC.N); + dprintf("FIXME: CD DMA # %04x -> PCM", Pico_mcd->cdc.DAC.N); #endif } else if (which == 5) // PRG RAM @@ -144,12 +159,26 @@ void Update_CDC_TRansfer(int which) for (len = length; len > 0; len--, src+=2, dest++) *dest = (src[0]<<8) | src[1]; + + { // debug + unsigned char *b1 = Pico_mcd->prg_ram + dep; + unsigned char *b2 = (unsigned char *)dest - 4; + dprintf("%02x %02x %02x %02x .. %02x %02x %02x %02x", + b1[0], b1[1], b1[2], b1[3], b2[0], b2[1], b2[2], b2[3]); + } } length <<= 1; Pico_mcd->cdc.DAC.N = (Pico_mcd->cdc.DAC.N + length) & 0xFFFF; if (Pico_mcd->scd.Status_CDC & 0x08) Pico_mcd->cdc.DBC.N -= length; else Pico_mcd->cdc.DBC.N = 0; + + // update DMA_Adr + length >>= 2; + if (which != 4) length >>= 1; + DMA_Adr += length; + Pico_mcd->s68k_regs[0xA] = DMA_Adr >> 8; + Pico_mcd->s68k_regs[0xB] = DMA_Adr; } @@ -160,7 +189,7 @@ unsigned short Read_CDC_Host(int is_sub) if (!(Pico_mcd->scd.Status_CDC & 0x08)) { // Transfer data disabled - cdprintf("Read_CDC_Host: Transfer data disabled"); + cdprintf("Read_CDC_Host FIXME: Transfer data disabled"); return 0; } @@ -168,7 +197,7 @@ unsigned short Read_CDC_Host(int is_sub) (!is_sub && (Pico_mcd->s68k_regs[4] & 7) != 2)) { // Wrong setting - cdprintf("Read_CDC_Host: Wrong setting"); + cdprintf("Read_CDC_Host FIXME: Wrong setting"); return 0; }