diff --git a/hash/nes.xml b/hash/nes.xml index fd5c9beaaf5..e67e2ef1e9d 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -78386,7 +78386,7 @@ be better to redump them properly. --> 19?? <pirate> - + @@ -78397,13 +78397,13 @@ be better to redump them properly. --> - + 2000 in 1 (No Splash, No Rev, Alt Mapper) 19?? <pirate> - - + + @@ -78478,13 +78478,13 @@ be better to redump them properly. --> - + 255 in 1 19?? <pirate> - - + + @@ -78955,13 +78955,15 @@ be better to redump them properly. --> - + + Super 4-in-1 Fantasy Gun 19?? <unknown> + @@ -79629,13 +79631,13 @@ be better to redump them properly. --> - + 500 in 1 19?? <pirate> - - + + @@ -79645,13 +79647,13 @@ be better to redump them properly. --> - + 500 in 1 (Alt) 19?? <pirate> - - + + @@ -80589,7 +80591,7 @@ be better to redump them properly. --> - + 9999 in 1 19?? <pirate> @@ -80605,7 +80607,7 @@ be better to redump them properly. --> - + 9999 in 1 (Alt) 19?? <pirate> @@ -80621,7 +80623,7 @@ be better to redump them properly. --> - + 9999 in 1 (Alt 2) 19?? <pirate> @@ -80637,12 +80639,12 @@ be better to redump them properly. --> - + 9999 in 1 (Anim. Splash, Rev 13) 19?? <pirate> - + @@ -80669,13 +80671,13 @@ be better to redump them properly. --> - + 9999999 in 1 (Alt) 19?? <pirate> - - + + diff --git a/src/devices/bus/nes/multigame.cpp b/src/devices/bus/nes/multigame.cpp index e9f5481a6e6..32bb9f6d04d 100644 --- a/src/devices/bus/nes/multigame.cpp +++ b/src/devices/bus/nes/multigame.cpp @@ -78,6 +78,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_76IN1, nes_bmc_76in1_device, "nes_bmc_76in1 DEFINE_DEVICE_TYPE(NES_BMC_110IN1, nes_bmc_110in1_device, "nes_bmc_110in1", "NES Cart BMC 110 in 1 PCB") DEFINE_DEVICE_TYPE(NES_BMC_150IN1, nes_bmc_150in1_device, "nes_bmc_150in1", "NES Cart BMC 150 in 1 PCB") DEFINE_DEVICE_TYPE(NES_BMC_190IN1, nes_bmc_190in1_device, "nes_bmc_190in1", "NES Cart BMC 190 in 1 PCB") +DEFINE_DEVICE_TYPE(NES_BMC_500IN1, nes_bmc_500in1_device, "nes_bmc_500in1", "NES Cart BMC 500 in 1 PCB") DEFINE_DEVICE_TYPE(NES_BMC_800IN1, nes_bmc_800in1_device, "nes_bmc_800in1", "NES Cart BMC 800 in 1 PCB") DEFINE_DEVICE_TYPE(NES_BMC_1200IN1, nes_bmc_1200in1_device, "nes_bmc_1200in1", "NES Cart BMC 1200 in 1 PCB") DEFINE_DEVICE_TYPE(NES_BMC_GOLD150, nes_bmc_gold150_device, "nes_bmc_gold150", "NES Cart BMC Golden 150 in 1 PCB") @@ -279,7 +280,7 @@ nes_bmc_8157_device::nes_bmc_8157_device(const machine_config &mconfig, const ch { } -nes_bmc_hik300_device::nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +nes_bmc_hik300_device::nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_nrom_device(mconfig, NES_BMC_HIK300, tag, owner, clock) { } @@ -364,6 +365,11 @@ nes_bmc_150in1_device::nes_bmc_150in1_device(const machine_config &mconfig, cons { } +nes_bmc_500in1_device::nes_bmc_500in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_nrom_device(mconfig, NES_BMC_500IN1, tag, owner, clock) +{ +} + nes_bmc_800in1_device::nes_bmc_800in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : nes_nrom_device(mconfig, NES_BMC_800IN1, tag, owner, clock), m_mode(0) { @@ -802,16 +808,11 @@ void nes_bmc_8157_device::pcb_reset() m_latch = 0; } -void nes_bmc_hik300_device::device_start() -{ - common_start(); -} - void nes_bmc_hik300_device::pcb_reset() { - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0xff); - chr8(0xff, CHRROM); + prg16_89ab(0); + prg16_cdef(0); + chr8(0, CHRROM); } void nes_bmc_s700_device::device_start() @@ -2143,24 +2144,27 @@ u8 nes_bmc_8157_device::read_h(offs_t offset) iNES: mapper 212 - In MESS: Supported. + In MAME: Supported. -------------------------------------------------*/ -void nes_bmc_hik300_device::write_h(offs_t offset, uint8_t data) +u8 nes_bmc_hik300_device::read_m(offs_t offset) +{ + LOG_MMC(("bmc_hik300 read_m, offset: %04x, data: %02x\n", offset)); + return get_open_bus() | (!BIT(offset, 4) << 7); // some games have a protection MSB +} + +void nes_bmc_hik300_device::write_h(offs_t offset, u8 data) { LOG_MMC(("bmc_hik300 write_h, offset: %04x, data: %02x\n", offset, data)); - set_nt_mirroring(BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); - chr8(offset, CHRROM); + u8 bank = offset & 0x07; + u8 mode = BIT(offset, 14); + prg16_89ab(bank & ~mode); + prg16_cdef(bank | mode); - if (offset < 0x4000) - { - prg16_89ab(offset); - prg16_cdef(offset); - } - else - prg32(offset >> 1); + chr8(bank, CHRROM); + set_nt_mirroring(BIT(offset, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); } /*------------------------------------------------- @@ -2691,6 +2695,26 @@ void nes_bmc_150in1_device::write_h(offs_t offset, uint8_t data) set_nt_mirroring(BIT(offset, 0) ? PPU_MIRROR_HORZ: PPU_MIRROR_VERT); } +/*------------------------------------------------- + + BMC-500IN1 + + Unknown Bootleg Multigame Board + Games: 500 in 1, 2000 in 1 Unchained Melody, etc + + iNES: mapper 217 + + In MAME: Supported. + + -------------------------------------------------*/ + +void nes_bmc_500in1_device::write_h(offs_t offset, u8 data) +{ + LOG_MMC(("bmc500in1 write_h, offset: %04x, data: %02x\n", offset, data)); + prg32((offset >> 2) & 0x07); + chr8(offset & 0x07, CHRROM); +} + /*------------------------------------------------- BMC-800IN1 diff --git a/src/devices/bus/nes/multigame.h b/src/devices/bus/nes/multigame.h index 78fb551d36f..15c55f48b24 100644 --- a/src/devices/bus/nes/multigame.h +++ b/src/devices/bus/nes/multigame.h @@ -606,15 +606,12 @@ class nes_bmc_hik300_device : public nes_nrom_device { public: // construction/destruction - nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_m(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; - -protected: - // device-level overrides - virtual void device_start() override; }; @@ -923,6 +920,18 @@ protected: }; +// ======================> nes_bmc_500in1_device + +class nes_bmc_500in1_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_bmc_500in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_h(offs_t offset, uint8_t data) override; +}; + + // ======================> nes_bmc_800in1_device class nes_bmc_800in1_device : public nes_nrom_device @@ -1187,6 +1196,7 @@ DECLARE_DEVICE_TYPE(NES_BMC_76IN1, nes_bmc_76in1_device) DECLARE_DEVICE_TYPE(NES_BMC_110IN1, nes_bmc_110in1_device) DECLARE_DEVICE_TYPE(NES_BMC_150IN1, nes_bmc_150in1_device) DECLARE_DEVICE_TYPE(NES_BMC_190IN1, nes_bmc_190in1_device) +DECLARE_DEVICE_TYPE(NES_BMC_500IN1, nes_bmc_500in1_device) DECLARE_DEVICE_TYPE(NES_BMC_800IN1, nes_bmc_800in1_device) DECLARE_DEVICE_TYPE(NES_BMC_1200IN1, nes_bmc_1200in1_device) DECLARE_DEVICE_TYPE(NES_BMC_GOLD150, nes_bmc_gold150_device) diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index e3d2fcc3e72..b3a74f2be17 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -406,6 +406,7 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("bmc_110in1", NES_BMC_110IN1); device.option_add_internal("bmc_150in1", NES_BMC_150IN1); device.option_add_internal("bmc_190in1", NES_BMC_190IN1); + device.option_add_internal("bmc_500in1", NES_BMC_500IN1); device.option_add_internal("bmc_800in1", NES_BMC_800IN1); // mapper 236? device.option_add_internal("bmc_1200in1", NES_BMC_1200IN1); device.option_add_internal("bmc_gold150", NES_BMC_GOLD150); // mapper 235 with 2M PRG diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index 056be6f808a..6aefc3186b5 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -250,7 +250,7 @@ static const nes_mmc mmc_list[] = { 214, BMC_SUPERGUN_20IN1 }, { 215, SUPERGAME_BOOGERMAN }, { 216, RCM_GS2015 }, - { 217, BMC_GOLDENCARD_6IN1 }, + { 217, BMC_500IN1 }, { 218, NOCASH_NOCHR }, // 219 UNL-A9746 (according to Cah4e3's code, no dump available (yet) // 220 Unused - reserved for emulator debugging diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index 7b9cab3a353..54852c5c865 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -287,6 +287,7 @@ static const nes_pcb pcb_list[] = { "bmc_110in1", BMC_110IN1 }, { "bmc_150in1", BMC_150IN1 }, { "bmc_190in1", BMC_190IN1 }, + { "bmc_500in1", BMC_500IN1 }, { "bmc_800in1", BMC_800IN1 }, { "bmc_1200in1", BMC_1200IN1 }, { "bmc_2751", BMC_2751 }, diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index c3abf5fe199..044323a10b5 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -94,7 +94,7 @@ enum BMC_8IN1, BMC_15IN1, BMC_SUPERHIK_300IN1, BMC_SUPERGUN_20IN1, BMC_GOLDENCARD_6IN1, BMC_72IN1, BMC_SUPER_42IN1, BMC_76IN1, BMC_31IN1, BMC_22GAMES, BMC_20IN1, BMC_110IN1, - BMC_70IN1, BMC_800IN1, BMC_1200IN1, + BMC_70IN1, BMC_500IN1, BMC_800IN1, BMC_1200IN1, BMC_GKA, BMC_GKB, BMC_VT5201, BMC_BENSHIENG, BMC_60311C, BMC_80013B, BMC_810544C, BMC_830425C, BMC_NTD_03, BMC_G63IN1, BMC_FCGENJIN_8IN1, BMC_FK23C, BMC_FK23CA,