From 765c0d4ff802a1d04456e97863903534a77894cb Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Jan 2018 21:27:45 -0500 Subject: [PATCH] Allows the Electron to load 8kb ROMs. --- Machines/Electron/Electron.cpp | 8 +++++++- StaticAnalyser/Acorn/StaticAnalyser.cpp | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp index 738b820d3..b48a6f675 100644 --- a/Machines/Electron/Electron.cpp +++ b/Machines/Electron/Electron.cpp @@ -66,7 +66,13 @@ class ConcreteMachine: break; } - std::memcpy(target, &data[0], std::min(static_cast(16384), data.size())); + // Copy in, with mirroring. + std::size_t rom_ptr = 0; + while(rom_ptr < 16384) { + std::size_t size_to_copy = std::min(16384 - rom_ptr, data.size()); + std::memcpy(&target[rom_ptr], data.data(), size_to_copy); + rom_ptr += size_to_copy; + } } // Obtains the system ROMs. diff --git a/StaticAnalyser/Acorn/StaticAnalyser.cpp b/StaticAnalyser/Acorn/StaticAnalyser.cpp index 588ffff42..c1ba2dfd2 100644 --- a/StaticAnalyser/Acorn/StaticAnalyser.cpp +++ b/StaticAnalyser/Acorn/StaticAnalyser.cpp @@ -23,9 +23,9 @@ static std::list> // only one mapped item is allowed if(segments.size() != 1) continue; - // which must be 16 kb in size + // which must be 8 or 16 kb in size Storage::Cartridge::Cartridge::Segment segment = segments.front(); - if(segment.data.size() != 0x4000) continue; + if(segment.data.size() != 0x4000 && segment.data.size() != 0x2000) continue; // is a copyright string present? uint8_t copyright_offset = segment.data[7];