本文整理汇总了C++中check_interrupts函数的典型用法代码示例。如果您正苦于以下问题:C++ check_interrupts函数的具体用法?C++ check_interrupts怎么用?C++ check_interrupts使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了check_interrupts函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: while
void tms32082_mp_device::execute_run()
{
while (m_icount > 0)
{
m_pc = m_fetchpc;
check_interrupts();
debugger_instruction_hook(this, m_pc);
m_ir = fetch();
execute();
m_tcount--;
if (m_tcount < 0)
{
// TODO: timer interrupt
m_tcount = m_tscale;
}
m_icount--;
};
return;
}
开发者ID:Robbbert,项目名称:store1,代码行数:25,代码来源:tms32082.cpp
示例2: check_interrupts
int mc68901_device::get_vector()
{
int ch;
for (ch = 15; ch >= 0; ch--)
{
if (BIT(m_imr, ch) && BIT(m_ipr, ch))
{
if (m_vr & VR_S)
{
/* set interrupt-in-service bit */
m_isr |= (1 << ch);
}
/* clear interrupt pending bit */
m_ipr &= ~(1 << ch);
check_interrupts();
return (m_vr & 0xf0) | ch;
}
}
return M68K_INT_ACK_SPURIOUS;
}
开发者ID:MASHinfo,项目名称:mame,代码行数:25,代码来源:mc68901.cpp
示例3: switch
void lr35902_cpu_device::execute_run()
{
do
{
if ( m_execution_state ) {
UINT8 x;
/* Execute instruction */
switch( m_op ) {
#include "opc_main.inc"
default:
// actually this should lock up the cpu!
logerror("LR35902: Illegal opcode $%02X @ %04X\n", m_op, m_PC);
break;
}
} else {
/* Fetch and count cycles */
check_interrupts();
debugger_instruction_hook(this, m_PC);
if ( m_enable & HALTED ) {
cycles_passed( 4 );
m_execution_state = 1;
} else {
m_op = mem_read_byte( m_PC++ );
if ( m_handle_halt_bug ) {
m_PC--;
m_handle_halt_bug = false;
}
}
}
m_execution_state ^= 1;
} while (m_icount > 0);
}
开发者ID:crazii,项目名称:mameplus,代码行数:32,代码来源:lr35902.c
示例4: LOGINT
//-------------------------------------------------
// z80daisy_irq_ack - interrupt acknowledge
//-------------------------------------------------
int z80sio_device::z80daisy_irq_ack()
{
int i;
LOGINT("%s %s \n",FUNCNAME, tag());
// loop over all interrupt sources
for (i = 0; i < 8; i++)
{
// find the first channel with an interrupt requested
if (m_int_state[i] & Z80_DAISY_INT)
{
// clear interrupt, switch to the IEO state, and update the IRQs
m_int_state[i] = Z80_DAISY_IEO;
m_chanA->m_rr0 &= ~z80sio_channel::RR0_INTERRUPT_PENDING;
check_interrupts();
//LOG("%s %s \n",FUNCNAME, tag(), m_chanB->m_rr2);
return m_chanB->m_rr2;
}
}
//logerror("z80sio_irq_ack: failed to find an interrupt to ack!\n");
return m_chanB->m_rr2;
}
开发者ID:Robbbert,项目名称:store1,代码行数:30,代码来源:z80sio.cpp
示例5: switch
void lr35902_cpu_device::execute_run()
{
do
{
if ( m_execution_state ) {
UINT8 x;
/* Execute instruction */
switch( m_op ) {
#include "opc_main.h"
}
} else {
/* Fetch and count cycles */
check_interrupts();
debugger_instruction_hook(this, m_PC);
if ( m_enable & HALTED ) {
cycles_passed( 4 );
m_execution_state = 1;
} else {
m_op = mem_read_byte( m_PC++ );
if ( m_doHALTbug ) {
m_PC--;
m_doHALTbug = 0;
}
}
}
m_execution_state ^= 1;
} while (m_icount > 0);
}
开发者ID:opicron,项目名称:mame,代码行数:28,代码来源:lr35902.c
示例6: READ8_DEVICE_HANDLER_TRAMPOLINE
READ8_DEVICE_HANDLER_TRAMPOLINE(acia6850, acia6850_data_r)
{
m_status &= ~(ACIA6850_STATUS_RDRF | ACIA6850_STATUS_IRQ | ACIA6850_STATUS_PE);
if (m_status_read)
{
int dcd = devcb_call_read_line(&m_in_dcd_func);
m_status_read = 0;
m_status &= ~(ACIA6850_STATUS_OVRN | ACIA6850_STATUS_DCD);
if (dcd)
{
m_status |= ACIA6850_STATUS_DCD;
}
}
if (m_overrun == 1)
{
m_status |= ACIA6850_STATUS_OVRN;
m_overrun = 0;
}
check_interrupts();
return m_rdr;
}
开发者ID:cdenix,项目名称:psmame,代码行数:27,代码来源:6850acia.c
示例7: check_interrupts
int z80sti_device::z80daisy_irq_ack()
{
int i;
// loop over all interrupt sources
for (i = 15; i >= 0; i--)
{
// find the first channel with an interrupt requested
if (m_int_state[i] & Z80_DAISY_INT)
{
UINT8 vector = (m_pvr & 0xe0) | INT_VECTOR[i];
// clear interrupt, switch to the IEO state, and update the IRQs
m_int_state[i] = Z80_DAISY_IEO;
// clear interrupt pending register bit
m_ipr &= ~(1 << i);
// set interrupt in-service register bit
m_isr |= (1 << i);
check_interrupts();
LOG(("Z80STI '%s' Interrupt Acknowledge Vector: %02x\n", tag(), vector));
return vector;
}
}
logerror("z80sti_irq_ack: failed to find an interrupt to ack!\n");
return 0;
}
开发者ID:dezi,项目名称:mame-libretro-odroid,代码行数:33,代码来源:z80sti.c
示例8: LOG
void z80sti_device::z80daisy_irq_reti()
{
int i;
LOG(("Z80STI '%s' Return from Interrupt\n", tag()));
// loop over all interrupt sources
for (i = 15; i >= 0; i--)
{
// find the first channel with an IEO pending
if (m_int_state[i] & Z80_DAISY_IEO)
{
// clear the IEO state and update the IRQs
m_int_state[i] &= ~Z80_DAISY_IEO;
// clear interrupt in-service register bit
m_isr &= ~(1 << i);
check_interrupts();
return;
}
}
logerror("z80sti_irq_reti: failed to find an interrupt to clear IEO on!\n");
}
开发者ID:dezi,项目名称:mame-libretro-odroid,代码行数:25,代码来源:z80sti.c
示例9: LOG
int z80dart_device::z80daisy_irq_ack()
{
int i;
LOG(("Z80DART \"%s\" Interrupt Acknowledge\n", tag()));
// loop over all interrupt sources
for (i = 0; i < 8; i++)
{
// find the first channel with an interrupt requested
if (m_int_state[i] & Z80_DAISY_INT)
{
// clear interrupt, switch to the IEO state, and update the IRQs
m_int_state[i] = Z80_DAISY_IEO;
m_chanA->m_rr[0] &= ~z80dart_channel::RR0_INTERRUPT_PENDING;
check_interrupts();
LOG(("Z80DART \"%s\" : Interrupt Acknowledge Vector %02x\n", tag(), m_chanB->m_rr[2]));
return m_chanB->m_rr[2];
}
}
//logerror("z80dart_irq_ack: failed to find an interrupt to ack!\n");
return m_chanB->m_rr[2];
}
开发者ID:jiangzhonghui,项目名称:mame,代码行数:27,代码来源:z80dart.c
示例10: check_interrupts
void z80dart_device::take_interrupt(int priority)
{
m_int_state[priority] |= Z80_DAISY_INT;
m_channel[Z80DART_CH_A].m_rr[0] |= Z80DART_RR0_INTERRUPT_PENDING;
// check for interrupt
check_interrupts();
}
开发者ID:DarrenBranford,项目名称:MAME4iOS,代码行数:8,代码来源:z80dart.c
示例11: check_interrupts
void z80dart_device::reset_interrupts()
{
for (auto & elem : m_int_state)
{
elem = 0;
}
check_interrupts();
}
开发者ID:Robbbert,项目名称:store1,代码行数:9,代码来源:z80dart.cpp
示例12: check_interrupts
void z80dart_device::reset_interrupts()
{
for (int i = 0; i < 8; i++)
{
m_int_state[i] = 0;
}
check_interrupts();
}
开发者ID:jiangzhonghui,项目名称:mame,代码行数:9,代码来源:z80dart.c
示例13: tms_interrupt
static void tms_interrupt(int irq)
{
if ((tms.imr & (1 << irq)) != 0)
{
tms.ifr |= 1 << irq;
}
check_interrupts();
}
开发者ID:cdenix,项目名称:ps3-mame-0125,代码行数:9,代码来源:tms32051.c
示例14: tms_interrupt
static void tms_interrupt(tms32051_state *cpustate, int irq)
{
if ((cpustate->imr & (1 << irq)) != 0)
{
cpustate->ifr |= 1 << irq;
}
check_interrupts(cpustate);
}
开发者ID:LeWoY,项目名称:MAMEHub,代码行数:9,代码来源:tms32051.c
示例15: LOG
//-------------------------------------------------
// reset_interrupts -
//-------------------------------------------------
void z80sio_device::reset_interrupts()
{
LOG(("%s %s \n",FUNCNAME, tag()));
// reset internal interrupt sources
for (int i = 0; i < 8; i++)
{
m_int_state[i] = 0;
}
check_interrupts();
}
开发者ID:GHackAnonymous,项目名称:mame,代码行数:14,代码来源:z80sio.c
示例16: LOG
void z80dart_device::device_reset()
{
LOG(("Z80DART \"%s\" Reset\n", tag()));
for (int channel = Z80DART_CH_A; channel <= Z80DART_CH_B; channel++)
{
m_channel[channel].reset();
}
check_interrupts();
}
开发者ID:DarrenBranford,项目名称:MAME4iOS,代码行数:11,代码来源:z80dart.c
示例17: xtensa_cpu_do_interrupt
void xtensa_cpu_do_interrupt(CPUState *cs)
{
XtensaCPU *cpu = XTENSA_CPU(cs);
CPUXtensaState *env = &cpu->env;
if (env->exception_index == EXC_IRQ) {
qemu_log_mask(CPU_LOG_INT,
"%s(EXC_IRQ) level = %d, cintlevel = %d, "
"pc = %08x, a0 = %08x, ps = %08x, "
"intset = %08x, intenable = %08x, "
"ccount = %08x\n",
__func__, env->pending_irq_level, xtensa_get_cintlevel(env),
env->pc, env->regs[0], env->sregs[PS],
env->sregs[INTSET], env->sregs[INTENABLE],
env->sregs[CCOUNT]);
handle_interrupt(env);
}
switch (env->exception_index) {
case EXC_WINDOW_OVERFLOW4:
case EXC_WINDOW_UNDERFLOW4:
case EXC_WINDOW_OVERFLOW8:
case EXC_WINDOW_UNDERFLOW8:
case EXC_WINDOW_OVERFLOW12:
case EXC_WINDOW_UNDERFLOW12:
case EXC_KERNEL:
case EXC_USER:
case EXC_DOUBLE:
case EXC_DEBUG:
qemu_log_mask(CPU_LOG_INT, "%s(%d) "
"pc = %08x, a0 = %08x, ps = %08x, ccount = %08x\n",
__func__, env->exception_index,
env->pc, env->regs[0], env->sregs[PS], env->sregs[CCOUNT]);
if (env->config->exception_vector[env->exception_index]) {
env->pc = relocated_vector(env,
env->config->exception_vector[env->exception_index]);
env->exception_taken = 1;
} else {
qemu_log("%s(pc = %08x) bad exception_index: %d\n",
__func__, env->pc, env->exception_index);
}
break;
case EXC_IRQ:
break;
default:
qemu_log("%s(pc = %08x) unknown exception_index: %d\n",
__func__, env->pc, env->exception_index);
break;
}
check_interrupts(env);
}
开发者ID:AjayMashi,项目名称:x-tier,代码行数:53,代码来源:helper.c
示例18: cycles_passed
void lr35902_cpu_device::execute_run()
{
do
{
if (m_dma_cycles_to_burn > 0)
{
if (m_dma_cycles_to_burn < 4)
{
cycles_passed(m_dma_cycles_to_burn);
m_dma_cycles_to_burn = 0;
}
else
{
cycles_passed(4);
m_dma_cycles_to_burn -= 4;
}
}
else
{
if ( m_execution_state ) {
uint8_t x;
/* Execute instruction */
switch( m_op ) {
#include "opc_main.hxx"
default:
// actually this should lock up the cpu!
logerror("LR35902: Illegal opcode $%02X @ %04X\n", m_op, m_PC);
break;
}
} else {
/* Fetch and count cycles */
bool was_halted = (m_enable & HALTED);
check_interrupts();
debugger_instruction_hook(m_PC);
if ( m_enable & HALTED ) {
cycles_passed(m_has_halt_bug ? 2 : 4);
m_execution_state = 1;
m_entering_halt = false;
} else {
if (was_halted) {
m_PC++;
} else {
m_op = mem_read_byte( m_PC++ );
}
}
}
m_execution_state ^= 1;
}
} while (m_icount > 0);
}
开发者ID:Dagarman,项目名称:mame,代码行数:50,代码来源:lr35902.cpp
示例19: WRITE8_DEVICE_HANDLER_TRAMPOLINE
WRITE8_DEVICE_HANDLER_TRAMPOLINE(acia6850, acia6850_data_w)
{
if (LOG) logerror("MC6850 '%s' Data: %02x\n", tag(), data);
if (!m_reset)
{
m_tdr = data;
m_status &= ~ACIA6850_STATUS_TDRE;
check_interrupts();
}
else
{
logerror("%s:ACIA %p: Data write while in reset!\n", m_machine.describe_context(), this);
}
}
开发者ID:cdenix,项目名称:psmame,代码行数:15,代码来源:6850acia.c
示例20: xtensa_set_irq
static void xtensa_set_irq(void *opaque, int irq, int active)
{
CPUXtensaState *env = opaque;
if (irq >= env->config->ninterrupt) {
qemu_log("%s: bad IRQ %d\n", __func__, irq);
} else {
uint32_t irq_bit = 1 << irq;
if (active) {
env->sregs[INTSET] |= irq_bit;
} else if (env->config->interrupt[irq].inttype == INTTYPE_LEVEL) {
env->sregs[INTSET] &= ~irq_bit;
}
check_interrupts(env);
}
}
开发者ID:Blopeur,项目名称:qemu-heca,代码行数:18,代码来源:xtensa_pic.c
注:本文中的check_interrupts函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论