bus/nes: Improved 830118C multicarts, all menu items now load. (#8682)

New working software list additions (nes.xml)
-----------------------------------
1994 New Series Red Pig 7 in 1 (EW-002) [anonymous]
1994 Super HiK 7 in 1 (M-026) [anonymous]
1994 Super HiK 7 in 1 (M-027) [anonymous]

Software list items promoted to working (nes.xml)
---------------------------------------
7 in 1 (M-022)
This commit is contained in:
0kmg 2021-10-10 16:05:35 -08:00 committed by GitHub
parent 72d35e07c8
commit 3988b5c368
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 43 deletions

View File

@ -81386,6 +81386,22 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_7ew2">
<description>1994 New Series Red Pig 7 in 1 (EW-002)</description>
<year>1994</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_830118c" />
<feature name="pcb" value="BMC-830118C" />
<dataarea name="prg" size="524288">
<rom name="1994 new series red pig 7-in-1 (ew-002).prg" size="524288" crc="31620c48" sha1="92b4fa687e69dcc2cd75e458ec38c5ed6ff623cf" status="baddump" />
</dataarea>
<dataarea name="chr" size="524288">
<rom name="1994 new series red pig 7-in-1 (ew-002).chr" size="524288" crc="b6d9b8e7" sha1="28bde7b0ef3d7aeb8cb6f02dbdab89a7b8554a51" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_7k603">
<description>7 in 1 (K7603)</description>
<year>19??</year>
@ -81402,7 +81418,8 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_7m22" supported="no">
<!-- Guevara crashes after beating the first boss. Bad dump or bug on cartridge? -->
<software name="mc_7m22">
<description>7 in 1 (M-022)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
@ -81418,6 +81435,38 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_7m26">
<description>1994 Super HiK 7 in 1 (M-026)</description>
<year>1994</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_830118c" />
<feature name="pcb" value="BMC-830118C" />
<dataarea name="prg" size="524288">
<rom name="1994 super hik 7-in-1 (m-026).prg" size="524288" crc="53588417" sha1="bb8354c11e7d3110bd95d1e149bb11c0f35ed455" status="baddump" />
</dataarea>
<dataarea name="chr" size="524288">
<rom name="1994 super hik 7-in-1 (m-026).chr" size="524288" crc="186291b1" sha1="26b70492774419f51d55c2d23cf9f84bc0fbf7b5" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_7m27">
<description>1994 Super HiK 7 in 1 (M-027)</description>
<year>1994</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_830118c" />
<feature name="pcb" value="BMC-830118C" />
<dataarea name="prg" size="524288">
<rom name="1994 super hik 7-in-1 (m-027).prg" size="524288" crc="8c1523d8" sha1="884b3b675612136fcc5e0fcff0274812d2015566" status="baddump" />
</dataarea>
<dataarea name="chr" size="524288">
<rom name="1994 super hik 7-in-1 (m-027).chr" size="524288" crc="70f633d3" sha1="8ce05af67cd35062b2039c16f90b4f1e3cef8716" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_7" supported="no">
<description>7 in 1</description>
<year>19??</year>

View File

@ -384,8 +384,8 @@ nes_bmc_820720c_device::nes_bmc_820720c_device(const machine_config &mconfig, co
{
}
nes_bmc_830118c_device::nes_bmc_830118c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_txrom_device(mconfig, NES_BMC_830118C, tag, owner, clock), m_reg(0)
nes_bmc_830118c_device::nes_bmc_830118c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_txrom_device(mconfig, NES_BMC_830118C, tag, owner, clock)
{
}
@ -911,18 +911,10 @@ void nes_bmc_820720c_device::pcb_reset()
mmc3_common_initialize(0x0f, 0xff, 0);
}
void nes_bmc_830118c_device::device_start()
{
mmc3_start();
save_item(NAME(m_reg));
}
void nes_bmc_830118c_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
m_reg = 0;
mmc3_common_initialize(0x7f, 0x7f, 0);
mmc3_common_initialize(0x0f, 0x7f, 0);
}
void nes_bmc_830832c_device::pcb_reset()
@ -3212,46 +3204,44 @@ void nes_bmc_820720c_device::write_h(offs_t offset, u8 data)
BMC-830118C
Games: 7 in 1 (EW-002, M-022, M-026, M-027)
MMC3 clone
MMC3 clone with banking for multigame menu.
NES 2.0: mapper 348
In MESS: Very Preliminary Support
In MAME: Preliminary supported.
TODO: Only M-022 seems to reliably soft reset to the
menu for all games. The other three carts are hit or
miss. MMC3 games in particular are not likely to
reset to the menu. Investigate further...
-------------------------------------------------*/
void nes_bmc_830118c_device::prg_cb(int start, int bank)
{
if ((m_reg & 0x0c) != 0x0c)
prg8_x(start, (bank & 0x0f) | ((m_reg & 0x0c) << 2));
else
if (m_prg_base == 0x30)
{
if (start == 0)
if (start <= 1)
{
prg8_89((bank & 0x0f) | ((m_reg & 0x0c) << 2));
prg8_ab((bank & 0x0f) | 0x20);
}
else if (start == 2)
{
prg8_cd((bank & 0x0f) | ((m_reg & 0x0c) << 2));
prg8_ef((bank & 0x0f) | 0x20);
prg8_x(start, bank & ~2);
prg8_x(start + 2, bank | 2);
}
}
else
nes_txrom_device::prg_cb(start, bank);
}
void nes_bmc_830118c_device::chr_cb(int start, int bank, int source)
{
chr1_x(start, (bank & 0x7f) | ((m_reg & 0x0c) << 5), source);
}
void nes_bmc_830118c_device::write_m(offs_t offset, uint8_t data)
void nes_bmc_830118c_device::write_m(offs_t offset, u8 data)
{
LOG_MMC(("bmc_830118c write_m, offset: %04x, data: %02x\n", offset, data));
if (offset >= 0x800 && offset < 0x900)
if ((m_wram_protect & 0xc0) == 0x80)
{
m_reg = data;
m_prg_base = (data & 0x0c) << 2;
set_prg(m_prg_base, m_prg_mask);
m_chr_base = m_prg_base << 3;
set_chr(m_chr_source, m_chr_base, m_chr_mask);
}
}

View File

@ -954,20 +954,12 @@ class nes_bmc_830118c_device : public nes_txrom_device
{
public:
// construction/destruction
nes_bmc_830118c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
nes_bmc_830118c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_m(offs_t offset, uint8_t data) override;
virtual void write_m(offs_t offset, u8 data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
uint8_t m_reg;
};