mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
Merge pull request #8559 from 0kmg/nes-mappers-297,374
bus/nes: Added support for MMC1-based multicarts.
This commit is contained in:
commit
bebc2c4917
78
hash/nes.xml
78
hash/nes.xml
@ -27662,7 +27662,8 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="opwolfj" cloneof="opwolf">
|
||||
<!-- Playable with joypad but zapper does not work -->
|
||||
<software name="opwolfj" cloneof="opwolf" supported="partial">
|
||||
<description>Operation Wolf (Jpn)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Taito</publisher>
|
||||
@ -27683,7 +27684,8 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="opwolfu" cloneof="opwolf">
|
||||
<!-- Playable with joypad but zapper does not work -->
|
||||
<software name="opwolfu" cloneof="opwolf" supported="partial">
|
||||
<description>Operation Wolf - Take no Prisoners (USA, Rev. 0A)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Taito</publisher>
|
||||
@ -27703,7 +27705,8 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="opwolf">
|
||||
<!-- Playable with joypad but zapper does not work -->
|
||||
<software name="opwolf" supported="partial">
|
||||
<description>Operation Wolf - Take no Prisoners (Euro)</description>
|
||||
<year>1992</year>
|
||||
<publisher>Taito</publisher>
|
||||
@ -49948,7 +49951,8 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spaceshd">
|
||||
<!-- The Bandai Hyper Shot controller/zapper for Space Shadow is not emulated -->
|
||||
<software name="spaceshd" supported="no">
|
||||
<description>Space Shadow (Jpn)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Bandai</publisher>
|
||||
@ -51850,6 +51854,38 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_4jy21">
|
||||
<description>1997 Super HiK 4 in 1 (JY-021)</description>
|
||||
<year>1997</year>
|
||||
<publisher>J.Y. Company</publisher>
|
||||
<info name="usage" value="Press reset to switch games."/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="resetsxrom" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="1997 super hik 4-in-1 (jy-021).prg" size="524288" crc="a609e2f0" sha1="27bfcd42d267cfa9a1d0bcbca1a6b0065a9352d9" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="chr" size="524288">
|
||||
<rom name="1997 super hik 4-in-1 (jy-021).chr" size="524288" crc="4a797d16" sha1="e7cf3951f727913aa94dd702e1d5c48e19976bb9" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_4jy22">
|
||||
<description>1995 Super HiK 4 in 1 (JY-022)</description>
|
||||
<year>1995</year>
|
||||
<publisher>J.Y. Company</publisher>
|
||||
<info name="usage" value="Press reset to switch games."/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="resetsxrom" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="1995 super hik 4-in-1 (jy-022).prg" size="524288" crc="22536920" sha1="64697df47dccdfc66609dc501c27ef321fcae9d5" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="chr" size="524288">
|
||||
<rom name="1995 super hik 4-in-1 (jy-022).chr" size="524288" crc="7e83958f" sha1="ce0d958db917d8fb648db34e85e79dbad515d9f2" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_4jy23">
|
||||
<description>1995 Super HiK 4 in 1 (JY-023)</description>
|
||||
<year>1995</year>
|
||||
@ -52019,6 +52055,23 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Helicopter sprite in Cobra Command is corrupt in one of its two frames of animation. This is in CHR data. Either it's a bad dump or an error introduced by bootleggers. -->
|
||||
<software name="mc_4jy51">
|
||||
<description>1996 Super HiK 4 in 1 (JY-051)</description>
|
||||
<year>1996</year>
|
||||
<publisher>J.Y. Company</publisher>
|
||||
<info name="usage" value="Press reset to switch games."/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="resetsxrom" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="1996 super hik 4-in-1 (jy-051).prg" size="524288" crc="c936c92b" sha1="f0f66c30b06e980659dd757724ffe4fad5e01494" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="chr" size="524288">
|
||||
<rom name="1996 super hik 4-in-1 (jy-051).chr" size="524288" crc="20303ae8" sha1="3a7fa6feb1b2083987357db9fdf0222d76e2b964" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_4jy57">
|
||||
<description>1996 Super HiK 4 in 1 (JY-057)</description>
|
||||
<year>1996</year>
|
||||
@ -54488,6 +54541,23 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- The Bandai Hyper Shot controller/zapper for Space Shadow is not emulated. Operation Wolf currently only works with joypad but not zapper. -->
|
||||
<software name="2uzilght" supported="partial">
|
||||
<description>2 in 1 Uzi Lightgun</description>
|
||||
<year>199?</year>
|
||||
<publisher>Micro Genius</publisher>
|
||||
<info name="serial" value="MGC-002"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_22110" />
|
||||
<dataarea name="prg" size="262144">
|
||||
<rom name="2-in-1 uzi lightgun (mgc-002).prg" size="262144" crc="7349c91a" sha1="00d0c7a423b9c8c18974022c619d9f3084c4fd8d" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="chr" size="262144">
|
||||
<rom name="2-in-1 uzi lightgun (mgc-002).chr" size="262144" crc="609035fd" sha1="309fddfd18f55d9d73fabfd0788bb8b92065c607" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Also verified on a Spanish cart by Gluk Video -->
|
||||
<software name="creatom">
|
||||
<description>Creatom (Tw, Spa)</description>
|
||||
|
@ -2830,6 +2830,8 @@ if (BUSES["NES"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/nes/legacy.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc1.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc1.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc1_clones.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc1_clones.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc2.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc2.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/mmc3.cpp",
|
||||
|
@ -13,6 +13,10 @@
|
||||
* 001 Yoshi flashes in-game.
|
||||
* 001 Back to the Future have heavily corrupted graphics (since forever).
|
||||
|
||||
TODO:
|
||||
- Combine 2 versions of set_prg in SxROM base class. This means dealing with
|
||||
variant boards SNROM, SUROM, etc which repurpose bits in the MMC1 regs.
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
|
||||
@ -142,6 +146,28 @@ TIMER_CALLBACK_MEMBER( nes_sxrom_device::resync_callback )
|
||||
}
|
||||
|
||||
|
||||
// Standard MMC1 PRG banking with base and mask (to support multicarts, etc)
|
||||
void nes_sxrom_device::set_prg(int prg_base, int prg_mask)
|
||||
{
|
||||
u8 bank = prg_base | (m_reg[3] & prg_mask);
|
||||
|
||||
switch ((m_reg[0] >> 2) & 3)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
prg32(bank >> 1);
|
||||
break;
|
||||
case 2:
|
||||
prg16_89ab(prg_base);
|
||||
prg16_cdef(bank);
|
||||
break;
|
||||
case 3:
|
||||
prg16_89ab(bank);
|
||||
prg16_cdef(prg_base | prg_mask);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nes_sxrom_device::set_prg()
|
||||
{
|
||||
uint8_t prg_mode, prg_offset;
|
||||
@ -177,17 +203,16 @@ void nes_sxrom_device::set_prg()
|
||||
}
|
||||
}
|
||||
|
||||
void nes_sxrom_device::set_chr()
|
||||
// Standard MMC1 CHR banking with base and mask (to support multicarts, etc)
|
||||
void nes_sxrom_device::set_chr(int chr_base, int chr_mask)
|
||||
{
|
||||
uint8_t chr_mode = BIT(m_reg[0], 4);
|
||||
|
||||
if (chr_mode)
|
||||
if (BIT(m_reg[0], 4))
|
||||
{
|
||||
chr4_0(m_reg[1] & 0x1f, m_chr_source);
|
||||
chr4_4(m_reg[2] & 0x1f, m_chr_source);
|
||||
chr4_0(chr_base | (m_reg[1] & chr_mask), m_chr_source);
|
||||
chr4_4(chr_base | (m_reg[2] & chr_mask), m_chr_source);
|
||||
}
|
||||
else
|
||||
chr8((m_reg[1] & 0x1f) >> 1, m_chr_source);
|
||||
chr8((chr_base | (m_reg[1] & chr_mask)) >> 1, m_chr_source);
|
||||
}
|
||||
|
||||
// this allows for easier implementation of the NES-EVENT board used for Nintento World Championships
|
||||
|
@ -31,8 +31,11 @@ protected:
|
||||
TIMER_CALLBACK_MEMBER(resync_callback);
|
||||
|
||||
virtual void update_regs(int reg); // this is needed to simplify NES-EVENT pcb implementation, which handle differently some regs!
|
||||
void set_prg(int prg_base, int prg_mask);
|
||||
void set_chr(int chr_base, int chr_mask);
|
||||
virtual void set_prg();
|
||||
virtual void set_chr();
|
||||
// virtual void set_prg() { set_prg(0x00, 0x0f); }
|
||||
virtual void set_chr() { set_chr(0x00, 0x1f); }
|
||||
|
||||
uint8_t m_reg[4];
|
||||
int m_reg_write_enable;
|
||||
|
183
src/devices/bus/nes/mmc1_clones.cpp
Normal file
183
src/devices/bus/nes/mmc1_clones.cpp
Normal file
@ -0,0 +1,183 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders: kmg, Fabio Priuli
|
||||
/***********************************************************************************************************
|
||||
|
||||
|
||||
NES/Famicom cartridge emulation for MMC-1 clone PCBs
|
||||
|
||||
|
||||
Here we emulate several pirate PCBs based on MMC-1 boards
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "mmc1_clones.h"
|
||||
|
||||
|
||||
#ifdef NES_PCB_DEBUG
|
||||
#define VERBOSE 1
|
||||
#else
|
||||
#define VERBOSE 0
|
||||
#endif
|
||||
|
||||
#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
DEFINE_DEVICE_TYPE(NES_NINJARYU, nes_ninjaryu_device, "nes_ninjaryu", "NES Cart Ninja Ryukenden Chinese PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_RESETSXROM, nes_resetsxrom_device, "nes_resetsxrom", "NES Cart BMC RESET-SXROM PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_TXC_22110, nes_txc_22110_device, "nes_txc_22110", "NES Cart TXC 01-22110-000 PCB")
|
||||
|
||||
|
||||
nes_ninjaryu_device::nes_ninjaryu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_sxrom_device(mconfig, NES_NINJARYU, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
nes_resetsxrom_device::nes_resetsxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_sxrom_device(mconfig, NES_RESETSXROM, tag, owner, clock), m_reset_count(-1)
|
||||
{
|
||||
}
|
||||
|
||||
nes_txc_22110_device::nes_txc_22110_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_sxrom_device(mconfig, NES_TXC_22110, tag, owner, clock), m_latch0(0), m_mode(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
void nes_resetsxrom_device::device_start()
|
||||
{
|
||||
nes_sxrom_device::device_start();
|
||||
save_item(NAME(m_reset_count));
|
||||
}
|
||||
|
||||
void nes_resetsxrom_device::pcb_reset()
|
||||
{
|
||||
m_reset_count = (m_reset_count + 1) & 3;
|
||||
nes_sxrom_device::pcb_reset();
|
||||
}
|
||||
|
||||
void nes_txc_22110_device::device_start()
|
||||
{
|
||||
nes_sxrom_device::device_start();
|
||||
save_item(NAME(m_latch0));
|
||||
save_item(NAME(m_mode));
|
||||
}
|
||||
|
||||
void nes_txc_22110_device::pcb_reset()
|
||||
{
|
||||
nes_sxrom_device::pcb_reset();
|
||||
set_nt_mirroring(PPU_MIRROR_VERT);
|
||||
|
||||
m_latch0 = 0;
|
||||
m_mode = 0;
|
||||
update_banks();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
mapper specific handlers
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
UNL-NINJARYU
|
||||
|
||||
Games: Ninja Ryukenden Chinese
|
||||
|
||||
This board was previously assigned to mapper 111. It has
|
||||
registers akin to MMC1 but without the need to write to
|
||||
them serially. The one existing game has 256K CHR, so this
|
||||
must have at least 1 more bit for CHR banking. Other differences?
|
||||
|
||||
In MAME: Preliminary supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_ninjaryu_device::write_h(offs_t offset, u8 data)
|
||||
{
|
||||
LOG_MMC(("unl_ninjaryu write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
u8 reg = (offset >> 13) & 0x03;
|
||||
m_reg[reg] = data;
|
||||
update_regs(reg);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
MULTIGAME CARTS BASED ON MMC1
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-RESET-SXROM
|
||||
|
||||
Games: 4 in 1 (JY-021, JY-022, JY-051)
|
||||
|
||||
MMC1 clone with outer banks switched by resetting.
|
||||
|
||||
NES 2.0: mapper 374
|
||||
|
||||
In MAME: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
TXC 01-22110-000 Board
|
||||
|
||||
Games: 2 in 1 Uzi Lightgun (MGC-002)
|
||||
|
||||
This board has an MMC1 clone for Operation Wolf and
|
||||
otherwise is mostly compatible with mapper 70 for
|
||||
Bandai's Space Shadow.
|
||||
|
||||
NES 2.0: mapper 297
|
||||
|
||||
In MAME: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_txc_22110_device::update_banks() // used by menu and Space Shadow
|
||||
{
|
||||
u8 outer = (m_mode & 0x02) << 1;
|
||||
prg16_89ab(outer | (m_latch0 & 0x30) >> 4);
|
||||
prg16_cdef(outer | 3);
|
||||
chr8(m_latch0 & 0x0f, CHRROM);
|
||||
}
|
||||
|
||||
void nes_txc_22110_device::write_l(offs_t offset, u8 data)
|
||||
{
|
||||
LOG_MMC(("TXC 22110 write_l, offset: %04x, data: %02x\n", offset, data));
|
||||
if (offset < 0x100) // $4100 - $41ff
|
||||
{
|
||||
m_mode = data;
|
||||
if (m_mode & 1) // MMC1 mode
|
||||
{
|
||||
set_prg();
|
||||
set_chr();
|
||||
}
|
||||
else
|
||||
update_banks();
|
||||
}
|
||||
}
|
||||
|
||||
void nes_txc_22110_device::write_h(offs_t offset, u8 data)
|
||||
{
|
||||
LOG_MMC(("TXC 22110 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if (m_mode & 1)
|
||||
nes_sxrom_device::write_h(offset, data);
|
||||
else
|
||||
{
|
||||
m_latch0 = data;
|
||||
update_banks();
|
||||
}
|
||||
}
|
80
src/devices/bus/nes/mmc1_clones.h
Normal file
80
src/devices/bus/nes/mmc1_clones.h
Normal file
@ -0,0 +1,80 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders: kmg, Fabio Priuli
|
||||
#ifndef MAME_BUS_NES_MMC1_CLONES_H
|
||||
#define MAME_BUS_NES_MMC1_CLONES_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "mmc1.h"
|
||||
|
||||
|
||||
// ======================> nes_ninjaryu_device
|
||||
|
||||
class nes_ninjaryu_device : public nes_sxrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_ninjaryu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual void write_h(offs_t offset, u8 data) override;
|
||||
|
||||
protected:
|
||||
virtual void set_prg() override { nes_sxrom_device::set_prg(0x00, 0x0f); }
|
||||
virtual void set_chr() override { nes_sxrom_device::set_chr(0x00, 0x3f); }
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_resetsxrom_device
|
||||
|
||||
class nes_resetsxrom_device : public nes_sxrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_resetsxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
virtual void set_prg() override { nes_sxrom_device::set_prg(m_reset_count << 3, 0x07); }
|
||||
virtual void set_chr() override { nes_sxrom_device::set_chr(m_reset_count << 5, 0x1f); }
|
||||
|
||||
private:
|
||||
int m_reset_count;
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_txc_22110_device
|
||||
|
||||
class nes_txc_22110_device : public nes_sxrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_txc_22110_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual void write_l(offs_t offset, u8 data) 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;
|
||||
|
||||
virtual void set_prg() override { nes_sxrom_device::set_prg(0x08, 0x07); }
|
||||
virtual void set_chr() override { nes_sxrom_device::set_chr(0x20, 0x1f); }
|
||||
|
||||
private:
|
||||
void update_banks();
|
||||
u8 m_latch0, m_mode;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(NES_NINJARYU, nes_ninjaryu_device)
|
||||
DECLARE_DEVICE_TYPE(NES_RESETSXROM, nes_resetsxrom_device)
|
||||
DECLARE_DEVICE_TYPE(NES_TXC_22110, nes_txc_22110_device)
|
||||
|
||||
#endif // MAME_BUS_NES_MMC1_CLONES_H
|
@ -61,6 +61,7 @@
|
||||
#include "bootleg.h"
|
||||
#include "multigame.h"
|
||||
#include "pirate.h"
|
||||
#include "mmc1_clones.h"
|
||||
#include "mmc3_clones.h"
|
||||
|
||||
|
||||
@ -217,6 +218,7 @@ void nes_cart(device_slot_interface &device)
|
||||
device.option_add_internal("tengen_800008", NES_TENGEN_800008); // FIXME: Is this the same as CNROM?
|
||||
device.option_add_internal("tengen_800032", NES_TENGEN_800032);
|
||||
device.option_add_internal("tengen_800037", NES_TENGEN_800037);
|
||||
device.option_add_internal("txc_22110", NES_TXC_22110);
|
||||
device.option_add_internal("txc_22211", NES_TXC_22211);
|
||||
device.option_add_internal("txc_dumarc", NES_TXC_DUMARACING);
|
||||
device.option_add_internal("txc_mjblock", NES_TXC_MJBLOCK);
|
||||
@ -418,6 +420,7 @@ void nes_cart(device_slot_interface &device)
|
||||
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?
|
||||
device.option_add_internal("bmc_lc160", NES_BMC_LC160);
|
||||
device.option_add_internal("resetsxrom", NES_RESETSXROM);
|
||||
// misc multigame cart MMC3 clone boards
|
||||
device.option_add_internal("a88s1", NES_A88S1);
|
||||
device.option_add_internal("fcgj8in1", NES_FCGJ8IN1);
|
||||
|
@ -175,7 +175,7 @@ static const nes_mmc mmc_list[] =
|
||||
{ 139, SACHEN_8259C },
|
||||
{ 140, JALECO_JF11 },
|
||||
{ 141, SACHEN_8259A },
|
||||
{ 142, KAISER_KS7032},
|
||||
{ 142, KAISER_KS7032 },
|
||||
{ 143, SACHEN_TCA01 },
|
||||
{ 144, AGCI_50282 },
|
||||
{ 145, SACHEN_SA72007 },
|
||||
@ -195,8 +195,8 @@ static const nes_mmc mmc_list[] =
|
||||
{ 159, BANDAI_LZ93EX1 }, // with 24c01
|
||||
{ 160, SACHEN_SA009 },
|
||||
// 161 Unused
|
||||
{ 162, WAIXING_FS304}, // not confirmed, but a lot of chinese releases use it like this...
|
||||
{ 163, NANJING_BOARD},
|
||||
{ 162, WAIXING_FS304 }, // not confirmed, but a lot of chinese releases use it like this...
|
||||
{ 163, NANJING_BOARD },
|
||||
{ 164, WAIXING_FFV },
|
||||
{ 165, WAIXING_SH2 },
|
||||
{ 166, SUBOR_TYPE1 },
|
||||
@ -208,7 +208,7 @@ static const nes_mmc mmc_list[] =
|
||||
{ 172, TXC_DUMARACING },
|
||||
{ 173, TXC_MJBLOCK },
|
||||
{ 174, BMC_2751 },
|
||||
{ 175, KAISER_KS7022},
|
||||
{ 175, KAISER_KS7022 },
|
||||
{ 176, UNL_XIAOZY },
|
||||
{ 177, HENGG_SRICH },
|
||||
{ 178, WAIXING_SGZLZ },
|
||||
@ -332,7 +332,7 @@ static const nes_mmc mmc_list[] =
|
||||
// 294 variant of mapper 134?
|
||||
// 295 JY multicarts not yet in nes.xml
|
||||
// 296 VT3x handhelds
|
||||
// 297 2-in-1 Uzi Lightgun not in nes.xml
|
||||
{ 297, TXC_22110 }, // 2-in-1 Uzi Lightgun
|
||||
{ 298, UNL_TF1201 }, // Lethal Weapon (Enforcers) pirate
|
||||
{ 299, BMC_11160 },
|
||||
{ 300, BMC_190IN1 },
|
||||
@ -409,7 +409,7 @@ static const nes_mmc mmc_list[] =
|
||||
// 371 Spanish PEC-586 computer main cart
|
||||
// 372 Rockman 1-6 multicart very close to mapper 45
|
||||
// 373 Super 4-in-1, not in nes.xml?
|
||||
// 374 various JY multicarts
|
||||
{ 374, BMC_RESETSXROM },
|
||||
// 375 135-in-1 2MB multicart
|
||||
// 376 JY-041 multicart
|
||||
// 377 JY-111 multicart, similar to mapper 367
|
||||
|
@ -130,6 +130,7 @@ static const nes_pcb pcb_list[] =
|
||||
{ "tengen_800008", TENGEN_800008 }, /* FIXME: Is this the same as mapper 3? */
|
||||
{ "tengen_800032", TENGEN_800032 },
|
||||
{ "tengen_800037", TENGEN_800037 },
|
||||
{ "txc_22110", TXC_22110 },
|
||||
{ "txc_22211", TXC_22211 },
|
||||
{ "txc_dumarc", TXC_DUMARACING },
|
||||
{ "txc_mjblock", TXC_MJBLOCK },
|
||||
@ -302,6 +303,7 @@ static const nes_pcb pcb_list[] =
|
||||
{ "fk23c", BMC_FK23C },
|
||||
{ "fk23ca", BMC_FK23CA },
|
||||
{ "nt639", BMC_NT639 },
|
||||
{ "resetsxrom", BMC_RESETSXROM },
|
||||
{ "resettxrom0", BMC_RESETTXROM0 },
|
||||
{ "resettxrom1", BMC_RESETTXROM1 },
|
||||
{ "resettxrom2", BMC_RESETTXROM2 },
|
||||
|
@ -83,8 +83,8 @@ enum
|
||||
// Tengen
|
||||
TENGEN_800008, TENGEN_800032, TENGEN_800037,
|
||||
// TXC
|
||||
TXC_22211, TXC_DUMARACING, TXC_MJBLOCK,
|
||||
TXC_COMMANDOS, TXC_TW, TXC_STRIKEW,
|
||||
TXC_22110, TXC_22211, TXC_COMMANDOS, TXC_DUMARACING,
|
||||
TXC_MJBLOCK, TXC_STRIKEW, TXC_TW,
|
||||
// Multigame Carts
|
||||
BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_A88S1, BMC_F15, BMC_GN45,
|
||||
BMC_HIK8IN1, BMC_NOVEL1, BMC_NOVEL2, BMC_S24IN1SC03, BMC_T262,
|
||||
@ -104,7 +104,7 @@ enum
|
||||
BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_SUPER22,
|
||||
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160, BMC_CTC09,
|
||||
BMC_K1029, BMC_K3006, BMC_K3036, BMC_K3046, BMC_SA005A, BMC_TJ03,
|
||||
BMC_RESETTXROM0, BMC_RESETTXROM1, BMC_RESETTXROM2, BMC_TECHLINE9IN1,
|
||||
BMC_RESETSXROM, BMC_RESETTXROM0, BMC_RESETTXROM1, BMC_RESETTXROM2, BMC_TECHLINE9IN1,
|
||||
// Unlicensed
|
||||
UNL_8237, UNL_8237A, UNL_CC21, UNL_AX5705, UNL_KN42, UNL_KOF97,
|
||||
UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE,
|
||||
|
@ -49,7 +49,6 @@ DEFINE_DEVICE_TYPE(NES_WHERO, nes_whero_device, "nes_whero", "
|
||||
DEFINE_DEVICE_TYPE(NES_43272, nes_43272_device, "nes_43272", "NES Cart UNL-43272 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_TF1201, nes_tf1201_device, "nes_tf1201", "NES Cart UNL-TF1201 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_CITYFIGHT, nes_cityfight_device, "nes_cityfight", "NES Cart City Fighter PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_NINJARYU, nes_ninjaryu_device, "nes_ninjaryu", "NES Cart Ninja Ryukenden Chinese PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_EH8813A, nes_eh8813a_device, "nes_eh8813a", "NES Cart UNL-EH8813A PCB")
|
||||
|
||||
|
||||
@ -128,11 +127,6 @@ nes_cityfight_device::nes_cityfight_device(const machine_config &mconfig, const
|
||||
{
|
||||
}
|
||||
|
||||
nes_ninjaryu_device::nes_ninjaryu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_NINJARYU, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
nes_eh8813a_device::nes_eh8813a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_EH8813A, tag, owner, clock), m_dipsetting(0), m_latch(0)
|
||||
{
|
||||
@ -405,22 +399,6 @@ void nes_cityfight_device::pcb_reset()
|
||||
m_irq_count = 0;
|
||||
}
|
||||
|
||||
void nes_ninjaryu_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_ninjaryu_device::pcb_reset()
|
||||
{
|
||||
m_reg[0] = 0x0f;
|
||||
m_reg[1] = m_reg[2] = m_reg[3] = 0;
|
||||
|
||||
set_nt_mirroring(PPU_MIRROR_HORZ);
|
||||
update_prg();
|
||||
update_chr();
|
||||
}
|
||||
|
||||
void nes_eh8813a_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
@ -1256,80 +1234,6 @@ void nes_cityfight_device::write_h(offs_t offset, uint8_t data)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
UNL-NINJARYU
|
||||
|
||||
Games: Ninja Ryukenden Chinese
|
||||
|
||||
This board is mentioned on the NesDev page describing
|
||||
mapper 111, which used to be assigned to this. It has
|
||||
registers similar to MMC1 but without the need to write to
|
||||
them serially. The one existing game has 256K CHR, so this
|
||||
must have at least 1 more bit for CHR banking. Other differences?
|
||||
|
||||
In MAME: Preliminary supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_ninjaryu_device::update_prg()
|
||||
{
|
||||
if (!BIT(m_reg[0], 3))
|
||||
prg32((m_reg[3] >> 1) & 0x07); // 32K mode
|
||||
else if (BIT(m_reg[0], 2))
|
||||
{
|
||||
prg16_89ab(m_reg[3] & 0x0f);
|
||||
prg16_cdef(m_prg_chunks - 1); // 16K mode fixed last bank
|
||||
}
|
||||
else
|
||||
{
|
||||
prg16_89ab(0); // 16K mode fixed first bank
|
||||
prg16_cdef(m_reg[3] & 0x0f);
|
||||
}
|
||||
}
|
||||
|
||||
void nes_ninjaryu_device::update_chr()
|
||||
{
|
||||
if (BIT(m_reg[0], 4))
|
||||
{
|
||||
chr4_0(m_reg[1], CHRROM);
|
||||
chr4_4(m_reg[2], CHRROM);
|
||||
}
|
||||
else
|
||||
chr8(m_reg[1] >> 1, CHRROM);
|
||||
}
|
||||
|
||||
void nes_ninjaryu_device::write_h(offs_t offset, uint8_t data)
|
||||
{
|
||||
LOG_MMC(("unl_ninjaryu write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
m_reg[(offset >> 13) & 0x03] = data & 0x3f;
|
||||
|
||||
switch (offset & 0x6000)
|
||||
{
|
||||
case 0x0000:
|
||||
switch (data & 0x03)
|
||||
{
|
||||
case 0x00: set_nt_mirroring(PPU_MIRROR_LOW); break;
|
||||
case 0x01: set_nt_mirroring(PPU_MIRROR_HIGH); break;
|
||||
case 0x02: set_nt_mirroring(PPU_MIRROR_VERT); break;
|
||||
case 0x03: set_nt_mirroring(PPU_MIRROR_HORZ); break;
|
||||
}
|
||||
update_prg();
|
||||
update_chr();
|
||||
break;
|
||||
case 0x2000:
|
||||
case 0x4000:
|
||||
update_chr();
|
||||
break;
|
||||
case 0x6000:
|
||||
update_prg();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
UNL-EH8813A
|
||||
|
@ -343,29 +343,6 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_ninjaryu_device
|
||||
|
||||
class nes_ninjaryu_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_ninjaryu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t 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;
|
||||
|
||||
private:
|
||||
void update_prg();
|
||||
void update_chr();
|
||||
uint8_t m_reg[4];
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_eh8813a_device
|
||||
|
||||
class nes_eh8813a_device : public nes_nrom_device
|
||||
@ -429,7 +406,6 @@ DECLARE_DEVICE_TYPE(NES_WHERO, nes_whero_device)
|
||||
DECLARE_DEVICE_TYPE(NES_43272, nes_43272_device)
|
||||
DECLARE_DEVICE_TYPE(NES_TF1201, nes_tf1201_device)
|
||||
DECLARE_DEVICE_TYPE(NES_CITYFIGHT, nes_cityfight_device)
|
||||
DECLARE_DEVICE_TYPE(NES_NINJARYU, nes_ninjaryu_device)
|
||||
DECLARE_DEVICE_TYPE(NES_EH8813A, nes_eh8813a_device)
|
||||
//DECLARE_DEVICE_TYPE(NES_FUJIYA, nes_fujiya_device)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user