diff --git a/StaticAnalyser/Atari/StaticAnalyser.cpp b/StaticAnalyser/Atari/StaticAnalyser.cpp index a1880f2e3..16a9e7f84 100644 --- a/StaticAnalyser/Atari/StaticAnalyser.cpp +++ b/StaticAnalyser/Atari/StaticAnalyser.cpp @@ -107,15 +107,22 @@ static void DeterminePagingForCartridge(StaticAnalyser::Target &target, const St if(!(address & 0x1000)) return (size_t)-1; return (size_t)(address & 0xfff); }; - StaticAnalyser::MOS6502::Disassembly disassembly = - StaticAnalyser::MOS6502::Disassemble(segment.data, address_mapper, {entry_address, break_address}); + + std::vector disassemblies; + std::set internal_stores; + for(std::vector::difference_type base = 0; base < segment.data.size(); base += 4096) + { + std::vector sub_data(segment.data.begin() + base, segment.data.begin() + base + 2048); + disassemblies.push_back(StaticAnalyser::MOS6502::Disassemble(sub_data, address_mapper, {entry_address, break_address})); + internal_stores.insert(disassemblies.back().internal_stores.begin(), disassemblies.back().internal_stores.end()); + } // check for any sort of on-cartridge RAM; that might imply a Super Chip or else immediately tip the // hat that this is a CBS RAM+ cartridge - if(disassembly.internal_stores.size() > 4) + if(internal_stores.size() > 4) { bool writes_above_128 = false; - for(uint16_t address : disassembly.internal_stores) + for(uint16_t address : internal_stores) { writes_above_128 |= ((address & 0x1fff) > 0x10ff) && ((address & 0x1fff) < 0x1200); }