1.14 release
authornotaz <notasas@gmail.com>
Mon, 5 Feb 2007 22:23:19 +0000 (22:23 +0000)
committernotaz <notasas@gmail.com>
Mon, 5 Feb 2007 22:23:19 +0000 (22:23 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@29 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/VideoPort.c
Pico/cd/LC89510.c
Pico/cd/Memory.c
Pico/cd/cd_sys.c
platform/gp2x/940ctl_ym2612.c
platform/gp2x/emu.c
platform/gp2x/version.h

index 0edf1be..b7a05f0 100644 (file)
@@ -104,6 +104,7 @@ static void DmaSlow(int len)
       pdend=(u16 *)(Pico_mcd->bios+0x20000);\r
     } else if ((source&0xfc0000)==0x200000 && (!(Pico_mcd->s68k_regs[3]&4))) { // Word Ram\r
       if (!(Pico_mcd->s68k_regs[3]&4)) { // 2M mode\r
+        source -= 2;\r
         pd=(u16 *)(Pico_mcd->word_ram+(source&0x3fffe));\r
         pdend=(u16 *)(Pico_mcd->word_ram+0x40000);\r
       } else {\r
index a45bbf7..2549fa8 100644 (file)
@@ -114,6 +114,13 @@ void Update_CDC_TRansfer(int which)
 \r
                        for (len = length; len > 0; len--, src+=2, dest+=2)\r
                                *dest = (src[0]<<8) | src[1];\r
+\r
+                       { // debug\r
+                               unsigned char *b1 = Pico_mcd->word_ram + 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
@@ -124,6 +131,13 @@ void Update_CDC_TRansfer(int which)
 \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_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
        else if (which == 4) // PCM RAM\r
@@ -132,7 +146,7 @@ void Update_CDC_TRansfer(int which)
                        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
+                       cdprintf("CD DMA # %04x -> PCM TODO", Pico_mcd->cdc.DAC.N);\r
 #endif\r
        }\r
        else if (which == 5) // PRG RAM\r
@@ -144,12 +158,26 @@ void Update_CDC_TRansfer(int which)
 \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
index ff787b0..c941806 100644 (file)
@@ -43,7 +43,7 @@ static u32 m68k_reg_read16(u32 a)
       goto end;\r
     case 2:\r
       d = (Pico_mcd->s68k_regs[a]<<8) | (Pico_mcd->s68k_regs[a+1]&0xc7);\r
-      dprintf("m68k_regs r3: %02x @%06x", (u8)d, SekPc);\r
+      dprintf("m68k_regs r3: %02x @%06x", (u8)d, SekPcS68k);\r
       goto end;\r
     case 4:\r
       d = Pico_mcd->s68k_regs[4]<<8;\r
@@ -59,7 +59,8 @@ static u32 m68k_reg_read16(u32 a)
       goto end;\r
     case 0xC:\r
       dprintf("m68k stopwatch timer read");\r
-      break;\r
+      d = Pico_mcd->m.timer_stopwatch >> 16;\r
+      goto end;\r
   }\r
 \r
   if (a < 0x30) {\r
@@ -123,9 +124,6 @@ static void m68k_reg_write8(u32 a, u32 d)
       return;\r
     case 0xe:\r
       //dprintf("m68k: comm flag: %02x", d);\r
-\r
-      //dprintf("s68k @ %06x", SekPcS68k);\r
-\r
       Pico_mcd->s68k_regs[0xe] = d;\r
       return;\r
   }\r
@@ -218,6 +216,10 @@ static void s68k_reg_write8(u32 a, u32 d)
       dprintf("s68k set stopwatch timer");\r
       Pico_mcd->m.timer_stopwatch = 0;\r
       return;\r
+    case 0xe:\r
+      Pico_mcd->s68k_regs[0Xf] = (d>>1) | (d<<7); // ror8, Gens note: Dragons lair\r
+      Pico_mcd->m.timer_stopwatch = 0;\r
+      return;\r
     case 0x31:\r
       dprintf("s68k set int3 timer: %02x", d);\r
       Pico_mcd->m.timer_int3 = d << 16;\r
@@ -247,9 +249,9 @@ static void s68k_reg_write8(u32 a, u32 d)
       return;\r
   }\r
 \r
