mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
bus/nes: Enable menu access for a Contra/22-in-1 combo cart.
This commit is contained in:
parent
14c82e93d6
commit
528c36e9c7
@ -78461,14 +78461,14 @@ be better to redump them properly. -->
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</software>
|
||||||
|
|
||||||
<software name="mc_22rb" supported="partial">
|
<software name="mc_22rb">
|
||||||
<description>22 in 1 (Reset Based)</description>
|
<description>22 in 1 (Reset Based)</description>
|
||||||
<year>19??</year>
|
<year>19??</year>
|
||||||
<publisher><pirate></publisher>
|
<publisher><pirate></publisher>
|
||||||
|
<info name="usage" value="Press reset to use multigame menu."/>
|
||||||
<part name="cart" interface="nes_cart">
|
<part name="cart" interface="nes_cart">
|
||||||
<feature name="slot" value="bmc_22games" />
|
<feature name="slot" value="bmc_22games" />
|
||||||
<feature name="pcb" value="BMC-22GAMES" />
|
<feature name="pcb" value="BMC-22GAMES" />
|
||||||
<feature name="mirroring" value="vertical" />
|
|
||||||
<dataarea name="prg" size="655360">
|
<dataarea name="prg" size="655360">
|
||||||
<rom name="22 in 1 (reset based).prg" size="655360" crc="03fdefad" sha1="4e84be9a20c5e385ae71c466a02613d5a74de01e" offset="00000" status="baddump" />
|
<rom name="22 in 1 (reset based).prg" size="655360" crc="03fdefad" sha1="4e84be9a20c5e385ae71c466a02613d5a74de01e" offset="00000" status="baddump" />
|
||||||
</dataarea>
|
</dataarea>
|
||||||
|
@ -301,8 +301,8 @@ nes_bmc_ball11_device::nes_bmc_ball11_device(const machine_config &mconfig, cons
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
nes_bmc_22games_device::nes_bmc_22games_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
nes_bmc_22games_device::nes_bmc_22games_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||||
: nes_nrom_device(mconfig, NES_BMC_22GAMES, tag, owner, clock)
|
: nes_nrom_device(mconfig, NES_BMC_22GAMES, tag, owner, clock), m_latch(0), m_reset(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -851,14 +851,25 @@ void nes_bmc_ball11_device::pcb_reset()
|
|||||||
void nes_bmc_22games_device::device_start()
|
void nes_bmc_22games_device::device_start()
|
||||||
{
|
{
|
||||||
common_start();
|
common_start();
|
||||||
|
save_item(NAME(m_latch));
|
||||||
|
save_item(NAME(m_reset));
|
||||||
}
|
}
|
||||||
|
|
||||||
void nes_bmc_22games_device::pcb_reset()
|
void nes_bmc_22games_device::pcb_reset()
|
||||||
{
|
{
|
||||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
if (m_reset)
|
||||||
prg16_89ab(0);
|
{
|
||||||
prg16_cdef(7);
|
prg32(4);
|
||||||
chr8(0, m_chr_source);
|
m_latch = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prg16_89ab(0);
|
||||||
|
prg16_cdef(7);
|
||||||
|
set_nt_mirroring(PPU_MIRROR_VERT);
|
||||||
|
m_reset = 1;
|
||||||
|
}
|
||||||
|
chr8(0, CHRRAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nes_bmc_64y2k_device::device_start()
|
void nes_bmc_64y2k_device::device_start()
|
||||||
@ -2278,37 +2289,33 @@ void nes_bmc_ball11_device::write_h(offs_t offset, u8 data)
|
|||||||
BMC-22GAMES
|
BMC-22GAMES
|
||||||
|
|
||||||
Unknown Bootleg Multigame Board
|
Unknown Bootleg Multigame Board
|
||||||
Games: 22 in 1
|
Games: Contra/22 in 1 combo
|
||||||
|
|
||||||
iNES: mapper 230
|
iNES: mapper 230
|
||||||
|
|
||||||
In MESS: Partially Supported. It would need a reset
|
In MAME: Supported.
|
||||||
to work (not possible yet)
|
|
||||||
|
TODO: Determine whether reset works as written or
|
||||||
|
whether it toggles between Contra and the game menu.
|
||||||
|
Reset to Contra from the menu or other games often
|
||||||
|
fails due to RAM contents it seems.
|
||||||
|
|
||||||
-------------------------------------------------*/
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void nes_bmc_22games_device::write_h(offs_t offset, uint8_t data)
|
void nes_bmc_22games_device::write_h(offs_t offset, u8 data)
|
||||||
{
|
{
|
||||||
LOG_MMC(("bmc_22games write_h, offset: %04x, data: %02x\n", offset, data));
|
LOG_MMC(("bmc_22games write_h, offset: %04x, data: %02x\n", offset, data));
|
||||||
|
|
||||||
if (1) // this should flip at reset
|
if (m_latch)
|
||||||
{
|
{
|
||||||
prg16_89ab(data & 0x07);
|
u8 bank = (data & 0x1f) + 8;
|
||||||
}
|
u8 mode = !BIT(data, 5);
|
||||||
else
|
prg16_89ab(bank & ~mode);
|
||||||
{
|
prg16_cdef(bank | mode);
|
||||||
if (data & 0x20)
|
|
||||||
{
|
|
||||||
prg16_89ab((data & 0x1f) + 8);
|
|
||||||
prg16_cdef((data & 0x1f) + 8);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
prg16_89ab((data & 0x1f) + 8);
|
|
||||||
prg16_cdef((data & 0x1f) + 9);
|
|
||||||
}
|
|
||||||
set_nt_mirroring(BIT(data, 6) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
|
set_nt_mirroring(BIT(data, 6) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
prg16_89ab(data & 0x07);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------
|
/*-------------------------------------------------
|
||||||
|
@ -675,15 +675,18 @@ class nes_bmc_22games_device : public nes_nrom_device
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
nes_bmc_22games_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
nes_bmc_22games_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 write_h(offs_t offset, u8 data) override;
|
||||||
|
|
||||||
virtual void pcb_reset() override;
|
virtual void pcb_reset() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_latch, m_reset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user