summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2017-05-16 18:58:19 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2017-05-16 18:58:19 +0200
commit6c781faf7b4727056b84b3217ca42faf77b701c8 (patch)
tree6939efb6f47baabab13fc06f8b16d7b6ab0950dd
parent23356c8fa00d83377b2fadba1bea5375f5664bfa (diff)
williams.cpp: reduced tagmap lookups, identified some dips for jin (nw)
-rw-r--r--src/mame/drivers/williams.cpp43
-rw-r--r--src/mame/includes/williams.h10
-rw-r--r--src/mame/machine/williams.cpp61
3 files changed, 47 insertions, 67 deletions
diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp
index d2c34b85034..e5eeaf562e6 100644
--- a/src/mame/drivers/williams.cpp
+++ b/src/mame/drivers/williams.cpp
@@ -818,27 +818,26 @@ static INPUT_PORTS_START( jin )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_START("IN1")
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x07, "A 2C/1C B 1C/3C" )
+ PORT_DIPSETTING( 0x06, "A 2C/1C B 1C/1C" )
+ PORT_DIPSETTING( 0x05, "A 1C/3C B 1C/3C" )
+ PORT_DIPSETTING( 0x04, "A 1C/3C B 1C/1C" )
+ PORT_DIPSETTING( 0x03, "A 1C/2C B 1C/3C" )
+ PORT_DIPSETTING( 0x02, "A 1C/2C B 1C/1C" )
+ PORT_DIPSETTING( 0x01, "A 1C/1C B 1C/3C" )
+ PORT_DIPSETTING( 0x00, "A 1C/1C B 1C/1C" )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x00, "3" )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x60, 0x60, "Level completed" )
+ PORT_DIPSETTING( 0x60, "85%" )
+ PORT_DIPSETTING( 0x40, "75%" )
+ PORT_DIPSETTING( 0x20, "65%" )
+ PORT_DIPSETTING( 0x00, "55%" )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -847,16 +846,14 @@ static INPUT_PORTS_START( jin )
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) // coins don't work if you change this..
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 ) // where is coin 2?
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h
index 6ce5e45a8db..567013ca6bc 100644
--- a/src/mame/includes/williams.h
+++ b/src/mame/includes/williams.h
@@ -30,7 +30,10 @@ public:
m_watchdog(*this, "watchdog"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
- m_generic_paletteram_8(*this, "paletteram") { }
+ m_generic_paletteram_8(*this, "paletteram"),
+ m_pia_0(*this, "pia_0"),
+ m_pia_1(*this, "pia_1"),
+ m_pia_2(*this, "pia_2") { }
enum
{
@@ -120,6 +123,9 @@ public:
required_device<screen_device> m_screen;
optional_device<palette_device> m_palette;
optional_shared_ptr<uint8_t> m_generic_paletteram_8;
+ required_device<pia6821_device> m_pia_0;
+ required_device<pia6821_device> m_pia_1;
+ required_device<pia6821_device> m_pia_2;
};
@@ -129,10 +135,12 @@ public:
blaster_state(const machine_config &mconfig, device_type type, const char *tag)
: williams_state(mconfig, type, tag),
m_soundcpu_b(*this, "soundcpu_b"),
+ m_pia_2b(*this, "pia_2b"),
m_blaster_palette_0(*this, "blaster_pal0"),
m_blaster_scanline_control(*this, "blaster_scan") { }
optional_device<cpu_device> m_soundcpu_b;
+ optional_device<pia6821_device> m_pia_2b;
required_shared_ptr<uint8_t> m_blaster_palette_0;
required_shared_ptr<uint8_t> m_blaster_scanline_control;
diff --git a/src/mame/machine/williams.cpp b/src/mame/machine/williams.cpp
index 88357e63dfd..f70daa8a79c 100644
--- a/src/mame/machine/williams.cpp
+++ b/src/mame/machine/williams.cpp
@@ -18,11 +18,10 @@
TIMER_DEVICE_CALLBACK_MEMBER(williams_state::williams_va11_callback)
{
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
int scanline = param;
/* the IRQ signal comes into CB1, and is set to VA11 */
- pia_1->cb1_w(scanline & 0x20);
+ m_pia_1->cb1_w(scanline & 0x20);
/* set a timer for the next update */
scanline += 0x20;
@@ -33,19 +32,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams_state::williams_va11_callback)
TIMER_CALLBACK_MEMBER(williams_state::williams_count240_off_callback)
{
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
-
/* the COUNT240 signal comes into CA1, and is set to the logical AND of VA10-VA13 */
- pia_1->ca1_w(0);
+ m_pia_1->ca1_w(0);
}
TIMER_DEVICE_CALLBACK_MEMBER(williams_state::williams_count240_callback)
{
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
-
/* the COUNT240 signal comes into CA1, and is set to the logical AND of VA10-VA13 */
- pia_1->ca1_w(1);
+ m_pia_1->ca1_w(1);
/* set a timer to turn it off once the scanline counter resets */
machine().scheduler().timer_set(m_screen->time_until_pos(0), timer_expired_delegate(FUNC(williams_state::williams_count240_off_callback),this));
@@ -57,8 +52,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams_state::williams_count240_callback)
WRITE_LINE_MEMBER(williams_state::williams_main_irq)
{
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
- int combined_state = pia_1->irq_a_state() | pia_1->irq_b_state();
+ int combined_state = m_pia_1->irq_a_state() | m_pia_1->irq_b_state();
/* IRQ to the main CPU */
m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
@@ -74,8 +68,7 @@ WRITE_LINE_MEMBER(williams_state::williams_main_firq)
WRITE_LINE_MEMBER(williams_state::williams_snd_irq)
{
- pia6821_device *pia_2 = machine().device<pia6821_device>("pia_2");
- int combined_state = pia_2->irq_a_state() | pia_2->irq_b_state();
+ int combined_state = m_pia_2->irq_a_state() | m_pia_2->irq_b_state();
/* IRQ to the sound CPU */
m_soundcpu->set_input_line(M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
@@ -83,8 +76,7 @@ WRITE_LINE_MEMBER(williams_state::williams_snd_irq)
/* Same as above, but for second sound board */
WRITE_LINE_MEMBER(blaster_state::williams_snd_irq_b)
{
- pia6821_device *pia_2 = machine().device<pia6821_device>("pia_2b");
- int combined_state = pia_2->irq_a_state() | pia_2->irq_b_state();
+ int combined_state = m_pia_2b->irq_a_state() | m_pia_2b->irq_b_state();
/* IRQ to the sound CPU */
m_soundcpu_b->set_input_line(M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
@@ -100,9 +92,7 @@ WRITE_LINE_MEMBER(blaster_state::williams_snd_irq_b)
WRITE_LINE_MEMBER(williams2_state::mysticm_main_irq)
{
- pia6821_device *pia_0 = machine().device<pia6821_device>("pia_0");
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
- int combined_state = pia_0->irq_b_state() | pia_1->irq_a_state() | pia_1->irq_b_state();
+ int combined_state = m_pia_0->irq_b_state() | m_pia_1->irq_a_state() | m_pia_1->irq_b_state();
/* IRQ to the main CPU */
m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
@@ -111,9 +101,7 @@ WRITE_LINE_MEMBER(williams2_state::mysticm_main_irq)
WRITE_LINE_MEMBER(williams2_state::tshoot_main_irq)
{
- pia6821_device *pia_0 = machine().device<pia6821_device>("pia_0");
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
- int combined_state = pia_0->irq_a_state() | pia_0->irq_b_state() | pia_1->irq_a_state() | pia_1->irq_b_state();
+ int combined_state = m_pia_0->irq_a_state() | m_pia_0->irq_b_state() | m_pia_1->irq_a_state() | m_pia_1->irq_b_state();
/* IRQ to the main CPU */
m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
@@ -168,13 +156,11 @@ MACHINE_RESET_MEMBER(williams_state,williams)
TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_va11_callback)
{
- pia6821_device *pia_0 = machine().device<pia6821_device>("pia_0");
- pia6821_device *pia_1 = machine().device<pia6821_device>("pia_1");
int scanline = param;
/* the IRQ signal comes into CB1, and is set to VA11 */
- pia_0->cb1_w(scanline & 0x20);
- pia_1->ca1_w(scanline & 0x20);
+ m_pia_0->cb1_w(scanline & 0x20);
+ m_pia_1->ca1_w(scanline & 0x20);
/* set a timer for the next update */
scanline += 0x20;
@@ -185,19 +171,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_va11_callback)
TIMER_CALLBACK_MEMBER(williams2_state::williams2_endscreen_off_callback)
{
- pia6821_device *pia_0 = machine().device<pia6821_device>("pia_0");
-
/* the /ENDSCREEN signal comes into CA1 */
- pia_0->ca1_w(1);
+ m_pia_0->ca1_w(1);
}
TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_endscreen_callback)
{
- pia6821_device *pia_0 = machine().device<pia6821_device>("pia_0");
-
/* the /ENDSCREEN signal comes into CA1 */
- pia_0->ca1_w(0);
+ m_pia_0->ca1_w(0);
/* set a timer to turn it off once the scanline counter resets */
machine().scheduler().timer_set(m_screen->time_until_pos(8), timer_expired_delegate(FUNC(williams2_state::williams2_endscreen_off_callback),this));
@@ -293,10 +275,8 @@ WRITE8_MEMBER(williams2_state::williams2_bank_select_w)
TIMER_CALLBACK_MEMBER(williams_state::williams_deferred_snd_cmd_w)
{
- pia6821_device *pia_2 = machine().device<pia6821_device>("pia_2");
-
- pia_2->portb_w(param);
- pia_2->cb1_w((param == 0xff) ? 0 : 1);
+ m_pia_2->portb_w(param);
+ m_pia_2->cb1_w((param == 0xff) ? 0 : 1);
}
WRITE8_MEMBER(williams_state::williams_snd_cmd_w)
@@ -312,9 +292,7 @@ WRITE8_MEMBER(williams_state::playball_snd_cmd_w)
TIMER_CALLBACK_MEMBER(williams2_state::williams2_deferred_snd_cmd_w)
{
- pia6821_device *pia_2 = machine().device<pia6821_device>("pia_2");
-
- pia_2->porta_w(param);
+ m_pia_2->porta_w(param);
}
WRITE8_MEMBER(williams2_state::williams2_snd_cmd_w)
@@ -598,13 +576,11 @@ WRITE8_MEMBER(blaster_state::blaster_bank_select_w)
TIMER_CALLBACK_MEMBER(blaster_state::blaster_deferred_snd_cmd_w)
{
- pia6821_device *pia_2l = machine().device<pia6821_device>("pia_2");
- pia6821_device *pia_2r = machine().device<pia6821_device>("pia_2b");
uint8_t l_data = param | 0x80;
uint8_t r_data = (param >> 1 & 0x40) | (param & 0x3f) | 0x80;
- pia_2l->portb_w(l_data); pia_2l->cb1_w((l_data == 0xff) ? 0 : 1);
- pia_2r->portb_w(r_data); pia_2r->cb1_w((r_data == 0xff) ? 0 : 1);
+ m_pia_2->portb_w(l_data); m_pia_2->cb1_w((l_data == 0xff) ? 0 : 1);
+ m_pia_2b->portb_w(r_data); m_pia_2b->cb1_w((r_data == 0xff) ? 0 : 1);
}
@@ -685,8 +661,7 @@ MACHINE_RESET_MEMBER(joust2_state,joust2)
TIMER_CALLBACK_MEMBER(joust2_state::joust2_deferred_snd_cmd_w)
{
- pia6821_device *pia_2 = machine().device<pia6821_device>("pia_2");
- pia_2->porta_w(param & 0xff);
+ m_pia_2->porta_w(param & 0xff);
}