summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Wilbert Pol <wilbertpol@users.noreply.github.com>2015-08-13 13:18:13 +0200
committer Wilbert Pol <wilbertpol@users.noreply.github.com>2015-08-13 13:18:13 +0200
commit21b7eb47cd7568cd8f74315458004992fe27540d (patch)
tree24492417faf927c1793a282a2bd607222b82c62c
parent70fe93c86627c98cee6cc50add4b4a33f19a2f03 (diff)
reduce tagmap lookups and read_safe usage in a few drivers (nw)
-rw-r--r--src/mame/drivers/itech8.c7
-rw-r--r--src/mame/drivers/megatech.c30
-rw-r--r--src/mame/includes/itech8.h10
-rw-r--r--src/mame/includes/megadriv.h2
-rw-r--r--src/mame/machine/atari.c12
-rw-r--r--src/mame/machine/megadriv.c24
-rw-r--r--src/mame/machine/slikshot.c4
-rw-r--r--src/mame/video/itech8.c3
8 files changed, 52 insertions, 40 deletions
diff --git a/src/mame/drivers/itech8.c b/src/mame/drivers/itech8.c
index ca3596935ff..4c275d7ceb8 100644
--- a/src/mame/drivers/itech8.c
+++ b/src/mame/drivers/itech8.c
@@ -504,7 +504,6 @@
#include "machine/6821pia.h"
#include "machine/6522via.h"
#include "machine/nvram.h"
-#include "machine/ticket.h"
#include "includes/itech8.h"
#include "sound/2203intf.h"
#include "sound/2608intf.h"
@@ -519,6 +518,8 @@
+IOPORT_ARRAY_MEMBER(itech8_state::analog_inputs) { "AN_C", "AN_D", "AN_E", "AN_F" };
+
/*************************************
*
* Interrupt handling
@@ -747,7 +748,7 @@ WRITE8_MEMBER(itech8_state::pia_portb_out)
/* bit 5 controls the coin counter */
/* bit 6 controls the diagnostic sound LED */
m_pia_portb_data = data;
- machine().device<ticket_dispenser_device>("ticket")->write(space, 0, (data & 0x10) << 3);
+ m_ticket->write(space, 0, (data & 0x10) << 3);
coin_counter_w(machine(), 0, (data & 0x20) >> 5);
}
@@ -761,7 +762,7 @@ WRITE8_MEMBER(itech8_state::ym2203_portb_out)
/* bit 6 controls the diagnostic sound LED */
/* bit 7 controls the ticket dispenser */
m_pia_portb_data = data;
- machine().device<ticket_dispenser_device>("ticket")->write(machine().driver_data()->generic_space(), 0, data & 0x80);
+ m_ticket->write(machine().driver_data()->generic_space(), 0, data & 0x80);
coin_counter_w(machine(), 0, (data & 0x20) >> 5);
}
diff --git a/src/mame/drivers/megatech.c b/src/mame/drivers/megatech.c
index 5b82e6f6373..cb0d223cff6 100644
--- a/src/mame/drivers/megatech.c
+++ b/src/mame/drivers/megatech.c
@@ -97,7 +97,8 @@ public:
m_cart6(*this, "mt_slot6"),
m_cart7(*this, "mt_slot7"),
m_cart8(*this, "mt_slot8"),
- m_bioscpu(*this, "mtbios")
+ m_bioscpu(*this, "mtbios"),
+ m_region_maincpu(*this, "maincpu")
{ }
DECLARE_WRITE_LINE_MEMBER( snd_int_callback );
@@ -167,6 +168,7 @@ private:
optional_device<generic_slot_device> m_cart7;
optional_device<generic_slot_device> m_cart8;
required_device<cpu_device> m_bioscpu;
+ required_memory_region m_region_maincpu;
memory_region *m_cart_reg[8];
};
@@ -345,13 +347,13 @@ WRITE8_MEMBER( mtech_state::mt_sms_standard_rom_bank_w )
//printf("bank ram??\n");
break;
case 1:
- memcpy(sms_rom+0x0000, space.machine().root_device().memregion("maincpu")->base()+bank*0x4000, 0x4000);
+ memcpy(sms_rom+0x0000, m_region_maincpu->base()+bank*0x4000, 0x4000);
break;
case 2:
- memcpy(sms_rom+0x4000, space.machine().root_device().memregion("maincpu")->base()+bank*0x4000, 0x4000);
+ memcpy(sms_rom+0x4000, m_region_maincpu->base()+bank*0x4000, 0x4000);
break;
case 3:
- memcpy(sms_rom+0x8000, space.machine().root_device().memregion("maincpu")->base()+bank*0x4000, 0x4000);
+ memcpy(sms_rom+0x8000, m_region_maincpu->base()+bank*0x4000, 0x4000);
break;
}
@@ -359,9 +361,8 @@ WRITE8_MEMBER( mtech_state::mt_sms_standard_rom_bank_w )
void mtech_state::set_genz80_as_sms()
{
- address_space &prg = machine().device("genesis_snd_z80")->memory().space(AS_PROGRAM);
- address_space &io = machine().device("genesis_snd_z80")->memory().space(AS_IO);
- sn76496_base_device *sn = machine().device<sn76496_base_device>("snsnd");
+ address_space &prg = m_z80snd->space(AS_PROGRAM);
+ address_space &io = m_z80snd->space(AS_IO);
// main ram area
sms_mainram = (UINT8 *)prg.install_ram(0xc000, 0xdfff, 0, 0x2000);
@@ -370,13 +371,13 @@ void mtech_state::set_genz80_as_sms()
// fixed rom bank area
sms_rom = (UINT8 *)prg.install_rom(0x0000, 0xbfff, NULL);
- memcpy(sms_rom, machine().root_device().memregion("maincpu")->base(), 0xc000);
+ memcpy(sms_rom, m_region_maincpu->base(), 0xc000);
prg.install_write_handler(0xfffc, 0xffff, write8_delegate(FUNC(mtech_state::mt_sms_standard_rom_bank_w),this));
// ports
io.install_read_handler (0x40, 0x41, 0xff, 0x3e, read8_delegate(FUNC(mtech_state::sms_count_r),this));
- io.install_write_handler (0x40, 0x41, 0xff, 0x3e, write8_delegate(FUNC(sn76496_device::write),sn));
+ io.install_write_handler (0x40, 0x41, 0xff, 0x3e, write8_delegate(FUNC(sn76496_device::write),(sn76496_base_device *)m_snsnd));
io.install_readwrite_handler (0x80, 0x80, 0xff, 0x3e, read8_delegate(FUNC(sega315_5124_device::vram_read),(sega315_5124_device *)m_vdp), write8_delegate(FUNC(sega315_5124_device::vram_write),(sega315_5124_device *)m_vdp));
io.install_readwrite_handler (0x81, 0x81, 0xff, 0x3e, read8_delegate(FUNC(sega315_5124_device::register_read),(sega315_5124_device *)m_vdp), write8_delegate(FUNC(sega315_5124_device::register_write),(sega315_5124_device *)m_vdp));
@@ -392,15 +393,14 @@ void mtech_state::set_genz80_as_sms()
/* sets the megadrive z80 to it's normal ports / map */
void mtech_state::set_genz80_as_md()
{
- address_space &prg = machine().device("genesis_snd_z80")->memory().space(AS_PROGRAM);
- ym2612_device *ym2612 = machine().device<ym2612_device>("ymsnd");
+ address_space &prg = m_z80snd->space(AS_PROGRAM);
prg.install_readwrite_bank(0x0000, 0x1fff, "bank1");
machine().root_device().membank("bank1")->set_base(m_genz80.z80_prgram);
prg.install_ram(0x0000, 0x1fff, m_genz80.z80_prgram);
- prg.install_readwrite_handler(0x4000, 0x4003, read8_delegate(FUNC(ym2612_device::read),ym2612), write8_delegate(FUNC(ym2612_device::write),ym2612));
+ prg.install_readwrite_handler(0x4000, 0x4003, read8_delegate(FUNC(ym2612_device::read), (ym2612_device *)m_ymsnd), write8_delegate(FUNC(ym2612_device::write), (ym2612_device *)m_ymsnd));
prg.install_write_handler (0x6000, 0x6000, write8_delegate(FUNC(mtech_state::megadriv_z80_z80_bank_w),this));
prg.install_write_handler (0x6001, 0x6001, write8_delegate(FUNC(mtech_state::megadriv_z80_z80_bank_w),this));
prg.install_read_handler (0x6100, 0x7eff, read8_delegate(FUNC(mtech_state::megadriv_z80_unmapped_read),this));
@@ -417,7 +417,7 @@ void mtech_state::switch_cart(int gameno)
m_z80snd->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
//m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
//m_z80snd->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
- machine().device("ymsnd")->reset();
+ m_ymsnd->reset();
megadriv_stop_scanline_timer();// stop the scanline timer for the genesis vdp... it can be restarted in video eof when needed
m_vdp->reset();
@@ -425,7 +425,7 @@ void mtech_state::switch_cart(int gameno)
/* if the regions exist we're fine */
if (m_cart_reg[gameno])
{
- memcpy(memregion("maincpu")->base(), m_cart_reg[gameno]->base(), 0x400000);
+ memcpy(m_region_maincpu->base(), m_cart_reg[gameno]->base(), 0x400000);
if (!m_cart_is_genesis[gameno])
{
@@ -447,7 +447,7 @@ void mtech_state::switch_cart(int gameno)
else /* else, no cart.. */
{
memset(memregion("mtbios")->base() + 0x8000, 0x00, 0x8000);
- memset(memregion("maincpu")->base(), 0x00, 0x400000);
+ memset(m_region_maincpu->base(), 0x00, 0x400000);
}
}
diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h
index ee957d9c621..a35d6ffbbf8 100644
--- a/src/mame/includes/itech8.h
+++ b/src/mame/includes/itech8.h
@@ -7,6 +7,7 @@
**************************************************************************/
+#include "machine/ticket.h"
#include "video/tlc34076.h"
#include "video/tms34061.h"
@@ -23,6 +24,10 @@ public:
m_tms34061(*this, "tms34061"),
m_tlc34076(*this, "tlc34076"),
m_screen(*this, "screen"),
+ m_ticket(*this, "ticket"),
+ m_an(*this, analog_inputs),
+ m_fakex(*this, "FAKEX"),
+ m_fakey(*this, "FAKEY"),
m_visarea(0, 0, 0, 0) { }
enum
@@ -40,6 +45,11 @@ public:
required_device<tms34061_device> m_tms34061;
required_device<tlc34076_device> m_tlc34076;
required_device<screen_device> m_screen;
+ required_device<ticket_dispenser_device> m_ticket;
+ DECLARE_IOPORT_ARRAY(analog_inputs);
+ optional_ioport_array<4> m_an;
+ optional_ioport m_fakex;
+ optional_ioport m_fakey;
rectangle m_visarea;
diff --git a/src/mame/includes/megadriv.h b/src/mame/includes/megadriv.h
index 96cf8fa3f1c..b30205cb890 100644
--- a/src/mame/includes/megadriv.h
+++ b/src/mame/includes/megadriv.h
@@ -46,12 +46,14 @@ public:
m_z80snd(*this,"genesis_snd_z80"),
m_ymsnd(*this,"ymsnd"),
m_vdp(*this,"gen_vdp"),
+ m_snsnd(*this, "snsnd"),
m_megadrive_ram(*this,"megadrive_ram")
{ }
required_device<m68000_base_device> m_maincpu;
optional_device<cpu_device> m_z80snd;
optional_device<ym2612_device> m_ymsnd;
required_device<sega315_5313_device> m_vdp;
+ required_device<sn76496_base_device> m_snsnd;
optional_shared_ptr<UINT16> m_megadrive_ram;
ioport_port *m_io_reset;
diff --git a/src/mame/machine/atari.c b/src/mame/machine/atari.c
index 34b2cdbbb4c..d576305cad2 100644
--- a/src/mame/machine/atari.c
+++ b/src/mame/machine/atari.c
@@ -98,15 +98,15 @@ POKEY_KEYBOARD_CB_MEMBER(atari_common_state::a800_keyboard)
{
case pokey_device::POK_KEY_BREAK:
/* special case ... */
- ret |= ((m_keyboard[0]->read_safe(0) & 0x08) ? 0x02 : 0x00);
+ ret |= ((m_keyboard[0] && m_keyboard[0]->read() & 0x08) ? 0x02 : 0x00);
break;
case pokey_device::POK_KEY_CTRL:
/* CTRL */
- ret |= ((m_fake->read_safe(0) & 0x02) ? 0x02 : 0x00);
+ ret |= ((m_fake && m_fake->read() & 0x02) ? 0x02 : 0x00);
break;
case pokey_device::POK_KEY_SHIFT:
/* SHIFT */
- ret |= ((m_fake->read_safe(0) & 0x01) ? 0x02 : 0x00);
+ ret |= ((m_fake && m_fake->read() & 0x01) ? 0x02 : 0x00);
break;
}
@@ -115,7 +115,7 @@ POKEY_KEYBOARD_CB_MEMBER(atari_common_state::a800_keyboard)
return ret;
/* decode regular key */
- ipt = m_keyboard[k543210 >> 3]->read_safe(0);
+ ipt = m_keyboard[k543210 >> 3] ? m_keyboard[k543210 >> 3]->read() : 0;
if (ipt & (1 << (k543210 & 0x07)))
ret |= 0x01;
@@ -162,7 +162,7 @@ POKEY_KEYBOARD_CB_MEMBER(atari_common_state::a5200_keypads)
{
case pokey_device::POK_KEY_BREAK:
/* special case ... */
- ret |= ((m_keypad[0]->read_safe(0) & 0x01) ? 0x02 : 0x00);
+ ret |= ((m_keypad[0] && m_keypad[0]->read() & 0x01) ? 0x02 : 0x00);
break;
case pokey_device::POK_KEY_CTRL:
break;
@@ -184,7 +184,7 @@ POKEY_KEYBOARD_CB_MEMBER(atari_common_state::a5200_keypads)
if (k543210 == 0)
return ret;
- ipt = m_keypad[k543210 >> 2]->read_safe(0);
+ ipt = m_keypad[k543210 >> 2] ? m_keypad[k543210 >> 2]->read() : 0;
if (ipt & (1 << (k543210 & 0x03)))
ret |= 0x01;
diff --git a/src/mame/machine/megadriv.c b/src/mame/machine/megadriv.c
index 03417e178e9..3b20ff80a78 100644
--- a/src/mame/machine/megadriv.c
+++ b/src/mame/machine/megadriv.c
@@ -214,14 +214,14 @@ READ8_MEMBER(md_base_state::megadrive_io_read_data_port_6button)
{
/* here we read B, C & the additional buttons */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- (((m_io_pad_3b[portnum]->read_safe(0) & 0x30) |
- (m_io_pad_6b[portnum]->read_safe(0) & 0x0f)) & ~helper);
+ ((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x30) |
+ ((m_io_pad_6b[portnum] ? m_io_pad_6b[portnum]->read() : 0) & 0x0f)) & ~helper);
}
else
{
/* here we read B, C & the directional buttons */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- ((m_io_pad_3b[portnum]->read_safe(0) & 0x3f) & ~helper);
+ (((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x3f) & ~helper);
}
}
else
@@ -230,20 +230,20 @@ READ8_MEMBER(md_base_state::megadrive_io_read_data_port_6button)
{
/* here we read ((Start & A) >> 2) | 0x00 */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- (((m_io_pad_3b[portnum]->read_safe(0) & 0xc0) >> 2) & ~helper);
+ ((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) & ~helper);
}
else if (m_io_stage[portnum]==2)
{
/* here we read ((Start & A) >> 2) | 0x0f */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- ((((m_io_pad_3b[portnum]->read_safe(0) & 0xc0) >> 2) | 0x0f) & ~helper);
+ (((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) | 0x0f) & ~helper);
}
else
{
/* here we read ((Start & A) >> 2) | Up and Down */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- ((((m_io_pad_3b[portnum]->read_safe(0) & 0xc0) >> 2) |
- (m_io_pad_3b[portnum]->read_safe(0) & 0x03)) & ~helper);
+ (((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) |
+ ((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x03)) & ~helper);
}
}
@@ -263,14 +263,14 @@ READ8_MEMBER(md_base_state::megadrive_io_read_data_port_3button)
{
/* here we read B, C & the directional buttons */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- (((m_io_pad_3b[portnum]->read_safe(0) & 0x3f) | 0x40) & ~helper);
+ ((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x3f) | 0x40) & ~helper);
}
else
{
/* here we read ((Start & A) >> 2) | Up and Down */
retdata = (m_megadrive_io_data_regs[portnum] & helper) |
- ((((m_io_pad_3b[portnum]->read_safe(0) & 0xc0) >> 2) |
- (m_io_pad_3b[portnum]->read_safe(0) & 0x03) | 0x40) & ~helper);
+ (((((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0xc0) >> 2) |
+ ((m_io_pad_3b[portnum] ? m_io_pad_3b[portnum]->read() : 0) & 0x03) | 0x40) & ~helper);
}
return retdata;
@@ -718,7 +718,7 @@ WRITE8_MEMBER(md_base_state::megadriv_z80_vdp_write )
case 0x15:
case 0x17:
// accessed by either segapsg_device or sn76496_device
- space.machine().device<sn76496_base_device>("snsnd")->write(space, 0, data);
+ m_snsnd->write(space, 0, data);
break;
default:
@@ -1103,7 +1103,7 @@ DRIVER_INIT_MEMBER(md_base_state, megadrie)
void md_base_state::screen_eof_megadriv(screen_device &screen, bool state)
{
- if (m_io_reset->read_safe(0x00) & 0x01)
+ if (m_io_reset && m_io_reset->read() & 0x01)
m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
// rising edge
diff --git a/src/mame/machine/slikshot.c b/src/mame/machine/slikshot.c
index 5edf4f56311..1c2ad7ac8cd 100644
--- a/src/mame/machine/slikshot.c
+++ b/src/mame/machine/slikshot.c
@@ -546,8 +546,8 @@ UINT32 itech8_state::screen_update_slikshot(screen_device &screen, bitmap_rgb32
screen_update_2page(screen, bitmap, cliprect);
/* add the current X,Y positions to the list */
- m_xbuffer[m_ybuffer_next % YBUFFER_COUNT] = ioport("FAKEX")->read_safe(0);
- m_ybuffer[m_ybuffer_next % YBUFFER_COUNT] = ioport("FAKEY")->read_safe(0);
+ m_xbuffer[m_ybuffer_next % YBUFFER_COUNT] = m_fakex->read();
+ m_ybuffer[m_ybuffer_next % YBUFFER_COUNT] = m_fakey->read();
m_ybuffer_next++;
/* determine where to draw the starting point */
diff --git a/src/mame/video/itech8.c b/src/mame/video/itech8.c
index a96770f90c5..42a80eb9291 100644
--- a/src/mame/video/itech8.c
+++ b/src/mame/video/itech8.c
@@ -417,7 +417,6 @@ TIMER_CALLBACK_MEMBER(itech8_state::blitter_done)
READ8_MEMBER(itech8_state::blitter_r)
{
int result = m_blitter_data[offset / 2];
- static const char *const portnames[] = { "AN_C", "AN_D", "AN_E", "AN_F" };
/* debugging */
if (FULL_LOGGING) logerror("%04x:blitter_r(%02x)\n", space.device().safe_pcbase(), offset / 2);
@@ -437,7 +436,7 @@ READ8_MEMBER(itech8_state::blitter_r)
/* a read from offsets 12-15 return input port values */
if (offset >= 12 && offset <= 15)
- result = ioport(portnames[offset - 12])->read_safe(0x00);
+ result = m_an[offset - 12] ? m_an[offset - 12]->read() : 0;
return result;
}