From caf0eb8f8c5a481c8a55310f357bb3c28470e59b Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 27 Mar 2020 19:41:58 +0000 Subject: [PATCH] Implement READ(6/10/12) for magneto-optical disks. --- src/devices/disk/mo.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/devices/disk/mo.c b/src/devices/disk/mo.c index f6fd47e..7b14c5d 100644 --- a/src/devices/disk/mo.c +++ b/src/devices/disk/mo.c @@ -1337,12 +1337,16 @@ do_command(void *p, uint8_t *cdb) case GPCMD_READ_10: case GPCMD_READ_12: set_phase(dev, SCSI_PHASE_DATA_IN); - alloc_length = 512; + alloc_length = dev->drv->sector_size; switch(cdb[0]) { case GPCMD_READ_6: dev->sector_len = cdb[4]; dev->sector_pos = ((((uint32_t) cdb[1]) & 0x1f) << 16) | (((uint32_t) cdb[2]) << 8) | ((uint32_t) cdb[3]); + + if(dev->sector_len == 0) + dev->sector_len = 256; + DEBUG("MO %i: Length: %i, LBA: %i\n", dev->id, dev->sector_len, dev->sector_pos); break; @@ -1355,6 +1359,7 @@ do_command(void *p, uint8_t *cdb) case GPCMD_READ_12: dev->sector_len = (((uint32_t) cdb[6]) << 24) | (((uint32_t) cdb[7]) << 16) | (((uint32_t) cdb[8]) << 8) | ((uint32_t) cdb[9]); dev->sector_pos = (((uint32_t) cdb[2]) << 24) | (((uint32_t) cdb[3]) << 16) | (((uint32_t) cdb[4]) << 8) | ((uint32_t) cdb[5]); + DEBUG("MO %i: Length: %i, LBA: %i\n", dev->id, dev->sector_len, dev->sector_pos); break; } @@ -1391,7 +1396,7 @@ do_command(void *p, uint8_t *cdb) set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); - data_command_finish(dev, alloc_length, 512, alloc_length, 0); + data_command_finish(dev, alloc_length, dev->drv->sector_size, alloc_length, 0); if (dev->packet_status != PHASE_COMPLETE) ui_sb_icon_update(SB_MO | dev->id, 1);