summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author 0kmg <9137159+0kmg@users.noreply.github.com>2022-02-09 09:16:21 -0900
committer GitHub <noreply@github.com>2022-02-09 13:16:21 -0500
commit56db643ab0315a0d6ffbaf708afc1c6f599bdbf2 (patch)
tree7f0e34aab2d1ff6f6e37db61b594b67eb757643f
parentd83c79a1ea5a2358e76291bdf1b03a483de5ff0e (diff)
bus/nes: Added support for an 82 in 1 cartridge. (#9288)
New working software list additions (nes.xml) ----------------------------------- 82 in 1 [flaviocaste]
-rw-r--r--hash/nes.xml17
-rw-r--r--src/devices/bus/nes/multigame.cpp19
-rw-r--r--src/devices/bus/nes/multigame.h18
-rw-r--r--src/devices/bus/nes/nes_carts.cpp1
-rw-r--r--src/devices/bus/nes/nes_pcb.hxx1
-rw-r--r--src/devices/bus/nes/nes_slot.h2
6 files changed, 53 insertions, 5 deletions
diff --git a/hash/nes.xml b/hash/nes.xml
index f5fed4a89b2..199bd598648 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -83395,6 +83395,23 @@ be better to redump them properly. -->
</part>
</software>
+ <software name="mc_82">
+ <description>82 in 1</description>
+ <year>199?</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_82ab" />
+ <feature name="pcb_model" value="82AB" />
+ <dataarea name="prg" size="2097152">
+ <rom name="ncn-82a" size="1048576" crc="ba6b565e" sha1="941cf81cc160371c9ae1a675a4c8195687b9fcdc" offset="0x000000" status="baddump" />
+ <rom name="ncn-82b" size="1048576" crc="f4b62953" sha1="fb2a89fd6c2c776f0ee4db807621a061c7cff065" offset="0x100000" status="baddump" />
+ </dataarea>
+ <!-- 8k VRAM on cartridge -->
+ <dataarea name="vram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_83">
<description>83 in 1</description>
<year>19??</year>
diff --git a/src/devices/bus/nes/multigame.cpp b/src/devices/bus/nes/multigame.cpp
index 33aff6df695..d2b91f8f177 100644
--- a/src/devices/bus/nes/multigame.cpp
+++ b/src/devices/bus/nes/multigame.cpp
@@ -97,6 +97,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_1200IN1, nes_bmc_1200in1_device, "nes_bmc_1200i
DEFINE_DEVICE_TYPE(NES_BMC_GOLD150, nes_bmc_gold150_device, "nes_bmc_gold150", "NES Cart BMC Golden 150 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_GOLD260, nes_bmc_gold260_device, "nes_bmc_gold260", "NES Cart BMC Golden 260 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_TH22913, nes_bmc_th22913_device, "nes_bmc_th22913", "NES Cart BMC TH2291-3 PCB")
+DEFINE_DEVICE_TYPE(NES_BMC_82AB, nes_bmc_82ab_device, "nes_bmc_82ab", "NES Cart BMC 82AB PCB")
DEFINE_DEVICE_TYPE(NES_BMC_4IN1RESET, nes_bmc_4in1reset_device, "nes_bmc_4in1reset", "NES Cart BMC 4 in 1 (Reset Based) PCB")
DEFINE_DEVICE_TYPE(NES_BMC_42IN1RESET, nes_bmc_42in1reset_device, "nes_bmc_42in1reset", "NES Cart BMC 42 in 1 (Reset Based) PCB")
DEFINE_DEVICE_TYPE(NES_BMC_NC20MB, nes_bmc_nc20mb_device, "nes_bmc_nc20mb", "NES Cart BMC NC-20MB PCB")
@@ -498,8 +499,18 @@ nes_n625092_device::nes_n625092_device(const machine_config &mconfig, const char
{
}
+nes_bmc_th22913_device::nes_bmc_th22913_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : nes_vram_protect_device(mconfig, type, tag, owner, clock), m_vram_prot_bit(type == NES_BMC_TH22913 ? 10 : 9)
+{
+}
+
nes_bmc_th22913_device::nes_bmc_th22913_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
- : nes_vram_protect_device(mconfig, NES_BMC_TH22913, tag, owner, clock)
+ : nes_bmc_th22913_device(mconfig, NES_BMC_TH22913, tag, owner, clock)
+{
+}
+
+nes_bmc_82ab_device::nes_bmc_82ab_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_bmc_th22913_device(mconfig, NES_BMC_82AB, tag, owner, clock)
{
}
@@ -3481,9 +3492,9 @@ void nes_n625092_device::write_h(offs_t offset, u8 data)
/*-------------------------------------------------
- BMC-TH2291-3, BMC-CH-011
+ BMC-TH2291-3, BMC-CH-011, BMC-82AB
- Games: Powerful 250 in 1, Powerful 255 in 1
+ Games: Powerful 250 in 1, Powerful 255 in 1, 82 in 1
iNES: mapper 63
@@ -3501,5 +3512,5 @@ void nes_bmc_th22913_device::write_h(offs_t offset, u8 data)
prg16_cdef(bank | mode);
set_nt_mirroring(BIT(offset, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
- m_vram_protect = BIT(offset, 10);
+ m_vram_protect = BIT(offset, m_vram_prot_bit);
}
diff --git a/src/devices/bus/nes/multigame.h b/src/devices/bus/nes/multigame.h
index 1214710ea66..4ce70450a56 100644
--- a/src/devices/bus/nes/multigame.h
+++ b/src/devices/bus/nes/multigame.h
@@ -1280,6 +1280,23 @@ public:
virtual void write_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
+
+protected:
+ // construction/destruction
+ nes_bmc_th22913_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+private:
+ u8 m_vram_prot_bit;
+};
+
+
+// ======================> nes_bmc_82ab_device
+
+class nes_bmc_82ab_device : public nes_bmc_th22913_device
+{
+public:
+ // construction/destruction
+ nes_bmc_82ab_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
@@ -1353,5 +1370,6 @@ DECLARE_DEVICE_TYPE(NES_BMC_42IN1RESET, nes_bmc_42in1reset_device)
DECLARE_DEVICE_TYPE(NES_BMC_NC20MB, nes_bmc_nc20mb_device)
DECLARE_DEVICE_TYPE(NES_BMC_LC160, nes_bmc_lc160_device)
DECLARE_DEVICE_TYPE(NES_BMC_TH22913, nes_bmc_th22913_device)
+DECLARE_DEVICE_TYPE(NES_BMC_82AB, nes_bmc_82ab_device)
#endif // MAME_BUS_NES_MULTIGAME_H
diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp
index 16307334349..111c72f3591 100644
--- a/src/devices/bus/nes/nes_carts.cpp
+++ b/src/devices/bus/nes/nes_carts.cpp
@@ -383,6 +383,7 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("bmc_60311c", NES_BMC_60311C);
device.option_add_internal("bmc_80013b", NES_BMC_80013B);
device.option_add_internal("bmc_810544c", NES_BMC_810544C);
+ device.option_add_internal("bmc_82ab", NES_BMC_82AB);
device.option_add_internal("bmc_830425c", NES_BMC_830425C);
device.option_add_internal("bmc_830506c", NES_BMC_830506C);
device.option_add_internal("bmc_830928c", NES_BMC_830928C);
diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx
index 3da6f033067..6d4673834d5 100644
--- a/src/devices/bus/nes/nes_pcb.hxx
+++ b/src/devices/bus/nes/nes_pcb.hxx
@@ -263,6 +263,7 @@ static const nes_pcb pcb_list[] =
{ "bmc_60311c", BMC_60311C },
{ "bmc_80013b", BMC_80013B },
{ "bmc_810544c", BMC_810544C },
+ { "bmc_82ab", BMC_82AB },
{ "bmc_830425c", BMC_830425C },
{ "bmc_830506c", BMC_830506C },
{ "bmc_830928c", BMC_830928C },
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index 970390547af..40f9a4164d9 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -97,7 +97,7 @@ enum
BMC_70IN1, BMC_500IN1, BMC_800IN1, BMC_1200IN1,
BMC_GKA, BMC_GKB, BMC_GKCXIN1, BMC_GN91B,
BMC_HP898F, BMC_VT5201, BMC_BENSHIENG,
- BMC_CTC09, BMC_CTC_12IN1, BMC_60311C, BMC_80013B, BMC_810544C,
+ BMC_CTC09, BMC_CTC_12IN1, BMC_60311C, BMC_80013B, BMC_810544C, BMC_82AB,
BMC_830425C, BMC_830506C, BMC_830928C, BMC_850437C, BMC_891227, BMC_970630C,
BMC_N32_4IN1, BMC_NC20MB, BMC_NT639, BMC_NTD_03, BMC_SRPG_5IN1,
BMC_EL860947C, BMC_EL861121C, BMC_FAM250, BMC_FK23C, BMC_FK23CA,