From: Oliver Stoeneberg [mailto:oliverst@online.de]

Subject: change for cpunum_set_irq_callback() callback function

This patch adds the running_machine* parameter to the function passed 
into cpunum_set_irq_callback() and adds the IRQ_CALLBACK macro for 
the callback function.
This commit is contained in:
Aaron Giles 2008-04-11 14:00:47 +00:00
parent ab2154804c
commit 250e9056d5
22 changed files with 48 additions and 46 deletions

View File

@ -10,6 +10,7 @@
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#ifdef ENABLE_DEBUGGER
#include "debug/debugcpu.h"
@ -76,7 +77,7 @@ int (*const cpu_irq_callbacks[MAX_CPU])(int) =
cpu_7_irq_callback
};
static int (*drv_irq_callbacks[MAX_CPU])(int);
static int (*drv_irq_callbacks[MAX_CPU])(running_machine *, int);
@ -318,7 +319,7 @@ void cpunum_set_input_line_and_vector(running_machine *machine, int cpunum, int
*
*************************************/
void cpunum_set_irq_callback(int cpunum, int (*callback)(int))
void cpunum_set_irq_callback(int cpunum, int (*callback)(running_machine *, int))
{
drv_irq_callbacks[cpunum] = callback;
}
@ -331,7 +332,7 @@ void cpunum_set_irq_callback(int cpunum, int (*callback)(int))
*
*************************************/
INLINE int cpu_irq_callback(int cpunum, int line)
INLINE int cpu_irq_callback(running_machine *machine, int cpunum, int line)
{
int vector = input_line_vector[cpunum][line];
@ -347,7 +348,7 @@ INLINE int cpu_irq_callback(int cpunum, int line)
/* if there's a driver callback, run it */
if (drv_irq_callbacks[cpunum])
vector = (*drv_irq_callbacks[cpunum])(line);
vector = (*drv_irq_callbacks[cpunum])(machine, line);
#ifdef ENABLE_DEBUGGER
/* notify the debugger */
@ -358,14 +359,14 @@ INLINE int cpu_irq_callback(int cpunum, int line)
return vector;
}
static int cpu_0_irq_callback(int line) { return cpu_irq_callback(0, line); }
static int cpu_1_irq_callback(int line) { return cpu_irq_callback(1, line); }
static int cpu_2_irq_callback(int line) { return cpu_irq_callback(2, line); }
static int cpu_3_irq_callback(int line) { return cpu_irq_callback(3, line); }
static int cpu_4_irq_callback(int line) { return cpu_irq_callback(4, line); }
static int cpu_5_irq_callback(int line) { return cpu_irq_callback(5, line); }
static int cpu_6_irq_callback(int line) { return cpu_irq_callback(6, line); }
static int cpu_7_irq_callback(int line) { return cpu_irq_callback(7, line); }
static int cpu_0_irq_callback(int line) { return cpu_irq_callback(Machine, 0, line); }
static int cpu_1_irq_callback(int line) { return cpu_irq_callback(Machine, 1, line); }
static int cpu_2_irq_callback(int line) { return cpu_irq_callback(Machine, 2, line); }
static int cpu_3_irq_callback(int line) { return cpu_irq_callback(Machine, 3, line); }
static int cpu_4_irq_callback(int line) { return cpu_irq_callback(Machine, 4, line); }
static int cpu_5_irq_callback(int line) { return cpu_irq_callback(Machine, 5, line); }
static int cpu_6_irq_callback(int line) { return cpu_irq_callback(Machine, 6, line); }
static int cpu_7_irq_callback(int line) { return cpu_irq_callback(Machine, 7, line); }

View File

@ -17,6 +17,7 @@
#include "memory.h"
#define INTERRUPT_GEN(func) void func(running_machine *machine, int cpunum)
#define IRQ_CALLBACK(func) int func(running_machine *machine, int irqline)
@ -50,7 +51,7 @@ void cpunum_set_input_line_vector(int cpunum, int irqline, int vector);
void cpunum_set_input_line_and_vector(running_machine *machine, int cpunum, int line, int state, int vector);
/* Install a driver callback for IRQ acknowledge */
void cpunum_set_irq_callback(int cpunum, int (*callback)(int irqline));
void cpunum_set_irq_callback(int cpunum, int (*callback)(running_machine *machine, int irqline));
#endif /* __CPUINT_H__ */

View File

@ -21,9 +21,9 @@ static int tmp68301_irq_vector[8];
static void tmp68301_update_timer( int i );
static int tmp68301_irq_callback(int int_level)
static IRQ_CALLBACK(tmp68301_irq_callback)
{
int vector = tmp68301_irq_vector[int_level];
int vector = tmp68301_irq_vector[irqline];
// logerror("CPU #0 PC %06X: irq callback returns %04X for level %x\n",activecpu_get_pc(),vector,int_level);
return vector;
}

View File

@ -611,7 +611,7 @@ void leland_80186_sound_init(void)
*
*************************************/
static int int_callback(int line)
static IRQ_CALLBACK(int_callback)
{
if (LOG_INTERRUPTS) logerror("(%f) **** Acknowledged interrupt vector %02X\n", attotime_to_double(timer_get_time()), i80186.intr.poll_status & 0x1f);
@ -1093,7 +1093,7 @@ static READ16_HANDLER( i80186_internal_port_r )
case 0x24/2:
if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", activecpu_get_pc());
if (i80186.intr.poll_status & 0x8000)
int_callback(0);
int_callback(machine, 0);
return i80186.intr.poll_status;
case 0x26/2:

View File

@ -112,7 +112,7 @@ WRITE8_HANDLER( froggrmc_sh_irqtrigger_w )
}
static int scramble_sh_irq_callback(int irqline)
static IRQ_CALLBACK(scramble_sh_irq_callback)
{
/* interrupt acknowledge clears the flip-flop --
we need to pulse the CLR line because MAME's core never clears this
@ -126,7 +126,7 @@ static int scramble_sh_irq_callback(int irqline)
return 0xff;
}
static int sfx_sh_irq_callback(int irqline)
static IRQ_CALLBACK(sfx_sh_irq_callback)
{
/* interrupt acknowledge clears the flip-flop --
we need to pulse the CLR line because MAME's core never clears this

View File

@ -26,7 +26,7 @@
*
*************************************/
static int aztarac_irq_callback(int irqline)
static IRQ_CALLBACK(aztarac_irq_callback)
{
return 0xc;
}

View File

@ -1289,13 +1289,13 @@ static const struct YMF271interface ymf271_interface2 =
static UINT16 irqreq;
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
int i;
for(i=15; i>=0 && !(irqreq & (1<<i)); i--);
irqreq &= ~(1<<i);
if(!irqreq)
cpunum_set_input_line(Machine, 0, 0, CLEAR_LINE);
cpunum_set_input_line(machine, 0, 0, CLEAR_LINE);
return i;
}

View File

@ -211,7 +211,7 @@ static WRITE32_HANDLER(IntAck_w)
IntHigh=(data>>8)&7;
}
static int icallback(int line)
static IRQ_CALLBACK(icallback)
{
int i;
UINT32 IntPend=program_read_dword_32le(0x01800c0c);

View File

@ -76,14 +76,14 @@ static void update_irq_state(void)
}
static int irq_callback(int which)
static IRQ_CALLBACK(irq_callback)
{
/* auto-ack the IRQ */
irq_state[which] = 0;
irq_state[irqline] = 0;
update_irq_state();
/* vector is 0x40 + index */
return 0x40 + which;
return 0x40 + irqline;
}

