From 7ea23aa257b084f93abbf2a8761d300b35ee68be Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 28 Nov 2024 12:42:40 +0100 Subject: quasar: untangle from cvs_base --- src/mame/cvs/quasar.cpp | 90 ++++++++++++++++++++++++++++++------------ src/mame/zaccaria/zaccaria.cpp | 72 ++++++++++++++++----------------- 2 files changed, 101 insertions(+), 61 deletions(-) diff --git a/src/mame/cvs/quasar.cpp b/src/mame/cvs/quasar.cpp index 60cdf2cb77d..ca74b495824 100644 --- a/src/mame/cvs/quasar.cpp +++ b/src/mame/cvs/quasar.cpp @@ -7,6 +7,14 @@ Zaccaria Quasar Driver by Mike Coates and Pierpaolo Prazzoli +Zaccaria S2650 games share various levels of design with the Century Video +System (CVS) games. + +Shooting seems to mix custom boards from Zaccaria and sound boards from CVS, +hinting at a strong link between the two companies. + +Zaccaria are an Italian company, Century were based in Manchester UK. + TODO: - Missing enemy shooting sound effect, needs netlist? - Where is the flipscreen signal? @@ -33,25 +41,39 @@ I8085 Sound Board #include "emu.h" -#include "cvs_base.h" #include "cpu/mcs48/mcs48.h" - +#include "cpu/s2650/s2650.h" +#include "machine/gen_latch.h" +#include "machine/s2636.h" +#include "sound/dac.h" +#include "sound/tms5110.h" + +#include "emupal.h" +#include "screen.h" #include "speaker.h" namespace { -class quasar_state : public cvs_base_state +class quasar_state : public driver_device { public: quasar_state(const machine_config &mconfig, device_type type, const char *tag) - : cvs_base_state(mconfig, type, tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") , m_audiocpu(*this, "audiocpu") , m_soundlatch(*this, "soundlatch") + , m_s2636(*this, "s2636%u", 0U) + , m_gfxdecode(*this, "gfxdecode") + , m_screen(*this, "screen") + , m_palette(*this, "palette") , m_in(*this, "IN%u", 0U) , m_dsw(*this, "DSW%u", 0U) + , m_video_ram(*this, "video_ram", 0x400, ENDIANNESS_BIG) + , m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_BIG) , m_effectram(*this, "effectram", 0x400, ENDIANNESS_BIG) + , m_bullet_ram(*this, "bullet_ram") { } void quasar(machine_config &config) ATTR_COLD; @@ -65,15 +87,27 @@ protected: virtual void video_start() override ATTR_COLD; private: + // devices + required_device m_maincpu; required_device m_audiocpu; required_device m_soundlatch; - + required_device_array m_s2636; + required_device m_gfxdecode; + required_device m_screen; + required_device m_palette; required_ioport_array<2> m_in; required_ioport_array<3> m_dsw; + // memory + memory_share_creator m_video_ram; + memory_share_creator m_color_ram; memory_share_creator m_effectram; + required_shared_ptr m_bullet_ram; + bitmap_ind16 m_collision_background; + uint8_t m_collision_register = 0U; uint8_t m_effectcontrol = 0U; + uint8_t m_page = 0U; uint8_t m_io_page = 0U; @@ -82,6 +116,8 @@ private: void video_w(offs_t offset, uint8_t data); uint8_t io_r(); void bullet_w(offs_t offset, uint8_t data); + uint8_t collision_r(); + uint8_t collision_clear_r(); void sh_command_w(uint8_t data); uint8_t sh_command_r(); int audio_t1_r(); @@ -97,9 +133,8 @@ private: void quasar_state::machine_start() { - cvs_base_state::machine_start(); - // register state save + save_item(NAME(m_collision_register)); save_item(NAME(m_effectcontrol)); save_item(NAME(m_page)); save_item(NAME(m_io_page)); @@ -107,9 +142,7 @@ void quasar_state::machine_start() void quasar_state::machine_reset() { - cvs_base_state::machine_reset(); - - m_effectcontrol = 0; + m_collision_register = 0; m_page = 0; m_io_page = 8; } @@ -117,13 +150,7 @@ void quasar_state::machine_reset() /******************************************************************************* - Zaccaria S2650 games share various levels of design with the Century Video - System (CVS) games, and hence some routines are shared from there. - - Shooting seems to mix custom boards from Zaccaria and sound boards from CVS - hinting at a strong link between the two companies. - - Zaccaria are an Italian company, Century were based in Manchester UK + Video *******************************************************************************/ @@ -340,6 +367,19 @@ void quasar_state::bullet_w(offs_t offset, uint8_t data) m_bullet_ram[offset] = data ^ 0xff; } +uint8_t quasar_state::collision_r() +{ + return m_collision_register; +} + +uint8_t quasar_state::collision_clear_r() +{ + if (!machine().side_effects_disabled()) + m_collision_register = 0; + + return 0; +} + // memory map taken from the manual void quasar_state::program(address_map &map) @@ -528,11 +568,11 @@ void quasar_state::quasar(machine_config &config) m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x0a; }); - i8035_device &audiocpu(I8035(config, "audiocpu", 6_MHz_XTAL)); - audiocpu.set_addrmap(AS_PROGRAM, &quasar_state::sound_map); - audiocpu.set_addrmap(AS_IO, &quasar_state::sound_portmap); - audiocpu.t1_in_cb().set(FUNC(quasar_state::audio_t1_r)); - audiocpu.p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w)); + I8035(config, m_audiocpu, 6_MHz_XTAL); + m_audiocpu->set_addrmap(AS_PROGRAM, &quasar_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &quasar_state::sound_portmap); + m_audiocpu->t1_in_cb().set(FUNC(quasar_state::audio_t1_r)); + m_audiocpu->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w)); // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -548,15 +588,15 @@ void quasar_state::quasar(machine_config &config) PALETTE(config, m_palette, FUNC(quasar_state::palette), (64 + 1) * 8 + (4 * 256), 0x500); S2636(config, m_s2636[0], 0); - m_s2636[0]->set_offsets(CVS_S2636_Y_OFFSET - 8, CVS_S2636_X_OFFSET - 9); + m_s2636[0]->set_offsets(-13, -35); m_s2636[0]->add_route(ALL_OUTPUTS, "mono", 0.2); S2636(config, m_s2636[1], 0); - m_s2636[1]->set_offsets(CVS_S2636_Y_OFFSET - 8, CVS_S2636_X_OFFSET - 9); + m_s2636[1]->set_offsets(-13, -35); m_s2636[1]->add_route(ALL_OUTPUTS, "mono", 0.2); S2636(config, m_s2636[2], 0); - m_s2636[2]->set_offsets(CVS_S2636_Y_OFFSET - 8, CVS_S2636_X_OFFSET - 9); + m_s2636[2]->set_offsets(-13, -35); m_s2636[2]->add_route(ALL_OUTPUTS, "mono", 0.2); // sound hardware diff --git a/src/mame/zaccaria/zaccaria.cpp b/src/mame/zaccaria/zaccaria.cpp index c38f2b85b90..3b061e4f5e8 100644 --- a/src/mame/zaccaria/zaccaria.cpp +++ b/src/mame/zaccaria/zaccaria.cpp @@ -382,33 +382,33 @@ void zaccaria_state::zaccaria(machine_config &config) ROM_START( monymony ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "cpu1.1a", 0x0000, 0x1000, CRC(13c227ca) SHA1(be305d112917904dd130b08f6b5186e3fbcb858a) ) + ROM_LOAD( "cpu1.1a", 0x0000, 0x1000, CRC(13c227ca) SHA1(be305d112917904dd130b08f6b5186e3fbcb858a) ) ROM_CONTINUE( 0x8000, 0x1000 ) - ROM_LOAD( "cpu2.1b", 0x1000, 0x1000, CRC(87372545) SHA1(04618d007a93b3f6706f56b10bdf39727d7d748d) ) + ROM_LOAD( "cpu2.1b", 0x1000, 0x1000, CRC(87372545) SHA1(04618d007a93b3f6706f56b10bdf39727d7d748d) ) ROM_CONTINUE( 0x9000, 0x1000 ) - ROM_LOAD( "cpu3.1c", 0x2000, 0x1000, CRC(6aea9c01) SHA1(36a57f4dfae52d674dcf55d2b93dbacf734866b1) ) + ROM_LOAD( "cpu3.1c", 0x2000, 0x1000, CRC(6aea9c01) SHA1(36a57f4dfae52d674dcf55d2b93dbacf734866b1) ) ROM_CONTINUE( 0xa000, 0x1000 ) - ROM_LOAD( "cpu4.1d", 0x3000, 0x1000, CRC(5fdec451) SHA1(0f955c907e0a61a725a951018fdf5cc321139863) ) + ROM_LOAD( "cpu4.1d", 0x3000, 0x1000, CRC(5fdec451) SHA1(0f955c907e0a61a725a951018fdf5cc321139863) ) ROM_CONTINUE( 0xb000, 0x1000 ) - ROM_LOAD( "cpu5.2a", 0x4000, 0x1000, CRC(af830e3c) SHA1(bed57c341ae3500f147efe31bcf01f81466ec1c0) ) + ROM_LOAD( "cpu5.2a", 0x4000, 0x1000, CRC(af830e3c) SHA1(bed57c341ae3500f147efe31bcf01f81466ec1c0) ) ROM_CONTINUE( 0xc000, 0x1000 ) - ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) ) + ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) ) ROM_CONTINUE( 0xd000, 0x1000 ) ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 - ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) - ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) ) + ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) + ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) ) ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 - ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) ) + ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) ) ROM_CONTINUE( 0x6000, 0x1000 ) - ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) ) + ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) ) ROM_CONTINUE( 0x7000, 0x1000 ) ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "bg1.2d", 0x0000, 0x2000, CRC(82ab4d1a) SHA1(5aaf42a508df236f2e7c844d377132d73053907b) ) - ROM_LOAD( "bg2.1f", 0x2000, 0x2000, CRC(40d4e4d1) SHA1(79cbade30f1c9269e70ddb9c4332cfe1e8dc50a9) ) - ROM_LOAD( "bg3.1e", 0x4000, 0x2000, CRC(36980455) SHA1(4140b0cd4137c8f209124b12d9c0eb3b04f91991) ) + ROM_LOAD( "bg1.2d", 0x0000, 0x2000, CRC(82ab4d1a) SHA1(5aaf42a508df236f2e7c844d377132d73053907b) ) + ROM_LOAD( "bg2.1f", 0x2000, 0x2000, CRC(40d4e4d1) SHA1(79cbade30f1c9269e70ddb9c4332cfe1e8dc50a9) ) + ROM_LOAD( "bg3.1e", 0x4000, 0x2000, CRC(36980455) SHA1(4140b0cd4137c8f209124b12d9c0eb3b04f91991) ) ROM_REGION( 0x0400, "proms", 0 ) ROM_LOAD( "9g", 0x0000, 0x0200, CRC(fc9a0f21) SHA1(2a93d684645ee1b70315386127223151582ab370) ) @@ -417,33 +417,33 @@ ROM_END ROM_START( monymony2 ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "cpu1.1a", 0x0000, 0x1000, CRC(907225b2) SHA1(88955d21deee8364e391413c8e59361ca5f7e534) ) + ROM_LOAD( "cpu1.1a", 0x0000, 0x1000, CRC(907225b2) SHA1(88955d21deee8364e391413c8e59361ca5f7e534) ) ROM_CONTINUE( 0x8000, 0x1000 ) - ROM_LOAD( "cpu2.1b", 0x1000, 0x1000, CRC(87372545) SHA1(04618d007a93b3f6706f56b10bdf39727d7d748d) ) + ROM_LOAD( "cpu2.1b", 0x1000, 0x1000, CRC(87372545) SHA1(04618d007a93b3f6706f56b10bdf39727d7d748d) ) ROM_CONTINUE( 0x9000, 0x1000 ) - ROM_LOAD( "cpu3.1c", 0x2000, 0x1000, CRC(3c874c16) SHA1(5607475638c3c313a8150aaa0e3b653226c2442a) ) + ROM_LOAD( "cpu3.1c", 0x2000, 0x1000, CRC(3c874c16) SHA1(5607475638c3c313a8150aaa0e3b653226c2442a) ) ROM_CONTINUE( 0xa000, 0x1000 ) - ROM_LOAD( "cpu4.1d", 0x3000, 0x1000, CRC(5fdec451) SHA1(0f955c907e0a61a725a951018fdf5cc321139863) ) + ROM_LOAD( "cpu4.1d", 0x3000, 0x1000, CRC(5fdec451) SHA1(0f955c907e0a61a725a951018fdf5cc321139863) ) ROM_CONTINUE( 0xb000, 0x1000 ) - ROM_LOAD( "cpu5.2a", 0x4000, 0x1000, CRC(af830e3c) SHA1(bed57c341ae3500f147efe31bcf01f81466ec1c0) ) + ROM_LOAD( "cpu5.2a", 0x4000, 0x1000, CRC(af830e3c) SHA1(bed57c341ae3500f147efe31bcf01f81466ec1c0) ) ROM_CONTINUE( 0xc000, 0x1000 ) - ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) ) + ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) ) ROM_CONTINUE( 0xd000, 0x1000 ) ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 - ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) - ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) ) + ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) + ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) ) ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 - ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) ) + ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) ) ROM_CONTINUE( 0x6000, 0x1000 ) - ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) ) + ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) ) ROM_CONTINUE( 0x7000, 0x1000 ) ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "bg1.2d", 0x0000, 0x2000, CRC(82ab4d1a) SHA1(5aaf42a508df236f2e7c844d377132d73053907b) ) - ROM_LOAD( "bg2.1f", 0x2000, 0x2000, CRC(40d4e4d1) SHA1(79cbade30f1c9269e70ddb9c4332cfe1e8dc50a9) ) - ROM_LOAD( "bg3.1e", 0x4000, 0x2000, CRC(36980455) SHA1(4140b0cd4137c8f209124b12d9c0eb3b04f91991) ) + ROM_LOAD( "bg1.2d", 0x0000, 0x2000, CRC(82ab4d1a) SHA1(5aaf42a508df236f2e7c844d377132d73053907b) ) + ROM_LOAD( "bg2.1f", 0x2000, 0x2000, CRC(40d4e4d1) SHA1(79cbade30f1c9269e70ddb9c4332cfe1e8dc50a9) ) + ROM_LOAD( "bg3.1e", 0x4000, 0x2000, CRC(36980455) SHA1(4140b0cd4137c8f209124b12d9c0eb3b04f91991) ) ROM_REGION( 0x0400, "proms", 0 ) ROM_LOAD( "9g", 0x0000, 0x0200, CRC(fc9a0f21) SHA1(2a93d684645ee1b70315386127223151582ab370) ) @@ -465,16 +465,16 @@ ROM_START( jackrabt ) ROM_LOAD( "cpu-01.5h", 0xc000, 0x1000, CRC(785e1a01) SHA1(a748d300be9455cad4f912e01c2279bb8465edfe) ) ROM_LOAD( "cpu-01.6h", 0xd000, 0x1000, CRC(dd5979cf) SHA1(e9afe7002b2258a1c3132bdd951c6e20d473fb6a) ) /* This set was also found with bigger program ROMs (but for the first which matches) - ROM_LOAD( "cpu-01-2.1b", 0x1000, 0x1000, CRC(1af79299) SHA1(8e68606a31aa7a7940ff90a7059f56ca7db0ac7c) ) - ROM_CONTINUE( 0x9000, 0x1000) - ROM_LOAD( "cpu-01-3.1c", 0x2000, 0x1000, CRC(a02d5bc7) SHA1(1cb0ad29e7895b80053212bdf9aab9efe334326a) ) - ROM_CONTINUE( 0xa000, 0x1000) - ROM_LOAD( "cpu-01-4.1d", 0x3000, 0x1000) CRC(8e7fbbb3) SHA1(3d57ddf6a47d5f28e4fd24002e948287803a2438) ) - ROM_CONTINUE( 0xb000, 0x1000) - ROM_LOAD( "cpu-01-5.2a", 0x4000, 0x1000, CRC(2f3aa2a4) SHA1(4256894f178980abf187bb5424f9d738fcae2623) ) - ROM_CONTINUE( 0xc000, 0x1000) - ROM_LOAD( "cpu-01-6.2c", 0x5000, 0x1000, CRC(c38228c0) SHA1(1ccc720b0d64b16c268a2bcfb8990f3c71b65913) ) - ROM_CONTINUE( 0xd000, 0x1000) + ROM_LOAD( "cpu-01-2.1b", 0x1000, 0x1000, CRC(1af79299) SHA1(8e68606a31aa7a7940ff90a7059f56ca7db0ac7c) ) + ROM_CONTINUE( 0x9000, 0x1000) + ROM_LOAD( "cpu-01-3.1c", 0x2000, 0x1000, CRC(a02d5bc7) SHA1(1cb0ad29e7895b80053212bdf9aab9efe334326a) ) + ROM_CONTINUE( 0xa000, 0x1000) + ROM_LOAD( "cpu-01-4.1d", 0x3000, 0x1000) CRC(8e7fbbb3) SHA1(3d57ddf6a47d5f28e4fd24002e948287803a2438) ) + ROM_CONTINUE( 0xb000, 0x1000) + ROM_LOAD( "cpu-01-5.2a", 0x4000, 0x1000, CRC(2f3aa2a4) SHA1(4256894f178980abf187bb5424f9d738fcae2623) ) + ROM_CONTINUE( 0xc000, 0x1000) + ROM_LOAD( "cpu-01-6.2c", 0x5000, 0x1000, CRC(c38228c0) SHA1(1ccc720b0d64b16c268a2bcfb8990f3c71b65913) ) + ROM_CONTINUE( 0xd000, 0x1000) */ ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 -- cgit v1.2.3