diff options
author | 0kmg <9137159+0kmg@users.noreply.github.com> | 2021-08-12 09:05:41 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-13 03:05:41 +1000 |
commit | 4131373f0a910e30cac4a24ae574b0f2ddb02b45 (patch) | |
tree | 0719d47d32fa04dc3b47eab8e30a8df9d9cedbf6 /src/devices/bus | |
parent | 3e714f3de19e0cb314eaa82f5f473e9c8b30d191 (diff) |
bus/nes: Miscellaneous minor multicart fixes, mostly. (#8291)
* pengseal: Fixed company and title screen graphics.
* dongdong: Added device for this unique board (should have been marked not working.)
* mc_sg20: Fixed graphics fixed in all games, no longer randomly resets to Bomberman mid-game in Hogan's Alley.
* mc_190: Refactored code - this is the same as mc_sg20 with a mirroring bit.
* mc_1994: Corrected banking code - all games work now.
* mc_4ck1: Runs now, although Contra has some incorrect tiling issues; added jumper setting.
* mc_6m23: Fixed graphics in all games (light gun still not working due to non-bus issues).
* magicdrg: Fixed background tiling.
Software list items promoted to working
---------------------------------------
1994 Super HIK 14 in 1 (G-136)
4 in 1 1993 (CK-001)
4 in 1 1993 (CK-001, Alt)
Diffstat (limited to 'src/devices/bus')
-rw-r--r-- | src/devices/bus/nes/multigame.cpp | 238 | ||||
-rw-r--r-- | src/devices/bus/nes/multigame.h | 68 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_carts.cpp | 1 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_pcb.hxx | 1 | ||||
-rw-r--r-- | src/devices/bus/nes/nes_slot.h | 20 | ||||
-rw-r--r-- | src/devices/bus/nes/sachen.cpp | 35 | ||||
-rw-r--r-- | src/devices/bus/nes/sachen.h | 13 |
7 files changed, 198 insertions, 178 deletions
diff --git a/src/devices/bus/nes/multigame.cpp b/src/devices/bus/nes/multigame.cpp index 02bac0698bc..f23db61b64f 100644 --- a/src/devices/bus/nes/multigame.cpp +++ b/src/devices/bus/nes/multigame.cpp @@ -87,6 +87,29 @@ DEFINE_DEVICE_TYPE(NES_BMC_42IN1RESET, nes_bmc_42in1reset_device, "nes_bmc_42in1 DEFINE_DEVICE_TYPE(NES_BMC_LC160, nes_bmc_lc160_device, "nes_bmc_lc160", "NES Cart BMC Little Com 160 PCB") +INPUT_PORTS_START( bmc_8157 ) + PORT_START("JUMPER") + PORT_CONFNAME( 0x01, 0x01, "Menu Type" ) + PORT_CONFSETTING( 0x00, "20-in-1" ) + PORT_CONFSETTING( 0x01, "4-in-1" ) +INPUT_PORTS_END + + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor nes_bmc_8157_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( bmc_8157 ); +} + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + nes_action52_device::nes_action52_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : nes_nrom_device(mconfig, NES_ACTION52, tag, owner, clock) { @@ -147,8 +170,18 @@ nes_studyngame_device::nes_studyngame_device(const machine_config &mconfig, cons { } -nes_sgun20in1_device::nes_sgun20in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nes_nrom_device(mconfig, NES_SUPERGUN20IN1, tag, owner, clock) +nes_sgun20in1_device::nes_sgun20in1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : nes_nrom_device(mconfig, type, tag, owner, clock) +{ +} + +nes_sgun20in1_device::nes_sgun20in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_sgun20in1_device(mconfig, NES_SUPERGUN20IN1, tag, owner, clock) +{ +} + +nes_bmc_190in1_device::nes_bmc_190in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_sgun20in1_device(mconfig, NES_BMC_190IN1, tag, owner, clock) { } @@ -217,12 +250,12 @@ nes_bmc_ws_device::nes_bmc_ws_device(const machine_config &mconfig, const char * { } -nes_bmc_11160_device::nes_bmc_11160_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +nes_bmc_11160_device::nes_bmc_11160_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_nrom_device(mconfig, NES_BMC_11160, tag, owner, clock) { } -nes_bmc_g146_device::nes_bmc_g146_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +nes_bmc_g146_device::nes_bmc_g146_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_nrom_device(mconfig, NES_BMC_G146, tag, owner, clock) { } @@ -232,8 +265,10 @@ nes_bmc_2751_device::nes_bmc_2751_device(const machine_config &mconfig, const ch { } -nes_bmc_8157_device::nes_bmc_8157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +nes_bmc_8157_device::nes_bmc_8157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_nrom_device(mconfig, NES_BMC_8157, tag, owner, clock) + , m_jumper(*this, "JUMPER") + , m_latch(0) { } @@ -322,11 +357,6 @@ nes_bmc_150in1_device::nes_bmc_150in1_device(const machine_config &mconfig, cons { } -nes_bmc_190in1_device::nes_bmc_190in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nes_nrom_device(mconfig, NES_BMC_190IN1, 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) { @@ -557,17 +587,12 @@ void nes_studyngame_device::pcb_reset() chr8(0, m_chr_source); } -void nes_sgun20in1_device::device_start() -{ - common_start(); -} - void nes_sgun20in1_device::pcb_reset() { - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; prg16_89ab(0); prg16_cdef(0); - chr8(0, m_chr_source); + chr8(0, CHRROM); + set_nt_mirroring(PPU_MIRROR_VERT); } void nes_vt5201_device::device_start() @@ -721,30 +746,6 @@ void nes_bmc_ws_device::pcb_reset() m_latch = 0; } -void nes_bmc_11160_device::device_start() -{ - common_start(); -} - -void nes_bmc_11160_device::pcb_reset() -{ - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0); - chr8(0, m_chr_source); -} - -void nes_bmc_g146_device::device_start() -{ - common_start(); -} - -void nes_bmc_g146_device::pcb_reset() -{ - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0); - chr8(0, m_chr_source); -} - void nes_bmc_2751_device::pcb_start(running_machine &machine, u8 *ciram_ptr, bool cart_mounted) { device_nes_cart_interface::pcb_start(machine, ciram_ptr, cart_mounted); @@ -761,13 +762,16 @@ void nes_bmc_2751_device::pcb_reset() void nes_bmc_8157_device::device_start() { common_start(); + save_item(NAME(m_latch)); } void nes_bmc_8157_device::pcb_reset() { - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg32(0); - chr8(0, m_chr_source); + prg16_89ab(0); + prg16_cdef(0); + chr8(0, CHRRAM); + + m_latch = 0; } void nes_bmc_hik300_device::device_start() @@ -992,19 +996,6 @@ void nes_bmc_150in1_device::pcb_reset() chr8(0, m_chr_source); } -void nes_bmc_190in1_device::device_start() -{ - common_start(); -} - -void nes_bmc_190in1_device::pcb_reset() -{ - m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; - prg16_89ab(0); - prg16_cdef(0); - chr8(0, m_chr_source); -} - void nes_bmc_800in1_device::device_start() { common_start(); @@ -1529,24 +1520,39 @@ void nes_studyngame_device::write_h(offs_t offset, uint8_t data) /*------------------------------------------------- - BMC-SUPERGUN-20IN1 + Boards BMC-SUPERGUN-20IN1, BMC-190IN1 - Unknown Bootleg Multigame Board - Games: Super Gun 20 in 1 + Unknown Bootleg Multigame Boards + Games: Super Gun 20 in 1, Golden 190 in 1 iNES: mapper 214 + NES 2.0: mapper 300 - In MESS: Supported. + In MAME: Supported. -------------------------------------------------*/ -void nes_sgun20in1_device::write_h(offs_t offset, uint8_t data) +void nes_sgun20in1_device::write_h(offs_t offset, u8 data) { LOG_MMC(("supergun20in1 write_h, offset: %04x, data: %02x\n", offset, data)); - prg16_89ab(offset >> 2); - prg16_cdef(offset >> 2); - chr8(offset, CHRROM); +// Hogan's Alley in 20-in-1 will occasionally sweep through 0x66xx-0x68xx which +// causes an abrupt goto Bomberman title screen. This mask is a best guess. + switch (offset & 0x7000) + { + case 0x0000: + case 0x7000: + offset = (offset >> 2) & (m_prg_mask >> 1); + prg16_89ab(offset); + prg16_cdef(offset); + chr8(offset, CHRROM); + } +} + +void nes_bmc_190in1_device::write_h(offs_t offset, u8 data) +{ + nes_sgun20in1_device::write_h(offset, data); + set_nt_mirroring(BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); } /*------------------------------------------------- @@ -1946,21 +1952,23 @@ void nes_bmc_ws_device::write_m(offs_t offset, uint8_t data) /*------------------------------------------------- - Board BMC-11160 (by TXC?) + Board BMC-11160 by TXC Games: 6 in 1 (MGC-023) - In MESS: Partially Supported + NES 2.0: mapper 299 + + In MAME: Partially supported. (Light gun hit detection is broken) -------------------------------------------------*/ -void nes_bmc_11160_device::write_h(offs_t offset, uint8_t data) +void nes_bmc_11160_device::write_h(offs_t offset, u8 data) { LOG_MMC(("bmc_11160 write_h, offset: %04x, data: %02x\n", offset, data)); - prg32((data & 0x70) >> 4); - chr8(((data & 0x70) >> 2) | (data & 3), m_chr_source); - set_nt_mirroring(BIT(data, 7) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); + prg32((data & 0x30) >> 4); + chr8(((data & 0x30) >> 2) | (data & 0x03), CHRROM); + set_nt_mirroring(BIT(data, 7) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ); } /*------------------------------------------------- @@ -1969,31 +1977,29 @@ void nes_bmc_11160_device::write_h(offs_t offset, uint8_t data) Games: 1994 Super HIK 14 in 1 (G-136) - In MESS: Partially Supported + NES 2.0: mapper 349 + + In MAME: Supported. -------------------------------------------------*/ -void nes_bmc_g146_device::write_h(offs_t offset, uint8_t data) +void nes_bmc_g146_device::write_h(offs_t offset, u8 data) { LOG_MMC(("bmc_g146 write_h, offset: %04x, data: %02x\n", offset, data)); - if (offset & 0x800) - { - // UNROM mode - int helper = offset & BIT(offset, 6); - prg16_89ab((offset & 0x1f) | helper); - prg16_cdef((offset & 0x18) | 7); - } - else if (offset & 0x40) + u8 prg_lo = offset & 0x1f; + u8 prg_hi = prg_lo; // default: NROM-128 mode + if (BIT(offset, 11)) + prg_hi |= 0x07; // UNROM mode + else if (!BIT(offset, 6)) { - // 16KB mode - prg16_89ab(offset & 0x1f); - prg16_cdef(offset & 0x1f); + prg_lo &= ~0x01; // NROM-256 mode + prg_hi |= 0x01; } - else - prg32((offset & 0x1f) >> 4); + prg16_89ab(prg_lo); + prg16_cdef(prg_hi); - set_nt_mirroring(!BIT(offset, 7) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); + set_nt_mirroring(BIT(offset, 7) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); } /*------------------------------------------------- @@ -2025,35 +2031,41 @@ void nes_bmc_2751_device::write_h(offs_t offset, u8 data) Games: 4 in 1 1993 (CK-001) - In MESS: Partially Supported + NES 2.0: mapper 301 + + In MAME: Preliminary supported. + + TODO: Determine the cause of Contra graphics glitches. + Is NesDev description of board wrong? It seems b9 = 1 + and b7 = 0 always? Also couldn't see evidence of the + mirroring bit being used. -------------------------------------------------*/ -void nes_bmc_8157_device::write_h(offs_t offset, uint8_t data) +void nes_bmc_8157_device::write_h(offs_t offset, u8 data) { LOG_MMC(("bmc_8157 write_h, offset: %04x, data: %02x\n", offset, data)); - prg16_89ab((offset >> 2) & 0x1f); - if (offset & 0x200) - prg16_cdef(offset & 0x1f); - else - prg16_cdef((offset & 0x18) | 7); + u8 bank = (offset >> 2) & 0x1f; + prg16_89ab(bank); + if (BIT(offset, 9)) + bank |= 0x07; + else if (BIT(offset, 7)) + bank &= ~0x07; + prg16_cdef(bank); - set_nt_mirroring(!BIT(offset, 1) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); + m_latch = BIT(offset, 8); + set_nt_mirroring(BIT(offset, 1) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); } -uint8_t nes_bmc_8157_device::read_h(offs_t offset) +u8 nes_bmc_8157_device::read_h(offs_t offset) { LOG_MMC(("bmc_8157 read_h, offset: %04x\n", offset)); - // m_dipsetting = ioport("CARTDIPS")->read(); - -// uint8_t val = hi_access_rom(offset); -// return val | m_noise; // the first write_h sets m_noise=0xff or 0 depending on dsw - + if (m_latch) + offset = (offset & ~0x01) | m_jumper->read(); return hi_access_rom(offset); } - /*------------------------------------------------- BMC-SUPERHIK_300IN1 @@ -2611,28 +2623,6 @@ 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); } - -/*------------------------------------------------- - - Board BMC-190IN1 - - Games: 190-in-1 - - In MESS: Supported - - -------------------------------------------------*/ - -void nes_bmc_190in1_device::write_h(offs_t offset, uint8_t data) -{ - LOG_MMC(("bmc190in1 write_h, offset: %04x, data: %02x\n", offset, data)); - - set_nt_mirroring(BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); - offset >>= 2; - prg16_89ab(offset); - prg16_cdef(offset); - chr8(offset, CHRROM); -} - /*------------------------------------------------- BMC-800IN1 diff --git a/src/devices/bus/nes/multigame.h b/src/devices/bus/nes/multigame.h index b6d8fe3c5b6..8add9505737 100644 --- a/src/devices/bus/nes/multigame.h +++ b/src/devices/bus/nes/multigame.h @@ -258,15 +258,26 @@ class nes_sgun20in1_device : public nes_nrom_device { public: // construction/destruction - nes_sgun20in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_sgun20in1_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 void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: - // device-level overrides - virtual void device_start() override; + nes_sgun20in1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); +}; + + +// ======================> nes_bmc_190in1_device + +class nes_bmc_190in1_device : public nes_sgun20in1_device +{ +public: + // construction/destruction + nes_bmc_190in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_h(offs_t offset, u8 data) override; }; @@ -511,15 +522,9 @@ class nes_bmc_11160_device : public nes_nrom_device { public: // construction/destruction - nes_bmc_11160_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; + nes_bmc_11160_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual void pcb_reset() override; - -protected: - // device-level overrides - virtual void device_start() override; + virtual void write_h(offs_t offset, u8 data) override; }; @@ -529,15 +534,9 @@ class nes_bmc_g146_device : public nes_nrom_device { public: // construction/destruction - nes_bmc_g146_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_g146_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; }; @@ -562,16 +561,21 @@ class nes_bmc_8157_device : public nes_nrom_device { public: // construction/destruction - nes_bmc_8157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_bmc_8157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_h(offs_t offset) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_h(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides + virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; + +private: + required_ioport m_jumper; + u8 m_latch; }; @@ -898,24 +902,6 @@ protected: }; -// ======================> nes_bmc_190in1_device - -class nes_bmc_190in1_device : public nes_nrom_device -{ -public: - // construction/destruction - nes_bmc_190in1_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_bmc_800in1_device class nes_bmc_800in1_device : public nes_nrom_device diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index 98a4a8cf49b..b9e124f470f 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -206,6 +206,7 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("sa72007", NES_SACHEN_SA72007); device.option_add_internal("sa72008", NES_SACHEN_SA72008); device.option_add_internal("tca01", NES_SACHEN_TCA01); + device.option_add_internal("s3013", NES_SACHEN_3013); device.option_add_internal("s8259a", NES_SACHEN_8259A); device.option_add_internal("s8259b", NES_SACHEN_8259B); device.option_add_internal("s8259c", NES_SACHEN_8259C); diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index 9e9066e3312..5aa7b84315c 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -117,6 +117,7 @@ static const nes_pcb pcb_list[] = { "sa72007", SACHEN_SA72007 }, { "sa72008", SACHEN_SA72008 }, { "tca01", SACHEN_TCA01 }, + { "s3013", SACHEN_3013 }, { "s8259a", SACHEN_8259A }, { "s8259b", SACHEN_8259B }, { "s8259c", SACHEN_8259C }, diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index 8652e0e82fc..58874cf2464 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -64,25 +64,25 @@ enum /* Namcot */ NAMCOT_163, NAMCOT_175, NAMCOT_340, NAMCOT_3425, NAMCOT_34X3, NAMCOT_3446, - /* NTDEC */ + // NTDEC NTDEC_ASDER, NTDEC_FIGHTINGHERO, NTDEC_N715021, - /* Rex Soft */ + // Rex Soft REXSOFT_SL1632, REXSOFT_DBZ5, - /* Sachen */ + // Sachen SACHEN_8259A, SACHEN_8259B, SACHEN_8259C, SACHEN_8259D, SACHEN_SA009, SACHEN_SA0036, SACHEN_SA0037, - SACHEN_SA72007, SACHEN_SA72008, SACHEN_TCA01, - SACHEN_TCU01, SACHEN_TCU02, SACHEN_SA9602B, + SACHEN_SA72007, SACHEN_SA72008, SACHEN_SA9602B, + SACHEN_TCA01, SACHEN_TCU01, SACHEN_TCU02, SACHEN_3013, SACHEN_74LS374, SACHEN_74LS374_ALT, SACHEN_SHERO, - /* Sunsoft */ + // Sunsoft SUNSOFT_1, SUNSOFT_2, SUNSOFT_3, SUNSOFT_4, SUNSOFT_DCS, SUNSOFT_5, SUNSOFT_FME7, - /* Taito */ + // Taito TAITO_TC0190FMC, TAITO_TC0190FMCP, TAITO_X1_005, TAITO_X1_017, - /* Tengen */ + // Tengen TENGEN_800008, TENGEN_800032, TENGEN_800037, - /* TXC */ + // TXC TXC_22211, TXC_DUMARACING, TXC_MJBLOCK, TXC_COMMANDOS, TXC_TW, TXC_STRIKEW, // Multigame Carts @@ -99,7 +99,7 @@ enum BMC_NTD_03, BMC_G63IN1, BMC_FCGENJIN_8IN1, BMC_FK23C, BMC_FK23CA, BMC_PJOY84, BMC_TH22913, BMC_11160, BMC_G146, BMC_2751, BMC_8157, BMC_830118C, BMC_841101C, - BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_CH001, BMC_SUPER22, + BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_SUPER22, BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160, BMC_CTC09, BMC_K3006, BMC_K3036, BMC_K3046, BMC_SA005A, BMC_TJ03, // Unlicensed diff --git a/src/devices/bus/nes/sachen.cpp b/src/devices/bus/nes/sachen.cpp index 0622bfec8d4..f30dd2529b2 100644 --- a/src/devices/bus/nes/sachen.cpp +++ b/src/devices/bus/nes/sachen.cpp @@ -16,6 +16,7 @@ * Sachen TCA-01 [mapper 143] * Sachen TCU-01 [mapper 147] * Sachen TCU-02 [mapper 136] + * Sachen 3013 [mapper 553] * Sachen Discrete PCBs [mapper 150 & 243] * Sachen 8259 [mapper 141 (A), 138 (B), 139 (C), 137 (D)] @@ -52,6 +53,7 @@ DEFINE_DEVICE_TYPE(NES_SACHEN_SA72008, nes_sachen_sa72008_device, "nes_sa7 DEFINE_DEVICE_TYPE(NES_SACHEN_TCA01, nes_sachen_tca01_device, "nes_tca01", "NES Cart Sachen TCA-01 PCB") DEFINE_DEVICE_TYPE(NES_SACHEN_TCU01, nes_sachen_tcu01_device, "nes_tcu01", "NES Cart Sachen TCU-01 PCB") DEFINE_DEVICE_TYPE(NES_SACHEN_TCU02, nes_sachen_tcu02_device, "nes_tcu02", "NES Cart Sachen TCU-02 PCB") +DEFINE_DEVICE_TYPE(NES_SACHEN_3013, nes_sachen_3013_device, "nes_3013", "NES Cart Sachen 3013 PCB") DEFINE_DEVICE_TYPE(NES_SACHEN_74X374, nes_sachen_74x374_device, "nes_s74x374", "NES Cart Sachen 74*374 PCB") DEFINE_DEVICE_TYPE(NES_SACHEN_74X374_ALT, nes_sachen_74x374_alt_device, "nes_s74x374a", "NES Cart Sachen 74*374 Alt PCB") DEFINE_DEVICE_TYPE(NES_SACHEN_8259A, nes_sachen_8259a_device, "nes_s8259a", "NES Cart Sachen 8259A PCB") @@ -100,6 +102,11 @@ nes_sachen_tcu02_device::nes_sachen_tcu02_device(const machine_config &mconfig, { } +nes_sachen_3013_device::nes_sachen_3013_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_nrom_device(mconfig, NES_SACHEN_3013, tag, owner, clock) +{ +} + nes_sachen_74x374_device::nes_sachen_74x374_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : nes_nrom_device(mconfig, type, tag, owner, clock), m_latch(0), m_mmc_vrom_bank(0) { @@ -402,11 +409,11 @@ void nes_sachen_sa72008_device::write_l(offs_t offset, uint8_t data) Sachen TCA-01 bootleg boards - iNES: mapper 143 - Games: Dancing Blocks, Magic Mathematic - In MESS: Supported. + iNES: mapper 143 + + In MAME: Supported. -------------------------------------------------*/ @@ -479,6 +486,28 @@ uint8_t nes_sachen_tcu02_device::read_l(offs_t offset) /*------------------------------------------------- + Sachen 3013 board + + Games: Dong Dong Nao 1 + + This discrete board basically behaves like standard + NROM-128 (mapper 0) but has circuitry so that the + lower half of PRG reads as a constant instead of as + a mirror of the upper half. + + NES 2.0: mapper 553 + + In MAME: Supported. + + -------------------------------------------------*/ + +u8 nes_sachen_3013_device::read_h(offs_t offset) +{ + return (offset < 0x4000) ? 0x3a : hi_access_rom(offset); +} + +/*------------------------------------------------- + Sachen 74x374 bootleg boards Games: Chess Academy, Chinese Checkers Jpn, Mahjong Academy, diff --git a/src/devices/bus/nes/sachen.h b/src/devices/bus/nes/sachen.h index b23599345b3..3c73bcd23be 100644 --- a/src/devices/bus/nes/sachen.h +++ b/src/devices/bus/nes/sachen.h @@ -158,6 +158,18 @@ private: }; +// ======================> nes_sachen_3013_device + +class nes_sachen_3013_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_sachen_3013_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_h(offs_t offset) override; +}; + + // ======================> nes_sachen_74x374_device class nes_sachen_74x374_device : public nes_nrom_device @@ -270,6 +282,7 @@ DECLARE_DEVICE_TYPE(NES_SACHEN_SA72008, nes_sachen_sa72008_device) DECLARE_DEVICE_TYPE(NES_SACHEN_TCA01, nes_sachen_tca01_device) DECLARE_DEVICE_TYPE(NES_SACHEN_TCU01, nes_sachen_tcu01_device) DECLARE_DEVICE_TYPE(NES_SACHEN_TCU02, nes_sachen_tcu02_device) +DECLARE_DEVICE_TYPE(NES_SACHEN_3013, nes_sachen_3013_device) DECLARE_DEVICE_TYPE(NES_SACHEN_74X374, nes_sachen_74x374_device) DECLARE_DEVICE_TYPE(NES_SACHEN_74X374_ALT, nes_sachen_74x374_alt_device) DECLARE_DEVICE_TYPE(NES_SACHEN_8259A, nes_sachen_8259a_device) |