From 4997d62163664182efdbfe892888a1df101fd343 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sun, 17 Sep 2023 20:59:37 +0200 Subject: New working clones ------------------ Super Volleyball (US) [Domenico Cervini] - misc/gms.cpp: addressed feedback on previous commit --- src/mame/mame.lst | 1 + src/mame/misc/gms.cpp | 42 +++++++++++++++++++++++++----------------- src/mame/vsystem/rpunch.cpp | 44 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 64 insertions(+), 23 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4278106d227..a7514d6b7ff 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -45352,6 +45352,7 @@ svolley // (c) 1989 V-System Co. (Japan) svolleybl // bootleg svolleyk // (c) 1989 V-System Co. (Korea) svolleyu // (c) 1989 V-System Co. + Data East license (US) +svolleyua // (c) 1989 V-System Co. (Japan) @source:vsystem/suprslam.cpp suprslam // (c) 1995 Banpresto diff --git a/src/mame/misc/gms.cpp b/src/mame/misc/gms.cpp index 857bdf7d08a..85598ac6d2a 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -128,7 +128,7 @@ protected: private: uint8_t m_mux_data = 0; - uint16_t m_dip_mux = 0; + uint16_t m_input_matrix = 0; //uint16_t m_prot_data = 0; void mcu_io(address_map &map); @@ -137,8 +137,8 @@ private: void rbspm_mem(address_map &map); uint16_t unk_r(); - uint16_t dip_mux_r(); - void dip_mux_w(uint16_t data); + uint16_t input_matrix_r(); + void input_matrix_w(uint16_t data); void tilebank_w(uint16_t data); uint8_t mcu_io_r(offs_t offset); void mcu_io_w(offs_t offset, uint8_t data); @@ -177,17 +177,17 @@ uint16_t gms_2layers_state::unk_r() return machine().rand(); } -uint16_t gms_2layers_state::dip_mux_r() +uint16_t gms_2layers_state::input_matrix_r() { uint16_t res = 0xffff; // TODO: & 0x00ff are the inputs for keyboard mode in rbmk - switch (m_dip_mux & 0xf000) + switch (m_input_matrix & 0xf000) { case 0x1000: res = m_dsw[0]->read(); break; - case 0x2000: if (m_dsw[1]) res = m_dsw[1]->read(); break; - case 0x4000: if (m_dsw[2]) res = m_dsw[2]->read(); break; - case 0x8000: if (m_dsw[3]) res = m_dsw[3]->read(); break; + case 0x2000: res = m_dsw[1].read_safe(0xffff); break; + case 0x4000: res = m_dsw[2].read_safe(0xffff); break; + case 0x8000: res = m_dsw[3].read_safe(0xffff); break; } return res; @@ -205,9 +205,9 @@ void gms_2layers_state::vram_w(offs_t offset, u16 data, u16 mem_mask) m_tilemap[Which]->mark_tile_dirty(offset); } -void gms_2layers_state::dip_mux_w(uint16_t data) +void gms_2layers_state::input_matrix_w(uint16_t data) { - m_dip_mux = data; + m_input_matrix = data; } void gms_2layers_state::eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask) @@ -234,7 +234,7 @@ void gms_2layers_state::rbmk_mem(address_map &map) map(0x980300, 0x983fff).ram(); // 0x2048 words ???, byte access map(0x9c0000, 0x9c0fff).ram().w(FUNC(gms_2layers_state::vram_w<1>)).share(m_vidram[1]); map(0xb00000, 0xb00001).w(FUNC(gms_2layers_state::eeprom_w)); - map(0xc00000, 0xc00001).rw(FUNC(gms_2layers_state::dip_mux_r), FUNC(gms_2layers_state::dip_mux_w)); + map(0xc00000, 0xc00001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0xc08000, 0xc08001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); map(0xc10000, 0xc10001).portr("IN2"); map(0xc18080, 0xc18081).r(FUNC(gms_2layers_state::unk_r)); // TODO: from MCU? @@ -247,7 +247,7 @@ void gms_2layers_state::rbspm_mem(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x200001).w(FUNC(gms_2layers_state::eeprom_w)); // wrong - map(0x300000, 0x300001).rw(FUNC(gms_2layers_state::dip_mux_r), FUNC(gms_2layers_state::dip_mux_w)); + map(0x300000, 0x300001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0x308000, 0x308001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); // ok map(0x310000, 0x310001).portr("IN2"); map(0x318080, 0x318081).r(FUNC(gms_2layers_state::unk_r)); @@ -266,7 +266,7 @@ void gms_2layers_state::super555_mem(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x10ffff).ram(); - map(0x600000, 0x600001).rw(FUNC(gms_2layers_state::dip_mux_r), FUNC(gms_2layers_state::dip_mux_w)); + map(0x600000, 0x600001).rw(FUNC(gms_2layers_state::input_matrix_r), FUNC(gms_2layers_state::input_matrix_w)); map(0x608000, 0x608001).portr("IN1").w(FUNC(gms_2layers_state::tilebank_w)); // ok map(0x610000, 0x610001).portr("IN2"); map(0x618080, 0x618081).nopr();//.lr16(NAME([this] () -> uint16_t { return m_prot_data; })); // reads something here from below, if these are hooked up booting stops with '0x09 U64 ERROR', like it's failing some checksum test @@ -572,7 +572,7 @@ static INPUT_PORTS_START( magslot ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // but recognized for password entering PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // TODO: verify - + // 3 8-dip banks on PCB PORT_START("DSW1") // Game setup is password protected, needs reverse engineering of the password PORT_DIPNAME( 0x0001, 0x0001, "DSW1" ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) @@ -839,6 +839,16 @@ static INPUT_PORTS_START( super555 ) PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:8") // not shown in test mode PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("DSW4") + PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW4:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW4:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW4:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW4:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW4:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x00, "SW4:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x00, "SW4:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW4:8" ) INPUT_PORTS_END static INPUT_PORTS_START( sc2in1 ) @@ -1179,11 +1189,9 @@ void gms_2layers_state::video_start() m_tilemap[1]->set_transparent_pen(0); - // m_tilemap[2] // TODO: for magslot and sc2in1 - save_item(NAME(m_tilebank)); save_item(NAME(m_mux_data)); - save_item(NAME(m_dip_mux)); + save_item(NAME(m_input_matrix)); } void gms_3layers_state::video_start() diff --git a/src/mame/vsystem/rpunch.cpp b/src/mame/vsystem/rpunch.cpp index 2809eed09da..837b66446d7 100644 --- a/src/mame/vsystem/rpunch.cpp +++ b/src/mame/vsystem/rpunch.cpp @@ -1110,6 +1110,37 @@ ROM_START( svolleyu ) ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) ) ROM_END + // VS-68K-2 (H2) PCB, same PCB as the svolley set but this has some MASK ROMs. + // Shows for use in Japan disclaimer but has English text and makes you play as the USA like svolleyu, but no Data East license. +ROM_START( svolleyua ) + ROM_REGION( 0x40000, "maincpu", 0 ) // differs + ROM_LOAD16_BYTE( "h0.ic137", 0x00000, 0x10000, CRC(58cfa5d7) SHA1(2e07121b301d4371c0b2bc865276772bf5b923e5) ) // 27512 + ROM_LOAD16_BYTE( "l0.ic136", 0x00001, 0x10000, CRC(b1f5a54c) SHA1(71b9c9b5cca93c65a87de10030e64005fe3f605c) ) // 27512 + ROM_LOAD16_BYTE( "h1.ic127", 0x20000, 0x08000, CRC(3c9721ff) SHA1(4a23401667af01b5255d86e2acb66fd47bd40600) ) // 27256 + ROM_LOAD16_BYTE( "l1.ic126", 0x20001, 0x08000, CRC(55cfabce) SHA1(c35d9cbf54f5103703a169b4764e063f55f5e6ef) ) // 27256 + + ROM_REGION( 0x10000, "audiocpu", 0 ) // same + ROM_LOAD( "1.ic112", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) ) // 27512 + + ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF ) // same but split differently + ROM_LOAD16_WORD( "lh532099.ic46", 0x00000, 0x40000, CRC(9428cc36) SHA1(d915dc6ee16cca695fd8b2ff3049a9cc7f601e34) ) // 2m MASK ROM, 27C020 compatible + ROM_LOAD16_WORD_SWAP( "7.ic35", 0x40000, 0x10000, CRC(83b20b91) SHA1(043cb6035d762fca3955221edee284fbcf0f8d1e) ) // 27512, double sized but second half 0x00 filled + + ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF ) // same but split differently + ROM_LOAD16_WORD( "lh53200a.ic47", 0x00000, 0x40000, CRC(75930468) SHA1(be5889b969ede70a8e39932e91fd6bd24b9f9df2) ) // 2m MASK ROM, 27C020 compatible + ROM_LOAD16_WORD_SWAP( "10.ic36", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) ) // 27512 + + ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF ) // same but split differently + ROM_LOAD16_WORD( "lh5320h7.ic51", 0x00000, 0x40000, CRC(152ff5b6) SHA1(8574f59757d198b197284efabb2befe3a7e41d45) ) // 2m MASK ROM, 27C020 compatible + ROM_LOAD16_BYTE( "s0.ic18", 0x60000, 0x08000, CRC(4d6c8f0c) SHA1(27f58a53cd6aef071c685eda532e4909ea915c8d) ) // 27256 + ROM_LOAD16_BYTE( "s1.ic43", 0x60001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) ) // 27256, S1 was not readable but since S0 matches it's almost certain this does too + + ROM_REGION( 0x40000, "upd", 0 ) // same but split differently + ROM_LOAD( "4.ic114", 0x00000, 0x10000, CRC(c4effee6) SHA1(84dece09139f804dcf8a07c2089cec84515eba16) ) // 27512 + ROM_LOAD( "3.ic123", 0x10000, 0x10000, CRC(5a818eb4) SHA1(a4596a9aedda0b362546e4de7cbbdf1eb1fd7ade) ) // 27512 + ROM_LOAD( "2.ic133", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) ) // 27512 +ROM_END + ROM_START( svolleybl ) ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ @@ -1155,12 +1186,13 @@ ROM_END * *************************************/ -// year name parent machine input class init rot company description flags -GAME( 1987, rabiolep, 0, rpunch, rabiolep, rpunch_state, empty_init, ROT0, "V-System Co.", "Rabio Lepus (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1987, rpunch, rabiolep, rpunch, rpunch, rpunch_state, empty_init, ROT0, "V-System Co. (Bally/Midway/Sente license)", "Rabbit Punch (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1989, svolley, 0, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co.", "Super Volleyball (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1989, svolleyk, svolley, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co.", "Super Volleyball (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1989, svolleyu, svolley, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co. (Data East license)", "Super Volleyball (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +// year name parent machine input class init rot company description flags +GAME( 1987, rabiolep, 0, rpunch, rabiolep, rpunch_state, empty_init, ROT0, "V-System Co.", "Rabio Lepus (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1987, rpunch, rabiolep, rpunch, rpunch, rpunch_state, empty_init, ROT0, "V-System Co. (Bally/Midway/Sente license)", "Rabbit Punch (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1989, svolley, 0, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co.", "Super Volleyball (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1989, svolleyk, svolley, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co.", "Super Volleyball (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1989, svolleyu, svolley, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co. (Data East license)", "Super Volleyball (US, Data East license)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1989, svolleyua, svolley, svolley, svolley, svolley_state, empty_init, ROT0, "V-System Co.", "Super Volleyball (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // video registers are changed, and there's some kind of RAM at 090xxx, possible a different sprite scheme for the bootleg (even if the original is intact) // the sound system seems to be ripped from the later Power Spikes (see aerofgt.cpp) -- cgit v1.2.3