From 93d15734818eec7867052d20f86c8948e817a37b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 1 Mar 2017 07:59:25 -0500 Subject: [PATCH] Added a fix for certain homebrews. --- Machines/Atari2600/Atari2600.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Machines/Atari2600/Atari2600.cpp b/Machines/Atari2600/Atari2600.cpp index 4cd159117..e7454d630 100644 --- a/Machines/Atari2600/Atari2600.cpp +++ b/Machines/Atari2600/Atari2600.cpp @@ -274,11 +274,15 @@ void Machine::configure_as_target(const StaticAnalyser::Target &target) offset += copy_length; } + // On a real paged cartridge, any page may initially be visible. Various homebrew authors appear to have + // decided the last page will always be initially visible. So do that. size_t romMask = rom_size_ - 1; - rom_pages_[0] = rom_; - rom_pages_[1] = &rom_[1024 & romMask]; - rom_pages_[2] = &rom_[2048 & romMask]; - rom_pages_[3] = &rom_[3072 & romMask]; + uint8_t *rom_base = rom_; + if(rom_size_ > 4096) rom_base = &rom_[rom_size_ - 4096]; + rom_pages_[0] = rom_base; + rom_pages_[1] = &rom_base[1024 & romMask]; + rom_pages_[2] = &rom_base[2048 & romMask]; + rom_pages_[3] = &rom_base[3072 & romMask]; switch(target.atari.paging_model) {