diff options
Diffstat (limited to 'src/mess/machine')
-rw-r--r-- | src/mess/machine/amstrad.c | 29 | ||||
-rw-r--r-- | src/mess/machine/bk.c | 9 | ||||
-rw-r--r-- | src/mess/machine/compis.c | 44 | ||||
-rw-r--r-- | src/mess/machine/mc80.c | 8 | ||||
-rw-r--r-- | src/mess/machine/rmnimbus.c | 59 | ||||
-rw-r--r-- | src/mess/machine/tf20.c | 4 | ||||
-rw-r--r-- | src/mess/machine/tf20.h | 2 |
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); |