bus/nes: Added support for K-3071, S-009, and TH2348 boards. (#9498)

New working software list additions (nes.xml)
-----------------------------------
Chāozhí Gāo K Jīnkǎ 110 in 1 [Consolethinks]
8 in 1 (0801) [Consolethinks]
Golden 8 in 1 [Consolethinks]
This commit is contained in:
0kmg 2022-04-01 18:00:33 -08:00 committed by GitHub
parent 976ec5da28
commit 2aa80b9d07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 288 additions and 10 deletions

View File

@ -80675,6 +80675,23 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_110gc">
<description>Chāozhí Gāo K Jīnkǎ 110 in 1</description>
<year>1992</year>
<publisher>&lt;pirate&gt;</publisher>
<info name="alt_title" value="超値高K金卡 110-in-1"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_k3071" />
<feature name="pcb_model" value="K-3071" />
<dataarea name="prg" size="524288">
<rom name="1992 super high k gold card 110-in-1.prg" size="524288" crc="d7b968f1" sha1="aca6418a6fb2ddaeef876a77544a8286c8aceb4a" />
</dataarea>
<dataarea name="chr" size="262144">
<rom name="1992 super high k gold card 110-in-1.chr" size="262144" crc="72e35586" sha1="45413b247854bb03400ce54deb22088f0249ccc1" />
</dataarea>
</part>
</software>
<software name="mc_115">
<description>115 in 1</description>
<year>19??</year>
@ -83974,6 +83991,23 @@ be better to redump them properly. -->
</part>
</software>
<!-- Menu requires Dendy timing. It bounces on both NTSC and PAL. -->
<software name="mc_8x801">
<description>8 in 1 (0801)</description>
<year>1994</year>
<publisher>Subor</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_s009" />
<feature name="pcb_model" value="S-009" />
<dataarea name="prg" size="1048576">
<rom name="1994 8-in-1 (xiaobawang 0801).prg" size="1048576" crc="081e8023" sha1="7f97dfe62fbf0315bb5f70569912d8546d5bdfca" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
</part>
</software>
<software name="mc_8a20">
<description>8 in 1 (A-020)</description>
<year>19??</year>
@ -84661,6 +84695,22 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_goln8">
<description>Golden 8 in 1</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_th2348" />
<feature name="pcb_model" value="TH2348" />
<dataarea name="prg" size="1048576">
<rom name="golden 8-in-1 (ntdec).prg" size="1048576" crc="c74e3a53" sha1="7fa38ab2f0960401b7a2751a00f6b45630e36105" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
</part>
</software>
<software name="mc_gc6">
<description>Golden Card 6 in 1</description>
<year>19??</year>

View File

@ -8,9 +8,9 @@
Here we emulate several PCBs used in multigame pirate carts (not MMC-3 based)
TODO: Investigate further Gunsmoke on mc_8et40 and mc_2gn91. Both exhibit the
same bug where enemies/barrels don't appear until they are halfway down the
screen. They are both almost the same minor hack of the US release.
TODO: Investigate further Gunsmoke on mc_8et40, mc_2gn91, mc_8x801. All have
the same bug where enemies/barrels don't appear until they are halfway down
the screeen. They all seem to be a minor hack of the US release.
***********************************************************************************************************/
@ -65,8 +65,11 @@ DEFINE_DEVICE_TYPE(NES_BMC_HP898F, nes_bmc_hp898f_device, "nes_bmc_hp898
DEFINE_DEVICE_TYPE(NES_BMC_K1029, nes_bmc_k1029_device, "nes_bmc_k1029", "NES Cart BMC K-1029 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_K3036, nes_bmc_k3036_device, "nes_bmc_k3036", "NES Cart BMC K-3036 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_K3046, nes_bmc_k3046_device, "nes_bmc_k3046", "NES Cart BMC K-3046 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_K3071, nes_bmc_k3071_device, "nes_bmc_k3071", "NES Cart BMC K-3071 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_S009, nes_bmc_s009_device, "nes_bmc_s009", "NES Cart BMC S-009 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_SA005A, nes_bmc_sa005a_device, "nes_bmc_sa005a", "NES Cart BMC SA005-A PCB")
DEFINE_DEVICE_TYPE(NES_BMC_TF2740, nes_bmc_tf2740_device, "nes_bmc_tf2740", "NES Cart BMC TF2740 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_TH2348, nes_bmc_th2348_device, "nes_bmc_th2348", "NES Cart BMC TH2348 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_TJ03, nes_bmc_tj03_device, "nes_bmc_tj03", "NES Cart BMC TJ-03 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_WS, nes_bmc_ws_device, "nes_bmc_ws", "NES Cart BMC WS PCB")
DEFINE_DEVICE_TYPE(NES_BMC_11160, nes_bmc_11160_device, "nes_bmc_1160", "NES Cart BMC-1160 PCB")
@ -272,6 +275,16 @@ nes_bmc_k3046_device::nes_bmc_k3046_device(const machine_config &mconfig, const
{
}
nes_bmc_k3071_device::nes_bmc_k3071_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_K3071, tag, owner, clock)
{
}
nes_bmc_s009_device::nes_bmc_s009_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_S009, tag, owner, clock), m_reg(0)
{
}
nes_bmc_sa005a_device::nes_bmc_sa005a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_SA005A, tag, owner, clock)
{
@ -282,6 +295,11 @@ nes_bmc_tf2740_device::nes_bmc_tf2740_device(const machine_config &mconfig, cons
{
}
nes_bmc_th2348_device::nes_bmc_th2348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_TH2348, tag, owner, clock), m_latch(0)
{
}
nes_bmc_tj03_device::nes_bmc_tj03_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_TJ03, tag, owner, clock)
{
@ -834,6 +852,28 @@ void nes_bmc_k3046_device::pcb_reset()
chr8(0, CHRRAM);
}
void nes_bmc_k3071_device::pcb_reset()
{
prg16_89ab(0);
prg16_cdef(0);
chr8(0, CHRROM);
}
void nes_bmc_s009_device::device_start()
{
common_start();
save_item(NAME(m_reg));
}
void nes_bmc_s009_device::pcb_reset()
{
prg16_89ab(0);
prg16_cdef(7);
chr8(0, CHRRAM);
m_reg = 0;
}
void nes_bmc_sa005a_device::pcb_reset()
{
prg16_89ab(0);
@ -857,6 +897,21 @@ void nes_bmc_tf2740_device::pcb_reset()
m_reg[0] = m_reg[1] = m_reg[2] = 0;
}
void nes_bmc_th2348_device::device_start()
{
common_start();
save_item(NAME(m_latch));
}
void nes_bmc_th2348_device::pcb_reset()
{
prg16_89ab(0);
prg16_cdef(7);
chr8(0, CHRRAM);
m_latch = 0;
}
void nes_bmc_ws_device::device_start()
{
common_start();
@ -2114,6 +2169,64 @@ void nes_bmc_k3046_device::write_h(offs_t offset, u8 data)
prg16_cdef(data | 0x07);
}
/*-------------------------------------------------
BMC-K-3071
Games: 110 in 1
NES 2.0: mapper 438
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_k3071_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_k3071 write_h, offset: %04x, data: %02x\n", offset, data));
u8 bank = BIT(offset, 1, 5);
u8 mode = BIT(offset, 0);
prg16_89ab(bank & ~mode);
prg16_cdef(bank | mode);
chr8(BIT(data, 1, 5), CHRROM);
set_nt_mirroring(BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
/*-------------------------------------------------
BMC-S-009
Games: 8 in 1
NES 2.0: mapper 434
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_s009_device::write_m(offs_t offset, u8 data)
{
LOG_MMC(("bmc_s009 write_m, offset: %04x, data: %02x\n", offset, data));
m_reg = (data & 0x07) << 3;
prg16_89ab(m_reg);
prg16_cdef(m_reg | 0x07);
set_nt_mirroring(BIT(data, 5) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
}
void nes_bmc_s009_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_s009 write_h, offset: %04x, data: %02x\n", offset, data));
// this pcb is subject to bus conflict
data = account_bus_conflict(offset, data);
prg16_89ab(m_reg | (data & 0x07));
}
/*-------------------------------------------------
BMC-SA005-A
@ -2190,6 +2303,43 @@ u8 nes_bmc_tf2740_device::read_m(offs_t offset)
return (get_open_bus() & ~0x03) | m_jumper; // TODO: add jumper settings, m_jumper is 0 for now
}
/*-------------------------------------------------
BMC-TH2348
Games: Golden 8 in 1
NES 2.0: mapper 437
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_th2348_device::write_l(offs_t offset, u8 data)
{
LOG_MMC(("bmc_th2348 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
if (offset >= 0x1000)
{
m_latch = (offset & 0x07) << 3;
prg16_89ab(m_latch);
prg16_cdef(m_latch | 0x07);
set_nt_mirroring(BIT(offset, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
}
void nes_bmc_th2348_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_th2348 write_h, offset: %04x, data: %02x\n", offset, data));
// this pcb is subject to bus conflict
data = account_bus_conflict(offset, data);
prg16_89ab(m_latch | (data & 0x07));
}
/*-------------------------------------------------
BMC-TJ-03

View File

@ -527,6 +527,42 @@ public:
};
// ======================> nes_bmc_k3071_device
class nes_bmc_k3071_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_k3071_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
};
// ======================> nes_bmc_s009_device
class nes_bmc_s009_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_s009_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 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 = 0;
};
// ======================> nes_bmc_sa005a_device
class nes_bmc_sa005a_device : public nes_nrom_device
@ -566,6 +602,28 @@ private:
};
// ======================> nes_bmc_th2348_device
class nes_bmc_th2348_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_th2348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_l(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_latch = 0;
};
// ======================> nes_bmc_tj03_device
class nes_bmc_tj03_device : public nes_nrom_device
@ -1335,8 +1393,11 @@ DECLARE_DEVICE_TYPE(NES_BMC_HP898F, nes_bmc_hp898f_device)
DECLARE_DEVICE_TYPE(NES_BMC_K1029, nes_bmc_k1029_device)
DECLARE_DEVICE_TYPE(NES_BMC_K3036, nes_bmc_k3036_device)
DECLARE_DEVICE_TYPE(NES_BMC_K3046, nes_bmc_k3046_device)
DECLARE_DEVICE_TYPE(NES_BMC_K3071, nes_bmc_k3071_device)
DECLARE_DEVICE_TYPE(NES_BMC_S009, nes_bmc_s009_device)
DECLARE_DEVICE_TYPE(NES_BMC_SA005A, nes_bmc_sa005a_device)
DECLARE_DEVICE_TYPE(NES_BMC_TF2740, nes_bmc_tf2740_device)
DECLARE_DEVICE_TYPE(NES_BMC_TH2348, nes_bmc_th2348_device)
DECLARE_DEVICE_TYPE(NES_BMC_TJ03, nes_bmc_tj03_device)
DECLARE_DEVICE_TYPE(NES_BMC_WS, nes_bmc_ws_device)
DECLARE_DEVICE_TYPE(NES_BMC_11160, nes_bmc_11160_device)

View File

@ -409,8 +409,11 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("bmc_k3033", NES_BMC_K3033);
device.option_add_internal("bmc_k3036", NES_BMC_K3036);
device.option_add_internal("bmc_k3046", NES_BMC_K3046);
device.option_add_internal("bmc_k3071", NES_BMC_K3071);
device.option_add_internal("bmc_s009", NES_BMC_S009);
device.option_add_internal("bmc_sa005a", NES_BMC_SA005A);
device.option_add_internal("bmc_tf2740", NES_BMC_TF2740);
device.option_add_internal("bmc_th2348", NES_BMC_TH2348);
device.option_add_internal("bmc_tj03", NES_BMC_TJ03);
device.option_add_internal("bmc_ws", NES_BMC_WS);
device.option_add_internal("bmc_g146", NES_BMC_G146);

View File

@ -464,16 +464,26 @@ static const nes_mmc mmc_list[] =
// 426 PnP
// 427 PnP
{ 428, BMC_TF2740 },
// 429 Unused
// 430 Unused
// 429 Milowork FCFC1 flash cartridge
// 430 MMC3-based 831031C/T-308 multicart
{ 431, BMC_GN91B },
// 432 Realtec 8090
{ 433, BMC_NC20MB },
// 434 S-009
// 435...442 Unused
{ 434, BMC_S009 },
// 435 F-1002 multicart
// 436 VT02 PnP
{ 437, BMC_TH2348 },
{ 438, BMC_K3071 },
// 439 YS2309 multicart
// 440 Dongda Sonic REC-9388 educational computer
// 441 841026C and 850335C multicarts
// 442 "Golden Key" educational computer
// 443 NC3000M multicart
// 444 NC7000M multicart
// 445...511 Unused
// 445 DG574B MMC3-compatible multicart
// 446 Mindkids SMD172B_FPGA board
// 447 VRC4-based KL-06 multicart
// 448...511 Unused
// 512 probably the correct MMC3 clone for chuugokt in nes.xml
{ 513, SACHEN_SA9602B },
// 514 seems to be for skaraok, currently set to UNKNOWN in nes.xml

View File

@ -289,8 +289,11 @@ static const nes_pcb pcb_list[] =
{ "bmc_k3033", BMC_K3033 },
{ "bmc_k3036", BMC_K3036 },
{ "bmc_k3046", BMC_K3046 },
{ "bmc_k3071", BMC_K3071 },
{ "bmc_s009", BMC_S009 },
{ "bmc_sa005a", BMC_SA005A },
{ "bmc_tf2740", BMC_TF2740 },
{ "bmc_th2348", BMC_TH2348 },
{ "bmc_tj03", BMC_TJ03 },
{ "bmc_ws", BMC_WS },
{ "bmc_hik300", BMC_SUPERHIK_300IN1 },

View File

@ -101,13 +101,14 @@ enum
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,
BMC_JY012005, BMC_JY820845C, BMC_PJOY84, BMC_TH22913, BMC_11160, BMC_G146,
BMC_JY012005, BMC_JY820845C, BMC_PJOY84,
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_GOLD150, BMC_GOLD260,
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160,
BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_SA005A,
BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_K3071, BMC_SA005A,
BMC_TF2740, BMC_TJ03, BMC_RESETSXROM, BMC_RESETTXROM, BMC_TECHLINE9IN1,
// Unlicensed
UNL_8237, UNL_8237A, UNL_CC21, UNL_AX40G, UNL_AX5705, UNL_KN42,