diff options
Diffstat (limited to 'src/mame/gametron/gotya.cpp')
-rw-r--r-- | src/mame/gametron/gotya.cpp | 200 |
1 files changed, 96 insertions, 104 deletions
diff --git a/src/mame/gametron/gotya.cpp b/src/mame/gametron/gotya.cpp index 31105f02c20..ad188a5d757 100644 --- a/src/mame/gametron/gotya.cpp +++ b/src/mame/gametron/gotya.cpp @@ -7,20 +7,19 @@ TODO: Emulated sound - Hitachi HD38880BP - HD38882PA06 +Epson 7910 for the main melody +Hitachi HD38880BP and HD38882PA06 for voice - I think HD38880 is a CPU/MCU, because the game just sends it a sound command (0-0x1a) +I think HD38880 is a CPU/MCU, because the game just sends it a sound command (0-0x1a) - couriersud: - The chips above are speech synthesis chips. HD38880 is the main chip - whereas HD38882 is an eprom interface. PARCOR based. - http://www.freepatentsonline.com/4435832.html - Datasheet lists no parcor coefficients +couriersud: + The chips above are speech synthesis chips. HD38880 is the main chip + whereas HD38882 is an eprom interface. PARCOR based. + http://www.freepatentsonline.com/4435832.html + Datasheet lists no parcor coefficients -****************************************************************************/ +***************************************************************************** -/**************************************************************************** About GotYa (from the board owner) I believe it is a prototype for several reasons. @@ -34,7 +33,8 @@ TODO: Emulated sound 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: 'The Hand' is the original game, GAT licensed it for US manufacture. @@ -56,6 +56,7 @@ 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, 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" @@ -130,8 +131,6 @@ private: }; -// video - /*************************************************************************** Convert the color PROMs into a more useable format. @@ -246,12 +245,11 @@ void gotya_state::draw_status_row(bitmap_ind16 &bitmap, const rectangle &cliprec 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); + m_videoram[1][row * 32 + col], + m_videoram[1][row * 32 + col + 0x10] & 0x0f, + flip_screen_x(), flip_screen_y(), + 8 * sx, 8 * sy); } } @@ -267,11 +265,10 @@ void gotya_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) if (flip_screen()) sy = 240 - sy; - m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, - code, color, - flip_screen_x(), flip_screen_y(), - sx, sy, 0); + code, color, + flip_screen_x(), flip_screen_y(), + sx, sy, 0); } } @@ -295,43 +292,76 @@ uint32_t gotya_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, } -// audio +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 - struct gotya_sample - { - int8_t sound_command; - uint8_t channel; - uint8_t looping; - }; + "06", // door open // 19e1 + "07", // door close // 1965 + "08", // theme song // 0821 + //"09" // 1569 - 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 - }; + // 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 + nullptr +}; + +struct gotya_sample +{ + int8_t sound_command; + uint8_t channel; + uint8_t looping; +}; + +// all the speech can go to one channel? + +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 }, + + { 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) { @@ -365,8 +395,6 @@ void gotya_state::soundlatch_w(uint8_t data) } -// machine - void gotya_state::prg_map(address_map &map) { map(0x0000, 0x3fff).rom(); @@ -387,20 +415,20 @@ void gotya_state::prg_map(address_map &map) static INPUT_PORTS_START( gotya ) PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Paper") PORT_PLAYER(1) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Scissors") PORT_PLAYER(1) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Rock") PORT_PLAYER(1) PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) PORT_DIPNAME( 0x10, 0x10, "Sound Test" ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -460,42 +488,6 @@ static GFXDECODE_START( gfx_gotya ) 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 - - "06", // door open // 19e1 - "07", // door close // 1965 - - "08", // theme song // 0821 - //"09" // 1569 - - // 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 - nullptr -}; - void gotya_state::machine_start() { save_item(NAME(m_scroll_bit_8)); @@ -603,5 +595,5 @@ 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 ) +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, "T.I.C. (Game-A-Tron license)", "Got-Ya (12/24/1981)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) |