summaryrefslogtreecommitdiffstats
path: root/src/mess/machine
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine')
-rw-r--r--src/mess/machine/amstrad.c29
-rw-r--r--src/mess/machine/bk.c9
-rw-r--r--src/mess/machine/compis.c44
-rw-r--r--src/mess/machine/mc80.c8
-rw-r--r--src/mess/machine/rmnimbus.c59
-rw-r--r--src/mess/machine/tf20.c4
-rw-r--r--src/mess/machine/tf20.h2
7 files changed, 75 insertions, 80 deletions
diff --git a/src/mess/machine/amstrad.c b/src/mess/machine/amstrad.c
index 1a004c9ab39..0977c48c463 100644
--- a/src/mess/machine/amstrad.c
+++ b/src/mess/machine/amstrad.c
@@ -2670,28 +2670,27 @@ READ8_MEMBER(amstrad_state::amstrad_psg_porta_read)
/* called when cpu acknowledges int */
/* reset top bit of interrupt line counter */
/* this ensures that the next interrupt is no closer than 32 lines */
-static IRQ_CALLBACK(amstrad_cpu_acknowledge_int)
+IRQ_CALLBACK_MEMBER(amstrad_state::amstrad_cpu_acknowledge_int)
{
- amstrad_state *state = device->machine().driver_data<amstrad_state>();
// DMA interrupts can be automatically cleared if bit 0 of &6805 is set to 0
- if( state->m_asic.enabled && state->m_plus_irq_cause != 0x06 && state->m_asic.dma_clear & 0x01)
+ if( m_asic.enabled && m_plus_irq_cause != 0x06 && m_asic.dma_clear & 0x01)
{
- logerror("IRQ: Not cleared, IRQ was called by DMA [%i]\n",state->m_plus_irq_cause);
- state->m_asic.ram[0x2c0f] &= ~0x80; // not a raster interrupt, so this bit is reset
- return (state->m_asic.ram[0x2805] & 0xf8) | state->m_plus_irq_cause;
+ logerror("IRQ: Not cleared, IRQ was called by DMA [%i]\n",m_plus_irq_cause);
+ m_asic.ram[0x2c0f] &= ~0x80; // not a raster interrupt, so this bit is reset
+ return (m_asic.ram[0x2805] & 0xf8) | m_plus_irq_cause;
}
- device->machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE);
- state->m_gate_array.hsync_counter &= 0x1F;
- if ( state->m_asic.enabled )
+ machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE);
+ m_gate_array.hsync_counter &= 0x1F;
+ if ( m_asic.enabled )
{
- if(state->m_plus_irq_cause == 6) // bit 7 is set "if last interrupt acknowledge cycle was caused by a raster interrupt"
- state->m_asic.ram[0x2c0f] |= 0x80;
+ if(m_plus_irq_cause == 6) // bit 7 is set "if last interrupt acknowledge cycle was caused by a raster interrupt"
+ m_asic.ram[0x2c0f] |= 0x80;
else
{
- state->m_asic.ram[0x2c0f] &= ~0x80;
- state->m_asic.ram[0x2c0f] &= (0x40 >> state->m_plus_irq_cause/2);
+ m_asic.ram[0x2c0f] &= ~0x80;
+ m_asic.ram[0x2c0f] &= (0x40 >> m_plus_irq_cause/2);
}
- return (state->m_asic.ram[0x2805] & 0xf8) | state->m_plus_irq_cause;
+ return (m_asic.ram[0x2805] & 0xf8) | m_plus_irq_cause;
}
return 0xFF;
}
@@ -2898,7 +2897,7 @@ static void amstrad_common_init(running_machine &machine)
(const UINT8*)amstrad_cycle_table_ex);
/* Juergen is a cool dude! */
- state->m_maincpu->set_irq_acknowledge_callback(amstrad_cpu_acknowledge_int);
+ state->m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(amstrad_state::amstrad_cpu_acknowledge_int),state));
}
TIMER_CALLBACK_MEMBER(amstrad_state::cb_set_resolution)
diff --git a/src/mess/machine/bk.c b/src/mess/machine/bk.c
index a99f8c92f96..f87f1c2a5c2 100644
--- a/src/mess/machine/bk.c
+++ b/src/mess/machine/bk.c
@@ -70,16 +70,15 @@ void bk_state::machine_start()
machine().scheduler().timer_pulse(attotime::from_hz(2400), timer_expired_delegate(FUNC(bk_state::keyboard_callback),this));
}
-static IRQ_CALLBACK(bk0010_irq_callback)
+IRQ_CALLBACK_MEMBER(bk_state::bk0010_irq_callback)
{
- bk_state *state = device->machine().driver_data<bk_state>();
- device->execute().set_input_line(0, CLEAR_LINE);
- return state->m_key_irq_vector;
+ device.execute().set_input_line(0, CLEAR_LINE);
+ return m_key_irq_vector;
}
void bk_state::machine_reset()
{
- machine().device("maincpu")->execute().set_irq_acknowledge_callback(bk0010_irq_callback);
+ machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(bk_state::bk0010_irq_callback),this));
m_kbd_state = 0;
m_scrool = 01330;
diff --git a/src/mess/machine/compis.c b/src/mess/machine/compis.c
index e0a2274c86e..88de15f4bdc 100644
--- a/src/mess/machine/compis.c
+++ b/src/mess/machine/compis.c
@@ -345,39 +345,38 @@ WRITE16_MEMBER( compis_state::compis_usart_w )
* 80186 interrupt controller
*
*************************************/
-static IRQ_CALLBACK(int_callback)
+IRQ_CALLBACK_MEMBER(compis_state::int_callback)
{
- compis_state *state = device->machine().driver_data<compis_state>();
if (LOG_INTERRUPTS)
- logerror("(%f) **** Acknowledged interrupt vector %02X\n", device->machine().time().as_double(), state->m_i186.intr.poll_status & 0x1f);
+ logerror("(%f) **** Acknowledged interrupt vector %02X\n", machine().time().as_double(), m_i186.intr.poll_status & 0x1f);
/* clear the interrupt */
- device->execute().set_input_line(0, CLEAR_LINE);
- state->m_i186.intr.pending = 0;
+ device.execute().set_input_line(0, CLEAR_LINE);
+ m_i186.intr.pending = 0;
/* clear the request and set the in-service bit */
#if LATCH_INTS
- state->m_i186.intr.request &= ~state->m_i186.intr.ack_mask;
+ m_i186.intr.request &= ~m_i186.intr.ack_mask;
#else
- state->m_i186.intr.request &= ~(state->m_i186.intr.ack_mask & 0x0f);
+ m_i186.intr.request &= ~(m_i186.intr.ack_mask & 0x0f);
#endif
- state->m_i186.intr.in_service |= state->m_i186.intr.ack_mask;
- if (state->m_i186.intr.ack_mask == 0x0001)
+ m_i186.intr.in_service |= m_i186.intr.ack_mask;
+ if (m_i186.intr.ack_mask == 0x0001)
{
- switch (state->m_i186.intr.poll_status & 0x1f)
+ switch (m_i186.intr.poll_status & 0x1f)
{
- case 0x08: state->m_i186.intr.status &= ~0x01; break;
- case 0x12: state->m_i186.intr.status &= ~0x02; break;
- case 0x13: state->m_i186.intr.status &= ~0x04; break;
+ case 0x08: m_i186.intr.status &= ~0x01; break;
+ case 0x12: m_i186.intr.status &= ~0x02; break;
+ case 0x13: m_i186.intr.status &= ~0x04; break;
}
}
- state->m_i186.intr.ack_mask = 0;
+ m_i186.intr.ack_mask = 0;
/* a request no longer pending */
- state->m_i186.intr.poll_status &= ~0x8000;
+ m_i186.intr.poll_status &= ~0x8000;
/* return the vector */
- return state->m_i186.intr.poll_status & 0x1f;
+ return m_i186.intr.poll_status & 0x1f;
}
@@ -819,7 +818,7 @@ READ16_MEMBER( compis_state::compis_i186_internal_port_r )
case 0x12:
if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", m_maincpu->pc());
if (m_i186.intr.poll_status & 0x8000)
- int_callback(machine().device("maincpu"), 0);
+ int_callback(*machine().device("maincpu"), 0);
return m_i186.intr.poll_status;
case 0x13:
@@ -1152,7 +1151,7 @@ WRITE16_MEMBER( compis_state::compis_i186_internal_port_w )
/* we need to do this at a time when the I86 context is swapped in */
/* this register is generally set once at startup and never again, so it's a good */
/* time to set it up */
- m_maincpu->set_irq_acknowledge_callback(int_callback);
+ m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(compis_state::int_callback),this));
break;
case 0x60:
@@ -1293,16 +1292,15 @@ const struct pic8259_interface compis_pic8259_slave_config =
};
-static IRQ_CALLBACK( compis_irq_callback )
+IRQ_CALLBACK_MEMBER(compis_state::compis_irq_callback)
{
- compis_state *state = device->machine().driver_data<compis_state>();
- return pic8259_acknowledge(state->m_8259m);
+ return pic8259_acknowledge(m_8259m);
}
DRIVER_INIT_MEMBER(compis_state,compis)
{
- machine().device("maincpu")->execute().set_irq_acknowledge_callback(compis_irq_callback);
+ machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(compis_state::compis_irq_callback),this));
memset (&m_compis, 0, sizeof (m_compis) );
}
@@ -1324,7 +1322,7 @@ void compis_state::machine_reset()
compis_keyb_init(this);
/* OSP PIC 8259 */
- m_maincpu->set_irq_acknowledge_callback(compis_irq_callback);
+ m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(compis_state::compis_irq_callback),this));
}
/*-------------------------------------------------------------------------*/
diff --git a/src/mess/machine/mc80.c b/src/mess/machine/mc80.c
index 72b8eb50284..355856cc87d 100644
--- a/src/mess/machine/mc80.c
+++ b/src/mess/machine/mc80.c
@@ -13,14 +13,14 @@
/* Implementation for MC80.2x */
/*****************************************************************************/
-static IRQ_CALLBACK( mc8020_irq_callback )
+IRQ_CALLBACK_MEMBER(mc80_state::mc8020_irq_callback)
{
return 0x00;
}
MACHINE_RESET_MEMBER(mc80_state,mc8020)
{
- machine().device("maincpu")->execute().set_irq_acknowledge_callback(mc8020_irq_callback);
+ machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(mc80_state::mc8020_irq_callback),this));
}
WRITE_LINE_MEMBER( mc80_state::ctc_z0_w )
@@ -107,14 +107,14 @@ WRITE8_MEMBER( mc80_state::mc8030_eprom_prog_w )
{
}
-static IRQ_CALLBACK( mc8030_irq_callback )
+IRQ_CALLBACK_MEMBER(mc80_state::mc8030_irq_callback )
{
return 0x20;
}
MACHINE_RESET_MEMBER(mc80_state,mc8030)
{
- machine().device("maincpu")->execute().set_irq_acknowledge_callback(mc8030_irq_callback);
+ machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(mc80_state::mc8030_irq_callback),this));
}
READ8_MEMBER( mc80_state::zve_port_a_r )
diff --git a/src/mess/machine/rmnimbus.c b/src/mess/machine/rmnimbus.c
index b38f6269827..3852016dcc6 100644
--- a/src/mess/machine/rmnimbus.c
+++ b/src/mess/machine/rmnimbus.c
@@ -194,67 +194,66 @@ static void mouse_js_reset(running_machine &machine);
* 80186 interrupt controller
*
*************************************/
-static IRQ_CALLBACK(int_callback)
+IRQ_CALLBACK_MEMBER(rmnimbus_state::int_callback)
{
- rmnimbus_state *state = device->machine().driver_data<rmnimbus_state>();
UINT8 vector;
UINT16 old;
UINT16 oldreq;
if (LOG_INTERRUPTS)
- logerror("(%f) **** Acknowledged interrupt vector %02X\n", device->machine().time().as_double(), state->m_i186.intr.poll_status & 0x1f);
+ logerror("(%f) **** Acknowledged interrupt vector %02X\n", machine().time().as_double(), m_i186.intr.poll_status & 0x1f);
/* clear the interrupt */
- device->execute().set_input_line(0, CLEAR_LINE);
- state->m_i186.intr.pending = 0;
+ device.execute().set_input_line(0, CLEAR_LINE);
+ m_i186.intr.pending = 0;
- oldreq=state->m_i186.intr.request;
+ oldreq=m_i186.intr.request;
/* clear the request and set the in-service bit */
#if LATCH_INTS
- state->m_i186.intr.request &= ~state->m_i186.intr.ack_mask;
+ m_i186.intr.request &= ~m_i186.intr.ack_mask;
#else
- state->m_i186.intr.request &= ~(state->m_i186.intr.ack_mask & 0x0f);
+ m_i186.intr.request &= ~(m_i186.intr.ack_mask & 0x0f);
#endif
- if((LOG_INTERRUPTS) && (state->m_i186.intr.request!=oldreq))
- logerror("i186.intr.request changed from %02X to %02X\n",oldreq,state->m_i186.intr.request);
+ if((LOG_INTERRUPTS) && (m_i186.intr.request!=oldreq))
+ logerror("i186.intr.request changed from %02X to %02X\n",oldreq,m_i186.intr.request);
- old=state->m_i186.intr.in_service;
+ old=m_i186.intr.in_service;
- state->m_i186.intr.in_service |= state->m_i186.intr.ack_mask;
+ m_i186.intr.in_service |= m_i186.intr.ack_mask;
- if((LOG_INTERRUPTS) && (state->m_i186.intr.in_service!=old))
- logerror("i186.intr.in_service changed from %02X to %02X\n",old,state->m_i186.intr.in_service);
+ if((LOG_INTERRUPTS) && (m_i186.intr.in_service!=old))
+ logerror("i186.intr.in_service changed from %02X to %02X\n",old,m_i186.intr.in_service);
- if (state->m_i186.intr.ack_mask == 0x0001)
+ if (m_i186.intr.ack_mask == 0x0001)
{
- switch (state->m_i186.intr.poll_status & 0x1f)
+ switch (m_i186.intr.poll_status & 0x1f)
{
- case 0x08: state->m_i186.intr.status &= ~0x01; break;
- case 0x12: state->m_i186.intr.status &= ~0x02; break;
- case 0x13: state->m_i186.intr.status &= ~0x04; break;
+ case 0x08: m_i186.intr.status &= ~0x01; break;
+ case 0x12: m_i186.intr.status &= ~0x02; break;
+ case 0x13: m_i186.intr.status &= ~0x04; break;
}
}
- state->m_i186.intr.ack_mask = 0;
+ m_i186.intr.ack_mask = 0;
/* a request no longer pending */
- state->m_i186.intr.poll_status &= ~0x8000;
+ m_i186.intr.poll_status &= ~0x8000;
/* return the vector */
- switch(state->m_i186.intr.poll_status & 0x1F)
+ switch(m_i186.intr.poll_status & 0x1F)
{
- case 0x0C : vector=(state->m_i186.intr.ext[0] & EXTINT_CTRL_CASCADE) ? state->m_i186.intr.ext_vector[0] : (state->m_i186.intr.poll_status & 0x1f); break;
- case 0x0D : vector=(state->m_i186.intr.ext[1] & EXTINT_CTRL_CASCADE) ? state->m_i186.intr.ext_vector[1] : (state->m_i186.intr.poll_status & 0x1f); break;
+ case 0x0C : vector=(m_i186.intr.ext[0] & EXTINT_CTRL_CASCADE) ? m_i186.intr.ext_vector[0] : (m_i186.intr.poll_status & 0x1f); break;
+ case 0x0D : vector=(m_i186.intr.ext[1] & EXTINT_CTRL_CASCADE) ? m_i186.intr.ext_vector[1] : (m_i186.intr.poll_status & 0x1f); break;
default :
- vector=state->m_i186.intr.poll_status & 0x1f; break;
+ vector=m_i186.intr.poll_status & 0x1f; break;
}
if (LOG_INTERRUPTS)
{
- logerror("i186.intr.ext[0]=%04X i186.intr.ext[1]=%04X\n",state->m_i186.intr.ext[0],state->m_i186.intr.ext[1]);
- logerror("Ext vectors : %02X %02X\n",state->m_i186.intr.ext_vector[0],state->m_i186.intr.ext_vector[1]);
- logerror("Int %02X Calling vector %02X\n",state->m_i186.intr.poll_status,vector);
+ logerror("i186.intr.ext[0]=%04X i186.intr.ext[1]=%04X\n",m_i186.intr.ext[0],m_i186.intr.ext[1]);
+ logerror("Ext vectors : %02X %02X\n",m_i186.intr.ext_vector[0],m_i186.intr.ext_vector[1]);
+ logerror("Int %02X Calling vector %02X\n",m_i186.intr.poll_status,vector);
}
return vector;
@@ -855,7 +854,7 @@ READ16_MEMBER(rmnimbus_state::nimbus_i186_internal_port_r)
case 0x12:
if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", space.device().safe_pc());
if (m_i186.intr.poll_status & 0x8000)
- int_callback(machine().device(MAINCPU_TAG), 0);
+ int_callback(*machine().device(MAINCPU_TAG), 0);
return m_i186.intr.poll_status;
case 0x13:
@@ -1167,7 +1166,7 @@ WRITE16_MEMBER(rmnimbus_state::nimbus_i186_internal_port_w)
/* we need to do this at a time when the I86 context is swapped in */
/* this register is generally set once at startup and never again, so it's a good */
/* time to set it up */
- space.device().execute().set_irq_acknowledge_callback(int_callback);
+ space.device().execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(rmnimbus_state::int_callback),this));
break;
case 0x60:
diff --git a/src/mess/machine/tf20.c b/src/mess/machine/tf20.c
index 61088b58fe6..7bc2096a57c 100644
--- a/src/mess/machine/tf20.c
+++ b/src/mess/machine/tf20.c
@@ -182,7 +182,7 @@ void epson_tf20_device::device_start()
m_timer_serial = timer_alloc(0, NULL);
m_timer_tc = timer_alloc(1, NULL);
- m_cpu->set_irq_acknowledge_callback(irq_callback);
+ m_cpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(epson_tf20_device::irq_callback),this));
m_fd0 = subdevice<floppy_connector>("5a:0")->get_device();
m_fd1 = subdevice<floppy_connector>("5a:1")->get_device();
@@ -237,7 +237,7 @@ void epson_tf20_device::device_timer(emu_timer &timer, device_timer_id id, int p
// irq vector callback
//-------------------------------------------------
-IRQ_CALLBACK( epson_tf20_device::irq_callback )
+IRQ_CALLBACK_MEMBER( epson_tf20_device::irq_callback )
{
return 0x00;
}
diff --git a/src/mess/machine/tf20.h b/src/mess/machine/tf20.h
index a799fe7bf42..6b98cd01487 100644
--- a/src/mess/machine/tf20.h
+++ b/src/mess/machine/tf20.h
@@ -42,7 +42,7 @@ public:
DECLARE_READ8_MEMBER( rom_disable_r );
DECLARE_READ8_MEMBER( upd765_tc_r );
DECLARE_WRITE8_MEMBER( fdc_control_w );
- static IRQ_CALLBACK( irq_callback );
+ IRQ_CALLBACK_MEMBER( irq_callback );
void fdc_irq(bool state);