From 226bed1cf3a0684a8f8ce446a82a1cbcb219f575 Mon Sep 17 00:00:00 2001 From: mamehaze Date: Mon, 3 Nov 2014 01:16:34 +0000 Subject: New WORKING Game -- Hammer Away (prototype) [( Atro - from Neo-geo.com aka Rui Baptista ) ( _rm_ - from Neo-geo.com aka Ricardo Marques) ( 1up - from Neo-geo.com aka Daniel "casebres" )] (not extensively tested, but seems to work, needed irq0 on the sound cpu from the YM, also has more tiles than any other game, might tweak the code further) (ROM check fails, but I assume that's just because it's a proto.) --- src/mame/drivers/segas18.c | 110 ++++++++++++++++++++++++++++++++++++++++++++ src/mame/includes/segas18.h | 8 +++- src/mame/mame.lst | 1 + 3 files changed, 118 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/segas18.c b/src/mame/drivers/segas18.c index f6f13b0b593..f3c5e4b6eb5 100644 --- a/src/mame/drivers/segas18.c +++ b/src/mame/drivers/segas18.c @@ -73,6 +73,7 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind switch (m_romboard) { case ROM_BOARD_171_SHADOW: break; // ??? + case ROM_BOARD_837_7525: case ROM_BOARD_171_5874: case ROM_BOARD_171_5987: mapper.map_as_handler(0x00000, 0x00010, 0xfffff0, read16_delegate(FUNC(segas18_state::genesis_vdp_r), this), write16_delegate(FUNC(segas18_state::genesis_vdp_w), this)); break; default: assert(false); @@ -89,6 +90,8 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind else mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom1base",0x100000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this)); break; + case ROM_BOARD_837_7525: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_837_7525_bank_w), this)); + default: assert(false); } break; @@ -98,6 +101,7 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind { case ROM_BOARD_171_SHADOW: case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate()); break; + case ROM_BOARD_837_7525: case ROM_BOARD_171_5987: if (romsize <= 0x100000) mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate()); else @@ -390,6 +394,33 @@ WRITE16_MEMBER( segas18_state::rom_5987_bank_w ) } } +WRITE16_MEMBER( segas18_state::rom_837_7525_bank_w ) +{ + if (!ACCESSING_BITS_0_7) + return; + + offset &= 0xf; + data &= 0xff; + + // tile banking + if (offset < 8) + { + // int maxbanks = m_gfxdecode->gfx(0)->elements() / 1024; + data &= 0x9f; + + if (data & 0x80) data += 0x20; + data &= 0x3f; + + m_segaic16vid->segaic16_tilemap_set_bank(0, offset, data); + } + + // sprite banking + else + { + //printf("%02x %02x\n", offset, data); + // not needed? + } +} /************************************* @@ -1185,6 +1216,37 @@ INPUT_PORTS_END +static INPUT_PORTS_START( hamaway ) + PORT_INCLUDE( system18_generic ) + + PORT_MODIFY("DSW") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + /************************************* * * Graphics definitions @@ -1228,6 +1290,15 @@ WRITE_LINE_MEMBER(segas18_state::vdp_lv4irqline_callback_s18) * *************************************/ +WRITE_LINE_MEMBER(segas18_state::ym3438_irq_handler) +{ + if (state) + m_soundcpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE ); + else + m_soundcpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE ); +} + + static MACHINE_CONFIG_START( system18, segas18_state ) // basic machine hardware @@ -1276,6 +1347,7 @@ static MACHINE_CONFIG_START( system18, segas18_state ) MCFG_SOUND_ADD("ym1", YM3438, 8000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) + MCFG_YM2612_IRQ_HANDLER(WRITELINE(segas18_state, ym3438_irq_handler)) MCFG_SOUND_ADD("ym2", YM3438, 8000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) @@ -2261,6 +2333,39 @@ ROM_START( wwallyja ) ROM_LOAD( "mpr-14722.c4", 0x190000, 0x80000, CRC(1bd081f8) SHA1(e5b0b5d8334486f813d7c430bb7fce3f69605a21) ) ROM_END +/************************************************************************************************************************** + Hammer Away, Sega System 18 + CPU: M68000 + ROM Board: 837-7525 +*/ + +ROM_START( hamaway ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "4.bin", 0x000000, 0x40000, CRC(cc0981e1) SHA1(63528bd36f27e62fdf40715101e6d05b73e48f16) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_BYTE( "6.bin", 0x000001, 0x40000, CRC(e8599ee6) SHA1(3e32b025403aecbaecfcdd0325e4acd676e99c4e) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_BYTE( "5.bin", 0x080000, 0x40000, CRC(fdb247fd) SHA1(ee9db799fb5de27f81904f8ef792203415b6d4a6) ) + ROM_LOAD16_BYTE( "7.bin", 0x080001, 0x40000, CRC(63711470) SHA1(6c4be3a0cf0f897c34ef0b3bf549f52b185bb915) ) + + ROM_REGION( 0x180000, "gfx1", 0 ) // tiles + ROM_LOAD( "c10.bin", 0x000000, 0x40000, CRC(c55cb5cf) SHA1(396179632b29ac5f8b7f8f3c91d7cf834e548bdf) ) + ROM_LOAD( "1.bin", 0x040000, 0x40000, CRC(33be003f) SHA1(134fa6b3347c306d9e30882dfcf24632b49f85ea) ) + ROM_LOAD( "c11.bin", 0x080000, 0x40000, CRC(37787915) SHA1(c8d251be6c41de3aed2da6da70aa87071b70b1f6) ) + ROM_LOAD( "2.bin", 0x0c0000, 0x40000, CRC(60ca5c9f) SHA1(6358ea00125a5e3f55acf73aeb9c36b1db6e711e) ) + ROM_LOAD( "c12.bin", 0x100000, 0x40000, CRC(f12f1cf3) SHA1(45e883029c58e617a2a20ac1ab5c5f598c95f4bd) ) + ROM_LOAD( "3.bin", 0x140000, 0x40000, CRC(520aa7ae) SHA1(9584206aedd8be5ce9dca0ed370f8fe77aabaf76) ) + + ROM_REGION16_BE( 0x200000, "sprites", ROMREGION_ERASEFF ) // sprites + ROM_LOAD16_BYTE( "c17.bin", 0x000001, 0x40000, CRC(aa28d7aa) SHA1(3dd5d95b05e408c023f9bd77753c37080714239d) ) + ROM_LOAD16_BYTE( "10.bin", 0x000000, 0x40000, CRC(c4c95161) SHA1(2e313a4ca9506f53a2062b4a8e5ba7b381ba93ae) ) + ROM_LOAD16_BYTE( "c18.bin", 0x080001, 0x40000, CRC(0f8fe8bb) SHA1(e6f68442b8d4def29b106458496a47344f70d511) ) + ROM_LOAD16_BYTE( "11.bin", 0x080000, 0x40000, CRC(2b5eacbc) SHA1(ba3690501588b9c88a31022b44bc3c82b44ae26b) ) + ROM_LOAD16_BYTE( "c19.bin", 0x100001, 0x40000, CRC(3c616caa) SHA1(d48a6239b7a52ac13971f7513a65a17af492bfdf) ) // 11xxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_BYTE( "12.bin", 0x100000, 0x40000, CRC(c7bbd579) SHA1(ab87bfdad66ea241cb23c9bbfea05f5a1574d6c9) ) // 1ST AND 2ND HALF IDENTICAL (but ok, because pairing ROM has no data in the 2nd half anyway) + + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU + ROM_LOAD( "c16.bin", 0x010000, 0x40000, CRC(913cc18c) SHA1(4bf4ec14937586c3ae77fcad57dcb21f6433ef81) ) + ROM_LOAD( "c15.bin", 0x090000, 0x40000, CRC(b53694fc) SHA1(0e42be2730abce1b52ea94a9fe61cbd1c9a0ccae) ) +ROM_END /************************************* @@ -2284,6 +2389,10 @@ DRIVER_INIT_MEMBER(segas18_state,generic_5987) init_generic(ROM_BOARD_171_5987); } +DRIVER_INIT_MEMBER(segas18_state,hamaway) +{ + init_generic(ROM_BOARD_837_7525); +} /************************************* @@ -2348,3 +2457,4 @@ GAME( 1989, shdancerj, shdancer, system18, shdancer, segas18_state,g GAME( 1989, shdancer1, shdancer, system18, shdancer, segas18_state,generic_shad, ROT0, "Sega", "Shadow Dancer (US)", 0 ) GAME( 1992, wwallyj, 0, system18_fd1094, wwally, segas18_state,wwally, ROT0, "Sega", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", 0) // the roms do contain an english logo so maybe there is a world / us set too GAME( 1992, wwallyja, wwallyj, system18_fd1094, wwally, segas18_state,wwally, ROT0, "Sega", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", 0 ) +GAME( 1991, hamaway, 0, system18, hamaway, segas18_state,hamaway, ROT90, "Sega / Santos", "Hammer Away (prototype)", 0 ) diff --git a/src/mame/includes/segas18.h b/src/mame/includes/segas18.h index d7b1bcffcc0..2cf27fddfbd 100644 --- a/src/mame/includes/segas18.h +++ b/src/mame/includes/segas18.h @@ -55,6 +55,7 @@ public: DECLARE_DRIVER_INIT(generic_5874); DECLARE_DRIVER_INIT(wwally); DECLARE_DRIVER_INIT(generic_5987); + DECLARE_DRIVER_INIT(hamaway); // memory mapping void memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index); @@ -63,6 +64,7 @@ public: // read/write handlers DECLARE_WRITE16_MEMBER( rom_5987_bank_w ); + DECLARE_WRITE16_MEMBER( rom_837_7525_bank_w ); DECLARE_READ16_MEMBER( io_chip_r ); DECLARE_WRITE16_MEMBER( io_chip_w ); DECLARE_READ16_MEMBER( misc_io_r ); @@ -90,6 +92,8 @@ public: DECLARE_WRITE16_MEMBER( sega_tileram_0_w ) { m_segaic16vid->segaic16_tileram_0_w(space,offset,data,mem_mask); }; DECLARE_WRITE16_MEMBER( sega_textram_0_w ) { m_segaic16vid->segaic16_textram_0_w(space,offset,data,mem_mask); }; + + DECLARE_WRITE_LINE_MEMBER(ym3438_irq_handler); protected: // timer IDs @@ -104,7 +108,9 @@ protected: ROM_BOARD_INVALID, ROM_BOARD_171_SHADOW, // 171-???? -- used by shadow dancer ROM_BOARD_171_5874, // 171-5874 - ROM_BOARD_171_5987 // 171-5987 + ROM_BOARD_171_5987, // 171-5987 + ROM_BOARD_837_7525 // Hammer Away proto + }; // device overrides diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 718f569748d..8a0df506094 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -4688,6 +4688,7 @@ wwallyja // 1992.06 Wally wo Sagase! (Japan, FD1094, decrypted) desertbr // 1993.?? Desert Breaker (World, FD1094, decrypted) desertbrj // 1992.10 Desert Breaker (Japan) pontoon +hamaway // System18 Bootlegs astormbl // BOOTLEG -- cgit v1.2.3