View File

@ -545,7 +545,7 @@ static INPUT_PORTS_START(gamecstl)
PORT_START_TAG("pc_keyboard_7")
INPUT_PORTS_END
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
int r = 0;
r = pic8259_acknowledge(1);

View File

@ -299,7 +299,7 @@ static READ8_HANDLER( cfb_zpu_int_req_clr )
}
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
/* all data lines are tied to +5V via 10K resistors */
/* D1 is set to GND when INT comes from CFB */

View File

@ -953,7 +953,7 @@ static INPUT_PORTS_START(mediagx)
PORT_BIT( 0xf00, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
INPUT_PORTS_END
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
int r;
r = pic8259_acknowledge(1);

View File

@ -5090,20 +5090,20 @@ MACHINE_DRIVER_END
/* Callback when the genesis enters interrupt code */
static int genesis_int_callback (int irq)
static IRQ_CALLBACK(genesis_int_callback)
{
if (irq==4)
if (irqline==4)
{
megadrive_irq4_pending = 0;
}
if (irq==6)
if (irqline==6)
{
megadrive_irq6_pending = 0;
// mame_printf_debug("clear pending!\n");
}
return (0x60+irq*4)/4; // vector address
return (0x60+irqline*4)/4; // vector address
}
static int megadriv_tas_callback(void)

View File

@ -189,10 +189,10 @@ static void update_irq_state(void)
/* For games that supply an *IRQ Vector* on the data bus */
static int metro_irq_callback(int int_level)
static IRQ_CALLBACK(metro_irq_callback)
{
// logerror("CPU #0 PC %06X: irq callback returns %04X\n",activecpu_get_pc(),metro_irq_vectors[int_level]);
return metro_irq_vectors[int_level]&0xff;
return metro_irq_vectors[irqline]&0xff;
}
static MACHINE_RESET( metro )

View File

@ -714,7 +714,7 @@ static void irq_raise(int level)
cpunum_set_input_line(Machine, 0, 0, HOLD_LINE);
}
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
return last_irq;
}

