Index: /trunk/src/VBox/Devices/Storage/DevATA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 77022)
+++ /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 77023)
@@ -3236,4 +3236,5 @@
     uint8_t *pbBuf;
     uint32_t cbMax;
+    uint32_t cSectors, iATAPILBA;
 
     pbPacket = s->aATAPICmd;
@@ -3341,6 +3342,4 @@
         case SCSI_READ_12:
         {
-            uint32_t cSectors, iATAPILBA;
-
             if (s->cNotifiedMediaChange > 0)
             {
@@ -3406,8 +3405,7 @@
             break;
         }
+        case SCSI_READ_CD_MSF:
         case SCSI_READ_CD:
         {
-            uint32_t cSectors, iATAPILBA;
-
             if (s->cNotifiedMediaChange > 0)
             {
@@ -3426,6 +3424,23 @@
                 break;
             }
-            cSectors = (pbPacket[6] << 16) | (pbPacket[7] << 8) | pbPacket[8];
-            iATAPILBA = scsiBE2H_U32(pbPacket + 2);
+            if (pbPacket[0] == SCSI_READ_CD)
+            {
+                cSectors = (pbPacket[6] << 16) | (pbPacket[7] << 8) | pbPacket[8];
+                iATAPILBA = scsiBE2H_U32(pbPacket + 2);
+            }
+            else    /* READ CD MSF */
+            {
+                iATAPILBA = scsiMSF2LBA(pbPacket + 3);
+                if (iATAPILBA > scsiMSF2LBA(pbPacket + 6))
+                {
+                    Log2(("Start MSF %02u:%02u:%02u > end MSF  %02u:%02u:%02u!\n", *(pbPacket + 3), *(pbPacket + 4), *(pbPacket + 5),
+                          *(pbPacket + 6), *(pbPacket + 7), *(pbPacket + 8)));
+                    atapiR3CmdErrorSimple(s, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_INV_FIELD_IN_CMD_PACKET);
+                    break;
+                }
+                cSectors = scsiMSF2LBA(pbPacket + 6) - iATAPILBA;
+                Log2(("Start MSF %02u:%02u:%02u -> LBA %u\n", *(pbPacket + 3), *(pbPacket + 4), *(pbPacket + 5), iATAPILBA));
+                Log2(("End   MSF %02u:%02u:%02u -> %u sectors\n", *(pbPacket + 6), *(pbPacket + 7), *(pbPacket + 8), cSectors));
+            }
             if (cSectors == 0)
             {
@@ -3497,5 +3512,4 @@
         case SCSI_SEEK_10:
         {
-            uint32_t iATAPILBA;
             if (s->cNotifiedMediaChange > 0)
             {
