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; }
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); }
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; }