From 6bbde6320ffd68dfa279522248290ad191a08707 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 30 Mar 2020 00:58:53 +0100 Subject: [PATCH] Add M.O. drive models. --- src/config.c | 6 +++--- src/devices/disk/mo.c | 24 ++++++++++++------------ src/devices/disk/mo.h | 1 + 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/config.c b/src/config.c index 490211e..0d25219 100644 --- a/src/config.c +++ b/src/config.c @@ -1573,8 +1573,8 @@ load_mo(config_t* cfg, const char* cat) for (c = 0; c < MO_NUM; c++) { sprintf(temp, "mo_%02i_parameters", c + 1); - p = config_get_string(cat, temp, "none"); - sscanf(p, "%s", s); + p = config_get_string(cat, temp, "0, none"); + sscanf(p, "%u, %s", (unsigned*)&mo_drives[c].type, s); mo_drives[c].bus_type = mo_string_to_bus(s); /* Default values, needed for proper operation of the Settings dialog. */ @@ -1654,7 +1654,7 @@ save_mo(const config_t* cfg, const char* cat) config_delete_var(cat, temp); } else { - sprintf(tmp2, "%s", + sprintf(tmp2, "%u, %s", mo_drives[c].type, mo_bus_to_string(mo_drives[c].bus_type)); config_set_string(cat, temp, tmp2); } diff --git a/src/devices/disk/mo.c b/src/devices/disk/mo.c index 0900e32..ead4a60 100644 --- a/src/devices/disk/mo.c +++ b/src/devices/disk/mo.c @@ -1388,12 +1388,6 @@ do_command(void *p, uint8_t *cdb) buf_alloc(dev, 65536); } - if (!(mode_sense_page_flags & (1LL << (uint64_t) (cdb[2] & 0x3f)))) { - invalid_field(dev); - buf_free(dev); - return; - } - memset(dev->buffer, 0, len); alloc_length = len; @@ -1524,9 +1518,9 @@ do_command(void *p, uint8_t *cdb) dev->buffer[7] = 0x20; /* Wide bus supported */ } - ide_padstr8(dev->buffer + 8, 8, "VARCEM "); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, "MAGNETO OPTICAL "); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "1.00"); /* Revision */ + ide_padstr8(dev->buffer + 8, 8, mo_drive_types[dev->drv->type].vendor); /* Vendor */ + ide_padstr8(dev->buffer + 16, 16, mo_drive_types[dev->drv->type].model); /* Product */ + ide_padstr8(dev->buffer + 32, 4, mo_drive_types[dev->drv->type].revision); /* Revision */ idx = 36; if (max_len == 96) { @@ -2175,8 +2169,14 @@ packet_write(void *p, uint32_t val, int length) static void mo_identify(ide_t *ide, int ide_has_dma) { - ide_padstr((char *) (ide->buffer + 23), "1.00", 8); /* Firmware */ - ide_padstr((char *) (ide->buffer + 27), "VARCEM MAGNETO OPTICAL", 40); /* Model */ + char model[40]; + mo_t* mo = (mo_t*)ide->p; + + memset(model, 0, 40); + snprintf(model, 40, "%s %s", mo_drive_types[mo_drives[mo->id].type].vendor, mo_drive_types[mo_drives[mo->id].type].model); + + ide_padstr((char *) (ide->buffer + 23), mo_drive_types[mo_drives[mo->id].type].revision, 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), model, 40); /* Model */ if (ide_has_dma) { ide->buffer[80] = 0x30; /*Supported ATA versions : ATA/ATAPI-4 ATA/ATAPI-5*/ @@ -2486,7 +2486,7 @@ mo_load(mo_t *dev, const wchar_t *fn) fseek(dev->drv->f, 0, SEEK_END); size = ftell(dev->drv->f); - for(i = 0; i < sizeof(mo_types); i++) + for(i = 0; i < KNOWN_MO_TYPES; i++) { if(size == mo_types[i].disk_size) { diff --git a/src/devices/disk/mo.h b/src/devices/disk/mo.h index 8e4db89..22952e5 100644 --- a/src/devices/disk/mo.h +++ b/src/devices/disk/mo.h @@ -127,6 +127,7 @@ typedef struct { uint32_t medium_size, base; uint16_t sector_size; + uint8_t type; void *priv;