new clones -- Eagle Shot Golf (Japan, bootleg?) [Joshua Inman]

This commit is contained in:
DavidHaywood 2018-12-02 02:48:44 +00:00
parent 4b076a839d
commit b8e749a74f
3 changed files with 51 additions and 11 deletions

View File

@ -3212,6 +3212,34 @@ ROM_START( eaglshot )
ROM_COPY( "ensoniq.0", 0x000000, 0x000000, 0x400000 )
ROM_END
ROM_START( eaglshotj )
ROM_REGION( 0x100000, "maincpu", 0 ) /* V60 Code */
ROM_LOAD16_BYTE( "sammygolf.u18", 0x000000, 0x080000, CRC(b6d6869c) SHA1(7528751fad783e9b0fd217d2fac2ab408814a583) ) // handwritten labels on prg ROMs, other ROMS had no labels.
ROM_LOAD16_BYTE( "sammygolf.u20", 0x000001, 0x080000, CRC(c8872e48) SHA1(c8e1e712d5fa380f8fc1447502f21d2ae592811a) )
ROM_REGION16_LE( 0xe00000, "gfxdata", ROMREGION_ERASEFF ) /* Sprites - Read by the CPU */
ROM_LOAD( "si003-01.u13", 0x0000000, 0x200000, CRC(d7df0d52) SHA1(d7b79a186f4272334c2297666c52f32c05787c29) )
ROM_LOAD( "si003-02.u12", 0x0200000, 0x200000, CRC(92b4d50d) SHA1(9dc2f2961b088824d8370ac83dff796345fe4158) )
ROM_LOAD( "si003-03.u11", 0x0400000, 0x200000, CRC(6ede4012) SHA1(6663990c6ee8e500cb8c51ad2102761ee0b3351d) )
ROM_LOAD( "si003-04.u10", 0x0600000, 0x200000, CRC(4c65d1a1) SHA1(165f16d08813d2c989ddce4bb23b3a3652003bd5) )
ROM_LOAD( "si003-05.u30", 0x0800000, 0x200000, CRC(daf52d56) SHA1(108419ef7d3716a3890b0d8bcbfddc1585daaae8) )
ROM_LOAD( "si003-06.u31", 0x0a00000, 0x200000, CRC(449f9ae5) SHA1(b3e664eb88d14d1e25a0cfc8dcccc8270ca778c9) )
ROM_REGION16_BE( 0x400000, "ensoniq.0", 0 ) /* Samples */
ROM_LOAD16_WORD_SWAP( "si003-07.u23", 0x000000, 0x200000, CRC(81679fd6) SHA1(ca3b07a87781278b5c7c85951728bbe5dfcbe042) )
ROM_LOAD16_WORD_SWAP( "si003-08.u24", 0x200000, 0x200000, CRC(d0122ba2) SHA1(96230fb690cf144cd873f7d51c0304736a698316) )
ROM_REGION16_BE( 0x400000, "ensoniq.1", 0 ) /* Samples */
ROM_COPY( "ensoniq.0", 0x000000, 0x000000, 0x400000 )
ROM_REGION16_BE( 0x400000, "ensoniq.2", 0 ) /* Samples */
ROM_COPY( "ensoniq.0", 0x000000, 0x000000, 0x400000 )
ROM_REGION16_BE( 0x400000, "ensoniq.3", 0 ) /* Samples */
ROM_COPY( "ensoniq.0", 0x000000, 0x000000, 0x400000 )
ROM_END
/***************************************************************************
@ -4742,6 +4770,7 @@ GAME( 1993, survartsj, survarts, survarts, survarts, ssv_state, init_survarts,
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( 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( 1995, hypreact, 0, hypreact, hypreact, ssv_state, init_hypreact, ROT0, "Sammy", "Mahjong Hyper Reaction (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )

View File

@ -35821,6 +35821,7 @@ cairblad // (c) 1999 Sammy
drifto94 // (c) 1994 Visco
dynagear // (c) 1993 Sammy
eaglshot // (c) 1994 Sammy
eaglshotj // (c) 1994 Sammy
gdfs // (c) 1995 Banpresto
hypreac2 // (c) 1997 Sammy
hypreact // (c) 1995 Sammy

View File

@ -149,17 +149,27 @@ void ssv_state::drawgfx_line(bitmap_ind16 &bitmap, const rectangle &cliprect, in
if (realline >= cliprect.min_y && realline <= cliprect.max_y)
{
struct drawmodes
{
int gfx_mask;
int gfx_shift;
};
// comments at top suggest that each bit of 'gfx' enables 2 bitplanes, but ultrax case disagrees, also that would require 4 bits to cover all cases, and we only have 3
static constexpr uint8_t BPP_MASK_TABLE[8] = {
0x3f, // 0: ultrax, twineag2 text - is there a local / global mixup somewhere, or is this an 'invalid' setting that just enables all planes?
0xff, // 1: unverified case, mimic old driver behavior of only using lowest bit
0x3f, // 2: unverified case, mimic old driver behavior of only using lowest bit
0xff, // 3: unverified case, mimic old driver behavior of only using lowest bit
0x0f, // 4: eagle shot 4bpp birdie text (there is probably a case for the other 4bpp? but that's only used for Japanese text and the supported set isn't Japanese)
0xff, // 5: unverified case, mimic old driver behavior of only using lowest bit
0x3f, // 6: common 6bpp case + keithlcy (logo), drifto94 (wheels) masking
0xff }; // 7: common 8bpp case
const uint8_t gfxbppmask = BPP_MASK_TABLE[gfx & 0x07];
// see also seta2.cpp where the same logic is used
static constexpr drawmodes BPP_MASK_TABLE[8] = {
{ 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
{ 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;
uint16_t *dest = &bitmap.pix16(realline);
@ -170,7 +180,7 @@ void ssv_state::drawgfx_line(bitmap_ind16 &bitmap, const rectangle &cliprect, in
int column = 0;
for (int sx = x0; sx != x1; sx += dx)
{
const uint8_t pen = source[column] & gfxbppmask;
const uint8_t pen = (source[column] & gfxbppmask) >> gfxshift;
if (pen && sx >= cliprect.min_x && sx <= cliprect.max_x)
{