mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
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:
parent
f0cf972136
commit
899966bca0
@ -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",
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 */
|
||||
|
@ -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 )
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user