|  | @@ -1095,7 +1095,7 @@ static void doMechanismStatus(uint16_t allocation_length)
 | 
											
												
													
														|  |  /*******************************************/
 |  |  /*******************************************/
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  static void doReadCD(uint32_t lba, uint32_t length, uint8_t sector_type,
 |  |  static void doReadCD(uint32_t lba, uint32_t length, uint8_t sector_type,
 | 
											
												
													
														|  | -                     uint8_t main_channel, uint8_t sub_channel)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                     uint8_t main_channel, uint8_t sub_channel, bool data_only)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |      image_config_t &img = *(image_config_t*)scsiDev.target->cfg;
 |  |      image_config_t &img = *(image_config_t*)scsiDev.target->cfg;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -1213,6 +1213,16 @@ static void doReadCD(uint32_t lba, uint32_t length, uint8_t sector_type,
 | 
											
												
													
														|  |          return;
 |  |          return;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    if (data_only && sector_length != 2048)
 | 
											
												
													
														|  | 
 |  | +    {
 | 
											
												
													
														|  | 
 |  | +        debuglog("------ Host tried to read non-data sector with standard READ command");
 | 
											
												
													
														|  | 
 |  | +        scsiDev.status = CHECK_CONDITION;
 | 
											
												
													
														|  | 
 |  | +        scsiDev.target->sense.code = ILLEGAL_REQUEST;
 | 
											
												
													
														|  | 
 |  | +        scsiDev.target->sense.asc = 0x6400; // ILLEGAL MODE FOR THIS TRACK
 | 
											
												
													
														|  | 
 |  | +        scsiDev.phase = STATUS;
 | 
											
												
													
														|  | 
 |  | +        return;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      bool field_q_subchannel = false;
 |  |      bool field_q_subchannel = false;
 | 
											
												
													
														|  |      if (sub_channel == 2)
 |  |      if (sub_channel == 2)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
										
											
												
													
														|  | @@ -1675,7 +1685,7 @@ extern "C" int scsiCDRomCommand()
 | 
											
												
													
														|  |          uint8_t main_channel = scsiDev.cdb[9];
 |  |          uint8_t main_channel = scsiDev.cdb[9];
 | 
											
												
													
														|  |          uint8_t sub_channel = scsiDev.cdb[10];
 |  |          uint8_t sub_channel = scsiDev.cdb[10];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        doReadCD(lba, blocks, sector_type, main_channel, sub_channel);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        doReadCD(lba, blocks, sector_type, main_channel, sub_channel, false);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      else if (command == 0xB9)
 |  |      else if (command == 0xB9)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
										
											
												
													
														|  | @@ -1686,7 +1696,7 @@ extern "C" int scsiCDRomCommand()
 | 
											
												
													
														|  |          uint8_t main_channel = scsiDev.cdb[9];
 |  |          uint8_t main_channel = scsiDev.cdb[9];
 | 
											
												
													
														|  |          uint8_t sub_channel = scsiDev.cdb[10];
 |  |          uint8_t sub_channel = scsiDev.cdb[10];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        doReadCD(start, end - start, sector_type, main_channel, sub_channel);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        doReadCD(start, end - start, sector_type, main_channel, sub_channel, false);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      else if (command == 0x42)
 |  |      else if (command == 0x42)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
										
											
												
													
														|  | @@ -1711,7 +1721,7 @@ extern "C" int scsiCDRomCommand()
 | 
											
												
													
														|  |              (((uint32_t) scsiDev.cdb[7]) << 8) +
 |  |              (((uint32_t) scsiDev.cdb[7]) << 8) +
 | 
											
												
													
														|  |              scsiDev.cdb[8];
 |  |              scsiDev.cdb[8];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        doReadCD(lba, blocks, 0, 0x10, 0);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        doReadCD(lba, blocks, 0, 0x10, 0, true);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      else if (command == 0xA8)
 |  |      else if (command == 0xA8)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
										
											
												
													
														|  | @@ -1727,7 +1737,7 @@ extern "C" int scsiCDRomCommand()
 | 
											
												
													
														|  |              (((uint32_t) scsiDev.cdb[8]) << 8) +
 |  |              (((uint32_t) scsiDev.cdb[8]) << 8) +
 | 
											
												
													
														|  |              scsiDev.cdb[9];
 |  |              scsiDev.cdb[9];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        doReadCD(lba, blocks, 0, 0x10, 0);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        doReadCD(lba, blocks, 0, 0x10, 0, true);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      else if (command == 0x4E)
 |  |      else if (command == 0x4E)
 | 
											
												
													
														|  |      {
 |  |      {
 |