diff options
author | 0kmg <9137159+0kmg@users.noreply.github.com> | 2021-09-16 22:32:52 -0800 |
---|---|---|
committer | 0kmg <9137159+0kmg@users.noreply.github.com> | 2021-09-18 02:16:51 -0800 |
commit | 8327dbefb5b37c42ce94679c4be1c2629ff63dc0 (patch) | |
tree | 6914fc0ee7d1d9d2e09013b0e13876e1c469adcc /src | |
parent | 4c9efbc43bff8ce2626397f5443d918265077dd5 (diff) |
bus/nes: Fixed graphics glitches for BMC-GKB board multicarts.
- Removed code for both BMC-NOVEL1 and BMC-NOVEL2 which are indentical to BMC-21IN1 and BMC-GKB, respectively. This fixes graphics for the NOVEL2 game as well.
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/bus/nes/multigame.cpp | 115 | ||||
-rw-r--r-- | src/devices/bus/nes/multigame.h | 48 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_carts.cpp | 2 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_ines.hxx | 6 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_pcb.hxx | 2 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_slot.h | 4 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_unif.hxx | 2 |
7 files changed, 29 insertions, 150 deletions
diff --git a/src/devices/bus/nes/multigame.cpp b/src/devices/bus/nes/multigame.cpp index 18ae4573048..1bca4da8c9f 100644 --- a/src/devices/bus/nes/multigame.cpp +++ b/src/devices/bus/nes/multigame.cpp @@ -37,8 +37,6 @@ DEFINE_DEVICE_TYPE(NES_KN42, nes_kn42_device, "nes_kn42", DEFINE_DEVICE_TYPE(NES_N625092, nes_n625092_device, "nes_n625092", "NES Cart N625092 PCB") DEFINE_DEVICE_TYPE(NES_A65AS, nes_a65as_device, "nes_a65as", "NES Cart A65AS PCB") DEFINE_DEVICE_TYPE(NES_T262, nes_t262_device, "nes_t262", "NES Cart T-262 PCB") -DEFINE_DEVICE_TYPE(NES_NOVEL1, nes_novel1_device, "nes_novel1", "NES Cart Novel Diamond Type 1 PCB") -DEFINE_DEVICE_TYPE(NES_NOVEL2, nes_novel2_device, "nes_novel2", "NES Cart Novel Diamond Type 2 PCB") DEFINE_DEVICE_TYPE(NES_STUDYNGAME, nes_studyngame_device, "nes_studyngame", "NES Cart Study n Game PCB") DEFINE_DEVICE_TYPE(NES_SUPERGUN20IN1, nes_sgun20in1_device, "nes_sgun20in1", "NES Cart Supergun 20 in 1 PCB") DEFINE_DEVICE_TYPE(NES_VT5201, nes_vt5201_device, "nes_vt5201", "NES Cart VT5201 PCB") @@ -155,16 +153,6 @@ nes_t262_device::nes_t262_device(const machine_config &mconfig, const char *tag, { } -nes_novel1_device::nes_novel1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nes_nrom_device(mconfig, NES_NOVEL1, tag, owner, clock) -{ -} - -nes_novel2_device::nes_novel2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nes_nrom_device(mconfig, NES_NOVEL2, tag, owner, clock) -{ -} - nes_studyngame_device::nes_studyngame_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : nes_nrom_device(mconfig, NES_STUDYNGAME, tag, owner, clock) { @@ -230,7 +218,7 @@ nes_bmc_gka_device::nes_bmc_gka_device(const machine_config &mconfig, const char { } -nes_bmc_gkb_device::nes_bmc_gkb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +nes_bmc_gkb_device::nes_bmc_gkb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_nrom_device(mconfig, NES_BMC_GKB, tag, owner, clock) { } @@ -559,31 +547,6 @@ void nes_t262_device::pcb_reset() m_latch = 0; } -void nes_novel1_device::device_start() -{ - common_start(); -} - -void nes_novel1_device::pcb_reset() -{ - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0); - chr8(0, m_chr_source); - set_nt_mirroring(PPU_MIRROR_VERT); -} - -void nes_novel2_device::device_start() -{ - common_start(); -} - -void nes_novel2_device::pcb_reset() -{ - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0); - chr8(0, m_chr_source); -} - void nes_studyngame_device::device_start() { common_start(); @@ -737,18 +700,6 @@ void nes_bmc_gka_device::pcb_reset() m_reg[0] = m_reg[1] = 0; } -void nes_bmc_gkb_device::device_start() -{ - common_start(); -} - -void nes_bmc_gkb_device::pcb_reset() -{ - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0); - chr8(0, m_chr_source); -} - void nes_bmc_k3036_device::pcb_reset() { prg16_89ab(0); @@ -1417,39 +1368,6 @@ void nes_t262_device::write_h(offs_t offset, u8 data) /*------------------------------------------------- - BMC-NOVELDIAMOND and BMC-999999in1 - - Unknown Bootleg Multigame Board - Games: I only found 'Novel Diamond 999999-in-1.unf' using - this mapper (hence the code is used for BMC_NOVELDIAMOND - board). The code is included here in case a mapper 54 - dump arises. - - iNES: mappers 54 and 213 - - In MESS: Partial Support. - - -------------------------------------------------*/ - -// Are this correct or should they work the same? -void nes_novel1_device::write_h(offs_t offset, uint8_t data) -{ - LOG_MMC(("novel1 write_h, offset: %04x, data: %02x\n", offset, data)); - - prg32(offset & 0x03); - chr8(offset & 0x07, CHRROM); -} - -void nes_novel2_device::write_h(offs_t offset, uint8_t data) -{ - LOG_MMC(("novel2 write_h, offset: %04x, data: %02x\n", offset, data)); - - prg32(offset >> 1); - chr8(offset >> 3, CHRROM); -} - -/*------------------------------------------------- - Board UNL-STUDYNGAME Games: Study n Game 32 in 1 @@ -1810,23 +1728,32 @@ void nes_bmc_gka_device::write_h(offs_t offset, u8 data) Board BMC-GKB Unknown Bootleg Multigame Board - Games: 68 in 1, 73 in 1, 98 in 1 + Games: 68 in 1, 73 in 1, 98 in 1, and many others iNES: mapper 58 - In MESS: Supported. + In MAME: Supported. + + TODO: Investigate why Jewel on mc_wq55 crashes after + its title screen. It further invokes write_h, causing + bank switching (and these games are all NROM/CNROM so + they should never switch PRG once the menu loads them), + but ignoring those writes doesn't fix the problem. Is + the game non-working on hardware? A bad dump? -------------------------------------------------*/ -void nes_bmc_gkb_device::write_h(offs_t offset, uint8_t data) +void nes_bmc_gkb_device::write_h(offs_t offset, u8 data) { - uint8_t bank = (offset & 0x40) ? 0 : 1; LOG_MMC(("bmc_gkb write_h, offset: %04x, data: %02x\n", offset, data)); - prg16_89ab(offset & ~bank); - prg16_cdef(offset | bank); - chr8(offset >> 3, m_chr_source); - set_nt_mirroring(BIT(data, 7) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); + u8 bank = offset & 0x07; + u8 mode = !BIT(offset, 6); + prg16_89ab(bank & ~mode); + prg16_cdef(bank | mode); + + chr8((offset >> 3) & 0x07, CHRROM); + set_nt_mirroring(BIT(offset, 7) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); } /*------------------------------------------------- @@ -2406,10 +2333,10 @@ void nes_bmc_20in1_device::write_h(offs_t offset, u8 data) /*------------------------------------------------- - BMC-21IN1 + BMC-21IN1, BMC-NOVELDIAMOND Unknown Bootleg Multigame Board - Games: 8 in 1, 21 in 1 + Games: 8 in 1, 21 in 1, 9999999 in 1 iNES: mapper 201 @@ -2422,7 +2349,7 @@ void nes_bmc_21in1_device::write_h(offs_t offset, u8 data) LOG_MMC(("bmc_21in1 write_h, offset: %04x, data: %02x\n", offset, data)); prg32(offset & 0x03); - chr8(offset & 0x03, CHRROM); + chr8(offset & 0x07, CHRROM); } /*------------------------------------------------- diff --git a/src/devices/bus/nes/multigame.h b/src/devices/bus/nes/multigame.h index 51cfb3be3d9..5d7f2838988 100644 --- a/src/devices/bus/nes/multigame.h +++ b/src/devices/bus/nes/multigame.h @@ -176,42 +176,6 @@ private: }; -// ======================> nes_novel1_device - -class nes_novel1_device : public nes_nrom_device -{ -public: - // construction/destruction - nes_novel1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - 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; -}; - - -// ======================> nes_novel2_device - -class nes_novel2_device : public nes_nrom_device -{ -public: - // construction/destruction - nes_novel2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - 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; -}; - - // ======================> nes_studyngame_device class nes_studyngame_device : public nes_nrom_device @@ -449,15 +413,9 @@ class nes_bmc_gkb_device : public nes_nrom_device { public: // construction/destruction - nes_bmc_gkb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual void write_h(offs_t offset, uint8_t data) override; - - virtual void pcb_reset() override; + nes_bmc_gkb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); -protected: - // device-level overrides - virtual void device_start() override; + virtual void write_h(offs_t offset, u8 data) override; }; @@ -1161,8 +1119,6 @@ DECLARE_DEVICE_TYPE(NES_KN42, nes_kn42_device) DECLARE_DEVICE_TYPE(NES_N625092, nes_n625092_device) DECLARE_DEVICE_TYPE(NES_A65AS, nes_a65as_device) DECLARE_DEVICE_TYPE(NES_T262, nes_t262_device) -DECLARE_DEVICE_TYPE(NES_NOVEL1, nes_novel1_device) -DECLARE_DEVICE_TYPE(NES_NOVEL2, nes_novel2_device) DECLARE_DEVICE_TYPE(NES_STUDYNGAME, nes_studyngame_device) DECLARE_DEVICE_TYPE(NES_SUPERGUN20IN1, nes_sgun20in1_device) DECLARE_DEVICE_TYPE(NES_VT5201, nes_vt5201_device) diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index e4fd93c2ddb..ac1ee9ef844 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -365,8 +365,6 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("n625092", NES_N625092); device.option_add_internal("a65as", NES_A65AS); device.option_add_internal("t262", NES_T262); - device.option_add_internal("novel1", NES_NOVEL1); - device.option_add_internal("novel2", NES_NOVEL2); // mapper 213... same as BMC-NOVELDIAMOND9999999IN1 board? device.option_add_internal("studyngame", NES_STUDYNGAME); // mapper 39 device.option_add_internal("sgun20in1", NES_SUPERGUN20IN1); device.option_add_internal("bmc_vt5201", NES_VT5201); // mapper 59 diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index cd5d373c36e..b98f3ac5284 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -86,7 +86,7 @@ static const nes_mmc mmc_list[] = { 51, BMC_BALLGAMES_11IN1 }, { 52, BMC_GOLD_7IN1 }, { 53, SVISION16_BOARD }, - { 54, BMC_NOVEL1 }, + { 54, BMC_21IN1 }, // duplicate of mapper 201, though possibly should be "Unused" { 55, UNL_MMALEE }, // Genius SMB { 56, KAISER_KS202 }, { 57, BMC_GKA }, @@ -246,7 +246,7 @@ static const nes_mmc mmc_list[] = { 210, NAMCOT_175 }, { 211, JYCOMPANY_B }, { 212, BMC_SUPERHIK_300IN1 }, - { 213, BMC_NOVEL2 }, + { 213, BMC_GKB }, // duplicate of mapper 58 { 214, BMC_SUPERGUN_20IN1 }, { 215, UNL_8237 }, // and UNL_8237A { 216, RCM_GS2015 }, @@ -288,7 +288,7 @@ static const nes_mmc mmc_list[] = { 252, WAIXING_SGZ }, // 253 Super 8-in-1 99 King Fighter?? - Unsupported { 254, BTL_PIKACHUY2K }, - { 255, BMC_72IN1 }, + { 255, BMC_72IN1 }, // duplicate of mapper 225 // NES 2.0 // 256 OneBus Famiclones diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index e2253dc3321..ae24bc1e7e0 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -250,8 +250,6 @@ static const nes_pcb pcb_list[] = { "n625092", UNL_N625092 }, { "a65as", BMC_A65AS }, { "t262", BMC_T262 }, - { "novel1", BMC_NOVEL1 }, - { "novel2", BMC_NOVEL2 }, // mapper 213... same as BMC-NOVELDIAMOND9999999IN1 board? { "studyngame", UNL_STUDYNGAME }, // mapper 39 { "sgun20in1", BMC_SUPERGUN_20IN1 }, { "bmc_vt5201", BMC_VT5201 }, // mapper 59 diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index c9cb6873549..ac5a12889b2 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -86,8 +86,8 @@ enum TXC_22110, TXC_22211, TXC_COMMANDOS, TXC_DUMARACING, TXC_MJBLOCK, TXC_STRIKEW, TXC_TW, // Multigame Carts - BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_A88S1, BMC_F15, BMC_GN45, - BMC_HIK8IN1, BMC_NOVEL1, BMC_NOVEL2, BMC_S24IN1SC03, BMC_T262, + BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_A88S1, BMC_F15, + BMC_GN45, BMC_HIK8IN1, BMC_S24IN1SC03, BMC_T262, BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1, BMC_MARIOPARTY_7IN1, BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646, BMC_36IN1, BMC_21IN1, BMC_150IN1, BMC_35IN1, BMC_64IN1, diff --git a/src/devices/bus/nes/nes_unif.hxx b/src/devices/bus/nes/nes_unif.hxx index f0ebdfe63e2..55e8319dd4e 100644 --- a/src/devices/bus/nes/nes_unif.hxx +++ b/src/devices/bus/nes/nes_unif.hxx @@ -97,7 +97,7 @@ static const unif unif_list[] = { "BMC-A65AS", 0, 0, CHRRAM_8, BMC_A65AS}, { "BMC-GS-2004", 0, 0, CHRRAM_8, RCM_GS2004}, { "BMC-GS-2013", 0, 0, CHRRAM_8, RCM_GS2013}, - { "BMC-NOVELDIAMOND9999999IN1", 0, 0, CHRRAM_0, BMC_NOVEL1}, + { "BMC-NOVELDIAMOND9999999IN1", 0, 0, CHRRAM_0, BMC_21IN1}, { "BMC-SUPER24IN1SC03", 8, 0, CHRRAM_8, BMC_S24IN1SC03}, { "BMC-SUPERHIK8IN1", 8, 0, CHRRAM_0, BMC_HIK8IN1}, { "BMC-T-262", 0, 0, CHRRAM_8, BMC_T262}, |