rearrange globals
[picodrive.git] / pico / pico.c
index bf9df26..2e561c6 100644 (file)
 \r
 struct Pico Pico;\r
 struct PicoMem PicoMem;\r
-int PicoOpt;     \r
-int PicoSkipFrame;     // skip rendering frame?\r
-int PicoPad[2];        // Joypads, format is MXYZ SACB RLDU\r
-int PicoPadInt[2];     // internal copy\r
-int PicoAHW;           // active addon hardware: PAHW_*\r
-int PicoQuirks;        // game-specific quirks\r
-int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe\r
-int PicoAutoRgnOrder;\r
-\r
-int emustatus;         // rapid_ym2612, multi_ym_updates\r
+PicoInterface PicoIn;\r
 \r
 void (*PicoWriteSound)(int len) = NULL; // called at the best time to send sound buffer (PsndOut) to hardware\r
 void (*PicoResetHook)(void) = NULL;\r
@@ -33,13 +24,13 @@ void PicoInit(void)
   // Blank space for state:\r
   memset(&Pico,0,sizeof(Pico));\r
   memset(&PicoMem,0,sizeof(PicoMem));\r
-  memset(&PicoPad,0,sizeof(PicoPad));\r
-  memset(&PicoPadInt,0,sizeof(PicoPadInt));\r
+  memset(&PicoIn.pad,0,sizeof(PicoIn.pad));\r
+  memset(&PicoIn.padInt,0,sizeof(PicoIn.padInt));\r
 \r
   Pico.est.Pico = &Pico;\r
   Pico.est.PicoMem_vram = PicoMem.vram;\r
   Pico.est.PicoMem_cram = PicoMem.cram;\r
-  Pico.est.PicoOpt = &PicoOpt;\r
+  Pico.est.PicoOpt = &PicoIn.opt;\r
 \r
   // Init CPUs:\r
   SekInit();\r
