6883sam: Another blind attempt at fixing 64K mode (nw)

This commit is contained in:
AJR 2020-04-24 11:16:14 -04:00
parent d0cbd88c59
commit c6ee172dbe
2 changed files with 9 additions and 5 deletions

View File

@ -66,13 +66,13 @@ void coco12_state::coco_ram(address_map &map)
void coco12_state::coco_rom0(address_map &map)
{
// $8000-$9FFF
map(0x0000, 0x1fff).rom().region(MAINCPU_TAG, 0x0000);
map(0x0000, 0x1fff).rom().region(MAINCPU_TAG, 0x0000).nopw();
}
void coco12_state::coco_rom1(address_map &map)
{
// $A000-$BFFF
map(0x0000, 0x1fff).rom().region(MAINCPU_TAG, 0x2000);
map(0x0000, 0x1fff).rom().region(MAINCPU_TAG, 0x2000).nopw();
}
void coco12_state::coco_rom2(address_map &map)

View File

@ -162,7 +162,7 @@ uint8_t sam6883_device::read(offs_t offset)
}
else if (offset < 0xff00)
{
// ROM2 space: C000DFFF
// ROM2 space: C000FEFF
return m_rom_space[2]->read_byte(offset & 0x3fff);
}
else if (offset < 0xff60)
@ -184,10 +184,10 @@ uint8_t sam6883_device::read(offs_t offset)
void sam6883_device::write(offs_t offset, uint8_t data)
{
bool mode_64k = (m_sam_state & SAM_STATE_M1) == SAM_STATE_M1;
if (offset < 0x8000)
{
// RAM write space: 00007FFF (nominally space 7)
bool mode_64k = (m_sam_state & SAM_STATE_M1) == SAM_STATE_M1;
if (mode_64k && (m_sam_state & (SAM_STATE_TY|SAM_STATE_P1)) == SAM_STATE_P1)
offset |= 0x8000;
m_ram_space->write_byte(offset, data);
@ -195,11 +195,15 @@ void sam6883_device::write(offs_t offset, uint8_t data)
else if (offset < 0xc000 || offset >= 0xffe0)
{
// ROM spaces: 80009FFF and A000BFFF + FFE0FFFF (may write through to RAM)
if (offset < 0xc000 && mode_64k && (m_sam_state & SAM_STATE_TY))
m_ram_space->write_byte(offset, data);
m_rom_space[BIT(offset, 13)]->write_byte(offset & 0x1fff, data);
}
else if (offset < 0xff00)
{
// ROM2 space: C000DFFF (may write through to RAM)
// ROM2 space: C000FEFF (may write through to RAM)
if (mode_64k && (m_sam_state & SAM_STATE_TY))
m_ram_space->write_byte(offset, data);
m_rom_space[2]->write_byte(offset & 0x3fff, data);
}
else if (offset < 0xff60)