summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
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
commit06f16e479388a3646ef6b4a98a0cc2ca8a0d4c30 (patch)
treecce2c54adc88c1075024585d051b0a899c10cc63 /src
parent40bd4325e885bdda0e91490ee5491ce94d5cbf3e (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.cpp8
-rw-r--r--src/devices/cpu/s2650/s2650.h2
-rw-r--r--src/mame/drivers/galaxia.cpp4
-rw-r--r--src/mame/drivers/instruct.cpp9
-rw-r--r--src/mame/drivers/laserbat.cpp3
-rw-r--r--src/mame/drivers/meadows.cpp3
-rw-r--r--src/mame/drivers/pacman.cpp3
-rw-r--r--src/mame/drivers/quasar.cpp3
-rw-r--r--src/mame/drivers/seabattl.cpp4
-rw-r--r--src/mame/drivers/subhuntr.cpp3
-rw-r--r--src/mame/drivers/vc4000.cpp1
-rw-r--r--src/mame/drivers/zac_1.cpp6
-rw-r--r--src/mame/video/vc4000.cpp2
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;
}
}