summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatarGravatar MetalliC <0vetal0@gmail.com>2019-09-07 18:52:05 +0300
committerGravatarGravatar MetalliC <0vetal0@gmail.com>2019-09-07 18:52:05 +0300
commite26914f3a3e114bca64105bc7f67003b457f202d (patch) (github)
tree3b2e847ea800da375456f64cb551f4cd508a0dc1
parent29d24080c08c72d17b0b7e209be78e00dca9f2bc (diff)
downloadmame-e26914f3a3e114bca64105bc7f67003b457f202d.tar.bz2
mame-e26914f3a3e114bca64105bc7f67003b457f202d.zip
cps3.cpp: remove "imperfect graphics" flag, improve save states, fix eeprom size, document known issues
-rw-r--r--src/mame/audio/cps3.cpp8
-rw-r--r--src/mame/drivers/cps3.cpp145
2 files changed, 86 insertions, 67 deletions
diff --git a/src/mame/audio/cps3.cpp b/src/mame/audio/cps3.cpp
index 950c30e4fc2..7c15634738c 100644
--- a/src/mame/audio/cps3.cpp
+++ b/src/mame/audio/cps3.cpp
@@ -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);
+ }
}
diff --git a/src/mame/drivers/cps3.cpp b/src/mame/drivers/cps3.cpp
index db415e1c957..da213bf506c 100644
--- a/src/mame/drivers/cps3.cpp
+++ b/src/mame/drivers/cps3.cpp
@@ -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