diff options
Diffstat (limited to 'src/mame/machine/bbc.cpp')
-rw-r--r-- | src/mame/machine/bbc.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/mame/machine/bbc.cpp b/src/mame/machine/bbc.cpp index ab69a413c34..cc2d12a9dfa 100644 --- a/src/mame/machine/bbc.cpp +++ b/src/mame/machine/bbc.cpp @@ -346,6 +346,9 @@ WRITE8_MEMBER(bbc_state::page_selectbm_w) m_pagedRAM = (data & 0x80) >> 7; m_rombank = data & 0x0f; + if (m_lk19_ic37_paged_rom && (m_rombank == 4 || m_rombank == 5)) m_pagedRAM = 0; + if (m_lk18_ic41_paged_rom && (m_rombank == 6 || m_rombank == 7)) m_pagedRAM = 0; + if (m_pagedRAM) { m_bank4->set_entry(0x10); @@ -359,14 +362,12 @@ WRITE8_MEMBER(bbc_state::page_selectbm_w) } - WRITE8_MEMBER(bbc_state::bbc_memorybm1_w) { m_region_maincpu->base()[offset] = data; } - WRITE8_MEMBER(bbc_state::bbc_memorybm2_w) { uint8_t *RAM = m_region_maincpu->base(); @@ -387,11 +388,6 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm2_w) } } -static const unsigned short bbc_master_sideways_ram_banks[16]= -{ - 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0 -}; - WRITE8_MEMBER(bbc_state::bbc_memorybm4_w) { @@ -401,7 +397,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm4_w) } else { - if (bbc_master_sideways_ram_banks[m_rombank]) + if ((!m_lk18_ic41_paged_rom && (m_rombank == 6 || m_rombank == 7)) || (!m_lk19_ic37_paged_rom && (m_rombank == 4 || m_rombank == 5))) { m_region_opt->base()[offset+(m_rombank<<14)] = data; } @@ -411,9 +407,9 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm4_w) WRITE8_MEMBER(bbc_state::bbc_memorybm5_w) { - if (bbc_master_sideways_ram_banks[m_rombank]) + if ((!m_lk18_ic41_paged_rom && (m_rombank == 6 || m_rombank == 7)) || (!m_lk19_ic37_paged_rom && (m_rombank == 4 || m_rombank == 5))) { - m_region_opt->base()[offset+(m_rombank<<14)+0x1000] = data; + m_region_opt->base()[offset+(m_rombank<<14) + 0x1000] = data; } } @@ -1759,6 +1755,9 @@ MACHINE_START_MEMBER(bbc_state, bbcm) m_machinetype = MASTER; m_mc6850_clock = 0; + m_lk18_ic41_paged_rom = false; /* Link set for RAM in slots 6 and 7 */ + m_lk19_ic37_paged_rom = false; /* Link set for RAM in slots 4 and 5 */ + bbcm_setup_banks(m_bank4, 16, 0, 0x1000); m_bank4->configure_entries(16, 1, m_region_maincpu->base() + 0x8000, 0x1000); // additional bank for paged ram bbcm_setup_banks(m_bank5, 16, 0x1000, 0x3000); @@ -1816,3 +1815,12 @@ MACHINE_RESET_MEMBER(bbc_state, ltmpm) m_Speech = 0; m_SWRAMtype = 0; } + + +MACHINE_START_MEMBER(bbc_state, cfa3000) +{ + MACHINE_START_CALL_MEMBER(bbcm); + + m_lk18_ic41_paged_rom = true; /* Link set for ROM in slots 6 and 7 */ + m_lk19_ic37_paged_rom = true; /* Link set for ROM in slots 4 and 5 */ +} |