diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h index 3b691ae4593..17858e7bc09 100644 --- a/src/devices/machine/mos6530n.h +++ b/src/devices/machine/mos6530n.h @@ -2,8 +2,7 @@ // copyright-holders:Curt Coder /********************************************************************** - MOS Technology 6530 Memory, I/O, Timer Array emulation - MOS Technology 6532 RAM, I/O, Timer Array emulation + MOS Technology 6530 MIOT, 6532 RIOT ********************************************************************** _____ _____ @@ -63,7 +62,7 @@ // ======================> mos6530_device_base -class mos6530_device_base : public device_t +class mos6530_device_base : public device_t { public: auto irq_wr_callback() { return m_irq_cb.bind(); } @@ -179,7 +178,7 @@ protected: }; -class mos6530_new_device : public mos6530_device_base +class mos6530_new_device : public mos6530_device_base { public: // construction/destruction @@ -197,7 +196,7 @@ protected: }; -class mos6532_new_device : public mos6530_device_base +class mos6532_new_device : public mos6530_device_base { public: // construction/destruction diff --git a/src/mame/atari/starwars.cpp b/src/mame/atari/starwars.cpp index 50307ecdaaa..e099a5af390 100644 --- a/src/mame/atari/starwars.cpp +++ b/src/mame/atari/starwars.cpp @@ -16,7 +16,7 @@ Known bugs: * the monitor "overdrive" effect is not simulated when you - get hit by enemy fire + get hit by enemy fire **************************************************************************** @@ -41,14 +41,6 @@ #define CLOCK_3KHZ (MASTER_CLOCK / 4096) -void starwars_state::quad_pokeyn_w(offs_t offset, uint8_t data) -{ - int pokey_num = (offset >> 3) & ~0x04; - int control = (offset & 0x20) >> 2; - int pokey_reg = (offset % 8) | control; - - m_pokey[pokey_num]->write(pokey_reg, data); -} /************************************* * @@ -83,6 +75,21 @@ void starwars_state::irq_ack_w(uint8_t data) * *************************************/ +uint8_t starwars_state::starwars_main_ready_flag_r() +{ + /* only upper two flag bits mapped */ + return (m_soundlatch->pending_r() << 7) | (m_mainlatch->pending_r() << 6); +} + +void starwars_state::starwars_soundrst_w(uint8_t data) +{ + m_soundlatch->acknowledge_w(); + m_mainlatch->acknowledge_w(); + + /* reset sound CPU here */ + m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); +} + void starwars_state::main_map(address_map &map) { map(0x0000, 0x2fff).ram(); @@ -128,12 +135,21 @@ void starwars_state::esb_main_map(address_map &map) * *************************************/ +void starwars_state::quad_pokeyn_w(offs_t offset, uint8_t data) +{ + int pokey_num = (offset >> 3) & ~0x04; + int control = (offset & 0x20) >> 2; + int pokey_reg = (offset % 8) | control; + + m_pokey[pokey_num]->write(pokey_reg, data); +} + void starwars_state::sound_map(address_map &map) { map(0x0000, 0x07ff).w(m_mainlatch, FUNC(generic_latch_8_device::write)); map(0x0800, 0x0fff).r(m_soundlatch, FUNC(generic_latch_8_device::read)); /* SIN Read */ - map(0x1000, 0x107f).ram(); /* 6532 ram */ - map(0x1080, 0x109f).rw(m_riot, FUNC(riot6532_device::read), FUNC(riot6532_device::write)); + map(0x1000, 0x107f).m(m_riot, FUNC(mos6532_new_device::ram_map)); + map(0x1080, 0x109f).m(m_riot, FUNC(mos6532_new_device::io_map)); map(0x1800, 0x183f).w(FUNC(starwars_state::quad_pokeyn_w)); map(0x2000, 0x27ff).ram(); /* program RAM */ map(0x4000, 0x7fff).rom(); /* sound roms */ @@ -222,7 +238,6 @@ static INPUT_PORTS_START( starwars ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) /* 0xc0 and 0xe0 None */ - PORT_START("STICKY") PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(70) PORT_KEYDELTA(30) @@ -272,12 +287,16 @@ void starwars_state::starwars(machine_config &config) adc.in_callback<1>().set_ioport("STICKX"); // yaw adc.in_callback<2>().set_constant(0); // thrust (unused) - RIOT6532(config, m_riot, MASTER_CLOCK / 8); - m_riot->in_pa_callback().set(FUNC(starwars_state::r6532_porta_r)); - m_riot->out_pa_callback().set(FUNC(starwars_state::r6532_porta_w)); - m_riot->in_pb_callback().set("tms", FUNC(tms5220_device::status_r)); - m_riot->out_pb_callback().set("tms", FUNC(tms5220_device::data_w)); - m_riot->irq_callback().set_inputline("audiocpu", M6809_IRQ_LINE); + MOS6532_NEW(config, m_riot, MASTER_CLOCK / 8); + m_riot->pa_wr_callback<0>().set(m_tms, FUNC(tms5220_device::wsq_w)); + m_riot->pa_wr_callback<1>().set(m_tms, FUNC(tms5220_device::rsq_w)); + m_riot->pa_rd_callback<2>().set(m_tms, FUNC(tms5220_device::readyq_r)); + m_riot->pa_wr_callback<3>().set_nop(); // hold main CPU in reset? + enable delay circuit? + m_riot->pa_rd_callback<4>().set_constant(1); // not sound self test + m_riot->pa_wr_callback<5>().set_nop(); // mute speech + m_riot->pb_rd_callback().set("tms", FUNC(tms5220_device::status_r)); + m_riot->pb_wr_callback().set("tms", FUNC(tms5220_device::data_w)); + m_riot->irq_wr_callback().set_inputline("audiocpu", M6809_IRQ_LINE); X2212(config, "x2212").set_auto_save(true); /* nvram */ @@ -314,11 +333,11 @@ void starwars_state::starwars(machine_config &config) TMS5220(config, m_tms, MASTER_CLOCK/2/9).add_route(ALL_OUTPUTS, "mono", 0.50); GENERIC_LATCH_8(config, m_soundlatch); - m_soundlatch->data_pending_callback().set(m_riot, FUNC(riot6532_device::pa7_w)); + m_soundlatch->data_pending_callback().set(m_riot, FUNC(mos6532_new_device::pa7_w)); m_soundlatch->data_pending_callback().append([this](int state) { if (state) machine().scheduler().perfect_quantum(attotime::from_usec(100)); }); GENERIC_LATCH_8(config, m_mainlatch); - m_mainlatch->data_pending_callback().set(m_riot, FUNC(riot6532_device::pa6_w)); + m_mainlatch->data_pending_callback().set(m_riot, FUNC(mos6532_new_device::pa6_w)); m_mainlatch->data_pending_callback().append([this](int state) { if (state) machine().scheduler().perfect_quantum(attotime::from_usec(100)); }); } @@ -344,7 +363,6 @@ void starwars_state::esb(machine_config &config) * *************************************/ - ROM_START( starwars ) ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */ ROM_LOAD( "136021.214.1f", 0x6000, 0x2000, CRC(04f1876e) SHA1(c1d3637cb31ece0890c25f6122d6bcd27e6ffe0c) ) /* ROM 0 bank pages 0 and 1 */ @@ -448,11 +466,7 @@ ROM_START( tomcatsw ) ROM_LOAD( "tcavg3.1l", 0x0000, 0x1000, CRC(27188aa9) SHA1(5d9a978a7ac1913b57586e81045a1b955db27b48) ) /* Sound ROMS */ - ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "136021-107.1jk",0x4000, 0x2000, NO_DUMP ) /* Sound ROM 0 */ - ROM_RELOAD( 0xc000, 0x2000 ) - ROM_LOAD( "136021-208.1h", 0x6000, 0x2000, NO_DUMP ) /* Sound ROM 0 */ - ROM_RELOAD( 0xe000, 0x2000 ) + ROM_REGION( 0x10000, "audiocpu", ROMREGION_ERASE00 ) ROM_REGION( 0x100, "avg:prom", 0) ROM_LOAD( "136021-109.4b", 0x0000, 0x0100, CRC(82fc3eb2) SHA1(184231c7baef598294860a7d2b8a23798c5c7da6) ) /* AVG PROM */ diff --git a/src/mame/atari/starwars.h b/src/mame/atari/starwars.h index 69df827ee8b..ba0fde6920d 100644 --- a/src/mame/atari/starwars.h +++ b/src/mame/atari/starwars.h @@ -10,8 +10,8 @@ #pragma once -#include "machine/6532riot.h" #include "machine/gen_latch.h" +#include "machine/mos6530n.h" #include "slapstic.h" #include "machine/x2212.h" #include "sound/pokey.h" @@ -47,7 +47,7 @@ public: private: required_device m_soundlatch; required_device m_mainlatch; - required_device m_riot; + required_device m_riot; required_shared_ptr m_mathram; required_device m_maincpu; required_device m_audiocpu; @@ -88,8 +88,6 @@ private: void quad_pokeyn_w(offs_t offset, uint8_t data); virtual void machine_reset() override; TIMER_CALLBACK_MEMBER(math_run_clear); - uint8_t r6532_porta_r(); - void r6532_porta_w(uint8_t data); void starwars_mproc_init(); void starwars_mproc_reset(); diff --git a/src/mame/atari/starwars_a.cpp b/src/mame/atari/starwars_a.cpp deleted file mode 100644 index a4dc4afb354..00000000000 --- a/src/mame/atari/starwars_a.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Frank Palazzolo -/*************************************************************************** - - Atari Star Wars hardware - - This file is Copyright Steve Baines. - Modified by Frank Palazzolo for sound support - -***************************************************************************/ - -#include "emu.h" -#include "starwars.h" - - -/************************************* - * - * RIOT interfaces - * - *************************************/ - -uint8_t starwars_state::r6532_porta_r() -{ - /* Configured as follows: */ - /* d7 (in) Main Ready Flag */ - /* d6 (in) Sound Ready Flag */ - /* d5 (out) Mute Speech */ - /* d4 (in) Not Sound Self Test */ - /* d3 (out) Hold Main CPU in Reset? */ - /* + enable delay circuit? */ - /* d2 (in) TMS5220 Not Ready */ - /* d1 (out) TMS5220 Not Read */ - /* d0 (out) TMS5220 Not Write */ - /* Note: bit 4 is always set to avoid sound self test */ - uint8_t olddata = m_riot->porta_in_get(); - - return (olddata & 0xc0) | 0x10 | (m_tms->readyq_r() << 2); -} - - -void starwars_state::r6532_porta_w(uint8_t data) -{ - /* handle 5220 read */ - m_tms->rsq_w((data & 2)>>1); - /* handle 5220 write */ - m_tms->wsq_w((data & 1)>>0); -} - - -/************************************* - * - * Sound CPU to/from main CPU - * - *************************************/ - -uint8_t starwars_state::starwars_main_ready_flag_r() -{ - return m_riot->porta_in_get() & 0xc0; /* only upper two flag bits mapped */ -} - - -void starwars_state::starwars_soundrst_w(uint8_t data) -{ - m_soundlatch->acknowledge_w(); - m_mainlatch->acknowledge_w(); - - /* reset sound CPU here */ - m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); -} diff --git a/src/mame/atari/tomcat.cpp b/src/mame/atari/tomcat.cpp index fb072fcc907..75c90c0c23e 100644 --- a/src/mame/atari/tomcat.cpp +++ b/src/mame/atari/tomcat.cpp @@ -33,10 +33,10 @@ #include "video/vector.h" #include "machine/74259.h" #include "machine/adc0808.h" +#include "machine/mos6530n.h" #include "machine/timekpr.h" #include "machine/nvram.h" #include "machine/watchdog.h" -#include "machine/6532riot.h" #include "sound/pokey.h" #include "sound/tms5220.h" #include "sound/ymopm.h" @@ -270,8 +270,8 @@ void tomcat_state::sound_map(address_map &map) map(0x2000, 0x2001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); map(0x3000, 0x30df).w(FUNC(tomcat_state::soundlatches_w)); map(0x30e0, 0x30e0).noprw(); // COINRD Inputs: D7 = Coin L, D6 = Coin R, D5 = SOUNDFLAG - map(0x5000, 0x507f).ram(); // 6532 ram - map(0x5080, 0x509f).rw("riot", FUNC(riot6532_device::read), FUNC(riot6532_device::write)); + map(0x5000, 0x507f).m("riot", FUNC(mos6532_new_device::ram_map)); + map(0x5080, 0x509f).m("riot", FUNC(mos6532_new_device::io_map)); map(0x6000, 0x601f).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write)); map(0x7000, 0x701f).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write)); map(0x8000, 0xffff).noprw(); // main sound program rom @@ -330,7 +330,7 @@ void tomcat_state::tomcat(machine_config &config) m_adc->in_callback<0>().set_ioport("STICKY"); m_adc->in_callback<1>().set_ioport("STICKX"); - RIOT6532(config, "riot", 14.318181_MHz_XTAL / 8); + MOS6532_NEW(config, "riot", 14.318181_MHz_XTAL / 8); /* PA0 = /WS OUTPUT (TMS-5220 WRITE STROBE) PA1 = /RS OUTPUT (TMS-5220 READ STROBE)