summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Wilbert Pol <wilbertpol@users.noreply.github.com>2015-08-14 11:49:04 +0200
committer Wilbert Pol <wilbertpol@users.noreply.github.com>2015-08-14 11:49:04 +0200
commit6666b78c9489d99fa1d461ca7292e23f894d45b1 (patch)
tree9746a653ef27d40d5753a7cd00fe5123559b66c3 /src
parent792a6c3b1197b153cc44711d89c40bb1f80269a1 (diff)
astrocde.c: reduce tagmap lookups (nw)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/astrocde.c31
-rw-r--r--src/mame/includes/astrocde.h41
-rw-r--r--src/mame/video/astrocde.c26
3 files changed, 74 insertions, 24 deletions
diff --git a/src/mame/drivers/astrocde.c b/src/mame/drivers/astrocde.c
index 3b5544c8785..64a0f4ec61f 100644
--- a/src/mame/drivers/astrocde.c
+++ b/src/mame/drivers/astrocde.c
@@ -231,10 +231,11 @@ WRITE8_MEMBER(astrocde_state::seawolf2_sound_2_w)// Port 41
*
*************************************/
+IOPORT_ARRAY_MEMBER(astrocde_state::trackball_inputs) { "TRACKX2", "TRACKY2", "TRACKX1", "TRACKY1" };
+
CUSTOM_INPUT_MEMBER(astrocde_state::ebases_trackball_r)
{
- static const char *const names[] = { "TRACKX2", "TRACKY2", "TRACKX1", "TRACKY1" };
- return ioport(names[m_input_select])->read();
+ return m_trackball[m_input_select]->read();
}
@@ -261,7 +262,7 @@ READ8_MEMBER(astrocde_state::spacezap_io_r)
{
coin_counter_w(machine(), 0, (offset >> 8) & 1);
coin_counter_w(machine(), 1, (offset >> 9) & 1);
- return ioport("P3HANDLE")->read_safe(0xff);
+ return m_p3handle ? m_p3handle->read() : 0xff;
}
@@ -405,15 +406,15 @@ WRITE8_MEMBER(astrocde_state::profpac_banksw_w)
m_profpac_bank = data;
/* set the main banking */
- prog_space.install_read_bank(0x4000, 0xbfff, "bank1");
- membank("bank1")->set_base(memregion("user1")->base() + 0x8000 * bank);
+ prog_space.install_read_bank(0x4000, 0xbfff, m_bank1);
+ m_bank1->set_base(m_user1->base() + 0x8000 * bank);
/* bank 0 reads video RAM in the 4000-7FFF range */
if (bank == 0)
prog_space.install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(astrocde_state::profpac_videoram_r), this));
/* if we have a 640k EPROM board, map that on top of the 4000-7FFF range if specified */
- if ((data & 0x80) && memregion("user2")->base() != NULL)
+ if ((data & 0x80) && m_user2->base() != NULL)
{
/* Note: There is a jumper which could change the base offset to 0xa8 instead */
bank = data - 0x80;
@@ -421,8 +422,16 @@ WRITE8_MEMBER(astrocde_state::profpac_banksw_w)
/* if the bank is in range, map the appropriate bank */
if (bank < 0x28)
{
- prog_space.install_read_bank(0x4000, 0x7fff, "bank2");
- membank("bank2")->set_base(memregion("user2")->base() + 0x4000 * bank);
+ if (m_bank2)
+ {
+ prog_space.install_read_bank(0x4000, 0x7fff, m_bank2);
+ }
+ else
+ {
+ prog_space.install_read_bank(0x4000, 0x7fff, "bank2");
+ m_bank2.findit();
+ }
+ m_bank2->set_base(m_user2->base() + 0x4000 * bank);
}
else
prog_space.unmap_read(0x4000, 0x7fff);
@@ -456,10 +465,12 @@ READ8_MEMBER(astrocde_state::demndrgn_io_r)
}
+IOPORT_ARRAY_MEMBER(astrocde_state::joystick_inputs) { "MOVEX", "MOVEY" };
+
+
CUSTOM_INPUT_MEMBER(astrocde_state::demndragn_joystick_r)
{
- static const char *const names[] = { "MOVEX", "MOVEY" };
- return ioport(names[m_input_select])->read();
+ return m_joystick[m_input_select]->read();
}
diff --git a/src/mame/includes/astrocde.h b/src/mame/includes/astrocde.h
index fe2c249de99..2b3abf7ff78 100644
--- a/src/mame/includes/astrocde.h
+++ b/src/mame/includes/astrocde.h
@@ -37,7 +37,26 @@ public:
m_astrocade_sound1(*this, "astrocade1"),
m_videoram(*this, "videoram"),
m_protected_ram(*this, "protected_ram"),
- m_screen(*this, "screen") { }
+ m_screen(*this, "screen"),
+ m_bank1(*this, "bank1"),
+ m_bank2(*this, "bank2"),
+ m_user1(*this, "user1"),
+ m_user2(*this, "user2"),
+ m_p1handle(*this, "P1HANDLE"),
+ m_p2handle(*this, "P2HANDLE"),
+ m_p3handle(*this, "P3HANDLE"),
+ m_p4handle(*this, "P4HANDLE"),
+ m_keypad0(*this, "KEYPAD0"),
+ m_keypad1(*this, "KEYPAD1"),
+ m_keypad2(*this, "KEYPAD2"),
+ m_keypad3(*this, "KEYPAD3"),
+ m_p1_knob(*this, "P1_KNOB"),
+ m_p2_knob(*this, "P2_KNOB"),
+ m_p3_knob(*this, "P3_KNOB"),
+ m_p4_knob(*this, "P4_KNOB"),
+ m_trackball(*this, trackball_inputs),
+ m_joystick(*this, joystick_inputs)
+ { }
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_subcpu;
@@ -47,6 +66,26 @@ public:
optional_shared_ptr<UINT8> m_videoram;
optional_shared_ptr<UINT8> m_protected_ram;
required_device<screen_device> m_screen;
+ optional_memory_bank m_bank1;
+ optional_memory_bank m_bank2;
+ optional_memory_region m_user1;
+ optional_memory_region m_user2;
+ optional_ioport m_p1handle;
+ optional_ioport m_p2handle;
+ optional_ioport m_p3handle;
+ optional_ioport m_p4handle;
+ optional_ioport m_keypad0;
+ optional_ioport m_keypad1;
+ optional_ioport m_keypad2;
+ optional_ioport m_keypad3;
+ optional_ioport m_p1_knob;
+ optional_ioport m_p2_knob;
+ optional_ioport m_p3_knob;
+ optional_ioport m_p4_knob;
+ DECLARE_IOPORT_ARRAY(trackball_inputs);
+ optional_ioport_array<4> m_trackball;
+ DECLARE_IOPORT_ARRAY(joystick_inputs);
+ optional_ioport_array<2> m_joystick;
UINT8 m_video_config;
UINT8 m_sparkle[4];
diff --git a/src/mame/video/astrocde.c b/src/mame/video/astrocde.c
index 962de8e7e2c..f2eac703d42 100644
--- a/src/mame/video/astrocde.c
+++ b/src/mame/video/astrocde.c
@@ -491,51 +491,51 @@ READ8_MEMBER(astrocde_state::astrocade_data_chip_register_r)
break;
case 0x10: /* player 1 handle */
- result = ioport("P1HANDLE")->read_safe(0xff);
+ result = m_p1handle? m_p1handle->read() : 0xff;
break;
case 0x11: /* player 2 handle */
- result = ioport("P2HANDLE")->read_safe(0xff);
+ result = m_p2handle? m_p2handle->read() : 0xff;
break;
case 0x12: /* player 3 handle */
- result = ioport("P3HANDLE")->read_safe(0xff);
+ result = m_p3handle? m_p3handle->read() : 0xff;
break;
case 0x13: /* player 4 handle */
- result = ioport("P4HANDLE")->read_safe(0xff);
+ result = m_p4handle? m_p4handle->read() : 0xff;
break;
case 0x14: /* keypad column 0 */
- result = ioport("KEYPAD0")->read_safe(0xff);
+ result = m_keypad0 ? m_keypad0->read() : 0xff;
break;
case 0x15: /* keypad column 1 */
- result = ioport("KEYPAD1")->read_safe(0xff);
+ result = m_keypad1 ? m_keypad1->read() : 0xff;
break;
case 0x16: /* keypad column 2 */
- result = ioport("KEYPAD2")->read_safe(0xff);
+ result = m_keypad2 ? m_keypad2->read() : 0xff;
break;
case 0x17: /* keypad column 3 */
- result = ioport("KEYPAD3")->read_safe(0xff);
+ result = m_keypad3 ? m_keypad3->read() : 0xff;
break;
case 0x1c: /* player 1 knob */
- result = ioport("P1_KNOB")->read_safe(0xff);
+ result = m_p1_knob ? m_p1_knob->read() : 0xff;
break;
case 0x1d: /* player 2 knob */
- result = ioport("P2_KNOB")->read_safe(0xff);
+ result = m_p2_knob ? m_p2_knob->read() : 0xff;
break;
case 0x1e: /* player 3 knob */
- result = ioport("P3_KNOB")->read_safe(0xff);
+ result = m_p3_knob ? m_p3_knob->read() : 0xff;
break;
case 0x1f: /* player 4 knob */
- result = ioport("P4_KNOB")->read_safe(0xff);
+ result = m_p4_knob ? m_p4_knob->read() : 0xff;
break;
}
@@ -605,7 +605,7 @@ WRITE8_MEMBER(astrocde_state::astrocade_data_chip_register_w)
case 0x17: /* noise volume register */
case 0x18: /* sound block transfer */
if (m_video_config & AC_SOUND_PRESENT)
- machine().device<astrocade_device>("astrocade1")->astrocade_sound_w(space, offset, data);
+ m_astrocade_sound1->astrocade_sound_w(space, offset, data);
break;
case 0x19: /* expand register */