mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-19 08:31:11 +00:00
Extended to emulate the CommaVid.
This commit is contained in:
parent
8f8b103224
commit
184c8ae707
@ -90,17 +90,20 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
|
|||||||
uint16_t masked_address = address & 0x1fff;
|
uint16_t masked_address = address & 0x1fff;
|
||||||
if(address&0x1000)
|
if(address&0x1000)
|
||||||
{
|
{
|
||||||
if(isReadOperation(operation) && (!uses_superchip_ || masked_address > 0x10ff)) {
|
// check for a RAM access
|
||||||
returnValue &= rom_pages_[(address >> 10)&3][address&1023];
|
bool was_ram_access = false;
|
||||||
|
if(has_ram_) {
|
||||||
|
if(masked_address >= ram_write_start_ && masked_address < ram_.size() + ram_write_start_) {
|
||||||
|
ram_[masked_address & ram_.size() - 1] = *value;
|
||||||
|
was_ram_access = true;
|
||||||
|
} else if(masked_address >= ram_read_start_ && masked_address < ram_.size() + ram_read_start_) {
|
||||||
|
returnValue &= ram_[masked_address & ram_.size() - 1];
|
||||||
|
was_ram_access = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for a Super Chip RAM access
|
if(isReadOperation(operation) && !was_ram_access) {
|
||||||
if(uses_superchip_ && masked_address < 0x1100) {
|
returnValue &= rom_pages_[(address >> 10)&3][address&1023];
|
||||||
if(masked_address < 0x1080) {
|
|
||||||
superchip_ram_[masked_address & 0x7f] = *value;
|
|
||||||
} else {
|
|
||||||
returnValue &= superchip_ram_[masked_address & 0x7f];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +280,25 @@ void Machine::configure_as_target(const StaticAnalyser::Target &target)
|
|||||||
rom_pages_[2] = &rom_[2048 & romMask];
|
rom_pages_[2] = &rom_[2048 & romMask];
|
||||||
rom_pages_[3] = &rom_[3072 & romMask];
|
rom_pages_[3] = &rom_[3072 & romMask];
|
||||||
|
|
||||||
uses_superchip_ = target.atari.uses_superchip;
|
switch(target.atari.paging_model)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
if(target.atari.uses_superchip)
|
||||||
|
{
|
||||||
|
ram_.resize(128);
|
||||||
|
has_ram_ = true;
|
||||||
|
ram_write_start_ = 0x1000;
|
||||||
|
ram_read_start_ = 0x1080;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case StaticAnalyser::Atari2600PagingModel::CommaVid:
|
||||||
|
ram_.resize(1024);
|
||||||
|
has_ram_ = true;
|
||||||
|
ram_write_start_ = 0x1400;
|
||||||
|
ram_read_start_ = 0x1000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Audio and Video
|
#pragma mark - Audio and Video
|
||||||
|
@ -61,8 +61,9 @@ class Machine:
|
|||||||
size_t rom_size_;
|
size_t rom_size_;
|
||||||
|
|
||||||
// cartridge RAM expansion store
|
// cartridge RAM expansion store
|
||||||
uint8_t superchip_ram_[128];
|
std::vector<uint8_t> ram_;
|
||||||
bool uses_superchip_;
|
uint16_t ram_write_start_, ram_read_start_;
|
||||||
|
bool has_ram_;
|
||||||
|
|
||||||
// the RIOT and TIA
|
// the RIOT and TIA
|
||||||
PIA mos6532_;
|
PIA mos6532_;
|
||||||
|
Loading…
Reference in New Issue
Block a user