From 28fce32e875fa7e1fc3a73218e3759b88915db6e Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 2 Feb 2023 23:13:27 +0100 Subject: New working clones ------------------ Tekken 2 (US, TES3/VER.A) [Guru] --- src/mame/dataeast/astrof.cpp | 4 ++-- src/mame/dataeast/astrof.h | 7 ++++--- src/mame/hegenerglaser/milano.cpp | 2 +- src/mame/mame.lst | 1 + src/mame/namco/namcos11.cpp | 32 +++++++++++++++++++++++++++++--- src/mame/namco/namcos22.cpp | 2 +- src/mame/nintendo/cothello.cpp | 37 ++++++++++++++++++++----------------- 7 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/mame/dataeast/astrof.cpp b/src/mame/dataeast/astrof.cpp index 45faf4d42e0..54083ace6ad 100644 --- a/src/mame/dataeast/astrof.cpp +++ b/src/mame/dataeast/astrof.cpp @@ -42,7 +42,7 @@ * I know there must be at least one other ROM set for Astro Fighter I have played one that stoped between waves to show the next enemy - * Saturn: Space Fighter 3D is Space Fighter Mark II with extra game modes. + * Saturn: Space Fighter 3D is basically Space Fighter with extra game modes. It's not 3-dimensional. The game modes are: Storm, Sweeper, Scramble. Known issues/to-do's: @@ -57,7 +57,7 @@ emulates an unmodified PCB, you can enable the hacks in the DRIVER CONFIGURATION menu. - B&W cabinet versions also exist. + B&W cabinet versions of the Space Fighter games also exist. Versions of Tomahawk using the Astro Fighter PROM have been seen, see notes in ROM loading. diff --git a/src/mame/dataeast/astrof.h b/src/mame/dataeast/astrof.h index 76b9ca91d20..4ba45a4df94 100644 --- a/src/mame/dataeast/astrof.h +++ b/src/mame/dataeast/astrof.h @@ -14,8 +14,8 @@ class astrof_state : public driver_device { public: - astrof_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + astrof_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_astrof_color(*this, "astrof_color"), m_tomahawk_protection(*this, "tomahawk_prot"), @@ -23,7 +23,8 @@ public: m_maincpu(*this, "maincpu"), m_samples(*this, "samples"), m_sn(*this, "snsnd"), - m_screen(*this, "screen") { } + m_screen(*this, "screen") + { } void init_afire(); void init_abattle(); diff --git a/src/mame/hegenerglaser/milano.cpp b/src/mame/hegenerglaser/milano.cpp index 4f946d32acc..8ba1127e9cb 100644 --- a/src/mame/hegenerglaser/milano.cpp +++ b/src/mame/hegenerglaser/milano.cpp @@ -210,7 +210,7 @@ ROM_END ROM_START( nshort ) // 2.00 ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("nshort.bin", 0x0000, 0x10000, CRC(4bd51e23) SHA1(3f55cc1c55dae8818b7e9384b6b8d43dc4f0a1af) ) + ROM_LOAD("milano_3c59_nigel_short_21-sep-93", 0x0000, 0x10000, CRC(4bd51e23) SHA1(3f55cc1c55dae8818b7e9384b6b8d43dc4f0a1af) ) ROM_END } // anonymous namespace diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 22935272fac..f2fc386603d 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32424,6 +32424,7 @@ tekken2a // 1995.08 Tekken 2 (World, TES2/VER.A) tekken2b // 1995.09 Tekken 2 Ver.B (World, TES2/VER.B) tekken2jb // 1995.09 Tekken 2 Ver.B (Japan, TES1/VER.B) tekken2jc // 1995.11 Tekken 2 Ver.B (Japan, TES1/VER.C) +tekken2ua // 1995.08 Tekken 2 (US, TES3/VER.A) tekken2ub // 1995.09 Tekken 2 Ver.B (US, TES3/VER.B) tekkenac // 1995.01 Tekken (Asia, TE4/VER.C) tekkenb // 1994.12 Tekken (World, TE2/VER.B) diff --git a/src/mame/namco/namcos11.cpp b/src/mame/namco/namcos11.cpp index edd52e80443..d83c125198f 100644 --- a/src/mame/namco/namcos11.cpp +++ b/src/mame/namco/namcos11.cpp @@ -34,6 +34,7 @@ tekken2ub Tekken 2 Ver.B (TES3/VER.B) COH-100 SYSTEM11 tekken2b Tekken 2 Ver.B (TES2/VER.B) COH-100 " " " " tekken2jc Tekken 2 Ver.B (TES1/VER.C) COH-100 " " " " tekken2a Tekken 2 (TES2/VER.A) COH-100 " " " " +tekken2ua Tekken 2 (TES3/VER.A) COH-100 " " " " souledge Soul Edge Ver. II (SO4/VER.C) COH-100 / COH-110 SYSTEM11 MOTHER PCB SYSTEM11 ROM8 PCB C409 6 souledgeuc Soul Edge Ver. II (SO3/VER.C) COH-100 / COH-110 " " " " souledgeua Soul Edge (SO3/VER.A) COH-100 / COH-110 " " " " @@ -1660,6 +1661,30 @@ ROM_START( tekken2ub ) ROM_LOAD( "tes1wave.8k", 0x800000, 0x400000, CRC(34a34eab) SHA1(8e83a579abdcd419dc5cff8aa4c1d7e6c3add773) ) ROM_END +ROM_START( tekken2ua ) + ROM_REGION32_LE( 0x0400000, "maincpu:rom", 0 ) /* main prg */ + ROM_LOAD16_BYTE( "tes3vera.2l", 0x0000000, 0x100000, CRC(0276680b) SHA1(508bb1c8a0ce929181508108ad3797e67ddd3df8) ) + ROM_LOAD16_BYTE( "tes3vera.2j", 0x0000001, 0x100000, CRC(80e9b5ec) SHA1(2f6313492f0d78b9745303418cd77347d14acc8c) ) + ROM_LOAD16_BYTE( "tes3vera.2k", 0x0200000, 0x100000, CRC(78e2ce1a) SHA1(fb242725dc72fa234bd7df81cec57fe010cf58f3) ) + ROM_LOAD16_BYTE( "tes3vera.2f", 0x0200001, 0x100000, CRC(fbb0b146) SHA1(08b11ac0fbfeed62910c5cb5ff7b5939ecbca142) ) + + ROM_REGION32_LE( 0x1000000, "bankedroms", 0 ) /* main data */ + ROM_LOAD16_BYTE( "tes1rom0l.ic6", 0x0000000, 0x200000, CRC(fc904ede) SHA1(cea378ba86f94beadb3d67685f1b8c141f478abe) ) + ROM_LOAD16_BYTE( "tes1rom0u.ic5", 0x0000001, 0x200000, CRC(57b38f5d) SHA1(edb4beab47b1339a5b1bc8071086abfcba57722e) ) + ROM_LOAD16_BYTE( "tes1rom1l.ic8", 0x0400000, 0x200000, CRC(aa48f04b) SHA1(f7383d2b3a84c4e649a27c0ad1e6af4702ec0a17) ) + ROM_LOAD16_BYTE( "tes1rom1u.ic3", 0x0400001, 0x200000, CRC(b147c543) SHA1(c4b18c218999ec73d04c92e06fb3e6165ceebf2b) ) + ROM_LOAD16_BYTE( "tes1rom2l.ic7", 0x0800000, 0x200000, CRC(b08da52c) SHA1(31fe2021d0fe37c16555650dd10d26ed80d9b493) ) + ROM_LOAD16_BYTE( "tes1rom2u.ic4", 0x0800001, 0x200000, CRC(8a1561b8) SHA1(ebc02c9e7033d54aefb5034c97a3c8cd749b5600) ) + ROM_LOAD16_BYTE( "tes1rom3l.ic9", 0x0c00000, 0x200000, CRC(d5ac0f18) SHA1(342d063f7974bd1f90b5ca4832dfa4fbc9605453) ) + ROM_LOAD16_BYTE( "tes1rom3u.ic1", 0x0c00001, 0x200000, CRC(44ed509d) SHA1(27e26aaf5ce72ab686f3f05743b1d91b5334b4e0) ) + + ROM_REGION16_LE( 0x80000, "c76", 0 ) /* sound data */ + ROM_LOAD( "tes1sprog.6d", 0x0000000, 0x040000, CRC(af18759f) SHA1(aabd7d1384925781d37f860605a5d4622e0fc2e4) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* samples */ + ROM_LOAD( "tes1wave.8k", 0x800000, 0x400000, CRC(34a34eab) SHA1(8e83a579abdcd419dc5cff8aa4c1d7e6c3add773) ) +ROM_END + ROM_START( tekken2b ) ROM_REGION32_LE( 0x0400000, "maincpu:rom", 0 ) /* main prg */ ROM_LOAD16_BYTE( "tes2verb.2l", 0x0000000, 0x100000, CRC(aa9a4503) SHA1(e6fdd34216591510593bbda0232ddc0fcd80e80b) ) @@ -1825,6 +1850,9 @@ ROM_START( xevi3dgj ) ROM_RELOAD( 0x800000, 0x400000 ) ROM_END +} // anonymous namespace + + /* 1 = Japan 2 = World @@ -1833,9 +1861,6 @@ ROM_END 9 = Location Test */ -} // anonymous namespace - - GAME( 1994, tekken, 0, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (World, TE2/VER.C)", 0 ) GAME( 1994, tekkenac, tekken, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (Asia, TE4/VER.C)", 0 ) GAME( 1994, tekkenb, tekken, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (World, TE2/VER.B)", 0 ) @@ -1846,6 +1871,7 @@ GAME( 1995, tekken2b, tekken2, tekken2o, tekken, namcos11_state, empty_ GAME( 1995, tekken2jc, tekken2, tekken2o, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken 2 Ver.B (Japan, TES1/VER.C)", 0 ) GAME( 1995, tekken2jb, tekken2, tekken2o, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken 2 Ver.B (Japan, TES1/VER.B)", 0 ) GAME( 1995, tekken2a, tekken2, tekken2o, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken 2 (World, TES2/VER.A)", 0 ) +GAME( 1995, tekken2ua, tekken2, tekken2o, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken 2 (US, TES3/VER.A)", 0 ) GAME( 1996, souledge, 0, souledge, souledge, namcos11_state, empty_init, ROT0, "Namco", "Soul Edge Ver. II (Asia, SO4/VER.C)", 0 ) GAME( 1995, souledgeuc, souledge, souledge, souledge, namcos11_state, empty_init, ROT0, "Namco", "Soul Edge Ver. II (US, SO3/VER.C)", 0 ) GAME( 1995, souledgea, souledge, souledge, souledge, namcos11_state, empty_init, ROT0, "Namco", "Soul Edge (World, SO2/VER.A)", 0 ) diff --git a/src/mame/namco/namcos22.cpp b/src/mame/namco/namcos22.cpp index 6dccba2710e..88876febb63 100644 --- a/src/mame/namco/namcos22.cpp +++ b/src/mame/namco/namcos22.cpp @@ -5425,7 +5425,7 @@ ROM_START( alpines ) ROM_LOAD( "af1wavea.2l", 0x000000, 0x400000, CRC(28cca494) SHA1(4ff87ab85fd17bf8dbee5b03d99cc5c31dd6349a) ) ROM_END -ROM_START( alpinesa ) // only 4 different DWORDs at 0x700, watchpoint does not trigger there +ROM_START( alpinesa ) // only 4 different DWORDs at 0x700, pretty certain it's the serial number ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ ROM_LOAD32_BYTE( "af2ver-a_ll.ic2", 0x000003, 0x200000, CRC(d8025e98) SHA1(e1c08557e70d632bf1e99356d6c6f76b5f407b8f) ) ROM_LOAD32_BYTE( "af2ver-a_lm.ic3", 0x000002, 0x200000, CRC(5f805d51) SHA1(b7fa9028deeaf1c549e9c2d6099925a0d0ad1598) ) diff --git a/src/mame/nintendo/cothello.cpp b/src/mame/nintendo/cothello.cpp index 508929f90d6..394b62f846a 100644 --- a/src/mame/nintendo/cothello.cpp +++ b/src/mame/nintendo/cothello.cpp @@ -2,7 +2,7 @@ // copyright-holders:hap /******************************************************************************* -Nintendo Computer Othello +Nintendo Computer Othello (コンピューター オセロ) This is Nintendo's 1st microprocessor-based arcade game. It's a cocktail cabinet, P1 side has 10 buttons, and P2 side has 4. @@ -14,7 +14,8 @@ Hardware notes: - PCB label: COG CPU - M58710S (8080A), 3.579545MHz XTAL - 3*1KB M58732S 2708 ROM, 4th socket is empty -- 256 bytes RAM (2*M58722P 2111A), 0.5KB DRAM (M58755S) +- 256 bytes RAM (2*M58722P 2111A) +- 0.5KB DRAM (M58755S) for framebuffer - M58741P Color TV Interface, 64*64 1bpp video - 7seg time counter (not software controlled) - beeper @@ -27,7 +28,7 @@ TODO: due to the M58741P HOLD pin halting the 8080, which is not emulated. - Is there a button select somewhere? I really can't find any. Or is current input emulation correct where for example P1 can move P2 cursor? (the only - unique P2 button is the Set button) + unique P2 button is the Set button). - It's not known if the screen is color or B&W + overlay, but since the video chip is meant for a color tv, let's assume the green tint is from the screen itself. Photos of the home version also show a green tint. @@ -73,7 +74,7 @@ private: required_shared_ptr m_vram; required_device m_beeper; required_ioport_array<4> m_inputs; - output_finder<4> m_digits; + output_finder<3> m_digits; void main_map(address_map &map); @@ -87,6 +88,7 @@ private: TIMER_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); } u16 m_counter = 0; + u8 m_sound_data = 0; emu_timer *m_counter_timer; emu_timer *m_beeper_off; }; @@ -99,6 +101,7 @@ void cothello_state::machine_start() m_beeper_off = timer_alloc(FUNC(cothello_state::beeper_off), this); save_item(NAME(m_counter)); + save_item(NAME(m_sound_data)); } @@ -145,13 +148,10 @@ TIMER_CALLBACK_MEMBER(cothello_state::counter_tick) u8 max = std::clamp(int(m_inputs[3]->read()), 1, 9); u8 high = (m_counter / 100) % 10; - if (high == 0 || high == max) - m_maincpu->set_input_line(0, HOLD_LINE); - if (high != max) m_counter_timer->adjust(attotime::from_seconds(1)); - // output counter to 7segs + // output counter to 7segs (don't know which decoder chip, but 6/9 has roof/tail) static const u8 led_map[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; m_digits[0] = led_map[m_counter % 10]; @@ -182,17 +182,19 @@ void cothello_state::sound_w(u8 data) if (data & 0x80) { // d3: beeper start - if (data & 8) + if (~m_sound_data & data & 8) { m_beeper->set_state(1); - m_beeper_off->adjust(attotime::from_msec(80)); + m_beeper_off->adjust(attotime::from_msec(80)); // approximation } // d0-d2: beeper frequency u8 freq = (data & 0x7) + 1; - const u32 base = 3500; + const u32 base = 3500; // approximation m_beeper->set_clock(base / freq); } + + m_sound_data = data; } @@ -209,7 +211,7 @@ void cothello_state::main_map(address_map &map) map(0x8000, 0x8000).w(FUNC(cothello_state::sound_w)); map(0xa000, 0xa000).r(FUNC(cothello_state::coin_r)); map(0xc000, 0xffff).writeonly().share("vram"); - map(0xc040, 0xc07f).mirror(0x3f00).nopw(); + map(0xc040, 0xc0ff).mirror(0x3f00).nopw(); } @@ -225,9 +227,9 @@ static INPUT_PORTS_START( cothello ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START3 ) PORT_NAME("2 Players Start Sente") // 2 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START4 ) PORT_NAME("2 Players Start Gote") // 1 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Reset") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Abort") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Reset") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 Abort") + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) PORT_START("IN.1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY @@ -269,7 +271,8 @@ INPUT_PORTS_END void cothello_state::cothello(machine_config &config) { // basic machine hardware - I8080A(config, m_maincpu, 750000); + I8080A(config, m_maincpu, 750000); // wrong, see TODO + m_maincpu->set_vblank_int("screen", FUNC(cothello_state::irq0_line_hold)); m_maincpu->set_addrmap(AS_PROGRAM, &cothello_state::main_map); // video hardware @@ -307,4 +310,4 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT MACHINE INPUT CLASS INIT SCREEN COMPANY, FULLNAME, FLAGS -GAMEL(1978, cothello, 0, cothello, cothello, cothello_state, empty_init, ROT0, "Nintendo", "Computer Othello", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_cothello ) +GAMEL(1978, cothello, 0, cothello, cothello, cothello_state, empty_init, ROT0, "Nintendo", "Computer Othello", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING, layout_cothello ) -- cgit v1.2.3