Ejemplo n.º 1
0
static void do_int(Z80Context* ctx)
{
    unhalt(ctx);
	ctx->IFF1 = 0;
	ctx->IFF2 = 0;
	ctx->int_req = 0;
    if (ctx->IM == 0)
    {
		ctx->exec_int_vector = 1;
		do_execute(ctx);
		ctx->exec_int_vector = 0;
    }
    else if (ctx->IM == 1)
    {
        doPush(ctx, ctx->PC);
        ctx->PC = 0x0038;
		ctx->tstates += 7;
    }
    else if (ctx->IM == 2)
    {
        doPush(ctx, ctx->PC);
		ushort vector_address = (ctx->I << 8) | ctx->int_vector;
		ctx->PC = read16(ctx, vector_address);
		ctx->tstates += 7;
    }
}
Ejemplo n.º 2
0
static void do_nmi(Z80Context* ctx)
{
	unhalt(ctx);
	ctx->IFF2 = ctx->IFF1;
	ctx->IFF1 = 0;
    doPush(ctx, ctx->PC);
	ctx->PC = 0x0066;	
	ctx->nmi_req = 0;
	ctx->tstates += 5;
}
Ejemplo n.º 3
0
vi_rc StartSuck( range *r )
{
    UpdateCurrentStatus( CSTATUS_SHIFT_LEFT );
    return( doPush( r, false ) );

} /* StartSuck */
Ejemplo n.º 4
0
vi_rc StartShove( range *r )
{
    UpdateCurrentStatus( CSTATUS_SHIFT_RIGHT );
    return( doPush( r, true ) );

} /* StartShove */