diff --git a/src/BlueSCSI.cpp b/src/BlueSCSI.cpp index a9487b0..35930fd 100644 --- a/src/BlueSCSI.cpp +++ b/src/BlueSCSI.cpp @@ -1000,19 +1000,18 @@ byte onRequestSense(SCSI_DEVICE *dev, const byte *cdb) */ byte onReadCapacity(SCSI_DEVICE *dev, const byte *cdb) { - uint32_t blocksize = dev->m_blocksize; - uint32_t blockcount = dev->m_fileSize / blocksize - 1; // Points to last LBA + uint32_t lastlba = dev->m_blockcount - 1; // Points to last LBA uint8_t buf[8] = { - blockcount >> 24, - blockcount >> 16, - blockcount >> 8, - blockcount, - blocksize >> 24, - blocksize >> 16, - blocksize >> 8, - blocksize + lastlba >> 24, + lastlba >> 16, + lastlba >> 8, + lastlba, + dev->m_blocksize >> 24, + dev->m_blocksize >> 16, + dev->m_blocksize >> 8, + dev->m_blocksize }; - writeDataPhase(8, buf); + writeDataPhase(sizeof(buf), buf); return SCSI_STATUS_GOOD; } @@ -1224,10 +1223,14 @@ byte onModeSense(SCSI_DEVICE *dev, const byte *cdb) case SCSI_SENSE_MODE_FLEXABLE_GEOMETRY: m_buf[a + 0] = SCSI_SENSE_MODE_FLEXABLE_GEOMETRY; m_buf[a + 1] = 0x1E; // Page length - m_buf[a + 2] = 0x03E8; // Transfer rate 1 mbit/s - m_buf[a + 4] = 16; // Number of heads - m_buf[a + 5] = 18; // Sectors per track - m_buf[a + 6] = 0x2000; // Data bytes per sector + if(pageControl != 1) { + m_buf[a + 2] = 0x03; + m_buf[a + 3] = 0xE8; // Transfer rate 1 mbit/s + m_buf[a + 4] = 16; // Number of heads + m_buf[a + 5] = 18; // Sectors per track + m_buf[a + 6] = (byte)dev->m_blocksize >> 8; + m_buf[a + 7] = (byte)dev->m_blocksize & 0xff; // Data bytes per sector + } a += 0x20; if(pageCode != SCSI_SENSE_MODE_ALL) break; case SCSI_SENSE_MODE_VENDOR_APPLE: @@ -1268,12 +1271,6 @@ byte onModeSelect(SCSI_DEVICE *dev, const byte *cdb) unsigned length = 0; LOGN("onModeSelect"); - if (cdb[4] > MAX_BLOCKSIZE) { - dev->m_senseKey = SCSI_SENSE_ILLEGAL_REQUEST; - dev->m_additional_sense_code = SCSI_ASC_INVALID_FIELD_IN_CDB; - return SCSI_STATUS_CHECK_CONDITION; - } - if(dev->m_type != SCSI_DEVICE_HDD && (cdb[1] & 0x01)) { dev->m_senseKey = SCSI_SENSE_ILLEGAL_REQUEST; diff --git a/src/BlueSCSI.h b/src/BlueSCSI.h index 9bfec92..3013473 100644 --- a/src/BlueSCSI.h +++ b/src/BlueSCSI.h @@ -309,7 +309,7 @@ typedef __attribute__((aligned(4))) struct _SCSI_DEVICE { FsFile *m_file; // File object uint64_t m_fileSize; // File size - size_t m_blocksize; // SCSI BLOCK size + uint16_t m_blocksize; // SCSI BLOCK size uint8_t m_type; // SCSI device type uint32_t m_blockcount; // blockcount bool m_raw; // Raw disk