@@ -56,7 +47,7 @@ void PicoInit(void)
 // to be called once on emu exit\r
 void PicoExit(void)\r
 {\r
-  if (PicoAHW & PAHW_MCD)\r
+  if (PicoIn.AHW & PAHW_MCD)\r
     PicoExitMCD();\r
   PicoCartUnload();\r
   z80_exit();\r
@@ -89,10 +80,10 @@ void PicoPower(void)
   Pico.video.reg[0xc] = 0x81;\r
   Pico.video.reg[0xf] = 0x02;\r
 \r
-  if (PicoAHW & PAHW_MCD)\r
+  if (PicoIn.AHW & PAHW_MCD)\r
     PicoPowerMCD();\r
 \r
-  if (PicoOpt & POPT_EN_32X)\r
+  if (PicoIn.opt & POPT_EN_32X)\r
     PicoPower32x();\r
 \r
   PicoReset();\r
@@ -103,9 +94,9 @@ PICO_INTERNAL void PicoDetectRegion(void)
   int support=0, hw=0, i;\r
   unsigned char pal=0;\r
 \r
-  if (PicoRegionOverride)\r
+  if (PicoIn.regionOverride)\r
   {\r
-    support = PicoRegionOverride;\r
+    support = PicoIn.regionOverride;\r
   }\r
   else\r
   {\r
@@ -138,10 +129,10 @@ PICO_INTERNAL void PicoDetectRegion(void)
   }\r
 \r
   // auto detection order override\r
-  if (PicoAutoRgnOrder) {\r
-         if (((PicoAutoRgnOrder>>0)&0xf) & support) support = (PicoAutoRgnOrder>>0)&0xf;\r
-    else if (((PicoAutoRgnOrder>>4)&0xf) & support) support = (PicoAutoRgnOrder>>4)&0xf;\r
-    else if (((PicoAutoRgnOrder>>8)&0xf) & support) support = (PicoAutoRgnOrder>>8)&0xf;\r
+  if (PicoIn.autoRgnOrder) {\r
+         if (((PicoIn.autoRgnOrder>>0)&0xf) & support) support = (PicoIn.autoRgnOrder>>0)&0xf;\r
+    else if (((PicoIn.autoRgnOrder>>4)&0xf) & support) support = (PicoIn.autoRgnOrder>>4)&0xf;\r
+    else if (((PicoIn.autoRgnOrder>>8)&0xf) & support) support = (PicoIn.autoRgnOrder>>8)&0xf;\r
   }\r
 \r
   // Try to pick the best hardware value for English/50hz:\r
@@ -161,17 +152,16 @@ int PicoReset(void)
     return 1;\r
 \r
 #if defined(CPU_CMP_R) || defined(CPU_CMP_W) || defined(DRC_CMP)\r
-  PicoOpt |= POPT_DIS_VDP_FIFO|POPT_DIS_IDLE_DET;\r
+  PicoIn.opt |= POPT_DIS_VDP_FIFO|POPT_DIS_IDLE_DET;\r
 #endif\r
 \r
   /* must call now, so that banking is reset, and correct vectors get fetched */\r
   if (PicoResetHook)\r
     PicoResetHook();\r
 \r
-  memset(&PicoPadInt,0,sizeof(PicoPadInt));\r
-  emustatus = 0;\r
+  memset(&PicoIn.padInt, 0, sizeof(PicoIn.padInt));\r
 \r
-  if (PicoAHW & PAHW_SMS) {\r
+  if (PicoIn.AHW & PAHW_SMS) {\r
     PicoResetMS();\r
     return 0;\r
   }\r
@@ -180,7 +170,7 @@ int PicoReset(void)
   // ..but do not reset SekCycle* to not desync with addons\r
 \r
   // s68k doesn't have the TAS quirk, so we just globally set normal TAS handler in MCD mode (used by Batman games).\r
-  SekSetRealTAS(PicoAHW & PAHW_MCD);\r
+  SekSetRealTAS(PicoIn.AHW & PAHW_MCD);\r
 \r
   Pico.m.dirtyPal = 1;\r
 \r
@@ -193,21 +183,21 @@ int PicoReset(void)
   PsndReset(); // pal must be known here\r
 \r
   // create an empty "dma" to cause 68k exec start at random frame location\r
-  if (Pico.m.dma_xfers == 0 && !(PicoOpt & POPT_DIS_VDP_FIFO))\r
+  if (Pico.m.dma_xfers == 0 && !(PicoIn.opt & POPT_DIS_VDP_FIFO))\r
     Pico.m.dma_xfers = rand() & 0x1fff;\r
 \r
   SekFinishIdleDet();\r
 \r
-  if (PicoAHW & PAHW_MCD) {\r
+  if (PicoIn.AHW & PAHW_MCD) {\r
     PicoResetMCD();\r
     return 0;\r
   }\r
 \r
   // reinit, so that checksum checks pass\r
-  if (!(PicoOpt & POPT_DIS_IDLE_DET))\r
+  if (!(PicoIn.opt & POPT_DIS_IDLE_DET))\r
     SekInitIdleDet();\r
 \r
-  if (PicoOpt & POPT_EN_32X)\r
+  if (PicoIn.opt & POPT_EN_32X)\r
     PicoReset32x();\r
 \r
   // reset sram state; enable sram access by default if it doesn't overlap with ROM\r
@@ -225,9 +215,9 @@ int PicoReset(void)
 // flush config changes before emu loop starts\r
 void PicoLoopPrepare(void)\r
 {\r
-  if (PicoRegionOverride)\r
+  if (PicoIn.regionOverride)\r
     // force setting possibly changed..\r
-    Pico.m.pal = (PicoRegionOverride == 2 || PicoRegionOverride == 8) ? 1 : 0;\r
+    Pico.m.pal = (PicoIn.regionOverride == 2 || PicoIn.regionOverride == 8) ? 1 : 0;\r
 \r
   Pico.m.dirtyPal = 1;\r
   rendstatus_old = -1;\r
@@ -310,17 +300,17 @@ void PicoFrame(void)
 \r
   Pico.m.frame_count++;\r
 \r
-  if (PicoAHW & PAHW_SMS) {\r
+  if (PicoIn.AHW & PAHW_SMS) {\r
     PicoFrameMS();\r
     goto end;\r
   }\r
 \r
-  if (PicoAHW & PAHW_32X) {\r
+  if (PicoIn.AHW & PAHW_32X) {\r
     PicoFrame32x(); // also does MCD+32X\r
     goto end;\r
   }\r
 \r
-  if (PicoAHW & PAHW_MCD) {\r
+  if (PicoIn.AHW & PAHW_MCD) {\r
     PicoFrameMCD();\r
     goto end;\r
   }\r
@@ -336,7 +326,7 @@ end:
 \r
 void PicoFrameDrawOnly(void)\r
 {\r
-  if (!(PicoAHW & PAHW_SMS)) {\r
+  if (!(PicoIn.AHW & PAHW_SMS)) {\r
     PicoFrameStart();\r
     PicoDrawSync(223, 0);\r
   } else {\r