diff --git a/Machines/Thomson/MO5/MO5.cpp b/Machines/Thomson/MO5/MO5.cpp index d8d25d7a8..9a27af10a 100644 --- a/Machines/Thomson/MO5/MO5.cpp +++ b/Machines/Thomson/MO5/MO5.cpp @@ -94,7 +94,7 @@ struct ConcreteMachine: { auto rom = roms.find(BasicROM)->second; memory_.set_monitor(rom.end() - 0x1000, rom.end()); - memory_.set_rom(std::vector(rom.begin(), rom.end() - 0x1000)); + memory_.set_rom(rom.begin(), rom.end() - 0x1000); } if(has_floppy) { @@ -605,7 +605,7 @@ private: if(rom.size() < 16384) { rom.resize(16384); } - memory_.set_rom(rom); + memory_.set_cartridge(rom); } if(has_floppy) { diff --git a/Machines/Thomson/MO5/MemoryMap.hpp b/Machines/Thomson/MO5/MemoryMap.hpp index eb662286e..af9da4c8f 100644 --- a/Machines/Thomson/MO5/MemoryMap.hpp +++ b/Machines/Thomson/MO5/MemoryMap.hpp @@ -43,11 +43,18 @@ public: std::copy(begin, end, monitor_.begin()); } - void set_rom(const std::vector &rom) { - rom_ = rom; + template + void set_rom(const IteratorT begin, const IteratorT end) { + rom_ = std::vector(begin, end); update_commutable_rom(); } + void set_cartridge(const std::vector &cartridge) { + if constexpr (!is_mo6) { + set_rom(cartridge.begin(), cartridge.end()); + } + } + void set_floppy_rom(const std::vector &rom) { std::copy_n(rom.begin(), std::min(rom.size(), floppy_rom_.size()), floppy_rom_.begin()); set_read(0xa, floppy_rom_.data());