mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
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:
parent
40c6a80f6e
commit
c9f914254c
@ -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)">
|
||||
|
49
hash/nes.xml
49
hash/nes.xml
@ -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><unknown></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><unknown></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><unknown></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><pirate></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><pirate></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><pirate></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>
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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},
|
||||
|
Loading…
Reference in New Issue
Block a user