-  if ((a&0x1f0) == 0x10 || a == 0x0e || (a >= 0x38 && a < 0x42))\r
+  if ((a&0x1f0) == 0x10 || (a >= 0x38 && a < 0x42))\r
   {\r
-    dprintf("m68k: invalid write @ %02x?", a);\r
+    dprintf("s68k: invalid write @ %02x?", a);\r
     return;\r
   }\r
 \r
@@ -813,7 +815,7 @@ u8 PicoReadS68k8(u32 a)
 \r
   // word RAM (2M area)\r
   if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
-    dprintf("s68k_wram2M r8: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_wram2M r8: [%06x] @%06x", a, SekPcS68k);\r
     if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
       // TODO (decode)\r
       dprintf("(decode)");\r
@@ -827,7 +829,7 @@ u8 PicoReadS68k8(u32 a)
 \r
   // word RAM (1M area)\r
   if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
-    dprintf("s68k_wram1M r8: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_wram1M r8: [%06x] @%06x", a, SekPcS68k);\r
     a=((a&0x1fffe)<<1)|(a&1);\r
     if (!(Pico_mcd->s68k_regs[3]&1)) a+=2;\r
     d = Pico_mcd->word_ram[a^1];\r
@@ -837,7 +839,7 @@ u8 PicoReadS68k8(u32 a)
 \r
   // PCM\r
   if ((a&0xff8000)==0xff0000) {\r
-    dprintf("s68k_pcm r8: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_pcm r8: [%06x] @%06x", a, SekPcS68k);\r
     a &= 0x7fff;\r
     if (a >= 0x2000)\r
       d = Pico_mcd->pcm_ram_b[Pico_mcd->pcm.bank][(a>>1)&0xfff];\r
@@ -892,7 +894,7 @@ u16 PicoReadS68k16(u32 a)
 \r
   // word RAM (2M area)\r
   if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
-    dprintf("s68k_wram2M r16: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_wram2M r16: [%06x] @%06x", a, SekPcS68k);\r
     if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
       // TODO (decode)\r
       dprintf("(decode)");\r
@@ -906,7 +908,7 @@ u16 PicoReadS68k16(u32 a)
 \r
   // word RAM (1M area)\r
   if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
-    dprintf("s68k_wram1M r16: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_wram1M r16: [%06x] @%06x", a, SekPcS68k);\r
     a=((a&0x1fffe)<<1);\r
     if (!(Pico_mcd->s68k_regs[3]&1)) a+=2;\r
     d = *(u16 *)(Pico_mcd->word_ram+a);\r
@@ -916,7 +918,7 @@ u16 PicoReadS68k16(u32 a)
 \r
   // bram\r
   if ((a&0xff0000)==0xfe0000) {\r
-    dprintf("s68k_bram r16: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_bram r16: [%06x] @%06x", a, SekPcS68k);\r
     a = (a>>1)&0x1fff;\r
     d = Pico_mcd->bram[a++];           // Gens does little endian here, and so do we..\r
     d|= Pico_mcd->bram[a++] << 8;\r
@@ -926,7 +928,7 @@ u16 PicoReadS68k16(u32 a)
 \r
   // PCM\r
   if ((a&0xff8000)==0xff0000) {\r
-    dprintf("s68k_pcm r16: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_pcm r16: [%06x] @%06x", a, SekPcS68k);\r
     a &= 0x7fff;\r
     if (a >= 0x2000)\r
       d = Pico_mcd->pcm_ram_b[Pico_mcd->pcm.bank][(a>>1)&0xfff];\r
@@ -976,7 +978,7 @@ u32 PicoReadS68k32(u32 a)
 \r
   // word RAM (2M area)\r
   if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
-    dprintf("s68k_wram2M r32: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_wram2M r32: [%06x] @%06x", a, SekPcS68k);\r
     if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
       // TODO (decode)\r
       dprintf("(decode)");\r
@@ -990,7 +992,7 @@ u32 PicoReadS68k32(u32 a)
 \r
   // word RAM (1M area)\r
   if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
-    dprintf("s68k_wram1M r32: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_wram1M r32: [%06x] @%06x", a, SekPcS68k);\r
     a=((a&0x1fffe)<<1);\r
     if (!(Pico_mcd->s68k_regs[3]&1)) a+=2;\r
     d  = *(u16 *)(Pico_mcd->word_ram+a) << 16;\r
@@ -1001,7 +1003,7 @@ u32 PicoReadS68k32(u32 a)
 \r
   // PCM\r
   if ((a&0xff8000)==0xff0000) {\r
-    dprintf("s68k_pcm r32: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_pcm r32: [%06x] @%06x", a, SekPcS68k);\r
     a &= 0x7fff;\r
     if (a >= 0x2000) {\r
       a >>= 1;\r
@@ -1024,7 +1026,7 @@ u32 PicoReadS68k32(u32 a)
 \r
   // bram\r
   if ((a&0xff0000)==0xfe0000) {\r
-    dprintf("s68k_bram r32: [%06x] @%06x", a, SekPc);\r
+    dprintf("s68k_bram r32: [%06x] @%06x", a, SekPcS68k);\r
     a = (a>>1)&0x1fff;\r
     d = Pico_mcd->bram[a++] << 16;             // middle endian? TODO: verify against Fusion..\r
     d|= Pico_mcd->bram[a++] << 24;\r
@@ -1074,7 +1076,7 @@ void PicoWriteS68k8(u32 a,u8 d)
 \r
   // word RAM (2M area)\r
   if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
-    dprintf("s68k_wram2M w8: [%06x] %02x @%06x", a, d, SekPc);\r
+    dprintf("s68k_wram2M w8: [%06x] %02x @%06x", a, d, SekPcS68k);\r
     if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
       // TODO (decode)\r
       dprintf("(decode)");\r
@@ -1088,7 +1090,7 @@ void PicoWriteS68k8(u32 a,u8 d)
   // word RAM (1M area)\r
   if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     if (d)\r
-      dprintf("s68k_wram1M w8: [%06x] %02x @%06x", a, d, SekPc);\r
+      dprintf("s68k_wram1M w8: [%06x] %02x @%06x", a, d, SekPcS68k);\r
     a=((a&0x1fffe)<<1)|(a&1);\r
     if (!(Pico_mcd->s68k_regs[3]&1)) a+=2;\r
     *(u8 *)(Pico_mcd->word_ram+(a^1))=d;\r
@@ -1137,6 +1139,10 @@ void PicoWriteS68k16(u32 a,u16 d)
     if (a >= 0x50 && a < 0x68)\r
       gfx_cd_write(a, d);\r
     else {\r
+      if (a == 0xe) { // special case, 2 byte writes would be handled differently\r
+        Pico_mcd->s68k_regs[0xf] = d;\r
+       return;\r
+      }\r
       s68k_reg_write8(a,  d>>8);\r
       s68k_reg_write8(a+1,d&0xff);\r
     }\r
@@ -1145,7 +1151,7 @@ void PicoWriteS68k16(u32 a,u16 d)
 \r
   // word RAM (2M area)\r
   if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
-    dprintf("s68k_wram2M w16: [%06x] %04x @%06x", a, d, SekPc);\r
+    dprintf("s68k_wram2M w16: [%06x] %04x @%06x", a, d, SekPcS68k);\r
     if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
       // TODO (decode)\r
       dprintf("(decode)");\r
@@ -1159,7 +1165,7 @@ void PicoWriteS68k16(u32 a,u16 d)
   // word RAM (1M area)\r
   if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     if (d)\r
-      dprintf("s68k_wram1M w16: [%06x] %04x @%06x", a, d, SekPc);\r
+      dprintf("s68k_wram1M w16: [%06x] %04x @%06x", a, d, SekPcS68k);\r
     a=((a&0x1fffe)<<1);\r
     if (!(Pico_mcd->s68k_regs[3]&1)) a+=2;\r
     *(u16 *)(Pico_mcd->word_ram+a)=d;\r
@@ -1178,7 +1184,7 @@ void PicoWriteS68k16(u32 a,u16 d)
 \r
   // bram\r
   if ((a&0xff0000)==0xfe0000) {\r
-    dprintf("s68k_bram w16: [%06x] %04x @%06x", a, d, SekPc);\r
+    dprintf("s68k_bram w16: [%06x] %04x @%06x", a, d, SekPcS68k);\r
     a = (a>>1)&0x1fff;\r
     Pico_mcd->bram[a++] = d;           // Gens does little endian here, an so do we..\r
     Pico_mcd->bram[a++] = d >> 8;\r
@@ -1223,7 +1229,7 @@ void PicoWriteS68k32(u32 a,u32 d)
 \r
   // word RAM (2M area)\r
   if ((a&0xfc0000)==0x080000) { // 080000-0bffff\r
-    dprintf("s68k_wram2M w32: [%06x] %08x @%06x", a, d, SekPc);\r
+    dprintf("s68k_wram2M w32: [%06x] %08x @%06x", a, d, SekPcS68k);\r
     if (Pico_mcd->s68k_regs[3]&4) { // 1M mode?\r
       // TODO (decode)\r
       dprintf("(decode)");\r
@@ -1238,7 +1244,7 @@ void PicoWriteS68k32(u32 a,u32 d)
   // word RAM (1M area)\r
   if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     if (d)\r
-      dprintf("s68k_wram1M w32: [%06x] %08x @%06x", a, d, SekPc);\r
+      dprintf("s68k_wram1M w32: [%06x] %08x @%06x", a, d, SekPcS68k);\r
     a=((a&0x1fffe)<<1);\r
     if (!(Pico_mcd->s68k_regs[3]&1)) a+=2;\r
     *(u16 *)(Pico_mcd->word_ram+a) = d>>16;\r
@@ -1263,7 +1269,7 @@ void PicoWriteS68k32(u32 a,u32 d)
 \r
   // bram\r
   if ((a&0xff0000)==0xfe0000) {\r
-    dprintf("s68k_bram w32: [%06x] %08x @%06x", a, d, SekPc);\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
index c0199e8..a482b7e 100644 (file)
@@ -152,17 +152,7 @@ void Check_CD_Command(void)
 {\r
        cdprintf("CHECK CD COMMAND");\r
 \r
-       // Check CDD\r
-\r
-       if (Pico_mcd->scd.CDD_Complete)\r
-       {\r
-               Pico_mcd->scd.CDD_Complete = 0;\r
-\r
-               CDD_Export_Status();\r
-       }\r
-\r
        // Check CDC\r
-\r
        if (Pico_mcd->scd.Status_CDC & 1)                       // CDC is reading data ...\r
        {\r
                cdprintf("Got a read command");\r
@@ -179,6 +169,14 @@ void Check_CD_Command(void)
                else Pico_mcd->scd.File_Add_Delay--;\r
        }\r
 \r
+       // Check CDD\r
+       if (Pico_mcd->scd.CDD_Complete)\r
+       {\r
+               Pico_mcd->scd.CDD_Complete = 0;\r
+\r
+               CDD_Export_Status();\r
+       }\r
+\r
        if (Pico_mcd->scd.Status_CDD == FAST_FOW)\r
        {\r
                Pico_mcd->scd.Cur_LBA += 10;\r
index 3502b82..1a8160d 100644 (file)
@@ -565,7 +565,7 @@ void mp3_start_play(FILE *f, int pos) // pos is 0-1023
 {\r
        int byte_offs = 0;\r
 \r
-       if (!(currentConfig.EmuOpt&0x800)) { // cdda disabled?\r
+       if (!(PicoOpt&0x800)) { // cdda disabled?\r
                return;\r
        }\r
 \r
@@ -601,7 +601,7 @@ int mp3_get_offset(void)
        int offs1024 = 0;\r
        int cdda_on;\r
 \r
-       cdda_on = (PicoMCD & 1) && (currentConfig.EmuOpt&0x800) && !(Pico_mcd->s68k_regs[0x36] & 1) &&\r
+       cdda_on = (PicoMCD & 1) && (PicoOpt&0x800) && !(Pico_mcd->s68k_regs[0x36] & 1) &&\r
                        (Pico_mcd->scd.Status_CDC & 1) && loaded_mp3 && shared_ctl->mp3_offs < shared_ctl->mp3_len;\r
 \r
        if (cdda_on) {\r
index e564dfb..bbb78b2 100644 (file)
@@ -455,7 +455,7 @@ int emu_ReadConfig(int game)
                currentConfig.lastRomFile[0] = 0;\r
                currentConfig.EmuOpt  = 0x1f | 0x400; // | cd_leds\r
                currentConfig.PicoOpt = 0x0f | 0xe00; // | use_940 | cd_pcm | cd_cdda\r
-               currentConfig.PsndRate = 44100;\r
+               currentConfig.PsndRate = 22050; // 44100;\r
                currentConfig.PicoRegion = 0; // auto\r
                currentConfig.PicoAutoRgnOrder = 0x184; // US, EU, JP\r
                currentConfig.Frameskip = -1; // auto\r
index bbb221d..a4d411f 100644 (file)
@@ -1,2 +1,2 @@
-#define VERSION "1.10"\r
+#define VERSION "1.14"\r
 \r