From 53092227f8d25c4e811c7180ff0ece4d7bac4a4b Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 2 Aug 2025 14:47:40 +0500 Subject: [PATCH] Manager: Show removable disk and MO drives in the details pane --- src/qt/qt_vmmanager_details.cpp | 2 ++ src/qt/qt_vmmanager_system.cpp | 44 ++++++++++++++++++++++++++++++++- src/qt/qt_vmmanager_system.hpp | 2 ++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index 513ea94bb..8b9eb5137 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -245,6 +245,8 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) { storageSection->addSection("Disks", passed_sysconfig->getDisplayValue(Display::Name::Disks)); storageSection->addSection("Floppy", passed_sysconfig->getDisplayValue(Display::Name::Floppy)); storageSection->addSection("CD-ROM", passed_sysconfig->getDisplayValue(Display::Name::CD)); + storageSection->addSection("Removable disks", passed_sysconfig->getDisplayValue(Display::Name::RDisk)); + storageSection->addSection("MO", passed_sysconfig->getDisplayValue(Display::Name::MO)); storageSection->addSection("SCSI", passed_sysconfig->getDisplayValue(Display::Name::SCSIController)); // Audio diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 301cdc580..a26fffc51 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -51,6 +51,9 @@ extern "C" { #include <86box/timer.h> // required for network.h and fdd.h #include <86box/cdrom.h> #include <86box/scsi.h> +#include <86box/scsi_device.h> // required for rdisk.h and mo.h +#include <86box/rdisk.h> +#include <86box/mo.h> #include <86box/fdd.h> #include <86box/gameport.h> #include <86box/midi.h> @@ -521,7 +524,7 @@ VMManagerSystem::setupVars() { auto network_config = getCategory("Network"); auto input_config = getCategory("Input devices"); auto floppy_cdrom_config = getCategory("Floppy and CD-ROM drives"); - auto scsi_config = getCategory("Storage controllers"); + auto rdisk_mo_config = getCategory("Other removable devices"); auto ports_config = getCategory("Ports (COM & LPT)"); // auto general_config = getCategory("General"); // auto config_uuid = QString("Not set"); @@ -735,6 +738,45 @@ VMManagerSystem::setupVars() { display_table[Display::Name::Floppy] = floppyDevices.join(VMManagerDetailSection::sectionSeparator); display_table[Display::Name::CD] = cdromDevices.join(VMManagerDetailSection::sectionSeparator); + // Removable disks & MO + QStringList rdiskDevices; + QStringList moDevices; + static auto rdisk_match = QRegularExpression("rdisk_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); + static auto zip_match = QRegularExpression("zip_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); // Legacy ZIP drive entries + static auto mo_match = QRegularExpression("mo_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); + for(const auto& key: rdisk_mo_config.keys()) { + if(key.contains(rdisk_match) || key.contains(zip_match)) { + auto device_number = key.split("_").at(1); + auto rdisk_parameters = QString(rdisk_mo_config[key]); + auto rdisk_type = rdisk_parameters.split(",").at(0).toInt(); + if (key.contains(zip_match)) + rdisk_type++; + auto rdisk_bus = rdisk_parameters.split(",").at(1).trimmed().toUpper(); + + if((rdisk_type >= 0) && (rdisk_type < KNOWN_RDISK_DRIVE_TYPES)) { + if(!rdisk_bus.isEmpty()) + rdisk_bus = QString(" (%1)").arg(rdisk_bus); + rdiskDevices.append(QString("%1 %2%3").arg(rdisk_drive_types[rdisk_type].vendor, rdisk_drive_types[rdisk_type].model, rdisk_bus)); + } + } + if(key.contains(mo_match)) { + auto device_number = key.split("_").at(1); + auto mo_parameters = QString(rdisk_mo_config[key]); + auto mo_type = mo_parameters.split(",").at(0).toInt(); + auto mo_bus = mo_parameters.split(",").at(1).trimmed().toUpper(); + + if((mo_type >= 0) && (mo_type < KNOWN_MO_DRIVE_TYPES)) { + if(!mo_bus.isEmpty()) + mo_bus = QString(" (%1)").arg(mo_bus); + moDevices.append(QString("%1 %2%3").arg(mo_drive_types[mo_type].vendor, mo_drive_types[mo_type].model, mo_bus)); + } + } + } + + display_table[Display::Name::RDisk] = rdiskDevices.join(VMManagerDetailSection::sectionSeparator); + display_table[Display::Name::MO] = moDevices.join(VMManagerDetailSection::sectionSeparator); + + // SCSI controllers QStringList scsiControllers; static auto scsi_match = QRegularExpression("scsicard_\\d", QRegularExpression::CaseInsensitiveOption); diff --git a/src/qt/qt_vmmanager_system.hpp b/src/qt/qt_vmmanager_system.hpp index e6f9186ea..4ed823cba 100644 --- a/src/qt/qt_vmmanager_system.hpp +++ b/src/qt/qt_vmmanager_system.hpp @@ -46,6 +46,8 @@ enum class Name { Disks, Floppy, CD, + RDisk, + MO, SCSIController, MidiOut, Joystick,