cps3.cpp: remove "imperfect graphics" flag, improve save states, fix eeprom size, document known issues

This commit is contained in:
MetalliC 2019-09-07 18:52:05 +03:00
parent 29d24080c0
commit e26914f3a3
2 changed files with 86 additions and 67 deletions

View File

@ -40,6 +40,14 @@ void cps3_sound_device::device_start()
{
/* Allocate the stream */
m_stream = stream_alloc(0, 2, clock() / 384);
save_item(NAME(m_key));
for (int i = 0; i < 16; i++)
{
save_item(NAME(m_voice[i].regs), i);
save_item(NAME(m_voice[i].pos), i);
save_item(NAME(m_voice[i].frac), i);
}
}

View File

@ -13,28 +13,37 @@ Sound emulation by Philip Bennett
SCSI code by ElSemi
To-Do/Issues:
Known Issues:
Street Fighter 3 2nd Impact uses flipped tilemaps during flashing, emulate this.
Tilemap Global X/Y flip not emulated
Street Fighter 3 2nd Impact uses Y-flipped tilemaps during flashing.
Warzard uses X-flipped tilemaps during special effects.
Sprite-list caching (presumable)
Warzard 2p mode, at next screen after characters select,
if holding player's button to speed up sequence - player's sprites will be distorted.
Miscellaneous TO-DOs:
DMA ack IRQ10 generation:
Character and Palette DMAs speed is unknown, needs to be measured.
Alpha Blending Effects
These are actually palette manipulation effects, not true blending. How the values are used is
not currently 100% understood. They are incorrect if you use player 2 in Warzard
These are actually palette manipulation effects, not true blending.
Verify them, current emulation might not be 100% accurate.
Linezoom
Is it used in games? May be enabled in jojo/jojoba dev.menu BG test (P2 btn4)
Tilemap Linezoom
Seems unused in games. May be enabled in jojo/jojoba dev.menu BG test (P2 btn4)
Palette DMA effects
Verify them, they might not be 100% accurate at the moment
Verify Full Screen Zoom on real hardware
Which is which, x & y registers, how far can it zoom etc.
How far can it zoom etc.
Verify CRT registers
Only SFIII2 changes them, for widescreen mode. What other modes are possible?
Actual Pixel clock for H Start and H Blank registers is unknown. It is not known which is base pixel clock
and how it affected by register 40C0080 bits.
Sprite positioning glitches
Some sprites are still in the wrong places, seems the placement of zooming sprites is imperfect
@ -42,8 +51,7 @@ Sprite positioning glitches
the same occurs in the sf games. doesn't look like the origin is correct when zooming in all cases.
Gaps in Sprite Zooming
probably caused by use of drawgfx instead of processing as a single large sprite, but could also be due to the
positioning of each part of the sprite. Warzard is confirmed to have gaps during some cut-scenes on real hardware.
Warzard is confirmed to have gaps during some cut-scenes on real hardware.
---
@ -962,6 +970,7 @@ void cps3_state::set_mame_colours(int colournum, u16 data, u32 fadeval)
data = (data & 0x8000) | (r << 0) | (g << 5) | (b << 10);
}
colournum &= 0x1ffff;
m_colourram[colournum] = data;
m_mame_colours[colournum] = rgb_t(pal5bit(r), pal5bit(g), pal5bit(b));
@ -973,6 +982,7 @@ void cps3_state::set_mame_colours(int colournum, u16 data, u32 fadeval)
void cps3_state::video_start()
{
m_char_ram = make_unique_clear<u32[]>(0x800000/4);
m_mame_colours = make_unique_clear<u32[]>(0x20000);
m_ss_ram = make_unique_clear<u8[]>(0x8000);
/* create the char set (gfx will then be updated dynamically from RAM) */
@ -982,8 +992,6 @@ void cps3_state::video_start()
m_gfxdecode->set_gfx(1, std::make_unique<gfx_element>(m_palette, cps3_tiles16x16_layout, (u8 *)m_char_ram.get(), 0, m_palette->entries() / 64, 0));
m_gfxdecode->gfx(1)->set_granularity(64);
m_mame_colours = make_unique_clear<u32[]>(0x80000/2);
m_screenwidth = 384;
// the renderbuffer can be twice the size of the screen, this allows us to handle framebuffer zoom values
@ -994,13 +1002,8 @@ void cps3_state::video_start()
m_renderbuffer_bitmap.fill(0x3f, m_renderbuffer_clip);
save_item(NAME(m_ppu_gscroll));
save_item(NAME(m_ss_hscroll));
save_item(NAME(m_ss_vscroll));
save_item(NAME(m_ss_pal_base));
save_pointer(NAME(m_char_ram), 0x800000/4);
save_pointer(NAME(m_mame_colours), 0x80000/2);
save_pointer(NAME(m_mame_colours), 0x20000);
save_pointer(NAME(m_ss_ram), 0x8000);
}
@ -1191,7 +1194,7 @@ u32 cps3_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const
/* these are the sizes to actually draw */
u32 const ysizedraw2 = ((value3 & 0x7f000000) >> 24) + 1;
u32 const xsizedraw2 = ((value3 & 0x007f0000) >> 16) + 1;
//u8 unk = ((value3 & 0x00000300) >> 8); // unknown, 3 - sprites, 0 - tilemaps
//u8 unk = ((value3 & 0x00000300) >> 8); // 3 - sprites, 0 - tilemaps, enable X/Y zooms ?
s8 ysize2 = ((value3 & 0x0000000c) >> 2);
s8 xsize2 = ((value3 & 0x00000003) >> 0);
@ -2254,8 +2257,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(cps3_state::dma_interrupt)
void cps3_state::machine_start()
{
m_eeprom = std::make_unique<u32[]>(0x400/4);
subdevice<nvram_device>("eeprom")->set_base(m_eeprom.get(), 0x400);
m_eeprom = std::make_unique<u32[]>(0x80/4);
subdevice<nvram_device>("eeprom")->set_base(m_eeprom.get(), 0x80);
save_item(NAME(m_cram_gfxflash_bank));
save_item(NAME(m_cram_bank));
@ -2270,8 +2273,12 @@ void cps3_state::machine_start()
save_item(NAME(m_chardma_other));
save_item(NAME(m_current_table_address));
save_item(NAME(m_dma_status));
save_item(NAME(m_ppu_gscroll));
save_item(NAME(m_ss_hscroll));
save_item(NAME(m_ss_vscroll));
save_item(NAME(m_ss_pal_base));
save_pointer(NAME(m_eeprom), 0x400/4);
save_pointer(NAME(m_eeprom), 0x80/4);
}
@ -2289,6 +2296,8 @@ void cps3_state::device_post_load()
{
// copy data from flashroms back into user regions + decrypt into regions we execute/draw from.
copy_from_nvram();
m_gfxdecode->gfx(0)->mark_all_dirty();
m_gfxdecode->gfx(1)->mark_all_dirty();
}
@ -3839,15 +3848,17 @@ ROM_END
*****************************************************************************************/
#define GAME_FLAGS (MACHINE_SUPPORTS_SAVE)
/* Red Earth / Warzard */
// 961121
GAME( 1996, redearth, 0, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Red Earth (Euro 961121)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, warzard, redearth, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Warzard (Japan 961121)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, redearth, 0, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Red Earth (Euro 961121)", GAME_FLAGS )
GAME( 1996, warzard, redearth, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Warzard (Japan 961121)", GAME_FLAGS )
// 961023
GAME( 1996, redearthr1, redearth, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Red Earth (Euro 961023)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, warzardr1, redearth, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Warzard (Japan 961023)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, redearthr1, redearth, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Red Earth (Euro 961023)", GAME_FLAGS )
GAME( 1996, warzardr1, redearth, redearth, cps3_re, cps3_state, init_redearth, ROT0, "Capcom", "Warzard (Japan 961023)", GAME_FLAGS )
/* Street Fighter III: New Generation */
@ -3858,13 +3869,13 @@ GAME( 1996, warzardr1, redearth, redearth, cps3_re, cps3_state, init_redeart
// not dumped
// 970204
GAME( 1997, sfiii, 0, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Euro 970204)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiiiu, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (USA 970204)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiiia, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Asia 970204)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiiij, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Japan 970204)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiiih, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Hispanic 970204)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiiin, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 1)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiiina, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 2)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, sfiii, 0, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Euro 970204)", GAME_FLAGS )
GAME( 1997, sfiiiu, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (USA 970204)", GAME_FLAGS )
GAME( 1997, sfiiia, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Asia 970204)", GAME_FLAGS )
GAME( 1997, sfiiij, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Japan 970204)", GAME_FLAGS )
GAME( 1997, sfiiih, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Hispanic 970204)", GAME_FLAGS )
GAME( 1997, sfiiin, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 1)", GAME_FLAGS )
GAME( 1997, sfiiina, sfiii, sfiii, cps3, cps3_state, init_sfiii, ROT0, "Capcom", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 2)", GAME_FLAGS )
/* Street Fighter III 2nd Impact: Giant Attack */
@ -3872,65 +3883,65 @@ GAME( 1997, sfiiina, sfiii, sfiii, cps3, cps3_state, init_sfiii,
// not dumped
// 970930
GAMEL(1997, sfiii2, 0, sfiii2, cps3, cps3_state, init_sfiii2, ROT0, "Capcom", "Street Fighter III 2nd Impact: Giant Attack (USA 970930)", MACHINE_IMPERFECT_GRAPHICS, layout_sfiii2 ) // layout is for widescreen support
GAMEL(1997, sfiii2j, sfiii2, sfiii2, cps3, cps3_state, init_sfiii2, ROT0, "Capcom", "Street Fighter III 2nd Impact: Giant Attack (Japan 970930)", MACHINE_IMPERFECT_GRAPHICS, layout_sfiii2 )
GAMEL(1997, sfiii2n, sfiii2, sfiii2, cps3, cps3_state, init_sfiii2, ROT0, "Capcom", "Street Fighter III 2nd Impact: Giant Attack (Asia 970930, NO CD)", MACHINE_IMPERFECT_GRAPHICS, layout_sfiii2 )
GAMEL(1997, sfiii2, 0, sfiii2, cps3, cps3_state, init_sfiii2, ROT0, "Capcom", "Street Fighter III 2nd Impact: Giant Attack (USA 970930)", GAME_FLAGS, layout_sfiii2 ) // layout is for widescreen support
GAMEL(1997, sfiii2j, sfiii2, sfiii2, cps3, cps3_state, init_sfiii2, ROT0, "Capcom", "Street Fighter III 2nd Impact: Giant Attack (Japan 970930)", GAME_FLAGS, layout_sfiii2 )
GAMEL(1997, sfiii2n, sfiii2, sfiii2, cps3, cps3_state, init_sfiii2, ROT0, "Capcom", "Street Fighter III 2nd Impact: Giant Attack (Asia 970930, NO CD)", GAME_FLAGS, layout_sfiii2 )
/* JoJo's Venture / JoJo no Kimyou na Bouken */
// 990128
GAME( 1998, jojo, 0, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (USA 990128)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojoj, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo no Kimyou na Bouken (Japan 990128)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojon, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (Asia 990128, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojo, 0, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (USA 990128)", GAME_FLAGS )
GAME( 1998, jojoj, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo no Kimyou na Bouken (Japan 990128)", GAME_FLAGS )
GAME( 1998, jojon, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (Asia 990128, NO CD)", GAME_FLAGS )
// 990108
GAME( 1998, jojor1, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (USA 990108)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojojr1, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo no Kimyou na Bouken (Japan 990108)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojonr1, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (Asia 990108, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojor1, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (USA 990108)", GAME_FLAGS )
GAME( 1998, jojojr1, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo no Kimyou na Bouken (Japan 990108)", GAME_FLAGS )
GAME( 1998, jojonr1, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (Asia 990108, NO CD)", GAME_FLAGS )
// 981202
GAME( 1998, jojor2, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (USA 981202)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojojr2, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo no Kimyou na Bouken (Japan 981202)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojonr2, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (Asia 981202, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, jojor2, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (USA 981202)", GAME_FLAGS )
GAME( 1998, jojojr2, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo no Kimyou na Bouken (Japan 981202)", GAME_FLAGS )
GAME( 1998, jojonr2, jojo, jojo, cps3_jojo, cps3_state, init_jojo, ROT0, "Capcom", "JoJo's Venture (Asia 981202, NO CD)", GAME_FLAGS )
/* Street Fighter III 3rd Strike: Fight for the Future */
// 990608
GAME( 1999, sfiii3, 0, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990608)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3u, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (USA 990608)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3j, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990608)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3n, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990608, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3, 0, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990608)", GAME_FLAGS )
GAME( 1999, sfiii3u, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (USA 990608)", GAME_FLAGS )
GAME( 1999, sfiii3j, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990608)", GAME_FLAGS )
GAME( 1999, sfiii3n, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990608, NO CD)", GAME_FLAGS )
// 990512
GAME( 1999, sfiii3r1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990512)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3ur1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (USA 990512)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3jr1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990512)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3nr1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990512, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, sfiii3r1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990512)", GAME_FLAGS )
GAME( 1999, sfiii3ur1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (USA 990512)", GAME_FLAGS )
GAME( 1999, sfiii3jr1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990512)", GAME_FLAGS )
GAME( 1999, sfiii3nr1, sfiii3, sfiii3, cps3, cps3_state, init_sfiii3, ROT0, "Capcom", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990512, NO CD)", GAME_FLAGS )
/* JoJo's Bizarre Adventure / JoJo no Kimyou na Bouken: Mirai e no Isan */
// 990927
GAME( 1999, jojoba, 0, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, jojoban, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, jojobane, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo's Bizarre Adventure (Euro 990927, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, jojoba, 0, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927)", GAME_FLAGS )
GAME( 1999, jojoban, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD)", GAME_FLAGS )
GAME( 1999, jojobane, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo's Bizarre Adventure (Euro 990927, NO CD)", GAME_FLAGS )
// 990913
GAME( 1999, jojobar1, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, jojobanr1, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, jojobaner1, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo's Bizarre Adventure (Euro 990913, NO CD)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, jojobar1, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913)", GAME_FLAGS )
GAME( 1999, jojobanr1, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD)", GAME_FLAGS )
GAME( 1999, jojobaner1, jojoba, jojoba, cps3_jojo, cps3_state, init_jojoba, ROT0, "Capcom", "JoJo's Bizarre Adventure (Euro 990913, NO CD)", GAME_FLAGS )
// bootlegs, hold START1 during bootup to change games
// newest revision, fixes some issues with Warzard decryption.
GAME( 1999, cps3boot, 0, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "CPS3 Multi-game bootleg for HD6417095 type SH2 (V4)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3boota, cps3boot, sfiii3, cps3, cps3_state, init_sfiii2, ROT0, "bootleg", "CPS3 Multi-game bootleg for dead security cart (V5)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3boot, 0, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "CPS3 Multi-game bootleg for HD6417095 type SH2 (V4)", GAME_FLAGS )
GAME( 1999, cps3boota, cps3boot, sfiii3, cps3, cps3_state, init_sfiii2, ROT0, "bootleg", "CPS3 Multi-game bootleg for dead security cart (V5)", GAME_FLAGS )
GAME( 1999, cps3booto, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "CPS3 Multi-game bootleg for HD6417095 type SH2 (older)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3bootao, cps3boot, sfiii3, cps3, cps3_state, init_sfiii2, ROT0, "bootleg", "CPS3 Multi-game bootleg for dead security cart (older)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3booto, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "CPS3 Multi-game bootleg for HD6417095 type SH2 (older)", GAME_FLAGS )
GAME( 1999, cps3bootao, cps3boot, sfiii3, cps3, cps3_state, init_sfiii2, ROT0, "bootleg", "CPS3 Multi-game bootleg for dead security cart (older)", GAME_FLAGS )
// this doesn't play 2nd Impact despite it being listed. 2nd Impact uses separate data/code encryption and can't be decrypted cleanly for a standard SH2. Selecting it just flashes in a copy of 3rd Strike with the 2nd Impact loading screen
GAME( 1999, cps3booto2, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "CPS3 Multi-game bootleg for HD6417095 type SH2 (oldest) (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure and Red Earth only)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3booto2, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "CPS3 Multi-game bootleg for HD6417095 type SH2 (oldest) (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure and Red Earth only)", GAME_FLAGS )
// this does not play Red Earth or the 2 Jojo games. New Generation and 3rd Strike have been heavily modified to work with the separate code/data encryption a dead cart / 2nd Impact cart has. Selecting the other games will give an 'invalid CD' message.
GAME( 1999, cps3bootao2, cps3boot, sfiii3, cps3, cps3_state, init_sfiii2, ROT0, "bootleg", "CPS3 Multi-game bootleg for dead security cart (oldest) (New Generation, 2nd Impact and 3rd Strike only)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3bootao2, cps3boot, sfiii3, cps3, cps3_state, init_sfiii2, ROT0, "bootleg", "CPS3 Multi-game bootleg for dead security cart (oldest) (New Generation, 2nd Impact and 3rd Strike only)", GAME_FLAGS )
// these are test bootleg CDs for running 2nd Impact on a standard SH2
GAME( 1999, cps3bs32, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, V3)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, cps3bs32a, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, older)", MACHINE_IMPERFECT_GRAPHICS ) // older / buggier hack
GAME( 1999, cps3bs32, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, V3)", GAME_FLAGS )
GAME( 1999, cps3bs32a, cps3boot, sfiii3, cps3, cps3_state, init_cps3boot, ROT0, "bootleg", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, older)", GAME_FLAGS ) // older / buggier hack