diff options
-rw-r--r-- | hash/nes.xml | 128 | ||||
-rw-r--r-- | src/devices/bus/nes/mmc3_clones.cpp | 59 | ||||
-rw-r--r-- | src/devices/bus/nes/mmc3_clones.h | 42 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_carts.cpp | 6 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_ines.hxx | 59 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_pcb.hxx | 28 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_slot.cpp | 3 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_slot.h | 8 |
8 files changed, 212 insertions, 121 deletions
diff --git a/hash/nes.xml b/hash/nes.xml index bf6d675c602..d5755a13f25 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -51718,7 +51718,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1994 super hik 4-in-1 (jy-001 rev1).prg" size="524288" crc="dbdfef5e" sha1="289a97175056bc5bff5c5c09635a450bda7058ad" status="baddump" /> </dataarea> @@ -51734,7 +51736,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1993 heroe series 4-in-1 (jy-001).prg" size="524288" crc="8e40296d" sha1="5d0b50d195f11a656f6d46c369bb3f60000ed085" status="baddump" /> </dataarea> @@ -51750,7 +51754,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1994 super hik 4-in-1 (jy-002).prg" size="524288" crc="fbc1ee6b" sha1="7c82449372191ac3b6cfa4cc72e53b860c9f635b" status="baddump" /> </dataarea> @@ -51766,7 +51772,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1994 super hik 4-in-1 (jy-003).prg" size="524288" crc="f6822fe5" sha1="81dcace66ae60a4fe4035bb8b2e7901a8b33170f" status="baddump" /> </dataarea> @@ -51779,6 +51787,24 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx </part> </software> + <software name="mc_4jy4"> + <description>1996 Super HiK 4 in 1 (JY-004)</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="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> + <dataarea name="prg" size="524288"> + <rom name="1996 super hik 4-in-1 (jy-004).prg" size="524288" crc="1ad4b9d5" sha1="87911ce6cae6799f8fa2a785190b54e397472b35" status="baddump" /> + </dataarea> + <dataarea name="chr" size="524288"> + <rom name="1996 super hik 4-in-1 (jy-004).chr" size="524288" crc="d851081c" sha1="688ff9f483751d42ec6eb3c1eb4c90c019746609" status="baddump" /> + </dataarea> + </part> + </software> + <software name="mc_3jy7"> <description>1994 Super HiK 3 in 1 (JY-007)</description> <year>1994</year> @@ -51800,7 +51826,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-008).prg" size="524288" crc="74a6176e" sha1="920e7a9a42b903b98c80166bc3dbf0aa50367709" status="baddump" /> </dataarea> @@ -51835,7 +51863,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="mario series 4-in-1 (jy-013).prg" size="524288" crc="4558acd5" sha1="86d99d13e813f19c792fac8802c15888739179d2" status="baddump" /> </dataarea> @@ -51946,7 +51976,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-023).prg" size="524288" crc="cadebc3e" sha1="92024688aaa583c673801bc585c4d693458f4d78" status="baddump" /> </dataarea> @@ -51965,7 +51997,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1997 super hik 4-in-1 (jy-024 rev1).prg" size="524288" crc="cef38f6c" sha1="5aebb9e0bb157d3eaa53204607610c22e8bc2548" status="baddump" /> </dataarea> @@ -51984,7 +52018,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-024).prg" size="524288" crc="cef38f6c" sha1="5aebb9e0bb157d3eaa53204607610c22e8bc2548" status="baddump" /> </dataarea> @@ -52003,7 +52039,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-038).prg" size="524288" crc="bd705234" sha1="499393d8bd79b3de5a2ada099fc9477a573cc6ef" status="baddump" /> </dataarea> @@ -52019,7 +52057,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom2" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="256K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-039).prg" size="524288" crc="a32b698b" sha1="f12d34c330d0577aa560507d15c3083a885138fa" status="baddump" /> </dataarea> @@ -52035,7 +52075,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom2" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="256K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-040).prg" size="524288" crc="677c6862" sha1="1f212b29ac4c7fa52eed6dbe4ef2ce62ed7e3bda" status="baddump" /> </dataarea> @@ -52066,7 +52108,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom1" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="256K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="1048576"> <rom name="1995 super hik 4-in-1 (jy-043).prg" size="1048576" crc="a5d89dc1" sha1="cf238422714e35e86e6e2fa5dd3fc0a64230db6e" status="baddump" /> </dataarea> @@ -52083,7 +52127,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1997 super hik 4-in-1 (jy-047).prg" size="524288" crc="7a82a25c" sha1="f05a95eecd16073e82d5ec8e05c6cdf262025735" status="baddump" /> </dataarea> @@ -52099,7 +52145,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1995 super hik 4-in-1 (jy-047 rev0).prg" size="524288" crc="113688e2" sha1="600e52f8a93cf3aa0bbb09e56bf570ad09d10184" status="baddump" /> </dataarea> @@ -52147,7 +52195,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom2" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="256K" /> <dataarea name="prg" size="524288"> <rom name="1996 super hik 4-in-1 (jy-057).prg" size="524288" crc="142184be" sha1="eec27f45ded5a7111e7b2d5ac8e0d33b0f6449cc" status="baddump" /> </dataarea> @@ -52166,7 +52216,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom2" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="256K" /> <dataarea name="prg" size="524288"> <rom name="1996 super hik 4-in-1 (jy-058).prg" size="524288" crc="019a5cf7" sha1="ace2c8eada92bda13ca9bd3e3dc336648ebb28c7" status="baddump" /> </dataarea> @@ -52182,7 +52234,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx <publisher>J.Y. Company</publisher> <info name="usage" value="Press reset to switch games."/> <part name="cart" interface="nes_cart"> - <feature name="slot" value="resettxrom0" /> + <feature name="slot" value="resettxrom" /> + <feature name="outer-prg-size" value="128K" /> + <feature name="outer-chr-size" value="128K" /> <dataarea name="prg" size="524288"> <rom name="1996 super hik 4-in-1 (jy-072).prg" size="524288" crc="8b1f7c74" sha1="0987c7b4aaf4419605e71a65405c9fe7a1e98a04" status="baddump" /> </dataarea> @@ -52222,12 +52276,48 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx </part> </software> + <software name="mc_8j111"> + <description>1998 Super Game 8 in 1 (JY-111)</description> + <year>1998</year> + <publisher>J.Y. Company</publisher> + <part name="cart" interface="nes_cart"> + <feature name="slot" value="bmc_el86xc" /> + <feature name="pcb" value="EL860947C" /> + <feature name="outer-prg-size" value="128K" /> + <dataarea name="prg" size="1048576"> + <rom name="1998 super game 8-in-1 (jy-111).prg" size="1048576" crc="8d6805f0" sha1="c13d1a3c72f48ad00db939f088f67750fafef13e" status="baddump" /> + </dataarea> + <dataarea name="chr" size="1048576"> + <rom name="1998 super game 8-in-1 (jy-111).chr" size="1048576" crc="c907cacf" sha1="de2a790ca0ce7e5aa2312f97cb8d92ac3836ddc5" status="baddump" /> + </dataarea> + </part> + </software> + + <software name="mc_8j112"> + <description>1997 8 in 1 (JY-112)</description> + <year>1997</year> + <publisher>J.Y. Company</publisher> + <part name="cart" interface="nes_cart"> + <feature name="slot" value="bmc_el86xc" /> + <feature name="pcb" value="EL860947C" /> + <feature name="outer-prg-size" value="128K" /> + <dataarea name="prg" size="1048576"> + <rom name="1997 8-in-1 (jy-112).prg" size="1048576" crc="c6971394" sha1="d3f37dd47c9a857515b40035debe6d2dbd2ec825" status="baddump" /> + </dataarea> + <dataarea name="chr" size="1048576"> + <rom name="1997 8-in-1 (jy-112).chr" size="1048576" crc="6751a900" sha1="fc88086b13d379848d8582aee932c3d821eea7c1" status="baddump" /> + </dataarea> + </part> + </software> + <software name="mc_8j119"> <description>FC Genjin 8 in 1 (JY-119)</description> <year>199?</year> <publisher>J.Y. Company</publisher> <part name="cart" interface="nes_cart"> - <feature name="slot" value="fcgj8in1" /> + <feature name="slot" value="bmc_el86xc" /> + <feature name="pcb" value="EL861121C" /> + <feature name="outer-prg-size" value="256K" /> <dataarea name="prg" size="2097152"> <rom name="8-in-1 (jy-119).prg" size="2097152" crc="acb1f4e9" sha1="e65bf41010b4f3d4692b458698e355c233ecd729" status="baddump" /> </dataarea> diff --git a/src/devices/bus/nes/mmc3_clones.cpp b/src/devices/bus/nes/mmc3_clones.cpp index b4282eacd06..aba487fccba 100644 --- a/src/devices/bus/nes/mmc3_clones.cpp +++ b/src/devices/bus/nes/mmc3_clones.cpp @@ -53,13 +53,11 @@ DEFINE_DEVICE_TYPE(NES_SACHEN_SHERO, nes_sachen_shero_device, "nes_shero", DEFINE_DEVICE_TYPE(NES_A9746, nes_a9746_device, "nes_bmc_a9746", "NES Cart A-9746 PCB") DEFINE_DEVICE_TYPE(NES_A88S1, nes_a88s1_device, "nes_a88s1", "NES Cart BMC A88S-1 PCB") -DEFINE_DEVICE_TYPE(NES_FCGJ8IN1, nes_fcgj8in1_device, "nes_fcgj8in1", "NES Cart BMC FC Genjin 8 in 1 PCB") +DEFINE_DEVICE_TYPE(NES_BMC_EL86XC, nes_bmc_el86xc_device, "nes_bmc_el86xc", "NES Cart BMC EL860947C/EL861121C PCB") DEFINE_DEVICE_TYPE(NES_FK23C, nes_fk23c_device, "nes_fk23c", "NES Cart FK23C PCB") DEFINE_DEVICE_TYPE(NES_FK23CA, nes_fk23ca_device, "nes_fk23ca", "NES Cart FK23CA PCB") DEFINE_DEVICE_TYPE(NES_NT639, nes_nt639_device, "nes_nt639", "NES Cart NT-639 PCB") -DEFINE_DEVICE_TYPE(NES_RESETTXROM0, nes_resettxrom0_device, "nes_resettxrom0", "NES Cart BMC RESET-TXROM 128K/128K PCB") -DEFINE_DEVICE_TYPE(NES_RESETTXROM1, nes_resettxrom1_device, "nes_resettxrom1", "NES Cart BMC RESET-TXROM 256K/128K PCB") -DEFINE_DEVICE_TYPE(NES_RESETTXROM2, nes_resettxrom2_device, "nes_resettxrom2", "NES Cart BMC RESET-TXROM 128K/256K PCB") +DEFINE_DEVICE_TYPE(NES_RESETTXROM, nes_resettxrom_device, "nes_resettxrom", "NES Cart BMC RESET-TXROM PCB") DEFINE_DEVICE_TYPE(NES_S24IN1SC03, nes_s24in1sc03_device, "nes_s24in1c03", "NES Cart Super 24 in 1 SC-03 PCB") DEFINE_DEVICE_TYPE(NES_TECHLINE9IN1, nes_tech9in1_device, "nes_tech9in1", "NES Cart Techline 9 in 1 PCB") DEFINE_DEVICE_TYPE(NES_BMC_8IN1, nes_bmc_8in1_device, "nes_bmc_8in1", "NES Cart BMC GRM070 8 in 1 PCB") @@ -257,8 +255,8 @@ nes_a88s1_device::nes_a88s1_device(const machine_config &mconfig, const char *ta { } -nes_fcgj8in1_device::nes_fcgj8in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : nes_txrom_device(mconfig, NES_FCGJ8IN1, tag, owner, clock) +nes_bmc_el86xc_device::nes_bmc_el86xc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_txrom_device(mconfig, NES_BMC_EL86XC, tag, owner, clock) { } @@ -282,23 +280,8 @@ nes_nt639_device::nes_nt639_device(const machine_config &mconfig, const char *ta { } -nes_resettxrom0_device::nes_resettxrom0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prg_shift, int chr_shift) - : nes_txrom_device(mconfig, type, tag, owner, clock), m_count(-1), m_prg_shift(prg_shift), m_chr_shift(chr_shift) -{ -} - -nes_resettxrom0_device::nes_resettxrom0_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : nes_resettxrom0_device(mconfig, NES_RESETTXROM0, tag, owner, clock, 4, 7) -{ -} - -nes_resettxrom1_device::nes_resettxrom1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : nes_resettxrom0_device(mconfig, NES_RESETTXROM1, tag, owner, clock, 5, 7) -{ -} - -nes_resettxrom2_device::nes_resettxrom2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : nes_resettxrom0_device(mconfig, NES_RESETTXROM2, tag, owner, clock, 4, 8) +nes_resettxrom_device::nes_resettxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_txrom_device(mconfig, NES_RESETTXROM, tag, owner, clock), m_count(-1) { } @@ -620,10 +603,10 @@ void nes_a88s1_device::pcb_reset() update_banks(); } -void nes_fcgj8in1_device::pcb_reset() +void nes_bmc_el86xc_device::pcb_reset() { m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - mmc3_common_initialize(0x1f, 0x7f, 0); + mmc3_common_initialize((m_outer_prg_size >> 3) - 1, 0x7f, 0); } void nes_fk23c_device::device_start() @@ -666,20 +649,20 @@ void nes_nt639_device::pcb_reset() } // These reset-based PCBs are emulated here with no additional handlers -void nes_resettxrom0_device::device_start() +void nes_resettxrom_device::device_start() { mmc3_start(); save_item(NAME(m_count)); } -void nes_resettxrom0_device::pcb_reset() +void nes_resettxrom_device::pcb_reset() { m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - mmc3_common_initialize((1 << m_prg_shift) - 1, (1 << m_chr_shift) - 1, 0); + mmc3_common_initialize((m_outer_prg_size >> 3) - 1, m_outer_chr_size - 1, 0); m_count = (m_count + 1) & 3; - m_prg_base = m_count << m_prg_shift; - m_chr_base = m_count << m_chr_shift; + m_prg_base = m_count << (31 - count_leading_zeros_32(m_outer_prg_size) - 3); // << std::countr_zero(m_outer_prg_size) - 3; in C++20 + m_chr_base = m_count << (31 - count_leading_zeros_32(m_outer_chr_size)); // << std::countr_zero(m_outer_chr_size); in C++20 set_prg(m_prg_base, m_prg_mask); set_chr(m_chr_source, m_chr_base, m_chr_mask); } @@ -2759,27 +2742,27 @@ void nes_bmc_f600_device::chr_cb(int start, int bank, int source) /*------------------------------------------------- - BMC-FCGENJIN-8IN1 + BMC EL860947C and EL861121C boards - Unknown Multigame Bootleg Board - Games: 8 in 1 (JY-119) + Games: 8 in 1 (JY-111, JY-112, and JY-119) MMC3 clone with banking for multigame menu. - NES 2.0: mapper 267 + NES 2.0: mapper 267 and mapper 377 In MAME: Supported. -------------------------------------------------*/ -void nes_fcgj8in1_device::write_m(offs_t offset, u8 data) +void nes_bmc_el86xc_device::write_m(offs_t offset, u8 data) { - LOG_MMC(("fcgj8in1 write_m, offset: %04x, data: %02x\n", offset, data)); + LOG_MMC(("bmc_el86xc write_m, offset: %04x, data: %02x\n", offset, data)); if (!(offset & 0x1000)) // game only banks via 0x6000, this mask is a guess { - m_prg_base = (data & 0x20) << 2 | (data & 0x06) << 4; + int outer = bitswap<3>(data, 5, 2, 1); + m_prg_base = outer << (31 - count_leading_zeros_32(m_outer_prg_size) - 3); // << std::countr_zero(m_outer_prg_size) - 3; in C++20 set_prg(m_prg_base, m_prg_mask); - m_chr_base = m_prg_base << 2; + m_chr_base = outer << 7; set_chr(m_chr_source, m_chr_base, m_chr_mask); } } diff --git a/src/devices/bus/nes/mmc3_clones.h b/src/devices/bus/nes/mmc3_clones.h index f5cf970728b..f1d73d146f2 100644 --- a/src/devices/bus/nes/mmc3_clones.h +++ b/src/devices/bus/nes/mmc3_clones.h @@ -475,13 +475,13 @@ private: }; -// ======================> nes_fcgj8in1_device +// ======================> nes_bmc_el86xc_device -class nes_fcgj8in1_device : public nes_txrom_device +class nes_bmc_el86xc_device : public nes_txrom_device { public: // construction/destruction - nes_fcgj8in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + nes_bmc_el86xc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); virtual void write_m(offs_t offset, u8 data) override; @@ -543,46 +543,22 @@ public: }; -// ======================> nes_resettxrom0_device +// ======================> nes_resettxrom_device -class nes_resettxrom0_device : public nes_txrom_device +class nes_resettxrom_device : public nes_txrom_device { public: // construction/destruction - nes_resettxrom0_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + nes_resettxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); virtual void pcb_reset() override; protected: - // construction/destruction - nes_resettxrom0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prg_shift, int chr_shift); - // device-level overrides virtual void device_start() override; private: int m_count; - int m_prg_shift, m_chr_shift; -}; - - -// ======================> nes_resettxrom1_device - -class nes_resettxrom1_device : public nes_resettxrom0_device -{ -public: - // construction/destruction - nes_resettxrom1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); -}; - - -// ======================> nes_resettxrom2_device - -class nes_resettxrom2_device : public nes_resettxrom0_device -{ -public: - // construction/destruction - nes_resettxrom2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; @@ -1072,13 +1048,11 @@ DECLARE_DEVICE_TYPE(NES_SACHEN_SHERO, nes_sachen_shero_device) DECLARE_DEVICE_TYPE(NES_A9746, nes_a9746_device) DECLARE_DEVICE_TYPE(NES_A88S1, nes_a88s1_device) -DECLARE_DEVICE_TYPE(NES_FCGJ8IN1, nes_fcgj8in1_device) +DECLARE_DEVICE_TYPE(NES_BMC_EL86XC, nes_bmc_el86xc_device) DECLARE_DEVICE_TYPE(NES_FK23C, nes_fk23c_device) DECLARE_DEVICE_TYPE(NES_FK23CA, nes_fk23ca_device) DECLARE_DEVICE_TYPE(NES_NT639, nes_nt639_device) -DECLARE_DEVICE_TYPE(NES_RESETTXROM0, nes_resettxrom0_device) -DECLARE_DEVICE_TYPE(NES_RESETTXROM1, nes_resettxrom1_device) -DECLARE_DEVICE_TYPE(NES_RESETTXROM2, nes_resettxrom2_device) +DECLARE_DEVICE_TYPE(NES_RESETTXROM, nes_resettxrom_device) DECLARE_DEVICE_TYPE(NES_S24IN1SC03, nes_s24in1sc03_device) DECLARE_DEVICE_TYPE(NES_TECHLINE9IN1, nes_tech9in1_device) DECLARE_DEVICE_TYPE(NES_BMC_8IN1, nes_bmc_8in1_device) diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index c90ea67c8bf..1a9ba571c45 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -430,13 +430,11 @@ void nes_cart(device_slot_interface &device) 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); + device.option_add_internal("bmc_el86xc", NES_BMC_EL86XC); device.option_add_internal("fk23c", NES_FK23C); device.option_add_internal("fk23ca", NES_FK23CA); device.option_add_internal("nt639", NES_NT639); - device.option_add_internal("resettxrom0", NES_RESETTXROM0); - device.option_add_internal("resettxrom1", NES_RESETTXROM1); - device.option_add_internal("resettxrom2", NES_RESETTXROM2); + device.option_add_internal("resettxrom", NES_RESETTXROM); device.option_add_internal("s24in1c03", NES_S24IN1SC03); device.option_add_internal("tech9in1", NES_TECHLINE9IN1); device.option_add_internal("bmc_8in1", NES_BMC_8IN1); diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index 1eaae491cfb..01da0d79db4 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -302,7 +302,7 @@ static const nes_mmc mmc_list[] = { 264, YOKO_BOARD }, { 265, BMC_T262 }, { 266, UNL_CITYFIGHT }, - { 267, BMC_FCGENJIN_8IN1 }, + { 267, BMC_EL861121C }, // 268 COOLBOY and MINDKIDS // 269 mc_gx121 seems to be a PnP, but there are two actual multicarts for this mapper? // 270 multicarts on OneBus Famiclones @@ -348,7 +348,7 @@ static const nes_mmc mmc_list[] = // 310 variant of mapper 125? // 311 Unused (previously assigned in error to a bad SMB2 pirate dump) { 312, KAISER_KS7013B }, // Highway Star Kaiser bootleg - { 313, BMC_RESETTXROM0 }, + { 313, BMC_RESETTXROM }, { 314, BMC_64IN1NR }, // 315 820732C and 830134C multicarts, not in nes.xml? // 316 Unused @@ -412,7 +412,7 @@ static const nes_mmc mmc_list[] = { 374, BMC_RESETSXROM }, // 375 135-in-1 2MB multicart { 376, BMC_YY841155C }, - // 377 JY-111 multicart, similar to mapper 367 + { 377, BMC_EL860947C }, // 378 8-in-1 multicart, which one? // 379 35-in-1 multicart, similar to mapper 38 { 380, BMC_970630C }, @@ -748,6 +748,32 @@ void nes_cart_slot_device::call_load_ines() submapper = 0; logerror("Unimplemented NES 2.0 submapper: CAMERICA-BF9096.\n"); } + // 313: BMC RESET-TXROM + else if (mapper == 313) + { + if (submapper == 0) + { + m_cart->set_outer_prg_size(128); + m_cart->set_outer_chr_size(128); + } + else if (submapper == 1) + { + m_cart->set_outer_prg_size(256); + m_cart->set_outer_chr_size(128); + } + else if (submapper == 2) + { + m_cart->set_outer_prg_size(128); + m_cart->set_outer_chr_size(256); + } + else if (submapper == 3) + { + m_cart->set_outer_prg_size(256); + m_cart->set_outer_chr_size(256); + } + else + logerror("Unimplemented NES 2.0 submapper: %d\n", submapper); + } else if (submapper) { submapper = 0; @@ -937,15 +963,6 @@ void nes_cart_slot_device::call_load_ines() m_pcb_id = RCM_GS2013; break; - case BMC_RESETTXROM0: - if (submapper == 1) - m_pcb_id = BMC_RESETTXROM1; - else if (submapper == 2) - m_pcb_id = BMC_RESETTXROM2; - else if (submapper > 2) - logerror("Unimplemented NES 2.0 submapper: %d\n", submapper); - break; - case HES_BOARD: if (crc_hack) m_cart->set_pcb_ctrl_mirror(true); // Mapper 113 is used for 2 diff boards @@ -999,7 +1016,16 @@ void nes_cart_slot_device::call_load_ines() case NAMCOT_163: mapper_sram_size = m_cart->get_mapper_sram_size(); break; - //FIXME: we also have to fix Action 52 PRG loading somewhere... + + case BMC_EL860947C: + m_cart->set_outer_prg_size(128); + break; + + case BMC_EL861121C: + m_cart->set_outer_prg_size(256); + break; + + //FIXME: we also have to fix Action 52 PRG loading somewhere... case BANDAI_DATACH: fatalerror("Bandai Datach games have to be mounted in the Datach subslot!\n"); @@ -1283,13 +1309,6 @@ const char * nes_cart_slot_device::get_default_card_ines(get_default_card_softwa if (ROM[4] >= 20) pcb_id = RCM_GS2013; break; - - case BMC_RESETTXROM0: // Mapper 313 is used for 3 diff boards - if (submapper == 1) - pcb_id = BMC_RESETTXROM1; - if (submapper == 2) - pcb_id = BMC_RESETTXROM2; - break; } return nes_get_slot(pcb_id); diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index ea4ee0b70b5..e9287db7d0e 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -303,14 +303,12 @@ static const nes_pcb pcb_list[] = { "bmc_g146", BMC_G146 }, { "bmc_11160", BMC_11160 }, { "a88s1", BMC_A88S1 }, - { "fcgj8in1", BMC_FCGENJIN_8IN1 }, + { "bmc_el86xc", BMC_EL860947C }, { "fk23c", BMC_FK23C }, { "fk23ca", BMC_FK23CA }, { "nt639", BMC_NT639 }, { "resetsxrom", BMC_RESETSXROM }, - { "resettxrom0", BMC_RESETTXROM0 }, - { "resettxrom1", BMC_RESETTXROM1 }, - { "resettxrom2", BMC_RESETTXROM2 }, + { "resettxrom", BMC_RESETTXROM }, { "s24in1c03", BMC_S24IN1SC03 }, { "tech9in1", BMC_TECHLINE9IN1 }, { "bmc_8in1", BMC_8IN1 }, @@ -668,6 +666,28 @@ void nes_cart_slot_device::call_load_pcb() m_cart->set_n163_vol(n163_get_submapper_num(get_feature("n163-vol"))); } + // get outer PRG bank size for multicart boards that use this feature + if (m_pcb_id == BMC_EL860947C || m_pcb_id == BMC_RESETTXROM) + { + const char *size = get_feature("outer-prg-size"); + int kbyte = 128; + + if (size == nullptr || sscanf(size, "%u%*c", &kbyte) != 1 || kbyte & (kbyte - 1) || kbyte <= 0) + logerror("Unexpected outer-prg-size: %s\n", size ? size : "(nullptr)"); + m_cart->set_outer_prg_size(kbyte); + } + + // get outer CHR bank size for multicart boards that use this feature + if (m_pcb_id == BMC_RESETTXROM) + { + const char *size = get_feature("outer-chr-size"); + int kbyte = 128; + + if (size == nullptr || sscanf(size, "%u%*c", &kbyte) != 1 || kbyte & (kbyte - 1) || kbyte <= 0) + logerror("Unexpected outer-chr-size: %s\n", size ? size : "(nullptr)"); + m_cart->set_outer_chr_size(kbyte); + } + // pirate variants of boards with bus conflict are often not suffering from it // and actually games glitch if bus conflict is emulated... diff --git a/src/devices/bus/nes/nes_slot.cpp b/src/devices/bus/nes/nes_slot.cpp index 53fc0a2f058..ec839fb1e7b 100644 --- a/src/devices/bus/nes/nes_slot.cpp +++ b/src/devices/bus/nes/nes_slot.cpp @@ -126,6 +126,9 @@ device_nes_cart_interface::device_nes_cart_interface(const machine_config &mconf , m_vrc_ls_prg_a(0) , m_vrc_ls_prg_b(0) , m_vrc_ls_chr(0) + , m_n163_vol(0) + , m_outer_prg_size(0) + , m_outer_chr_size(0) , m_mirroring(PPU_MIRROR_NONE) , m_pcb_ctrl_mirror(false) , m_four_screen_vram(false) diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index b83a4eecc65..d36d1ffc0af 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -98,14 +98,14 @@ enum BMC_60311C, BMC_80013B, BMC_810544C, BMC_830425C, BMC_830928C, BMC_850437C, BMC_970630C, BMC_N32_4IN1, BMC_NT639, BMC_NTD_03, - BMC_FCGENJIN_8IN1, BMC_FK23C, BMC_FK23CA, BMC_JY820845C, + BMC_EL860947C, BMC_EL861121C, BMC_FK23C, BMC_FK23CA, BMC_JY820845C, BMC_PJOY84, BMC_TH22913, BMC_11160, BMC_G146, BMC_2751, BMC_8157, BMC_00202650, BMC_820720C, BMC_830118C, BMC_830832C, BMC_YY841101C, BMC_YY841155C, BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160, BMC_CTC09, BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_SA005A, BMC_TJ03, - BMC_RESETSXROM, BMC_RESETTXROM0, BMC_RESETTXROM1, BMC_RESETTXROM2, BMC_TECHLINE9IN1, + BMC_RESETSXROM, BMC_RESETTXROM, 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, @@ -223,6 +223,8 @@ public: void set_mmc1_type(mmc1_type val) { m_mmc1_type = val; } void set_vrc_lines(int PRG_A, int PRG_B, int CHR) { m_vrc_ls_prg_a = PRG_A; m_vrc_ls_prg_b = PRG_B; m_vrc_ls_chr = CHR; } void set_n163_vol(int vol) { m_n163_vol = vol; } + void set_outer_prg_size(int val) { m_outer_prg_size = val; } + void set_outer_chr_size(int val) { m_outer_chr_size = val; } void set_x1_005_alt(bool val) { m_x1_005_alt_mirroring = val; } void set_bus_conflict(bool val) { m_bus_conflict = val; } uint8_t get_open_bus() { return m_open_bus; } @@ -296,6 +298,8 @@ protected: int m_vrc_ls_prg_b; int m_vrc_ls_chr; int m_n163_vol; + int m_outer_prg_size; + int m_outer_chr_size; int m_mirroring; bool m_pcb_ctrl_mirror, m_four_screen_vram, m_has_trainer; |