Exemple #1
0
static inline int neo_interrupt(void)
{
    /*
        static int fc;
        int skip_this_frame;
    */

    pd4990a_addretrace();
    // printf("neogeo_frame_counter_speed %d\n",neogeo_frame_counter_speed);
    if (!(irq2control & 0x8)) {
        if (fc >= neogeo_frame_counter_speed) {
            fc = 0;
            neogeo_frame_counter++;
        }
        fc++;
    }

    skip_this_frame = skip_next_frame;
    skip_next_frame = frame_skip(0);

    if (!skip_this_frame) {
        draw_screen();
    }
    return 1;
}
Exemple #2
0
static inline void update_screen(void) {

    if (irq2control & 0x40)
        irq2start = (irq2pos_value + 3) / 0x180;  /* ridhero gives 0x17d */
    else
        irq2start = 1000;
    current_line = 0;

    if (!skip_this_frame) {
        if (last_line < 21)
        {   /* there was no IRQ2 while the beam was in the visible area
              -> no need for scanline rendering */
            draw_screen();
            //draw_screen_scanline(last_line-21, 262, 1);
        } else {
            draw_screen_scanline(last_line-21, 262, 1);
        }
    }

    last_line=0;

    pd4990a_addretrace();
    if (fc >= neogeo_frame_counter_speed) {
        fc = 0;
        neogeo_frame_counter++;
    }
    fc++;

    skip_this_frame = skip_next_frame;
    skip_next_frame = frame_skip(0);
}
Exemple #3
0
static inline int neo_interrupt(void)
{
/*
    static int fc;
    int skip_this_frame;
*/

    pd4990a_addretrace();
    // printf("neogeo_frame_counter_speed %d\n",neogeo_frame_counter_speed);
    if (!(irq2control & 0x8)) {
	if (fc >= neogeo_frame_counter_speed) {
	    fc = 0;
	    neogeo_frame_counter++;
	}
	fc++;
    }

    skip_this_frame = skip_next_frame;
    skip_next_frame = frame_skip(0);

    if (!skip_this_frame) {
	PROFILER_START(PROF_VIDEO);
#ifdef DEBUG_VIDEO
	draw_screen_scanline(0, 256, 1);
#else
#ifdef FULL_GL
	fgl_drawscreen();
#else
	draw_screen();
#endif
#endif
	PROFILER_STOP(PROF_VIDEO);
    }
    return 1;
}