From 1bdc718527412c13550cd121067bf1e1f8a4a0a2 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 18 Jun 2018 22:15:52 -0400 Subject: [PATCH] Ensures the MSX reports the proper number of drives. --- Machines/MSX/DiskROM.cpp | 25 ++++++++----------------- Machines/MSX/DiskROM.hpp | 2 -- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/Machines/MSX/DiskROM.cpp b/Machines/MSX/DiskROM.cpp index 067c037b4..ddeb556db 100644 --- a/Machines/MSX/DiskROM.cpp +++ b/Machines/MSX/DiskROM.cpp @@ -13,6 +13,8 @@ using namespace MSX; DiskROM::DiskROM(const std::vector &rom) : WD1770(P1793), rom_(rom) { + drives_[0].reset(new Storage::Disk::Drive(8000000, 300, 2)); + drives_[1].reset(new Storage::Disk::Drive(8000000, 300, 2)); set_is_double_density(true); } @@ -23,16 +25,16 @@ void DiskROM::write(uint16_t address, uint8_t value, bool pc_is_outside_bios) { break; case 0x7ffc: selected_head_ = value & 1; - if(drives_[0]) drives_[0]->set_head(selected_head_); - if(drives_[1]) drives_[1]->set_head(selected_head_); + drives_[0]->set_head(selected_head_); + drives_[1]->set_head(selected_head_); break; case 0x7ffd: { selected_drive_ = value & 1; set_drive(drives_[selected_drive_]); bool drive_motor = !!(value & 0x80); - if(drives_[0]) drives_[0]->set_motor_on(drive_motor); - if(drives_[1]) drives_[1]->set_motor_on(drive_motor); + drives_[0]->set_motor_on(drive_motor); + drives_[1]->set_motor_on(drive_motor); } break; } } @@ -57,12 +59,6 @@ void DiskROM::run_for(HalfCycles half_cycles) { } void DiskROM::set_disk(std::shared_ptr disk, size_t drive) { - if(!drives_[drive]) { - drives_[drive].reset(new Storage::Disk::Drive(8000000, 300, 2)); - drives_[drive]->set_head(selected_head_); - if(drive == selected_drive_) set_drive(drives_[drive]); - drives_[drive]->set_activity_observer(observer_, drive_name(drive), true); - } drives_[drive]->set_disk(disk); } @@ -72,14 +68,9 @@ void DiskROM::set_head_load_request(bool head_load) { } void DiskROM::set_activity_observer(Activity::Observer *observer) { - size_t c = 0; - observer_ = observer; + size_t c = 1; for(auto &drive: drives_) { - if(drive) drive->set_activity_observer(observer, drive_name(c), true); + drive->set_activity_observer(observer, "Drive " + std::to_string(c), true); ++c; } } - -std::string DiskROM::drive_name(size_t index) { - return "Drive " + std::to_string(index); -} diff --git a/Machines/MSX/DiskROM.hpp b/Machines/MSX/DiskROM.hpp index a32a599f0..316c63ccc 100644 --- a/Machines/MSX/DiskROM.hpp +++ b/Machines/MSX/DiskROM.hpp @@ -41,8 +41,6 @@ class DiskROM: public ROMSlotHandler, public WD::WD1770 { std::array, 2> drives_; void set_head_load_request(bool head_load) override; - std::string drive_name(size_t index); - Activity::Observer *observer_ = nullptr; }; }