recognize the MED ssf2 header
[picodrive.git] / pico / media.c
index ade8ded..3ba4532 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;
@@ -209,9 +210,10 @@ enum media_type_e PicoLoadMedia(const char *filename,
     goto out;
 
   if ((PicoAHW & PAHW_MCD) && Pico_mcd != NULL)
-    Stop_CD();
+    cdd_unload();
   PicoCartUnload();
   PicoAHW = 0;
+  PicoQuirks = 0;
 
   if (media_type == PM_CD)
   {
@@ -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 (PicoQuirks & PQUIRK_FORCE_6BTN)
+    PicoSetInputDevice(0, PICO_INPUT_PAD_6BTN);
+
 out:
   if (rom_data)
     free(rom_data);