From 1ec0a8bed8c93e56a24e37683d93e591a8e651a3 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sun, 7 Mar 2021 15:04:56 +0100 Subject: [PATCH] - devices/bus/plus4: fixed MT07886 - liberate.cpp: added prosoccr PCB infos [f205v] --- src/devices/bus/plus4/exp.cpp | 18 ++++++++++++++---- src/devices/bus/plus4/exp.h | 8 ++++---- src/devices/bus/plus4/std.cpp | 8 ++++---- src/mame/drivers/liberate.cpp | 11 +++++++++++ 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/devices/bus/plus4/exp.cpp b/src/devices/bus/plus4/exp.cpp index c1184f16922..f47e9d5fac3 100644 --- a/src/devices/bus/plus4/exp.cpp +++ b/src/devices/bus/plus4/exp.cpp @@ -37,10 +37,10 @@ DEFINE_DEVICE_TYPE(PLUS4_EXPANSION_SLOT, plus4_expansion_slot_device, "plus4_exp device_plus4_expansion_card_interface::device_plus4_expansion_card_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "plus4exp"), - m_c1l_mask(0), - m_c1h_mask(0), - m_c2l_mask(0), - m_c2h_mask(0) + m_c1l_size(0), + m_c1h_size(0), + m_c2l_size(0), + m_c2h_size(0) { m_slot = dynamic_cast(device.owner()); } @@ -120,6 +120,16 @@ image_init_result plus4_expansion_slot_device::call_load() load_software_region("c1h", m_card->m_c1h); load_software_region("c2l", m_card->m_c2l); load_software_region("c2h", m_card->m_c2h); + m_card->m_c1l_size = get_software_region_length("c1l"); + m_card->m_c1h_size = get_software_region_length("c1h"); + m_card->m_c2l_size = get_software_region_length("c2l"); + m_card->m_c2h_size = get_software_region_length("c2h"); + + if ((m_card->m_c1l_size & (m_card->m_c1l_size - 1)) || (m_card->m_c1h_size & (m_card->m_c1h_size - 1)) || (m_card->m_c2l_size & (m_card->m_c2l_size - 1)) || (m_card->m_c2h_size & (m_card->m_c2h_size - 1))) + { + seterror(IMAGE_ERROR_UNSPECIFIED, "ROM size must be power of 2"); + return image_init_result::FAIL; + } } } diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h index 37691a319d5..fb03fb7fd4b 100644 --- a/src/devices/bus/plus4/exp.h +++ b/src/devices/bus/plus4/exp.h @@ -142,10 +142,10 @@ protected: std::unique_ptr m_c2l; std::unique_ptr m_c2h; - size_t m_c1l_mask; - size_t m_c1h_mask; - size_t m_c2l_mask; - size_t m_c2h_mask; + size_t m_c1l_size; + size_t m_c1h_size; + size_t m_c2l_size; + size_t m_c2h_size; plus4_expansion_slot_device *m_slot; }; diff --git a/src/devices/bus/plus4/std.cpp b/src/devices/bus/plus4/std.cpp index 2a050999680..ed9e9ff83a5 100644 --- a/src/devices/bus/plus4/std.cpp +++ b/src/devices/bus/plus4/std.cpp @@ -51,19 +51,19 @@ uint8_t plus4_standard_cartridge_device::plus4_cd_r(offs_t offset, uint8_t data, { if (!c1l && m_c1l) { - data = m_c1l[offset]; + data = m_c1l[offset & (m_c1l_size - 1)]; } else if (!c1h && m_c1h) { - data = m_c1h[offset]; + data = m_c1h[offset & (m_c1h_size - 1)]; } else if (!c2l && m_c2l) { - data = m_c2l[offset]; + data = m_c2l[offset & (m_c2l_size - 1)]; } else if (!c2h && m_c2h) { - data = m_c2h[offset]; + data = m_c2h[offset & (m_c2h_size - 1)]; } return data; diff --git a/src/mame/drivers/liberate.cpp b/src/mame/drivers/liberate.cpp index 75e16f938ef..8bcc3d19253 100644 --- a/src/mame/drivers/liberate.cpp +++ b/src/mame/drivers/liberate.cpp @@ -876,6 +876,17 @@ void liberate_state::prosport(machine_config &config) * *************************************/ +// top PCB is marked: "DATA EAST DECO SSI-16" and "DE-0148-1 MADE IN JAPAN" on component side +// mid PCB is marked: "DECO DE-0157-1 CHB-01 MADE IN JAPAN" on component side +// bottom PCB is marked: "DATA EAST DECO DSP-17A DE-0188-1 MADE IN JAPAN" on component side +// label format is: +// --- +// -------------- +// | PRO SOCCER | -> game name +// | AM 10-3 | -> rom number +// | C 1983 | -> copyright +// | DATA EAST | -> copyright +// -------------- ROM_START( prosoccr ) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD( "am08.9e", 0xa000, 0x2000, CRC(73d45d0d) SHA1(07736286087478af404bd9c6b279d631a01cf4e2) )