bus/nes: Updated code and dump for mc_mario. (#9686)
- Switched mc_mario to use BMC-GOLD-7IN1 board and removed emulation for variant BMC-MARIOPARTY-7IN1. Replaced its CHR ROM with bank swapped dump. - BMC-GOLD-7IN1: Fixed crash when carts with no WRAM are loaded.
This commit is contained in:
parent
26582b9f1a
commit
9d040f801d
12
hash/nes.xml
12
hash/nes.xml
@ -66990,7 +66990,7 @@ We don't include these hacks because they were not burned into real carts nor so
|
||||
<rom name="wukong douju.prg" size="262144" crc="8638454c" sha1="3c7c91c552104c9c24153c00fd603c740715ff51" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="chr" size="524288">
|
||||
<rom name="wukong douju.prg" size="524288" crc="72137bc5" sha1="1533ecf77b9bbc6864a2c62b463dfab34e017797" status="baddump" />
|
||||
<rom name="wukong douju.chr" size="524288" crc="72137bc5" sha1="1533ecf77b9bbc6864a2c62b463dfab34e017797" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge? -->
|
||||
<dataarea name="vram" size="8192">
|
||||
@ -85638,16 +85638,16 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- This dump is supposed to be bad: all other carts with the same PCB have switched CHR bank order, redump needed to check why this is different -->
|
||||
<!-- A dump with swapped 256K CHR pages exists (CRC f1310012). It's not clear if this has been properly redumped to determine which is the correct order. -->
|
||||
<software name="mc_mario">
|
||||
<description>Mario 7 in 1 (Bad Dump)</description>
|
||||
<description>Mario 7 in 1</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_mario7in1" />
|
||||
<feature name="pcb" value="BMC-MARIOPARTY-7IN1" />
|
||||
<feature name="slot" value="bmc_gold7in1" />
|
||||
<feature name="pcb" value="BMC-GOLD-7IN1" />
|
||||
<dataarea name="chr" size="1048576">
|
||||
<rom name="mario 7-in-1 [p1].chr" size="1048576" crc="f1310012" sha1="42378af64fc6356ec7d85b6e49b934287d2b6f15" offset="00000" status="baddump" />
|
||||
<rom name="mario 7-in-1 [p1].chr" size="1048576" crc="29fa219f" sha1="28a77600426a6be233717ec60b84e9eb8a4ba637" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="1048576">
|
||||
<rom name="mario 7-in-1 [p1].prg" size="1048576" crc="c021a8b9" sha1="4fe43bef9d9217881b7c8ece0007dc4cd830fbec" offset="00000" status="baddump" />
|
||||
|
@ -73,7 +73,6 @@ DEFINE_DEVICE_TYPE(NES_BMC_JY302, nes_bmc_jy302_device, "nes_bmc_jy302",
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_KC885, nes_bmc_kc885_device, "nes_bmc_kc885", "NES Cart BMC KC885 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_SFC12, nes_bmc_sfc12_device, "nes_bmc_sfc12", "NES Cart BMC SFC-12 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_HIK4, nes_bmc_hik4_device, "nes_bmc_hik4", "NES Cart BMC HIK 4 in 1 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_MARIO7IN1, nes_bmc_mario7in1_device, "nes_bmc_mario7in1", "NES Cart BMC Mario 7 in 1 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_F15, nes_bmc_f15_device, "nes_bmc_f15", "NES Cart BMC F-15 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_F600, nes_bmc_f600_device, "nes_bmc_f600", "NES Cart BMC F600 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_GN45, nes_bmc_gn45_device, "nes_bmc_gn45", "NES Cart BMC GN-45 PCB")
|
||||
@ -407,11 +406,6 @@ nes_bmc_hik4_device::nes_bmc_hik4_device(const machine_config &mconfig, const ch
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_mario7in1_device::nes_bmc_mario7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_txrom_device(mconfig, NES_BMC_MARIO7IN1, tag, owner, clock), m_reg_written(0)
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_f15_device::nes_bmc_f15_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_txrom_device(mconfig, NES_BMC_F15, tag, owner, clock)
|
||||
{
|
||||
@ -429,8 +423,8 @@ nes_bmc_gn45_device::nes_bmc_gn45_device(const machine_config &mconfig, const ch
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_gold7in1_device::nes_bmc_gold7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_txrom_device(mconfig, NES_BMC_GOLD7IN1, tag, owner, clock), m_reg_written(0)
|
||||
nes_bmc_gold7in1_device::nes_bmc_gold7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_txrom_device(mconfig, NES_BMC_GOLD7IN1, tag, owner, clock), m_lock(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -899,20 +893,6 @@ void nes_bmc_hik4_device::pcb_reset()
|
||||
mmc3_common_initialize(0x0f, 0x7f, 0);
|
||||
}
|
||||
|
||||
void nes_bmc_mario7in1_device::device_start()
|
||||
{
|
||||
mmc3_start();
|
||||
save_item(NAME(m_reg_written));
|
||||
}
|
||||
|
||||
void nes_bmc_mario7in1_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
|
||||
m_reg_written = 0;
|
||||
mmc3_common_initialize(0x1f, 0xff, 0);
|
||||
}
|
||||
|
||||
void nes_bmc_f15_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
@ -950,14 +930,12 @@ void nes_bmc_gn45_device::pcb_reset()
|
||||
void nes_bmc_gold7in1_device::device_start()
|
||||
{
|
||||
mmc3_start();
|
||||
save_item(NAME(m_reg_written));
|
||||
save_item(NAME(m_lock));
|
||||
}
|
||||
|
||||
void nes_bmc_gold7in1_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
|
||||
m_reg_written = 0;
|
||||
m_lock = false;
|
||||
mmc3_common_initialize(0x1f, 0xff, 0);
|
||||
}
|
||||
|
||||
@ -2886,47 +2864,6 @@ void nes_bmc_hik4_device::write_m(offs_t offset, u8 data)
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-MARIOPARTY-7IN1
|
||||
|
||||
Known Boards: Unknown Multigame Bootleg Board
|
||||
Games: Mario 7 in 1
|
||||
|
||||
MMC3 clone
|
||||
|
||||
iNES: mapper 52
|
||||
|
||||
In MESS: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_bmc_mario7in1_device::write_m(offs_t offset, uint8_t data)
|
||||
{
|
||||
uint8_t helper1, helper2;
|
||||
LOG_MMC(("bmc_mario7in1 write_m, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
/* mid writes only work when WRAM is enabled. not sure if I should
|
||||
change the condition to m_map52_reg_written == 0x80 (i.e. what is the effect of
|
||||
the read-only bit?) and it only can happen once! */
|
||||
if ((m_wram_protect & 0x80) && !m_reg_written)
|
||||
{
|
||||
helper1 = (data & 0x08);
|
||||
helper2 = (data & 0x40);
|
||||
|
||||
m_prg_base = helper1 ? ((data & 0x07) << 4) : ((data & 0x06) << 4);
|
||||
m_prg_mask = helper1 ? 0x0f : 0x1f;
|
||||
m_chr_base = ((data & 0x20) << 4) | ((data & 0x04) << 6) | (helper2 ? ((data & 0x10) << 3) : 0);
|
||||
m_chr_mask = helper2 ? 0x7f : 0xff;
|
||||
set_prg(m_prg_base, m_prg_mask);
|
||||
set_chr(m_chr_source, m_chr_base, m_chr_mask);
|
||||
|
||||
m_reg_written = 1;
|
||||
}
|
||||
else
|
||||
m_prgram[offset] = data;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-A88S-1
|
||||
@ -3152,36 +3089,34 @@ void nes_bmc_gn45_device::write_m(offs_t offset, u8 data)
|
||||
Known Boards: Unknown Multigame Bootleg Board
|
||||
Games: Super HIK Gold 7 in 1, Golden 7 in 1 and many more
|
||||
|
||||
MMC3 clone, same as BMC-MARIOPARTY-7IN1 but with switched CHR
|
||||
bank lines
|
||||
MMC3 clone with banking for multigame menu.
|
||||
|
||||
iNES: mapper 52
|
||||
|
||||
In MESS: Supported.
|
||||
In MAME: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_bmc_gold7in1_device::write_m(offs_t offset, uint8_t data)
|
||||
void nes_bmc_gold7in1_device::write_m(offs_t offset, u8 data)
|
||||
{
|
||||
uint8_t helper1, helper2;
|
||||
LOG_MMC(("bmc_gold7in1 write_m, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if ((m_wram_protect & 0x80) && !m_reg_written)
|
||||
if ((m_wram_protect & 0xc0) == 0x80 && !m_lock)
|
||||
{
|
||||
helper1 = (data & 0x08);
|
||||
helper2 = (data & 0x40);
|
||||
u8 prg128k = BIT(data, 3);
|
||||
u8 chr128k = BIT(data, 6);
|
||||
|
||||
m_prg_base = helper1 ? ((data & 0x07) << 4) : ((data & 0x06) << 4);
|
||||
m_prg_mask = helper1 ? 0x0f : 0x1f;
|
||||
m_chr_base = ((data & 0x20) << 3) | ((data & 0x04) << 7) | (helper2 ? ((data & 0x10) << 3) : 0);
|
||||
m_chr_mask = helper2 ? 0x7f : 0xff;
|
||||
m_prg_base = (data & (0x06 | prg128k)) << 4;
|
||||
m_prg_mask = 0x1f >> prg128k;
|
||||
m_chr_base = (bitswap<3>(data, 2, 5, 4) & (0x06 | chr128k)) << 7;
|
||||
m_chr_mask = 0xff >> chr128k;
|
||||
set_prg(m_prg_base, m_prg_mask);
|
||||
set_chr(m_chr_source, m_chr_base, m_chr_mask);
|
||||
|
||||
m_reg_written = BIT(data, 7); // mc_2hikg & mc_s3nt3 write here multiple time
|
||||
m_lock = BIT(data, 7); // mc_2hikg & mc_s3nt3 write here multiple time
|
||||
}
|
||||
else
|
||||
m_prgram[offset] = data;
|
||||
nes_txrom_device::write_m(offset, data); // write WRAM
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
@ -846,27 +846,6 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_mario7in1_device
|
||||
|
||||
class nes_bmc_mario7in1_device : public nes_txrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_bmc_mario7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void write_m(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_reg_written;
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_f15_device
|
||||
|
||||
class nes_bmc_f15_device : public nes_txrom_device
|
||||
@ -936,9 +915,9 @@ class nes_bmc_gold7in1_device : public nes_txrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_bmc_gold7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
nes_bmc_gold7in1_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 pcb_reset() override;
|
||||
|
||||
@ -947,7 +926,7 @@ protected:
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
uint8_t m_reg_written;
|
||||
bool m_lock;
|
||||
};
|
||||
|
||||
|
||||
@ -1266,7 +1245,6 @@ DECLARE_DEVICE_TYPE(NES_BMC_JY302, nes_bmc_jy302_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_KC885, nes_bmc_kc885_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_SFC12, nes_bmc_sfc12_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_HIK4, nes_bmc_hik4_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_MARIO7IN1, nes_bmc_mario7in1_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_F15, nes_bmc_f15_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_F600, nes_bmc_f600_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_GN45, nes_bmc_gn45_device)
|
||||
|
@ -474,7 +474,6 @@ void nes_cart(device_slot_interface &device)
|
||||
device.option_add_internal("bmc_kc885", NES_BMC_KC885);
|
||||
device.option_add_internal("bmc_sfc12", NES_BMC_SFC12);
|
||||
device.option_add_internal("bmc_hik4in1", NES_BMC_HIK4);
|
||||
device.option_add_internal("bmc_mario7in1", NES_BMC_MARIO7IN1);
|
||||
device.option_add_internal("bmc_f15", NES_BMC_F15);
|
||||
device.option_add_internal("bmc_f600", NES_BMC_F600);
|
||||
device.option_add_internal("bmc_gn45", NES_BMC_GN45);
|
||||
|
@ -1037,11 +1037,6 @@ void nes_cart_slot_device::call_load_ines()
|
||||
m_pcb_id = WAIXING_DQ8; // Mapper 242 is used for 2 diff boards
|
||||
break;
|
||||
|
||||
case BMC_GOLD_7IN1:
|
||||
if (crc_hack)
|
||||
m_pcb_id = BMC_MARIOPARTY_7IN1; // Mapper 52 is used for 2 diff boards
|
||||
break;
|
||||
|
||||
case BTL_MARIOBABY:
|
||||
if (crc_hack)
|
||||
m_pcb_id = BTL_AISENSHINICOL; // Mapper 42 is used for 2 diff boards
|
||||
@ -1328,11 +1323,6 @@ const char * nes_cart_slot_device::get_default_card_ines(get_default_card_softwa
|
||||
pcb_id = WAIXING_DQ8; // Mapper 242 is used for 2 diff boards
|
||||
break;
|
||||
|
||||
case BMC_GOLD_7IN1:
|
||||
if (crc_hack)
|
||||
pcb_id = BMC_MARIOPARTY_7IN1; // Mapper 52 is used for 2 diff boards
|
||||
break;
|
||||
|
||||
case BTL_MARIOBABY:
|
||||
if (crc_hack)
|
||||
pcb_id = BTL_AISENSHINICOL; // Mapper 42 is used for 2 diff boards
|
||||
|
@ -350,7 +350,6 @@ static const nes_pcb pcb_list[] =
|
||||
{ "bmc_kc885", BMC_KC885 },
|
||||
{ "bmc_sfc12", BMC_SFC12 },
|
||||
{ "bmc_hik4in1", BMC_SUPERHIK_4IN1 },
|
||||
{ "bmc_mario7in1", BMC_MARIOPARTY_7IN1 },
|
||||
{ "bmc_f15", BMC_F15 },
|
||||
{ "bmc_f600", BMC_F600 },
|
||||
{ "bmc_gn45", BMC_GN45 },
|
||||
|
@ -89,7 +89,7 @@ enum
|
||||
BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208, BMC_JY302, BMC_KC885, BMC_KL06,
|
||||
BMC_S24IN1SC03, BMC_T262, BMC_TELETUBBIES,
|
||||
BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1,
|
||||
BMC_MARIOPARTY_7IN1, BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646,
|
||||
BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646,
|
||||
BMC_36IN1, BMC_21IN1, BMC_150IN1, BMC_35IN1, BMC_64IN1,
|
||||
BMC_8IN1, BMC_15IN1, BMC_SUPERHIK_300IN1, BMC_SUPERGUN_20IN1,
|
||||
BMC_72IN1, BMC_SUPER_42IN1, BMC_76IN1,
|
||||
|
Loading…
Reference in New Issue
Block a user