]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
2200b11
authorToni Wilen <twilen@winuae.net>
Sun, 20 Jun 2010 17:02:34 +0000 (20:02 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 20 Jun 2010 17:02:34 +0000 (20:02 +0300)
blkdev_cdimage.cpp
include/scsidev.h
od-win32/win32.h
scsiemul.cpp

index e1c1930d1e90cbd8ec90ad6da9a0ace43af3b905..a41677f9e663cd7b5d866e19b5c4b5a95e06cc50 100644 (file)
@@ -45,7 +45,6 @@ struct cdtoc
        int mp3;
 };
 
-static bool we_are_active;
 static uae_u8 buffer[2352];
 static struct cdtoc toc[102];
 static int tracks;
@@ -1030,10 +1029,6 @@ void cdimage_vsync (void)
 
        if (_tcscmp (changed_prefs.cdimagefile, currprefs.cdimagefile)) {
                _tcscpy (newfile, changed_prefs.cdimagefile);
-               if (!we_are_active) {
-                       _tcscpy (currprefs.cdimagefile, newfile);
-                       device_func_init (0);
-               }
                changed_prefs.cdimagefile[0] = currprefs.cdimagefile[0] = 0;
                imagechange = 3 * 50;
                write_log (L"CD: eject\n");
@@ -1053,14 +1048,9 @@ void cdimage_vsync (void)
        newfile[0] = 0;
        write_log (L"CD: delayed insert '%s'\n", currprefs.cdimagefile[0] ? currprefs.cdimagefile : L"<EMPTY>");
        donotmountme = true;
-       int un = scsi_do_disk_change (-1, 1);
+       int un = scsi_do_disk_device_change ();
        donotmountme = false;
-       if (un >= 0) {
-               struct device_info di;
-               media = sys_command_ismedia (DF_IOCTL, un, 1);
-               if (sys_command_info (DF_IOCTL, un, &di))
-                       scsi_do_disk_change (di.id, 1);
-       } else {
+       if (un < 0) {
                device_func_init (DEVICE_TYPE_ANY); // active us again
                parse_image ();
                media = tracks > 0;
@@ -1094,13 +1084,11 @@ static int open_bus (int flags)
        rp_cd_change (0, 0);
        rp_cd_image_change (0, currprefs.cdimagefile[0] ? currprefs.cdimagefile : NULL);
 #endif
-       we_are_active = v ? true : false;
        return v;
 }
 
 static void close_bus (void)
 {
-       we_are_active = false;
        mp3decoder_close ();
 #ifdef RETROPLATFORM
        rp_cd_change (0, 1);
index 64c1a2f0f365e334c0c7e7447a622d9a057f65f1..b76904b6782b5c316aaaf9af929d4d420f124f77 100644 (file)
@@ -13,6 +13,7 @@ void scsidev_install (void);
 void scsidev_reset (void);
 void scsidev_start_threads (void);
 int scsi_do_disk_change (int device_id, int insert);
+int scsi_do_disk_device_change (void);
 
 extern int log_scsi;
 
index 3f0559d88a8edc3fdf1317c37beeba8b81c05040..6fbcf940074f2fe3760b57331f157749d0a94b00 100644 (file)
@@ -18,9 +18,9 @@
 #define WINUAEPUBLICBETA 1
 #define LANG_DLL 1
 
-#define WINUAEBETA L"10"
-#define WINUAEDATE MAKEBD(2010, 6, 19)
-#define WINUAEEXTRA L"RC1"
+#define WINUAEBETA L"11"
+#define WINUAEDATE MAKEBD(2010, 6, 20)
+#define WINUAEEXTRA L"RC2"
 #define WINUAEREV L""
 
 #define IHF_WINDOWHIDDEN 6
index 425cb9a4ef33aab37dd80a21a96a23bf3f873513..b1c6d9277dbf80260dc2619719db126b47adb8e6 100644 (file)
@@ -311,6 +311,10 @@ static int scsiemul_switchscsi (const TCHAR *name)
                                                        struct priv_devstruct *pdev = &pdevst[dev->aunit];
                                                        setpdev (pdev, dev);
                                                }
+                                               if (dev->di.media_inserted) {
+                                                       dev->di.media_inserted = 0;
+                                                       scsi_do_disk_change (dev->di.id, 1);
+                                               }
                                        }
                                }
                                if (devst[0].opencnt == 0)
@@ -344,6 +348,7 @@ static int scsiemul_switchemu (const TCHAR *name)
                                struct priv_devstruct *pdev = &pdevst[dev->aunit];
                                setpdev (pdev, dev);
                        }
+                       dev->di.media_inserted = 0;
                }
                if (devst[0].opencnt == 0)
                        sys_command_close (DF_IOCTL, 0);
@@ -352,6 +357,15 @@ static int scsiemul_switchemu (const TCHAR *name)
        return -1;
 }
 
+int scsi_do_disk_device_change (void)
+{
+       int ret = scsiemul_switchscsi (currprefs.cdimagefile);
+       if (ret < 0) {
+               scsiemul_switchemu (currprefs.cdimagefile);
+       }
+       return ret;
+}
+
 // device_id = -1 and insert==0 -> all medias going away
 int scsi_do_disk_change (int device_id, int insert)
 {
@@ -361,13 +375,6 @@ int scsi_do_disk_change (int device_id, int insert)
        if (!change_sem)
                return ret;
        uae_sem_wait (&change_sem);
-       if (device_id < 0 && insert) {
-               ret = scsiemul_switchscsi (currprefs.cdimagefile);
-               if (ret < 0) {
-                       scsiemul_switchemu (currprefs.cdimagefile);
-                       goto end;
-               }
-       }
        for (i = 0; i < MAX_TOTAL_DEVICES; i++) {
                struct devstruct *dev = &devst[i];
                if (dev->di.id == device_id || (device_id < 0 && i == 0)) {
@@ -392,7 +399,6 @@ int scsi_do_disk_change (int device_id, int insert)
                        }
                }
        }
-end:
        uae_sem_post (&change_sem);
        return ret;
 }