From b79289eff789a4be60cc47d7423a665b4e8700fe Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 19 Mar 2024 13:47:06 +0100 Subject: [PATCH] New systems marked not working ------------------------------ Jin Xiu Zhong Hua [dyq, little0, Guru] - misc/astrcorp.cpp: dumped EEPROM for speedmst [Siftware] - skeleton/sterz80.cpp: measured clocks [Guru] --- src/emu/xtal.cpp | 1 + src/mame/bmc/bmcpokr.cpp | 2 +- src/mame/bmc/koftball.cpp | 113 +++++++++++++++++++++++++++++++++- src/mame/igs/igs017.cpp | 18 +++--- src/mame/mame.lst | 1 + src/mame/misc/astrcorp.cpp | 6 +- src/mame/skeleton/sterz80.cpp | 14 +++-- 7 files changed, 133 insertions(+), 22 deletions(-) diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index f6a54115faa..188ed1d46d6 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -228,6 +228,7 @@ const double XTAL::known_xtals[] = { 13'495'200, /* 13.4952_MHz_XTAL Used on Shadow Force pcb and maybe other Technos pcbs? */ 13'500'000, /* 13.5_MHz_XTAL Microbee */ 13'516'800, /* 13.5168_MHz_XTAL Kontron KDT6 */ + 13'560'000, /* 13.560_MHz_XTAL Tong Zi Maque */ 13'608'000, /* 13.608_MHz_XTAL TeleVideo 910 & 925 */ 13'824'000, /* 13.824_MHz_XTAL Robotron PC-1715 display circuit */ 13'977'600, /* 13.9776_MHz_XTAL Kaypro II dot clock */ diff --git a/src/mame/bmc/bmcpokr.cpp b/src/mame/bmc/bmcpokr.cpp index 3048e31e04b..b3203f3fe19 100644 --- a/src/mame/bmc/bmcpokr.cpp +++ b/src/mame/bmc/bmcpokr.cpp @@ -15,7 +15,7 @@ Other: BMC B816140 (CPLD) TODO: * Hopper hookup doesn't work properly. MAME counts far more "tickets - dispensed" than the number of coins/tickets the games are suppoed to + dispensed" than the number of coins/tickets the games are supposed to pay out. ***************************************************************************/ diff --git a/src/mame/bmc/koftball.cpp b/src/mame/bmc/koftball.cpp index 4a03cda0ef3..71c9f157a07 100644 --- a/src/mame/bmc/koftball.cpp +++ b/src/mame/bmc/koftball.cpp @@ -5,6 +5,9 @@ King Of Football (c)1995 BMC preliminary driver by Tomasz Slanina +TODO: jxzh has bad GFX and needs correct protection handling. For testing, one well-placed soft reset + will make it boot + -- MC68000P10 @@ -29,11 +32,13 @@ ft5_v6_c4.u58 / */ #include "emu.h" + #include "cpu/m68000/m68000.h" #include "machine/timer.h" #include "sound/okim6295.h" #include "sound/ymopl.h" #include "video/ramdac.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -57,6 +62,7 @@ public: m_palette(*this, "palette") { } + void jxzh(machine_config &config); void koftball(machine_config &config); void init_koftball(); @@ -80,6 +86,7 @@ private: template TILE_GET_INFO_MEMBER(get_tile_info); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(interrupt); + void jxzh_mem(address_map &map); void koftball_mem(address_map &map); void ramdac_map(address_map &map); }; @@ -170,6 +177,36 @@ void koftball_state::koftball_mem(address_map &map) map(0x360000, 0x360001).w(FUNC(koftball_state::prot_w)); } +void koftball_state::jxzh_mem(address_map &map) +{ + map(0x000000, 0x03ffff).rom(); + map(0x200000, 0x20ffff).ram().share(m_main_ram); + + map(0x260000, 0x260fff).ram().w(FUNC(koftball_state::videoram_w<0>)).share(m_videoram[0]); + map(0x261000, 0x261fff).ram().w(FUNC(koftball_state::videoram_w<1>)).share(m_videoram[1]); + map(0x262000, 0x26ffff).ram(); + + map(0x280000, 0x28ffff).ram(); // unused ? + map(0x2a0000, 0x2a001f).nopw(); + map(0x2a0000, 0x2a001f).r(FUNC(koftball_state::random_number_r)); + map(0x2b0000, 0x2b0003).r(FUNC(koftball_state::random_number_r)); + map(0x2d8000, 0x2d8001).r(FUNC(koftball_state::random_number_r)); + map(0x2da000, 0x2da003).w("ymsnd", FUNC(ym2413_device::write)).umask16(0xff00); + + map(0x2db001, 0x2db001).w("ramdac", FUNC(ramdac_device::index_w)); + map(0x2db003, 0x2db003).w("ramdac", FUNC(ramdac_device::pal_w)); + map(0x2db005, 0x2db005).w("ramdac", FUNC(ramdac_device::mask_w)); + + map(0x2dc000, 0x2dc000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); + map(0x2f0000, 0x2f0003).portr("INPUTS"); + map(0x300000, 0x300001).nopw(); + map(0x320000, 0x320001).nopw(); + map(0x340000, 0x340001).r(FUNC(koftball_state::prot_r)); + map(0x360000, 0x360001).w(FUNC(koftball_state::prot_w)); + map(0x380000, 0x380001).w(FUNC(koftball_state::prot_w)); + map(0x3a0000, 0x3a0001).w(FUNC(koftball_state::prot_w)); +} + void koftball_state::ramdac_map(address_map &map) { map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); @@ -259,6 +296,13 @@ void koftball_state::koftball(machine_config &config) oki.add_route(ALL_OUTPUTS, "rspeaker", 0.50); } +void koftball_state::jxzh(machine_config &config) +{ + koftball(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &koftball_state::jxzh_mem); +} + ROM_START( koftball ) ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 Code ROM_LOAD16_BYTE( "ft5_v16_c5.u14", 0x000001, 0x10000, CRC(45c856e3) SHA1(0a25cfc2b09f1bf996f9149ee2a7d0a7e51794b7) ) @@ -270,10 +314,72 @@ ROM_START( koftball ) ROM_LOAD16_BYTE( "ft5_v6_c1.u59", 0x40000, 0x20000, CRC(b33a008f) SHA1(c4fd40883fa1c1cbc58f7b342fed753c52f0cf59) ) ROM_LOAD16_BYTE( "ft5_v6_c2.u60", 0x40001, 0x20000, CRC(3dc22223) SHA1(dc74800c51de3b6a7fbf7214a1da1d2f3d2aea84) ) - ROM_REGION( 0x040000, "oki", 0 ) // Samples ROM_LOAD( "ft5_v6_c9.u21", 0x00000, 0x10000, CRC(f6216740) SHA1(3d1c795da2f8093e937107e3848cb96338536faf) ) +ROM_END +/******************************************************************* +Jin Xiu Zhong Hua, BMC 1996 +Hardware Info by Guru +--------------------- + +BMC-A-41210 +|-------------------------------------------------| +|21.47727MHz 9 AR17961 uPC1242H 1| +| 4 3 2 1 0| +|T518A 6264 7805 W| +| 555 |-----| VOL A| +| 6264 |40817| HM86171 Y| +| |-----| |-| +| 62256 | +| |-----| LM324|-| +| 62256 |PLCC | 3567 | +| |68 | M| +| |-| GAL1 |-----| 3.579545MHz A| +| |6| 5 6116 GAL2 H| +| |8| J| +| |0| SCAP DIP1 O| +| |0| N| +| |0| 6 6116 G| +| |-| DIP2 | +|-------------------------------------------------| +Notes: + 68000 - Clock 10.738635MHz [21.47727/2] + AR17961 - Equivalent to OKI M6295 4-Channel ADPCM Voice Synthesis LSI. Clock input 0.976239545MHz [21.47727/22]. Pin 7 HIGH + 3567 - Equivalent to Yamaha YM2413 OPLL FM Synthesis Sound Chip. Clock input 3.579545MHz + 61256 - 32kB x8-bit SRAM + 6264 - 8kB x8-bit SRAM + 6116 - 2kB x8-bit SRAM (both backed-up by 5.5V Supercap) + DIP1/2 - 8-position DIP Switch + GAL1/2 - LATTICE GAL16V8B PLD + uPC1242H - NEC uPC1242H Audio Power Amp + LM324 - LM324 Quad Operational Amplifier + 555 - 555 Timer (provides master reset) + 7805 - LM7805 5V Linear Regulator + HM86171 - HMC HM86171-80 Color Palette RAMDAC + 40817 - BMC QFP100 Custom Chip marked 'BMC VDB40817' + PLCC68 - Unknown PLCC68 IC. Surface scratched but likely to be BMC B816140 (CPLD) + T518A - Mitsumi PST518A Master Reset IC (TO92) + SCAP - 5.5V 0.1F Supercap + 5/6 - 27C1001 EPROM (main program) + 1/2/3/4 - 23C4000 mask ROM (gfx) + 9 - 23C2000 mask ROM (OKI samples) + +*******************************************************************/ + +ROM_START( jxzh ) + ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 Code + ROM_LOAD16_BYTE( "bmc_m5k.u14", 0x000001, 0x20000, CRC(43b67d0a) SHA1(f421c71165d79881c208d332416f1c82057f5680) ) + ROM_LOAD16_BYTE( "bmc_m6k.u15", 0x000000, 0x20000, CRC(410ee342) SHA1(2b83e0fc2c5f9a2d745755572eba751bfac107f5) ) + + ROM_REGION( 0x200000, "tiles", 0 ) + ROM_LOAD16_BYTE( "bmc_mj9601-3.u61", 0x000000, 0x80000, CRC(b0c66e6f) SHA1(7539178d3bd4c012f0dd2f642e5a02303779109d) ) + ROM_LOAD16_BYTE( "bmc_mj9601-4.u58", 0x000001, 0x80000, CRC(04a307f1) SHA1(8a45de790305c3cc4285a91d19b95d696d31bd11) ) + ROM_LOAD16_BYTE( "bmc_mj9601-1.u59", 0x100000, 0x80000, CRC(184b8ba8) SHA1(0b84b9540ff72a57982a8f9e107a6d8d9314fdd1) ) + ROM_LOAD16_BYTE( "bmc_mj9601-2.u60", 0x100001, 0x80000, CRC(f82e0f34) SHA1(4051c7b24f865cf7fb77eb89dde79cb30bdba7a0) ) + + ROM_REGION( 0x040000, "oki", 0 ) // Samples + ROM_LOAD( "bmc_mj9601-9.u21", 0x00000, 0x40000, CRC(0ffcae13) SHA1(f8501c7c8a8bebf5da95aa3b275dd514f1014971) ) ROM_END #if NVRAM_HACK @@ -318,7 +424,8 @@ void koftball_state::init_koftball() #endif } -} // Anonymous namespace +} // anonymous namespace -GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "King of Football", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "King of Football", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1996, jxzh, 0, jxzh, koftball, koftball_state, empty_init, ROT0, "BMC", "Jin Xiu Zhong Hua", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/igs/igs017.cpp b/src/mame/igs/igs017.cpp index 948d2671cec..79c2c55771c 100644 --- a/src/mame/igs/igs017.cpp +++ b/src/mame/igs/igs017.cpp @@ -2609,12 +2609,12 @@ void igs017_state::mgdh_mux_map(address_map &map) u8 igs017_state::sdmg2p_keys_r() { u8 ret = 0xff; - if (!BIT(m_input_select, 2)) ret &= bitswap<8>(m_io_key[0]->read(), 5, 4, 3, 2, 1, 0, 7, 6); - if (!BIT(m_input_select, 3)) ret &= bitswap<8>(m_io_key[1]->read(), 5, 4, 3, 2, 1, 0, 7, 6); - if (!BIT(m_input_select, 4)) ret &= bitswap<8>(m_io_key[2]->read(), 5, 4, 3, 2, 1, 0, 7, 6); - if (!BIT(m_input_select, 5)) ret &= bitswap<8>(m_io_key[3]->read(), 5, 4, 3, 2, 1, 0, 7, 6); - if (!BIT(m_input_select, 6)) ret &= bitswap<8>(m_io_key[4]->read(), 5, 4, 3, 2, 1, 0, 7, 6); - return ret; + if (!BIT(m_input_select, 2)) ret &= m_io_key[0]->read(); + if (!BIT(m_input_select, 3)) ret &= m_io_key[1]->read(); + if (!BIT(m_input_select, 4)) ret &= m_io_key[2]->read(); + if (!BIT(m_input_select, 5)) ret &= m_io_key[3]->read(); + if (!BIT(m_input_select, 6)) ret &= m_io_key[4]->read(); + return bitswap<8>(ret, 5, 4, 3, 2, 1, 0, 7, 6); } void igs017_state::sdmg2p_map(address_map &map) @@ -5244,7 +5244,7 @@ ROM_END /*************************************************************************** Manguan Caishen (V103CS) -满贯财神 (Mǎn Guàn Cáishén) +满贯财神 (Mǎnguàn Cáishén) IGS, 1998 PCB Layout @@ -5304,8 +5304,8 @@ ROM_END /*************************************************************************** -Chaoji Da Manguan II (China, V754C) -超級大滿貫(Chāojí dà mǎn guàn) +Chaoji Damanguan II (China, V754C) +超級大滿貫(Chāojí dàmǎnguàn) IGS, 1997 PCB Layout diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c2c93d16ef9..3b9446668d2 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -15004,6 +15004,7 @@ mjmaglmp // (c) 2000 BMC shendeng // (c) 1998 BMC @source:bmc/koftball.cpp +jxzh // (c) 1996 BMC koftball // (c) 1995 BMC @source:bmc/popobear.cpp diff --git a/src/mame/misc/astrcorp.cpp b/src/mame/misc/astrcorp.cpp index 296b389a38a..37d852e6947 100644 --- a/src/mame/misc/astrcorp.cpp +++ b/src/mame/misc/astrcorp.cpp @@ -2461,7 +2461,7 @@ ROM_START( speedmst ) ROM_LOAD( "5_speed_master.u44", 0x00000, 0x80000, CRC(5eacf25c) SHA1(affbf8176b6cbc406a281793c0a9c79e7175942d) ) // 27C4000 ROM_REGION16_LE( 0x80, "eeprom", 0 ) - ROM_LOAD( "93c46.u9", 0x0000, 0x0080, NO_DUMP ) + ROM_LOAD( "93c46.u9", 0x0000, 0x0080, CRC(5e03d141) SHA1(d475bd0509fb977d38f012c4eb1e9cb88c3d130a) ) ROM_REGION16_LE( 0x02, "astro_cpucode", 0 ) ROM_LOAD( "speedmst_cpucode.key", 0x00, 0x02, NO_DUMP ) @@ -2487,7 +2487,7 @@ ROM_START( speedmsta ) ROM_LOAD( "5_speed_master.u44", 0x00000, 0x80000, CRC(d2c7025f) SHA1(3337216811c8b81ce72cfdd1ed9eecd4b0622dc7) ) // SLDH, 27C4001 ROM_REGION16_LE( 0x80, "eeprom", 0 ) - ROM_LOAD( "93c46.u9", 0x0000, 0x0080, NO_DUMP ) + ROM_LOAD( "93c46.u9", 0x0000, 0x0080, BAD_DUMP CRC(5e03d141) SHA1(d475bd0509fb977d38f012c4eb1e9cb88c3d130a) ) // dumped for the D2.01.C set ROM_REGION16_LE( 0x02, "astro_cpucode", 0 ) ROM_LOAD( "speedmsta_cpucode.key", 0x00, 0x02, NO_DUMP ) @@ -2513,7 +2513,7 @@ ROM_START( speedmstb ) ROM_LOAD( "5_speed_master.u44", 0x00000, 0x80000, CRC(d2c7025f) SHA1(3337216811c8b81ce72cfdd1ed9eecd4b0622dc7) ) // 27C040 ROM_REGION16_LE( 0x80, "eeprom", 0 ) - ROM_LOAD( "93c46.u9", 0x0000, 0x0080, NO_DUMP ) + ROM_LOAD( "93c46.u9", 0x0000, 0x0080, BAD_DUMP CRC(5e03d141) SHA1(d475bd0509fb977d38f012c4eb1e9cb88c3d130a) ) // dumped for the D2.01.C set ROM_REGION16_LE( 0x02, "astro_cpucode", 0 ) ROM_LOAD( "speedmstb_cpucode.key", 0x00, 0x02, NO_DUMP ) diff --git a/src/mame/skeleton/sterz80.cpp b/src/mame/skeleton/sterz80.cpp index 1172a6f283f..4ce2c8d031c 100644 --- a/src/mame/skeleton/sterz80.cpp +++ b/src/mame/skeleton/sterz80.cpp @@ -31,9 +31,9 @@ MADE IN TAIWAN 2003 |-| 10WAY |-----| 22WAY | |---------| |--------------------| Notes: - Z80 - Zilog Z84C0008 Z80 CPU. Clock (possibly 7.5MHz; TO-DO) - U6295 - OKI M6295. Clock (TO-DO) - 62256 - 32kB x8-bit SRAM + Z80 - Zilog Z84C0008 Z80 CPU. Clock 13.560MHz + U6295 - OKI M6295. Clock 1.13MHz [13.560/12]. Pin 7 HIGH. + 62256 - 32kB x8-bit SRAM (the one nearest to the Z80 is battery-backed) BUTTON - Reset? Test? TLP620-4 - Toshiba TLP620-4 Photocoupler. Package contains 4 driver/receiver pairs. EMP7256 - Altera Max 7000-Series EPM7256SQC208 Programmable Logic Device @@ -142,14 +142,14 @@ INPUT_PORTS_END void sterz80_state::tongzi(machine_config &config) { // basic machine hardware - Z80(config, m_maincpu, 15'000'000 / 2); // TODO: clock / divisor + Z80(config, m_maincpu, 13.560_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &sterz80_state::program_map); m_maincpu->set_addrmap(AS_IO, &sterz80_state::io_map); // m_maincpu->set_vblank_int("screen", FUNC(sterz80_state::irq0_line_hold)); EEPROM_93C46_8BIT(config, "eeprom"); - DS12885(config, "rtc", XTAL(32'768)); // TODO: should be DS12B887 + DS12885(config, "rtc", 32.768_kHz_XTAL); // TODO: should be DS12B887 // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: verify everything once emulation works @@ -164,7 +164,7 @@ void sterz80_state::tongzi(machine_config &config) // sound hardware SPEAKER(config, "mono").front_center(); - OKIM6295(config, "oki", 1'000'000, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); // TODO: clock / divisor and pin 7 + OKIM6295(config, "oki", 13.560_MHz_XTAL / 12, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -191,6 +191,8 @@ void sterz80_state::init_tongzi() { // decrypt main CPU ROM // TODO + // the encryption seems to be based on address-determined XORs and data bitswaps. At a first glance the XORs seem to be chosen + // by bits 0, 1, 4, 5, 6 and 7 of the address, the data bitswaps by bits 0 and 1 of the address. // decrypt M6295 ROM // TODO