summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2020-11-28 13:23:46 +0100
committer Olivier Galibert <galibert@pobox.com>2020-11-28 13:26:28 +0100
commita8979690ad91d7231cc8a01b626812a4c53b1e4c (patch)
treea0420f057f8af46bb0054f5477bccb93c360013f /src
parent86262b3dda069432c070ec2ff60b801592896149 (diff)
vcombat: Separate the memory maps for single and dual i860
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/vcombat.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/mame/drivers/vcombat.cpp b/src/mame/drivers/vcombat.cpp
index 86d3845be8d..9baedcd674f 100644
--- a/src/mame/drivers/vcombat.cpp
+++ b/src/mame/drivers/vcombat.cpp
@@ -135,11 +135,11 @@ private:
required_device<dac_word_interface> m_dac;
optional_device<mc6845_device> m_crtc;
required_shared_ptr<uint64_t> m_vid_0_ram;
- required_shared_ptr<uint64_t> m_vid_1_ram;
+ optional_shared_ptr<uint64_t> m_vid_1_ram;
required_shared_ptr<uint64_t> m_m0_p0_c1;
required_shared_ptr<uint64_t> m_m0_p0_c2;
- required_shared_ptr<uint64_t> m_m0_p1_c1;
- required_shared_ptr<uint64_t> m_m0_p1_c2;
+ optional_shared_ptr<uint64_t> m_m0_p1_c1;
+ optional_shared_ptr<uint64_t> m_m0_p1_c2;
std::unique_ptr<uint16_t[]> m_m68k_framebuffer[2];
std::unique_ptr<uint16_t[]> m_i860_framebuffer[2][2];
@@ -164,7 +164,8 @@ private:
uint32_t screen_update_vcombat_main(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_vcombat_aux(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void main_map(address_map &map);
+ void single_i860_map(address_map &map);
+ void dual_i860_map(address_map &map);
void sound_map(address_map &map);
void vid_0_map(address_map &map);
void vid_1_map(address_map &map);
@@ -485,7 +486,7 @@ void vcombat_state::vram_1_w(offs_t offset, uint16_t data, uint16_t mem_mask)
vram_w(offset, data, mem_mask, m_vid_1_ram);
}
-void vcombat_state::main_map(address_map &map)
+void vcombat_state::single_i860_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x200000, 0x20ffff).ram();
@@ -496,11 +497,6 @@ void vcombat_state::main_map(address_map &map)
map(0x480000, 0x480003).rw(FUNC(vcombat_state::m0_p0_c2_r), FUNC(vcombat_state::m0_p0_c2_w)); /* M0<-P0 i860 #1 com 2 */
map(0x4c0000, 0x4c0003).w(FUNC(vcombat_state::wiggle_i860p0_pins_w)); /* i860 #1 stop/start/reset */
- map(0x500000, 0x53ffff).rw(FUNC(vcombat_state::vram_1_r), FUNC(vcombat_state::vram_1_w)); /* Second i860 shared RAM */
- map(0x540000, 0x540003).rw(FUNC(vcombat_state::m0_p1_c1_r), FUNC(vcombat_state::m0_p1_c1_w)); /* M0->P1 i860 #2 com 1 */
- map(0x580000, 0x580003).rw(FUNC(vcombat_state::m0_p1_c2_r), FUNC(vcombat_state::m0_p1_c2_w)); /* M0<-P1 i860 #2 com 2 */
- map(0x5c0000, 0x5c0003).w(FUNC(vcombat_state::wiggle_i860p1_pins_w)); /* i860 #2 stop/start/reset */
-
map(0x600000, 0x600001).r(FUNC(vcombat_state::control_1_r)); /* IN0 port */
map(0x600004, 0x600005).ram().share("share5"); /* M0<-M1 */
map(0x600008, 0x600009).r(FUNC(vcombat_state::control_2_r)); /* IN1 port */
@@ -520,6 +516,17 @@ void vcombat_state::main_map(address_map &map)
}
+void vcombat_state::dual_i860_map(address_map &map)
+{
+ single_i860_map(map);
+
+ map(0x500000, 0x53ffff).rw(FUNC(vcombat_state::vram_1_r), FUNC(vcombat_state::vram_1_w)); /* Second i860 shared RAM */
+ map(0x540000, 0x540003).rw(FUNC(vcombat_state::m0_p1_c1_r), FUNC(vcombat_state::m0_p1_c1_w)); /* M0->P1 i860 #2 com 1 */
+ map(0x580000, 0x580003).rw(FUNC(vcombat_state::m0_p1_c2_r), FUNC(vcombat_state::m0_p1_c2_w)); /* M0<-P1 i860 #2 com 2 */
+ map(0x5c0000, 0x5c0003).w(FUNC(vcombat_state::wiggle_i860p1_pins_w)); /* i860 #2 stop/start/reset */
+}
+
+
/* The first i860 - middle board */
void vcombat_state::vid_0_map(address_map &map)
{
@@ -680,7 +687,7 @@ WRITE_LINE_MEMBER(vcombat_state::sound_update)
void vcombat_state::vcombat(machine_config &config)
{
M68000(config, m_maincpu, XTAL(12'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &vcombat_state::main_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &vcombat_state::dual_i860_map);
m_maincpu->set_vblank_int("screen", FUNC(vcombat_state::irq1_line_assert));
/* The middle board i860 */
@@ -727,7 +734,7 @@ void vcombat_state::vcombat(machine_config &config)
void vcombat_state::shadfgtr(machine_config &config)
{
M68000(config, m_maincpu, XTAL(12'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &vcombat_state::main_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &vcombat_state::single_i860_map);
m_maincpu->set_vblank_int("screen", FUNC(vcombat_state::irq1_line_assert));
/* The middle board i860 */