summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/bbc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/bbc.cpp')
-rw-r--r--src/mame/machine/bbc.cpp28
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 */
+}