From 899966bca0ee388789bcfec9b2b161289d3751c0 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 27 May 2022 22:29:03 +0200 Subject: New working clones ------------------ Nostromo [anonymous] Samurai (World) [anonymous, SNESNESCUBE64] Super Ship [anonymous] - gotya.cpp: minor cleanups - hyprduel.cpp: used standard ROM loading macros --- scripts/target/mame/arcade.lua | 3 - src/mame/audio/gotya.cpp | 75 ------- src/mame/drivers/galaxian.cpp | 17 +- src/mame/drivers/gotya.cpp | 440 ++++++++++++++++++++++++++++++++++------- src/mame/drivers/hyprduel.cpp | 24 +-- src/mame/drivers/vicdual.cpp | 55 +++++- src/mame/includes/gotya.h | 67 ------- src/mame/mame.lst | 5 +- src/mame/video/gotya.cpp | 177 ----------------- 9 files changed, 456 insertions(+), 407 deletions(-) delete mode 100644 src/mame/audio/gotya.cpp delete mode 100644 src/mame/includes/gotya.h delete mode 100644 src/mame/video/gotya.cpp diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 0a862362699..b12820c5f13 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -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", diff --git a/src/mame/audio/gotya.cpp b/src/mame/audio/gotya.cpp deleted file mode 100644 index cebf13eaf37..00000000000 --- a/src/mame/audio/gotya.cpp +++ /dev/null @@ -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; - } - } -} diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index 1a6b5901d7d..d057d7ade7d 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -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 ) diff --git a/src/mame/drivers/gotya.cpp b/src/mame/drivers/gotya.cpp index cae7818c430..31105f02c20 100644 --- a/src/mame/drivers/gotya.cpp +++ b/src/mame/drivers/gotya.cpp @@ -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" + + +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 m_scroll; + required_shared_ptr_array m_videoram; + required_shared_ptr m_colorram; + required_shared_ptr m_spriteram; + + // devices + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; + required_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; +} -void gotya_state::gotya_map(address_map &map) +// 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 - - "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 + "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 + + // 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 ) diff --git a/src/mame/drivers/hyprduel.cpp b/src/mame/drivers/hyprduel.cpp index c8a7632dbb7..37a5df62d31 100644 --- a/src/mame/drivers/hyprduel.cpp +++ b/src/mame/drivers/hyprduel.cpp @@ -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 */ diff --git a/src/mame/drivers/vicdual.cpp b/src/mame/drivers/vicdual.cpp index f5ec79c277a..c5e5c18ce46 100644 --- a/src/mame/drivers/vicdual.cpp +++ b/src/mame/drivers/vicdual.cpp @@ -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 ) diff --git a/src/mame/includes/gotya.h b/src/mame/includes/gotya.h deleted file mode 100644 index 84011869ace..00000000000 --- a/src/mame/includes/gotya.h +++ /dev/null @@ -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 m_scroll; - required_shared_ptr m_videoram; - required_shared_ptr m_colorram; - required_shared_ptr m_videoram2; - required_shared_ptr 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 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 m_maincpu; - required_device m_gfxdecode; - required_device m_palette; - void gotya_map(address_map &map); -}; - -#endif // MAME_INCLUDES_GOTYA_H diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a37400bd4e0..4cf22af3f32 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -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 diff --git a/src/mame/video/gotya.cpp b/src/mame/video/gotya.cpp deleted file mode 100644 index 644a657565f..00000000000 --- a/src/mame/video/gotya.cpp +++ /dev/null @@ -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; -} -- cgit v1.2.3