diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2018-06-11 21:47:34 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2018-06-11 21:47:34 -0400 |
commit | 7f06e4f6c26c513c6f5e0e0556879d261fb306da (patch) | |
tree | d3d055cdef7d835e9999281133738bb026e245b3 | |
parent | 07b70fec341453e8ee6d65c1fe19592853654981 (diff) |
irobot.cpp: Eliminate machine().device; use X2212 device for NVRAM (nw)
-rw-r--r-- | src/mame/drivers/irobot.cpp | 17 | ||||
-rw-r--r-- | src/mame/includes/irobot.h | 20 | ||||
-rw-r--r-- | src/mame/machine/irobot.cpp | 34 |
3 files changed, 35 insertions, 36 deletions
diff --git a/src/mame/drivers/irobot.cpp b/src/mame/drivers/irobot.cpp index 4eb863ee031..056bd73b299 100644 --- a/src/mame/drivers/irobot.cpp +++ b/src/mame/drivers/irobot.cpp @@ -91,19 +91,6 @@ /************************************* * - * NVRAM handler - * - *************************************/ - -WRITE8_MEMBER(irobot_state::irobot_nvram_w) -{ - m_nvram[offset] = data & 0x0f; -} - - - -/************************************* - * * IRQ acknowledgement * *************************************/ @@ -157,7 +144,7 @@ void irobot_state::irobot_map(address_map &map) map(0x1140, 0x1140).w(FUNC(irobot_state::irobot_statwr_w)); map(0x1180, 0x1180).w(FUNC(irobot_state::irobot_out0_w)); map(0x11c0, 0x11c0).w(FUNC(irobot_state::irobot_rom_banksel_w)); - map(0x1200, 0x12ff).ram().w(FUNC(irobot_state::irobot_nvram_w)).share("nvram"); + map(0x1200, 0x12ff).rw("nvram", FUNC(x2212_device::read), FUNC(x2212_device::write)); map(0x1300, 0x1300).mirror(0xff).r("adc", FUNC(adc0809_device::data_r)); map(0x1400, 0x143f).rw(FUNC(irobot_state::quad_pokeyn_r), FUNC(irobot_state::quad_pokeyn_w)); map(0x1800, 0x18ff).w(FUNC(irobot_state::irobot_paletteram_w)); @@ -305,7 +292,7 @@ MACHINE_CONFIG_START(irobot_state::irobot) MCFG_ADC0808_IN0_CB(IOPORT("AN0")) MCFG_ADC0808_IN1_CB(IOPORT("AN1")) - MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_X2212_ADD_AUTOSAVE("nvram") /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/includes/irobot.h b/src/mame/includes/irobot.h index 9a3d72f529f..d068ab5f1aa 100644 --- a/src/mame/includes/irobot.h +++ b/src/mame/includes/irobot.h @@ -11,6 +11,7 @@ #pragma once #include "machine/timer.h" +#include "machine/x2212.h" #include "sound/pokey.h" #include "screen.h" @@ -35,12 +36,16 @@ public: irobot_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_nvram(*this, "nvram") , m_videoram(*this, "videoram"), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), +#if IR_TIMING + m_irvg_timer(*this, "irvg_timer"), + m_irmb_timer(*this, "irmb_timer"), +#endif + m_novram(*this, "nvram"), m_pokey(*this, "pokey%u", 1U), m_leds(*this, "led%u", 0U) { } @@ -50,12 +55,11 @@ public: void irobot(machine_config &config); protected: - virtual void machine_start() override { m_leds.resolve(); } + virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; void irobot_map(address_map &map); - DECLARE_WRITE8_MEMBER(irobot_nvram_w); DECLARE_WRITE8_MEMBER(irobot_clearirq_w); DECLARE_WRITE8_MEMBER(irobot_clearfirq_w); DECLARE_READ8_MEMBER(irobot_sharedmem_r); @@ -82,7 +86,6 @@ protected: void irmb_run(); private: - required_shared_ptr<uint8_t> m_nvram; required_shared_ptr<uint8_t> m_videoram; uint8_t m_vg_clear; uint8_t m_bufsel; @@ -91,10 +94,6 @@ private: uint8_t m_irvg_vblank; uint8_t m_irvg_running; uint8_t m_irmb_running; -#if IR_TIMING - timer_device *m_irvg_timer; - timer_device *m_irmb_timer; -#endif uint8_t *m_comRAM[2]; uint8_t *m_mbRAM; uint8_t *m_mbROM; @@ -118,6 +117,11 @@ private: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; +#if IR_TIMING + required_device<timer_device> m_irvg_timer; + required_device<timer_device> m_irmb_timer; +#endif + required_device<x2212_device> m_novram; required_device_array<pokey_device, 4> m_pokey; output_finder<2> m_leds; }; diff --git a/src/mame/machine/irobot.cpp b/src/mame/machine/irobot.cpp index 3bfb2152b4b..cf0881456b2 100644 --- a/src/mame/machine/irobot.cpp +++ b/src/mame/machine/irobot.cpp @@ -67,15 +67,15 @@ WRITE8_MEMBER(irobot_state::irobot_statwr_w) logerror("write %2x ", data); IR_CPU_STATE(); - m_combase = m_comRAM[data >> 7]; - m_combase_mb = m_comRAM[(data >> 7) ^ 1]; - m_bufsel = data & 0x02; - if (((data & 0x01) == 0x01) && (m_vg_clear == 0)) + m_combase = m_comRAM[BIT(data, 7)]; + m_combase_mb = m_comRAM[BIT(data, 7) ^ 1]; + m_bufsel = BIT(data, 1); + if (BIT(data, 0) && (m_vg_clear == 0)) irobot_poly_clear(); - m_vg_clear = data & 0x01; + m_vg_clear = BIT(data, 0); - if ((data & 0x04) && !(m_statwr & 0x04)) + if (BIT(data, 2) && !BIT(m_statwr, 2)) { irobot_run_video(); #if IR_TIMING @@ -88,8 +88,11 @@ WRITE8_MEMBER(irobot_state::irobot_statwr_w) #endif m_irvg_running=1; } - if ((data & 0x10) && !(m_statwr & 0x10)) + if (BIT(data, 4) && !BIT(m_statwr, 4)) irmb_run(); + + m_novram->recall(!BIT(data, 6)); + m_statwr = data; } @@ -160,6 +163,13 @@ TIMER_CALLBACK_MEMBER(irobot_state::scanline_callback) machine().scheduler().timer_set(m_screen->time_until_pos(scanline), timer_expired_delegate(FUNC(irobot_state::scanline_callback),this), scanline); } +void irobot_state::machine_start() +{ + m_leds.resolve(); + m_vg_clear = 0; + m_statwr = 0; +} + void irobot_state::machine_reset() { uint8_t *MB = memregion("mathbox")->base(); @@ -172,17 +182,15 @@ void irobot_state::machine_reset() m_irvg_vblank=0; m_irvg_running = 0; - m_irvg_timer = machine().device<timer_device>("irvg_timer"); m_irmb_running = 0; - m_irmb_timer = machine().device<timer_device>("irmb_timer"); /* set an initial timer to go off on scanline 0 */ machine().scheduler().timer_set(m_screen->time_until_pos(0), timer_expired_delegate(FUNC(irobot_state::scanline_callback),this)); - irobot_rom_banksel_w(m_maincpu->space(AS_PROGRAM),0,0); - irobot_out0_w(m_maincpu->space(AS_PROGRAM),0,0); - m_combase = m_comRAM[0]; - m_combase_mb = m_comRAM[1]; + address_space &space = machine().dummy_space(); + irobot_rom_banksel_w(space, 0, 0); + irobot_out0_w(space, 0, 0); + irobot_statwr_w(space, 0, 0); m_outx = 0; } |