new memory handling, but asm and mappers need update.
[picodrive.git] / pico / pico.c
index 9b390c7..ab2302e 100644 (file)
@@ -57,7 +57,7 @@ void PicoExit(void)
 \r
 void PicoPower(void)\r
 {\r
-  unsigned char sram_reg=Pico.m.sram_reg; // must be preserved\r
+  unsigned char sram_status = Pico.m.sram_status; // must be preserved\r
 \r
   Pico.m.frame_count = 0;\r
 \r
@@ -78,7 +78,7 @@ void PicoPower(void)
   if (PicoAHW & PAHW_MCD)\r
     PicoPowerMCD();\r
 \r
-  Pico.m.sram_reg=sram_reg;\r
+  Pico.m.sram_status = sram_status;\r
   PicoReset();\r
 }\r
 \r
@@ -94,14 +94,16 @@ PICO_INTERNAL void PicoDetectRegion(void)
   else\r
   {\r
     // Read cartridge region data:\r
-    int region=PicoRead32(0x1f0);\r
+    unsigned short *rd = (unsigned short *)(Pico.rom + 0x1f0);\r
+    int region = (rd[0] << 16) | rd[1];\r
 \r
-    for (i=0;i<4;i++)\r
+    for (i = 0; i < 4; i++)\r
     {\r
-      int c=0;\r
+      int c;\r
 \r
-      c=region>>(i<<3); c&=0xff;\r
-      if (c<=' ') continue;\r
+      c = region >> (i<<3);\r
+      c &= 0xff;\r
+      if (c <= ' ') continue;\r
 \r
            if (c=='J')  support|=1;\r
       else if (c=='U')  support|=4;\r
@@ -139,7 +141,7 @@ PICO_INTERNAL void PicoDetectRegion(void)
 \r
 int PicoReset(void)\r
 {\r
-  unsigned char sram_reg=Pico.m.sram_reg; // must be preserved\r
+  unsigned char sram_status = Pico.m.sram_status; // must be preserved\r
 \r
   if (Pico.romsize <= 0)\r
     return 1;\r
@@ -148,7 +150,6 @@ int PicoReset(void)
   if (PicoResetHook)\r
     PicoResetHook();\r
 \r
-  PicoMemReset();\r
   memset(&PicoPadInt,0,sizeof(PicoPadInt));\r
   emustatus = 0;\r
 \r
@@ -169,6 +170,7 @@ int PicoReset(void)
   Pico.m.dirtyPal = 1;\r
 \r
   Pico.m.z80_bank68k = 0;\r
+  Pico.m.z80_reset = 1;\r
   memset(Pico.zram, 0, sizeof(Pico.zram)); // ??\r
 \r
   PicoDetectRegion();\r
@@ -192,11 +194,12 @@ int PicoReset(void)
     SekInitIdleDet();\r
 \r
   // reset sram state; enable sram access by default if it doesn't overlap with ROM\r
-  Pico.m.sram_reg=sram_reg&0x14;\r
-  if (!(Pico.m.sram_reg&4) && Pico.romsize <= SRam.start) Pico.m.sram_reg |= 1;\r
+  Pico.m.sram_status = sram_status & (SRS_DETECTED|SRS_EEPROM);\r
+  if (!(Pico.m.sram_status & SRS_EEPROM) && Pico.romsize <= SRam.start)\r
+    Pico.m.sram_status |= SRS_MAPPED;\r
 \r
   elprintf(EL_STATUS, "sram: det: %i; eeprom: %i; start: %06x; end: %06x",\r
-    (Pico.m.sram_reg>>4)&1, (Pico.m.sram_reg>>2)&1, SRam.start, SRam.end);\r
+    !!(sram_status & SRS_DETECTED), !!(sram_status & SRS_EEPROM), SRam.start, SRam.end);\r
 \r
   return 0;\r
 }\r