New working machines

--------------------
Pastel Island (Japan, prototype) [ShouTime, David Haywood]
This commit is contained in:
hap 2018-12-22 11:33:51 +01:00
parent 2c25acade2
commit 828c8d4cbc
4 changed files with 217 additions and 116 deletions

View File

@ -187,8 +187,7 @@ void ssv_state::update_irq_state()
IRQ_CALLBACK_MEMBER(ssv_state::irq_callback)
{
int i;
for ( i = 0; i <= 7; i++ )
for (int i = 0; i <= 7; i++)
{
if (m_requested_int & (1 << i))
{
@ -243,6 +242,16 @@ TIMER_DEVICE_CALLBACK_MEMBER(ssv_state::interrupt)
update_irq_state();
}
}
else if ((scanline == 120) && m_raster_interrupt_enabled)
{
/* scanline can almost certainly be programmed, where is the register? (unless it's really just a 'half screen' interrupt)
this split position seems to be correct for pastelis 2 player mode, the end credits aren't quite right, but like the 'for japan' warning it seems to be
more based on polling vblank_read than the raster interrupt.
note, janjans1 and keithlcy and ryorioh might be using it too (they enable this IRQ level at least) */
m_requested_int |= 1 << 2;
update_irq_state();
//m_screen->update_partial(m_screen->vpos() - 1);
}
else if(scanline == 240)
{
m_requested_int |= 1 << 3; // vblank
@ -671,8 +680,7 @@ WRITE16_MEMBER(ssv_state::srmp7_sound_bank_w)
if (ACCESSING_BITS_0_7)
{
int bank = 0x400000/2 * (data & 1); // uint16_t address
int voice;
for (voice = 0; voice < 32; voice++)
for (int voice = 0; voice < 32; voice++)
m_ensoniq->voice_bank_w(voice, bank);
}
// popmessage("%04X",data);
@ -1229,6 +1237,61 @@ static INPUT_PORTS_START( dynagear )
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Pastel Island
***************************************************************************/
static INPUT_PORTS_START( pastelis )
PORT_INCLUDE(ssv_joystick)
PORT_MODIFY("DSW1") // IN0 - $210002
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) ) PORT_DIPLOCATION( "DSW1:1" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION( "DSW1:2" )
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x0004, IP_ACTIVE_LOW, "DSW1:3" )
PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION( "DSW1:4" )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) PORT_DIPLOCATION( "DSW1:5,6" )
PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION( "DSW1:7,8" )
PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) )
PORT_MODIFY("DSW2") // IN0 - $210004
PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION( "DSW2:1,2" )
PORT_DIPSETTING( 0x0002, DEF_STR( Easy) )
PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) PORT_DIPLOCATION( "DSW2:3" )
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) PORT_DIPLOCATION( "DSW2:4" )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) PORT_DIPLOCATION( "DSW2:5,6" )
PORT_DIPSETTING( 0x0020, "1" )
PORT_DIPSETTING( 0x0030, "2" )
PORT_DIPSETTING( 0x0010, "3" )
PORT_DIPSETTING( 0x0000, "4" )
PORT_DIPNAME( 0x00c0, 0x00c0, "Extend" ) PORT_DIPLOCATION( "DSW2:7,8" )
PORT_DIPSETTING( 0x0000, "70000, every 90000" )
PORT_DIPSETTING( 0x0040, "every 70000" )
PORT_DIPSETTING( 0x0080, "50000, every 70000" )
PORT_DIPSETTING( 0x00c0, "every 50000" )
PORT_START("ADD_BUTTONS") // IN5 - $500008
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Eagle Shot Golf
@ -2452,59 +2515,61 @@ GFXDECODE_END
***************************************************************************/
void ssv_state::init(int interrupt_ultrax)
void ssv_state::init_ssv()
{
int i;
for (i = 0; i < 16; i++)
m_tile_code[i] = ( (i & 8) ? (1 << 16) : 0 ) +
( (i & 4) ? (2 << 16) : 0 ) +
( (i & 2) ? (4 << 16) : 0 ) +
( (i & 1) ? (8 << 16) : 0 ) ;
for (int i = 0; i < 16; i++)
m_tile_code[i] = bitswap<4>(i,0,1,2,3) << 16;
enable_video(1);
m_interrupt_ultrax = interrupt_ultrax;
m_interrupt_ultrax = 0;
save_item(NAME(m_requested_int));
save_item(NAME(m_irq_enable));
}
void ssv_state::init_hypreac2_common()
void ssv_state::init_ssv_tilescram()
{
int i;
init_ssv();
for (i = 0; i < 16; i++)
m_tile_code[i] = (i << 16);
for (int i = 0; i < 16; i++)
m_tile_code[i] = i << 16;
}
void ssv_state::init_eaglshot_banking()
// srmp4
// ((uint16_t *)memregion("maincpu")->base())[0x2b38/2] = 0x037a; /* patch to see gal test mode */
void ssv_state::init_sexy()
{
init_hypreac2_common();
init_ssv_tilescram();
save_item(NAME(m_sxyreact_serial));
save_item(NAME(m_sxyreact_dial));
}
void ssv_state::init_eaglshot()
{
init_ssv_tilescram();
membank("gfxrom")->configure_entries(0, 6+1, memregion("gfxdata")->base(), 0x200000);
}
void ssv_state::init_drifto94() { init(0); }
void ssv_state::init_eaglshot() { init(0); init_eaglshot_banking(); }
void ssv_state::init_gdfs() { init(0); }
void ssv_state::init_hypreact() { init(0); }
void ssv_state::init_hypreac2() { init(0); init_hypreac2_common(); }
void ssv_state::init_janjans1() { init(0); }
void ssv_state::init_keithlcy() { init(0); }
void ssv_state::init_meosism() { init(0); }
void ssv_state::init_mslider() { init(0); }
void ssv_state::init_ryorioh() { init(0); }
void ssv_state::init_srmp4() { init(0);
// ((uint16_t *)memregion("maincpu")->base())[0x2b38/2] = 0x037a; /* patch to see gal test mode */
void ssv_state::init_jsk()
{
init_ssv();
save_item(NAME(m_latches));
}
void ssv_state::init_srmp7() { init(0); }
void ssv_state::init_stmblade() { init(0); }
void ssv_state::init_survarts() { init(0); }
void ssv_state::init_dynagear() { init(0); }
void ssv_state::init_sxyreact() { init(0); init_hypreac2_common(); save_item(NAME(m_sxyreact_serial)); save_item(NAME(m_sxyreact_dial)); }
void ssv_state::init_cairblad() { init(0); init_hypreac2_common(); }
void ssv_state::init_sxyreac2() { init(0); init_hypreac2_common(); save_item(NAME(m_sxyreact_serial)); save_item(NAME(m_sxyreact_dial)); }
void ssv_state::init_twineag2() { init(1); }
void ssv_state::init_ultrax() { init(1); }
void ssv_state::init_vasara() { init(0); }
void ssv_state::init_jsk() { init(0); save_item(NAME(m_latches)); }
void ssv_state::init_pastelis()
{
init_ssv();
m_raster_interrupt_enabled = true;
}
void ssv_state::init_ssv_irq1()
{
init_ssv();
m_interrupt_ultrax = 1;
}
#define SSV_MASTER_CLOCK XTAL(48'000'000)/3
@ -2529,6 +2594,7 @@ void ssv_state::ssv(machine_config &config)
m_screen->set_raw(SSV_PIXEL_CLOCK,SSV_HTOTAL,SSV_HBEND,SSV_HBSTART,SSV_VTOTAL,SSV_VBEND,SSV_VBSTART);
m_screen->set_screen_update(FUNC(ssv_state::screen_update));
m_screen->set_palette(m_palette);
//m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ssv);
PALETTE(config, m_palette, 0x8000).set_format(PALETTE_FORMAT_XRGB);
@ -2732,7 +2798,7 @@ void ssv_state::stmblade(machine_config &config)
m_dsp->set_addrmap(AS_DATA, &ssv_state::dsp_data_map);
/* don't need this, game just does a simple check at boot then the DSP stalls into a tight loop. */
// MCFG_QUANTUM_PERFECT_CPU("maincpu")
//config.m_perfect_cpu_quantum = subtag("maincpu");
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -2877,6 +2943,16 @@ void ssv_state::jsk(machine_config &config)
m_screen->set_visarea(0, (0xca - 0x22)*2-1, 0, (0xfe - 0x0e)-1);
}
void ssv_state::pastelis(machine_config &config)
{
ssv(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &ssv_state::keithlcy_map);
/* video hardware */
m_screen->set_visarea(0, (0xd6-0x26)*2-1, 0, (0xfe - 0x0e)-1);
}
/***************************************************************************
@ -3471,6 +3547,39 @@ ROM_START( keithlcy )
ROM_LOAD16_WORD_SWAP( "vg002-06.u33", 0x200000, 0x200000, CRC(75d8c8ea) SHA1(545768ac6d8953cd3044680953476276337a94b9) )
ROM_END
/***************************************************************************
Pastel Island
STS-0001 (ROM board)
***************************************************************************/
ROM_START( pastelis )
ROM_REGION( 0x400000, "maincpu", 0 ) /* V60 Code */
ROM_LOAD( "data.u28", 0x000000, 0x200000, CRC(e71dcc02) SHA1(38a66255c8fbf8f1a49a2180719bfaf26fd37ccf) ) // 27c160 - 1ST AND 2ND HALF IDENTICAL (but correct, 2nd half unused)
ROM_LOAD16_BYTE( "prg_l.u26", 0x100000, 0x080000, CRC(96c9d4d7) SHA1(27ba8218f667ae12f8d1b14db259c0797220126f) ) // 27c040
ROM_LOAD16_BYTE( "prg_h.u27", 0x100001, 0x080000, CRC(a513733b) SHA1(c3caeb0d1b9c56a61552865815cddf67b649d435) ) // 27c040
ROM_REGION( 0x0a00000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */
ROM_LOAD( "a0.u13", 0x0000000, 0x200000, CRC(61688d29) SHA1(e5cb96ea9190bc20ad9c10e9d0773350f7defc3f) ) // 27c160
ROM_LOAD( "a1.u14", 0x0200000, 0x080000, CRC(d38b9805) SHA1(3b573f7e6b70ce68389001c1e119d4d8dd1cde3d) ) // 27c4100
ROM_LOAD( "b0.u16", 0x0280000, 0x200000, CRC(fc93f7bb) SHA1(86baddd1809adc9b4a48919db58ddd008af3aa99) ) // 27c160
ROM_LOAD( "b1.u17", 0x0480000, 0x080000, CRC(b85f4933) SHA1(00b13a8ffd4d5fa6e9c399ff4e369e2563761a42) ) // 27c4100
ROM_LOAD( "c0.u21", 0x0500000, 0x200000, CRC(7128bc51) SHA1(a858d4de3a2acedf7e1257a607a482781ac490e8) ) // 27c160
ROM_LOAD( "c1.u22", 0x0700000, 0x080000, CRC(2462206b) SHA1(35071e629877b77d23c865b407fd3dd824fbb8be) ) // 27c4100
ROM_LOAD( "d0.u34", 0x0780000, 0x200000, CRC(4f79415a) SHA1(af70656f5a0f46f773a238260e53f646efb2d238) ) // 27c160
ROM_LOAD( "d1.u35", 0x0980000, 0x080000, CRC(d3c75994) SHA1(08ff739181e4316f55f3ba50513f8fdb16db7116) ) // 27c4100 - FIXED BITS (xxxxxxxx00000000) (but correct, just lower bpp) (used for startup logo animation only)
ROM_REGION16_BE( 0x400000, "ensoniq.0", 0 ) /* Samples */
ROM_LOAD16_WORD_SWAP( "snd_0.u29", 0x000000, 0x200000, CRC(8bc0dde9) SHA1(4dffef4d709da02d6dfd15b5266ed529e148c024) ) // 27c160
ROM_LOAD16_WORD_SWAP( "snd_1.u33", 0x200000, 0x200000, CRC(f958e0ea) SHA1(699ea44a0ef9f9a969e4eb692592b07d629923d1) ) // 27c160
ROM_REGION( 0x117, "pals", 0 )
ROM_LOAD( "u25.bin", 0x000, 0x117, CRC(e9d28bdf) SHA1(b83b798ce5a46bcda05e82fa1dd0d24260c9b5cc) )
ROM_LOAD( "u36.bin", 0x000, 0x117, CRC(6b5d083e) SHA1(1f127944c7b1f1e3c3e53f1091f8641f8d454445) )
ROM_END
/***************************************************************************
@ -4717,62 +4826,64 @@ ROM_END
***************************************************************************/
// year rom clone machine inputs init monitor manufacturer title flags
// year rom clone machine inputs init monitor manufacturer title flags
GAME( 1993, dynagear, 0, dynagear, dynagear, ssv_state, init_dynagear, ROT0, "Sammy", "Dyna Gear", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1993, dynagear, 0, dynagear, dynagear, ssv_state, init_ssv, ROT0, "Sammy", "Dyna Gear", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1993, keithlcy, 0, keithlcy, keithlcy, ssv_state, init_keithlcy, ROT0, "Visco", "Dramatic Adventure Quiz Keith & Lucy (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, keithlcy, 0, keithlcy, keithlcy, ssv_state, init_ssv, ROT0, "Visco", "Dramatic Adventure Quiz Keith & Lucy (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, srmp4, 0, srmp4, srmp4, ssv_state, init_srmp4, ROT0, "Seta", "Super Real Mahjong PIV (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, srmp4o, srmp4, srmp4, srmp4, ssv_state, init_srmp4, ROT0, "Seta", "Super Real Mahjong PIV (Japan, older set)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // by the numbering of the program ROMs this should be older
GAME( 1993, pastelis, 0, pastelis, pastelis, ssv_state, init_pastelis, ROT0, "Visco", "Pastel Island (Japan, prototype)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // imperfect raster effects in ending credits and shadows
GAME( 1993, survarts, 0, survarts, survarts, ssv_state, init_survarts, ROT0, "Sammy", "Survival Arts (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, survartsu, survarts, survarts, survarts, ssv_state, init_survarts, ROT0, "American Sammy", "Survival Arts (USA)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, survartsj, survarts, survarts, survarts, ssv_state, init_survarts, ROT0, "Sammy", "Survival Arts (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, srmp4, 0, srmp4, srmp4, ssv_state, init_ssv, ROT0, "Seta", "Super Real Mahjong PIV (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, srmp4o, srmp4, srmp4, srmp4, ssv_state, init_ssv, ROT0, "Seta", "Super Real Mahjong PIV (Japan, older set)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // by the numbering of the program ROMs this should be older
GAME( 1994, drifto94, 0, drifto94, drifto94, ssv_state, init_drifto94, ROT0, "Visco", "Drift Out '94 - The Hard Order (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, survarts, 0, survarts, survarts, ssv_state, init_ssv, ROT0, "Sammy", "Survival Arts (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, survartsu, survarts, survarts, survarts, ssv_state, init_ssv, ROT0, "American Sammy", "Survival Arts (USA)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1993, survartsj, survarts, survarts, survarts, ssv_state, init_ssv, ROT0, "Sammy", "Survival Arts (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1994, eaglshot, 0, eaglshot, eaglshot, ssv_state, init_eaglshot, ROT0, "Sammy", "Eagle Shot Golf (US)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1994, eaglshotj, eaglshot, eaglshot, eaglshot, ssv_state, init_eaglshot, ROT0, "Sammy", "Eagle Shot Golf (Japan, bootleg?)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // from a bootleg ROM board with no proper Seta / Sammy markings, possibly original ROM tho?
GAME( 1994, drifto94, 0, drifto94, drifto94, ssv_state, init_ssv, ROT0, "Visco", "Drift Out '94 - The Hard Order (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1995, hypreact, 0, hypreact, hypreact, ssv_state, init_hypreact, ROT0, "Sammy", "Mahjong Hyper Reaction (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1994, eaglshot, 0, eaglshot, eaglshot, ssv_state, init_eaglshot, ROT0, "Sammy", "Eagle Shot Golf (US)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1994, eaglshotj, eaglshot, eaglshot, eaglshot, ssv_state, init_eaglshot, ROT0, "Sammy", "Eagle Shot Golf (Japan, bootleg?)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // from a bootleg ROM board with no proper Seta / Sammy markings, possibly original ROM tho?
GAME( 1994, twineag2, 0, twineag2, twineag2, ssv_state, init_twineag2, ROT270, "Seta", "Twin Eagle II - The Rescue Mission", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1995, hypreact, 0, hypreact, hypreact, ssv_state, init_ssv, ROT0, "Sammy", "Mahjong Hyper Reaction (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1995, gdfs, 0, gdfs, gdfs, ssv_state, init_gdfs, ROT0, "Banpresto", "Mobile Suit Gundam Final Shooting (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // title screen spells the title "Mobil" but standardized spelling is "Mobile" it also lists the company name as "Banprest" instead of "Banpresto"
GAME( 1994, twineag2, 0, twineag2, twineag2, ssv_state, init_ssv_irq1, ROT270, "Seta", "Twin Eagle II - The Rescue Mission", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1995, gdfs, 0, gdfs, gdfs, ssv_state, init_ssv, ROT0, "Banpresto", "Mobile Suit Gundam Final Shooting (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // title screen spells the title "Mobil" but standardized spelling is "Mobile" it also lists the company name as "Banprest" instead of "Banpresto"
// Ultra X Weapon: "developed by Seta" in ending screen
GAME( 1995, ultrax, 0, ultrax, ultrax, ssv_state, init_ultrax, ROT270, "Banpresto / Tsuburaya Productions / Seta", "Ultra X Weapons / Ultra Keibitai", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 95-01-30 13:27:15 on startup
GAME( 1995, ultraxg, ultrax, ultrax, ultrax, ssv_state, init_ultrax, ROT270, "Banpresto / Tsuburaya Productions / Seta", "Ultra X Weapons / Ultra Keibitai (GAMEST review build)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 95-02-16 15:30:24 on startup (newer, but could have pause functionality due to being a review build so left as clone)
GAME( 1995, ultrax, 0, ultrax, ultrax, ssv_state, init_ssv_irq1, ROT270, "Banpresto / Tsuburaya Productions / Seta", "Ultra X Weapons / Ultra Keibitai", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 95-01-30 13:27:15 on startup
GAME( 1995, ultraxg, ultrax, ultrax, ultrax, ssv_state, init_ssv_irq1, ROT270, "Banpresto / Tsuburaya Productions / Seta", "Ultra X Weapons / Ultra Keibitai (GAMEST review build)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 95-02-16 15:30:24 on startup (newer, but could have pause functionality due to being a review build so left as clone)
GAME( 1996, janjans1, 0, janjans1, janjans1, ssv_state, init_janjans1, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1996, janjans1, 0, janjans1, janjans1, ssv_state, init_ssv, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1996?, meosism, 0, meosism, meosism, ssv_state, init_meosism, ROT0, "Sammy", "Meosis Magic (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1996?, meosism, 0, meosism, meosism, ssv_state, init_ssv, ROT0, "Sammy", "Meosis Magic (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1996, stmblade, 0, stmblade, stmblade, ssv_state, init_stmblade, ROT270, "Visco", "Storm Blade (US)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1996, stmbladej, stmblade, stmblade, stmblade, ssv_state, init_stmblade, ROT270, "Visco", "Storm Blade (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1996, stmblade, 0, stmblade, stmblade, ssv_state, init_ssv, ROT270, "Visco", "Storm Blade (US)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1996, stmbladej, stmblade, stmblade, stmblade, ssv_state, init_ssv, ROT270, "Visco", "Storm Blade (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1997, hypreac2, 0, hypreac2, hypreac2, ssv_state, init_hypreac2, ROT0, "Sammy", "Mahjong Hyper Reaction 2 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, hypreac2, 0, hypreac2, hypreac2, ssv_state, init_ssv_tilescram, ROT0, "Sammy", "Mahjong Hyper Reaction 2 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, jsk, 0, jsk, jsk, ssv_state, init_jsk, ROT0, "Visco", "Joryuu Syougi Kyoushitsu (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, jsk, 0, jsk, jsk, ssv_state, init_jsk, ROT0, "Visco", "Joryuu Syougi Kyoushitsu (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, koikois2, 0, janjans1, koikois2, ssv_state, init_janjans1, ROT0, "Visco", "Koi Koi Shimasho 2 - Super Real Hanafuda (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, koikois2, 0, janjans1, koikois2, ssv_state, init_ssv, ROT0, "Visco", "Koi Koi Shimasho 2 - Super Real Hanafuda (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, mslider, 0, mslider, mslider, ssv_state, init_mslider, ROT0, "Visco / Datt Japan", "Monster Slider (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, mslider, 0, mslider, mslider, ssv_state, init_ssv, ROT0, "Visco / Datt Japan", "Monster Slider (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1997, srmp7, 0, srmp7, srmp7, ssv_state, init_srmp7, ROT0, "Seta", "Super Real Mahjong P7 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1997, srmp7, 0, srmp7, srmp7, ssv_state, init_ssv, ROT0, "Seta", "Super Real Mahjong P7 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1998, ryorioh, 0, ryorioh, ryorioh, ssv_state, init_ryorioh, ROT0, "Visco", "Gourmet Battle Quiz Ryohrioh CooKing (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1998, ryorioh, 0, ryorioh, ryorioh, ssv_state, init_ssv, ROT0, "Visco", "Gourmet Battle Quiz Ryohrioh CooKing (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1998, sxyreact, 0, sxyreact, sxyreact, ssv_state, init_sxyreact, ROT0, "Sammy", "Pachinko Sexy Reaction (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1998, sxyreact, 0, sxyreact, sxyreact, ssv_state, init_sexy, ROT0, "Sammy", "Pachinko Sexy Reaction (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1999, sxyreac2, 0, sxyreac2, sxyreact, ssv_state, init_sxyreac2, ROT0, "Sammy", "Pachinko Sexy Reaction 2 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1999, sxyreac2, 0, sxyreac2, sxyreact, ssv_state, init_sexy, ROT0, "Sammy", "Pachinko Sexy Reaction 2 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1999, cairblad, 0, cairblad, cairblad, ssv_state, init_cairblad, ROT270, "Sammy", "Change Air Blade (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1999, cairblad, 0, cairblad, cairblad, ssv_state, init_ssv_tilescram, ROT270, "Sammy", "Change Air Blade (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 2000, janjans2, 0, janjans1, janjans2, ssv_state, init_janjans1, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho 2 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 2000, janjans2, 0, janjans1, janjans2, ssv_state, init_ssv, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho 2 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 2000, vasara, 0, vasara, vasara, ssv_state, init_vasara, ROT270, "Visco", "Vasara", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 2000, vasara, 0, vasara, vasara, ssv_state, init_ssv, ROT270, "Visco", "Vasara", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 2001, vasara2, 0, vasara, vasara2, ssv_state, init_vasara, ROT270, "Visco", "Vasara 2 (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 2001, vasara2a, vasara2, vasara, vasara2, ssv_state, init_vasara, ROT270, "Visco", "Vasara 2 (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 2001, vasara2, 0, vasara, vasara2, ssv_state, init_ssv, ROT270, "Visco", "Vasara 2 (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 2001, vasara2a, vasara2, vasara, vasara2, ssv_state, init_ssv, ROT270, "Visco", "Vasara 2 (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )

View File

@ -34,6 +34,7 @@ public:
m_gdfs_tmapscroll(*this, "gdfs_tmapscroll"),
m_gdfs_st0020(*this, "st0020_spr"),
m_input_sel(*this, "input_sel"),
m_raster_interrupt_enabled(false),
m_io_key(*this, "KEY%u", 0U),
m_io_service(*this, "SERVICE"),
m_io_paddle(*this, "PADDLE"),
@ -64,30 +65,16 @@ public:
void jsk(machine_config &config);
void hypreact(machine_config &config);
void keithlcy(machine_config &config);
void pastelis(machine_config &config);
void cairblad(machine_config &config);
void init_gdfs();
void init_sxyreac2();
void init_hypreac2();
void init_hypreact();
void init_dynagear();
void init_ssv();
void init_ssv_tilescram();
void init_eaglshot();
void init_srmp4();
void init_srmp7();
void init_keithlcy();
void init_meosism();
void init_vasara();
void init_cairblad();
void init_sxyreact();
void init_janjans1();
void init_ryorioh();
void init_drifto94();
void init_survarts();
void init_ultrax();
void init_stmblade();
void init_sexy();
void init_ssv_irq1();
void init_jsk();
void init_twineag2();
void init_mslider();
void init_pastelis();
private:
required_device<cpu_device> m_maincpu;
@ -115,6 +102,7 @@ private:
std::unique_ptr<uint16_t[]> m_eaglshot_gfxram;
tilemap_t *m_gdfs_tmap;
int m_interrupt_ultrax;
bool m_raster_interrupt_enabled;
uint16_t m_sxyreact_serial;
int m_sxyreact_dial;
uint32_t m_latches[8];
@ -176,14 +164,10 @@ private:
void get_tile(int x, int y, int size, int page, int& code, int& attr, int& flipx, int& flipy);
void draw_row_64pixhigh(bitmap_ind16 &bitmap, const rectangle &cliprect, int in_sy, int scroll);
void draw_layer(bitmap_ind16 &bitmap, const rectangle &cliprect, int nr);
void draw_sprites_tiles(bitmap_ind16 &bitmap, const rectangle &cliprect, int code, int flipx, int flipy, int gfx, int shadow, int color, int sx, int sy, int xnum, int ynum);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void enable_video(int enable);
void init(int interrupt_ultrax);
void init_hypreac2_common();
void init_eaglshot_banking();
void drifto94_map(address_map &map);
void dsp_data_map(address_map &map);

View File

@ -35877,6 +35877,7 @@ keithlcy // (c) 1993 Visco
koikois2 // (c) 1997 Visco
meosism // (c) 1996?Sammy
mslider // (c) 1997 Visco / Datt Japan
pastelis // (c) 1993 Visco
ryorioh // (c) 1998 Visco
srmp4 // (c) 1993 Seta
srmp4o // (c) 1993 Seta

View File

@ -161,12 +161,12 @@ void ssv_state::drawgfx_line(bitmap_ind16 &bitmap, const rectangle &cliprect, in
{ 0x3f,0 }, // 0: ultrax, twineag2 text - is there a local / global mixup somewhere, or is this an 'invalid' setting that just enables all planes?
{ 0xff,0 }, // 1: unverified case, mimic old driver behavior of only using lowest bit
{ 0x3f,0 }, // 2: unverified case, mimic old driver behavior of only using lowest bit
{ 0xff,0 }, // 3: unverified case, mimic old driver behavior of only using lowest bit
{ 0xff,0 }, // 3: unverified case, mimic old driver behavior of only using lowest bit (pastelis sets this on shadows, but seems to need behavior beyond what we currently emulate, maybe also changes number of shadow bits in addition to global shadow mask/shift?)
{ 0x0f,0 }, // 4: eagle shot 4bpp birdie text
{ 0xf0,4 }, // 5: eagle shot 4bpp Japanese text
{ 0x3f,0 }, // 6: common 6bpp case + keithlcy (logo), drifto94 (wheels) masking
{ 0xff,0 } // 7: common 8bpp case
};
};
const uint8_t gfxbppmask = BPP_MASK_TABLE[gfx & 0x07].gfx_mask;
const uint8_t gfxshift = BPP_MASK_TABLE[gfx & 0x07].gfx_shift;
@ -386,14 +386,22 @@ VIDEO_START_MEMBER(ssv_state,gdfs)
READ16_MEMBER(ssv_state::vblank_r)
{
// maybe reads scanline counter? pastelis reads this on the 'for use in Japan' screen + end credits
// and adjusts y position to do a polled raster effect by changing scroll values midscreen
uint16_t ret = 0x0000;
if (m_screen->vblank())
return 0x2000 | 0x1000;
else
return 0x0000;
ret |= 0x3000;
if (m_screen->hblank())
ret |= 0x0800;
return ret;
}
WRITE16_MEMBER(ssv_state::scroll_w)
{
m_screen->update_partial(m_screen->vpos() - 1); // pastelis FOR USE IN JAPAN screen polls the vblank / hblank to do a raster effect
COMBINE_DATA(m_scroll + offset);
/* offsets 60-7f: CRT Controller */
@ -810,7 +818,12 @@ void ssv_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
}
if (local_num != 0)
draw_row_64pixhigh(bitmap, cliprect, sy, scroll);
{
if (spritelist_local[0] != 0) // index 0 is the 'always automatically drawn background layer' so don't draw it twice even if it's specified later?
{
draw_row_64pixhigh(bitmap, cliprect, sy, scroll);
}
}
}
else
{
@ -896,7 +909,7 @@ void ssv_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
}
else
{
// hypreact, hypreac2, janjanspritelist_global, meosism, ryorioh, survarts, sxyreact, sxyreac2, vasara, vasara2
// hypreact, hypreac2, janjans1, meosism, ryorioh, survarts, sxyreact, sxyreac2, vasara, vasara2
sx = sprites_offsx + sx;
sy = sprites_offsy - sy - (ynum * 8);
}
@ -979,15 +992,7 @@ uint32_t ssv_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
// printf("%04x %04x %04x %04x\n",clip.min_x, clip.max_x, clip.min_y, clip.max_y);
if (clip.min_x < 0) clip.min_x = 0;
if (clip.min_y < 0) clip.min_y = 0;
if (clip.max_x > cliprect.max_x) clip.max_x = cliprect.max_x;
if (clip.max_y > cliprect.max_y) clip.max_y = cliprect.max_y;
if (clip.min_x > clip.max_x)
clip.min_x = clip.max_x;
if (clip.min_y > clip.max_y)
clip.min_y = clip.max_y;
clip &= cliprect;
if (!m_enable_video)
return 0;