support for zipped ISOs
[picodrive.git] / Pico / cd / Memory.c
index df015dd..b6a4a82 100644 (file)
@@ -29,6 +29,7 @@ typedef unsigned int   u32;
 //#define __debug_io2\r
 //#define rdprintf dprintf\r
 #define rdprintf(...)\r
+//#define wrdprintf dprintf\r
 #define wrdprintf(...)\r
 \r
 // -----------------------------------------------------------------\r
@@ -698,11 +699,11 @@ u8 PicoReadS68k8(u32 a)
   }\r
 \r
   // word RAM (1M area)\r
-  if ((a&0xfe0000)==0x0c0000) { // 0c0000-0dffff\r
+  if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     int bank;\r
     wrdprintf("s68k_wram1M r8: [%06x] @%06x", a, SekPcS68k);\r
-    if (!(Pico_mcd->s68k_regs[3]&4))\r
-      dprintf("s68k_wram1M FIXME: wrong mode");\r
+//    if (!(Pico_mcd->s68k_regs[3]&4))\r
+//      dprintf("s68k_wram1M FIXME: wrong mode");\r
     bank = !(Pico_mcd->s68k_regs[3]&1);\r
     d = Pico_mcd->word_ram1M[bank][(a^1)&0x1ffff];\r
     wrdprintf("ret = %02x", (u8)d);\r
@@ -781,11 +782,11 @@ u16 PicoReadS68k16(u32 a)
   }\r
 \r
   // word RAM (1M area)\r
-  if ((a&0xfe0000)==0x0c0000) { // 0c0000-0dffff\r
+  if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     int bank;\r
     wrdprintf("s68k_wram1M r16: [%06x] @%06x", a, SekPcS68k);\r
-    if (!(Pico_mcd->s68k_regs[3]&4))\r
-      dprintf("s68k_wram1M FIXME: wrong mode");\r
+//    if (!(Pico_mcd->s68k_regs[3]&4))\r
+//      dprintf("s68k_wram1M FIXME: wrong mode");\r
     bank = !(Pico_mcd->s68k_regs[3]&1);\r
     d = *(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe));\r
     wrdprintf("ret = %04x", d);\r
@@ -871,11 +872,11 @@ u32 PicoReadS68k32(u32 a)
   }\r
 \r
   // word RAM (1M area)\r
-  if ((a&0xfe0000)==0x0c0000) { // 0c0000-0dffff\r
+  if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     int bank;\r
     wrdprintf("s68k_wram1M r32: [%06x] @%06x", a, SekPcS68k);\r
-    if (!(Pico_mcd->s68k_regs[3]&4))\r
-      dprintf("s68k_wram1M FIXME: wrong mode");\r
+//    if (!(Pico_mcd->s68k_regs[3]&4))\r
+//      dprintf("s68k_wram1M FIXME: wrong mode");\r
     bank = !(Pico_mcd->s68k_regs[3]&1);\r
     u16 *pm=(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe)); d = (pm[0]<<16)|pm[1];\r
     wrdprintf("ret = %08x", d);\r
@@ -972,12 +973,13 @@ void PicoWriteS68k8(u32 a,u8 d)
   }\r
 \r
   // word RAM (1M area)\r
-  if ((a&0xfe0000)==0x0c0000) { // 0c0000-0dffff\r
+  if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
+    // Wing Commander tries to write here in wrong mode\r
     int bank;\r
     if (d)\r
       wrdprintf("s68k_wram1M w8: [%06x] %02x @%06x", a, d, SekPcS68k);\r
-    if (!(Pico_mcd->s68k_regs[3]&4))\r
-      dprintf("s68k_wram1M FIXME: wrong mode");\r
+//    if (!(Pico_mcd->s68k_regs[3]&4))\r
+//      dprintf("s68k_wram1M FIXME: wrong mode");\r
     bank = !(Pico_mcd->s68k_regs[3]&1);\r
     *(u8 *)(Pico_mcd->word_ram1M[bank]+((a^1)&0x1ffff))=d;\r
     return;\r
@@ -1051,12 +1053,12 @@ void PicoWriteS68k16(u32 a,u16 d)
   }\r
 \r
   // word RAM (1M area)\r
-  if ((a&0xfe0000)==0x0c0000) { // 0c0000-0dffff\r
+  if ((a&0xfe0000)==0x0c0000 && (Pico_mcd->s68k_regs[3]&4)) { // 0c0000-0dffff\r
     int bank;\r
     if (d)\r
       wrdprintf("s68k_wram1M w16: [%06x] %04x @%06x", a, d, SekPcS68k);\r
-    if (!(Pico_mcd->s68k_regs[3]&4))\r
-      dprintf("s68k_wram1M FIXME: wrong mode");\r
+//    if (!(Pico_mcd->s68k_regs[3]&4))\r
+//      dprintf("s68k_wram1M FIXME: wrong mode");\r
     bank = !(Pico_mcd->s68k_regs[3]&1);\r
     *(u16 *)(Pico_mcd->word_ram1M[bank]+(a&0x1fffe))=d;\r
     return;\r
@@ -1136,13 +1138,13 @@ void PicoWriteS68k32(u32 a,u32 d)
   }\r
 \r
   // word RAM (1M area)\r
-  if ((a&0xfe0000)==0x0c0000) { // 0c0000-0dffff\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
+//    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