Merge pull request #8437 from 0kmg/nes-mappers-212,217

bus/nes: More multicart fixes.
This commit is contained in:
ajrhacker 2021-08-13 19:12:14 -04:00 committed by GitHub
commit ee0fe3ee35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 88 additions and 50 deletions

View File

@ -78386,7 +78386,7 @@ be better to redump them properly. -->
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_hik300" /> <!-- header gives 212, but is it correct? -->
<feature name="slot" value="bmc_hik300" />
<feature name="pcb" value="BMC-SUPERHIK-300IN1" />
<dataarea name="chr" size="65536">
<rom name="200-in-1 (unchained melody)[p1].chr" size="65536" crc="aa97eff7" sha1="68ffcb379e3c3ad44b0b5ea4df47118c811d9d0d" offset="00000" status="baddump" />
@ -78397,13 +78397,13 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_2kum" supported="no">
<software name="mc_2kum">
<description>2000 in 1 (No Splash, No Rev, Alt Mapper)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_gc6in1" /> <!-- header gives 217, but is it correct? -->
<feature name="pcb" value="BMC-GOLDENCARD-6IN1" />
<feature name="slot" value="bmc_500in1" />
<feature name="mirroring" value="vertical" />
<dataarea name="chr" size="65536">
<rom name="2000-in-1 (no splash, no rev, alt mapper)[p1].chr" size="65536" crc="4a0611c1" sha1="8a1869ce3aff1c34a743c9cc3f22f01df5be2c77" offset="00000" status="baddump" />
</dataarea>
@ -78478,13 +78478,13 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_255" supported="no">
<software name="mc_255">
<description>255 in 1</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_64in1" />
<feature name="pcb" value="BMC-64IN1" /> <!-- header says mapper 204, but it's not correct -->
<feature name="slot" value="bmc_500in1" />
<feature name="mirroring" value="vertical" />
<dataarea name="chr" size="32768">
<rom name="255-in-1 (duck hunt 100 to mario j 515).chr" size="32768" crc="f7096ccd" sha1="85f40ddc03af4e2824e742c18d20efe4fa5da325" offset="00000" status="baddump" />
</dataarea>
@ -78955,13 +78955,15 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_4fg">
<!-- Like many unlicensed games the 3 zapper games do not work. -->
<software name="mc_4fg" supported="partial">
<description>Super 4-in-1 Fantasy Gun</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_hik300" />
<feature name="pcb" value="BMC-SUPERHIK-300IN1" />
<feature name="peripheral" value="zapper" />
<dataarea name="chr" size="65536">
<rom name="super 4-in-1 fantasy gun [p1].chr" size="65536" crc="5516b3f9" sha1="bdbfef593273dd442aeaf38bb6c9b6dd80384c10" offset="00000" status="baddump" />
</dataarea>
@ -79629,13 +79631,13 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_500" supported="no">
<software name="mc_500">
<description>500 in 1</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! -->
<feature name="pcb" value="BMC-SUPERHIK-300IN1" />
<feature name="slot" value="bmc_500in1" />
<feature name="mirroring" value="vertical" />
<dataarea name="chr" size="65536">
<rom name="500-in-1 (anim splash, no rev, alt mapper)[p1].chr" size="65536" crc="25bdd64a" sha1="1f95eaf20fec9058b6917aa47dbdcec4b7a5b87d" offset="00000" status="baddump" />
</dataarea>
@ -79645,13 +79647,13 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_500a" supported="no">
<software name="mc_500a">
<description>500 in 1 (Alt)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! -->
<feature name="pcb" value="BMC-SUPERHIK-300IN1" />
<feature name="slot" value="bmc_500in1" />
<feature name="mirroring" value="vertical" />
<dataarea name="chr" size="65536">
<rom name="500-in-1 (static splash, no rev, alt mapper)[p1].chr" size="65536" crc="e7dacb8a" sha1="ece1b9c7fd8be955a1df6c8505533b4fac194eeb" offset="00000" status="baddump" />
</dataarea>
@ -80589,7 +80591,7 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_9999" supported="partial">
<software name="mc_9999">
<description>9999 in 1</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
@ -80605,7 +80607,7 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_9999a" supported="partial">
<software name="mc_9999a">
<description>9999 in 1 (Alt)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
@ -80621,7 +80623,7 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_9999b" supported="partial">
<software name="mc_9999b">
<description>9999 in 1 (Alt 2)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
@ -80637,12 +80639,12 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_9999c" supported="no">
<software name="mc_9999c">
<description>9999 in 1 (Anim. Splash, Rev 13)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_hik300" /> <!-- header gives 212, but is it correct? -->
<feature name="slot" value="bmc_hik300" />
<feature name="pcb" value="BMC-SUPERHIK-300IN1" />
<dataarea name="chr" size="65536">
<rom name="9999-in-1 (anim splash, rev 13)[p1].chr" size="65536" crc="9b6e8be7" sha1="4c53a3d5e510c4355041b9ad88f1e633ce85f916" offset="00000" status="baddump" />
@ -80669,13 +80671,13 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_9x7a" supported="no">
<software name="mc_9x7a">
<description>9999999 in 1 (Alt)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! -->
<feature name="pcb" value="BMC-SUPERHIK-300IN1" />
<feature name="slot" value="bmc_500in1" />
<feature name="mirroring" value="vertical" />
<dataarea name="chr" size="65536">
<rom name="9999999-in-1 (static splash, no rev, alt mapper)[p1].chr" size="65536" crc="25bdd64a" sha1="1f95eaf20fec9058b6917aa47dbdcec4b7a5b87d" offset="00000" status="baddump" />
</dataarea>

