bus/nes: Improved iNES mapper 108 support. (#8220)

* Refactored mapper 108 into 4 sibling devices and added hacks for detecting variants in loose software to the iNES loading code.
This commit is contained in:
0kmg 2021-07-08 06:55:25 -08:00 committed by GitHub
parent 40c6a80f6e
commit c9f914254c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 213 additions and 171 deletions

View File

@ -2316,7 +2316,7 @@ license:CC0
</hash>
<hash crc32="579e5bc5" sha1="6654bab6d46f3bffa0bc7b94f08a69fb59450f5f" name="Ai Senshi Nicol [p1]">
<extrainfo>42 0 8 16</extrainfo>
<extrainfo>42 129 8 16</extrainfo>
</hash>
<hash crc32="37f59450" sha1="1ba180792cd1560dbac295a7a0292b52f458ea0e" name="Aigiina no Yogen - From The Legend of Balubalouk (J)">

View File

@ -66544,7 +66544,7 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
<software name="bublbfds">
<description>Bubble Bobble (Asia, FDS conversion)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<publisher>Kaiser</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="ks7032" />
<feature name="pcb" value="UNL-KS7032" />
@ -66557,14 +66557,16 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
</part>
</software>
<!-- This has been hacked to run on a different hardware -->
<software name="bublbfdsa" cloneof="bublbfds" supported="partial">
<description>Bubble Bobble (Asia, FDS conversion, Alt PCB)</description>
<!-- This has been hacked to run on different hardware -->
<software name="bublbfdsa" cloneof="bublbfds">
<description>Bubble Bobble (Asia, FDS conversion, alt PCB)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<publisher>Whirlwind Manu</publisher>
<info name="serial" value="LH31"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="whirl2706" />
<feature name="pcb" value="WHIRLWIND-2706" />
<feature name="slot" value="unl_dh08" />
<feature name="mirroring" value="horizontal" />
<feature name="pcb_model" value="DH-08" />
<dataarea name="prg" size="131072">
<rom name="bubble bobble (fds conversion, kaiser hacked)(unl)[p1].prg" size="131072" crc="af799590" sha1="71511ecb1e5d99f38a04ec9291b1abd4b512c42d" offset="00000" status="baddump" />
</dataarea>
@ -66574,14 +66576,15 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
</part>
</software>
<!-- This runs on a different hardware -->
<!-- This runs on yet another different hardware -->
<software name="bublbfdsb" cloneof="bublbfds">
<description>Bubble Bobble (Asia, FDS conversion, Alt PCB 2)</description>
<description>Bubble Bobble (Asia, FDS conversion, alt PCB 2)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<publisher>Whirlwind Manu</publisher>
<!-- Not clear if both or only one dump came from a cart with this serial, NesDev wiki seems to think both and that this is a later release -->
<info name="serial" value="LH31"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="unl_bb" />
<feature name="pcb" value="UNL-BB" />
<feature name="slot" value="unl_lh31" />
<feature name="mirroring" value="horizontal" />
<dataarea name="chr" size="32768">
<rom name="bubble bobble (fds conversion, chr-rom version)(unl)[u].chr" size="32768" crc="a0f6ee8e" sha1="01e2ebbc9636bfd43876383bde3b1cb2c478f885" offset="00000" status="baddump" />
@ -66668,9 +66671,9 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
<description>Falsion (Asia, FDS conversion)</description>
<year>19??</year>
<publisher>Whirlwind Manu</publisher>
<info name="serial" value="LH54"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="whirl2706" />
<feature name="pcb" value="WHIRLWIND-2706" />
<feature name="slot" value="unl_lh28_lh54" />
<feature name="mirroring" value="vertical" />
<dataarea name="prg" size="131072">
<rom name="falsion (fds conversion, whirlwind manu)(unl).prg" size="131072" crc="80589df6" sha1="12ddd9edb8894c200c9d89b9ee5673f1202aba19" offset="00000" status="baddump" />
@ -66770,10 +66773,10 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
<software name="meikyfds">
<description>Meikyuu Jiin Dababa (Asia, FDS conversion)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<publisher>Whirlwind Manu</publisher>
<info name="serial" value="LH28"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="whirl2706" />
<feature name="pcb" value="WHIRLWIND-2706" />
<feature name="slot" value="unl_lh28_lh54" />
<feature name="mirroring" value="vertical" />
<dataarea name="prg" size="131072">
<rom name="meikyuu jiin dababa (fds conversion) (unl).prg" size="131072" crc="d8012992" sha1="5f0943dc8145542abc70bf20e4754b3c08653399" offset="00000" status="baddump" />
@ -66843,7 +66846,8 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
<software name="nazomfds" supported="no">
<description>Nazo no Murasamejou (Asia, FDS conversion)</description>
<year>19??</year>
<publisher>Whirlwind Manu?</publisher>
<publisher>Whirlwind Manu</publisher>
<info name="serial" value="LH53"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="unl_lh53" />
<feature name="pcb" value="UNL-LH53" />
@ -66864,10 +66868,10 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
<software name="prowrfds">
<description>ProWres - Famicom Wrestling Association (Asia, FDS conversion)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<publisher>Whirlwind Manu</publisher>
<info name="serial" value="LE05"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="unl_bb" />
<feature name="pcb" value="UNL-BB" />
<feature name="slot" value="unl_le05" />
<feature name="mirroring" value="vertical" />
<dataarea name="chr" size="16384">
<rom name="prowres (fds conversion, le05 simplified)(unl)[u].chr" size="16384" crc="58d4719f" sha1="372c4873696578ab56bdc8ec8133099194a864b7" offset="00000" status="baddump" />
@ -77927,10 +77931,11 @@ be better to redump them properly. -->
<software name="mc_20">
<description>20 in 1</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<publisher>Kaiser</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_20in1" />
<feature name="pcb" value="BMC-20IN1" />
<feature name="pcb_model" value="KS-7041" />
<dataarea name="prg" size="524288">
<rom name="20-in-1 [p1].prg" size="524288" crc="8f4fec56" sha1="0934fcf5f83a6ebef24d43ce577a547a31303615" offset="00000" status="baddump" />
</dataarea>

View File

@ -13,7 +13,6 @@
TODO:
- review all PCBs and fix the starting banks (which are often the main problem of not working games)
- investigate pcbs listed in FCEUmm but with apparently no dumps available (LE05 and LH53)
***********************************************************************************************************/
@ -44,18 +43,20 @@ DEFINE_DEVICE_TYPE(NES_MARIOBABY, nes_mbaby_device, "nes_mbaby", "N
DEFINE_DEVICE_TYPE(NES_ASN, nes_asn_device, "nes_asn", "NES Cart Ai Senshi Nicol Bootleg PCB")
DEFINE_DEVICE_TYPE(NES_SMB3PIRATE, nes_smb3p_device, "nes_smb3p", "NES Cart Super Mario Bros. 3 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_BTL_DNINJA, nes_btl_dn_device, "nes_btl_dn", "NES Cart DragonNinja Pirate PCB")
DEFINE_DEVICE_TYPE(NES_WHIRLWIND_2706, nes_whirl2706_device, "nes_whirl2706", "NES Cart Whilwind 2706 PCB")
DEFINE_DEVICE_TYPE(NES_SMB2J, nes_smb2j_device, "nes_smb2j", "NES Cart Super Mario Bros. 2 Jpn PCB")
DEFINE_DEVICE_TYPE(NES_SMB2JA, nes_smb2ja_device, "nes_smb2ja", "NES Cart Super Mario Bros. 2 Jpn (Alt) PCB")
DEFINE_DEVICE_TYPE(NES_SMB2JB, nes_smb2jb_device, "nes_smb2jb", "NES Cart Super Mario Bros. 2 Jpn (Alt 2) PCB")
DEFINE_DEVICE_TYPE(NES_09034A, nes_09034a_device, "nes_09034a", "NES Cart 09-034A PCB")
DEFINE_DEVICE_TYPE(NES_TOBIDASE, nes_tobidase_device, "nes_tobidase", "NES Cart Tobidase Daisakusen Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH32, nes_lh32_device, "nes_lh32", "NES Cart LH-32 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH10, nes_lh10_device, "nes_lh10", "NES Cart LH-10 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH53, nes_lh53_device, "nes_lh53", "NES Cart LH-53 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_DH08, nes_dh08_device, "nes_dh08", "NES Cart DH-08 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LE05, nes_le05_device, "nes_le05", "NES Cart LE05 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH10, nes_lh10_device, "nes_lh10", "NES Cart LH10 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH28_LH54, nes_lh28_lh54_device, "nes_lh28_lh54", "NES Cart LH28/LH54 Pirate PCBs")
DEFINE_DEVICE_TYPE(NES_LH31, nes_lh31_device, "nes_lh31", "NES Cart LH31 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH32, nes_lh32_device, "nes_lh32", "NES Cart LH32 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH53, nes_lh53_device, "nes_lh53", "NES Cart LH53 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_2708, nes_2708_device, "nes_2708", "NES Cart BTL-2708 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_AC08, nes_ac08_device, "nes_ac08", "NES Cart AC08 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_UNL_BB, nes_unl_bb_device, "nes_unl_bb", "NES Cart FDS+CHR Pirate PCB")
DEFINE_DEVICE_TYPE(NES_MMALEE, nes_mmalee_device, "nes_mmalee", "NES Cart Super Mario Bros. Malee 2 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_SHUIGUAN, nes_shuiguan_device, "nes_shuiguan", "NES Cart Shui Guan Pipe Pirate PCB")
DEFINE_DEVICE_TYPE(NES_RT01, nes_rt01_device, "nes_rt01", "NES Cart RT-01 PCB")
@ -91,11 +92,6 @@ nes_btl_dn_device::nes_btl_dn_device(const machine_config &mconfig, const char *
{
}
nes_whirl2706_device::nes_whirl2706_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_WHIRLWIND_2706, tag, owner, clock), m_latch(0)
{
}
nes_smb2j_device::nes_smb2j_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_SMB2J, tag, owner, clock), m_irq_count(0), m_irq_enable(0), irq_timer(nullptr)
{
@ -121,6 +117,31 @@ nes_tobidase_device::nes_tobidase_device(const machine_config &mconfig, const ch
{
}
nes_whirlwind_device::nes_whirlwind_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_reg(0)
{
}
nes_dh08_device::nes_dh08_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_whirlwind_device(mconfig, NES_DH08, tag, owner, clock)
{
}
nes_le05_device::nes_le05_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_whirlwind_device(mconfig, NES_LE05, tag, owner, clock)
{
}
nes_lh28_lh54_device::nes_lh28_lh54_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_whirlwind_device(mconfig, NES_LH28_LH54, tag, owner, clock)
{
}
nes_lh31_device::nes_lh31_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_whirlwind_device(mconfig, NES_LH31, tag, owner, clock)
{
}
nes_lh32_device::nes_lh32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_LH32, tag, owner, clock), m_latch(0)
{
@ -146,11 +167,6 @@ nes_ac08_device::nes_ac08_device(const machine_config &mconfig, const char *tag,
{
}
nes_unl_bb_device::nes_unl_bb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_UNL_BB, tag, owner, clock)
{
}
nes_mmalee_device::nes_mmalee_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_MMALEE, tag, owner, clock)
{
@ -283,21 +299,6 @@ void nes_btl_dn_device::pcb_reset()
m_irq_count = 0;
}
void nes_whirl2706_device::device_start()
{
common_start();
save_item(NAME(m_latch));
}
void nes_whirl2706_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
prg32(0xff);
chr8(0, m_chr_source);
m_latch = 0;
}
void nes_smb2j_device::device_start()
{
common_start();
@ -396,6 +397,21 @@ void nes_tobidase_device::pcb_reset()
m_latch = 0;
}
void nes_whirlwind_device::device_start()
{
common_start();
save_item(NAME(m_reg));
}
void nes_whirlwind_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
prg32((m_prg_chunks >> 1) - 1); // upper PRG: banks are always fixed
chr8(0, m_chr_source);
m_reg = (m_prg_chunks << 1) - 1; // lower PRG: ProWres needs this fixed, others modify it
}
void nes_lh32_device::device_start()
{
common_start();
@ -484,21 +500,6 @@ void nes_ac08_device::pcb_reset()
m_latch = 0xff;
}
void nes_unl_bb_device::device_start()
{
common_start();
save_item(NAME(m_reg));
}
void nes_unl_bb_device::pcb_reset()
{
chr8(0, CHRROM);
prg32(0xff);
// the upper PRG banks never change, but there are 8K of WRAM overlayed to the ROM area based on reg1
m_reg[0] = 0xff;
m_reg[1] = 0;
}
void nes_mmalee_device::device_start()
{
common_start();
@ -922,29 +923,54 @@ void nes_btl_dn_device::write_h(offs_t offset, uint8_t data)
/*-------------------------------------------------
WHIRLWIND-2706
Boards DH-08, LE05, LH28, LH31, LH54 (same as LH28)
Games: Meikyuu Jiin Dababa (FDS conversion) and a few
others
Games: Bubble Bobble alt 1, ProWres, Meikyuu Jiin Dababa,
Bubble Bobble alt 2, Falsion
This PCB maps PRG in 0x6000-0x7fff
Similar PCB variants for FDS conversions by Whirlwind Manu. They
map PRG in 0x6000-0x7fff. They vary slightly in the use/nonuse
of CHR RAM, switchable banks, and valid register locations.
iNES: mapper 108
iNES: mapper 108, 4 submappers
In MESS: Supported.
In MAME: Supported.
-------------------------------------------------*/
void nes_whirl2706_device::write_h(offs_t offset, uint8_t data)
u8 nes_whirlwind_device::read_m(offs_t offset)
{
LOG_MMC(("whirl2706 write_h, offset: %04x, data: %02x\n", offset, data));
m_latch = data;
LOG_MMC(("whirlwind read_m, offset: %04x\n", offset));
return m_prg[((m_reg & m_prg_mask) * 0x2000) + offset];
}
uint8_t nes_whirl2706_device::read_m(offs_t offset)
void nes_dh08_device::write_h(offs_t offset, u8 data) // submapper 1
{
LOG_MMC(("whirl2706 read_m, offset: %04x\n", offset));
return m_prg[(m_latch * 0x2000 + (offset & 0x1fff)) & (m_prg_size - 1)];
LOG_MMC(("dh08 write_h, offset: %04x, data: %02x\n", offset, data));
if (offset >= 0x7000)
m_reg = data;
}
void nes_le05_device::write_h(offs_t offset, u8 data) // submapper 4
{
LOG_MMC(("le05 write_h, offset: %04x, data: %02x\n", offset, data));
chr8(data & 1, m_chr_source);
}
void nes_lh28_lh54_device::write_h(offs_t offset, u8 data) // submapper 3
{
LOG_MMC(("lh28_lh54 write_h, offset: %04x, data: %02x\n", offset, data));
m_reg = data;
}
void nes_lh31_device::write_h(offs_t offset, u8 data) // submapper 2
{
LOG_MMC(("lh31 write_h, offset: %04x, data: %02x\n", offset, data));
if (offset >= 0x6000)
{
m_reg = data;
chr8(data & (m_vrom_chunks - 1), m_chr_source);
}
}
/*-------------------------------------------------
@ -1500,40 +1526,6 @@ void nes_ac08_device::write_h(offs_t offset, uint8_t data)
m_latch = data & 0x0f; // apparently there also is a Castlevania FDS conversion using same board with different banking lines
}
/*-------------------------------------------------
UNL-BB
Games: Bubble Bobble and other FDS conversions with CHRROM!
iNES:
In MESS: Supported.
-------------------------------------------------*/
uint8_t nes_unl_bb_device::read_m(offs_t offset)
{
LOG_MMC(("unl-bb read_m, offset: %04x\n", offset));
return m_prg[(((m_reg[0] & 3 & m_prg_mask) * 0x2000) + (offset & 0x1fff))];
}
void nes_unl_bb_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("unl-bb write_h, offset: %04x, data: %02x\n", offset, data));
if (!(offset & 0x1000))
{
m_reg[0] = data;
m_reg[1] = data;
}
else
m_reg[1] = data & 1; // Pro Wrestling uses this
chr8(m_reg[1] & 3, m_chr_source);
}
/*-------------------------------------------------
BTL-MARIO1-MALEE2 (aka Genius Merio Bros)

View File

@ -148,28 +148,6 @@ private:
};
// ======================> nes_whirl2706_device
class nes_whirl2706_device : public nes_nrom_device
{
public:
// construction/destruction
nes_whirl2706_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual uint8_t read_m(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_smb2j_device
class nes_smb2j_device : public nes_nrom_device
@ -297,6 +275,73 @@ private:
};
// ======================> nes_whirlwind_device
class nes_whirlwind_device : public nes_nrom_device
{
public:
virtual u8 read_m(offs_t offset) override;
virtual void pcb_reset() override;
protected:
// construction/destruction
nes_whirlwind_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
// device-level overrides
virtual void device_start() override;
u8 m_reg;
};
// ======================> nes_dh08_device
class nes_dh08_device : public nes_whirlwind_device
{
public:
// construction/destruction
nes_dh08_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
};
// ======================> nes_le05_device
class nes_le05_device : public nes_whirlwind_device
{
public:
// construction/destruction
nes_le05_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
};
// ======================> nes_lh28_lh54_device
class nes_lh28_lh54_device : public nes_whirlwind_device
{
public:
// construction/destruction
nes_lh28_lh54_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
};
// ======================> nes_lh31_device
class nes_lh31_device : public nes_whirlwind_device
{
public:
// construction/destruction
nes_lh31_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
};
// ======================> nes_lh32_device
class nes_lh32_device : public nes_nrom_device
@ -422,26 +467,6 @@ private:
uint8_t m_latch;
};
// ======================> nes_unl_bb_device
class nes_unl_bb_device : public nes_nrom_device
{
public:
// construction/destruction
nes_unl_bb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual uint8_t read_m(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_reg[2];
};
// ======================> nes_mmalee_device
class nes_mmalee_device : public nes_nrom_device
@ -514,18 +539,20 @@ DECLARE_DEVICE_TYPE(NES_MARIOBABY, nes_mbaby_device)
DECLARE_DEVICE_TYPE(NES_ASN, nes_asn_device)
DECLARE_DEVICE_TYPE(NES_SMB3PIRATE, nes_smb3p_device)
DECLARE_DEVICE_TYPE(NES_BTL_DNINJA, nes_btl_dn_device)
DECLARE_DEVICE_TYPE(NES_WHIRLWIND_2706, nes_whirl2706_device)
DECLARE_DEVICE_TYPE(NES_SMB2J, nes_smb2j_device)
DECLARE_DEVICE_TYPE(NES_SMB2JA, nes_smb2ja_device)
DECLARE_DEVICE_TYPE(NES_SMB2JB, nes_smb2jb_device)
DECLARE_DEVICE_TYPE(NES_09034A, nes_09034a_device)
DECLARE_DEVICE_TYPE(NES_TOBIDASE, nes_tobidase_device)
DECLARE_DEVICE_TYPE(NES_LH32, nes_lh32_device)
DECLARE_DEVICE_TYPE(NES_DH08, nes_dh08_device)
DECLARE_DEVICE_TYPE(NES_LE05, nes_le05_device)
DECLARE_DEVICE_TYPE(NES_LH10, nes_lh10_device)
DECLARE_DEVICE_TYPE(NES_LH28_LH54, nes_lh28_lh54_device)
DECLARE_DEVICE_TYPE(NES_LH31, nes_lh31_device)
DECLARE_DEVICE_TYPE(NES_LH32, nes_lh32_device)
DECLARE_DEVICE_TYPE(NES_LH53, nes_lh53_device)
DECLARE_DEVICE_TYPE(NES_2708, nes_2708_device)
DECLARE_DEVICE_TYPE(NES_AC08, nes_ac08_device)
DECLARE_DEVICE_TYPE(NES_UNL_BB, nes_unl_bb_device)
DECLARE_DEVICE_TYPE(NES_MMALEE, nes_mmalee_device)
DECLARE_DEVICE_TYPE(NES_SHUIGUAN, nes_shuiguan_device)
DECLARE_DEVICE_TYPE(NES_RT01, nes_rt01_device)

View File

@ -294,7 +294,6 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("asnicol", NES_ASN);
device.option_add_internal("smb3pirate", NES_SMB3PIRATE);
device.option_add_internal("btl_dninja", NES_BTL_DNINJA);
device.option_add_internal("whirl2706", NES_WHIRLWIND_2706);
device.option_add_internal("smb2j", NES_SMB2J);
device.option_add_internal("smb2ja", NES_SMB2JA);
device.option_add_internal("smb2jb", NES_SMB2JB);
@ -302,11 +301,14 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("tobidase", NES_TOBIDASE); // mapper 120
device.option_add_internal("mmalee2", NES_MMALEE); // mapper 55
device.option_add_internal("unl_2708", NES_2708); // mapper 103
device.option_add_internal("unl_lh32", NES_LH32); // used by Monty no Doki Doki Daidassou FDS conversion
device.option_add_internal("unl_dh08", NES_DH08); // used in Bubble Bobble alt (FDS Conversion);
device.option_add_internal("unl_le05", NES_LE05); // used in ProWres (FDS Conversion);
device.option_add_internal("unl_lh10", NES_LH10); // used in Fuuun Shaolin Kyo (FDS Conversion);
device.option_add_internal("unl_lh28_lh54", NES_LH28_LH54); // used in Falsion, Meikyuu Jiin Dababa FDS conversions
device.option_add_internal("unl_lh31", NES_LH31); // used in Bubble Bobble alt FDS conversion
device.option_add_internal("unl_lh32", NES_LH32); // used by Monty no Doki Doki Daidassou FDS conversion
device.option_add_internal("unl_lh53", NES_LH53); // used in Nazo no Murasamejou (FDS Conversion);
device.option_add_internal("unl_ac08", NES_AC08); // used by Green Beret FDS conversion
device.option_add_internal("unl_bb", NES_UNL_BB); // used by a few FDS conversions
device.option_add_internal("sgpipe", NES_SHUIGUAN); // mapper 183
device.option_add_internal("rt01", NES_RT01);
// misc MMC3 clone boards

View File

@ -139,7 +139,7 @@ static const nes_mmc mmc_list[] =
{ 105, STD_EVENT },
{ 106, BTL_SMB3 },
{ 107, MAGICSERIES_MD },
{ 108, WHIRLWIND_2706 },
{ 108, UNL_LH28_LH54 }, // 108 has 4 variant boards
// 109 Unused
// 110 Unused
// 111 Ninja Ryuukenden Chinese? - Unsupported
@ -655,6 +655,13 @@ void nes_cart_slot_device::call_load_ines()
m_cart->set_pcb_ctrl_mirror(true);
break;
case UNL_LH28_LH54:
if (vrom_size)
m_pcb_id = (vrom_size == 0x4000) ? UNL_LE05 : UNL_LH31;
else if (!BIT(local_options, 0))
m_pcb_id = UNL_DH08;
break;
case HES_BOARD:
if (crc_hack)
m_cart->set_pcb_ctrl_mirror(true); // Mapper 113 is used for 2 diff boards
@ -965,6 +972,13 @@ const char * nes_cart_slot_device::get_default_card_ines(get_default_card_softwa
if (crc_hack)
pcb_id = BTL_AISENSHINICOL; // Mapper 42 is used for 2 diff boards
break;
case UNL_LH28_LH54: // Mapper 108 is used for 4 diff boards
if (ROM[5])
pcb_id = (ROM[5] == 2) ? UNL_LE05 : UNL_LH31;
else if (!BIT(ROM[6], 0))
pcb_id = UNL_DH08;
break;
}
return nes_get_slot(pcb_id);

View File

@ -202,7 +202,6 @@ static const nes_pcb pcb_list[] =
{ "asnicol", BTL_AISENSHINICOL },
{ "smb3pirate", BTL_SMB3 },
{ "btl_dninja", BTL_DRAGONNINJA },
{ "whirl2706", WHIRLWIND_2706 },
{ "smb2j", UNL_SMB2J },
{ "smb2ja", BTL_SMB2JA },
{ "smb2jb", BTL_SMB2JB },
@ -299,11 +298,14 @@ static const nes_pcb pcb_list[] =
{ "unl_shero", SACHEN_SHERO },
{ "mmalee2", UNL_MMALEE },
{ "unl_2708", UNL_2708 },
{ "unl_dh08", UNL_DH08 },
{ "unl_le05", UNL_LE05 },
{ "unl_lh10", UNL_LH10 },
{ "unl_lh28_lh54", UNL_LH28_LH54 },
{ "unl_lh31", UNL_LH31 },
{ "unl_lh32", UNL_LH32 },
{ "unl_lh53", UNL_LH53 },
{ "unl_ac08", UNL_AC08 },
{ "unl_bb", UNL_BB },
{ "unl_malisb", UNL_MALISB },
{ "sgpipe", BTL_SHUIGUAN },
{ "rt01", UNL_RT01 }, // Russian Test Cart

View File

@ -104,9 +104,9 @@ enum
UNL_8237, UNL_CC21, UNL_AX5705, UNL_KOF97,
UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE,
UNL_UXROM, UNL_MK2, UNL_XIAOZY, UNL_KOF96, UNL_FS6,
UNL_SF3, UNL_RACERMATE, UNL_EDU2K, UNL_LH53, UNL_LH32, UNL_LH10,
UNL_SF3, UNL_RACERMATE, UNL_EDU2K,
UNL_STUDYNGAME, UNL_603_5052, UNL_H2288, UNL_2708,
UNL_MALISB, UNL_BB, UNL_AC08, UNL_A9746, UNL_WORLDHERO,
UNL_MALISB, UNL_AC08, UNL_A9746, UNL_WORLDHERO,
UNL_43272, UNL_TF1201, UNL_CITYFIGHT, UNL_RT01,
/* Bootleg boards */
BTL_SMB2JA, BTL_MARIOBABY, BTL_AISENSHINICOL, BTL_TOBIDASE,
@ -117,6 +117,8 @@ enum
KAISER_KS7016, KAISER_KS7017, KAISER_KS7022, KAISER_KS7030,
KAISER_KS7031, KAISER_KS7032, KAISER_KS7037, KAISER_KS7057,
KAISER_KS7058,
// Whirlwind Manu
UNL_DH08, UNL_LE05, UNL_LH10, UNL_LH28_LH54, UNL_LH31, UNL_LH32, UNL_LH53,
/* Misc: these are needed to convert mappers to boards, I will sort them later */
OPENCORP_DAOU306, HES_BOARD, SVISION16_BOARD, RUMBLESTATION_BOARD, JYCOMPANY_A, JYCOMPANY_B, JYCOMPANY_C,
MAGICSERIES_MD, KASING_BOARD, FUTUREMEDIA_BOARD, FUKUTAKE_BOARD, SOMARI_SL12,
@ -128,8 +130,7 @@ enum
WAIXING_TYPE_I, WAIXING_TYPE_J, WAIXING_FS304,
WAIXING_SGZLZ, WAIXING_SGZ, WAIXING_WXZS, WAIXING_SECURITY, WAIXING_SH2,
WAIXING_DQ8, WAIXING_FFV, WAIXING_WXZS2, SUPERGAME_LIONKING, SUPERGAME_BOOGERMAN,
KAY_BOARD, HOSENKAN_BOARD, NITRA_TDA, GOUDER_37017, NANJING_BOARD,
WHIRLWIND_2706, ZEMINA_BOARD,
KAY_BOARD, HOSENKAN_BOARD, NITRA_TDA, GOUDER_37017, NANJING_BOARD, ZEMINA_BOARD,
NOCASH_NOCHR, // homebrew PCB design which uses NTRAM for CHRRAM
UNL_ACTION53, // homebrew PCB for homebrew multicarts
UNL_CUFROM, UNL_UNROM512, UNL_2A03PURITANS, // homebrew PCBs

View File

@ -127,7 +127,6 @@ static const unif unif_list[] =
{ "BMC-SUPERVISION16IN1", 0, 0, CHRRAM_0, SVISION16_BOARD}, // mapper 53
{ "BMC-NTD-03", 0, 0, CHRRAM_0, BMC_NTD_03},
{ "UNL-AC08", 0, 0, CHRRAM_0, UNL_AC08},
{ "UNL-BB", 0, 0, CHRRAM_0, UNL_BB},
{ "UNL-LH32", 0, 0, CHRRAM_0, UNL_LH32},
{ "UNL-LH53", 0, 0, CHRRAM_0, UNL_LH53},
{ "BMC-G-146", 0, 0, CHRRAM_0, BMC_G146},