View File

@ -1243,13 +1243,13 @@ GFXDECODE_END
static UINT16 irqreq;
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
int i;
for(i=15; i>=0 && !(irqreq & (1<<i)); i--);
irqreq &= ~(1<<i);
if(!irqreq)
cpunum_set_input_line(Machine, 0, 0, CLEAR_LINE);
cpunum_set_input_line(machine, 0, 0, CLEAR_LINE);
return i;
}

View File

@ -1731,7 +1731,7 @@ static INTERRUPT_GEN( spi_interrupt )
cpunum_set_input_line(machine, 0, 0, ASSERT_LINE );
}
static int spi_irq_callback(int irq)
static IRQ_CALLBACK(spi_irq_callback)
{
return 0x20;
}

View File

@ -204,7 +204,7 @@ static void update_irq_state(void)
cpunum_set_input_line(Machine, 0, 0, (requested_int & irq_enable)? ASSERT_LINE : CLEAR_LINE);
}
static int ssv_irq_callback(int level)
static IRQ_CALLBACK(ssv_irq_callback)
{
int i;
for ( i = 0; i <= 7; i++ )

View File

@ -256,7 +256,7 @@ static MACHINE_RESET( horshoes )
static int last_irq_level;
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
return irq_adr_table[last_irq_level];
}

View File

@ -511,7 +511,7 @@ static INPUT_PORTS_START(taitowlf)
PORT_START_TAG("pc_keyboard_7")
INPUT_PORTS_END
static int irq_callback(int irqline)
static IRQ_CALLBACK(irq_callback)
{
int r = 0;
r = pic8259_acknowledge(1);

View File

@ -105,10 +105,10 @@ static void fd1094_cmp_callback(UINT32 val, int reg)
}
/* Callback when the FD1094 enters interrupt code */
static int fd1094_int_callback (int irq)
static IRQ_CALLBACK(fd1094_int_callback)
{
fd1094_setstate_and_decrypt(FD1094_STATE_IRQ);
return (0x60+irq*4)/4; // vector address
return (0x60+irqline*4)/4; // vector address
}
static void fd1094_rte_callback (void)

View File

@ -86,10 +86,10 @@ static void s24_fd1094_cmp_callback(UINT32 val, int reg)
}
/* Callback when the s24_fd1094 enters interrupt code */
static int s24_fd1094_int_callback (int irq)
static IRQ_CALLBACK(s24_fd1094_int_callback)
{
s24_fd1094_setstate_and_decrypt(FD1094_STATE_IRQ);
return (0x60+irq*4)/4; // vector address
return (0x60+irqline*4)/4; // vector address
}
static void s24_fd1094_rte_callback (void)