View File

@ -78,6 +78,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_76IN1, nes_bmc_76in1_device, "nes_bmc_76in1
DEFINE_DEVICE_TYPE(NES_BMC_110IN1, nes_bmc_110in1_device, "nes_bmc_110in1", "NES Cart BMC 110 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_150IN1, nes_bmc_150in1_device, "nes_bmc_150in1", "NES Cart BMC 150 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_190IN1, nes_bmc_190in1_device, "nes_bmc_190in1", "NES Cart BMC 190 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_500IN1, nes_bmc_500in1_device, "nes_bmc_500in1", "NES Cart BMC 500 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_800IN1, nes_bmc_800in1_device, "nes_bmc_800in1", "NES Cart BMC 800 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_1200IN1, nes_bmc_1200in1_device, "nes_bmc_1200in1", "NES Cart BMC 1200 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_GOLD150, nes_bmc_gold150_device, "nes_bmc_gold150", "NES Cart BMC Golden 150 in 1 PCB")
@ -279,7 +280,7 @@ nes_bmc_8157_device::nes_bmc_8157_device(const machine_config &mconfig, const ch
{
}
nes_bmc_hik300_device::nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
nes_bmc_hik300_device::nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_HIK300, tag, owner, clock)
{
}
@ -364,6 +365,11 @@ nes_bmc_150in1_device::nes_bmc_150in1_device(const machine_config &mconfig, cons
{
}
nes_bmc_500in1_device::nes_bmc_500in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_500IN1, tag, owner, clock)
{
}
nes_bmc_800in1_device::nes_bmc_800in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_BMC_800IN1, tag, owner, clock), m_mode(0)
{
@ -802,16 +808,11 @@ void nes_bmc_8157_device::pcb_reset()
m_latch = 0;
}
void nes_bmc_hik300_device::device_start()
{
common_start();
}
void nes_bmc_hik300_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
prg32(0xff);
chr8(0xff, CHRROM);
prg16_89ab(0);
prg16_cdef(0);
chr8(0, CHRROM);
}
void nes_bmc_s700_device::device_start()
@ -2143,24 +2144,27 @@ u8 nes_bmc_8157_device::read_h(offs_t offset)
iNES: mapper 212
In MESS: Supported.
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_hik300_device::write_h(offs_t offset, uint8_t data)
u8 nes_bmc_hik300_device::read_m(offs_t offset)
{
LOG_MMC(("bmc_hik300 read_m, offset: %04x, data: %02x\n", offset));
return get_open_bus() | (!BIT(offset, 4) << 7); // some games have a protection MSB
}
void nes_bmc_hik300_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_hik300 write_h, offset: %04x, data: %02x\n", offset, data));
set_nt_mirroring(BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
chr8(offset, CHRROM);
u8 bank = offset & 0x07;
u8 mode = BIT(offset, 14);
prg16_89ab(bank & ~mode);
prg16_cdef(bank | mode);
if (offset < 0x4000)
{
prg16_89ab(offset);
prg16_cdef(offset);
}
else
prg32(offset >> 1);
chr8(bank, CHRROM);
set_nt_mirroring(BIT(offset, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
/*-------------------------------------------------
@ -2691,6 +2695,26 @@ void nes_bmc_150in1_device::write_h(offs_t offset, uint8_t data)
set_nt_mirroring(BIT(offset, 0) ? PPU_MIRROR_HORZ: PPU_MIRROR_VERT);
}
/*-------------------------------------------------
BMC-500IN1
Unknown Bootleg Multigame Board
Games: 500 in 1, 2000 in 1 Unchained Melody, etc
iNES: mapper 217
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_500in1_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc500in1 write_h, offset: %04x, data: %02x\n", offset, data));
prg32((offset >> 2) & 0x07);
chr8(offset & 0x07, CHRROM);
}
/*-------------------------------------------------
BMC-800IN1

View File

@ -606,15 +606,12 @@ class nes_bmc_hik300_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, uint8_t data) override;
virtual u8 read_m(offs_t offset) override;
virtual void write_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
};
@ -923,6 +920,18 @@ protected:
};
// ======================> nes_bmc_500in1_device
class nes_bmc_500in1_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_500in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, uint8_t data) override;
};
// ======================> nes_bmc_800in1_device
class nes_bmc_800in1_device : public nes_nrom_device
@ -1187,6 +1196,7 @@ DECLARE_DEVICE_TYPE(NES_BMC_76IN1, nes_bmc_76in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_110IN1, nes_bmc_110in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_150IN1, nes_bmc_150in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_190IN1, nes_bmc_190in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_500IN1, nes_bmc_500in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_800IN1, nes_bmc_800in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_1200IN1, nes_bmc_1200in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_GOLD150, nes_bmc_gold150_device)

View File

@ -406,6 +406,7 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("bmc_110in1", NES_BMC_110IN1);
device.option_add_internal("bmc_150in1", NES_BMC_150IN1);
device.option_add_internal("bmc_190in1", NES_BMC_190IN1);
device.option_add_internal("bmc_500in1", NES_BMC_500IN1);
device.option_add_internal("bmc_800in1", NES_BMC_800IN1); // mapper 236?
device.option_add_internal("bmc_1200in1", NES_BMC_1200IN1);
device.option_add_internal("bmc_gold150", NES_BMC_GOLD150); // mapper 235 with 2M PRG

View File

@ -250,7 +250,7 @@ static const nes_mmc mmc_list[] =
{ 214, BMC_SUPERGUN_20IN1 },
{ 215, SUPERGAME_BOOGERMAN },
{ 216, RCM_GS2015 },
{ 217, BMC_GOLDENCARD_6IN1 },
{ 217, BMC_500IN1 },
{ 218, NOCASH_NOCHR },
// 219 UNL-A9746 (according to Cah4e3's code, no dump available (yet)
// 220 Unused - reserved for emulator debugging

View File

@ -287,6 +287,7 @@ static const nes_pcb pcb_list[] =
{ "bmc_110in1", BMC_110IN1 },
{ "bmc_150in1", BMC_150IN1 },
{ "bmc_190in1", BMC_190IN1 },
{ "bmc_500in1", BMC_500IN1 },
{ "bmc_800in1", BMC_800IN1 },
{ "bmc_1200in1", BMC_1200IN1 },
{ "bmc_2751", BMC_2751 },

View File

@ -94,7 +94,7 @@ enum
BMC_8IN1, BMC_15IN1, BMC_SUPERHIK_300IN1, BMC_SUPERGUN_20IN1,
BMC_GOLDENCARD_6IN1, BMC_72IN1, BMC_SUPER_42IN1, BMC_76IN1,
BMC_31IN1, BMC_22GAMES, BMC_20IN1, BMC_110IN1,
BMC_70IN1, BMC_800IN1, BMC_1200IN1,
BMC_70IN1, BMC_500IN1, BMC_800IN1, BMC_1200IN1,
BMC_GKA, BMC_GKB, BMC_VT5201, BMC_BENSHIENG,
BMC_60311C, BMC_80013B, BMC_810544C, BMC_830425C,
BMC_NTD_03, BMC_G63IN1, BMC_FCGENJIN_8IN1, BMC_FK23C, BMC_FK23CA,