diff --git a/hash/arb.xml b/hash/arb.xml index cffff250ce9..89111cb26df 100644 --- a/hash/arb.xml +++ b/hash/arb.xml @@ -10,9 +10,11 @@ 1980 AVE Micro Systems - - - + + + + + diff --git a/src/mame/drivers/ave_arb.cpp b/src/mame/drivers/ave_arb.cpp index 673a132ea39..f922382f714 100644 --- a/src/mame/drivers/ave_arb.cpp +++ b/src/mame/drivers/ave_arb.cpp @@ -104,15 +104,15 @@ DEVICE_IMAGE_LOAD_MEMBER(arb_state, cartridge) m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom"); + // extra ram (optional) + if (image.get_feature("ram")) + m_maincpu->space(AS_PROGRAM).install_ram(0x0800, 0x0fff, 0x1000, nullptr); + return image_init_result::PASS; } READ8_MEMBER(arb_state::cartridge_r) { - // range is 0x4000-0x7fff + 0xc000-0xffff - if (offset >= 0x8000) - offset -= 0x4000; - return m_cart->read_rom(offset & m_cart_mask); } @@ -165,9 +165,10 @@ READ8_MEMBER(arb_state::input_r) void arb_state::main_map(address_map &map) { - map(0x0000, 0x07ff).mirror(0x3800).ram().share("nvram"); - map(0x4000, 0xffff).r(FUNC(arb_state::cartridge_r)); // gap in 0x8000-0xbfff - map(0x8000, 0x800f).mirror(0x3ff0).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write)); + // external slot is A0-A14, potential bus conflict with RAM/VIA + map(0x0000, 0x7fff).mirror(0x8000).r(FUNC(arb_state::cartridge_r)); + map(0x0000, 0x07ff).mirror(0x1000).ram().share("nvram"); + map(0x8000, 0x800f).mirror(0x1ff0).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write)); }