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, 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, 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, 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(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) 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 // license:BSD-3-Clause
// copyright-holders:Nicola Salmoria // copyright-holders:Nicola Salmoria
/*************************************************************************** /***************************************************************************
Land Sea Air Squad / Storming Party (c) 1986 Taito Land Sea Air Squad / Storming Party (c) 1986 Taito
@ -154,39 +155,36 @@ Notes:
#include "speaker.h" #include "speaker.h"
#define MASTER_CLOCK XTAL(24'000'000) void lsasquad_state::bankswitch_w(uint8_t data)
void lsasquad_state::lsasquad_bankswitch_w(uint8_t data)
{ {
/* bits 0-2 select ROM bank */ // bits 0-2 select ROM bank
membank("bank1")->set_entry(data & 0x07); 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); flip_screen_set(data & 0x10);
/* other bits unknown */ // other bits unknown
} }
void lsasquad_state::lsasquad_map(address_map &map) void lsasquad_state::lsasquad_map(address_map &map)
{ {
map(0x0000, 0x7fff).rom(); map(0x0000, 0x7fff).rom();
map(0x8000, 0x9fff).bankr("bank1"); map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xbfff).ram(); /* SRAM */ map(0xa000, 0xbfff).ram(); // SRAM
map(0xc000, 0xdfff).ram().share("videoram"); /* SCREEN RAM */ map(0xc000, 0xdfff).ram().share(m_videoram); // SCREEN RAM
map(0xe000, 0xe3ff).ram().share("scrollram"); /* SCROLL RAM */ map(0xe000, 0xe3ff).ram().share(m_scrollram); // SCROLL RAM
map(0xe400, 0xe5ff).ram().share("spriteram"); /* OBJECT RAM */ map(0xe400, 0xe5ff).ram().share(m_spriteram); // OBJECT RAM
map(0xe800, 0xe800).portr("DSWA"); map(0xe800, 0xe800).portr("DSWA");
map(0xe801, 0xe801).portr("DSWB"); map(0xe801, 0xe801).portr("DSWB");
map(0xe802, 0xe802).portr("DSWC"); 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(0xe804, 0xe804).portr("P1");
map(0xe805, 0xe805).portr("P2"); map(0xe805, 0xe805).portr("P2");
map(0xe806, 0xe806).portr("START"); map(0xe806, 0xe806).portr("START");
map(0xe807, 0xe807).portr("SERVICE"); 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).r(m_soundlatch2, FUNC(generic_latch_8_device::read));
map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xec01, 0xec01).r(FUNC(lsasquad_state::lsasquad_sound_status_r)); 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(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).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xd000, 0xd000).w(m_soundlatch2, FUNC(generic_latch_8_device::write)); 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(0xd400, 0xd400).w(FUNC(lsasquad_state::sh_nmi_disable_w));
map(0xd800, 0xd800).w(FUNC(lsasquad_state::lsasquad_sh_nmi_enable_w)); map(0xd800, 0xd800).w(FUNC(lsasquad_state::sh_nmi_enable_w));
map(0xd800, 0xd800).r(FUNC(lsasquad_state::lsasquad_sound_status_r)); 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) void lsasquad_state::storming_map(address_map &map)
{ {
map(0x0000, 0x7fff).rom(); map(0x0000, 0x7fff).rom();
map(0x8000, 0x9fff).bankr("bank1"); map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xbfff).ram(); /* SRAM */ map(0xa000, 0xbfff).ram(); // SRAM
map(0xc000, 0xdfff).ram().share("videoram"); /* SCREEN RAM */ map(0xc000, 0xdfff).ram().share(m_videoram); // SCREEN RAM
map(0xe000, 0xe3ff).ram().share("scrollram"); /* SCROLL RAM */ map(0xe000, 0xe3ff).ram().share(m_scrollram); // SCROLL RAM
map(0xe400, 0xe5ff).ram().share("spriteram"); /* OBJECT RAM */ map(0xe400, 0xe5ff).ram().share(m_spriteram); // OBJECT RAM
map(0xe800, 0xe800).portr("DSWA"); map(0xe800, 0xe800).portr("DSWA");
map(0xe801, 0xe801).portr("DSWB"); map(0xe801, 0xe801).portr("DSWB");
map(0xe802, 0xe802).portr("DSWC"); map(0xe802, 0xe802).portr("DSWC");
@ -225,7 +223,7 @@ void lsasquad_state::storming_map(address_map &map)
map(0xe805, 0xe805).portr("P2"); map(0xe805, 0xe805).portr("P2");
map(0xe806, 0xe806).portr("START"); map(0xe806, 0xe806).portr("START");
map(0xe807, 0xe807).portr("SERVICE"); 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).r(m_soundlatch2, FUNC(generic_latch_8_device::read));
map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0xec00, 0xec00).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xec01, 0xec01).r(FUNC(lsasquad_state::lsasquad_sound_status_r)); 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_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("MCU") PORT_START("MCU")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* 68705 ready to receive cmd */ 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( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 0 = 68705 has sent result
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@ -372,24 +370,24 @@ static INPUT_PORTS_START( storming )
INPUT_PORTS_END INPUT_PORTS_END
/* DAIKAIJU */ // DAIKAIJU
void lsasquad_state::daikaiju_map(address_map &map) void lsasquad_state::daikaiju_map(address_map &map)
{ {
map(0x0000, 0x7fff).rom(); map(0x0000, 0x7fff).rom();
map(0x8000, 0x9fff).bankr("bank1"); map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xbfff).ram(); /* SRAM */ map(0xa000, 0xbfff).ram(); // SRAM
map(0xc000, 0xdfff).ram().share("videoram"); /* SCREEN RAM */ map(0xc000, 0xdfff).ram().share(m_videoram); // SCREEN RAM
map(0xe000, 0xe3ff).ram().share("scrollram"); /* SCROLL RAM */ map(0xe000, 0xe3ff).ram().share(m_scrollram); // SCROLL RAM
map(0xe400, 0xe7ff).ram().share("spriteram"); /* OBJECT RAM */ map(0xe400, 0xe7ff).ram().share(m_spriteram); // OBJECT RAM
map(0xe800, 0xe800).portr("DSWA"); map(0xe800, 0xe800).portr("DSWA");
map(0xe801, 0xe801).portr("DSWB"); 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(0xe804, 0xe804).portr("P1");
map(0xe805, 0xe805).portr("P2"); map(0xe805, 0xe805).portr("P2");
map(0xe806, 0xe806).portr("START"); map(0xe806, 0xe806).portr("START");
map(0xe807, 0xe807).portr("SERVICE"); 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(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)); 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(0xa000, 0xa001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0xc000, 0xc001).w("aysnd", FUNC(ay8910_device::address_data_w)); 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).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xd400, 0xd400).w(FUNC(lsasquad_state::lsasquad_sh_nmi_disable_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::lsasquad_sh_nmi_enable_w)); map(0xd800, 0xd800).rw(FUNC(lsasquad_state::daikaiju_sound_status_r), FUNC(lsasquad_state::sh_nmi_enable_w));
map(0xdc00, 0xdc00).nopw(); 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 ) static INPUT_PORTS_START( daikaiju )
@ -458,8 +456,8 @@ static INPUT_PORTS_START( daikaiju )
PORT_START("MCU") PORT_START("MCU")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* 68705 ready to receive cmd */ 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( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) // 0 = 68705 has sent result
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@ -547,26 +545,26 @@ void lsasquad_state::machine_start()
{ {
uint8_t *ROM = memregion("maincpu")->base(); 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) void lsasquad_state::lsasquad(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
Z80(config, m_maincpu, MASTER_CLOCK / 4); Z80(config, m_maincpu, 24_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_map); m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_map);
m_maincpu->set_vblank_int("screen", FUNC(lsasquad_state::irq0_line_hold)); 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); m_audiocpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_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 */ config.set_maximum_quantum(attotime::from_hz(30000)); /* 500 CPU slices per frame - a high value to ensure proper
/* synchronization of the CPUs */ synchronization of the CPUs
/* main<->sound synchronization depends on this */ main<->sound synchronization depends on this */
GENERIC_LATCH_8(config, m_soundlatch); GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set("soundnmi", FUNC(input_merger_device::in_w<0>)); 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); GENERIC_LATCH_8(config, m_soundlatch2);
/* video hardware */ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); 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); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lsasquad);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512);
/* sound hardware */ // sound hardware
SPEAKER(config, "mono").front_center(); 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.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk)); ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk));
ymsnd.port_b_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"); 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) void lsasquad_state::daikaiju(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
Z80(config, m_maincpu, MASTER_CLOCK / 4); Z80(config, m_maincpu, 24_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::daikaiju_map); m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::daikaiju_map);
m_maincpu->set_vblank_int("screen", FUNC(lsasquad_state::irq0_line_hold)); 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); 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 */ config.set_maximum_quantum(attotime::from_hz(30000)); /* 500 CPU slices per frame - a high value to ensure proper
/* synchronization of the CPUs */ synchronization of the CPUs
/* main<->sound synchronization depends on this */ main<->sound synchronization depends on this */
GENERIC_LATCH_8(config, m_soundlatch); GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set("soundnmi", FUNC(input_merger_device::in_w<0>)); 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); 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_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); 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); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lsasquad);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512);
/* sound hardware */ // sound hardware
SPEAKER(config, "mono").front_center(); 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.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk)); ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk));
ymsnd.port_b_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_START( lsasquad )
ROM_REGION( 0x20000, "maincpu", 0 ) ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "a64-21.4", 0x00000, 0x8000, CRC(5ff6b017) SHA1(96cc74edba1208bb8e82f93d2d3a88ea24922dc0) ) ROM_LOAD( "a64-21.4", 0x00000, 0x8000, CRC(5ff6b017) SHA1(96cc74edba1208bb8e82f93d2d3a88ea24922dc0) )
/* ROMs banked at 8000-9fff */ ROM_LOAD( "a64-20.3", 0x08000, 0x8000, CRC(7f8b4979) SHA1(975b1a678e1f7d7b5789565063177593639645ce) )
ROM_LOAD( "a64-20.3", 0x10000, 0x8000, CRC(7f8b4979) SHA1(975b1a678e1f7d7b5789565063177593639645ce) ) ROM_LOAD( "a64-19.2", 0x10000, 0x8000, CRC(ba31d34a) SHA1(e2c515ae8146a37534b19403c03fc5a8719f115f) )
ROM_LOAD( "a64-19.2", 0x18000, 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_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_LOAD( "a64-05.35", 0x0000, 0x0800, CRC(572677b9) SHA1(e098d5d842bcc81221ba56652a7019505d8be082) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT ) 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_LOAD( "a64-17.26", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
ROM_REGION( 0x0600, "proms", 0 ) 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_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_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_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 ) 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_REGION( 0x0200, "plds", 0 )
ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) ) ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
ROM_END ROM_END
ROM_START( storming ) ROM_START( storming )
ROM_REGION( 0x20000, "maincpu", 0 ) ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "stpartyj.001", 0x00000, 0x8000, CRC(07e6bc61) SHA1(6989a1401868dd93c9466cfd1636ac48a734a5d4) ) ROM_LOAD( "stpartyj.001", 0x00000, 0x8000, CRC(07e6bc61) SHA1(6989a1401868dd93c9466cfd1636ac48a734a5d4) )
/* ROMs banked at 8000-9fff */ ROM_LOAD( "stpartyj.002", 0x08000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) )
ROM_LOAD( "stpartyj.002", 0x10000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) ) ROM_LOAD( "stpartyj.003", 0x10000, 0x8000, CRC(159f23a6) SHA1(2cb4ed78e54dc2acbbfc2d4cfb2d29ff604aa9ae) )
ROM_LOAD( "stpartyj.003", 0x18000, 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_LOAD( "a64-04.44", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT ) 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_LOAD( "a64-17.26", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
ROM_REGION( 0x0600, "proms", 0 ) 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_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_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_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 ) 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_REGION( 0x0200, "plds", 0 )
ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) ) ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
ROM_END 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_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "a74_01-1.ic4", 0x00000, 0x8000, CRC(89c13d7f) SHA1(2eaec80d7aa360b700387df00b37a692acc50d74) ) ROM_LOAD( "1.ic4.1e", 0x00000, 0x8000, CRC(07e6bc61) SHA1(6989a1401868dd93c9466cfd1636ac48a734a5d4) ) // only different ROM, various routines changed / nop-ed
/* ROMs banked at 8000-9fff */ ROM_LOAD( "2.ic3.1c", 0x08000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) )
ROM_LOAD( "a74_02.ic3", 0x10000, 0x8000, CRC(8ddf6131) SHA1(b5b23550e7ee52554bc1f045ed6f42e254a05bf4) ) ROM_LOAD( "3.ic2.1b", 0x10000, 0x8000, CRC(159f23a6) SHA1(2cb4ed78e54dc2acbbfc2d4cfb2d29ff604aa9ae) )
ROM_LOAD( "a74_03.ic2", 0x18000, 0x8000, CRC(3911ffed) SHA1(ba6dbd74d37ef26621a02baf3479e2764d10d2ba) )
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_LOAD( "a74_04.ic44", 0x0000, 0x8000, CRC(98a6a703) SHA1(0c169a7a5f8b26606f67ee7f14bd487951536ac5) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) 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_LOAD( "a74_17.ic26", 0x18000, 0x8000, CRC(d1077878) SHA1(e69893db6b63d5a5192b521d61a86f60b7029b7e) )
ROM_REGION( 0x0600, "proms", 0 ) 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_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_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_IGNORE( 0x200 )
ROM_REGION( 0x0400, "prio_prom", 0 ) 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 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, 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, 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 ) 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 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. Press START (key 1) to exit the mode.
@ -113,7 +113,7 @@
TODO: TODO:
- Proper M5M82C255 device emulation. - 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> #include <algorithm>
#define MASTER_CLOCK XTAL(12'000'000) /* confirmed */ namespace {
#define HOPPER_PULSE 50 // guessed #define HOPPER_PULSE 50 // guessed
@ -150,7 +151,8 @@ public:
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_hopper(*this, "hopper"), 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); void neraidou(machine_config &config);
@ -158,9 +160,11 @@ public:
void bdream97(machine_config &config); void bdream97(machine_config &config);
void skylncr(machine_config &config); void skylncr(machine_config &config);
void mbutrfly(machine_config &config); void mbutrfly(machine_config &config);
void olymp(machine_config &config);
void init_mbutrfly() { save_item(NAME(m_mbutrfly_prot)); } void init_mbutrfly() { save_item(NAME(m_mbutrfly_prot)); }
void init_miaction(); void init_miaction();
void init_olymp();
void init_sonikfig(); void init_sonikfig();
READ_LINE_MEMBER(mbutrfly_prot_r); 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 reeltileshigh_w(offs_t offset, uint8_t data);
template<uint8_t Which> void reelscroll_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); 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 nmi_enable_w(uint8_t data);
void mbutrfly_prot_w(uint8_t data); void mbutrfly_prot_w(uint8_t data);
uint8_t bdream97_opcode_r(offs_t offset); 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); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_interrupt); INTERRUPT_GEN_MEMBER(vblank_interrupt);
void bdream97_opcode_map(address_map &map); void bdream97_opcode_map(address_map &map);
void olymp_opcode_map(address_map &map);
void io_map_mbutrfly(address_map &map); void io_map_mbutrfly(address_map &map);
void io_map_skylncr(address_map &map); void io_map_skylncr(address_map &map);
void mem_map(address_map &map); void mem_map(address_map &map);
@ -206,6 +212,7 @@ private:
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<ticket_dispenser_device> m_hopper; required_device<ticket_dispenser_device> m_hopper;
output_finder<7> m_lamps; 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); 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) void skylncr_state::nmi_enable_w(uint8_t data)
{ {
m_nmi_enable = data & 0x10; 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)); 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) 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) void skylncr_state::skylncr(machine_config &config)
{ {
// basic machine hardware // 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_PROGRAM, &skylncr_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_skylncr); m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_skylncr);
m_maincpu->set_vblank_int("screen", FUNC(skylncr_state::vblank_interrupt)); m_maincpu->set_vblank_int("screen", FUNC(skylncr_state::vblank_interrupt));
@ -1698,7 +1697,7 @@ void skylncr_state::skylncr(machine_config &config)
// sound hardware // sound hardware
SPEAKER(config, "mono").front_center(); 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_a_read_callback().set_ioport("DSW3");
aysnd.port_b_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW4");
aysnd.add_route(ALL_OUTPUTS, "mono", 1.0); 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 * * ROM Load *
**********************************/ **********************************/
@ -2133,6 +2141,23 @@ ROM_START( superb2k )
ROM_LOAD16_BYTE( "u58", 0x40001, 0x10000, CRC(0a7023aa) SHA1(2efdb4ad2acd90fff39144e08b012e39b571a682) ) ROM_LOAD16_BYTE( "u58", 0x40001, 0x10000, CRC(0a7023aa) SHA1(2efdb4ad2acd90fff39144e08b012e39b571a682) )
ROM_END 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 * * 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 * * 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?, 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( 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( 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( 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( 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 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_scrollram(*this, "scrollram"),
m_spriteram(*this, "spriteram"), m_spriteram(*this, "spriteram"),
m_priority_prom(*this, "prio_prom"), m_priority_prom(*this, "prio_prom"),
m_mainbank(*this, "mainbank"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_soundlatch(*this, "soundlatch"), m_soundlatch(*this, "soundlatch"),
@ -22,7 +23,8 @@ public:
m_soundnmi(*this, "soundnmi"), m_soundnmi(*this, "soundnmi"),
m_bmcu(*this, "bmcu"), m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { } m_palette(*this, "palette"),
m_bmcu_port(*this, "MCU") { }
void lsasquad(machine_config &config); void lsasquad(machine_config &config);
void daikaiju(machine_config &config); void daikaiju(machine_config &config);
@ -32,13 +34,14 @@ protected:
virtual void machine_start() override; virtual void machine_start() override;
private: private:
/* memory pointers */ // memory pointers
required_shared_ptr<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_scrollram; required_shared_ptr<uint8_t> m_scrollram;
required_shared_ptr<uint8_t> m_spriteram; required_shared_ptr<uint8_t> m_spriteram;
required_region_ptr<uint8_t> m_priority_prom; 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_maincpu;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
required_device<generic_latch_8_device> m_soundlatch; required_device<generic_latch_8_device> m_soundlatch;
@ -48,9 +51,11 @@ private:
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
void lsasquad_bankswitch_w(uint8_t data); optional_ioport m_bmcu_port;
void lsasquad_sh_nmi_disable_w(uint8_t data);
void lsasquad_sh_nmi_enable_w(uint8_t data); 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 lsasquad_sound_status_r();
uint8_t daikaiju_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_lsasquad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_daikaiju(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); TIMER_CALLBACK_MEMBER(nmi_callback);
void draw_layer( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *scrollram ); 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 ); 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 drawbg(bitmap_ind16 &bitmap, const rectangle &cliprect, int type);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t priority ); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t priority);
void daikaiju_map(address_map &map); void daikaiju_map(address_map &map);
void daikaiju_sound_map(address_map &map); void daikaiju_sound_map(address_map &map);
void lsasquad_map(address_map &map); void lsasquad_map(address_map &map);

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause // license:BSD-3-Clause
// copyright-holders:Nicola Salmoria // copyright-holders:Nicola Salmoria
#include "emu.h" #include "emu.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "includes/lsasquad.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); 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); m_soundnmi->in_w<1>(1);
} }
uint8_t lsasquad_state::lsasquad_sound_status_r() uint8_t lsasquad_state::lsasquad_sound_status_r()
{ {
/* bit 0: message pending for sound cpu */ // bit 0: message pending for sound cpu
/* bit 1: message pending for main cpu */ // bit 1: message pending for main cpu
return (m_soundlatch->pending_r() ? 1 : 0) | (m_soundlatch2->pending_r() ? 2 : 0); return (m_soundlatch->pending_r() ? 1 : 0) | (m_soundlatch2->pending_r() ? 2 : 0);
} }
uint8_t lsasquad_state::daikaiju_sound_status_r() uint8_t lsasquad_state::daikaiju_sound_status_r()
{ {
/* bit 0: message pending for sound cpu */ // bit 0: message pending for sound cpu
/* bit 1: message pending for main cpu */ // bit 1: message pending for main cpu
return (m_soundlatch->pending_r() ? 2 : 1); return (m_soundlatch->pending_r() ? 2 : 1);
} }
uint8_t lsasquad_state::lsasquad_mcu_status_r() 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 0 = when 1, mcu is ready to receive data from main cpu
/* bit 1 = when 0, mcu has sent data to the main cpu */ // bit 1 = when 0, mcu has sent data to the main cpu
//logerror("%04x: mcu_status_r\n",m_maincpu->pc()); //logerror("%04x: mcu_status_r\n", m_maincpu->pc());
if (m_bmcu) if (m_bmcu)
{ {
if (CLEAR_LINE == m_bmcu->host_semaphore_r()) 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() 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 0 = when 1, mcu is ready to receive data from main cpu
/* bit 1 = when 0, mcu has sent data to the main cpu */ // bit 1 = when 0, mcu has sent data to the main cpu
//logerror("%04x: mcu_status_r\n",m_maincpu->pc()); //logerror("%04x: mcu_status_r\n", m_maincpu->pc());
if (m_bmcu) if (m_bmcu)
{ {
if (CLEAR_LINE == m_bmcu->host_semaphore_r()) if (CLEAR_LINE == m_bmcu->host_semaphore_r())

View File

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

View File

@ -1,63 +1,57 @@
// license:BSD-3-Clause // license:BSD-3-Clause
// copyright-holders:Nicola Salmoria // copyright-holders:Nicola Salmoria
#include "emu.h" #include "emu.h"
#include "includes/lsasquad.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]; for (int offs = 0; offs < 0x080; offs += 4)
scrolly = -scrollram[0];
for (offs = 0; offs < 0x080; offs += 4)
{ {
int base, y, sx, sy, code, color; int base = 64 * scrollram[offs + 1];
int sx = 8 * (offs / 4) + scrollx;
base = 64 * scrollram[offs + 1];
sx = 8 * (offs / 4) + scrollx;
if (flip_screen()) if (flip_screen())
sx = 248 - sx; sx = 248 - sx;
sx &= 0xff; sx &= 0xff;
for (y = 0; y < 32; y++) for (int y = 0; y < 32; y++)
{ {
int attr; int sy = 8 * y + scrolly;
sy = 8 * y + scrolly;
if (flip_screen()) if (flip_screen())
sy = 248 - sy; sy = 248 - sy;
sy &= 0xff; 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); int code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8);
color = attr >> 4; int color = attr >> 4;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code, code,
color, color,
flip_screen(),flip_screen(), flip_screen(), flip_screen(),
sx,sy,15); sx, sy, 15);
if (sx > 248) /* wraparound */ if (sx > 248) // wraparound
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code, code,
color, color,
flip_screen(),flip_screen(), flip_screen(), flip_screen(),
sx-256,sy,15); 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; int stepx = 0;
initoffs = offs; int initoffs = offs;
globalscrollx = 0; int globalscrollx = 0;
id = m_scrollram[offs + 2]; int id = m_scrollram[offs + 2];
for( ; offs < 0x400; offs += 4) 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]; 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) if ((m_scrollram[offs + 0] | m_scrollram[offs + 1] | m_scrollram[offs + 2] | m_scrollram[offs + 3]) == 0)
continue; continue;
//local scroll x/y //local scroll x/y
scrolly = -m_scrollram[offs + 0]; int scrolly = -m_scrollram[offs + 0];
scrollx = m_scrollram[offs + 3]; int scrollx = m_scrollram[offs + 3];
//check for global x scroll used in bg layer in game (starts at offset 0 in scrollram //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 // 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) if (*previd != 1)
{ {
@ -108,37 +102,35 @@ int lsasquad_state::draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle &
for (y = 0; y < 32; y++) for (y = 0; y < 32; y++)
{ {
int attr;
sy = 8 * y + scrolly; sy = 8 * y + scrolly;
if (flip_screen()) if (flip_screen())
sy = 248 - sy; sy = 248 - sy;
sy &= 0xff; 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); code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8);
color = attr >> 4; color = attr >> 4;
if ((type == 0 && color != 0x0d) || (type != 0 && color == 0x0d)) if ((type == 0 && color != 0x0d) || (type != 0 && color == 0x0d))
{ {
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code, code,
color, color,
flip_screen(),flip_screen(), flip_screen(), flip_screen(),
sx,sy,15); sx, sy, 15);
if (sx > 248) /* wraparound */ if (sx > 248) // wraparound
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code, code,
color, color,
flip_screen(),flip_screen(), flip_screen(), flip_screen(),
sx-256,sy,15); sx - 256, sy, 15);
} }
} }
} }
return offs; 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 i = 0;
int id = -1; 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; for (int offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
int offs;
for (offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
{ {
int sx, sy, attr, code, color, flipx, flipy; int attr = m_spriteram[offs + 1];
int code = m_spriteram[offs + 2] + ((attr & 0x30) << 4);
attr = spriteram[offs + 1]; int sx = m_spriteram[offs + 3];
code = spriteram[offs + 2] + ((attr & 0x30) << 4); int sy = 240 - m_spriteram[offs];
sx = spriteram[offs + 3]; int color = attr & 0x0f;
sy = 240 - spriteram[offs]; int flipx = attr & 0x40;
color = attr & 0x0f; int flipy = attr & 0x80;
flipx = attr & 0x40;
flipy = attr & 0x80;
if (flip_screen()) if (flip_screen())
{ {
@ -182,17 +169,17 @@ void lsasquad_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
flipy = !flipy; flipy = !flipy;
} }
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
code, code,
color, color,
flipx,flipy, flipx, flipy,
sx,sy,15); sx, sy, 15);
/* wraparound */ // wraparound
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
code, code,
color, color,
flipx,flipy, flipx, flipy,
sx-256,sy,15); sx - 256, sy, 15);
} }
} }