diff options
author | Olivier Galibert <galibert@pobox.com> | 2020-04-02 19:49:45 +0200 |
---|---|---|
committer | Olivier Galibert <galibert@pobox.com> | 2020-04-02 19:50:30 +0200 |
commit | 06f16e479388a3646ef6b4a98a0cc2ca8a0d4c30 (patch) | |
tree | cce2c54adc88c1075024585d051b0a899c10cc63 /src | |
parent | 40bd4325e885bdda0e91490ee5491ce94d5cbf3e (diff) |
s2650: Get the vector from the ack reqeust, remove use of set_input_line_and_vector and HOLD_MODE [O. Galibert]
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/cpu/s2650/s2650.cpp | 8 | ||||
-rw-r--r-- | src/devices/cpu/s2650/s2650.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/galaxia.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/instruct.cpp | 9 | ||||
-rw-r--r-- | src/mame/drivers/laserbat.cpp | 3 | ||||
-rw-r--r-- | src/mame/drivers/meadows.cpp | 3 | ||||
-rw-r--r-- | src/mame/drivers/pacman.cpp | 3 | ||||
-rw-r--r-- | src/mame/drivers/quasar.cpp | 3 | ||||
-rw-r--r-- | src/mame/drivers/seabattl.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/subhuntr.cpp | 3 | ||||
-rw-r--r-- | src/mame/drivers/vc4000.cpp | 1 | ||||
-rw-r--r-- | src/mame/drivers/zac_1.cpp | 6 | ||||
-rw-r--r-- | src/mame/video/vc4000.cpp | 2 |
13 files changed, 27 insertions, 24 deletions
diff --git a/src/devices/cpu/s2650/s2650.cpp b/src/devices/cpu/s2650/s2650.cpp index 8ef7be2a0ad..9e36a1c8ae1 100644 --- a/src/devices/cpu/s2650/s2650.cpp +++ b/src/devices/cpu/s2650/s2650.cpp @@ -209,17 +209,15 @@ inline int s2650_device::check_irq_line() { if( (m_psu & II) == 0 ) { - int vector; if (m_halt) { m_halt = 0; m_iar = (m_iar + 1) & PMSK; } - vector = standard_irq_callback(0) & 0xff; + standard_irq_callback(0); /* Say hi */ - m_intack_handler(true); - + int vector = m_intack_handler(); /* build effective address within first 8K page */ m_ea = S2650_relative[vector] & PMSK; if (vector & 0x80) /* indirect bit set ? */ @@ -824,7 +822,7 @@ void s2650_device::device_start() { m_sense_handler.resolve(); m_flag_handler.resolve_safe(); - m_intack_handler.resolve_safe(); + m_intack_handler.resolve_safe(0x00); m_cache = space(AS_PROGRAM).cache<0, 0, ENDIANNESS_BIG>(); diff --git a/src/devices/cpu/s2650/s2650.h b/src/devices/cpu/s2650/s2650.h index af883c740a3..1bd42fa535c 100644 --- a/src/devices/cpu/s2650/s2650.h +++ b/src/devices/cpu/s2650/s2650.h @@ -68,7 +68,7 @@ private: devcb_read_line m_sense_handler; devcb_write_line m_flag_handler; - devcb_write_line m_intack_handler; + devcb_read8 m_intack_handler; uint16_t m_ppc; /* previous program counter (page + iar) */ uint16_t m_page; /* 8K page select register (A14..A13) */ diff --git a/src/mame/drivers/galaxia.cpp b/src/mame/drivers/galaxia.cpp index ab3f669d106..beff496823a 100644 --- a/src/mame/drivers/galaxia.cpp +++ b/src/mame/drivers/galaxia.cpp @@ -87,7 +87,7 @@ WRITE_LINE_MEMBER(galaxia_state::vblank_irq) { if (state) { - m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0x03); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); cvs_scroll_stars(); } } @@ -309,6 +309,7 @@ void galaxia_state::galaxia(machine_config &config) m_maincpu->set_addrmap(AS_DATA, &galaxia_state::galaxia_data_map); m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); m_maincpu->flag_handler().set(FUNC(galaxia_state::write_s2650_flag)); + m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; }); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -351,6 +352,7 @@ void galaxia_state::astrowar(machine_config &config) m_maincpu->set_addrmap(AS_DATA, &galaxia_state::galaxia_data_map); m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); m_maincpu->flag_handler().set(FUNC(galaxia_state::write_s2650_flag)); + m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; }); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); diff --git a/src/mame/drivers/instruct.cpp b/src/mame/drivers/instruct.cpp index 3dd09c9c9d2..cb7d4a0ff2e 100644 --- a/src/mame/drivers/instruct.cpp +++ b/src/mame/drivers/instruct.cpp @@ -208,17 +208,14 @@ INTERRUPT_GEN_MEMBER( instruct_state::t2l_int ) { uint8_t switches = ioport("SW")->read(); - // Set vector from INDIRECT sw - uint8_t vector = BIT(switches, 0) ? 0x87 : 0x07; - // Check INT sw & key if (BIT(switches, 1)) - device.execute().set_input_line_and_vector(0, BIT(hwkeys, 1) ? ASSERT_LINE : CLEAR_LINE, vector); // S2650 + device.execute().set_input_line(0, BIT(hwkeys, 1) ? ASSERT_LINE : CLEAR_LINE); else // process ac input { m_irqstate ^= 1; - device.execute().set_input_line_and_vector(0, m_irqstate ? ASSERT_LINE : CLEAR_LINE, vector); // S2650 + device.execute().set_input_line(0, m_irqstate ? ASSERT_LINE : CLEAR_LINE); } } } @@ -430,6 +427,8 @@ void instruct_state::instruct(machine_config &config) m_maincpu->set_periodic_int(FUNC(instruct_state::t2l_int), attotime::from_hz(120)); m_maincpu->sense_handler().set(FUNC(instruct_state::sense_r)); m_maincpu->flag_handler().set(FUNC(instruct_state::flag_w)); + // Set vector from INDIRECT sw + m_maincpu->intack_handler().set([this]() { return BIT(ioport("SW")->read(), 0) ? 0x87 : 0x07; }); /* video hardware */ config.set_default_layout(layout_instruct); diff --git a/src/mame/drivers/laserbat.cpp b/src/mame/drivers/laserbat.cpp index ecf2b427351..477cb85fdd0 100644 --- a/src/mame/drivers/laserbat.cpp +++ b/src/mame/drivers/laserbat.cpp @@ -409,7 +409,7 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(laserbat_state_base::laserbat_interrupt) { - device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x0a); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); } void laserbat_state_base::init_laserbat() @@ -470,6 +470,7 @@ void laserbat_state_base::laserbat_base(machine_config &config) m_maincpu->set_addrmap(AS_IO, &laserbat_state_base::laserbat_io_map); m_maincpu->set_vblank_int("screen", FUNC(laserbat_state_base::laserbat_interrupt)); m_maincpu->sense_handler().set(m_screen, FUNC(screen_device::vblank)); + m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x0a; }); // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); diff --git a/src/mame/drivers/meadows.cpp b/src/mame/drivers/meadows.cpp index 424591c3f0b..afc8c0fc236 100644 --- a/src/mame/drivers/meadows.cpp +++ b/src/mame/drivers/meadows.cpp @@ -201,7 +201,7 @@ WRITE8_MEMBER(meadows_state::meadows_audio_w) INPUT_CHANGED_MEMBER(meadows_state::coin_inserted) { - m_maincpu->set_input_line_and_vector(0, (newval ? ASSERT_LINE : CLEAR_LINE), 0x82); // S2650 + m_maincpu->set_input_line(0, (newval ? ASSERT_LINE : CLEAR_LINE)); } @@ -626,6 +626,7 @@ void meadows_state::meadows(machine_config &config) /* basic machine hardware */ S2650(config, m_maincpu, MASTER_CLOCK/8); /* 5MHz / 8 = 625 kHz */ m_maincpu->set_addrmap(AS_PROGRAM, &meadows_state::meadows_main_map); + m_maincpu->intack_handler().set([]() { return 0x82; }); S2650(config, m_audiocpu, MASTER_CLOCK/8); /* 5MHz / 8 = 625 kHz */ m_audiocpu->set_addrmap(AS_PROGRAM, &meadows_state::audio_map); diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index e97a4136111..bc1966aa39a 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -727,7 +727,7 @@ READ8_MEMBER(pacman_state::bigbucks_question_r) WRITE_LINE_MEMBER(pacman_state::s2650_interrupt) { if (state) - m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0x03); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); } WRITE8_MEMBER(pacman_state::porky_banking_w) @@ -3773,6 +3773,7 @@ void pacman_state::s2650games(machine_config &config) maincpu.set_addrmap(AS_PROGRAM, &pacman_state::s2650games_map); maincpu.set_addrmap(AS_DATA, &pacman_state::s2650games_dataport); maincpu.sense_handler().set("screen", FUNC(screen_device::vblank)).invert(); + maincpu.intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; }); m_mainlatch->q_out_cb<0>().set_nop(); m_mainlatch->q_out_cb<1>().set_nop(); diff --git a/src/mame/drivers/quasar.cpp b/src/mame/drivers/quasar.cpp index abc220960fb..4bb931d739c 100644 --- a/src/mame/drivers/quasar.cpp +++ b/src/mame/drivers/quasar.cpp @@ -272,7 +272,7 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(quasar_state::quasar_interrupt) { - device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x03); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); } // **************************************** @@ -307,6 +307,7 @@ void quasar_state::quasar(machine_config &config) m_maincpu->set_addrmap(AS_DATA, &quasar_state::quasar_data); m_maincpu->set_vblank_int("screen", FUNC(quasar_state::quasar_interrupt)); m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); + m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; }); i8035_device &soundcpu(I8035(config, "soundcpu", 6000000)); /* 6MHz crystal divide by 15 in CPU */ soundcpu.set_addrmap(AS_PROGRAM, &quasar_state::sound_map); diff --git a/src/mame/drivers/seabattl.cpp b/src/mame/drivers/seabattl.cpp index a16c2fa0e20..f38c0789921 100644 --- a/src/mame/drivers/seabattl.cpp +++ b/src/mame/drivers/seabattl.cpp @@ -449,7 +449,7 @@ void seabattl_state::machine_reset() INTERRUPT_GEN_MEMBER(seabattl_state::seabattl_interrupt) { - device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x03); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); } static const gfx_layout tiles32x16x3_layout = @@ -489,7 +489,7 @@ void seabattl_state::seabattl(machine_config &config) m_maincpu->set_addrmap(AS_DATA, &seabattl_state::seabattl_data_map); m_maincpu->set_vblank_int("screen", FUNC(seabattl_state::seabattl_interrupt)); m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); - + m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; }); S2636(config, m_s2636, 0); m_s2636->set_offsets(-13, -29); m_s2636->add_route(ALL_OUTPUTS, "mono", 0.10); diff --git a/src/mame/drivers/subhuntr.cpp b/src/mame/drivers/subhuntr.cpp index b96c8e257dd..efa2e43e19c 100644 --- a/src/mame/drivers/subhuntr.cpp +++ b/src/mame/drivers/subhuntr.cpp @@ -124,7 +124,7 @@ void subhuntr_state::machine_reset() INTERRUPT_GEN_MEMBER(subhuntr_state::subhuntr_interrupt) { - device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x03); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); } static const gfx_layout tiles8x8_layout = @@ -152,6 +152,7 @@ void subhuntr_state::subhuntr(machine_config &config) m_maincpu->set_addrmap(AS_DATA, &subhuntr_state::subhuntr_data_map); m_maincpu->set_vblank_int("screen", FUNC(subhuntr_state::subhuntr_interrupt)); m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); + m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; }); //s2636_device &s2636(S2636(config, "s2636", 0)); //s2636.set_offsets(3, -21); diff --git a/src/mame/drivers/vc4000.cpp b/src/mame/drivers/vc4000.cpp index 4d4b7c67ea8..82b7eda570b 100644 --- a/src/mame/drivers/vc4000.cpp +++ b/src/mame/drivers/vc4000.cpp @@ -534,6 +534,7 @@ void vc4000_state::vc4000(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &vc4000_state::vc4000_mem); m_maincpu->sense_handler().set(FUNC(vc4000_state::vc4000_vsync_r)); m_maincpu->set_periodic_int(FUNC(vc4000_state::vc4000_video_line), attotime::from_hz(312*53)); // GOLF needs this exact value + m_maincpu->intack_handler().set([]() { return 0x03; }); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); diff --git a/src/mame/drivers/zac_1.cpp b/src/mame/drivers/zac_1.cpp index bdab90b2c47..66c9207ed83 100644 --- a/src/mame/drivers/zac_1.cpp +++ b/src/mame/drivers/zac_1.cpp @@ -223,10 +223,7 @@ void zac_1_state::machine_reset() TIMER_DEVICE_CALLBACK_MEMBER(zac_1_state::zac_1_inttimer) { if (m_t_c > 0x40) - { - uint8_t vector = (ioport("TEST")->read() ) ? 0x10 : 0x18; - m_maincpu->set_input_line_and_vector(INPUT_LINE_IRQ0, ASSERT_LINE, vector); // S2650 - } + m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); else m_t_c++; } @@ -268,6 +265,7 @@ void zac_1_state::zac_1(machine_config &config) m_maincpu->set_addrmap(AS_DATA, &zac_1_state::zac_1_data); m_maincpu->sense_handler().set(FUNC(zac_1_state::serial_r)); m_maincpu->flag_handler().set(FUNC(zac_1_state::serial_w)); + m_maincpu->intack_handler().set([this]() { return (ioport("TEST")->read() ) ? 0x10 : 0x18; }); NVRAM(config, "ram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/video/vc4000.cpp b/src/mame/video/vc4000.cpp index 63be0c8015c..49723216c22 100644 --- a/src/mame/video/vc4000.cpp +++ b/src/mame/video/vc4000.cpp @@ -641,7 +641,7 @@ INTERRUPT_GEN_MEMBER(vc4000_state::vc4000_video_line) (m_video.sprites[1].finished_now) | (m_video.sprites[0].finished_now)) && (!m_irq_pause)) { - m_maincpu->set_input_line_and_vector(0, ASSERT_LINE, 3); // S2650 + m_maincpu->set_input_line(0, ASSERT_LINE); m_irq_pause=1; } } |