mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
New working clones
------------------ Super Volleyball (US) [Domenico Cervini] - misc/gms.cpp: addressed feedback on previous commit
This commit is contained in:
parent
26a310422a
commit
4997d62163
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user