New working clones

------------------
Nostromo [anonymous]
Samurai (World) [anonymous, SNESNESCUBE64]
Super Ship [anonymous]

- gotya.cpp: minor cleanups

- hyprduel.cpp: used standard ROM loading macros
This commit is contained in:
Ivan Vangelista 2022-05-27 22:29:03 +02:00
parent f0cf972136
commit 899966bca0
9 changed files with 454 additions and 405 deletions

View File

@ -2085,9 +2085,6 @@ files {
MAME_DIR .. "src/mame/includes/gatron.h",
MAME_DIR .. "src/mame/video/gatron.cpp",
MAME_DIR .. "src/mame/drivers/gotya.cpp",
MAME_DIR .. "src/mame/includes/gotya.h",
MAME_DIR .. "src/mame/audio/gotya.cpp",
MAME_DIR .. "src/mame/video/gotya.cpp",
MAME_DIR .. "src/mame/drivers/sbugger.cpp",
MAME_DIR .. "src/mame/includes/sbugger.h",
MAME_DIR .. "src/mame/video/sbugger.cpp",

View File

@ -1,75 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Zsolt Vasvari
#include "emu.h"
#include "sound/samples.h"
#include "includes/gotya.h"
struct gotya_sample
{
int sound_command;
int channel;
int looping;
};
static const struct gotya_sample gotya_samples[] =
{
{ 0x01, 0, 0 },
{ 0x02, 1, 0 },
{ 0x03, 2, 0 },
{ 0x05, 2, 0 },
{ 0x06, 3, 0 },
{ 0x07, 3, 0 },
{ 0x08, 0, 1 },
{ 0x0a, 0, 0 },
{ 0x0b, 0, 0 },
/* all the speech can go to one channel? */
{ 0x10, 3, 0 },
{ 0x11, 3, 0 },
{ 0x12, 0, 0 }, /* this should stop the main tune */
{ 0x13, 3, 0 },
{ 0x14, 3, 0 },
{ 0x15, 3, 0 },
{ 0x16, 3, 0 },
{ 0x17, 3, 0 },
{ 0x18, 3, 0 },
{ 0x19, 3, 0 },
{ 0x1a, 3, 0 },
{ -1, 0, 0 } /* end of array */
};
void gotya_state::gotya_soundlatch_w(uint8_t data)
{
int sample_number;
if (data == 0)
{
m_samples->stop(0);
m_theme_playing = 0;
return;
}
/* search for sample to play */
for (sample_number = 0; gotya_samples[sample_number].sound_command != -1; sample_number++)
{
if (gotya_samples[sample_number].sound_command == data)
{
if (gotya_samples[sample_number].looping && m_theme_playing)
{
/* don't restart main theme */
return;
}
m_samples->start(gotya_samples[sample_number].channel, sample_number, gotya_samples[sample_number].looping);
if (gotya_samples[sample_number].channel == 0)
{
m_theme_playing = gotya_samples[sample_number].looping;
}
return;
}
}
}

View File

@ -10559,6 +10559,20 @@ ROM_START( omni )
ROM_LOAD( "colour.bin", 0x0000, 0x0020, CRC(57a45057) SHA1(d4ec6a54f72640e5b485aa59e206c090e67ff640) )
ROM_END
ROM_START( supershp ) // closest to omni
ROM_REGION( 0x4000, "maincpu", 0 ) // on a riser board
ROM_LOAD( "ss_1.bin", 0x0000, 0x1000, CRC(55bd4e46) SHA1(1ee111d3840f415f10eaf3e57464572887de73c6) )
ROM_LOAD( "ss_2.bin", 0x1000, 0x1000, CRC(1e08cba8) SHA1(827c93081aa0723b67e94a75bb4220abd673f4e9) )
ROM_LOAD( "ss_3.bin", 0x2000, 0x1000, CRC(bab514fa) SHA1(9cd8ac4407c1875691c1feaec760cd317e464a8f) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "ss_j.j1", 0x0000, 0x1000, CRC(2dba9e0e) SHA1(edfb974766b57327ac846426a3a9583b33a4b7c9) )
ROM_LOAD( "ss_k.k1", 0x1000, 0x1000, CRC(cdc5aa26) SHA1(72a396d142a775bb39231d700308b8bd7aff7f75) )
ROM_REGION( 0x0020, "proms", 0 ) // not dumped for this set, probably the same given how close this is
ROM_LOAD( "colour.bin", 0x0000, 0x0020, BAD_DUMP CRC(57a45057) SHA1(d4ec6a54f72640e5b485aa59e206c090e67ff640) )
ROM_END
ROM_START( uniwars )
ROM_REGION( 0x4000, "maincpu", 0 )
ROM_LOAD( "f07_1a.bin", 0x0000, 0x0800, CRC(d975af10) SHA1(a2e2a36a75db8fd09441308b08b6ae073c68b8cf) )
@ -15806,7 +15820,8 @@ GAME( 1982, azurian, 0, galaxian, azurian, galaxian_state, init_
// Extra characters controlled via bank at $6002
GAME( 19??, pisces, 0, pisces, pisces, pisces_state, init_pisces, ROT90, "Subelectro", "Pisces", MACHINE_SUPPORTS_SAVE )
GAME( 19??, piscesb, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Pisces (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 19??, omni, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Omni", MACHINE_SUPPORTS_SAVE )
GAME( 19??, omni, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg (Videa System)", "Omni", MACHINE_SUPPORTS_SAVE )
GAME( 19??, supershp, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Super Ship", MACHINE_SUPPORTS_SAVE )
GAME( 1980, uniwars, 0, pisces, superg, pisces_state, init_pisces, ROT90, "Irem", "UniWar S", MACHINE_SUPPORTS_SAVE )
GAME( 1980, uniwarsa, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Karateco)", "UniWar S (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, mltiwars, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Gayton Games)", "Multi Wars (bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE )

View File

@ -31,8 +31,8 @@ TODO: Emulated sound
----
so despite the fact that 'gotya' might look like its a bootleg of thehand,
its more likely just a prototype / alternate version, its hard to tell
so despite the fact that 'gotya' might look like it's a bootleg of thehand,
it's more likely just a prototype / alternate version, it's hard to tell
----
According to Andrew Welburn:
@ -53,36 +53,335 @@ at the top of the screen for 'The hand' with the 'hi-score' is replaced
with 'Got-Ya' in text, a fairly minor hack. The Copyright symbol is
still there in Got-Ya but with the company name scrubbed out.
All in all, Got-Ya should NOT be marked as a prototype in MAME, its a
All in all, Got-Ya should NOT be marked as a prototype in MAME, it's a
US territory license hack of another game 'The Hand'. Nothing about it
says prototype, and the original base game is 'The Hand'.
****************************************************************************/
#include "emu.h"
#include "includes/gotya.h"
#include "cpu/z80/z80.h"
#include "machine/watchdog.h"
#include "sound/samples.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
#include "tilemap.h"
#include "video/resnet.h"
void gotya_state::gotya_map(address_map &map)
namespace {
class gotya_state : public driver_device
{
public:
gotya_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_scroll(*this, "scroll"),
m_videoram(*this, "videoram%u", 1U),
m_colorram(*this, "colorram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_samples(*this, "samples")
{ }
void gotya(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
// memory pointers
required_shared_ptr<uint8_t> m_scroll;
required_shared_ptr_array<uint8_t, 2> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
required_shared_ptr<uint8_t> m_spriteram;
// devices
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<samples_device> m_samples;
// video-related
tilemap_t *m_bg_tilemap = nullptr;
uint8_t m_scroll_bit_8 = 0;
// sound-related
uint8_t m_theme_playing = 0;
void videoram_w(offs_t offset, uint8_t data);
void colorram_w(offs_t offset, uint8_t data);
void video_control_w(uint8_t data);
void soundlatch_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILEMAP_MAPPER_MEMBER(tilemap_scan_rows);
void palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_status_row(bitmap_ind16 &bitmap, const rectangle &cliprect, int sx, int col);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_status(bitmap_ind16 &bitmap, const rectangle &cliprect);
void prg_map(address_map &map);
};
// video
/***************************************************************************
Convert the color PROMs into a more useable format.
***************************************************************************/
void gotya_state::palette(palette_device &palette) const
{
uint8_t const *color_prom = memregion("proms")->base();
static constexpr int resistances_rg[3] = { 1000, 470, 220 };
static constexpr int resistances_b [2] = { 470, 220 };
// compute the color output resistor weights
double rweights[3], gweights[3], bweights[2];
compute_resistor_weights(0, 255, -1.0,
3, &resistances_rg[0], rweights, 0, 0,
3, &resistances_rg[0], gweights, 0, 0,
2, &resistances_b[0], bweights, 0, 0);
// create a lookup table for the palette
for (int i = 0; i < 0x20; i++)
{
// red component
int bit0 = BIT(color_prom[i], 0);
int bit1 = BIT(color_prom[i], 1);
int bit2 = BIT(color_prom[i], 2);
int const r = combine_weights(rweights, bit0, bit1, bit2);
// green component
bit0 = BIT(color_prom[i], 3);
bit1 = BIT(color_prom[i], 4);
bit2 = BIT(color_prom[i], 5);
int const g = combine_weights(gweights, bit0, bit1, bit2);
// blue component
bit0 = BIT(color_prom[i], 6);
bit1 = BIT(color_prom[i], 7);
int const b = combine_weights(bweights, bit0, bit1);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 32;
for (int i = 0; i < 0x40; i++)
{
uint8_t const ctabentry = color_prom[i] & 0x07;
palette.set_pen_indirect(i, ctabentry);
}
}
void gotya_state::videoram_w(offs_t offset, uint8_t data)
{
m_videoram[0][offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void gotya_state::colorram_w(offs_t offset, uint8_t data)
{
m_colorram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void gotya_state::video_control_w(uint8_t data)
{
/* bit 0 - scroll bit 8
bit 1 - flip screen
bit 2 - sound disable ??? */
m_scroll_bit_8 = data & 0x01;
if (flip_screen() != (data & 0x02))
{
flip_screen_set(data & 0x02);
machine().tilemap().mark_all_dirty();
}
}
TILE_GET_INFO_MEMBER(gotya_state::get_bg_tile_info)
{
int code = m_videoram[0][tile_index];
int color = m_colorram[tile_index] & 0x0f;
tileinfo.set(0, code, color, 0);
}
TILEMAP_MAPPER_MEMBER(gotya_state::tilemap_scan_rows)
{
// logical (col,row) -> memory offset
row = 31 - row;
col = 63 - col;
return ((row) * (num_cols >> 1)) + (col & 31) + ((col >> 5) * 0x400);
}
void gotya_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gotya_state::get_bg_tile_info)), tilemap_mapper_delegate(*this, FUNC(gotya_state::tilemap_scan_rows)), 8, 8, 64, 32);
}
void gotya_state::draw_status_row(bitmap_ind16 &bitmap, const rectangle &cliprect, int sx, int col)
{
if (flip_screen())
sx = 35 - sx;
for (int row = 29; row >= 0; row--)
{
int sy;
if (flip_screen())
sy = row;
else
sy = 31 - row;
m_gfxdecode->gfx(0)->opaque(bitmap, cliprect,
m_videoram[1][row * 32 + col],
m_videoram[1][row * 32 + col + 0x10] & 0x0f,
flip_screen_x(), flip_screen_y(),
8 * sx, 8 * sy);
}
}
void gotya_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int offs = 2; offs < 0x0e; offs += 2)
{
int code = m_spriteram[offs + 0x01] >> 2;
int color = m_spriteram[offs + 0x11] & 0x0f;
int sx = 256 - m_spriteram[offs + 0x10] + (m_spriteram[offs + 0x01] & 0x01) * 256;
int sy = m_spriteram[offs + 0x00];
if (flip_screen())
sy = 240 - sy;
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
code, color,
flip_screen_x(), flip_screen_y(),
sx, sy, 0);
}
}
void gotya_state::draw_status(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
draw_status_row(bitmap, cliprect, 0, 1);
draw_status_row(bitmap, cliprect, 1, 0);
draw_status_row(bitmap, cliprect, 2, 2); // these two are blank, but I dont' know if the data comes
draw_status_row(bitmap, cliprect, 33, 13); // from RAM or 'hardcoded' into the hardware. Likely the latter
draw_status_row(bitmap, cliprect, 35, 14);
draw_status_row(bitmap, cliprect, 34, 15);
}
uint32_t gotya_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0, -(*m_scroll + (m_scroll_bit_8 * 256)) - 2 * 8);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
draw_status(bitmap, cliprect);
return 0;
}
// audio
struct gotya_sample
{
int8_t sound_command;
uint8_t channel;
uint8_t looping;
};
static const struct gotya_sample gotya_samples[] =
{
{ 0x01, 0, 0 },
{ 0x02, 1, 0 },
{ 0x03, 2, 0 },
{ 0x05, 2, 0 },
{ 0x06, 3, 0 },
{ 0x07, 3, 0 },
{ 0x08, 0, 1 },
{ 0x0a, 0, 0 },
{ 0x0b, 0, 0 },
// all the speech can go to one channel?
{ 0x10, 3, 0 },
{ 0x11, 3, 0 },
{ 0x12, 0, 0 }, // this should stop the main tune
{ 0x13, 3, 0 },
{ 0x14, 3, 0 },
{ 0x15, 3, 0 },
{ 0x16, 3, 0 },
{ 0x17, 3, 0 },
{ 0x18, 3, 0 },
{ 0x19, 3, 0 },
{ 0x1a, 3, 0 },
{ -1, 0, 0 } // end of array
};
void gotya_state::soundlatch_w(uint8_t data)
{
if (data == 0)
{
m_samples->stop(0);
m_theme_playing = 0;
return;
}
// search for sample to play
for (int sample_number = 0; gotya_samples[sample_number].sound_command != -1; sample_number++)
{
if (gotya_samples[sample_number].sound_command == data)
{
if (gotya_samples[sample_number].looping && m_theme_playing)
{
// don't restart main theme
return;
}
m_samples->start(gotya_samples[sample_number].channel, sample_number, gotya_samples[sample_number].looping);
if (gotya_samples[sample_number].channel == 0)
{
m_theme_playing = gotya_samples[sample_number].looping;
}
return;
}
}
}
// machine
void gotya_state::prg_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x5000, 0x5fff).ram();
map(0x6000, 0x6000).portr("P1");
map(0x6001, 0x6001).portr("P2");
map(0x6002, 0x6002).portr("DSW");
map(0x6004, 0x6004).w(FUNC(gotya_state::gotya_video_control_w));
map(0x6005, 0x6005).w(FUNC(gotya_state::gotya_soundlatch_w));
map(0x6006, 0x6006).writeonly().share("scroll");
map(0x6004, 0x6004).w(FUNC(gotya_state::video_control_w));
map(0x6005, 0x6005).w(FUNC(gotya_state::soundlatch_w));
map(0x6006, 0x6006).writeonly().share(m_scroll);
map(0x6007, 0x6007).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0xc000, 0xc7ff).ram().w(FUNC(gotya_state::gotya_videoram_w)).share("videoram");
map(0xc800, 0xcfff).ram().w(FUNC(gotya_state::gotya_colorram_w)).share("colorram");
map(0xd000, 0xd3df).ram().share("videoram2");
map(0xd3e0, 0xd3ff).ram().share("spriteram");
map(0xc000, 0xc7ff).ram().w(FUNC(gotya_state::videoram_w)).share(m_videoram[0]);
map(0xc800, 0xcfff).ram().w(FUNC(gotya_state::colorram_w)).share(m_colorram);
map(0xd000, 0xd3df).ram().share(m_videoram[1]);
map(0xd3e0, 0xd3ff).ram().share(m_spriteram);
}
@ -133,67 +432,67 @@ INPUT_PORTS_END
static const gfx_layout charlayout =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
2, /* 2 bits per pixel */
{ 0, 4 }, /* the bitplanes are packed in one byte */
8,8, // 8*8 characters
256, // 256 characters
2, // 2 bits per pixel
{ 0, 4 }, // the bitplanes are packed in one byte
{ 0, 1, 2, 3, 8*8+0, 8*8+1, 8*8+2, 8*8+3 },
{ 7*8, 6*8, 5*8, 4*8, 3*8, 2*8, 1*8, 0*8 },
16*8 /* every char takes 16 consecutive bytes */
16*8 // every char takes 16 consecutive bytes
};
static const gfx_layout spritelayout =
{
16,16, /* 16*16 characters */
64, /* 64 characters */
2, /* 2 bits per pixel */
{ 0, 4 }, /* the bitplanes are packed in one byte */
16,16, // 16*16 characters
64, // 64 characters
2, // 2 bits per pixel
{ 0, 4 }, // the bitplanes are packed in one byte
{ 0, 1, 2, 3, 24*8+0, 24*8+1, 24*8+2, 24*8+3,
16*8+0, 16*8+1, 16*8+2, 16*8+3, 8*8+0, 8*8+1, 8*8+2, 8*8+3 },
{ 39*8, 38*8, 37*8, 36*8, 35*8, 34*8, 33*8, 32*8,
7*8, 6*8, 5*8, 4*8, 3*8, 2*8, 1*8, 0*8 },
64*8 /* every char takes 64 consecutive bytes */
64*8 // every char takes 64 consecutive bytes
};
static GFXDECODE_START( gfx_gotya )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 16 )
GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 0, 16 )
GFXDECODE_END
static const char *const sample_names[] =
{ // Address triggered at
"*thehand",
"01", /* game start tune */ // 075f
"02", /* coin in */ // 0074
"03", /* eat dot */ // 0e45
"05", /* eat dollar sign */ // 0e45
"01", // game start tune // 075f
"02", // coin in // 0074
"03", // eat dot // 0e45
"05", // eat dollar sign // 0e45
"06", /* door open */ // 19e1
"07", /* door close */ // 1965
"06", // door open // 19e1
"07", // door close // 1965
"08", /* theme song */ // 0821
"08", // theme song // 0821
//"09" // 1569
/* one of these two is played after eating the last dot */
"0a", /* piccolo */ // 17af
"0b", /* tune */ // 17af
// one of these two is played after eating the last dot
"0a", // piccolo // 17af
"0b", // tune // 17af
//"0f" // 08ee
"10", /* 'We're even. Bye Bye!' */ // 162a
"11", /* 'You got me!' */ // 1657
"12", /* 'You have lost out' */ // 085e
"10", // 'We're even. Bye Bye!' // 162a
"11", // 'You got me!' // 1657
"12", // 'You have lost out' // 085e
"13", /* 'Rock' */ // 14de
"14", /* 'Scissors' */ // 14f3
"15", /* 'Paper' */ // 1508
"13", // 'Rock' // 14de
"14", // 'Scissors' // 14f3
"15", // 'Paper' // 1508
/* one of these is played when going by the girl between levels */
"16", /* 'Very good!' */ // 194a
"17", /* 'Wonderful!' */ // 194a
"18", /* 'Come on!' */ // 194a
"19", /* 'I love you!' */ // 194a
"1a", /* 'See you again!' */ // 194a
// one of these is played when going by the girl between levels
"16", // 'Very good!' // 194a
"17", // 'Wonderful!' // 194a
"18", // 'Come on!' // 194a
"19", // 'I love you!' // 194a
"1a", // 'See you again!' // 194a
nullptr
};
@ -211,26 +510,26 @@ void gotya_state::machine_reset()
void gotya_state::gotya(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 18432000/6); /* 3.072 MHz ??? */
m_maincpu->set_addrmap(AS_PROGRAM, &gotya_state::gotya_map);
// basic machine hardware
Z80(config, m_maincpu, 18432000 / 6); // 3.072 MHz ???
m_maincpu->set_addrmap(AS_PROGRAM, &gotya_state::prg_map);
m_maincpu->set_vblank_int("screen", FUNC(gotya_state::irq0_line_hold));
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
screen.set_size(36*8, 32*8);
screen.set_visarea(0, 36*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(gotya_state::screen_update_gotya));
screen.set_screen_update(FUNC(gotya_state::screen_update));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_gotya);
PALETTE(config, m_palette, FUNC(gotya_state::gotya_palette), 16*4, 32);
PALETTE(config, m_palette, FUNC(gotya_state::palette), 16*4, 32);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
SAMPLES(config, m_samples);
@ -252,21 +551,21 @@ ROM_START( thehand )
ROM_LOAD( "hand4.bin", 0x2000, 0x1000, CRC(c6844a83) SHA1(84e220dce3f5ddee9dd0377f3bebdd4027fc9108) )
ROM_LOAD( "gb-03.bin", 0x3000, 0x1000, CRC(f34d90ab) SHA1(bec5f6a34a273f308083a280f2b425d9c273c69b) )
ROM_REGION( 0x1000, "gfx1", 0 ) /* characters */
ROM_REGION( 0x1000, "chars", 0 )
ROM_LOAD( "hand12.bin", 0x0000, 0x1000, CRC(95773b46) SHA1(db8d7ace4eafd4c72edfeff6003ca6e96e0239b5) )
ROM_REGION( 0x1000, "gfx2", 0 ) /* sprites */
ROM_REGION( 0x1000, "sprites", 0 )
ROM_LOAD( "gb-11.bin", 0x0000, 0x1000, CRC(5d5eca1b) SHA1(d7c6b5f4d398d5e33cc411ed593d6f53a9979493) )
ROM_REGION( 0x0120, "proms", 0 )
ROM_LOAD( "prom.1a", 0x0000, 0x0020, CRC(4864a5a0) SHA1(5b49f60b085fa026d4e8d4a5ad28ee7037a8ff9c) ) /* color PROM */
ROM_LOAD( "prom.4c", 0x0020, 0x0100, CRC(4745b5f6) SHA1(02a7f759e9bc8089cbd9213a71bbe671f9641638) ) /* lookup table */
ROM_LOAD( "prom.1a", 0x0000, 0x0020, CRC(4864a5a0) SHA1(5b49f60b085fa026d4e8d4a5ad28ee7037a8ff9c) ) // color PROM
ROM_LOAD( "prom.4c", 0x0020, 0x0100, CRC(4745b5f6) SHA1(02a7f759e9bc8089cbd9213a71bbe671f9641638) ) // lookup table
ROM_REGION( 0x1000, "user1", 0 ) /* no idea what these are */
ROM_REGION( 0x1000, "user1", 0 ) // no idea what these are
ROM_LOAD( "hand1.bin", 0x0000, 0x0800, CRC(ccc537e0) SHA1(471fd49225aa14b91d085178e1b58b6c4ae76481) )
ROM_LOAD( "gb-02.bin", 0x0800, 0x0800, CRC(65a7e284) SHA1(91e9c34dcf20608863ad5475dc0c4309971c8eee) )
ROM_REGION( 0x8000, "user2", 0 ) /* HD38880 code/samples? */
ROM_REGION( 0x8000, "user2", 0 ) // HD38880 code/samples?
ROM_LOAD( "gb-10.bin", 0x4000, 0x1000, CRC(8101915f) SHA1(c4d21b1938ea7e0d47c48e74037f005280ac101b) )
ROM_LOAD( "gb-09.bin", 0x5000, 0x1000, CRC(619bba76) SHA1(2a2deffe6f058fc840329fbfffbc0c70a0147c14) )
ROM_LOAD( "gb-08.bin", 0x6000, 0x1000, CRC(82f59528) SHA1(6bfa2329eb291040bfc229c56420865253b0132a) )
@ -278,28 +577,31 @@ ROM_START( gotya )
ROM_LOAD( "gb-06.bin", 0x0000, 0x1000, CRC(7793985a) SHA1(23aa8bd161e700bea59b92075423cdf55e9a26c3) )
ROM_LOAD( "gb-05.bin", 0x1000, 0x1000, CRC(683d188b) SHA1(5341c62f5cf384c73be0d7a0a230bb8cebfbe709) )
ROM_LOAD( "gb-04.bin", 0x2000, 0x1000, CRC(15b72f09) SHA1(bd941722ed1310d5c8ca8a44899368cba3815f3b) )
ROM_LOAD( "gb-03.bin", 0x3000, 0x1000, CRC(f34d90ab) SHA1(bec5f6a34a273f308083a280f2b425d9c273c69b) ) /* this is the only ROM that passes the ROM test */
ROM_LOAD( "gb-03.bin", 0x3000, 0x1000, CRC(f34d90ab) SHA1(bec5f6a34a273f308083a280f2b425d9c273c69b) ) // this is the only ROM that passes the ROM test
ROM_REGION( 0x1000, "gfx1", 0 ) /* characters */
ROM_REGION( 0x1000, "chars", 0 )
ROM_LOAD( "gb-12.bin", 0x0000, 0x1000, CRC(4993d735) SHA1(9e47876238a8af3659721191a5f75c33507ed1a5) )
ROM_REGION( 0x1000, "gfx2", 0 ) /* sprites */
ROM_REGION( 0x1000, "sprites", 0 )
ROM_LOAD( "gb-11.bin", 0x0000, 0x1000, CRC(5d5eca1b) SHA1(d7c6b5f4d398d5e33cc411ed593d6f53a9979493) )
ROM_REGION( 0x0120, "proms", 0 )
ROM_LOAD( "prom.1a", 0x0000, 0x0020, CRC(4864a5a0) SHA1(5b49f60b085fa026d4e8d4a5ad28ee7037a8ff9c) ) /* color PROM */
ROM_LOAD( "prom.4c", 0x0020, 0x0100, CRC(4745b5f6) SHA1(02a7f759e9bc8089cbd9213a71bbe671f9641638) ) /* lookup table */
ROM_LOAD( "prom.1a", 0x0000, 0x0020, CRC(4864a5a0) SHA1(5b49f60b085fa026d4e8d4a5ad28ee7037a8ff9c) ) // color PROM
ROM_LOAD( "prom.4c", 0x0020, 0x0100, CRC(4745b5f6) SHA1(02a7f759e9bc8089cbd9213a71bbe671f9641638) ) // lookup table
ROM_REGION( 0x1000, "user1", 0 ) /* no idea what these are */
ROM_REGION( 0x1000, "user1", 0 ) // no idea what these are
ROM_LOAD( "gb-01.bin", 0x0000, 0x0800, CRC(c31dba64) SHA1(15ae54b7d475ca3f0a3acc45cd8da2916c5fdef2) )
ROM_LOAD( "gb-02.bin", 0x0800, 0x0800, CRC(65a7e284) SHA1(91e9c34dcf20608863ad5475dc0c4309971c8eee) )
ROM_REGION( 0x8000, "user2", 0 ) /* HD38880 code/samples? */
ROM_REGION( 0x8000, "user2", 0 ) // HD38880 code/samples?
ROM_LOAD( "gb-10.bin", 0x4000, 0x1000, CRC(8101915f) SHA1(c4d21b1938ea7e0d47c48e74037f005280ac101b) )
ROM_LOAD( "gb-09.bin", 0x5000, 0x1000, CRC(619bba76) SHA1(2a2deffe6f058fc840329fbfffbc0c70a0147c14) )
ROM_LOAD( "gb-08.bin", 0x6000, 0x1000, CRC(82f59528) SHA1(6bfa2329eb291040bfc229c56420865253b0132a) )
ROM_LOAD( "gb-07.bin", 0x7000, 0x1000, CRC(92a9f8bf) SHA1(9231cd86f24f1e6a585c3a919add50c1f8e42a4c) )
ROM_END
} // anonymous namespace
GAME( 1981, thehand, 0, gotya, gotya, gotya_state, empty_init, ROT270, "T.I.C.", "The Hand", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, gotya, thehand, gotya, gotya, gotya_state, empty_init, ROT270, "Game-A-Tron", "Got-Ya (12/24/1981)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -477,10 +477,10 @@ ROM_START( hyprduel )
ROM_LOAD16_BYTE( "23.u23", 0x000001, 0x40000, CRC(d8297c2b) SHA1(2e23c5b1784d0a465c0c0dc3ca28505689a8b16c) ) /* Also silk screened as position 9 */
ROM_REGION( 0x400000, "vdp", 0 ) /* Gfx + Prg + Data (Addressable by CPU & Blitter) */
ROMX_LOAD( "ts_hyper-1.u74", 0x000000, 0x100000, CRC(4b3b2d3c) SHA1(5e9e8ec853f71aeff3910b93dadbaeae2b61717b) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "ts_hyper-2.u75", 0x000002, 0x100000, CRC(dc230116) SHA1(a3c447657d8499764f52c81382961f425c56037b) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "ts_hyper-3.u76", 0x000004, 0x100000, CRC(2d770dd0) SHA1(27f9e7f67e96210d3710ab4f940c5d7ae13f8bbf) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "ts_hyper-4.u77", 0x000006, 0x100000, CRC(f88c6d33) SHA1(277b56df40a17d7dd9f1071b0d498635a5b783cd) , ROM_GROUPWORD | ROM_SKIP(6) )
ROM_LOAD64_WORD( "ts_hyper-1.u74", 0x000000, 0x100000, CRC(4b3b2d3c) SHA1(5e9e8ec853f71aeff3910b93dadbaeae2b61717b) )
ROM_LOAD64_WORD( "ts_hyper-2.u75", 0x000002, 0x100000, CRC(dc230116) SHA1(a3c447657d8499764f52c81382961f425c56037b) )
ROM_LOAD64_WORD( "ts_hyper-3.u76", 0x000004, 0x100000, CRC(2d770dd0) SHA1(27f9e7f67e96210d3710ab4f940c5d7ae13f8bbf) )
ROM_LOAD64_WORD( "ts_hyper-4.u77", 0x000006, 0x100000, CRC(f88c6d33) SHA1(277b56df40a17d7dd9f1071b0d498635a5b783cd) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "97.u97", 0x00000, 0x40000, CRC(bf3f8574) SHA1(9e743f05e53256c886d43e1f0c43d7417134b9b3) ) /* Also silk screened as position 11 */
@ -492,10 +492,10 @@ ROM_START( hyprduel2 )
ROM_LOAD16_BYTE( "23a.u23", 0x000001, 0x40000, CRC(98aedfca) SHA1(42028e57ac79473cde683be2100b953ff3b2b345) ) /* Also silk screened as position 9 */
ROM_REGION( 0x400000, "vdp", 0 ) /* Gfx + Prg + Data (Addressable by CPU & Blitter) */
ROMX_LOAD( "ts_hyper-1.u74", 0x000000, 0x100000, CRC(4b3b2d3c) SHA1(5e9e8ec853f71aeff3910b93dadbaeae2b61717b) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "ts_hyper-2.u75", 0x000002, 0x100000, CRC(dc230116) SHA1(a3c447657d8499764f52c81382961f425c56037b) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "ts_hyper-3.u76", 0x000004, 0x100000, CRC(2d770dd0) SHA1(27f9e7f67e96210d3710ab4f940c5d7ae13f8bbf) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "ts_hyper-4.u77", 0x000006, 0x100000, CRC(f88c6d33) SHA1(277b56df40a17d7dd9f1071b0d498635a5b783cd) , ROM_GROUPWORD | ROM_SKIP(6) )
ROM_LOAD64_WORD( "ts_hyper-1.u74", 0x000000, 0x100000, CRC(4b3b2d3c) SHA1(5e9e8ec853f71aeff3910b93dadbaeae2b61717b) )
ROM_LOAD64_WORD( "ts_hyper-2.u75", 0x000002, 0x100000, CRC(dc230116) SHA1(a3c447657d8499764f52c81382961f425c56037b) )
ROM_LOAD64_WORD( "ts_hyper-3.u76", 0x000004, 0x100000, CRC(2d770dd0) SHA1(27f9e7f67e96210d3710ab4f940c5d7ae13f8bbf) )
ROM_LOAD64_WORD( "ts_hyper-4.u77", 0x000006, 0x100000, CRC(f88c6d33) SHA1(277b56df40a17d7dd9f1071b0d498635a5b783cd) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "97.u97", 0x00000, 0x40000, CRC(bf3f8574) SHA1(9e743f05e53256c886d43e1f0c43d7417134b9b3) ) /* Also silk screened as position 11 */
@ -507,10 +507,10 @@ ROM_START( magerror )
ROM_LOAD16_BYTE( "23.u23", 0x000001, 0x40000, CRC(7271ec70) SHA1(bd7666390b70821f90ba976a3afe3194fb119478) ) /* Also silk screened as position 9 */
ROM_REGION( 0x400000, "vdp", 0 ) /* Gfx + Prg + Data (Addressable by CPU & Blitter) */
ROMX_LOAD( "mr93046-02.u74", 0x000000, 0x100000, CRC(f7ba06fb) SHA1(e1407b0d03863f434b68183c01e8547612e5c5fd) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "mr93046-04.u75", 0x000002, 0x100000, CRC(8c114d15) SHA1(4eb1f82e7992deb126633287cb4fd2a6d215346c) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "mr93046-01.u76", 0x000004, 0x100000, CRC(6cc3b928) SHA1(f19d0add314867bfb7dcefe8e7a2d50a84530df7) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "mr93046-03.u77", 0x000006, 0x100000, CRC(6b1eb0ea) SHA1(6167a61562ef28147a7917c692f181f3fc2d5be6) , ROM_GROUPWORD | ROM_SKIP(6) )
ROM_LOAD64_WORD( "mr93046-02.u74", 0x000000, 0x100000, CRC(f7ba06fb) SHA1(e1407b0d03863f434b68183c01e8547612e5c5fd) )
ROM_LOAD64_WORD( "mr93046-04.u75", 0x000002, 0x100000, CRC(8c114d15) SHA1(4eb1f82e7992deb126633287cb4fd2a6d215346c) )
ROM_LOAD64_WORD( "mr93046-01.u76", 0x000004, 0x100000, CRC(6cc3b928) SHA1(f19d0add314867bfb7dcefe8e7a2d50a84530df7) )
ROM_LOAD64_WORD( "mr93046-03.u77", 0x000006, 0x100000, CRC(6b1eb0ea) SHA1(6167a61562ef28147a7917c692f181f3fc2d5be6) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "97.u97", 0x00000, 0x40000, CRC(2e62bca8) SHA1(191fff11186dbbc1d9d9f3ba1b6e17c38a7d2d1d) ) /* Also silk screened as position 11 */

View File

@ -716,6 +716,17 @@ static INPUT_PORTS_START( headons )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* no color/bw option */
INPUT_PORTS_END
static INPUT_PORTS_START( startrks )
PORT_INCLUDE( headons )
PORT_MODIFY("IN0")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPSETTING( 0x03, "5" )
INPUT_PORTS_END
static INPUT_PORTS_START( hocrash )
PORT_INCLUDE( headons )
@ -3470,7 +3481,30 @@ ROM_START( sspacaho )
ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */
ROM_END
// Found on a Gremlin 'EXTENDED ROM VIDEO LOGIC ASSY NO 800-003' PCB with a '834-0118' sticker and a Sega 96718-P-A riser board.
// Everything on the board is dated 1979, but possibly the PCB was converted from something else, given the epr numbers are way bigger than the Japanese version ones
ROM_START( samurai )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-1217.u33", 0x0000, 0x0400, CRC(a1a9cb03) SHA1(1875a86ad5938295dd5db6bb045be46eba8638ba) )
ROM_LOAD( "epr-1218.u32", 0x0400, 0x0400, CRC(4b45d07d) SHA1(ff8cb6bae5ed239a0245265ca36305e4fadc7695) )
ROM_LOAD( "epr-1219.u31", 0x0800, 0x0400, CRC(9fd4b195) SHA1(001e3952927dac36993b20f6deae343fdb95e2cd) )
ROM_LOAD( "epr-1220.u30", 0x0c00, 0x0400, CRC(90370e13) SHA1(6a7419a52299a78aff16689775ce0533ac8aa443) )
ROM_LOAD( "epr-1221.u29", 0x1000, 0x0400, CRC(dcc47158) SHA1(801a16aa100fee3f13b4acd426612dde9c906f5d) )
ROM_LOAD( "epr-1222.u28", 0x1400, 0x0400, CRC(d2fab27a) SHA1(d289f0451859d87665f8047aabb43494a22fae28) )
ROM_LOAD( "epr-1223.u27", 0x1800, 0x0400, CRC(f7e2ad95) SHA1(078055961fc09ee91734e86b30a7b48a03a67f4a) )
ROM_LOAD( "epr-1224.u26", 0x1c00, 0x0400, CRC(d46e306b) SHA1(51532a054fc334a04d3e5cad3b41aa3508318bc5) )
ROM_LOAD( "epr-1225.u8", 0x2000, 0x0400, CRC(3dd5c41f) SHA1(de400d30b732edd94ad5388e82cdae27d92f0e7f) )
ROM_LOAD( "epr-1226.u7", 0x2400, 0x0400, CRC(7c3561b1) SHA1(9f14924dbd753f9389b0516eb5af6241e897e9a1) )
ROM_LOAD( "epr-1227.u6", 0x2800, 0x0400, CRC(e72c71a4) SHA1(52b6ea96897f2b5b1ee5aab7c1737e35d986b75e) )
ROM_LOAD( "epr-1228.u5", 0x2c00, 0x0400, CRC(d76f4a56) SHA1(77746f6e73c48fa5ca27a097e9b13a36363f3aa8) )
ROM_LOAD( "epr-1229.u4", 0x3000, 0x0400, CRC(e0d40395) SHA1(343addf9148c26c3f3e7fbf3005ad6c9b33e3899) )
ROM_LOAD( "epr-1230.u3", 0x3400, 0x0400, CRC(55e9a5c4) SHA1(022430a842ec2a38a64d9ede53dc1e1ac0c66efd) )
ROM_REGION( 0x0020, "proms", 0 )
ROM_LOAD( "pr55.clr", 0x0000, 0x0020, CRC(975f5fb0) SHA1(d5917d68ad5549fe5cc997521c3b0a5a279d2231) )
ROM_END
ROM_START( samuraij )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-289.u33", 0x0000, 0x0400, CRC(a1a9cb03) SHA1(1875a86ad5938295dd5db6bb045be46eba8638ba) )
ROM_LOAD( "epr-290.u32", 0x0400, 0x0400, CRC(49fede51) SHA1(58ab1779d555281ec436ae90dcdf4ada42625892) )
@ -4075,6 +4109,21 @@ ROM_START( startrks )
ROM_LOAD( "82s123.14c", 0x0020, 0x0020, CRC(a1506b9d) SHA1(037c3db2ea40eca459e8acba9d1506dd28d72d10) ) /* sequence PROM */
ROM_END
ROM_START( nostromo )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ns_1.bin", 0x0000, 0x0400, CRC(2ba4202a) SHA1(1e46e36c37c9f1cecb505a1fe393c24d0e271168) )
ROM_LOAD( "ns_2.bin", 0x0400, 0x0400, CRC(cf6081b8) SHA1(2294cf6849a8191928f268ba1dbef21659a1475f) )
ROM_LOAD( "ns_3.bin", 0x0800, 0x0400, CRC(fd983c0c) SHA1(a4aea8707878dcac8b4e3d9acad94f60eee956c6) )
ROM_LOAD( "ns_4.bin", 0x0c00, 0x0400, CRC(79e1dc92) SHA1(53fcf9b7b7e894122419b43adccb1aaf7dab8bf9) )
ROM_LOAD( "ns_5.bin", 0x1000, 0x0400, CRC(4deb2ce3) SHA1(2935a4ab4be0190e8efa560e30fa7349d83d3e69) )
ROM_LOAD( "ns_6.bin", 0x1400, 0x0400, CRC(e4ddf052) SHA1(8734c87742a1d0b68e679e1650806d0738c432c6) )
ROM_LOAD( "ns_7.bin", 0x1800, 0x0400, CRC(a5315dc8) SHA1(ba6d27d03c9f0100fe89ebbf4b58d166bf259fa8) )
ROM_REGION( 0x0040, "user1", 0 ) // timing PROMs, not dumped for this set but probably same as startrks given how close they are
ROM_LOAD( "82s123.15c", 0x0000, 0x0020, BAD_DUMP CRC(e60a7960) SHA1(b8b8716e859c57c35310efc4594262afedb84823) ) // control PROM
ROM_LOAD( "82s123.14c", 0x0020, 0x0020, BAD_DUMP CRC(a1506b9d) SHA1(037c3db2ea40eca459e8acba9d1506dd28d72d10) ) // sequence PROM
ROM_END
ROM_START( digger )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "684.u27", 0x0000, 0x0400, CRC(bba0d7c2) SHA1(1e55dd95b07b562dcc1e52ecf9460d302b14ee60) )
@ -4259,7 +4308,8 @@ GAME( 1979, car2, headon2, headon2bw, car2, vicdual_state, empty_i
GAME( 1979, invho2, 0, invho2, invho2, vicdual_state, empty_init, ROT270, "Sega", "Invinco / Head On 2 (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1979, invho2a, invho2, invho2, invho2, vicdual_state, empty_init, ROT270, "Sega", "Invinco / Head On 2 (set 2)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // wrong colors make Head On 2 unplayable (all black)
GAME( 1980, nsub, 0, nsub, nsub, nsub_state, empty_init, ROT270, "Sega", "N-Sub (upright)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // this is the upright set. cocktail set still needs to be dumped
GAME( 1980, samurai, 0, samurai, samurai, vicdual_state, empty_init, ROT270, "Sega", "Samurai", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, samurai, 0, samurai, samurai, vicdual_state, empty_init, ROT270, "Sega", "Samurai (World)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, samuraij, samurai, samurai, samurai, vicdual_state, empty_init, ROT270, "Sega", "Samurai (Japan)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1979, invinco, 0, invinco, invinco, vicdual_state, empty_init, ROT270, "Sega", "Invinco", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1979, invcarht, 0, carhntds, carhntds, vicdual_state, empty_init, ROT270, "Sega", "Invinco / Car Hunt (Germany)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1979, invds, 0, invds, invds, vicdual_state, empty_init, ROT270, "Sega", "Invinco / Deep Scan", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
@ -4279,7 +4329,8 @@ GAME( 1981, starrkr, brdrline, brdrline, starrkr, vicdual_state, empty_i
GAME( 1981, brdrlins, brdrline, brdrline, brdrline, vicdual_state, empty_init, ROT270, "bootleg (Sidam)", "Borderline (Sidam bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, brdrlinb, brdrline, brdrline, brdrline, vicdual_state, empty_init, ROT270, "bootleg (Karateco)", "Borderline (Karateco bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, brdrlinet, brdrline, tranqgun, tranqgun, tranqgun_state, empty_init, ROT270, "Sega", "Borderline (Tranquillizer Gun conversion)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // official factory conversion
GAME( 198?, startrks, 0, headons, headons, vicdual_state, empty_init, ROT0, "bootleg (Sidam)", "Star Trek (Head On hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 198?, startrks, 0, headons, startrks, vicdual_state, empty_init, ROT0, "bootleg (Sidam)", "Star Trek (Head On hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 198?, nostromo, 0, headons, startrks, vicdual_state, empty_init, ROT0, "bootleg", "Nostromo", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // sound board probably differs
GAME( 1980, digger, 0, digger, digger, vicdual_state, empty_init, ROT270, "Sega", "Digger", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, pulsar, 0, pulsar, pulsar, vicdual_state, empty_init, ROT270, "Sega", "Pulsar", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1979, heiankyo, 0, heiankyo, heiankyo, vicdual_state, empty_init, ROT270, "Denki Onkyo", "Heiankyo Alien", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -1,67 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Zsolt Vasvari
#ifndef MAME_INCLUDES_GOTYA_H
#define MAME_INCLUDES_GOTYA_H
#pragma once
#include "sound/samples.h"
#include "emupal.h"
#include "tilemap.h"
class gotya_state : public driver_device
{
public:
gotya_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_scroll(*this, "scroll"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_videoram2(*this, "videoram2"),
m_spriteram(*this, "spriteram"),
m_samples(*this, "samples"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette")
{ }
void gotya(machine_config &config);
private:
/* memory pointers */
required_shared_ptr<uint8_t> m_scroll;
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
required_shared_ptr<uint8_t> m_videoram2;
required_shared_ptr<uint8_t> m_spriteram;
/* video-related */
tilemap_t *m_bg_tilemap = nullptr;
int m_scroll_bit_8 = 0;
/* sound-related */
int m_theme_playing = 0;
/* devices */
required_device<samples_device> m_samples;
void gotya_videoram_w(offs_t offset, uint8_t data);
void gotya_colorram_w(offs_t offset, uint8_t data);
void gotya_video_control_w(uint8_t data);
void gotya_soundlatch_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILEMAP_MAPPER_MEMBER(tilemap_scan_rows_thehand);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
void gotya_palette(palette_device &palette) const;
uint32_t screen_update_gotya(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_status_row( bitmap_ind16 &bitmap, const rectangle &cliprect, int sx, int col );
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
void draw_status( bitmap_ind16 &bitmap, const rectangle &cliprect );
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
void gotya_map(address_map &map);
};
#endif // MAME_INCLUDES_GOTYA_H

View File

@ -14816,6 +14816,7 @@ superbon // bootleg
superg // hack
supergs // Silver Systems hack
supergx // [1980] Nichibutsu
supershp // bootleg
suprheli // bootleg
swarm // hack
tazmania // (c) 1982 Stern
@ -42672,11 +42673,13 @@ invds // 367-382 (c) 1979 Sega
invho2 // 271-286 (c) 1979 Sega
invho2a // 326-341 (c) 1979 Sega
invinco // 310-318 (c) 1979 Sega
nostromo // bootleg
nsub // 268-275 (c) 1980 Sega
pulsar // 790-805 (c) 1981 Sega
safari // 57-66 [1977 Gremlin?]
safaria // bootleg?
samurai // 289-302 + upgrades (c) 1980 Sega
samurai // 1217-1230 (c) Sega
samuraij // 289-302 + upgrades (c) 1980 Sega
spacetrk // 630-645 (c) 1980 Sega
spacetrkc // (c) 1980 Sega
sspacaho // ? epr00001.bin - epr00008.bin

View File

@ -1,177 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Zsolt Vasvari
#include "emu.h"
#include "video/resnet.h"
#include "includes/gotya.h"
/***************************************************************************
Convert the color PROMs into a more useable format.
***************************************************************************/
void gotya_state::gotya_palette(palette_device &palette) const
{
uint8_t const *color_prom = memregion("proms")->base();
static constexpr int resistances_rg[3] = { 1000, 470, 220 };
static constexpr int resistances_b [2] = { 470, 220 };
// compute the color output resistor weights
double rweights[3], gweights[3], bweights[2];
compute_resistor_weights(0, 255, -1.0,
3, &resistances_rg[0], rweights, 0, 0,
3, &resistances_rg[0], gweights, 0, 0,
2, &resistances_b[0], bweights, 0, 0);
// create a lookup table for the palette
for (int i = 0; i < 0x20; i++)
{
int bit0, bit1, bit2;
// red component
bit0 = BIT(color_prom[i], 0);
bit1 = BIT(color_prom[i], 1);
bit2 = BIT(color_prom[i], 2);
int const r = combine_weights(rweights, bit0, bit1, bit2);
// green component
bit0 = BIT(color_prom[i], 3);
bit1 = BIT(color_prom[i], 4);
bit2 = BIT(color_prom[i], 5);
int const g = combine_weights(gweights, bit0, bit1, bit2);
// blue component
bit0 = BIT(color_prom[i], 6);
bit1 = BIT(color_prom[i], 7);
int const b = combine_weights(bweights, bit0, bit1);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 32;
for (int i = 0; i < 0x40; i++)
{
uint8_t const ctabentry = color_prom[i] & 0x07;
palette.set_pen_indirect(i, ctabentry);
}
}
void gotya_state::gotya_videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void gotya_state::gotya_colorram_w(offs_t offset, uint8_t data)
{
m_colorram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void gotya_state::gotya_video_control_w(uint8_t data)
{
/* bit 0 - scroll bit 8
bit 1 - flip screen
bit 2 - sound disable ??? */
m_scroll_bit_8 = data & 0x01;
if (flip_screen() != (data & 0x02))
{
flip_screen_set(data & 0x02);
machine().tilemap().mark_all_dirty();
}
}
TILE_GET_INFO_MEMBER(gotya_state::get_bg_tile_info)
{
int code = m_videoram[tile_index];
int color = m_colorram[tile_index] & 0x0f;
tileinfo.set(0, code, color, 0);
}
TILEMAP_MAPPER_MEMBER(gotya_state::tilemap_scan_rows_thehand)
{
/* logical (col,row) -> memory offset */
row = 31 - row;
col = 63 - col;
return ((row) * (num_cols >> 1)) + (col & 31) + ((col >> 5) * 0x400);
}
void gotya_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gotya_state::get_bg_tile_info)), tilemap_mapper_delegate(*this, FUNC(gotya_state::tilemap_scan_rows_thehand)), 8, 8, 64, 32);
}
void gotya_state::draw_status_row( bitmap_ind16 &bitmap, const rectangle &cliprect, int sx, int col )
{
int row;
if (flip_screen())
{
sx = 35 - sx;
}
for (row = 29; row >= 0; row--)
{
int sy;
if (flip_screen())
sy = row;
else
sy = 31 - row;
m_gfxdecode->gfx(0)->opaque(bitmap,cliprect,
m_videoram2[row * 32 + col],
m_videoram2[row * 32 + col + 0x10] & 0x0f,
flip_screen_x(), flip_screen_y(),
8 * sx, 8 * sy);
}
}
void gotya_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
uint8_t *spriteram = m_spriteram;
int offs;
for (offs = 2; offs < 0x0e; offs += 2)
{
int code = spriteram[offs + 0x01] >> 2;
int color = spriteram[offs + 0x11] & 0x0f;
int sx = 256 - spriteram[offs + 0x10] + (spriteram[offs + 0x01] & 0x01) * 256;
int sy = spriteram[offs + 0x00];
if (flip_screen())
sy = 240 - sy;
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
code, color,
flip_screen_x(), flip_screen_y(),
sx, sy, 0);
}
}
void gotya_state::draw_status( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
draw_status_row(bitmap, cliprect, 0, 1);
draw_status_row(bitmap, cliprect, 1, 0);
draw_status_row(bitmap, cliprect, 2, 2); /* these two are blank, but I dont' know if the data comes */
draw_status_row(bitmap, cliprect, 33, 13); /* from RAM or 'hardcoded' into the hardware. Likely the latter */
draw_status_row(bitmap, cliprect, 35, 14);
draw_status_row(bitmap, cliprect, 34, 15);
}
uint32_t gotya_state::screen_update_gotya(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0, -(*m_scroll + (m_scroll_bit_8 * 256)) - 2 * 8);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
draw_status(bitmap, cliprect);
return 0;
}