mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-03 23:52:28 +00:00
Switched to image inspection for RAM guesses rather than disassembly. Which fixes the other Parker Bros titles.
This commit is contained in:
parent
2b5e3a600e
commit
33bda2d40c
@ -93,8 +93,8 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case StaticAnalyser::Atari2600PagingModel::ParkerBros:
|
case StaticAnalyser::Atari2600PagingModel::ParkerBros:
|
||||||
if(masked_address >= 0x1fe0 && masked_address <= 0x1ff8) {
|
if(masked_address >= 0x1fe0 && masked_address < 0x1ff8) {
|
||||||
int slot = (masked_address - 0x1fe0) >> 3;
|
int slot = (masked_address >> 3) & 3;
|
||||||
int target = masked_address & 7;
|
int target = masked_address & 7;
|
||||||
rom_pages_[slot] = &rom_[target * 1024];
|
rom_pages_[slot] = &rom_[target * 1024];
|
||||||
}
|
}
|
||||||
@ -290,13 +290,13 @@ void Machine::configure_as_target(const StaticAnalyser::Target &target)
|
|||||||
|
|
||||||
// On a real paged cartridge, any page may initially be visible. Various homebrew authors appear to have
|
// 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.
|
// decided the last page will always be initially visible. So do that.
|
||||||
size_t romMask = rom_size_ - 1;
|
size_t rom_mask = rom_size_ - 1;
|
||||||
uint8_t *rom_base = rom_;
|
uint8_t *rom_base = rom_;
|
||||||
if(rom_size_ > 4096) rom_base = &rom_[rom_size_ - 4096];
|
if(rom_size_ > 4096) rom_base = &rom_[rom_size_ - 4096];
|
||||||
rom_pages_[0] = rom_base;
|
rom_pages_[0] = rom_base;
|
||||||
rom_pages_[1] = &rom_base[1024 & romMask];
|
rom_pages_[1] = &rom_base[1024 & rom_mask];
|
||||||
rom_pages_[2] = &rom_base[2048 & romMask];
|
rom_pages_[2] = &rom_base[2048 & rom_mask];
|
||||||
rom_pages_[3] = &rom_base[3072 & romMask];
|
rom_pages_[3] = &rom_base[3072 & rom_mask];
|
||||||
|
|
||||||
switch(target.atari.paging_model)
|
switch(target.atari.paging_model)
|
||||||
{
|
{
|
||||||
|
@ -145,19 +145,32 @@ static void DeterminePagingForCartridge(StaticAnalyser::Target &target, const St
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check for any sort of on-cartridge RAM; that might imply a Super Chip or else immediately tip the
|
// 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
|
// hat that this is a CBS RAM+ cartridge. Atari ROM images always have the same value stored over RAM
|
||||||
if(internal_stores.size() > 4)
|
// regions.
|
||||||
|
bool has_superchip = true;
|
||||||
|
bool is_ram_plus = true;
|
||||||
|
for(size_t address = 0; address < 256; address++)
|
||||||
{
|
{
|
||||||
bool writes_above_128 = false;
|
if(segment.data[address] != segment.data[0])
|
||||||
for(uint16_t address : internal_stores)
|
|
||||||
{
|
{
|
||||||
writes_above_128 |= ((address & 0x1fff) > 0x10ff) && ((address & 0x1fff) < 0x1200);
|
if(address < 128) has_superchip = false;
|
||||||
|
is_ram_plus = false;
|
||||||
}
|
}
|
||||||
if(writes_above_128)
|
|
||||||
target.atari.paging_model = StaticAnalyser::Atari2600PagingModel::CBSRamPlus;
|
|
||||||
else
|
|
||||||
target.atari.uses_superchip = true;
|
|
||||||
}
|
}
|
||||||
|
target.atari.uses_superchip = has_superchip;
|
||||||
|
if(is_ram_plus) target.atari.paging_model = StaticAnalyser::Atari2600PagingModel::CBSRamPlus;
|
||||||
|
// if(internal_stores.size() > 4)
|
||||||
|
// {
|
||||||
|
// bool writes_above_128 = false;
|
||||||
|
// for(uint16_t address : internal_stores)
|
||||||
|
// {
|
||||||
|
// writes_above_128 |= ((address & 0x1fff) > 0x10ff) && ((address & 0x1fff) < 0x1200);
|
||||||
|
// }
|
||||||
|
// if(writes_above_128)
|
||||||
|
// target.atari.paging_model = StaticAnalyser::Atari2600PagingModel::CBSRamPlus;
|
||||||
|
// else
|
||||||
|
// target.atari.uses_superchip = true;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaticAnalyser::Atari::AddTargets(
|
void StaticAnalyser::Atari::AddTargets(
|
||||||
|
Loading…
Reference in New Issue
Block a user