From e8ff0dfeca14677162d9878a3ed89fdeb678dfaa Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sun, 12 Sep 2021 07:43:32 +0200 Subject: - royalmah.cpp: configured banking and views for mjdejavu ad mjifb - goldstar.cpp: point reel tilemap to the right GFX rom offset for cmast97 --- src/mame/drivers/goldstar.cpp | 4 +- src/mame/drivers/royalmah.cpp | 168 ++++++++++-------------------------------- 2 files changed, 39 insertions(+), 133 deletions(-) diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp index da2eda71e67..5c46838b0a9 100644 --- a/src/mame/drivers/goldstar.cpp +++ b/src/mame/drivers/goldstar.cpp @@ -8621,8 +8621,8 @@ static const gfx_layout cm97_layout32 = }; static GFXDECODE_START( gfx_cm97 ) - GFXDECODE_ENTRY( "gfx", 0, cm97_layout, 0x0, 32 ) - GFXDECODE_ENTRY( "gfx", 0, cm97_layout32, 0x0, 32 ) + GFXDECODE_ENTRY( "gfx", 0, cm97_layout, 0x0, 32 ) + GFXDECODE_ENTRY( "gfx", 0x20000, cm97_layout32, 0x0, 32 ) GFXDECODE_END diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp index c4ae4be0222..51e421b98a5 100644 --- a/src/mame/drivers/royalmah.cpp +++ b/src/mame/drivers/royalmah.cpp @@ -130,7 +130,8 @@ public: m_soundlatch(*this, "soundlatch"), m_mainbank(*this, "mainbank"), m_mainopbank(*this, "mainopbank"), - m_decrypted_opcodes(*this, "decrypted_opcodes") + m_decrypted_opcodes(*this, "decrypted_opcodes"), + m_mainview(*this, "mainview") { } void mjdiplob(machine_config &config); @@ -236,20 +237,11 @@ private: void janptr96_coin_counter_w(uint8_t data); void mjifb_coin_counter_w(uint8_t data); - uint8_t mjifb_rom_io_r(offs_t offset); - void mjifb_rom_io_w(offs_t offset, uint8_t data); - uint8_t mjifb_p3_r(); - uint8_t mjifb_p5_r(); - uint8_t mjifb_p6_r(); - uint8_t mjifb_p7_r(); uint8_t mjifb_p8_r(); void mjifb_p3_w(uint8_t data); void mjifb_p4_w(uint8_t data); void mjifb_p8_w(uint8_t data); - uint8_t mjdejavu_rom_io_r(offs_t offset); - void mjdejavu_rom_io_w(offs_t offset, uint8_t data); - uint8_t mjtensin_p3_r(); void mjtensin_p4_w(uint8_t data); void mjtensin_6ff3_w(uint8_t data); @@ -330,6 +322,7 @@ private: optional_memory_bank m_mainbank; optional_memory_bank m_mainopbank; optional_shared_ptr m_decrypted_opcodes; + memory_view m_mainview; // used by most games uint8_t m_input_port_select; @@ -352,8 +345,6 @@ private: uint8_t m_gfxdata1; uint8_t m_jansou_colortable[16]; - uint8_t m_mjifb_rom_enable; - void mjtensin_update_rombank(); void cafetime_update_rombank(); }; @@ -1171,77 +1162,24 @@ void royalmah_state::mjifb_coin_counter_w(uint8_t data) machine().bookkeeping().coin_counter_w(1,data & 1); // out } -uint8_t royalmah_state::mjifb_rom_io_r(offs_t offset) -{ - if (m_mjifb_rom_enable) - return ((uint8_t*)(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x4000))[offset]; - - offset += 0x8000; - - switch(offset) - { - case 0x8000: return ioport("DSW4")->read(); // dsw 4 - case 0x8200: return ioport("DSW3")->read(); // dsw 3 - case 0x9001: return m_ay->data_r(); // inputs - case 0x9011: return ioport("SYSTEM")->read(); - } - - logerror("%04X: unmapped input read at %04X\n", m_maincpu->pc(), offset); - return 0xff; -} - -void royalmah_state::mjifb_rom_io_w(offs_t offset, uint8_t data) -{ - if (m_mjifb_rom_enable) - { - m_videoram[offset] = data; - return; - } - - offset += 0x8000; - - switch(offset) - { - case 0x8e00: m_palette_base = data & 0x1f; return; - case 0x9002: m_ay->data_w(data); return; - case 0x9003: m_ay->address_w(data); return; - case 0x9010: - mjifb_coin_counter_w(data); - return; - case 0x9011: input_port_select_w(data); return; - case 0x9013: -// if (data) popmessage("%02x",data); - return; - } - - logerror("%04X: unmapped input write at %04X = %02X\n", m_maincpu->pc(), offset,data); -} - void royalmah_state::mjifb_map(address_map &map) { map(0x0000, 0x6fff).rom(); map(0x7000, 0x7fff).ram().share("nvram"); - map(0x8000, 0xffff).writeonly().share("videoram"); - map(0x8000, 0xbfff).rw(FUNC(royalmah_state::mjifb_rom_io_r), FUNC(royalmah_state::mjifb_rom_io_w)); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0x8000, 0xbfff).view(m_mainview); + m_mainview[0](0x8000, 0x8000).portr("DSW4"); + m_mainview[0](0x8200, 0x8200).portr("DSW3"); + m_mainview[0](0x8e00, 0x8e00).lw8(NAME([this] (uint8_t data) { m_palette_base = data & 0x1f; })); + m_mainview[0](0x9001, 0x9001).r(m_ay, FUNC(ay8910_device::data_r)); + m_mainview[0](0x9002, 0x9002).w(m_ay, FUNC(ay8910_device::data_w)); + m_mainview[0](0x9003, 0x9003).w(m_ay, FUNC(ay8910_device::address_w)); + m_mainview[0](0x9010, 0x9010).w(FUNC(royalmah_state::mjifb_coin_counter_w)); + m_mainview[0](0x9011, 0x9011).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w)); + m_mainview[1](0x8000, 0xbfff).bankr(m_mainbank).lw8(NAME([this] (offs_t offset, uint8_t data) { m_videoram[offset] = data; })); map(0xc000, 0xffff).rom(); } -uint8_t royalmah_state::mjifb_p3_r() -{ - return ioport("PORT3_5")->read() >> 6; -} -uint8_t royalmah_state::mjifb_p5_r() -{ - return ioport("PORT3_5")->read(); -} -uint8_t royalmah_state::mjifb_p6_r() -{ - return ioport("PORT6_7")->read(); -} -uint8_t royalmah_state::mjifb_p7_r() -{ - return ioport("PORT6_7")->read() >> 4; -} uint8_t royalmah_state::mjifb_p8_r() { return 0xff; @@ -1250,14 +1188,16 @@ uint8_t royalmah_state::mjifb_p8_r() void royalmah_state::mjifb_p3_w(uint8_t data) { m_rombank = (m_rombank & 0x0f) | ((data & 0x0c) << 2); + m_mainbank->set_entry(m_rombank); } void royalmah_state::mjifb_p4_w(uint8_t data) { m_rombank = (m_rombank & 0xf0) | (data & 0x0f); + m_mainbank->set_entry(m_rombank); } void royalmah_state::mjifb_p8_w(uint8_t data) { - m_mjifb_rom_enable = (data & 0x08); + m_mainview.select(BIT(data, 3)); } @@ -1265,55 +1205,21 @@ void royalmah_state::mjifb_p8_w(uint8_t data) Mahjong Shinkirou Deja Vu ****************************************************************************/ -uint8_t royalmah_state::mjdejavu_rom_io_r(offs_t offset) -{ - if (m_mjifb_rom_enable) - return ((uint8_t*)(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x4000))[offset]; - - offset += 0x8000; - - switch(offset) - { - case 0x8000: return ioport("DSW2")->read(); // dsw 2 - case 0x8001: return ioport("DSW1")->read(); // dsw 1 - case 0x9001: return m_ay->data_r(); // inputs - case 0x9011: return ioport("SYSTEM")->read(); - } - - logerror("%04X: unmapped input read at %04X\n", m_maincpu->pc(), offset); - return 0xff; -} - -void royalmah_state::mjdejavu_rom_io_w(offs_t offset, uint8_t data) -{ - if (m_mjifb_rom_enable) - { - m_videoram[offset] = data; - return; - } - - offset += 0x8000; - switch(offset) - { - case 0x8802: m_palette_base = data & 0x1f; return; - case 0x9002: m_ay->data_w(data); return; - case 0x9003: m_ay->address_w(data); return; - case 0x9010: janptr96_coin_counter_w(data); return; - case 0x9011: input_port_select_w(data); return; - case 0x9013: -// if (data) popmessage("%02x",data); - return; - } - - logerror("%04X: unmapped input write at %04X = %02X\n", m_maincpu->pc(), offset,data); -} - void royalmah_state::mjdejavu_map(address_map &map) { map(0x0000, 0x6fff).rom(); map(0x7000, 0x7fff).ram().share("nvram"); - map(0x8000, 0xffff).writeonly().share("videoram"); - map(0x8000, 0xbfff).rw(FUNC(royalmah_state::mjdejavu_rom_io_r), FUNC(royalmah_state::mjdejavu_rom_io_w)); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0x8000, 0xbfff).view(m_mainview); + m_mainview[0](0x8000, 0x8000).portr("DSW2"); + m_mainview[0](0x8001, 0x8001).portr("DSW1"); + m_mainview[0](0x8802, 0x8802).lw8(NAME([this] (uint8_t data) { m_palette_base = data & 0x1f; })); + m_mainview[0](0x9001, 0x9001).r(m_ay, FUNC(ay8910_device::data_r)); + m_mainview[0](0x9002, 0x9002).w(m_ay, FUNC(ay8910_device::data_w)); + m_mainview[0](0x9003, 0x9003).w(m_ay, FUNC(ay8910_device::address_w)); + m_mainview[0](0x9010, 0x9010).w(FUNC(royalmah_state::janptr96_coin_counter_w)); + m_mainview[0](0x9011, 0x9011).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w)); + m_mainview[1](0x8000, 0xbfff).bankr(m_mainbank).lw8(NAME([this] (offs_t offset, uint8_t data) { m_videoram[offset] = data; })); map(0xc000, 0xffff).rom(); } @@ -3883,12 +3789,12 @@ void royalmah_state::mjifb(machine_config &config) mjderngr(config); tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, 8000000)); /* ? */ tmp.set_addrmap(AS_PROGRAM, &royalmah_state::mjifb_map); - tmp.port_read<3>().set(FUNC(royalmah_state::mjifb_p3_r)); + tmp.port_read<3>().set_ioport("PORT3_5").rshift(6); tmp.port_write<3>().set(FUNC(royalmah_state::mjifb_p3_w)); tmp.port_write<4>().set(FUNC(royalmah_state::mjifb_p4_w)); - tmp.port_read<5>().set(FUNC(royalmah_state::mjifb_p5_r)); - tmp.port_read<6>().set(FUNC(royalmah_state::mjifb_p6_r)); - tmp.port_read<7>().set(FUNC(royalmah_state::mjifb_p7_r)); + tmp.port_read<5>().set_ioport("PORT3_5"); + tmp.port_read<6>().set_ioport("PORT6_7"); + tmp.port_read<7>().set_ioport("PORT6_7").rshift(4); tmp.port_read<8>().set(FUNC(royalmah_state::mjifb_p8_r)); tmp.port_write<8>().set(FUNC(royalmah_state::mjifb_p8_w)); @@ -3903,12 +3809,12 @@ void royalmah_state::mjdejavu(machine_config &config) mjderngr(config); tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, 8000000)); /* ? */ tmp.set_addrmap(AS_PROGRAM, &royalmah_state::mjdejavu_map); - tmp.port_read<3>().set(FUNC(royalmah_state::mjifb_p3_r)); + tmp.port_read<3>().set_ioport("PORT3_5").rshift(6); tmp.port_write<3>().set(FUNC(royalmah_state::mjifb_p3_w)); tmp.port_write<4>().set(FUNC(royalmah_state::mjifb_p4_w)); - tmp.port_read<5>().set(FUNC(royalmah_state::mjifb_p5_r)); - tmp.port_read<6>().set(FUNC(royalmah_state::mjifb_p6_r)); - tmp.port_read<7>().set(FUNC(royalmah_state::mjifb_p7_r)); + tmp.port_read<5>().set_ioport("PORT3_5"); + tmp.port_read<6>().set_ioport("PORT6_7"); + tmp.port_read<7>().set_ioport("PORT6_7").rshift(4); tmp.port_read<8>().set(FUNC(royalmah_state::mjifb_p8_r)); tmp.port_write<8>().set(FUNC(royalmah_state::mjifb_p8_w)); @@ -5454,7 +5360,7 @@ void royalmah_state::init_jongshin() void royalmah_state::init_mjifb() { - save_item(NAME(m_mjifb_rom_enable)); + m_mainbank->configure_entries(0, 256, memregion("maincpu")->base() + 0x10000, 0x4000); } void royalmah_state::init_tontonb() -- cgit v1.2.3