New working clones

------------------
Storming Party / Riku Kai Kuu Saizensen (set 2) [f205v]

New machines marked as NOT_WORKING
----------------------------------
Olympus (Z Games, version 10) [Ioannis Bampoulas]
This commit is contained in:
Ivan Vangelista 2021-01-27 18:10:35 +01:00
parent c577a6748d
commit 66bd35e6ba
7 changed files with 282 additions and 208 deletions

View File

@ -630,6 +630,6 @@ GAME(1986, halley, 0, jps, jp, jp_state, empty_init, ROT0, "Juegos Popul
GAME(1986, halleya, halley, jps, jp, jp_state, empty_init, ROT0, "Juegos Populares", "Halley Comet (alternate version)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME(1986, aqualand, 0, jps, jp, jp_state, empty_init, ROT0, "Juegos Populares", "Aqualand", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME(1986, america, 0, jps, jp, jp_state, empty_init, ROT0, "Juegos Populares", "America 1492", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME(1986, olympus, 0, jps, jp, jp_state, empty_init, ROT0, "Juegos Populares", "Olympus", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME(1986, olympus, 0, jps, jp, jp_state, empty_init, ROT0, "Juegos Populares", "Olympus (Juegos Populares)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
GAME(1987, lortium, 0, jp, jp, jp_state, empty_init, ROT0, "Juegos Populares", "Lortium", MACHINE_IS_SKELETON_MECHANICAL)
GAME(19??, pimbal, 0, jp, jp, jp_state, empty_init, ROT0, "Juegos Populares", "Pimbal (Pinball 3000)", MACHINE_IS_SKELETON_MECHANICAL)

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
/***************************************************************************
Land Sea Air Squad / Storming Party (c) 1986 Taito
@ -154,39 +155,36 @@ Notes:
#include "speaker.h"
#define MASTER_CLOCK XTAL(24'000'000)
void lsasquad_state::lsasquad_bankswitch_w(uint8_t data)
void lsasquad_state::bankswitch_w(uint8_t data)
{
/* bits 0-2 select ROM bank */
membank("bank1")->set_entry(data & 0x07);
// bits 0-2 select ROM bank
m_mainbank->set_entry(data & 0x07);
/* bit 3 is zeroed on startup, maybe reset sound CPU */
// bit 3 is zeroed on startup, maybe reset sound CPU
/* bit 4 flips screen */
// bit 4 flips screen
flip_screen_set(data & 0x10);
/* other bits unknown */
// other bits unknown
}
void lsasquad_state::lsasquad_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x9fff).bankr("bank1");
map(0xa000, 0xbfff).ram(); /* SRAM */
map(0xc000, 0xdfff).ram().share("videoram"); /* SCREEN RAM */
map(0xe000, 0xe3ff).ram().share("scrollram"); /* SCROLL RAM */
map(0xe400, 0xe5ff).ram().share("spriteram"); /* OBJECT RAM */
map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xbfff).ram(); // SRAM
map(0xc000, 0xdfff).ram().share(m_videoram); // SCREEN RAM
map(0xe000, 0xe3ff).ram().share(m_scrollram); // SCROLL RAM
map(0xe400, 0xe5ff).ram().share(m_spriteram); // OBJECT RAM
map(0xe800, 0xe800).portr("DSWA");
map(0xe801, 0xe801).portr("DSWB");
map(0xe802, 0xe802).portr("DSWC");
map(0xe803, 0xe803).r(FUNC(lsasquad_state::lsasquad_mcu_status_r)); /* COIN + 68705 status */
map(0xe803, 0xe803).r(FUNC(lsasquad_state::lsasquad_mcu_status_r)); // COIN + 68705 status
map(0xe804, 0xe804).portr("P1");
map(0xe805, 0xe805).portr("P2");
map(0xe806, 0xe806).portr("START");
map(0xe807, 0xe807).portr("SERVICE");
map(0xea00, 0xea00).w(FUNC(lsasquad_state::lsasquad_bankswitch_w));
map(0xea00, 0xea00).w(FUNC(lsasquad_state::bankswitch_w));
map(0xec00, 0xec00).r(m_soundlatch2, FUNC(generic_latch_8_device::read));
map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xec01, 0xec01).r(FUNC(lsasquad_state::lsasquad_sound_status_r));
@ -201,10 +199,10 @@ void lsasquad_state::lsasquad_sound_map(address_map &map)
map(0xc000, 0xc001).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0xd000, 0xd000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xd000, 0xd000).w(m_soundlatch2, FUNC(generic_latch_8_device::write));
map(0xd400, 0xd400).w(FUNC(lsasquad_state::lsasquad_sh_nmi_disable_w));
map(0xd800, 0xd800).w(FUNC(lsasquad_state::lsasquad_sh_nmi_enable_w));
map(0xd400, 0xd400).w(FUNC(lsasquad_state::sh_nmi_disable_w));
map(0xd800, 0xd800).w(FUNC(lsasquad_state::sh_nmi_enable_w));
map(0xd800, 0xd800).r(FUNC(lsasquad_state::lsasquad_sound_status_r));
map(0xe000, 0xefff).rom(); /* space for diagnostic ROM? */
map(0xe000, 0xefff).rom(); // space for diagnostic ROM?
}
@ -212,11 +210,11 @@ void lsasquad_state::lsasquad_sound_map(address_map &map)
void lsasquad_state::storming_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x9fff).bankr("bank1");
map(0xa000, 0xbfff).ram(); /* SRAM */
map(0xc000, 0xdfff).ram().share("videoram"); /* SCREEN RAM */
map(0xe000, 0xe3ff).ram().share("scrollram"); /* SCROLL RAM */
map(0xe400, 0xe5ff).ram().share("spriteram"); /* OBJECT RAM */
map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xbfff).ram(); // SRAM
map(0xc000, 0xdfff).ram().share(m_videoram); // SCREEN RAM
map(0xe000, 0xe3ff).ram().share(m_scrollram); // SCROLL RAM
map(0xe400, 0xe5ff).ram().share(m_spriteram); // OBJECT RAM
map(0xe800, 0xe800).portr("DSWA");
map(0xe801, 0xe801).portr("DSWB");
map(0xe802, 0xe802).portr("DSWC");
@ -225,7 +223,7 @@ void lsasquad_state::storming_map(address_map &map)
map(0xe805, 0xe805).portr("P2");
map(0xe806, 0xe806).portr("START");
map(0xe807, 0xe807).portr("SERVICE");
map(0xea00, 0xea00).w(FUNC(lsasquad_state::lsasquad_bankswitch_w));
map(0xea00, 0xea00).w(FUNC(lsasquad_state::bankswitch_w));
map(0xec00, 0xec00).r(m_soundlatch2, FUNC(generic_latch_8_device::read));
map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xec01, 0xec01).r(FUNC(lsasquad_state::lsasquad_sound_status_r));
@ -305,8 +303,8 @@ static INPUT_PORTS_START( lsasquad )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("MCU")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* 68705 ready to receive cmd */
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* 0 = 68705 has sent result */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 68705 ready to receive cmd
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 0 = 68705 has sent result
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@ -372,24 +370,24 @@ static INPUT_PORTS_START( storming )
INPUT_PORTS_END
/* DAIKAIJU */
// DAIKAIJU
void lsasquad_state::daikaiju_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x9fff).bankr("bank1");
map(0xa000, 0xbfff).ram(); /* SRAM */
map(0xc000, 0xdfff).ram().share("videoram"); /* SCREEN RAM */
map(0xe000, 0xe3ff).ram().share("scrollram"); /* SCROLL RAM */
map(0xe400, 0xe7ff).ram().share("spriteram"); /* OBJECT RAM */
map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xbfff).ram(); // SRAM
map(0xc000, 0xdfff).ram().share(m_videoram); // SCREEN RAM
map(0xe000, 0xe3ff).ram().share(m_scrollram); // SCROLL RAM
map(0xe400, 0xe7ff).ram().share(m_spriteram); // OBJECT RAM
map(0xe800, 0xe800).portr("DSWA");
map(0xe801, 0xe801).portr("DSWB");
map(0xe803, 0xe803).r(FUNC(lsasquad_state::daikaiju_mcu_status_r)); /* COIN + 68705 status */
map(0xe803, 0xe803).r(FUNC(lsasquad_state::daikaiju_mcu_status_r)); // COIN + 68705 status
map(0xe804, 0xe804).portr("P1");
map(0xe805, 0xe805).portr("P2");
map(0xe806, 0xe806).portr("START");
map(0xe807, 0xe807).portr("SERVICE");
map(0xea00, 0xea00).w(FUNC(lsasquad_state::lsasquad_bankswitch_w));
map(0xea00, 0xea00).w(FUNC(lsasquad_state::bankswitch_w));
map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xee00, 0xee00).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
}
@ -401,10 +399,10 @@ void lsasquad_state::daikaiju_sound_map(address_map &map)
map(0xa000, 0xa001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0xc000, 0xc001).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0xd000, 0xd000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xd400, 0xd400).w(FUNC(lsasquad_state::lsasquad_sh_nmi_disable_w));
map(0xd800, 0xd800).rw(FUNC(lsasquad_state::daikaiju_sound_status_r), FUNC(lsasquad_state::lsasquad_sh_nmi_enable_w));
map(0xd400, 0xd400).w(FUNC(lsasquad_state::sh_nmi_disable_w));
map(0xd800, 0xd800).rw(FUNC(lsasquad_state::daikaiju_sound_status_r), FUNC(lsasquad_state::sh_nmi_enable_w));
map(0xdc00, 0xdc00).nopw();
map(0xe000, 0xefff).rom(); /* space for diagnostic ROM? */
map(0xe000, 0xefff).rom(); // space for diagnostic ROM?
}
static INPUT_PORTS_START( daikaiju )
@ -458,8 +456,8 @@ static INPUT_PORTS_START( daikaiju )
PORT_START("MCU")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* 68705 ready to receive cmd */
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* 0 = 68705 has sent result */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 68705 ready to receive cmd
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 0 = 68705 has sent result
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@ -547,26 +545,26 @@ void lsasquad_state::machine_start()
{
uint8_t *ROM = memregion("maincpu")->base();
membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x2000);
m_mainbank->configure_entries(0, 8, &ROM[0x8000], 0x2000);
}
/* Note: lsasquad clock values are not verified */
// Note: lsasquad clock values are not verified
void lsasquad_state::lsasquad(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MASTER_CLOCK / 4);
// basic machine hardware
Z80(config, m_maincpu, 24_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_map);
m_maincpu->set_vblank_int("screen", FUNC(lsasquad_state::irq0_line_hold));
Z80(config, m_audiocpu, MASTER_CLOCK / 8);
Z80(config, m_audiocpu, 24_MHz_XTAL / 8);
m_audiocpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_sound_map);
/* IRQs are triggered by the YM2203 */
TAITO68705_MCU(config, m_bmcu, MASTER_CLOCK / 8);
// IRQs are triggered by the YM2203
TAITO68705_MCU(config, m_bmcu, 24_MHz_XTAL / 8);
config.set_maximum_quantum(attotime::from_hz(30000)); /* 500 CPU slices per frame - a high value to ensure proper */
/* synchronization of the CPUs */
/* main<->sound synchronization depends on this */
config.set_maximum_quantum(attotime::from_hz(30000)); /* 500 CPU slices per frame - a high value to ensure proper
synchronization of the CPUs
main<->sound synchronization depends on this */
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set("soundnmi", FUNC(input_merger_device::in_w<0>));
@ -575,7 +573,7 @@ void lsasquad_state::lsasquad(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch2);
/* 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(0));
@ -587,12 +585,12 @@ void lsasquad_state::lsasquad(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lsasquad);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
YM2149(config, "aysnd", MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.12);
YM2149(config, "aysnd", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.12);
ym2203_device &ymsnd(YM2203(config, "ymsnd", MASTER_CLOCK / 8));
ym2203_device &ymsnd(YM2203(config, "ymsnd", 24_MHz_XTAL / 8));
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk));
ymsnd.port_b_write_callback().set(FUNC(lsasquad_state::unk));
@ -610,32 +608,32 @@ void lsasquad_state::storming(machine_config &config)
config.device_remove("bmcu");
AY8910(config.replace(), "aysnd", MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.12); // AY-3-8910A
AY8910(config.replace(), "aysnd", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.12); // AY-3-8910A
}
void lsasquad_state::daikaiju(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MASTER_CLOCK / 4);
// basic machine hardware
Z80(config, m_maincpu, 24_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::daikaiju_map);
m_maincpu->set_vblank_int("screen", FUNC(lsasquad_state::irq0_line_hold));
Z80(config, m_audiocpu, MASTER_CLOCK / 8);
Z80(config, m_audiocpu, 24_MHz_XTAL / 8);
m_audiocpu->set_addrmap(AS_PROGRAM, &lsasquad_state::daikaiju_sound_map);
/* IRQs are triggered by the YM2203 */
// IRQs are triggered by the YM2203
TAITO68705_MCU(config, m_bmcu, MASTER_CLOCK / 8);
TAITO68705_MCU(config, m_bmcu, 24_MHz_XTAL / 8);
config.set_maximum_quantum(attotime::from_hz(30000)); /* 500 CPU slices per frame - a high value to ensure proper */
/* synchronization of the CPUs */
/* main<->sound synchronization depends on this */
config.set_maximum_quantum(attotime::from_hz(30000)); /* 500 CPU slices per frame - a high value to ensure proper
synchronization of the CPUs
main<->sound synchronization depends on this */
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set("soundnmi", FUNC(input_merger_device::in_w<0>));
INPUT_MERGER_ALL_HIGH(config, "soundnmi").output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI);
/* 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(0));
@ -647,12 +645,12 @@ void lsasquad_state::daikaiju(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lsasquad);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
YM2149(config, "aysnd", MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.12);
YM2149(config, "aysnd", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.12);
ym2203_device &ymsnd(YM2203(config, "ymsnd", MASTER_CLOCK / 8));
ym2203_device &ymsnd(YM2203(config, "ymsnd", 24_MHz_XTAL / 8));
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk));
ymsnd.port_b_write_callback().set(FUNC(lsasquad_state::unk));
@ -670,16 +668,15 @@ void lsasquad_state::daikaiju(machine_config &config)
***************************************************************************/
ROM_START( lsasquad )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "a64-21.4", 0x00000, 0x8000, CRC(5ff6b017) SHA1(96cc74edba1208bb8e82f93d2d3a88ea24922dc0) )
/* ROMs banked at 8000-9fff */
ROM_LOAD( "a64-20.3", 0x10000, 0x8000, CRC(7f8b4979) SHA1(975b1a678e1f7d7b5789565063177593639645ce) )
ROM_LOAD( "a64-19.2", 0x18000, 0x8000, CRC(ba31d34a) SHA1(e2c515ae8146a37534b19403c03fc5a8719f115f) )
ROM_LOAD( "a64-20.3", 0x08000, 0x8000, CRC(7f8b4979) SHA1(975b1a678e1f7d7b5789565063177593639645ce) )
ROM_LOAD( "a64-19.2", 0x10000, 0x8000, CRC(ba31d34a) SHA1(e2c515ae8146a37534b19403c03fc5a8719f115f) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a64-04.44", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a64-05.35", 0x0000, 0x0800, CRC(572677b9) SHA1(e098d5d842bcc81221ba56652a7019505d8be082) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@ -695,28 +692,27 @@ ROM_START( lsasquad )
ROM_LOAD( "a64-17.26", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
ROM_REGION( 0x0600, "proms", 0 )
ROM_LOAD( "a64-07.22", 0x0000, 0x0200, CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) /* red (bottom half unused) */
ROM_LOAD( "a64-07.22", 0x0000, 0x0200, CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) // red (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "a64-08.23", 0x0200, 0x0200, CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) /* green (bottom half unused) */
ROM_LOAD( "a64-08.23", 0x0200, 0x0200, CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) // green (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "a64-09.24", 0x0400, 0x0200, CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) /* blue (bottom half unused) */
ROM_LOAD( "a64-09.24", 0x0400, 0x0200, CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) // blue (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 )
ROM_LOAD( "a64-06.9", 0x0000, 0x0400, CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) ) /* priority */
ROM_LOAD( "a64-06.9", 0x0000, 0x0400, CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) )
ROM_REGION( 0x0200, "plds", 0 )
ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
ROM_END
ROM_START( storming )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "stpartyj.001", 0x00000, 0x8000, CRC(07e6bc61) SHA1(6989a1401868dd93c9466cfd1636ac48a734a5d4) )
/* ROMs banked at 8000-9fff */
ROM_LOAD( "stpartyj.002", 0x10000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) )
ROM_LOAD( "stpartyj.003", 0x18000, 0x8000, CRC(159f23a6) SHA1(2cb4ed78e54dc2acbbfc2d4cfb2d29ff604aa9ae) )
ROM_LOAD( "stpartyj.002", 0x08000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) )
ROM_LOAD( "stpartyj.003", 0x10000, 0x8000, CRC(159f23a6) SHA1(2cb4ed78e54dc2acbbfc2d4cfb2d29ff604aa9ae) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a64-04.44", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@ -732,28 +728,65 @@ ROM_START( storming )
ROM_LOAD( "a64-17.26", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
ROM_REGION( 0x0600, "proms", 0 )
ROM_LOAD( "a64-07.22", 0x0000, 0x0200, CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) /* red (bottom half unused) */
ROM_LOAD( "a64-07.22", 0x0000, 0x0200, CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) // red (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "a64-08.23", 0x0200, 0x0200, CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) /* green (bottom half unused) */
ROM_LOAD( "a64-08.23", 0x0200, 0x0200, CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) // green (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "a64-09.24", 0x0400, 0x0200, CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) /* blue (bottom half unused) */
ROM_LOAD( "a64-09.24", 0x0400, 0x0200, CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) // blue (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 )
ROM_LOAD( "a64-06.9", 0x0000, 0x0400, CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) ) /* priority */
ROM_LOAD( "a64-06.9", 0x0000, 0x0400, CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) )
ROM_REGION( 0x0200, "plds", 0 )
ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
ROM_END
ROM_START( daikaiju )
// 2-PCB stack: main is marked SA-1001, ROM PCB has no visible markings
// this PCB only has two dip banks. Game code still reads invulnerability and freeze, which are listed as DSWC in the source. Are they jumpers?
ROM_START( storminga )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "a74_01-1.ic4", 0x00000, 0x8000, CRC(89c13d7f) SHA1(2eaec80d7aa360b700387df00b37a692acc50d74) )
/* ROMs banked at 8000-9fff */
ROM_LOAD( "a74_02.ic3", 0x10000, 0x8000, CRC(8ddf6131) SHA1(b5b23550e7ee52554bc1f045ed6f42e254a05bf4) )
ROM_LOAD( "a74_03.ic2", 0x18000, 0x8000, CRC(3911ffed) SHA1(ba6dbd74d37ef26621a02baf3479e2764d10d2ba) )
ROM_LOAD( "1.ic4.1e", 0x00000, 0x8000, CRC(07e6bc61) SHA1(6989a1401868dd93c9466cfd1636ac48a734a5d4) ) // only different ROM, various routines changed / nop-ed
ROM_LOAD( "2.ic3.1c", 0x08000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) )
ROM_LOAD( "3.ic2.1b", 0x10000, 0x8000, CRC(159f23a6) SHA1(2cb4ed78e54dc2acbbfc2d4cfb2d29ff604aa9ae) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "4.ic44.5g", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "5.ic29.2c", 0x00000, 0x8000, CRC(bb4f1b37) SHA1(ce8dc962a3d04a624e36b57dc678e7ca7726ba1d) )
ROM_LOAD( "7.ic30.3c", 0x08000, 0x8000, CRC(8ee2443b) SHA1(855d8189efcfc796daa6b36f86d2872cc48adfde) )
ROM_LOAD( "6.ic42.2d", 0x10000, 0x8000, CRC(a3bbc0b3) SHA1(f565d323575af3c2e95412c50130e88954fc238c) )
ROM_LOAD( "8.ic43.3d", 0x18000, 0x8000, CRC(f342d42f) SHA1(ef9367ad9763f4b38e0f12805c1eee7c430758c2) )
ROM_REGION( 0x20000, "gfx2", ROMREGION_INVERT )
ROM_LOAD( "9.ic2.14a", 0x00000, 0x8000, CRC(a72e2041) SHA1(c537d1620fe8562aef39a0279b35139eb0668bf9) )
ROM_LOAD( "a.ic3.16a", 0x08000, 0x8000, CRC(05206333) SHA1(a7463279446de9d633ea18f1e1eb5f610d982a37) )
ROM_LOAD( "10.ic27.14b", 0x10000, 0x8000, CRC(01ed5851) SHA1(6034376d30d1d17fe9aab07cb40009c4f3c03690) )
ROM_LOAD( "b.ic28.16b", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
ROM_REGION( 0x0600, "proms", 0 ) // not dumped for this set, but 99,9% sure they match storming
ROM_LOAD( "ic22.2l", 0x0000, 0x0200, BAD_DUMP CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) // red (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "ic23.2m", 0x0200, 0x0200, BAD_DUMP CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) // green (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "ic24.2m", 0x0400, 0x0200, BAD_DUMP CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) // blue (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 ) // not dumped for this set, but 99,9% sure it matches storming
ROM_LOAD( "ic9.1j", 0x0000, 0x0400, BAD_DUMP CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) )
ROM_REGION( 0x0200, "plds", 0 ) // protected for this set, but 99,9% sure it matches storming
ROM_LOAD( "pal16l8cj.ic14.2c", 0x0000, 0x0104, BAD_DUMP CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
ROM_END
ROM_START( daikaiju )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "a74_01-1.ic4", 0x00000, 0x8000, CRC(89c13d7f) SHA1(2eaec80d7aa360b700387df00b37a692acc50d74) )
ROM_LOAD( "a74_02.ic3", 0x08000, 0x8000, CRC(8ddf6131) SHA1(b5b23550e7ee52554bc1f045ed6f42e254a05bf4) )
ROM_LOAD( "a74_03.ic2", 0x10000, 0x8000, CRC(3911ffed) SHA1(ba6dbd74d37ef26621a02baf3479e2764d10d2ba) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a74_04.ic44", 0x0000, 0x8000, CRC(98a6a703) SHA1(0c169a7a5f8b26606f67ee7f14bd487951536ac5) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 )
@ -772,18 +805,19 @@ ROM_START( daikaiju )
ROM_LOAD( "a74_17.ic26", 0x18000, 0x8000, CRC(d1077878) SHA1(e69893db6b63d5a5192b521d61a86f60b7029b7e) )
ROM_REGION( 0x0600, "proms", 0 )
ROM_LOAD( "a74_07.ic22", 0x0000, 0x0200, CRC(66132341) SHA1(8c6723dfc4f856ef27998411a98c40783d13ac41) ) /* red (bottom half unused) */
ROM_LOAD( "a74_07.ic22", 0x0000, 0x0200, CRC(66132341) SHA1(8c6723dfc4f856ef27998411a98c40783d13ac41) ) // red (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "a74_08.ic23", 0x0200, 0x0200, CRC(fb3f0273) SHA1(591577c94865e2e6465e0016350450a19000e52d) ) /* green (bottom half unused) */
ROM_LOAD( "a74_08.ic23", 0x0200, 0x0200, CRC(fb3f0273) SHA1(591577c94865e2e6465e0016350450a19000e52d) ) // green (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_LOAD( "a74_09.ic24", 0x0400, 0x0200, CRC(bed6709d) SHA1(ba5435728d6b7847bc86878f6122ce1f86982f0a) ) /* blue (bottom half unused) */
ROM_LOAD( "a74_09.ic24", 0x0400, 0x0200, CRC(bed6709d) SHA1(ba5435728d6b7847bc86878f6122ce1f86982f0a) ) // blue (bottom half unused)
ROM_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 )
ROM_LOAD( "a74_06.ic9", 0x0000, 0x0400, CRC(cad554e7) SHA1(7890d948bfef198309df810f8401d224224a73a1) ) /* priority */
ROM_LOAD( "a74_06.ic9", 0x0000, 0x0400, CRC(cad554e7) SHA1(7890d948bfef198309df810f8401d224224a73a1) )
ROM_END
GAME( 1986, lsasquad, 0, lsasquad, lsasquad, lsasquad_state, empty_init, ROT270, "Taito", "Land Sea Air Squad / Riku Kai Kuu Saizensen", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, storming, lsasquad, storming, storming, lsasquad_state, empty_init, ROT270, "bootleg", "Storming Party / Riku Kai Kuu Saizensen", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, daikaiju, 0, daikaiju, daikaiju, lsasquad_state, empty_init, ROT270, "Taito", "Daikaiju no Gyakushu", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, lsasquad, 0, lsasquad, lsasquad, lsasquad_state, empty_init, ROT270, "Taito", "Land Sea Air Squad / Riku Kai Kuu Saizensen", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, storming, lsasquad, storming, storming, lsasquad_state, empty_init, ROT270, "bootleg", "Storming Party / Riku Kai Kuu Saizensen (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, storminga, lsasquad, storming, storming, lsasquad_state, empty_init, ROT270, "bootleg", "Storming Party / Riku Kai Kuu Saizensen (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, daikaiju, 0, daikaiju, daikaiju, lsasquad_state, empty_init, ROT270, "Taito", "Daikaiju no Gyakushu", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -75,7 +75,7 @@
'---------------------------------------'
Pressing BOOKKEEPING key again, you can find 2 screens showing
all statistics and the whole historial by winning hand.
all statistics and the whole history by winning hand.
Press START (key 1) to exit the mode.
@ -113,7 +113,7 @@
TODO:
- Proper M5M82C255 device emulation.
- Colors: Find the palette in Sonik Fighter.
- Colors: Find the palette in the Z Games' sets.
***************************************************************************************************/
@ -132,7 +132,8 @@
#include <algorithm>
#define MASTER_CLOCK XTAL(12'000'000) /* confirmed */
namespace {
#define HOPPER_PULSE 50 // guessed
@ -150,7 +151,8 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_hopper(*this, "hopper"),
m_lamps(*this, "lamp%u", 1U)
m_lamps(*this, "lamp%u", 1U),
m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
void neraidou(machine_config &config);
@ -158,9 +160,11 @@ public:
void bdream97(machine_config &config);
void skylncr(machine_config &config);
void mbutrfly(machine_config &config);
void olymp(machine_config &config);
void init_mbutrfly() { save_item(NAME(m_mbutrfly_prot)); }
void init_miaction();
void init_olymp();
void init_sonikfig();
READ_LINE_MEMBER(mbutrfly_prot_r);
@ -176,7 +180,8 @@ private:
template<uint8_t Which> void reeltileshigh_w(offs_t offset, uint8_t data);
template<uint8_t Which> void reelscroll_w(offs_t offset, uint8_t data);
void coin_w(uint8_t data);
uint8_t ret_ff();
uint8_t ret_ff() { return 0xff; }
[[maybe_unused]] uint8_t ret_00() { return 0x00; }
void nmi_enable_w(uint8_t data);
void mbutrfly_prot_w(uint8_t data);
uint8_t bdream97_opcode_r(offs_t offset);
@ -186,6 +191,7 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_interrupt);
void bdream97_opcode_map(address_map &map);
void olymp_opcode_map(address_map &map);
void io_map_mbutrfly(address_map &map);
void io_map_skylncr(address_map &map);
void mem_map(address_map &map);
@ -206,6 +212,7 @@ private:
required_device<palette_device> m_palette;
required_device<ticket_dispenser_device> m_hopper;
output_finder<7> m_lamps;
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
};
@ -321,18 +328,6 @@ void skylncr_state::coin_w(uint8_t data)
m_hopper->motor_w(data & 0x20);
}
uint8_t skylncr_state::ret_ff()
{
return 0xff;
}
#ifdef UNUSED_FUNCTION
uint8_t skylncr_state::ret_00()
{
return 0x00;
}
#endif
void skylncr_state::nmi_enable_w(uint8_t data)
{
m_nmi_enable = data & 0x10;
@ -431,6 +426,10 @@ void skylncr_state::bdream97_opcode_map(address_map &map)
map(0x0000, 0xffff).r(FUNC(skylncr_state::bdream97_opcode_r));
}
void skylncr_state::olymp_opcode_map(address_map &map)
{
map(0x0000, 0xffff).rom().share(m_decrypted_opcodes);
}
void skylncr_state::ramdac_map(address_map &map)
{
@ -1657,7 +1656,7 @@ INTERRUPT_GEN_MEMBER(skylncr_state::vblank_interrupt)
void skylncr_state::skylncr(machine_config &config)
{
// basic machine hardware
Z80(config, m_maincpu, MASTER_CLOCK/4);
Z80(config, m_maincpu, 12_MHz_XTAL/4);
m_maincpu->set_addrmap(AS_PROGRAM, &skylncr_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_skylncr);
m_maincpu->set_vblank_int("screen", FUNC(skylncr_state::vblank_interrupt));
@ -1698,7 +1697,7 @@ void skylncr_state::skylncr(machine_config &config)
// sound hardware
SPEAKER(config, "mono").front_center();
ay8910_device &aysnd(AY8910(config, "aysnd", MASTER_CLOCK/8));
ay8910_device &aysnd(AY8910(config, "aysnd", 12_MHz_XTAL/8));
aysnd.port_a_read_callback().set_ioport("DSW3");
aysnd.port_b_read_callback().set_ioport("DSW4");
aysnd.add_route(ALL_OUTPUTS, "mono", 1.0);
@ -1740,6 +1739,15 @@ void skylncr_state::bdream97(machine_config &config)
}
void skylncr_state::olymp(machine_config &config)
{
skylncr(config);
// basic machine hardware
m_maincpu->set_addrmap(AS_OPCODES, &skylncr_state::olymp_opcode_map);
}
/**********************************
* ROM Load *
**********************************/
@ -2133,6 +2141,23 @@ ROM_START( superb2k )
ROM_LOAD16_BYTE( "u58", 0x40001, 0x10000, CRC(0a7023aa) SHA1(2efdb4ad2acd90fff39144e08b012e39b571a682) )
ROM_END
ROM_START( olymp )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "v1.bin", 0x00000, 0x10000, CRC(3b49a550) SHA1(b3add0affba091eb6e1ad9a680de41226885fcec) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(26a83503) SHA1(84ed7b0c2552f2c7b4ef9b5b4f0303b9183a3a26) )
ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(fe5bde82) SHA1(0925d230b4773eeb8caf5e12a4c30ac8607ae358) )
ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(a33209f7) SHA1(f43cab5c78bb6a63c9633ba85a84c8ba1e2b1d2b) )
ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(2f665877) SHA1(8eb779a87319e04f28ccc8165fdef7ac643b3602) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(17f77640) SHA1(570407e6fe282ad3a96ad43c8ff36a06ddb43579) )
ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(c626aa6c) SHA1(145e35fe687a8b028d7fbdc08ce608ebdbe3fb46) )
ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(312d1dda) SHA1(88b6214fff700698093591cdce052f36b2a4014f) )
ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(f939f3f0) SHA1(0a089f78ca66d1e660cb854bbf5b0eb38e317a19) )
ROM_END
/**********************************
* Driver Init *
**********************************/
@ -2206,6 +2231,25 @@ void skylncr_state::init_miaction()
}
}
void skylncr_state::init_olymp() // very weird, needs to be checked / finished, putting RAM in the 0xac00-0xac3f range gets in game
{
uint8_t *const ROM = memregion("maincpu")->base();
for (int x = 0x0000; x < 0x0007; x++) // this range doesn´t seem encrypted
m_decrypted_opcodes[x] = ROM[x];
for (int x = 0x0007; x < 0x6500; x++) // in this range both data and opcodes appear to be xor'ed 0x40
{
ROM[x] ^= 0x40;
m_decrypted_opcodes[x] = ROM[x];
}
for (int x = 0x6500; x < 0x10000; x++) // in this range data seems untouched and opcodes appear to be xor'ed 0x18
m_decrypted_opcodes[x] = ROM[x] ^ 0x18;
}
} // Anonymous namespace
/****************************************************
* Game Drivers *
@ -2223,6 +2267,7 @@ GAME( 199?, miaction, 0, skylncr, skylncr, skylncr_state, init_miacti
GAME( 199?, tigerslt, 0, skylncr, skylncr, skylncr_state, init_miaction, ROT0, "bootleg", "Tiger (slot)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 199?, sstar97, 0, sstar97, sstar97, skylncr_state, empty_init, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V153B)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, bdream97, 0, bdream97, skylncr, skylncr_state, empty_init, ROT0, "bootleg (KKK)", "Hudie Meng 97", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 2000?,olymp, 0, olymp, skylncr, skylncr_state, init_olymp, ROT0, "Z Games", "Olympus (Z Games, version 10)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Still has Bordun Internationl 1992 strings
GAME( 2000, sonikfig, 0, skylncr, sonikfig, skylncr_state, init_sonikfig, ROT0, "Z Games", "Sonik Fighter (version 02, encrypted)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 199?, rolla, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "unknown 'Rolla' slot machine", MACHINE_IS_SKELETON ) // internal CPU ROM not dumped
GAME( 2000?,score5, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Score 5", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling

View File

@ -15,6 +15,7 @@ public:
m_scrollram(*this, "scrollram"),
m_spriteram(*this, "spriteram"),
m_priority_prom(*this, "prio_prom"),
m_mainbank(*this, "mainbank"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_soundlatch(*this, "soundlatch"),
@ -22,7 +23,8 @@ public:
m_soundnmi(*this, "soundnmi"),
m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { }
m_palette(*this, "palette"),
m_bmcu_port(*this, "MCU") { }
void lsasquad(machine_config &config);
void daikaiju(machine_config &config);
@ -32,13 +34,14 @@ protected:
virtual void machine_start() override;
private:
/* memory pointers */
// memory pointers
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_scrollram;
required_shared_ptr<uint8_t> m_spriteram;
required_region_ptr<uint8_t> m_priority_prom;
required_memory_bank m_mainbank;
/* devices */
// devices
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<generic_latch_8_device> m_soundlatch;
@ -48,9 +51,11 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
void lsasquad_bankswitch_w(uint8_t data);
void lsasquad_sh_nmi_disable_w(uint8_t data);
void lsasquad_sh_nmi_enable_w(uint8_t data);
optional_ioport m_bmcu_port;
void bankswitch_w(uint8_t data);
void sh_nmi_disable_w(uint8_t data);
void sh_nmi_enable_w(uint8_t data);
uint8_t lsasquad_sound_status_r();
uint8_t daikaiju_sound_status_r();
@ -60,10 +65,10 @@ private:
uint32_t screen_update_lsasquad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_daikaiju(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(nmi_callback);
void draw_layer( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *scrollram );
int draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle &cliprect, int offs, int * previd, int type );
void drawbg( bitmap_ind16 &bitmap, const rectangle &cliprect, int type );
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t priority );
void draw_layer(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *scrollram);
int draw_layer_daikaiju(bitmap_ind16 &bitmap, const rectangle &cliprect, int offs, int *previd, int type);
void drawbg(bitmap_ind16 &bitmap, const rectangle &cliprect, int type);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t priority);
void daikaiju_map(address_map &map);
void daikaiju_sound_map(address_map &map);
void lsasquad_map(address_map &map);

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
#include "emu.h"
#include "cpu/z80/z80.h"
#include "includes/lsasquad.h"
@ -10,38 +11,38 @@
***************************************************************************/
void lsasquad_state::lsasquad_sh_nmi_disable_w(uint8_t data)
void lsasquad_state::sh_nmi_disable_w(uint8_t data)
{
m_soundnmi->in_w<1>(0);
}
void lsasquad_state::lsasquad_sh_nmi_enable_w(uint8_t data)
void lsasquad_state::sh_nmi_enable_w(uint8_t data)
{
m_soundnmi->in_w<1>(1);
}
uint8_t lsasquad_state::lsasquad_sound_status_r()
{
/* bit 0: message pending for sound cpu */
/* bit 1: message pending for main cpu */
// bit 0: message pending for sound cpu
// bit 1: message pending for main cpu
return (m_soundlatch->pending_r() ? 1 : 0) | (m_soundlatch2->pending_r() ? 2 : 0);
}
uint8_t lsasquad_state::daikaiju_sound_status_r()
{
/* bit 0: message pending for sound cpu */
/* bit 1: message pending for main cpu */
// bit 0: message pending for sound cpu
// bit 1: message pending for main cpu
return (m_soundlatch->pending_r() ? 2 : 1);
}
uint8_t lsasquad_state::lsasquad_mcu_status_r()
{
int res = ioport("MCU")->read();
int res = m_bmcu_port->read();
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
/* bit 1 = when 0, mcu has sent data to the main cpu */
//logerror("%04x: mcu_status_r\n",m_maincpu->pc());
// bit 0 = when 1, mcu is ready to receive data from main cpu
// bit 1 = when 0, mcu has sent data to the main cpu
//logerror("%04x: mcu_status_r\n", m_maincpu->pc());
if (m_bmcu)
{
if (CLEAR_LINE == m_bmcu->host_semaphore_r())
@ -55,11 +56,11 @@ uint8_t lsasquad_state::lsasquad_mcu_status_r()
uint8_t lsasquad_state::daikaiju_mcu_status_r()
{
int res = ioport("MCU")->read();
int res = m_bmcu_port->read();
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
/* bit 1 = when 0, mcu has sent data to the main cpu */
//logerror("%04x: mcu_status_r\n",m_maincpu->pc());
// bit 0 = when 1, mcu is ready to receive data from main cpu
// bit 1 = when 0, mcu has sent data to the main cpu
//logerror("%04x: mcu_status_r\n", m_maincpu->pc());
if (m_bmcu)
{
if (CLEAR_LINE == m_bmcu->host_semaphore_r())

View File

@ -19752,6 +19752,7 @@ lordgun // (c) 1994
daikaiju // A74 (c) 1986 Taito
lsasquad // A64 (c) 1986 Taito Corporation / Taito America (dip switch)
storming // A64 (c) 1986 Taito Corporation
storminga // bootleg
@source:ltcasino.cpp
ltcasin2 // (c) 1984 Digital Controls Inc
@ -37968,6 +37969,7 @@ madzoo // (c) 1995 Bordun International
mbutrfly // (c) 1999 (Bordun International?)
miaction // (c) Vegas
neraidou // Bootleg?
olymp // Z Games
rolla //
score5 // Z Games
skylncr // (c) 1995 Bordun International

View File

@ -1,63 +1,57 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
#include "emu.h"
#include "includes/lsasquad.h"
void lsasquad_state::draw_layer( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *scrollram )
void lsasquad_state::draw_layer(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *scrollram)
{
int offs, scrollx, scrolly;
int scrollx = scrollram[3];
int scrolly = -scrollram[0];
scrollx = scrollram[3];
scrolly = -scrollram[0];
for (offs = 0; offs < 0x080; offs += 4)
for (int offs = 0; offs < 0x080; offs += 4)
{
int base, y, sx, sy, code, color;
base = 64 * scrollram[offs + 1];
sx = 8 * (offs / 4) + scrollx;
int base = 64 * scrollram[offs + 1];
int sx = 8 * (offs / 4) + scrollx;
if (flip_screen())
sx = 248 - sx;
sx &= 0xff;
for (y = 0; y < 32; y++)
for (int y = 0; y < 32; y++)
{
int attr;
sy = 8 * y + scrolly;
int sy = 8 * y + scrolly;
if (flip_screen())
sy = 248 - sy;
sy &= 0xff;
attr = m_videoram[(base + 2 * y + 1) & 0x1fff];
code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8);
color = attr >> 4;
int attr = m_videoram[(base + 2 * y + 1) & 0x1fff];
int code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8);
int color = attr >> 4;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
color,
flip_screen(),flip_screen(),
sx,sy,15);
if (sx > 248) /* wraparound */
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
flip_screen(), flip_screen(),
sx, sy, 15);
if (sx > 248) // wraparound
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
color,
flip_screen(),flip_screen(),
sx-256,sy,15);
flip_screen(), flip_screen(),
sx - 256, sy, 15);
}
}
}
int lsasquad_state::draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle &cliprect, int offs, int * previd, int type )
int lsasquad_state::draw_layer_daikaiju(bitmap_ind16 &bitmap, const rectangle &cliprect, int offs, int *previd, int type)
{
int id, scrollx, scrolly, initoffs, globalscrollx;
int stepx = 0;
initoffs = offs;
globalscrollx = 0;
int initoffs = offs;
int globalscrollx = 0;
id = m_scrollram[offs + 2];
int id = m_scrollram[offs + 2];
for( ; offs < 0x400; offs += 4)
{
@ -74,17 +68,17 @@ int lsasquad_state::draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle &
id = m_scrollram[offs + 2];
}
//skip empty (??) column, potential probs with 1st column in scrollram (scroll 0, tile 0, id 0)
//skip empty (??) column, potential problems with 1st column in scrollram (scroll 0, tile 0, id 0)
if ((m_scrollram[offs + 0] | m_scrollram[offs + 1] | m_scrollram[offs + 2] | m_scrollram[offs + 3]) == 0)
continue;
//local scroll x/y
scrolly = -m_scrollram[offs + 0];
scrollx = m_scrollram[offs + 3];
int scrolly = -m_scrollram[offs + 0];
int scrollx = m_scrollram[offs + 3];
//check for global x scroll used in bg layer in game (starts at offset 0 in scrollram
// and game name/logo on title screen (starts in the middle of scrollram, but with different
// (NOT unique )id than prev coulmn(s)
// (NOT unique )id than previous column(s)
if (*previd != 1)
{
@ -108,37 +102,35 @@ int lsasquad_state::draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle &
for (y = 0; y < 32; y++)
{
int attr;
sy = 8 * y + scrolly;
if (flip_screen())
sy = 248 - sy;
sy &= 0xff;
attr = m_videoram[(base + 2 * y + 1) & 0x1fff];
int attr = m_videoram[(base + 2 * y + 1) & 0x1fff];
code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8);
color = attr >> 4;
if ((type == 0 && color != 0x0d) || (type != 0 && color == 0x0d))
{
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
color,
flip_screen(),flip_screen(),
sx,sy,15);
if (sx > 248) /* wraparound */
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
flip_screen(), flip_screen(),
sx, sy, 15);
if (sx > 248) // wraparound
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
color,
flip_screen(),flip_screen(),
sx-256,sy,15);
flip_screen(), flip_screen(),
sx - 256, sy, 15);
}
}
}
return offs;
}
void lsasquad_state::drawbg( bitmap_ind16 &bitmap, const rectangle &cliprect, int type )
void lsasquad_state::drawbg(bitmap_ind16 &bitmap, const rectangle &cliprect, int type)
{
int i = 0;
int id = -1;
@ -157,22 +149,17 @@ void lsasquad_state::drawbg( bitmap_ind16 &bitmap, const rectangle &cliprect, in
}
}
void lsasquad_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t priority )
void lsasquad_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t priority)
{
uint8_t *spriteram = m_spriteram;
int offs;
for (offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
for (int offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
{
int sx, sy, attr, code, color, flipx, flipy;
attr = spriteram[offs + 1];
code = spriteram[offs + 2] + ((attr & 0x30) << 4);
sx = spriteram[offs + 3];
sy = 240 - spriteram[offs];
color = attr & 0x0f;
flipx = attr & 0x40;
flipy = attr & 0x80;
int attr = m_spriteram[offs + 1];
int code = m_spriteram[offs + 2] + ((attr & 0x30) << 4);
int sx = m_spriteram[offs + 3];
int sy = 240 - m_spriteram[offs];
int color = attr & 0x0f;
int flipx = attr & 0x40;
int flipy = attr & 0x80;
if (flip_screen())
{
@ -182,17 +169,17 @@ void lsasquad_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
flipy = !flipy;
}
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
code,
color,
flipx,flipy,
sx,sy,15);
/* wraparound */
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
flipx, flipy,
sx, sy, 15);
// wraparound
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
code,
color,
flipx,flipy,
sx-256,sy,15);
flipx, flipy,
sx - 256, sy, 15);
}
}