mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
bus/nes: Correct and consolidate Golden Game multicart emulation. (#9511)
New working software list additions (nes.xml) ----------------------------------- 1500 in 1 [MLX] Golden Game: 210 in 1 [kmg] Software list items promoted to working (nes.xml) --------------------------------------- Golden Game: 150 in 1 [kmg] Golden Game: 260 in 1 [kmg]
This commit is contained in:
parent
143ea62682
commit
6c3bdae448
102
hash/nes.xml
102
hash/nes.xml
@ -80950,22 +80950,6 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_150a" supported="no">
|
||||
<description>150 in 1 (Alt Games)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_gold150" />
|
||||
<feature name="pcb" value="BMC-GOLDENGAME-150IN1" />
|
||||
<dataarea name="prg" size="2097152">
|
||||
<rom name="150-in-1 [a1][p1].prg" size="2097152" crc="6175b9a0" sha1="4692a622af6a3d79514bf3e5fb4e9fbe6c6080fc" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_150b">
|
||||
<description>150 in 1 (Alt Games 2)</description>
|
||||
<year>19??</year>
|
||||
@ -81181,6 +81165,22 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_1500">
|
||||
<description>1500 in 1</description>
|
||||
<year>199?</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_gold260" />
|
||||
<dataarea name="prg" size="2097152">
|
||||
<rom name="1500-in-1.prg0" size="1048576" crc="80cbcacb" sha1="e56abbcb89d787c494fdcfd98fcdacb18192da2b" offset="0x000000" />
|
||||
<rom name="1500-in-1.prg1" size="1048576" crc="eb5db3e9" sha1="04b7859a93a2cd1f58cd385ce914c5a2aefd580b" offset="0x100000" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_1994">
|
||||
<description>1994 Super HIK 14 in 1 (G-136)</description>
|
||||
<year>19??</year>
|
||||
@ -81619,22 +81619,6 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_260" supported="no">
|
||||
<description>260 in 1</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_gold260" />
|
||||
<feature name="pcb" value="BMC-GOLDENGAME-260IN1" />
|
||||
<dataarea name="prg" size="4194304">
|
||||
<rom name="260-in-1 [p1].prg" size="4194304" crc="df81364d" sha1="012fd90b213454b76608e018e70f89f1e166dc82" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_295" supported="partial">
|
||||
<description>295 in 1</description>
|
||||
<year>19??</year>
|
||||
@ -84703,6 +84687,60 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_gg150" cloneof="mc_gg260">
|
||||
<description>Golden Game: 150 in 1</description>
|
||||
<year>199?</year>
|
||||
<publisher>RCM Group</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_gold260" />
|
||||
<dataarea name="prg" size="4194304">
|
||||
<rom name="150-in-1.prg0" size="1048576" crc="80cbcacb" sha1="e56abbcb89d787c494fdcfd98fcdacb18192da2b" offset="0x000000" />
|
||||
<rom value="0xff" size="1048576" offset="0x100000" loadflag="fill" />
|
||||
<rom name="150-in-1.prg2" size="1048576" crc="29a72554" sha1="ca83413aca58b53c8632e4f71b430926b9e277ae" offset="0x200000" />
|
||||
<rom value="0xff" size="1048576" offset="0x300000" loadflag="fill" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_gg210" cloneof="mc_gg260">
|
||||
<description>Golden Game: 210 in 1</description>
|
||||
<year>199?</year>
|
||||
<publisher>RCM Group</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_gold260" />
|
||||
<dataarea name="prg" size="4194304">
|
||||
<rom name="210-in-1.prg0" size="1048576" crc="80cbcacb" sha1="e56abbcb89d787c494fdcfd98fcdacb18192da2b" offset="0x000000" />
|
||||
<rom value="0xff" size="1048576" offset="0x100000" loadflag="fill" />
|
||||
<rom name="210-in-1.prg2" size="1048576" crc="0e73328f" sha1="4820b6d710f93075214442974c5c95c68d230e00" offset="0x200000" />
|
||||
<rom value="0xff" size="1048576" offset="0x300000" loadflag="fill" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_gg260">
|
||||
<description>Golden Game: 260 in 1</description>
|
||||
<year>199?</year>
|
||||
<publisher>RCM Group</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_gold260" />
|
||||
<dataarea name="prg" size="4194304">
|
||||
<rom name="260-in-1.prg0" size="1048576" crc="80cbcacb" sha1="e56abbcb89d787c494fdcfd98fcdacb18192da2b" offset="0x000000" />
|
||||
<rom value="0xff" size="1048576" offset="0x100000" loadflag="fill" />
|
||||
<rom name="260-in-1.prg2" size="1048576" crc="0e73328f" sha1="4820b6d710f93075214442974c5c95c68d230e00" offset="0x200000" />
|
||||
<rom name="260-in-1.prg3" size="1048576" crc="29a72554" sha1="ca83413aca58b53c8632e4f71b430926b9e277ae" offset="0x300000" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Pokemon Green has broken graphics. It looks like the same issue that affects many Chinese games. -->
|
||||
<software name="mc_king4" supported="partial">
|
||||
<description>King Series Super 4 in 1 (K4M03)</description>
|
||||
|
@ -97,8 +97,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_190IN1, nes_bmc_190in1_device, "nes_bmc_190in
|
||||
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")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_GOLD260, nes_bmc_gold260_device, "nes_bmc_gold260", "NES Cart BMC Golden 260 in 1 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_GOLD260, nes_bmc_gold260_device, "nes_bmc_gold260", "NES Cart BMC Golden Game X in 1 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_TH22913, nes_bmc_th22913_device, "nes_bmc_th22913", "NES Cart BMC TH2291-3 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_82AB, nes_bmc_82ab_device, "nes_bmc_82ab", "NES Cart BMC 82AB PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_4IN1RESET, nes_bmc_4in1reset_device, "nes_bmc_4in1reset", "NES Cart BMC 4 in 1 (Reset Based) PCB")
|
||||
@ -437,12 +436,7 @@ nes_bmc_1200in1_device::nes_bmc_1200in1_device(const machine_config &mconfig, co
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_gold150_device::nes_bmc_gold150_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_BMC_GOLD150, tag, owner, clock), m_latch(0)
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_gold260_device::nes_bmc_gold260_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
nes_bmc_gold260_device::nes_bmc_gold260_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_nrom_device(mconfig, NES_BMC_GOLD260, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
@ -1125,33 +1119,6 @@ void nes_bmc_1200in1_device::pcb_reset()
|
||||
m_vram_protect = 0;
|
||||
}
|
||||
|
||||
void nes_bmc_gold150_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_latch));
|
||||
}
|
||||
|
||||
void nes_bmc_gold150_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg32(0);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
m_latch = 0;
|
||||
}
|
||||
|
||||
void nes_bmc_gold260_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
}
|
||||
|
||||
void nes_bmc_gold260_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg32(0);
|
||||
chr8(0, m_chr_source);
|
||||
}
|
||||
|
||||
// This PCB is fully emulated here :)
|
||||
void nes_bmc_4in1reset_device::device_start()
|
||||
{
|
||||
@ -3174,88 +3141,32 @@ void nes_bmc_1200in1_device::write_h(offs_t offset, uint8_t data)
|
||||
set_nt_mirroring(BIT(offset, 1) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-GOLDEN260IN1
|
||||
|
||||
Unknown Bootleg Multigame Board
|
||||
Games:
|
||||
Games: Golden Game 150 in 1, Golden Game 210 in 1,
|
||||
Golden Game 260 in 1, 1500 in 1
|
||||
|
||||
iNES: mapper 235
|
||||
|
||||
In MESS: Preliminary Supported.
|
||||
In MAME: Supported.
|
||||
|
||||
TODO: Return open bus when ROM sockets are empty?
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_bmc_gold260_device::write_h(offs_t offset, uint8_t data)
|
||||
void nes_bmc_gold260_device::write_h(offs_t offset, u8 data)
|
||||
{
|
||||
int bank = (offset & 0x1f) | ((offset & 0x0300) >> 3);
|
||||
LOG_MMC(("bmc_gold260 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if (offset & 0x400)
|
||||
set_nt_mirroring(PPU_MIRROR_LOW);
|
||||
else
|
||||
set_nt_mirroring(BIT(offset, 13) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
u8 bank = bitswap<8>(offset, 9, 8, 4, 3, 2, 1, 0, 12);
|
||||
u8 mode = !BIT(offset, 11);
|
||||
prg16_89ab(bank & ~mode);
|
||||
prg16_cdef(bank | mode);
|
||||
|
||||
if (offset & 0x800)
|
||||
{
|
||||
bank = (bank << 1) | BIT(offset, 12);
|
||||
prg16_89ab(bank);
|
||||
prg16_cdef(bank);
|
||||
}
|
||||
else
|
||||
prg32(bank);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-GOLDEN150IN1
|
||||
|
||||
Unknown Bootleg Multigame Board
|
||||
Games:
|
||||
|
||||
iNES: mapper 235
|
||||
|
||||
Same as the above + open bus in 0x8000-0xffff when
|
||||
enabled
|
||||
|
||||
In MESS: Preliminary Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
|
||||
void nes_bmc_gold150_device::write_h(offs_t offset, uint8_t data)
|
||||
{
|
||||
int bank = (offset & 0x1f) | ((offset & 0x0200) >> 4);
|
||||
LOG_MMC(("bmc_gold150 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
m_latch = (offset & 0x0100);
|
||||
|
||||
if (offset & 0x400)
|
||||
set_nt_mirroring(PPU_MIRROR_LOW);
|
||||
else
|
||||
set_nt_mirroring(BIT(offset, 13) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
|
||||
if (offset & 0x800)
|
||||
{
|
||||
bank = (bank << 1) | BIT(offset, 12);
|
||||
prg16_89ab(bank);
|
||||
prg16_cdef(bank);
|
||||
}
|
||||
else
|
||||
prg32(bank);
|
||||
}
|
||||
|
||||
uint8_t nes_bmc_gold150_device::read_h(offs_t offset)
|
||||
{
|
||||
LOG_MMC(("bmc_gold150 read_h, offset: %04x\n", offset));
|
||||
|
||||
if (m_latch)
|
||||
return get_open_bus();
|
||||
else
|
||||
return hi_access_rom(offset);
|
||||
set_nt_mirroring(BIT(offset, 10) ? PPU_MIRROR_LOW : BIT(offset, 13) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
@ -1072,43 +1072,15 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_gold150_device
|
||||
|
||||
class nes_bmc_gold150_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_bmc_gold150_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual uint8_t read_h(offs_t offset) override;
|
||||
virtual void write_h(offs_t offset, uint8_t data) override;
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
uint8_t m_latch;
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_gold260_device
|
||||
|
||||
class nes_bmc_gold260_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_bmc_gold260_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
nes_bmc_gold260_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 void pcb_reset() override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void write_h(offs_t offset, u8 data) override;
|
||||
};
|
||||
|
||||
|
||||
@ -1413,7 +1385,6 @@ 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)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_GOLD260, nes_bmc_gold260_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_4IN1RESET, nes_bmc_4in1reset_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_42IN1RESET, nes_bmc_42in1reset_device)
|
||||
|
@ -441,8 +441,7 @@ void nes_cart(device_slot_interface &device)
|
||||
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
|
||||
device.option_add_internal("bmc_gold260", NES_BMC_GOLD260); // mapper 235 with 4M PRG
|
||||
device.option_add_internal("bmc_gold260", NES_BMC_GOLD260); // mapper 235
|
||||
device.option_add_internal("bmc_th22913", NES_BMC_TH22913); // mapper 63
|
||||
device.option_add_internal("bmc_reset4", NES_BMC_4IN1RESET); // mapper 60 with 64k prg and 32k chr
|
||||
device.option_add_internal("bmc_reset42", NES_BMC_42IN1RESET); // mapper 233
|
||||
|
@ -268,7 +268,7 @@ static const nes_mmc mmc_list[] =
|
||||
{ 232, CAMERICA_BF9096 },
|
||||
{ 233, BMC_42IN1RESET },
|
||||
{ 234, AVE_MAXI15 },
|
||||
{ 235, BMC_GOLD150 }, // 235 Golden Game x-in-1 - Unsupported
|
||||
{ 235, BMC_GOLD260 }, // 235 Golden Game x-in-1 games
|
||||
{ 236, BMC_70IN1 },
|
||||
{ 237, BMC_TELETUBBIES },
|
||||
{ 238, UNL_603_5052 },
|
||||
|
@ -356,7 +356,6 @@ static const nes_pcb pcb_list[] =
|
||||
{ "bmc_yy841101c", BMC_YY841101C },
|
||||
{ "bmc_yy841155c", BMC_YY841155C },
|
||||
{ "pjoy84", BMC_PJOY84 },
|
||||
{ "bmc_gold150", BMC_GOLD150 },
|
||||
{ "bmc_gold260", BMC_GOLD260 },
|
||||
{ "bmc_th22913", BMC_TH22913 },
|
||||
{ "bmc_reset4", BMC_4IN1RESET },
|
||||
|
@ -95,7 +95,7 @@ enum
|
||||
BMC_72IN1, BMC_SUPER_42IN1, BMC_76IN1,
|
||||
BMC_31IN1, BMC_22GAMES, BMC_20IN1, BMC_5IN1_1993,
|
||||
BMC_70IN1, BMC_500IN1, BMC_800IN1, BMC_1200IN1,
|
||||
BMC_GKA, BMC_GKB, BMC_GKCXIN1, BMC_GN91B,
|
||||
BMC_GKA, BMC_GKB, BMC_GKCXIN1, BMC_GN91B, BMC_GOLD260,
|
||||
BMC_HP898F, BMC_VT5201, BMC_BENSHIENG,
|
||||
BMC_CTC09, BMC_CTC_12IN1, BMC_60311C, BMC_80013B, BMC_810544C, BMC_82AB,
|
||||
BMC_830425C, BMC_830506C, BMC_830928C, BMC_850437C, BMC_891227, BMC_970630C,
|
||||
@ -106,7 +106,6 @@ enum
|
||||
BMC_2751, BMC_8157, BMC_00202650,
|
||||
BMC_411120C, BMC_810305C, BMC_820720C, BMC_830118C,
|
||||
BMC_830832C, BMC_YY841101C, BMC_YY841155C,
|
||||
BMC_GOLD150, BMC_GOLD260,
|
||||
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160,
|
||||
BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_K3071, BMC_SA005A,
|
||||
BMC_TF2740, BMC_TJ03, BMC_RESETSXROM, BMC_RESETTXROM, BMC_TECHLINE9IN1,
|
||||
|
@ -89,7 +89,6 @@ void nes_state::machine_start()
|
||||
BMC_800IN1,
|
||||
BMC_8157,
|
||||
BMC_970630C,
|
||||
BMC_GOLD150,
|
||||
BMC_KC885,
|
||||
BMC_TELETUBBIES,
|
||||
BMC_VT5201,
|
||||
|
Loading…
Reference in New Issue
Block a user