New systems marked not working

------------------------------
Tangram Q  [system11, buffi, rtw, f205v, Sean Sutton, Smitdogg, The Dumping Union]
This commit is contained in:
Ivan Vangelista 2024-11-12 21:07:35 +01:00
parent ecacee4733
commit 878d70d975
4 changed files with 200 additions and 1 deletions

View File

@ -34196,6 +34196,7 @@ silvland // Falcon
swimmer // (c) 1982 Tehkan swimmer // (c) 1982 Tehkan
swimmera // (c) 1982 Tehkan swimmera // (c) 1982 Tehkan
swimmerb // (c) 1982 Tehkan swimmerb // (c) 1982 Tehkan
tangramq // (c) 1983 SNK
toprollr // (c) 1983 Jaleco toprollr // (c) 1983 Jaleco
yamato // (c) 1983 Sega yamato // (c) 1983 Sega
yamato2 // (c) 1983 Sega yamato2 // (c) 1983 Sega

View File

@ -240,15 +240,22 @@ Dip location verified from manual for: cclimber, guzzler, swimmer
this causes them to crash after the a few rounds - confirmed on an original PCB. this causes them to crash after the a few rounds - confirmed on an original PCB.
They clearly weren't tested properly by the bootleggers. They clearly weren't tested properly by the bootleggers.
Tangram Q
---------
Inputs aren't correct, sound tempo is wrong (NMI ack problem?)
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "cclimber.h" #include "cclimber.h"
#include "cclimber_a.h" #include "cclimber_a.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "sound/samples.h" #include "sound/samples.h"
#include "sound/snkwave.h"
#include "speaker.h" #include "speaker.h"
@ -497,6 +504,27 @@ void cclimber_state::bagmanf_map(address_map &map)
map(0xb800, 0xb800).nopr(); map(0xb800, 0xb800).nopr();
} }
void cclimber_state::tangramq_map(address_map &map)
{
map(0x0000, 0x5fff).rom();
map(0x6000, 0x6bff).ram();
map(0x8000, 0x8000).portr("P1");
map(0x8020, 0x8020).portr("P2");
map(0x8800, 0x88ff).ram().share("bigspriteram");
map(0x9000, 0x93ff).mirror(0x0400).ram().share("videoram");
map(0x9800, 0x981f).ram().share("column_scroll");
map(0x9820, 0x987f).ram(); // not used, but initialized
map(0x9880, 0x989f).ram().share("spriteram");
map(0x98a0, 0x98db).ram(); // not used, but initialized
map(0x98dc, 0x98df).ram().share("bigspritectrl");
map(0x98e0, 0x98ff).ram(); // not used, but initialized
map(0x9c00, 0x9fff).ram().w(FUNC(cclimber_state::cclimber_colorram_w)).share("colorram");
map(0xa000, 0xa000).portr("P3");
map(0xa000, 0xa007).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0xb000, 0xb000).portr("DSW").w("soundlatch", FUNC(generic_latch_8_device::write));
map(0xb800, 0xb800).portr("SYSTEM");
}
void toprollr_state::toprollr_decrypted_opcodes_map(address_map &map) void toprollr_state::toprollr_decrypted_opcodes_map(address_map &map)
{ {
map(0x0000, 0x5fff).bankr("bank1d"); map(0x0000, 0x5fff).bankr("bank1d");
@ -557,6 +585,17 @@ void yamato_state::yamato_audio_portmap(address_map &map)
map(0x08, 0x08).r(FUNC(yamato_state::yamato_p1_r)); // ??? map(0x08, 0x08).r(FUNC(yamato_state::yamato_p1_r)); // ???
} }
void cclimber_state::tangramq_sound_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x4000, 0x4000).r("soundlatch", FUNC(generic_latch_8_device::read));
map(0x8000, 0x8001).w("ay1", FUNC(ay8910_device::address_data_w));
map(0x8002, 0x8007).w("wave", FUNC(snkwave_device::snkwave_w));
map(0x8008, 0x8009).w("ay2", FUNC(ay8910_device::address_data_w));
// map(0xa000, 0xa000) // TODO: NMI related?
map(0xe000, 0xe3ff).ram();
}
static INPUT_PORTS_START( cclimber ) static INPUT_PORTS_START( cclimber )
PORT_START("P1") PORT_START("P1")
@ -800,6 +839,89 @@ static INPUT_PORTS_START( rpatrol )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( tangramq )
PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2")
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("P3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // this drops the piece
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // pressing this one and the following together rotates pieces
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:3")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "Invincibility" ) PORT_DIPLOCATION("DSW1:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_START("SYSTEM")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW2:1,2")
PORT_DIPSETTING( 0x00, "1" )
PORT_DIPSETTING( 0x01, "2" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x03, "5" )
PORT_DIPNAME( 0x04, 0x04, "Freeze" ) PORT_DIPLOCATION("DSW2:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x70, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW2:5,6,7")
PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x60, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x50, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x30, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( swimmer ) static INPUT_PORTS_START( swimmer )
PORT_START("P1") PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
@ -1204,7 +1326,6 @@ void cclimber_state::root(machine_config &config)
// basic machine hardware // basic machine hardware
Z80(config, m_maincpu, 18.432_MHz_XTAL/3/2); // 3.072 MHz Z80(config, m_maincpu, 18.432_MHz_XTAL/3/2); // 3.072 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::cclimber_map); m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::cclimber_map);
m_maincpu->set_addrmap(AS_IO, &cclimber_state::cclimber_portmap);
LS259(config, m_mainlatch, 0); LS259(config, m_mainlatch, 0);
m_mainlatch->q_out_cb<0>().set(FUNC(cclimber_state::nmi_mask_w)); m_mainlatch->q_out_cb<0>().set(FUNC(cclimber_state::nmi_mask_w));
@ -1230,6 +1351,8 @@ void cclimber_state::cclimber(machine_config &config)
{ {
root(config); root(config);
m_maincpu->set_addrmap(AS_IO, &cclimber_state::cclimber_portmap);
// 7J on CCG-1 // 7J on CCG-1
m_mainlatch->q_out_cb<4>().set("cclimber_audio", FUNC(cclimber_audio_device::sample_trigger)); m_mainlatch->q_out_cb<4>().set("cclimber_audio", FUNC(cclimber_audio_device::sample_trigger));
@ -1250,6 +1373,29 @@ void cclimber_state::rpatrol(machine_config &config)
AY8910(config, "aysnd", 18.432_MHz_XTAL/3/2/2).add_route(ALL_OUTPUTS, "speaker", 0.5); AY8910(config, "aysnd", 18.432_MHz_XTAL/3/2/2).add_route(ALL_OUTPUTS, "speaker", 0.5);
} }
void cclimber_state::tangramq(machine_config &config)
{
root(config);
m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::tangramq_map);
Z80(config, m_audiocpu, 8_MHz_XTAL / 2); // divider not verified
m_audiocpu->set_addrmap(AS_PROGRAM, &cclimber_state::tangramq_sound_map);
m_screen->screen_vblank().append_inputline(m_audiocpu, INPUT_LINE_NMI); // TODO: probably wrong
// sound hardware
SPEAKER(config, "speaker").front_center();
GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, 0, HOLD_LINE);
AY8910(config, "ay1", 8_MHz_XTAL / 4).add_route(ALL_OUTPUTS, "speaker", 0.35); // divider not verified
AY8910(config, "ay2", 8_MHz_XTAL / 4).add_route(ALL_OUTPUTS, "speaker", 0.35); // divider not verified
SNKWAVE(config, "wave", 8_MHz_XTAL).add_route(ALL_OUTPUTS, "speaker", 0.30); // lack of divider not verified
}
void cclimber_state::cclimberx(machine_config &config) void cclimber_state::cclimberx(machine_config &config)
{ {
cclimber(config); cclimber(config);
@ -2385,6 +2531,51 @@ ROM_START( silvland )
ROM_END ROM_END
/*
Tangram Q
SNK ELECTRONICS A3002 UC01 + A2003UP03-01 PCBs
A3002 UC01 main components:
NEC D780C-1 CPU
18.432 MHz XTAL
2x HM6116LP-3 RAM (near program ROMs)
6x TMM315D-1 SRAM (near CPU)
2x M5L5101LP-1 RAM (near BG ROMs)
2x bank of 8 DIP switches
lots of TTL
A2003UP03-01 main components:
NEC D780C-1 CPU
2x AY-3-8910 sound chip
8 MHz XTAL
HM6116P-4 RAM
lots of TTL
*/
ROM_START(tangramq)
ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "m1.k5", 0x0000, 0x2000, CRC(dff92169) SHA1(805784afeba676306ed6c0d41d33ed0163bdc08e) )
ROM_LOAD( "m2.k4", 0x2000, 0x2000, CRC(1cbade75) SHA1(1fa276261428c392917df4a4dbd9f99710b9855e) )
ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "s1.a6", 0x0000, 0x2000, CRC(05af38f6) SHA1(7bdbf798964aa4d603fca0178b3f8fc251d207f6) )
ROM_REGION( 0x2000, "bigsprite", 0 )
ROM_LOAD( "b1.e19", 0x0000, 0x1000, CRC(f3ec2562) SHA1(859473c45b9d22c138b70ea649b93d41721e1e0d) ) // 1xxxxxxxxxxx = 0xFF
ROM_LOAD( "b2.e17", 0x1000, 0x1000, CRC(77d21b84) SHA1(7f9bfbfbc7fd51a97f15fee54ac851ddfa97b213) ) // 1xxxxxxxxxxx = 0xFF
ROM_REGION( 0x4000, "tile", 0 )
ROM_LOAD( "f1.h4", 0x0000, 0x2000, CRC(c7c3ffe1) SHA1(f8f0ac3b73f560af3ef0954e5d80984bad605ea2) )
ROM_LOAD( "f2.h2", 0x2000, 0x2000, CRC(dbc13c1f) SHA1(b299582f97a384b2d252d815a3c64e9f54346748) )
ROM_REGION( 0x60, "proms", 0 )
ROM_LOAD( "mb7051_m02.m6", 0x00, 0x20, CRC(b3fc1505) SHA1(5b94adde0428a26b815c7eb9b3f3716470d349c7) )
ROM_LOAD( "mb7051_m02.m7", 0x20, 0x20, CRC(26aada9e) SHA1(f59645e606ea4f0dd0fc4ea47dd03f526c534941) )
ROM_LOAD( "mb7051_m02.m8", 0x40, 0x20, CRC(676b3166) SHA1(29b9434cd34d43ea5664e436e2a24b54f8d88aac) )
ROM_END
/* This dump was a mess. 11n and 11k seem to be bad dumps, the second half should probably be sprite data /* This dump was a mess. 11n and 11k seem to be bad dumps, the second half should probably be sprite data
Comparing to set 2 11l and 11h are unnecessary, and are actually from Le Bagnard(set1), as is 5m. Comparing to set 2 11l and 11h are unnecessary, and are actually from Le Bagnard(set1), as is 5m.
5n ID'd as unknown, but it also is from bagnard with some patches. 5n ID'd as unknown, but it also is from bagnard with some patches.
@ -2933,6 +3124,8 @@ GAME( 1981, rpatroln, rpatrol, rpatrol, rpatrol, cclimber_state, empty_i
GAME( 1981, rpatrolb, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, rpatrolb, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, silvland, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Falcon", "Silver Land (hack of River Patrol)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, silvland, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Falcon", "Silver Land (hack of River Patrol)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, tangramq, 0, tangramq, tangramq, cclimber_state, empty_init, ROT270, "SNK", "Tangram Q", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
// see pacman.cpp for parent // see pacman.cpp for parent
GAME( 1985, cannonb, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game GAME( 1985, cannonb, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game
GAME( 1985, cannonb2, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (TV Game Gruenberg)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game GAME( 1985, cannonb2, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (TV Game Gruenberg)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game

View File

@ -48,6 +48,7 @@ public:
void cclimberx(machine_config &config); void cclimberx(machine_config &config);
void ckongb(machine_config &config); void ckongb(machine_config &config);
void rpatrol(machine_config &config); void rpatrol(machine_config &config);
void tangramq(machine_config &config);
protected: protected:
virtual void machine_start() override ATTR_COLD; virtual void machine_start() override ATTR_COLD;
@ -112,6 +113,8 @@ private:
void decrypted_opcodes_map(address_map &map) ATTR_COLD; void decrypted_opcodes_map(address_map &map) ATTR_COLD;
void rpatrol_map(address_map &map) ATTR_COLD; void rpatrol_map(address_map &map) ATTR_COLD;
void rpatrol_portmap(address_map &map) ATTR_COLD; void rpatrol_portmap(address_map &map) ATTR_COLD;
void tangramq_map(address_map &map) ATTR_COLD;
void tangramq_sound_map(address_map &map) ATTR_COLD;
}; };
class swimmer_state : public cclimber_state class swimmer_state : public cclimber_state

View File

@ -6,6 +6,8 @@
Driver by Frank Palazzolo (palazzol@comcast.net) Driver by Frank Palazzolo (palazzol@comcast.net)
Hardware is extremely similar to nichibutsu/cclimber.cpp (possibly derived)
- This driver was done with only flyer shots to go by. - This driver was done with only flyer shots to go by.
- Colors are a good guess (might be perfect) - Colors are a good guess (might be perfect)
- Clock and interrupt speeds for the sound CPU is a guess, but seem - Clock and interrupt speeds for the sound CPU is a guess, but seem