rearrange globals
[picodrive.git] / pico / media.c
index ade8ded..f9b053b 100644 (file)
@@ -132,14 +132,15 @@ int PicoCdCheck(const char *fname_in, int *pregion)
   cue_track_type type = CT_UNKNOWN;
   cue_data_t *cue_data = NULL;
 
-  get_ext(fname_in, ext);
-  if (strcasecmp(ext, ".cue") == 0) {
-    cue_data = cue_parse(fname_in);
-    if (cue_data != NULL) {
-      fname = cue_data->tracks[1].fname;
-      type  = cue_data->tracks[1].type;
-    }
-    else
+  // opens a cue, or searches for one
+  cue_data = cue_parse(fname_in);
+  if (cue_data != NULL) {
+    fname = cue_data->tracks[1].fname;
+    type  = cue_data->tracks[1].type;
+  }
+  else {
+    get_ext(fname_in, ext);
+    if (strcasecmp(ext, ".cue") == 0)
       return -1;
   }
 
@@ -197,7 +198,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
 {
   const char *rom_fname = filename;
   enum media_type_e media_type;
-  cd_img_type cd_img_type = CIT_NOT_CD;
+  enum cd_img_type cd_img_type = CIT_NOT_CD;
   unsigned char *rom_data = NULL;
   unsigned int rom_size = 0;
   pm_file *rom = NULL;
@@ -208,10 +209,11 @@ enum media_type_e PicoLoadMedia(const char *filename,
   if (media_type == PM_BAD_DETECT)
     goto out;
 
-  if ((PicoAHW & PAHW_MCD) && Pico_mcd != NULL)
-    Stop_CD();
+  if ((PicoIn.AHW & PAHW_MCD) && Pico_mcd != NULL)
+    cdd_unload();
   PicoCartUnload();
-  PicoAHW = 0;
+  PicoIn.AHW = 0;
+  PicoIn.quirks = 0;
 
   if (media_type == PM_CD)
   {
@@ -228,7 +230,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
         goto out;
       }
 
-      PicoAHW |= PAHW_MCD;
+      PicoIn.AHW |= PAHW_MCD;
     }
     else {
       media_type = PM_BAD_CD;
@@ -237,22 +239,22 @@ enum media_type_e PicoLoadMedia(const char *filename,
   }
   else if (media_type == PM_MARK3) {
     lprintf("detected SMS ROM\n");
-    PicoAHW = PAHW_SMS;
+    PicoIn.AHW = PAHW_SMS;
   }
 
   rom = pm_open(rom_fname);
   if (rom == NULL) {
-    lprintf("Failed to open ROM");
+    lprintf("Failed to open ROM\n");
     media_type = PM_ERROR;
     goto out;
   }
 
-  ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoAHW & PAHW_SMS) ? 1 : 0);
+  ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoIn.AHW & PAHW_SMS) ? 1 : 0);
   pm_close(rom);
   if (ret != 0) {
-    if      (ret == 2) lprintf("Out of memory");
-    else if (ret == 3) lprintf("Read failed");
-    else               lprintf("PicoCartLoad() failed.");
+    if      (ret == 2) lprintf("Out of memory\n");
+    else if (ret == 3) lprintf("Read failed\n");
+    else               lprintf("PicoCartLoad() failed.\n");
     media_type = PM_ERROR;
     goto out;
   }
@@ -264,7 +266,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
     goto out;
   }
 
-  if (!(PicoAHW & PAHW_SMS)) {
+  if (!(PicoIn.AHW & PAHW_SMS)) {
     unsigned short *d = (unsigned short *)(rom_data + 4);
     if ((((d[0] << 16) | d[1]) & 0xffffff) >= (int)rom_size) {
       lprintf("bad reset vector\n");
@@ -274,7 +276,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
   }
 
   // load config for this ROM (do this before insert to get correct region)
-  if (!(PicoAHW & PAHW_MCD)) {
+  if (!(PicoIn.AHW & PAHW_MCD)) {
     memcpy(media_id_header, rom_data + 0x100, sizeof(media_id_header));
     if (do_region_override != NULL)
       do_region_override(filename);
@@ -285,17 +287,22 @@ enum media_type_e PicoLoadMedia(const char *filename,
     goto out;
   }
   rom_data = NULL; // now belongs to PicoCart
+  Pico.m.ncart_in = 0;
 
   // insert CD if it was detected
   if (cd_img_type != CIT_NOT_CD) {
-    ret = Insert_CD(filename, cd_img_type);
+    ret = cdd_load(filename, cd_img_type);
     if (ret != 0) {
       PicoCartUnload();
       media_type = PM_BAD_CD;
       goto out;
     }
+    Pico.m.ncart_in = 1;
   }
 
+  if (PicoIn.quirks & PQUIRK_FORCE_6BTN)
+    PicoSetInputDevice(0, PICO_INPUT_PAD_6BTN);
+
 out:
   if (rom_data)
     free(rom_data);