diff options
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 |
commit | 6c781faf7b4727056b84b3217ca42faf77b701c8 (patch) | |
tree | 6939efb6f47baabab13fc06f8b16d7b6ab0950dd | |
parent | 23356c8fa00d83377b2fadba1bea5375f5664bfa (diff) |
williams.cpp: reduced tagmap lookups, identified some dips for jin (nw)
-rw-r--r-- | src/mame/drivers/williams.cpp | 43 | ||||
-rw-r--r-- | src/mame/includes/williams.h | 10 | ||||
-rw-r--r-- | src/mame/machine/williams.cpp | 61 |
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); } |