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; } }
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; }
vi_rc StartSuck( range *r ) { UpdateCurrentStatus( CSTATUS_SHIFT_LEFT ); return( doPush( r, false ) ); } /* StartSuck */
vi_rc StartShove( range *r ) { UpdateCurrentStatus( CSTATUS_SHIFT_RIGHT ); return( doPush( r, true ) ); } /* StartShove */