From 1e095c9627d5cfa31431f6173bb37cb481203cb8 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 24 Aug 2023 22:17:35 +0200 Subject: [PATCH] various drivers: another batch of output().set_value() removals --- src/mame/atari/cops.cpp | 68 ++++++++++++++++++++++------------ src/mame/barcrest/mpu4.cpp | 3 +- src/mame/barcrest/mpu4.h | 3 ++ src/mame/exidy/exidy.cpp | 8 +++- src/mame/konami/djmain.cpp | 30 ++++++++++++--- src/mame/konami/twinkle.cpp | 53 ++++++++++++++++++-------- src/mame/merit/meritm.cpp | 22 +++++++---- src/mame/midway/mcr.cpp | 2 +- src/mame/midway/mcr.h | 4 +- src/mame/midway/mcr_m.cpp | 2 + src/mame/midway/midvunit.cpp | 3 +- src/mame/midway/midvunit.h | 2 + src/mame/midway/midyunit.h | 19 ++++++++++ src/mame/midway/midyunit_m.cpp | 35 ++++++++++------- src/mame/midway/seattle.cpp | 9 +++-- src/mame/namco/namcos12.cpp | 20 ++++++++-- src/mame/sega/segaorun.cpp | 35 ++++++++++------- src/mame/sega/segaorun.h | 13 +++++++ 18 files changed, 238 insertions(+), 93 deletions(-) diff --git a/src/mame/atari/cops.cpp b/src/mame/atari/cops.cpp index 2ccd7709112..6f051c9ef7e 100644 --- a/src/mame/atari/cops.cpp +++ b/src/mame/atari/cops.cpp @@ -68,6 +68,16 @@ public: , m_switches(*this, "SW%u", 0U) , m_steer(*this, "STEER") , m_digits(*this, "digit%u", 0U) + , m_offroad_right_lamp(*this, "Offroad Right %u Lamp", 1U) + , m_offroad_left_lamp(*this, "Offroad Left %u Lamp", 1U) + , m_damage_lamp(*this, "Damage Lamp") + , m_stop_lamp(*this, "Stop Lamp") + , m_gun_active_right_lamp(*this, "Gun Active Right Lamp") + , m_gun_active_left_lamp(*this, "Gun Active Left Lamp") + , m_vest_hit_lamp(*this, "Vest Hit %u Lamp", 1U) + , m_flash_red_lamp(*this, "Flash Red Lamp") + , m_flash_blue_lamp(*this, "Flash Blue Lamp") + , m_bullet_lamp(*this, "Bullet Lamp %u", 1U) , m_irq(0) { } @@ -94,6 +104,16 @@ private: required_ioport_array<3> m_switches; optional_ioport m_steer; output_finder<16> m_digits; + output_finder<4> m_offroad_right_lamp; + output_finder<4> m_offroad_left_lamp; + output_finder<> m_damage_lamp; + output_finder<> m_stop_lamp; + output_finder<> m_gun_active_right_lamp; + output_finder<> m_gun_active_left_lamp; + output_finder<3> m_vest_hit_lamp; + output_finder<> m_flash_red_lamp; + output_finder<> m_flash_blue_lamp; + output_finder<6> m_bullet_lamp; // screen updates [[maybe_unused]] uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -654,23 +674,19 @@ void cops_state::io1_w(offs_t offset, uint8_t data) m_lcd_data_h = data; break; case 0x04: /* WOP4 */ - output().set_value("Offroad Right 4 Lamp", data & 0x80); - output().set_value("Offroad Right 3 Lamp", data & 0x40); - output().set_value("Offroad Right 2 Lamp", data & 0x20); - output().set_value("Offroad Right 1 Lamp", data & 0x10); - output().set_value("Offroad Left 4 Lamp", data & 0x08); - output().set_value("Offroad Left 3 Lamp", data & 0x04); - output().set_value("Offroad Left 2 Lamp", data & 0x02); - output().set_value("Offroad Left 1 Lamp", data & 0x01); + for (int i = 3; i >= 0; i--) + m_offroad_right_lamp[i] = BIT(data, i + 4); + for (int i = 3; i >= 0; i--) + m_offroad_left_lamp[i] = BIT(data, i); break; case 0x05: /* WOP5 */ - output().set_value("Damage Lamp", data & 0x80); - output().set_value("Stop Lamp", data & 0x40); - output().set_value("Gun Active Right Lamp", data & 0x20); - output().set_value("Vest Hit 2 Lamp", data & 0x10); - output().set_value("Vest Hit 3 Lamp", data & 0x04); - output().set_value("Gun Active Left Lamp", data & 0x02); - output().set_value("Vest Hit 1 Lamp", data & 0x01); + m_damage_lamp = BIT(data, 7); + m_stop_lamp = BIT(data, 6); + m_gun_active_right_lamp = BIT(data, 5); + m_vest_hit_lamp[1] = BIT(data, 4); + m_vest_hit_lamp[2] = BIT(data, 2); + m_gun_active_left_lamp = BIT(data, 1); + m_vest_hit_lamp[0] = BIT(data, 0); break; case 0x06: /* WOP6 */ logerror("WOP6: data = %02x\n", data); @@ -704,17 +720,13 @@ void cops_state::io2_w(offs_t offset, uint8_t data) switch( offset & 0x0f ) { case 0x02: - output().set_value("Flash Red Lamp", data & 0x01); - output().set_value("Flash Blue Lamp", data & 0x80); + m_flash_red_lamp = BIT(data, 0); + m_flash_blue_lamp = BIT(data, 7); if ( data & ~0x91 ) logerror("Unknown io2_w, offset = %02x, data = %02x\n", offset, data); break; case 0x04: - output().set_value("Bullet Lamp 6", data & 0x20); - output().set_value("Bullet Lamp 5", data & 0x10); - output().set_value("Bullet Lamp 4", data & 0x08); - output().set_value("Bullet Lamp 3", data & 0x04); - output().set_value("Bullet Lamp 2", data & 0x02); - output().set_value("Bullet Lamp 1", data & 0x01); + for (int i = 5; i >= 0; i--) + m_bullet_lamp[i] = BIT(data, i); if ( data & ~0x3f ) logerror("Unknown io2_w, offset = %02x, data = %02x\n", offset, data); break; default: @@ -878,6 +890,16 @@ INPUT_PORTS_END void cops_state::machine_start() { m_digits.resolve(); + m_offroad_right_lamp.resolve(); + m_offroad_left_lamp.resolve(); + m_damage_lamp.resolve(); + m_stop_lamp.resolve(); + m_gun_active_right_lamp.resolve(); + m_gun_active_left_lamp.resolve(); + m_vest_hit_lamp.resolve(); + m_flash_red_lamp.resolve(); + m_flash_blue_lamp.resolve(); + m_bullet_lamp.resolve(); m_ld_timer = timer_alloc(FUNC(cops_state::ld_timer_callback), this); diff --git a/src/mame/barcrest/mpu4.cpp b/src/mame/barcrest/mpu4.cpp index 7fc547863e1..24d9589f583 100644 --- a/src/mame/barcrest/mpu4.cpp +++ b/src/mame/barcrest/mpu4.cpp @@ -390,7 +390,7 @@ void mpu4_state::update_meters() break; case FLUTTERBOX: //The backbox fan assembly fits in a reel unit sized box, wired to the remote meter pin, so we can handle it here - output().set_value("flutterbox", data & 0x80); + m_flutterbox = BIT(data, 7); data &= ~0x80; //Strip flutterbox data from meter drives break; } @@ -1880,6 +1880,7 @@ void mpu4_state::mpu4_config_common() m_mpu4leds.resolve(); m_digits.resolve(); m_triacs.resolve(); + m_flutterbox.resolve(); m_ic24_timer = timer_alloc(FUNC(mpu4_state::update_ic24), this); diff --git a/src/mame/barcrest/mpu4.h b/src/mame/barcrest/mpu4.h index 058b604fd54..1bb2ac858e0 100644 --- a/src/mame/barcrest/mpu4.h +++ b/src/mame/barcrest/mpu4.h @@ -158,6 +158,7 @@ public: , m_mpu4leds(*this, "mpu4led%u", 0U) , m_digits(*this, "digit%u", 0U) , m_triacs(*this, "triac%u", 0U) + , m_flutterbox(*this, "flutterbox") { } @@ -459,6 +460,8 @@ protected: output_finder<8> m_triacs; + output_finder<> m_flutterbox; + uint8_t m_mmtr_data = 0; uint8_t m_ay8913_address = 0; uint8_t m_signal_50hz = 0; diff --git a/src/mame/exidy/exidy.cpp b/src/mame/exidy/exidy.cpp index 283b95be821..fa7d1c8d096 100644 --- a/src/mame/exidy/exidy.cpp +++ b/src/mame/exidy/exidy.cpp @@ -188,6 +188,7 @@ public: driver_device(mconfig, type, tag), m_dsw(*this, "DSW"), m_in0(*this, "IN0"), + m_led(*this, "led%u", 0U), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), @@ -217,6 +218,7 @@ protected: required_ioport m_dsw; required_ioport m_in0; + output_finder<2> m_led; required_device m_maincpu; required_device m_gfxdecode; required_device m_screen; @@ -472,8 +474,8 @@ void exidy_state::mtrap_ocl_w(uint8_t data) // Mouse Trap (possibly others) set { *m_sprite_enable = data; - output().set_value("led0", !BIT(data, 2)); - output().set_value("led1", !BIT(data, 4)); + m_led[0] = !BIT(data, 2); + m_led[1] = !BIT(data, 4); } @@ -1457,6 +1459,8 @@ uint32_t exidy_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, void exidy_state::machine_start() { + m_led.resolve(); + for (int i = 0; i < 128; i++) m_collision_timer[i] = timer_alloc(FUNC(exidy_state::latch_collision), this); } diff --git a/src/mame/konami/djmain.cpp b/src/mame/konami/djmain.cpp index b0fb9c0e66d..67294135888 100644 --- a/src/mame/konami/djmain.cpp +++ b/src/mame/konami/djmain.cpp @@ -102,6 +102,12 @@ public: , m_turntable(*this, "TT%u", 1U) , m_sndram(*this, "sndram") , m_leds(*this, "led%u", 0U) + , m_right_red_hlt(*this, "right-red-hlt") + , m_left_red_hlt(*this, "left-red-hlt") + , m_right_blue_hlt(*this, "right-blue-hlt") + , m_left_blue_hlt(*this, "left-blue-hlt") + , m_right_ssr(*this, "right-ssr") + , m_left_ssr(*this, "left-ssr") { } @@ -168,6 +174,12 @@ private: optional_ioport_array<2> m_turntable; required_shared_ptr m_sndram; output_finder<3> m_leds; + output_finder<> m_right_red_hlt; + output_finder<> m_left_red_hlt; + output_finder<> m_right_blue_hlt; + output_finder<> m_left_blue_hlt; + output_finder<> m_right_ssr; + output_finder<> m_left_ssr; int m_sndram_bank = 0; int m_turntable_select = 0; @@ -559,10 +571,10 @@ void djmain_state::light_ctrl_1_w(offs_t offset, uint32_t data, uint32_t mem_mas { if (ACCESSING_BITS_16_31) { - output().set_value("right-red-hlt", !(data & 0x08000000)); // Right red HIGHLIGHT - output().set_value("left-red-hlt", !(data & 0x04000000)); // Left red HIGHLIGHT - output().set_value("left-blue-hlt", !(data & 0x02000000)); // Left blue HIGHLIGHT - output().set_value("right-blue-hlt", !(data & 0x00200000)); // Right blue HIGHLIGHT + m_right_red_hlt = !BIT(data, 27); // Right red HIGHLIGHT + m_left_red_hlt = !BIT(data, 26); // Left red HIGHLIGHT + m_left_blue_hlt = !BIT(data, 25); // Left blue HIGHLIGHT + m_right_blue_hlt = !BIT(data, 21); // Right blue HIGHLIGHT } } @@ -570,8 +582,8 @@ void djmain_state::light_ctrl_2_w(offs_t offset, uint32_t data, uint32_t mem_mas { if (ACCESSING_BITS_16_31) { - output().set_value("left-ssr", !!(data & 0x08000000)); // SSR - output().set_value("right-ssr", !!(data & 0x08000000)); // SSR + m_left_ssr = !!BIT(data, 27); // SSR + m_right_ssr = !!BIT(data, 27); // SSR m_leds[0] = BIT(data, 16); // 1P START m_leds[1] = BIT(data, 17); // 2P START m_leds[2] = BIT(data, 18); // EFFECT @@ -1623,6 +1635,12 @@ void djmain_state::machine_start() hdd->set_user_password(m_ata_user_password); m_leds.resolve(); + m_right_red_hlt.resolve(); + m_left_red_hlt.resolve(); + m_right_blue_hlt.resolve(); + m_left_blue_hlt.resolve(); + m_right_ssr.resolve(); + m_left_ssr.resolve(); save_item(NAME(m_sndram_bank)); save_item(NAME(m_pending_vb_int)); diff --git a/src/mame/konami/twinkle.cpp b/src/mame/konami/twinkle.cpp index 3cd36fd7abb..0a876feeab2 100644 --- a/src/mame/konami/twinkle.cpp +++ b/src/mame/konami/twinkle.cpp @@ -296,11 +296,18 @@ public: m_ata(*this, "ata"), m_dpram(*this, "dpram"), m_waveram(*this, "rfsnd"), + m_in(*this, "IN%u", 0U), m_led_displays(*this, "led%u", 0U), m_spotlights(*this, "spotlight%u", 0U), m_main_leds(*this, "main_led%u", 0U), m_key_leds(*this, "key%u-%u", 1U, 1U), m_spu_leds(*this, "spu_led%u", 0U), + m_player_lamps(*this, "%up", 1U), + m_vefx_lamp(*this, "vefx"), + m_effect_lamp(*this, "effect"), + m_credit_lamp(*this, "credit"), + m_neon_lamp(*this, "neonlamp"), + m_unknown_outputs(*this, "unknown%u", 1U), m_spu_ata_dma(0), m_spu_ata_dmarq(0), m_wave_bank(0) @@ -346,11 +353,19 @@ private: required_device m_dpram; required_shared_ptr m_waveram; + required_ioport_array<6> m_in; + output_finder<9> m_led_displays; output_finder<8> m_spotlights; output_finder<9> m_main_leds; output_finder<2, 7> m_key_leds; output_finder<8> m_spu_leds; + output_finder<2> m_player_lamps; + output_finder<> m_vefx_lamp; + output_finder<> m_effect_lamp; + output_finder<> m_credit_lamp; + output_finder<> m_neon_lamp; + output_finder<4> m_unknown_outputs; uint16_t m_spu_ctrl = 0; // SPU board control register uint32_t m_spu_ata_dma = 0; @@ -545,6 +560,12 @@ void twinkle_state::machine_start() m_main_leds.resolve(); m_key_leds.resolve(); m_spu_leds.resolve(); + m_player_lamps.resolve(); + m_vefx_lamp.resolve(); + m_effect_lamp.resolve(); + m_credit_lamp.resolve(); + m_neon_lamp.resolve(); + m_unknown_outputs.resolve(); save_item(NAME(m_spu_ctrl)); save_item(NAME(m_spu_ata_dma)); @@ -591,11 +612,11 @@ void twinkle_state::twinkle_io_w(offs_t offset, uint8_t data) break; case 0x37: - output().set_value("1p", (~data >> 0) & 1); - output().set_value("2p", (~data >> 1) & 1); - output().set_value("vefx", (~data >> 2) & 1); - output().set_value("effect", (~data >> 3) & 1); - output().set_value("credit", (~data >> 4) & 1); + m_player_lamps[0] = BIT(~data, 0); + m_player_lamps[1] = BIT(~data, 1); + m_vefx_lamp = BIT(~data, 2); + m_effect_lamp = BIT(~data, 3); + m_credit_lamp = BIT(~data, 4); if ((data & 0xe0) != 0xe0) { @@ -627,9 +648,9 @@ void twinkle_state::twinkle_io_w(offs_t offset, uint8_t data) break; case 0x8f: - output().set_value( "neonlamp", ( ~data >> 0 ) & 1 ); - output().set_value( "unknown1", ( ~data >> 1 ) & 1 ); - output().set_value( "unknown2", ( ~data >> 2 ) & 1 ); + m_neon_lamp = BIT(~data, 0); + m_unknown_outputs[0] = BIT(~data, 1); + m_unknown_outputs[1] = BIT(~data, 2); if( ( data & 0xf8 ) != 0xf8 ) { @@ -660,27 +681,27 @@ uint8_t twinkle_state::twinkle_io_r(offs_t offset) switch( m_io_offset ) { case 0x07: - data = ioport( "IN0" )->read(); + data = m_in[0]->read(); break; case 0x0f: - data = ioport( "IN1" )->read(); + data = m_in[1]->read(); break; case 0x17: - data = ioport( "IN2" )->read(); + data = m_in[2]->read(); break; case 0x1f: - data = ioport( "IN3" )->read(); + data = m_in[3]->read(); break; case 0x27: - data = ioport( "IN4" )->read(); + data = m_in[4]->read(); break; case 0x2f: - data = ioport( "IN5" )->read(); + data = m_in[5]->read(); break; default: @@ -840,8 +861,8 @@ void twinkle_state::key_led_w(uint16_t data) m_key_leds[1][4] = BIT(data, 11); m_key_leds[1][5] = BIT(data, 12); m_key_leds[1][6] = BIT(data, 13); - output().set_value("unknown3", (data >> 14) & 1); - output().set_value("unknown4", (data >> 15) & 1); + m_unknown_outputs[2] = BIT(data, 14); + m_unknown_outputs[3] = BIT(data, 15); } void twinkle_state::serial_w(uint16_t data) diff --git a/src/mame/merit/meritm.cpp b/src/mame/merit/meritm.cpp index 532630498a2..c1d831d5cb5 100644 --- a/src/mame/merit/meritm.cpp +++ b/src/mame/merit/meritm.cpp @@ -206,7 +206,10 @@ public: m_maincpu(*this, "maincpu"), m_banks(*this, "bank%u", 0U), m_region_maincpu(*this, "maincpu"), - m_region_extra(*this, "extra") + m_region_extra(*this, "extra"), + m_p1_disc_lamp(*this, "P1 DISC %u LAMP", 1U), + m_p1_play_lamp(*this, "P1 PLAY LAMP"), + m_p1_cancel_lamp(*this, "P1 CANCEL LAMP") { } void init_megat3te(); @@ -232,6 +235,9 @@ private: required_memory_region m_region_maincpu; optional_memory_region m_region_extra; std::unique_ptr m_ram; + output_finder<5> m_p1_disc_lamp; + output_finder<> m_p1_play_lamp; + output_finder<> m_p1_cancel_lamp; int m_vint; int m_interrupt_vdp0_state; @@ -875,13 +881,10 @@ uint8_t meritm_state::_8255_port_c_r() void meritm_state::crt250_port_b_w(uint8_t data) { //popmessage("Lamps: %d %d %d %d %d %d %d", BIT(data,0), BIT(data,1), BIT(data,2), BIT(data,3), BIT(data,4), BIT(data,5), BIT(data,6) ); - output().set_value("P1 DISC 1 LAMP", !BIT(data,0)); - output().set_value("P1 DISC 2 LAMP", !BIT(data,1)); - output().set_value("P1 DISC 3 LAMP", !BIT(data,2)); - output().set_value("P1 DISC 4 LAMP", !BIT(data,3)); - output().set_value("P1 DISC 5 LAMP", !BIT(data,4)); - output().set_value("P1 PLAY LAMP", !BIT(data,5)); - output().set_value("P1 CANCEL LAMP", !BIT(data,6)); + for (int i = 0; i < 5; i++) + m_p1_disc_lamp[i] = !BIT(data, i); + m_p1_play_lamp = !BIT(data, 5); + m_p1_cancel_lamp = !BIT(data, 6); } /************************************* @@ -1042,6 +1045,9 @@ MACHINE_START_MEMBER(meritm_state, common) void meritm_state::machine_start() { + m_p1_disc_lamp.resolve(); + m_p1_play_lamp.resolve(); + m_p1_cancel_lamp.resolve(); m_banks[0]->configure_entries(0, 8, m_region_maincpu->base(), 0x10000); m_bank = 0xff; crt250_switch_banks(); diff --git a/src/mame/midway/mcr.cpp b/src/mame/midway/mcr.cpp index 25ec801f5ba..e5849765a78 100644 --- a/src/mame/midway/mcr.cpp +++ b/src/mame/midway/mcr.cpp @@ -583,7 +583,7 @@ void mcr_state::dotron_op4_w(uint8_t data) */ /* bit 7 = FL1 (J1-3) on flasher control board */ /* bit 6 = FL0 (J1-4) on flasher control board */ - output().set_value("backlight", (data >> 6) & 1); + m_backlight = BIT(data, 6); /* Lamp Sequencer: diff --git a/src/mame/midway/mcr.h b/src/mame/midway/mcr.h index 87b48112dd3..7bfd6a194f6 100644 --- a/src/mame/midway/mcr.h +++ b/src/mame/midway/mcr.h @@ -49,7 +49,8 @@ public: m_squawk_n_talk(*this, "snt"), m_samples(*this, "samples"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_backlight(*this, "backlight") { } void mcr_control_port_w(uint8_t data); @@ -140,6 +141,7 @@ protected: required_device m_palette; private: + output_finder<> m_backlight; uint32_t m_mcr_cpu_board = 0; uint32_t m_mcr_sprite_board = 0; diff --git a/src/mame/midway/mcr_m.cpp b/src/mame/midway/mcr_m.cpp index dd7fa56a6b0..8723811c3d1 100644 --- a/src/mame/midway/mcr_m.cpp +++ b/src/mame/midway/mcr_m.cpp @@ -79,6 +79,8 @@ const z80_daisy_config mcr_ipu_daisy_chain[] = void mcr_state::machine_start() { + m_backlight.resolve(); + save_item(NAME(m_mcr_cocktail_flip)); } diff --git a/src/mame/midway/midvunit.cpp b/src/mame/midway/midvunit.cpp index 0155e4ba473..955591532ef 100644 --- a/src/mame/midway/midvunit.cpp +++ b/src/mame/midway/midvunit.cpp @@ -57,6 +57,7 @@ void midvunit_state::machine_start() save_item(NAME(m_comm_data)); m_optional_drivers.resolve(); + m_wheel_motor.resolve(); } @@ -433,7 +434,7 @@ void midvunit_state::midvunit_wheel_board_w(uint32_t data) logerror("Wheel board (ATODRDZ) = %02X\n", arg); break; case 4: // WHLCTLZ - output().set_value("wheel", arg); + m_wheel_motor = arg; //logerror("Wheel board (U4 74HC574; Motor) = %02X\n", arg); break; case 5: // DRVCTLZ diff --git a/src/mame/midway/midvunit.h b/src/mame/midway/midvunit.h index 49b9191ff4a..398301fc904 100644 --- a/src/mame/midway/midvunit.h +++ b/src/mame/midway/midvunit.h @@ -75,6 +75,7 @@ public: m_dcs(*this, "dcs"), m_generic_paletteram_32(*this, "paletteram"), m_optional_drivers(*this, "lamp%u", 0U), + m_wheel_motor(*this, "wheel"), m_in1(*this, "IN1"), m_dsw(*this, "DSW"), m_motion(*this, "MOTION") { } @@ -191,6 +192,7 @@ private: required_device m_dcs; required_shared_ptr m_generic_paletteram_32; output_finder<8> m_optional_drivers; + output_finder<> m_wheel_motor; optional_ioport m_in1; optional_ioport m_dsw; optional_ioport m_motion; diff --git a/src/mame/midway/midyunit.h b/src/mame/midway/midyunit.h index 2a79314f7d3..e62dcfdfdd4 100644 --- a/src/mame/midway/midyunit.h +++ b/src/mame/midway/midyunit.h @@ -40,6 +40,14 @@ public: , m_gfx_rom(*this, "gfx_rom", 0x800000, ENDIANNESS_BIG) , m_mainram(*this, "mainram") , m_ports(*this, { { "IN0", "IN1", "IN2", "DSW", "UNK0", "UNK1" } }) + , m_left_flash(*this, "Left_Flash_%u", 1U) + , m_right_flash(*this, "Right_Flash_%u", 1U) + , m_left_gun_recoil(*this, "Left_Gun_Recoil") + , m_right_gun_recoil(*this, "Right_Gun_Recoil") + , m_left_gun_green_led(*this, "Left_Gun_Green_Led") + , m_left_gun_red_led(*this, "Left_Gun_Red_Led") + , m_right_gun_green_led(*this, "Right_Gun_Green_Led") + , m_right_gun_red_led(*this, "Right_Gun_Red_Led") { } @@ -74,6 +82,9 @@ public: DECLARE_CUSTOM_INPUT_MEMBER(narc_talkback_data_r); int adpcm_irq_state_r(); +protected: + virtual void machine_start() override; + private: /* protection data types */ struct protection_data @@ -109,6 +120,14 @@ private: memory_share_creator m_gfx_rom; required_shared_ptr m_mainram; optional_ioport_array<6> m_ports; + output_finder<4> m_left_flash; + output_finder<4> m_right_flash; + output_finder<> m_left_gun_recoil; + output_finder<> m_right_gun_recoil; + output_finder<> m_left_gun_green_led; + output_finder<> m_left_gun_red_led; + output_finder<> m_right_gun_green_led; + output_finder<> m_right_gun_red_led; std::unique_ptr m_cmos_ram; std::unique_ptr m_hidden_ram; diff --git a/src/mame/midway/midyunit_m.cpp b/src/mame/midway/midyunit_m.cpp index b1040428400..685fc8f21f9 100644 --- a/src/mame/midway/midyunit_m.cpp +++ b/src/mame/midway/midyunit_m.cpp @@ -21,6 +21,17 @@ #define SOUND_YAWDIM2 6 +void midyunit_state::machine_start() +{ + m_left_flash.resolve(); + m_right_flash.resolve(); + m_left_gun_recoil.resolve(); + m_right_gun_recoil.resolve(); + m_left_gun_green_led.resolve(); + m_left_gun_red_led.resolve(); + m_right_gun_green_led.resolve(); + m_right_gun_red_led.resolve(); +} /************************************* * @@ -139,25 +150,21 @@ void midyunit_state::term2_sound_w(offs_t offset, uint16_t data) /* Flash Lamp Output Data */ if ( ((data & 0x800) != 0x800) && ((data & 0x400) == 0x400 ) ) { - output().set_value("Left_Flash_1", data & 0x1); - output().set_value("Left_Flash_2", (data & 0x2) >> 1); - output().set_value("Left_Flash_3", (data & 0x4) >> 2); - output().set_value("Left_Flash_4", (data & 0x8) >> 3); - output().set_value("Right_Flash_1", (data & 0x10) >> 4); - output().set_value("Right_Flash_2", (data & 0x20) >> 5); - output().set_value("Right_Flash_3", (data & 0x40) >> 6); - output().set_value("Right_Flash_4", (data & 0x80) >> 7); + for (int i = 0; i < 4; i++) + m_left_flash[i] = BIT(data, i); + for (int i = 0; i < 4; i++) + m_right_flash[i] = BIT(data, i + 4); } /* Gun Output Data */ if ( ((data & 0x800) == 0x800) && ((data & 0x400) != 0x400 ) ) { - output().set_value("Left_Gun_Recoil", data & 0x1); - output().set_value("Right_Gun_Recoil", (data & 0x2) >> 1); - output().set_value("Left_Gun_Green_Led", (~data & 0x20) >> 5); - output().set_value("Left_Gun_Red_Led", (~data & 0x10) >> 4); - output().set_value("Right_Gun_Green_Led", (~data & 0x80) >> 7); - output().set_value("Right_Gun_Red_Led", (~data & 0x40) >> 6); + m_left_gun_recoil = BIT(data, 0); + m_right_gun_recoil = BIT(data, 1); + m_left_gun_green_led = BIT(~data, 5); + m_left_gun_red_led = BIT(~data, 4); + m_right_gun_green_led = BIT(~data, 7); + m_right_gun_red_led = BIT(~data, 6); } if (offset == 0) diff --git a/src/mame/midway/seattle.cpp b/src/mame/midway/seattle.cpp index 7955fabb0a5..d9fb1f7de0f 100644 --- a/src/mame/midway/seattle.cpp +++ b/src/mame/midway/seattle.cpp @@ -290,6 +290,7 @@ public: m_io_system(*this, "SYSTEM"), m_io_dips(*this, "DIPS"), m_wheel_driver(*this, "wheel"), + m_wheel_motor(*this, "wheel_motor"), m_lamps(*this, "lamp%u", 0U), m_leds(*this, "led%u", 0U) { @@ -357,7 +358,8 @@ private: optional_ioport m_io_gearshift; optional_ioport m_io_system; optional_ioport m_io_dips; - output_finder<1> m_wheel_driver; + output_finder<> m_wheel_driver; + output_finder<> m_wheel_motor; output_finder<16> m_lamps; output_finder<24> m_leds; @@ -484,6 +486,7 @@ void seattle_state::machine_start() save_item(NAME(m_wheel_calibrated)); m_wheel_driver.resolve(); + m_wheel_motor.resolve(); m_lamps.resolve(); m_leds.resolve(); @@ -752,7 +755,7 @@ void seattle_state::wheel_board_w(offs_t offset, uint32_t data) } else { - m_wheel_driver[0] = arg; // target wheel angle. signed byte. + m_wheel_driver = arg; // target wheel angle. signed byte. m_wheel_force = int8_t(arg); } } @@ -987,7 +990,7 @@ void seattle_state::output_w(uint32_t data) break; case 0x04: - output().set_value("wheel", arg); // wheel motor delta. signed byte. + m_wheel_motor = arg; // wheel motor delta. signed byte. m_wheel_force = int8_t(~arg); //logerror("wheel_board_w: data = %08x op: %02x arg: %02x\n", data, op, arg); break; diff --git a/src/mame/namco/namcos12.cpp b/src/mame/namco/namcos12.cpp index 1359de7f10c..a32d603b28a 100644 --- a/src/mame/namco/namcos12.cpp +++ b/src/mame/namco/namcos12.cpp @@ -1138,6 +1138,8 @@ public: , m_mainbank(*this, "mainbank") , m_lightgun_io(*this, {"LIGHT0_X", "LIGHT0_Y", "LIGHT1_X", "LIGHT1_Y"}) , m_service_io(*this, "SERVICE") + , m_start_lamp(*this, "P%u_Start_lamp", 1U) + , m_gun_recoil(*this, "Player%u_Gun_Recoil", 1U) { } @@ -1151,6 +1153,7 @@ public: void init_alt_bank1(); protected: + virtual void machine_start() override; virtual void machine_reset() override; void jvsmap(address_map &map); @@ -1192,6 +1195,9 @@ private: optional_ioport_array<4> m_lightgun_io; optional_ioport m_service_io; + output_finder<2> m_start_lamp; + output_finder<2> m_gun_recoil; + uint16_t m_n_bankoffset; uint32_t m_n_dmaoffset; uint32_t m_n_tektagdmaoffset; @@ -1445,13 +1451,13 @@ void namcos12_state::system11gun_w(offs_t offset, uint16_t data, uint16_t mem_ma /* blowback 1 */ /* blowback 2 */ /* Note: output label has been changed for the Engrish Impaired ;-) */ - output().set_value("Player1_Gun_Recoil", (~data & 0x02)>>1); - output().set_value("Player2_Gun_Recoil", (~data & 0x01)); + m_gun_recoil[0] = BIT(~data, 1); + m_gun_recoil[1] = BIT(~data, 0); /* start 1 */ - output().set_value("P2_Start_lamp", (~data & 0x08)>>3); + m_start_lamp[0] = BIT(~data, 3); /* start 2 */ - output().set_value("P2_Start_lamp", (~data & 0x04)>>2); + m_start_lamp[1] = BIT(~data, 2); verboselog(1, "system11gun_w: outputs (%08x %08x)\n", data, mem_mask ); break; @@ -1585,6 +1591,12 @@ uint16_t namcos12_state::tektagt_protection_3_r() return 0; } +void namcos12_state::machine_start() +{ + m_start_lamp.resolve(); + m_gun_recoil.resolve(); +} + void namcos12_state::machine_reset() { bankoffset_w(0,0,0xffff); diff --git a/src/mame/sega/segaorun.cpp b/src/mame/sega/segaorun.cpp index fda65210005..20ba205fcc4 100644 --- a/src/mame/sega/segaorun.cpp +++ b/src/mame/sega/segaorun.cpp @@ -417,20 +417,20 @@ void segaorun_state::bankmotor_control_w(uint8_t data) if (data < 8) { // left - output().set_value("Bank_Motor_Direction", 1); - output().set_value("Bank_Motor_Speed", 8 - data); + m_bank_motor_direction = 1; + m_bank_motor_speed = 8 - data; } else if (data == 8) { // no movement - output().set_value("Bank_Motor_Direction", 0); - output().set_value("Bank_Motor_Speed", 0); + m_bank_motor_direction = 0; + m_bank_motor_speed = 0; } else { // right - output().set_value("Bank_Motor_Direction", 2); - output().set_value("Bank_Motor_Speed", data - 8); + m_bank_motor_direction = 2; + m_bank_motor_speed = data - 8; } } @@ -530,6 +530,15 @@ void segaorun_state::nop_w(address_space &space, offs_t offset, uint16_t data, u // DRIVER OVERRIDES //************************************************************************** +void segaorun_state::machine_start() +{ + m_bank_motor_direction.resolve(); + m_bank_motor_speed.resolve(); + m_vibration_motor.resolve(); + m_start_lamp.resolve(); + m_brake_lamp.resolve(); +} + //------------------------------------------------- // machine_reset - reset the state of the machine //------------------------------------------------- @@ -686,9 +695,9 @@ void segaorun_state::outrun_custom_io_w(offs_t offset, uint16_t data, uint16_t m // D1: Brake lamp // other bits: ? machine().sound().system_mute(!BIT(data, 7)); - output().set_value("Vibration_motor", BIT(data, 5)); - output().set_value("Start_lamp", BIT(data, 2)); - output().set_value("Brake_lamp", BIT(data, 1)); + m_vibration_motor = BIT(data, 5); + m_start_lamp = BIT(data, 2); + m_brake_lamp = BIT(data, 1); } return; @@ -761,10 +770,10 @@ void segaorun_state::shangon_custom_io_w(offs_t offset, uint16_t data, uint16_t // D3: Vibration motor // D2: Start lamp // other bits: ? - m_adc_select = data >> 6 & 3; - m_segaic16vid->set_display_enable(data >> 5 & 1); - output().set_value("Vibration_motor", data >> 3 & 1); - output().set_value("Start_lamp", data >> 2 & 1); + m_adc_select = BIT(data, 7, 6); + m_segaic16vid->set_display_enable(BIT(data, 5)); + m_vibration_motor = BIT(data, 3); + m_start_lamp = BIT(data, 2); } return; diff --git a/src/mame/sega/segaorun.h b/src/mame/sega/segaorun.h index 163b574a2bf..7f27e19171a 100644 --- a/src/mame/sega/segaorun.h +++ b/src/mame/sega/segaorun.h @@ -43,6 +43,11 @@ public: m_bankmotor_timer(*this, "bankmotor"), m_digital_ports(*this, { { "SERVICE", "UNKNOWN", "COINAGE", "DSW" } }), m_adc_ports(*this, "ADC.%u", 0), + m_bank_motor_direction(*this, "Bank_Motor_Direction"), + m_bank_motor_speed(*this, "Bank_Motor_Speed"), + m_vibration_motor(*this, "Vibration_motor"), + m_start_lamp(*this, "Start_lamp"), + m_brake_lamp(*this, "Brake_lamp"), m_workram(*this, "workram"), m_custom_io_r(*this), m_custom_io_w(*this), @@ -110,6 +115,7 @@ protected: void sub_map(address_map &map); // device overrides + virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; @@ -146,6 +152,13 @@ protected: required_ioport_array<4> m_digital_ports; optional_ioport_array<8> m_adc_ports; + // outputs + output_finder<> m_bank_motor_direction; + output_finder<> m_bank_motor_speed; + output_finder<> m_vibration_motor; + output_finder<> m_start_lamp; + output_finder<> m_brake_lamp; + // memory required_shared_ptr m_workram;