diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt index 5953b686663..6a4fe6a30bb 100644 --- a/src/mame/arcade.flt +++ b/src/mame/arcade.flt @@ -728,6 +728,7 @@ misc/fungames.cpp misc/funkball.cpp misc/galaxi.cpp misc/galgame.cpp +misc/gameace.cpp misc/gambl186.cpp misc/gamemasters.cpp misc/gammagic.cpp diff --git a/src/mame/mame.lst b/src/mame/mame.lst index bcbad2d9912..f14118fbfbf 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -29353,6 +29353,10 @@ magjoker // (c) 2000 BRL S.R.L. Bologna @source:misc/galgame.cpp galgame // (c) 1971 Computer Recreations, Inc +@source:misc/gameace.cpp +hotbody +hotbodya + @source:misc/gambl186.cpp gambl186 // EGD gambl186a // EGD @@ -42324,7 +42328,8 @@ rollace // (c) 1983 Williams rollace2 // (c) 1983 Williams @source:taito/sbmjb.cpp -sbmjb // E41 (c) 1998 Taito +honooinv // E41 (c) 1997 Taito +sbmjb // ??? (c) 1998 Taito @source:taito/sbowling.cpp sbowling // KB (c) 1982 Taito Corporation diff --git a/src/mame/misc/gameace.cpp b/src/mame/misc/gameace.cpp new file mode 100644 index 00000000000..d96d3db1896 --- /dev/null +++ b/src/mame/misc/gameace.cpp @@ -0,0 +1,243 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +PCB Layout +---------- + +ACE9412 +DM941204 +|------------------------------------------| +|UPC1241 YM3012 YM2151 3.BIN | +|TL084 TL084 6116 15MHz 4.BIN | +|9.BIN 1.BIN | +|M6295 Z80B(2) | +| 4MHz | +| 6116| +|J 6116 6116| +|A 6116 | +|M | +|M 2018 | +|A | +| DSW(8) |-----| 6264 | +| 62256 |ACTEL| 5.BIN | +| 2.BIN |A1020| 6.BIN | +| Z80B(1)|-----| 7.BIN | +|12MHz 8.BIN | +|------------------------------------------| +Notes: + Z80B(1) - clock 6.000MHz [12/2] + Z80B(2) - clock 4.000MHz + YM2151 - clock 4.000MHz + M6295 - clock 1.000MHz [4/4] + 6116/2018 - 2k x8 SRAM + 6264 - 8k x8 SRAM + 62256 - 32k x8 SRAM + +The 15 MHz XTAL has also been seen as 30MHz on a second PCB +*/ + +#include "emu.h" + +#include "cpu/z80/z80.h" +#include "sound/okim6295.h" +#include "sound/ymopm.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class gameace_state : public driver_device +{ +public: + gameace_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") + { + } + + void gameace(machine_config &config); + + void init_hotbody(); + +private: + required_device m_maincpu; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void main_program_map(address_map &map); + void sound_program_map(address_map &map); +}; + + +uint32_t gameace_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void gameace_state::main_program_map(address_map &map) +{ + map(0x0000, 0x8000).rom().region("maincpu", 0); +} + +void gameace_state::sound_program_map(address_map &map) // TODO: banking and everything else +{ + map(0x0000, 0xc000).rom().region("audiocpu", 0); + map(0xd000, 0xd7ff).ram(); +} + + +static INPUT_PORTS_START( hotbody ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8") +INPUT_PORTS_END + + +static GFXDECODE_START( gfx ) + //GFXDECODE_ENTRY( "sprites", gfx_8x8x4_planar, , 0, 16 ) // TODO + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_planar, 0, 16 ) // just enough to see the tiles +GFXDECODE_END + + +void gameace_state::gameace(machine_config &config) +{ + Z80(config, m_maincpu, 12_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &gameace_state::main_program_map); + + z80_device &audiocpu(Z80(config, "audiocpu", 4_MHz_XTAL)); + audiocpu.set_addrmap(AS_PROGRAM, &gameace_state::sound_program_map); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: all wrong + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(40*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8-1, 31*8-2); + screen.set_screen_update(FUNC(gameace_state::screen_update)); + screen.set_palette("palette"); + + GFXDECODE(config, "gfxdecode", "palette", gfx); + PALETTE(config, "palette").set_format(palette_device::xBGR_555, 1024); // TODO: wrong + + SPEAKER(config, "mono").front_center(); + + YM2151(config, "ym2151", 4_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); + + OKIM6295(config, "oki", 4_MHz_XTAL / 4, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); +} + + +ROM_START( hotbody ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD( "2.14b", 0x00000, 0x40000, CRC(4eff1b0c) SHA1(d2b443b59f50fa9013f528c18b0d38da7c938d22) ) + + ROM_REGION( 0x20000, "audiocpu", 0 ) + ROM_LOAD( "1.4b", 0x00000, 0x20000, CRC(87e15d1d) SHA1(648d29dbf35638639bbf2ffbcd594e455cecaed2) ) + + ROM_REGION( 0x40000, "sprites", 0 ) + ROM_LOAD( "3.1f", 0x00000, 0x20000, CRC(680ad651) SHA1(c1e53e7ab0b39d1ab4b6769f64323759ebb976c2) ) + ROM_LOAD( "4.2f", 0x20000, 0x20000, CRC(33d7cf7b) SHA1(8ed80382e727bee8ccfa7c24aac8b3058264c398) ) + + ROM_REGION( 0x100000, "tiles", 0 ) // contain both Hot Body and Same Same titles GFX + ROM_LOAD( "5.13g", 0x00000, 0x40000, CRC(70341256) SHA1(5763351b0c6cb83b4fddd93a2b6a95b96adac148) ) + ROM_LOAD( "6.14g", 0x40000, 0x40000, CRC(c5f744b1) SHA1(0e979f41d7e0a66b45a789384e6a6008e539798a) ) + ROM_LOAD( "7.16g", 0x80000, 0x40000, CRC(bce62a37) SHA1(8f340af1dd74f2a1b7b13c903abb2806a6a5c6dc) ) + ROM_LOAD( "8.17g", 0xc0000, 0x40000, CRC(4328f371) SHA1(3a5d1c0afb671943234120a0758077f76712f624) ) + + ROM_REGION( 0x40000, "oki", ROMREGION_ERASE00 ) + ROM_LOAD( "5a", 0x00000, 0x20000, CRC(2404da21) SHA1(1333634112eef8664b5d72af5fc57c4c800ce00d) ) + + ROM_REGION( 0x800, "plds", ROMREGION_ERASE00 ) // all read protected + ROM_LOAD( "pal1.4d", 0x000, 0x117, NO_DUMP ) // GAL16V8B-25LP + ROM_LOAD( "pal2.10c", 0x200, 0x157, NO_DUMP ) // PALCE20V8H-25PC/4 + ROM_LOAD( "pal3.17e", 0x400, 0x117, NO_DUMP ) // GAL16V8B-25LP + ROM_LOAD( "pal4.1d", 0x600, 0x157, NO_DUMP ) // PALCE20V8H-25PC/4 +ROM_END + +ROM_START( hotbodya ) // sprites and sound section ROMs match the above, tilemap ROMs differ (maybe censored / uncensored images?) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD( "2.14b", 0x00000, 0x40000, NO_DUMP ) // EPROM damaged and micro-fine wires broken + + ROM_REGION( 0x20000, "audiocpu", 0 ) + ROM_LOAD( "1.4b", 0x00000, 0x20000, CRC(87e15d1d) SHA1(648d29dbf35638639bbf2ffbcd594e455cecaed2) ) + + ROM_REGION( 0x40000, "sprites", 0 ) + ROM_LOAD( "3.1f", 0x00000, 0x20000, CRC(680ad651) SHA1(c1e53e7ab0b39d1ab4b6769f64323759ebb976c2) ) + ROM_LOAD( "4.2f", 0x20000, 0x20000, CRC(33d7cf7b) SHA1(8ed80382e727bee8ccfa7c24aac8b3058264c398) ) + + ROM_REGION( 0x100000, "tiles", 0 ) // seem to contain less than the other set, but still have both Hot Body and Same Same titles GFX + ROM_LOAD( "5.13g", 0x00000, 0x40000, CRC(7251a305) SHA1(4a6e2ae65d909a973178f6b817f3fcc3552b9563) ) + ROM_LOAD( "6.14g", 0x40000, 0x40000, CRC(e922503f) SHA1(78e64af3a5dd57a96c4a74a143e4c1f4ff917036) ) + ROM_LOAD( "7.16g", 0x80000, 0x40000, CRC(02ae2c99) SHA1(2852d1f825d4de9f12a1a46f6bdebf4fac9a955b) ) + ROM_LOAD( "8.17g", 0xc0000, 0x40000, CRC(909bd6c4) SHA1(14d2c8bb4c7ec8b375c353b0f55026db5c815986) ) + + ROM_REGION( 0x40000, "oki", ROMREGION_ERASE00 ) + ROM_LOAD( "5a", 0x00000, 0x20000, CRC(2404da21) SHA1(1333634112eef8664b5d72af5fc57c4c800ce00d) ) + + ROM_REGION( 0x800, "plds", ROMREGION_ERASE00 ) // all read protected + ROM_LOAD( "pal1.4d", 0x000, 0x117, NO_DUMP ) // GAL16V8B-25LP + ROM_LOAD( "pal2.10c", 0x200, 0x157, NO_DUMP ) // PALCE20V8H-25PC/4 + ROM_LOAD( "pal3.17e", 0x400, 0x117, NO_DUMP ) // GAL16V8B-25LP + ROM_LOAD( "pal4.1d", 0x600, 0x157, NO_DUMP ) // PALCE20V8H-25PC/4 +ROM_END + + +void gameace_state::init_hotbody() +{ + // TODO: enough for data but opcodes appear to have different scrambling + uint8_t *rom = memregion("maincpu")->base(); + std::vector buffer(0x40000); + memcpy(&buffer[0], rom, 0x40000); + + for (int i = 0x00000; i < 0x40000; i += 0x10) // TODO: simplify this + { + std::swap(rom[i], rom[i + 0x02]); + std::swap(rom[i + 0x03], rom[i + 0x05]); + std::swap(rom[i + 0x07], rom[i + 0x09]); + std::swap(rom[i + 0x05], rom[i + 0x09]); + std::swap(rom[i + 0x08], rom[i + 0x0c]); + std::swap(rom[i + 0x0a], rom[i + 0x0e]); + std::swap(rom[i + 0x0b], rom[i + 0x0d]); + std::swap(rom[i + 0x07], rom[i + 0x0b]); + std::swap(rom[i + 0x09], rom[i + 0x0f]); + } + for (int i = 0x00000; i < 0x40000; i += 0x10) + std::swap(rom[i + 0x0f], rom[i - 0x01]); +} + +} // anonymous namespace + + +GAME( 1995, hotbody, 0, gameace, hotbody, gameace_state, init_hotbody, ROT0, "Gameace", "Hot Body (set 1)", MACHINE_IS_SKELETON ) // both 1994 and 1995 strings in ROM +GAME( 1995, hotbodya, hotbody, gameace, hotbody, gameace_state, init_hotbody, ROT0, "Gameace", "Hot Body (set 2)", MACHINE_IS_SKELETON ) diff --git a/src/mame/taito/sbmjb.cpp b/src/mame/taito/sbmjb.cpp index 9e7a26d32da..e8e86b83ada 100644 --- a/src/mame/taito/sbmjb.cpp +++ b/src/mame/taito/sbmjb.cpp @@ -26,14 +26,19 @@ no dips TODO: + general: - everything is guesswork and should be taken with a grain of salt, especially the M66220FP hook up; - are the correct sounds played at the right times? - - hopper / medal (main roadblock before it can be considered playable); + sbmjb: - at boot the game zero-fills the 0x020000-0x020fff range in the tc0091lvc VRAM space, which is currently unmapped in tc009xlvc.cpp. Doesn't seem to use it afterwards, though. + - hopper / medal (main roadblock before it can be considered playable); + honooinv: + - almost immediately stops with 'coin in time out error' */ #include "emu.h" + #include "cpu/z80/z80.h" #include "machine/tc009xlvc.h" #include "machine/te7750.h" @@ -41,6 +46,7 @@ #include "machine/timer.h" #include "sound/okim6295.h" #include "sound/ymopn.h" + #include "screen.h" #include "speaker.h" @@ -134,6 +140,28 @@ static INPUT_PORTS_START( sbmjb ) // no dips on PCB, game options selectable in PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // No effect in test mode INPUT_PORTS_END +static INPUT_PORTS_START( honooinv ) // no dips on PCB, game options selectable in test mode + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + TIMER_DEVICE_CALLBACK_MEMBER(sbmjb_state::scanline_callback) // TODO: copy-pasted from other drivers using same chip, to be verified { @@ -213,7 +241,30 @@ ROM_START( sbmjb ) // all labels were peeled off / unreadable ROM_LOAD( "e41-03.ic24", 0x200, 0x117, CRC(d906c8ea) SHA1(eae9c9c25b4affe4baf7ba034c61670d24f5c4d1) ) ROM_END -} // Anonymous namespace +ROM_START( honooinv ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "e41-08.ic12", 0x00000, 0x10000, CRC(71fc6a58) SHA1(8e95f42fa227e7bbf80dc7690a016f5e43a8125d) ) // 1xxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "e41-07.ic5", 0x00000, 0x10000, CRC(0f1faa0b) SHA1(ff8a242507207be3ced2a77705b24a5b6dd1189c) ) // 1xxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x80000, "vdpcpu", 0 ) + ROM_LOAD( "e41-04.ic52", 0x00000, 0x80000, CRC(2e236b65) SHA1(4c5dda35d083742ad708d575e1d8cd158fa89210) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x100000, "vdpcpu:gfx", 0 ) + ROM_LOAD16_BYTE( "e41-05.ic49", 0x00000, 0x80000, CRC(493ddfac) SHA1(b37ac65c08dda284e15446bdc545cca889e03ba7) ) + ROM_LOAD16_BYTE( "e41-06.ic48", 0x00001, 0x80000, CRC(edb38f82) SHA1(d94f05f96a7acdb9e3c98646cbdd797fdc3b92b7) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "e41-09.ic3", 0x00000, 0x40000, CRC(5d25fb77) SHA1(b474be05cdb2e57632595caee7f8c27572db8935) ) + + ROM_REGION( 0x400, "plds", 0 ) + ROM_LOAD( "e41-02.ic51", 0x000, 0x117, CRC(67fd54e0) SHA1(f64fb33b9a4a935af5662b5103709131727c8411) ) + ROM_LOAD( "e41-03.ic24", 0x200, 0x117, CRC(d906c8ea) SHA1(eae9c9c25b4affe4baf7ba034c61670d24f5c4d1) ) +ROM_END + +} // anonymous namespace -GAME( 1998, sbmjb, 0, sbmjb, sbmjb, sbmjb_state, empty_init, ROT0, "Taito Corporation", "Sonic Blast Man's Janken Battle (main ver. 1.1, video ver. 1.0)", MACHINE_NOT_WORKING ) +GAME( 1998, sbmjb, 0, sbmjb, sbmjb, sbmjb_state, empty_init, ROT0, "Taito Corporation", "Sonic Blast Man's Janken Battle (main ver. 1.1, video ver. 1.0)", MACHINE_NOT_WORKING ) +GAME( 1997, honooinv, 0, sbmjb, honooinv, sbmjb_state, empty_init, ROT0, "Taito Corporation", "Honoo no Invader", MACHINE_NOT_WORKING )