diff options
author | 2025-05-06 07:03:10 +0200 | |
---|---|---|
committer | 2025-05-06 07:03:10 +0200 | |
commit | 8266772b70858e7d3dea8be2f2e36b43e717f3dd (patch) | |
tree | 15405df87c789d3d3e6c027ae77d5b31b300bbac /src | |
parent | c4e0077231f9f69fed9c632646c4f205ce916ac6 (diff) |
------------------------------
Bai Bian Dou Dizhu [little0]
Dingji Dou Dizhu [little0]
Dou Dizhu II [little0]
- sunwise/jankmg2.cpp: corrected game title [Wayder]
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/mame.lst | 5 | ||||
-rw-r--r-- | src/mame/sealy/sealy_z80.cpp | 255 | ||||
-rw-r--r-- | src/mame/sunwise/jankmg2.cpp | 4 |
3 files changed, 262 insertions, 2 deletions
diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 50e3d6a2d8d..2e11c78c78f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -39734,6 +39734,11 @@ qczl @source:sealy/sealy_fr.cpp snowbwar +@source:sealy/sealy_z80.cpp +bbddz +ddz2 +djddz + @source:sega/angelkds.cpp angelkds spcpostn diff --git a/src/mame/sealy/sealy_z80.cpp b/src/mame/sealy/sealy_z80.cpp new file mode 100644 index 00000000000..d813a9fec74 --- /dev/null +++ b/src/mame/sealy/sealy_z80.cpp @@ -0,0 +1,255 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Sealy Z80-based games + +Main components: +Z80C0006PEC or equivalent +12.000 MHz XTAL +6264 RAM (manufacturer and latency may vary) +62256 RAM (manufacturer and latency may vary) +Altera MAX EPM3256AOC208-10 +93C46 EEPROM +U6295 (Oki M6295 clone) + +TODO: +- program ROMs are encrypted +- GFX ROMs seem encrypted +*/ + + +#include "emu.h" +#include "cpu/z80/z80.h" +#include "machine/eepromser.h" +#include "sound/okim6295.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class sealy_z80_state : public driver_device +{ +public: + sealy_z80_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") + { } + + void sealy(machine_config &config) ATTR_COLD; + + void init_djddz() ATTR_COLD; + +private: + required_device<cpu_device> m_maincpu; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void program_map(address_map &map) ATTR_COLD; +}; + + +uint32_t sealy_z80_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void sealy_z80_state::program_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); +} + + +static INPUT_PORTS_START( djddz ) // TODO + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + +// no DIP switches, just one reset push button +INPUT_PORTS_END + + +static GFXDECODE_START( gfx ) // TODO +GFXDECODE_END + + +void sealy_z80_state::sealy(machine_config &config) +{ + Z80(config, m_maincpu, 12_MHz_XTAL / 2); // divider not verified, but part rated for 6 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &sealy_z80_state::program_map); + + EEPROM_93C46_8BIT(config, "eeprom"); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 0, 256-1); + screen.set_screen_update(FUNC(sealy_z80_state::screen_update)); + + GFXDECODE(config, "gfxdecode", "palette", gfx); + PALETTE(config, "palette").set_entries(0x100); // TODO + + SPEAKER(config, "mono").front_center(); + OKIM6295(config, "oki", 12_MHz_XTAL / 12, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // divider and pin 7 not verified +} + + +// 百变斗地主 (Bǎi Biàn Dòu Dìzhǔ). All labels have 百变斗地主 +ROM_START( bbddz ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "u7", 0x00000, 0x20000, CRC(d82df292) SHA1(f354a3d9b29abb61a447d507b37d28f49983e59d) ) // 27c1001a + + ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_LOAD( "u15", 0x000000, 0x200000, CRC(937e9e76) SHA1(95907ddadc2bf260d88a391ab1f61e8931ec7cc3) ) // 29f1611 + + ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_LOAD( "u13", 0x000000, 0x200000, CRC(1ee033bb) SHA1(14ab0702e17add44dfc82ce21dd5a37c05a1b2a2) ) // 29f1611 + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "u9", 0x00000, 0x80000, NO_DUMP ) // 29f040 + + ROM_REGION( 0x80, "eeprom", ROMREGION_ERASE00 ) + ROM_LOAD( "93c46", 0x00, 0x80, NO_DUMP ) +ROM_END + +// 斗地主Ⅱ (Dòu Dìzhǔ II). All labels prepend 斗地主Ⅱ to what's below +ROM_START( ddz2 ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "3.u11", 0x00000, 0x20000, CRC(01cbe7a5) SHA1(f46339bec4e898afaa78831632cea4013877258d) ) // 27c4010 + + ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_LOAD( "1.u18", 0x000000, 0x200000, CRC(200ece45) SHA1(ab9b19464850c9e75646e382334a5d28a360195c) ) // 27c4096 + + ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_LOAD( "2.u21", 0x000000, 0x200000, CRC(c62be0a4) SHA1(1cbfecba43b475f1a175f69fda498e662ac26720) ) // 27c4096 + + ROM_REGION( 0x80000, "oki", ROMREGION_ERASE00 ) + ROM_LOAD( "4.u23", 0x00000, 0x80000, NO_DUMP ) + + ROM_REGION( 0x80, "eeprom", ROMREGION_ERASE00 ) + ROM_LOAD( "93c46", 0x00, 0x80, NO_DUMP ) +ROM_END + +// 顶级斗地主 (Dǐngjí Dòu Dìzhǔ). All labels prepend 顶级斗地主 to what's below +ROM_START( djddz ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "3.u11", 0x00000, 0x20000, CRC(54abc7a0) SHA1(25494e0862aa6b03398270efe2a3659180be38ec) ) // 27c010 + + ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_LOAD( "1.u18", 0x000000, 0x200000, CRC(6fa8f11e) SHA1(731f90a929b5b638fa45de24918df6377136276d) ) // 27c4096, FIXED BITS (xxxxxxxx0xxxxxxx) + + ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_LOAD( "2.u21", 0x000000, 0x200000, CRC(74997b0f) SHA1(1c2b0aeaf71fa000856b8aa405d7853f8e652257) ) // 27c4096 + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "4.u23", 0x00000, 0x80000, CRC(249b1a34) SHA1(94af1a9c64fb7d06a7510d527c176b2fa6845885) ) // 27c020 + + ROM_REGION( 0x80, "eeprom", ROMREGION_ERASE00 ) + ROM_LOAD( "93c46", 0x00, 0x80, NO_DUMP ) +ROM_END + + +void sealy_z80_state::init_djddz() // TODO: not enough +{ + uint8_t *rom = memregion("maincpu")->base(); + + for (int i = 0; i < 0x20000; i++) + { + switch (i & 0x14ca) + { + case 0x0000: rom[i] ^= 0xc0; break; + case 0x0002: rom[i] ^= 0x41; break; + case 0x0008: rom[i] ^= 0xc0; break; + case 0x000a: rom[i] ^= 0x30; break; + case 0x0040: rom[i] ^= 0x64; break; + case 0x0042: rom[i] ^= 0x41; break; + case 0x0048: rom[i] ^= 0x30; break; + case 0x004a: rom[i] ^= 0x41; break; + case 0x0080: rom[i] ^= 0x30; break; + case 0x0082: rom[i] ^= 0x81; break; + case 0x0088: rom[i] ^= 0x41; break; + case 0x008a: rom[i] ^= 0x64; break; + case 0x00c0: rom[i] ^= 0x30; break; + case 0x00c2: rom[i] ^= 0x81; break; + case 0x00c8: rom[i] ^= 0x41; break; + case 0x00ca: rom[i] ^= 0x30; break; + case 0x0400: rom[i] ^= 0xc0; break; + case 0x0402: rom[i] ^= 0x30; break; + case 0x0408: rom[i] ^= 0x81; break; + case 0x040a: rom[i] ^= 0xc0; break; + case 0x0440: rom[i] ^= 0x64; break; + case 0x0442: rom[i] ^= 0x41; break; + case 0x0448: rom[i] ^= 0x64; break; + case 0x044a: rom[i] ^= 0x81; break; + case 0x0480: rom[i] ^= 0x41; break; + case 0x0482: rom[i] ^= 0x81; break; + case 0x0488: rom[i] ^= 0x30; break; + case 0x048a: rom[i] ^= 0xc0; break; + case 0x04c0: rom[i] ^= 0x64; break; + case 0x04c2: rom[i] ^= 0x81; break; + case 0x04c8: rom[i] ^= 0xc0; break; + case 0x04ca: rom[i] ^= 0x64; break; + case 0x1000: rom[i] ^= 0x30; break; + case 0x1002: rom[i] ^= 0x81; break; + case 0x1008: rom[i] ^= 0xc0; break; + case 0x100a: rom[i] ^= 0x64; break; + case 0x1040: rom[i] ^= 0xc0; break; + case 0x1042: rom[i] ^= 0x30; break; + case 0x1048: rom[i] ^= 0x81; break; + case 0x104a: rom[i] ^= 0x41; break; + case 0x1080: rom[i] ^= 0x81; break; + case 0x1082: rom[i] ^= 0x64; break; + case 0x1088: rom[i] ^= 0xc0; break; + case 0x108a: rom[i] ^= 0x41; break; + case 0x10c0: rom[i] ^= 0x30; break; + case 0x10c2: rom[i] ^= 0x64; break; + case 0x10c8: rom[i] ^= 0x81; break; + case 0x10ca: rom[i] ^= 0x64; break; + case 0x1400: rom[i] ^= 0x41; break; + case 0x1402: rom[i] ^= 0xc0; break; + case 0x1408: rom[i] ^= 0x41; break; + case 0x140a: rom[i] ^= 0x81; break; + case 0x1440: rom[i] ^= 0x30; break; + case 0x1442: rom[i] ^= 0xc0; break; + case 0x1448: rom[i] ^= 0x41; break; + case 0x144a: rom[i] ^= 0x64; break; + case 0x1480: rom[i] ^= 0xc0; break; + case 0x1482: rom[i] ^= 0x81; break; + case 0x1488: rom[i] ^= 0x30; break; + case 0x148a: rom[i] ^= 0xc0; break; + case 0x14c0: rom[i] ^= 0x41; break; + case 0x14c2: rom[i] ^= 0x64; break; + case 0x14c8: rom[i] ^= 0x30; break; + case 0x14ca: rom[i] ^= 0x81; break; + } + } +} + +} // anonymous namespace + + +GAME( 200?, bbddz, 0, sealy, djddz, sealy_z80_state, init_djddz, ROT0, "Sealy", "Bai Bian Dou Dizhu", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 200?, ddz2, 0, sealy, djddz, sealy_z80_state, empty_init, ROT0, "Sealy", "Dou Dizhu II", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 200?, djddz, 0, sealy, djddz, sealy_z80_state, init_djddz, ROT0, "Sealy", "Dingji Dou Dizhu", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/sunwise/jankmg2.cpp b/src/mame/sunwise/jankmg2.cpp index 4195277eecf..330415391ed 100644 --- a/src/mame/sunwise/jankmg2.cpp +++ b/src/mame/sunwise/jankmg2.cpp @@ -2,7 +2,7 @@ // copyright-holders: /* -Janken Man 2 +Ganso Janken Man 2 'S9405021 CPU-DM-NEW' PCB Z0840004PSC @@ -164,4 +164,4 @@ ROM_END } // anonymous namespace // title machine translated from auction, not verified -GAME( 199?, jankmg2, 0, jankmg2, jankmg2, jankmg2_state, empty_init, ROT0, "Sunwise", "Janken Man Ganso 2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +GAME( 199?, jankmg2, 0, jankmg2, jankmg2, jankmg2_state, empty_init, ROT0, "Sunwise", "Ganso Janken Man 2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) |