bus/nes: Fixed Powerful 255 in 1 and added its parent. (#8404)

New working software list additions (nes.xml)
-----------------------------------
Powerful 250 in 1 [NewRisingSun]

Software list items promoted to working (nes.xml)
---------------------------------------
Powerful 255 in 1
This commit is contained in:
0kmg 2021-08-07 18:04:31 -08:00 committed by GitHub
parent 782810b4d9
commit 9ff9ced022
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 116 additions and 105 deletions

View File

@ -80951,13 +80951,31 @@ to check why this is different -->
</part>
</software>
<software name="mc_pw255" supported="no">
<software name="mc_pw250">
<description>Powerful 250 in 1</description>
<year>1991</year>
<publisher>NTDEC</publisher>
<info name="alt_title" value="Golden 250"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_th22913" />
<feature name="pcb_model" value="TH2291-3" />
<dataarea name="prg" size="3145728">
<rom name="powerful 255-in-1.prg" size="3145728" crc="4bf3227c" sha1="5407fba6bf00ff7ac3af249ba4f5607e4fb15a01" status="baddump" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
</part>
</software>
<!-- This seems to be a bootleg of the above multi-bootleg cart. -->
<software name="mc_pw255" cloneof="mc_pw250">
<description>Powerful 255 in 1</description>
<year>19??</year>
<year>199?</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_power255" />
<feature name="pcb" value="BMC-POWERFUL-255" /> <!-- Mapper 63 -->
<feature name="slot" value="bmc_th22913" />
<feature name="pcb_model" value="CH-011" />
<dataarea name="prg" size="3145728">
<rom name="powerful 255-in-1.prg" size="3145728" crc="41a14986" sha1="afee7b75d43e322cd18f382688fe6f2d9a294988" offset="00000" status="baddump" />
</dataarea>

View File

@ -79,7 +79,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_800IN1, nes_bmc_800in1_device, "nes_bmc_800in
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_CH001, nes_bmc_ch001_device, "nes_bmc_ch001", "NES Cart BMC CH-001 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_SUPER22, nes_bmc_super22_device, "nes_bmc_super22", "NES Cart BMC Super 22 Games PCB")
DEFINE_DEVICE_TYPE(NES_BMC_4IN1RESET, nes_bmc_4in1reset_device, "nes_bmc_4in1reset", "NES Cart BMC 4 in 1 (Reset Based) PCB")
DEFINE_DEVICE_TYPE(NES_BMC_42IN1RESET, nes_bmc_42in1reset_device, "nes_bmc_42in1reset", "NES Cart BMC 42 in 1 (Reset Based) PCB")
@ -341,11 +341,6 @@ nes_bmc_gold260_device::nes_bmc_gold260_device(const machine_config &mconfig, co
{
}
nes_bmc_ch001_device::nes_bmc_ch001_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_BMC_CH001, tag, owner, clock), m_latch(0)
{
}
nes_bmc_super22_device::nes_bmc_super22_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_BMC_SUPER22, tag, owner, clock)
{
@ -366,6 +361,16 @@ nes_bmc_lc160_device::nes_bmc_lc160_device(const machine_config &mconfig, const
{
}
nes_vram_protect_device::nes_vram_protect_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, type, tag, owner, clock), m_vram_protect(false)
{
}
nes_bmc_th22913_device::nes_bmc_th22913_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_vram_protect_device(mconfig, NES_BMC_TH22913, tag, owner, clock)
{
}
@ -1050,21 +1055,6 @@ void nes_bmc_gold260_device::pcb_reset()
chr8(0, m_chr_source);
}
void nes_bmc_ch001_device::device_start()
{
common_start();
save_item(NAME(m_latch));
}
void nes_bmc_ch001_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
prg32(0);
chr8(0, m_chr_source);
m_latch = 0;
}
void nes_bmc_super22_device::device_start()
{
common_start();
@ -1115,6 +1105,25 @@ void nes_bmc_42in1reset_device::pcb_reset()
m_reg[1] = 0;
}
void nes_vram_protect_device::device_start()
{
common_start();
save_item(NAME(m_vram_protect));
}
void nes_vram_protect_device::pcb_reset()
{
chr8(0, CHRRAM);
m_vram_protect = false;
}
void nes_bmc_th22913_device::pcb_reset()
{
nes_vram_protect_device::pcb_reset();
prg16_89ab(0);
prg16_cdef(0);
}
@ -2783,59 +2792,6 @@ uint8_t nes_bmc_gold150_device::read_h(offs_t offset)
return hi_access_rom(offset);
}
/*-------------------------------------------------
BMC-POWERFUL-255
Unknown Bootleg Multigame Board
Games:
iNES: mapper 63
In MESS: Preliminary Supported.
-------------------------------------------------*/
void nes_bmc_ch001_device::write_h(offs_t offset, uint8_t data)
{
int bank = ((offset >> 1) & 0x1fc);
LOG_MMC(("bmc_ch001 write_h, offset: %04x, data: %02x\n", offset, data));
m_latch = ((offset & 0x300) == 0x300);
set_nt_mirroring(BIT(offset, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
if (offset & 2)
{
prg8_89(bank + 0);
prg8_ab(bank + 1);
prg8_cd(bank + 2);
prg8_ef(bank + 3);
}
else
{
bank |= (offset & 4) >> 1;
prg8_89(bank + 0);
prg8_ab(bank + 1);
prg8_cd(bank + 0);
prg8_ef(bank + 1);
}
if (offset & 0x800) // in this case, the last 8KB bank is switched differently...
prg8_ef((offset & 0x07c ) | ((offset & 0x6) ? 0x3 : 0x1));
}
uint8_t nes_bmc_ch001_device::read_h(offs_t offset)
{
LOG_MMC(("bmc_ch001 read_h, offset: %04x\n", offset));
if (m_latch && offset < 0x4000) // open bus
return get_open_bus();
else
return hi_access_rom(offset);
}
/*-------------------------------------------------
BMC-SUPER22GAMES
@ -2950,3 +2906,28 @@ void nes_bmc_lc160_device::write_h(offs_t offset, u8 data)
set_nt_mirroring(BIT(offset, 0) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
}
}
/*-------------------------------------------------
BMC-TH2291-3, BMC-CH-011
Games: Powerful 250 in 1, Powerful 255 in 1
iNES: mapper 63
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_th22913_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_th22913 write_h, offset: %04x, data: %02x\n", offset, data));
u8 bank = offset >> 2;
u8 mode = BIT(offset, 1);
prg16_89ab(bank & ~mode);
prg16_cdef(bank | mode);
set_nt_mirroring(BIT(offset, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
m_vram_protect = BIT(offset, 10);
}

View File

@ -986,28 +986,6 @@ protected:
};
// ======================> nes_bmc_ch001_device
class nes_bmc_ch001_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_ch001_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_super22_device
class nes_bmc_super22_device : public nes_nrom_device
@ -1079,6 +1057,40 @@ public:
};
// ======================> nes_vram_protect_device
class nes_vram_protect_device : public nes_nrom_device
{
public:
virtual void chr_w(offs_t offset, u8 data) override { if (!m_vram_protect) device_nes_cart_interface::chr_w(offset, data); }
virtual void pcb_reset() override;
protected:
// construction/destruction
nes_vram_protect_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
// device-level overrides
virtual void device_start() override;
bool m_vram_protect;
};
// ======================> nes_bmc_th22913_device
class nes_bmc_th22913_device : public nes_vram_protect_device
{
public:
// construction/destruction
nes_bmc_th22913_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
};
// device type definition
DECLARE_DEVICE_TYPE(NES_ACTION52, nes_action52_device)
DECLARE_DEVICE_TYPE(NES_CALTRON6IN1, nes_caltron6in1_device)
@ -1131,10 +1143,10 @@ 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_CH001, nes_bmc_ch001_device)
DECLARE_DEVICE_TYPE(NES_BMC_SUPER22, nes_bmc_super22_device)
DECLARE_DEVICE_TYPE(NES_BMC_4IN1RESET, nes_bmc_4in1reset_device)
DECLARE_DEVICE_TYPE(NES_BMC_42IN1RESET, nes_bmc_42in1reset_device)
DECLARE_DEVICE_TYPE(NES_BMC_LC160, nes_bmc_lc160_device)
DECLARE_DEVICE_TYPE(NES_BMC_TH22913, nes_bmc_th22913_device)
#endif // MAME_BUS_NES_MULTIGAME_H

View File

@ -403,7 +403,7 @@ void nes_cart(device_slot_interface &device)
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_power255", NES_BMC_CH001); // mapper 63?
device.option_add_internal("bmc_th22913", NES_BMC_TH22913); // mapper 63
device.option_add_internal("bmc_s22games", NES_BMC_SUPER22); // mapper 233
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 226? or 233?

View File

@ -95,7 +95,7 @@ static const nes_mmc mmc_list[] =
{ 60, BMC_4IN1RESET },
{ 61, RCM_TF9IN1 },
{ 62, BMC_SUPER_700IN1 },
{ 63, BMC_CH001 }, // Powerful 255
{ 63, BMC_TH22913 }, // Powerful 250/255
{ 64, TENGEN_800032 },
{ 65, IREM_H3001 },
{ 66, STD_GXROM },

View File

@ -303,7 +303,7 @@ static const nes_pcb pcb_list[] =
{ "pjoy84", BMC_PJOY84 },
{ "bmc_gold150", BMC_GOLD150 },
{ "bmc_gold260", BMC_GOLD260 },
{ "bmc_power255", BMC_CH001 },
{ "bmc_th22913", BMC_TH22913 },
{ "bmc_s22games", BMC_SUPER22 },
{ "bmc_reset4", BMC_4IN1RESET },
{ "bmc_reset42", BMC_42IN1RESET },

View File

@ -97,7 +97,7 @@ enum
BMC_70IN1, BMC_800IN1, BMC_1200IN1,
BMC_GKA, BMC_GKB, BMC_VT5201, BMC_BENSHIENG, BMC_80013B, BMC_810544C,
BMC_NTD_03, BMC_G63IN1, BMC_FCGENJIN_8IN1, BMC_FK23C, BMC_FK23CA,
BMC_PJOY84, BMC_POWERFUL_255, BMC_11160, BMC_G146,
BMC_PJOY84, BMC_TH22913, BMC_11160, BMC_G146,
BMC_2751, BMC_8157, BMC_830118C, BMC_841101C,
BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_CH001, BMC_SUPER22,
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160,