diff --git a/hash/nes.xml b/hash/nes.xml index d7417a031a8..9b551edaa4e 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -63396,6 +63396,27 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx + + 1995 New Series Super 2 in 1 (Asia) + 1995 + <pirate> + + + + + + + + + + + + + + + + + 2 in 1 - Sonic 5 + Earthworm Jim 3 (Asia) 19?? @@ -84356,6 +84377,25 @@ be better to redump them properly. --> + + 1993 New 860 in 1 Over-Valued Golden Version Games + 1993 + <pirate> + + + + + + + + + + + + + + + 9 in 1 (Journey to the West) diff --git a/src/devices/bus/nes/konami.cpp b/src/devices/bus/nes/konami.cpp index 5f20821a5b0..c35f4caed33 100644 --- a/src/devices/bus/nes/konami.cpp +++ b/src/devices/bus/nes/konami.cpp @@ -168,9 +168,6 @@ void nes_konami_vrc4_device::device_start() void nes_konami_vrc4_device::pcb_reset() { - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - chr8(0, m_chr_source); - m_irq_mode = 0; m_irq_prescale = 0; m_irq_enable = 0; @@ -183,7 +180,10 @@ void nes_konami_vrc4_device::pcb_reset() m_mmc_prg_bank[0] = 0; m_mmc_prg_bank[1] = 0; set_prg(); - std::fill(std::begin(m_mmc_vrom_bank), std::end(m_mmc_vrom_bank), 0x00); + + for (int i = 0; i < 8; i++) + m_mmc_vrom_bank[i] = i; + set_chr(); } void nes_konami_vrc7_device::pcb_reset() @@ -454,6 +454,12 @@ void nes_konami_vrc4_device::set_prg(int prg_base, int prg_mask) prg8_x(3, prg_base | prg_mask); } +void nes_konami_vrc4_device::set_chr(int chr_base, int chr_mask) +{ + for (int i = 0; i < 8; i++) + chr1_x(i, chr_base | (m_mmc_vrom_bank[i] & chr_mask), m_chr_source); +} + u8 nes_konami_vrc4_device::read_m(offs_t offset) { LOG_MMC(("VRC-4 read_m, offset: %04x\n", offset)); @@ -504,7 +510,7 @@ void nes_konami_vrc4_device::write_h(offs_t offset, u8 data) int shift = BIT(addr_lines, 0) * 4; int mask = shift ? 0x1f0 : 0x0f; m_mmc_vrom_bank[bank] = (m_mmc_vrom_bank[bank] & ~mask) | ((data << shift) & mask); - chr1_x(bank, m_mmc_vrom_bank[bank], m_chr_source); + set_chr(); break; } case 0x7000: diff --git a/src/devices/bus/nes/konami.h b/src/devices/bus/nes/konami.h index 2fd5a07c45d..add13c379d9 100644 --- a/src/devices/bus/nes/konami.h +++ b/src/devices/bus/nes/konami.h @@ -109,7 +109,10 @@ protected: void set_mirror(u8 data); void set_prg(int prg_base, int prg_mask); + void set_chr(int chr_base, int chr_mask); virtual void set_prg() { set_prg(0x00, 0x1f); } + virtual void set_chr() { set_chr(0x00, 0x1ff); } + u16 m_mmc_vrom_bank[8]; u8 m_mmc_prg_bank[2]; u8 m_prg_flip; diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index 33178c9fd3c..2b7113cb012 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -242,7 +242,6 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("waixing_h1", NES_WAIXING_H1); // FIXME: Made up boards the different WRAM protect banks (see Shen Mi Jin San Jiao) device.option_add_internal("waixing_i", NES_WAIXING_I); device.option_add_internal("waixing_j", NES_WAIXING_J); - device.option_add_internal("waixing_sgz", NES_WAIXING_SGZ); device.option_add_internal("waixing_sgzlz", NES_WAIXING_SGZLZ); device.option_add_internal("waixing_sec", NES_WAIXING_SEC); device.option_add_internal("waixing_ffv", NES_WAIXING_FFV); @@ -256,7 +255,6 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("yoko", NES_YOKO); device.option_add_internal("hengg_srich", NES_HENGG_SRICH); device.option_add_internal("hengg_xhzs", NES_HENGG_XHZS); - device.option_add_internal("hengg_shjy3", NES_HENGG_SHJY3); // mapper 253 device.option_add_internal("hes", NES_HES); device.option_add_internal("ks106c", NES_KS106C); // mapper 352 device.option_add_internal("ks202", NES_KS202); // mapper 56 @@ -293,18 +291,12 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("cc21", NES_CC21); device.option_add_internal("xiaozy", NES_XIAOZY); device.option_add_internal("edu2k", NES_EDU2K); - device.option_add_internal("t230", NES_T230); device.option_add_internal("jy830623c", NES_JY830623C); device.option_add_internal("unl_43272", NES_43272); // used in Gaau Hok Gwong Cheung - device.option_add_internal("tf1201", NES_TF1201); - device.option_add_internal("th21311", NES_TH21311); - device.option_add_internal("unl_cfight", NES_CITYFIGHT); // used by City Fighter IV device.option_add_internal("ninjaryu", NES_NINJARYU); // used by Ninja Ryukenden Chinese device.option_add_internal("unl_eh8813a", NES_EH8813A); // used by Dr. Mario II device.option_add_internal("zemina", NES_ZEMINA); // mapper 190 - Magic Kid GooGoo // misc bootleg boards - device.option_add_internal("ax40g", NES_AX40G); - device.option_add_internal("ax5705", NES_AX5705); device.option_add_internal("sc127", NES_SC127); device.option_add_internal("mariobaby", NES_MARIOBABY); device.option_add_internal("asnicol", NES_ASN); @@ -316,8 +308,6 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("smb2jb", NES_SMB2JB); device.option_add_internal("yung08", NES_YUNG08); device.option_add_internal("btl_0353", NES_0353); // used by Lucky (Roger) Rabbit FDS conversion - device.option_add_internal("btl_2yudb", NES_2YUDB); - device.option_add_internal("btl_900218", NES_900218); device.option_add_internal("09034a", NES_09034A); device.option_add_internal("l001", NES_L001); device.option_add_internal("batmanfs", NES_BATMANFS); @@ -336,7 +326,6 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("unl_lh51", NES_LH51); // used in Ai Senshi Nicol alt 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("sgpipe", NES_SHUIGUAN); // mapper 183 device.option_add_internal("rt01", NES_RT01); // misc MMC3 clone boards device.option_add_internal("dbz5", NES_REX_DBZ5); @@ -367,6 +356,21 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("sachen_shero", NES_SACHEN_SHERO); device.option_add_internal("sachen_zgdh", NES_SACHEN_ZGDH); device.option_add_internal("a9746", NES_A9746); // mapper 219 +// misc VRC clone boards + device.option_add_internal("btl_2yudb", NES_2YUDB); + device.option_add_internal("btl_900218", NES_900218); + device.option_add_internal("ax40g", NES_AX40G); + device.option_add_internal("ax5705", NES_AX5705); + device.option_add_internal("bmc_830506c", NES_BMC_830506C); + device.option_add_internal("bmc_831128c", NES_BMC_831128C); + device.option_add_internal("bmc_kl06", NES_BMC_KL06); + device.option_add_internal("unl_cfight", NES_CITYFIGHT); // used by City Fighter IV + device.option_add_internal("hengg_shjy3", NES_HENGG_SHJY3); // mapper 253 + device.option_add_internal("sgpipe", NES_SHUIGUAN); // mapper 183 + device.option_add_internal("t230", NES_T230); + device.option_add_internal("tf1201", NES_TF1201); + device.option_add_internal("th21311", NES_TH21311); + device.option_add_internal("waixing_sgz", NES_WAIXING_SGZ); // misc multigame cart boards device.option_add_internal("benshieng", NES_BENSHIENG); device.option_add_internal("action52", NES_ACTION52); @@ -387,7 +391,6 @@ void nes_cart(device_slot_interface &device) 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); device.option_add_internal("bmc_850437c", NES_BMC_850437C); device.option_add_internal("bmc_891227", NES_BMC_891227); diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index 22a21883a55..c1b966023c9 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -482,7 +482,7 @@ static const nes_mmc mmc_list[] = // 444 NC7000M multicart // 445 DG574B MMC3-compatible multicart // 446 Mindkids SMD172B_FPGA board - // 447 VRC4-based KL-06 multicart + { 447, BMC_KL06 }, // 448 VRC4-based 830768C multicart // 449 Super Games King multicart // 450 VRC2-based YY841157C multicart @@ -506,7 +506,7 @@ static const nes_mmc mmc_list[] = { 525, KAISER_KS7021A }, // GetsuFumaDen pirate (and maybe a Contra?) // 526 sangochu clone not yet in nes.xml? { 527, UNL_AX40G }, // Fudou Myouou Den pirate - // 528 1995 New Series Super 2-in-1 multicart not in nes.xml + { 528, BMC_831128C }, // 1995 New Series Super 2-in-1 { 529, UNL_T230 }, // Datach Dragon Ball Z IV bootleg { 530, UNL_AX5705 }, // Super Mario Bros Pocker Mali // 531 Used by Asder PC-95 Famicom clone built into a keyboard diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index a41bb0f5629..c520864c829 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -150,7 +150,6 @@ static const nes_pcb pcb_list[] = { "waixing_h1", WAIXING_TYPE_H1 }, { "waixing_i", WAIXING_TYPE_I }, { "waixing_j", WAIXING_TYPE_J }, - { "waixing_sgz", WAIXING_SGZ }, { "waixing_sgzlz", WAIXING_SGZLZ }, { "waixing_sec", WAIXING_SECURITY }, { "waixing_ffv", WAIXING_FFV }, @@ -164,7 +163,6 @@ static const nes_pcb pcb_list[] = { "yoko", YOKO_BOARD }, { "hengg_srich", HENGG_SRICH }, { "hengg_xhzs", HENGG_XHZS }, - { "hengg_shjy3", HENGG_SHJY3 }, // mapper 253 { "hes", HES_BOARD }, { "ks106c", KAISER_KS106C }, // mapper 352 { "ks202", KAISER_KS202 }, // mapper 56 @@ -201,12 +199,24 @@ static const nes_pcb pcb_list[] = { "cc21", UNL_CC21 }, { "xiaozy", UNL_XIAOZY }, { "edu2k", UNL_EDU2K }, - { "t230", UNL_T230 }, { "jy830623c", UNL_JY830623C }, { "zemina", ZEMINA_BOARD }, - // misc bootleg boards + // misc VRC clone boards + { "btl_2yudb", BTL_2YUDB }, + { "btl_900218", BTL_900218 }, // pirate The Lord of King { "ax40g", UNL_AX40G }, { "ax5705", UNL_AX5705 }, + { "bmc_830506c", BMC_830506C }, + { "bmc_831128c", BMC_831128C }, + { "bmc_kl06", BMC_KL06 }, + { "unl_cfight", UNL_CITYFIGHT }, + { "hengg_shjy3", HENGG_SHJY3 }, // mapper 253 + { "sgpipe", BTL_SHUIGUAN }, + { "t230", UNL_T230 }, + { "tf1201", UNL_TF1201 }, + { "th21311", UNL_TH21311 }, + { "waixing_sgz", WAIXING_SGZ }, + // misc bootleg boards { "sc127", UNL_SC127 }, { "mariobaby", BTL_MARIOBABY }, { "asnicol", BTL_AISENSHINICOL }, @@ -218,8 +228,6 @@ static const nes_pcb pcb_list[] = { "smb2jb", BTL_SMB2JB }, { "yung08", BTL_YUNG08 }, { "btl_0353", BTL_0353 }, - { "btl_2yudb", BTL_2YUDB }, - { "btl_900218", BTL_900218 }, // pirate The Lord of King { "09034a", BTL_09034A }, { "l001", BTL_L001 }, { "batmanfs", BTL_BATMANFS }, @@ -266,7 +274,6 @@ static const nes_pcb pcb_list[] = { "bmc_810544c", BMC_810544C }, { "bmc_82ab", BMC_82AB }, { "bmc_830425c", BMC_830425C }, - { "bmc_830506c", BMC_830506C }, { "bmc_830928c", BMC_830928C }, { "bmc_850437c", BMC_850437C }, { "bmc_891227", BMC_891227 }, @@ -386,12 +393,8 @@ static const nes_pcb pcb_list[] = { "unl_lh53", UNL_LH53 }, { "unl_ac08", UNL_AC08 }, { "unl_malisb", UNL_MALISB }, - { "sgpipe", BTL_SHUIGUAN }, { "rt01", UNL_RT01 }, // Russian Test Cart { "unl_43272", UNL_43272 }, - { "tf1201", UNL_TF1201 }, - { "th21311", UNL_TH21311 }, - { "unl_cfight", UNL_CITYFIGHT }, { "ninjaryu", UNL_NINJARYU }, { "unl_eh8813a", UNL_EH8813A }, // Dr. Mario II { "nocash_nochr", NOCASH_NOCHR }, diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index 5ff2747254f..ea46c273366 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -86,7 +86,7 @@ enum TXC_MJBLOCK, TXC_STRIKEW, TXC_TW, // Multigame Carts BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_A88S1, BMC_F15, BMC_F600, BMC_L6IN1, - BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208, BMC_JY302, BMC_KC885, + BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208, BMC_JY302, BMC_KC885, BMC_KL06, BMC_S24IN1SC03, BMC_T262, BMC_TELETUBBIES, BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1, BMC_MARIOPARTY_7IN1, BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646, @@ -105,7 +105,7 @@ enum BMC_S009, BMC_TH22913, BMC_TH2348, BMC_11160, BMC_G146, BMC_2751, BMC_8157, BMC_00202650, BMC_411120C, BMC_810305C, BMC_820720C, BMC_830118C, - BMC_830832C, BMC_YY841101C, BMC_YY841155C, + BMC_830832C, BMC_831128C, BMC_YY841101C, BMC_YY841155C, BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160, BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_K3071, BMC_SA005A, BMC_TF2740, BMC_TJ03, BMC_RESETSXROM, BMC_RESETTXROM, BMC_TECHLINE9IN1, diff --git a/src/devices/bus/nes/vrc_clones.cpp b/src/devices/bus/nes/vrc_clones.cpp index 93be86cc3f7..c29ba0e588d 100644 --- a/src/devices/bus/nes/vrc_clones.cpp +++ b/src/devices/bus/nes/vrc_clones.cpp @@ -33,6 +33,8 @@ DEFINE_DEVICE_TYPE(NES_900218, nes_900218_device, "nes_900218", " DEFINE_DEVICE_TYPE(NES_AX40G, nes_ax40g_device, "nes_ax40g", "NES Cart UNL-AX-40G PCB") DEFINE_DEVICE_TYPE(NES_AX5705, nes_ax5705_device, "nes_ax5705", "NES Cart AX5705 PCB") DEFINE_DEVICE_TYPE(NES_BMC_830506C, nes_bmc_830506c_device, "nes_bmc_830506c", "NES Cart BMC 830506C PCB") +DEFINE_DEVICE_TYPE(NES_BMC_831128C, nes_bmc_831128c_device, "nes_bmc_831128c", "NES Cart BMC 831128C PCB") +DEFINE_DEVICE_TYPE(NES_BMC_KL06, nes_bmc_kl06_device, "nes_bmc_kl06", "NES Cart BMC KL-06 PCB") DEFINE_DEVICE_TYPE(NES_CITYFIGHT, nes_cityfight_device, "nes_cityfight", "NES Cart City Fighter PCB") DEFINE_DEVICE_TYPE(NES_SHUIGUAN, nes_shuiguan_device, "nes_shuiguan", "NES Cart Shui Guan Pipe Pirate PCB") DEFINE_DEVICE_TYPE(NES_T230, nes_t230_device, "nes_t230", "NES Cart T-230 PCB") @@ -67,6 +69,16 @@ nes_bmc_830506c_device::nes_bmc_830506c_device(const machine_config &mconfig, co { } +nes_bmc_831128c_device::nes_bmc_831128c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_konami_vrc4_device(mconfig, NES_BMC_831128C, tag, owner, clock), m_reg(0) +{ +} + +nes_bmc_kl06_device::nes_bmc_kl06_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_konami_vrc4_device(mconfig, NES_BMC_KL06, tag, owner, clock), m_reg(0) +{ +} + nes_cityfight_device::nes_cityfight_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_konami_vrc4_device(mconfig, NES_CITYFIGHT, tag, owner, clock) { @@ -180,6 +192,36 @@ void nes_bmc_830506c_device::pcb_reset() nes_konami_vrc4_device::pcb_reset(); } +void nes_bmc_831128c_device::device_start() +{ + nes_konami_vrc4_device::device_start(); + save_item(NAME(m_reg)); +} + +void nes_bmc_831128c_device::pcb_reset() +{ + nes_konami_vrc4_device::pcb_reset(); + + m_reg = 0; + prg32((m_prg_chunks >> 1) - 1); +} + +void nes_bmc_kl06_device::device_start() +{ + nes_konami_vrc4_device::device_start(); + save_item(NAME(m_reg)); + + // VRC4 pins 3 and 4 + m_vrc_ls_prg_a = 3; // A1 + m_vrc_ls_prg_b = 2; // A0 +} + +void nes_bmc_kl06_device::pcb_reset() +{ + m_reg = 0; + nes_konami_vrc4_device::pcb_reset(); +} + void nes_cityfight_device::device_start() { nes_konami_vrc4_device::device_start(); @@ -697,3 +739,128 @@ void nes_bmc_830506c_device::write_h(offs_t offset, u8 data) set_prg(); } } + +/*------------------------------------------------- + + Board BMC-831128C + + Games: 1995 New Series Super 2 in 1 + + Weird clone that seems to be part Konami VRC4 (IRQ), + and part Sunsoft FME-7 (banking/mirroring). + + NES 2.0: mapper 528 + + In MAME: Supported. + + -------------------------------------------------*/ + + +u8 nes_bmc_831128c_device::read_m(offs_t offset) +{ +// LOG_MMC(("bmc_831128c read_m, offset: %04x, data: %02x\n", offset, data)); + + if (m_reg == 1) + return device_nes_cart_interface::read_m(offset); + else + return m_prg[(m_reg * 0x2000 + offset) & (m_prg_size - 1)]; +} + +void nes_bmc_831128c_device::write_m(offs_t offset, u8 data) +{ +// LOG_MMC(("bmc_831128c write_m, offset: %04x, data: %02x\n", offset, data)); + + if (m_reg == 1) + device_nes_cart_interface::write_m(offset, data); +} + +void nes_bmc_831128c_device::write_h(offs_t offset, u8 data) +{ + LOG_MMC(("bmc_831128c write_h, offset: %04x, data: %02x\n", offset, data)); + + u8 page = offset >> 12; + if (page != 2 && page != 4) // ignore writes except $Axxx and $Cxxx + return; + + int outer = BIT(offset, 14) << 4; + prg16_cdef(outer ? m_prg_chunks - 1 : 7); + + u8 reg = offset & 0x0f; + switch (reg) + { + case 0x0: case 0x1: case 0x2: case 0x3: + case 0x4: case 0x5: case 0x6: case 0x7: + chr1_x(reg, (outer << 4) | data, m_chr_source); + break; + case 0x8: + m_reg = data; + break; + case 0x9: + case 0xa: + prg8_x(reg - 9, outer + (data & (outer | 0x0f))); + break; + // case 0xb: do nothing + case 0xc: + set_mirror(data); + break; + case 0xd: + irq_ctrl_w(data); + break; + case 0xe: + irq_ack_w(); + break; + case 0xf: + m_irq_count_latch = data; + break; + } +} + +/*------------------------------------------------- + + Board BMC-KL-06 + + Games: 1993 New 860 in 1 Over-Valued Golden Version Games + + VRC4 clone with banking for multicart menu. + + NES 2.0: mapper 447 + + In MAME: Supported. + + TODO: There must be jumper settings since this is + showing up as a 1650 in 1. + + -------------------------------------------------*/ + +void nes_bmc_kl06_device::set_prg() +{ + u8 outer = (m_reg & 0x03) << 4; + + if (BIT(m_reg, 2)) + { + u8 bank_lo = outer | m_mmc_prg_bank[0]; + u8 bank_hi = outer | m_mmc_prg_bank[1]; + u8 mode = ~m_reg & 0x02; + prg8_89(bank_lo & ~mode); + prg8_ab(bank_hi & ~mode); + prg8_cd(bank_lo | mode); + prg8_ef(bank_hi | mode); + } + else + nes_konami_vrc4_device::set_prg(outer, 0x0f); +} + +void nes_bmc_kl06_device::write_m(offs_t offset, u8 data) +{ + LOG_MMC(("bmc_kl06 write_m, offset: %04x, data: %02x\n", offset, data)); + + // 2K RAM for Crisis Force overlays control register + nes_konami_vrc4_device::write_m(offset, data); + + if (!(m_reg & 1)) // lock bit + { + m_reg = offset; + set_prg(); + set_chr(); + } +} diff --git a/src/devices/bus/nes/vrc_clones.h b/src/devices/bus/nes/vrc_clones.h index 5ff15d806e4..856e9b34503 100644 --- a/src/devices/bus/nes/vrc_clones.h +++ b/src/devices/bus/nes/vrc_clones.h @@ -113,6 +113,53 @@ private: }; +// ======================> nes_bmc_831128c_device + +class nes_bmc_831128c_device : public nes_konami_vrc4_device +{ +public: + // construction/destruction + nes_bmc_831128c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_m(offs_t offset) override; + virtual void write_m(offs_t offset, u8 data) 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; + +private: + u8 m_reg; +}; + + +// ======================> nes_bmc_kl06_device + +class nes_bmc_kl06_device : public nes_konami_vrc4_device +{ +public: + // construction/destruction + nes_bmc_kl06_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_m(offs_t offset, u8 data) override; + + virtual void pcb_reset() override; + +protected: + // device-level overrides + virtual void device_start() override; + + virtual void set_prg() override; + virtual void set_chr() override { nes_konami_vrc4_device::set_chr((m_reg & 0x03) << 7, 0x7f); } + +private: + u8 m_reg; +}; + + // ======================> nes_cityfight_device class nes_cityfight_device : public nes_konami_vrc4_device @@ -249,6 +296,8 @@ DECLARE_DEVICE_TYPE(NES_900218, nes_900218_device) DECLARE_DEVICE_TYPE(NES_AX40G, nes_ax40g_device) DECLARE_DEVICE_TYPE(NES_AX5705, nes_ax5705_device) DECLARE_DEVICE_TYPE(NES_BMC_830506C, nes_bmc_830506c_device) +DECLARE_DEVICE_TYPE(NES_BMC_831128C, nes_bmc_831128c_device) +DECLARE_DEVICE_TYPE(NES_BMC_KL06, nes_bmc_kl06_device) DECLARE_DEVICE_TYPE(NES_CITYFIGHT, nes_cityfight_device) DECLARE_DEVICE_TYPE(NES_HENGG_SHJY3, nes_hengg_shjy3_device) DECLARE_DEVICE_TYPE(NES_SHUIGUAN, nes_shuiguan_device)