diff --git a/machines/machinepdm.cpp b/machines/machinepdm.cpp
index 5b3b8da..46ceb32 100644
--- a/machines/machinepdm.cpp
+++ b/machines/machinepdm.cpp
@@ -37,6 +37,7 @@ along with this program. If not, see .
#include
#include
+#include
#include
#include
@@ -89,11 +90,32 @@ int initialize_pdm(std::string& id)
std::string hd_image_path = GET_STR_PROP("hdd_img");
if (!hd_image_path.empty()) {
- // attach SCSI HD to the main bus, ID #0
- auto my_hd = dynamic_cast(gMachineObj->get_comp_by_name("ScsiHD"));
- scsi_bus->register_device(0, my_hd);
- // insert specified disk image
- my_hd->insert_image(hd_image_path);
+ std::istringstream hd_image_stream(hd_image_path);
+ std::string path;
+ int scsi_id = 0;
+
+ while (std::getline(hd_image_stream, path, ':')) {
+ // Avoid overlapping with the CD-ROM drive at ID 3.
+ if (scsi_id >= 3) {
+ LOG_F(WARNING, "Ignoring SCSI ID %d: only IDs 0-2 are supported", scsi_id);
+ continue;
+ }
+
+ ScsiHardDisk *scsi_hd;
+ if (scsi_id == 0) {
+ // There's always a built-in SCSI hard disk at ID #0
+ scsi_hd = dynamic_cast(gMachineObj->get_comp_by_name("ScsiHD"));
+ } else {
+ // Register additional SCSI hard disks as needed
+ std::string scsi_hd_name = "ScsiHD" + std::to_string(scsi_id);
+ scsi_hd = new ScsiHardDisk(scsi_hd_name, scsi_id);
+ gMachineObj->add_device(scsi_hd_name, std::unique_ptr(scsi_hd));
+ }
+
+ scsi_bus->register_device(scsi_id, scsi_hd);
+ scsi_hd->insert_image(path);
+ scsi_id++;
+ }
}
std::string cdr_image_path = GET_STR_PROP("cdr_img");