support armv5 build
[pcsx_rearmed.git] / frontend / plugin_lib.c
index da25c6e..fe9fad1 100644 (file)
@@ -81,8 +81,9 @@ static void print_cpu_usage(void)
 // draw 192x8 status of 24 sound channels
 static __attribute__((noinline)) void draw_active_chans(void)
 {
-       extern void spu_get_debug_info(int *chans_out, int *fmod_chans_out, int *noise_chans_out); // hack
-       int live_chans, fmod_chans, noise_chans;
+       extern void spu_get_debug_info(int *chans_out, int *run_chans,
+               int *fmod_chans_out, int *noise_chans_out); // hack
+       int live_chans, run_chans, fmod_chans, noise_chans;
 
        static const unsigned short colors[2] = { 0x1fe3, 0x0700 };
        unsigned short *dest = (unsigned short *)pl_vout_buf +
@@ -93,11 +94,11 @@ static __attribute__((noinline)) void draw_active_chans(void)
        if (pl_vout_bpp != 16)
                return;
 
-       spu_get_debug_info(&live_chans, &fmod_chans, &noise_chans);
+       spu_get_debug_info(&live_chans, &run_chans, &fmod_chans, &noise_chans);
 
        for (c = 0; c < 24; c++) {
                d = dest + c * 8;
-               p = !(live_chans & (1<<c)) ? 0 :
+               p = !(live_chans & (1<<c)) ? (run_chans & (1<<c) ? 0x01c0 : 0) :
                     (fmod_chans & (1<<c)) ? 0xf000 :
                     (noise_chans & (1<<c)) ? 0x001f :
                     colors[c & 1];
@@ -109,6 +110,12 @@ static __attribute__((noinline)) void draw_active_chans(void)
 
 static void *pl_vout_set_mode(int w, int h, int bpp)
 {
+       // special h handling, Wipeout likes to change it by 1-6
+       static int vsync_cnt_ms_prev;
+       if ((unsigned int)(vsync_cnt - vsync_cnt_ms_prev) < 5*60)
+               h = (h + 7) & ~7;
+       vsync_cnt_ms_prev = vsync_cnt;
+
        if (w == pl_vout_w && h == pl_vout_h && bpp == pl_vout_bpp)
                return pl_vout_buf;
 
@@ -126,7 +133,10 @@ static void *pl_vout_set_mode(int w, int h, int bpp)
 
        if (pl_vout_buf == NULL)
                fprintf(stderr, "failed to set mode\n");
+
+       // menu decides on layer size, we commit it
        menu_notify_mode_change(w, h, bpp);
+       omap_enable_layer(1);
 
        return pl_vout_buf;
 }
@@ -164,7 +174,10 @@ static int pl_vout_open(void)
 
        omap_enable_layer(1);
 #if defined(VOUT_FBDEV)
-       pl_vout_buf = vout_fbdev_flip(layer_fb);
+       // force mode update
+       int h = pl_vout_h;
+       pl_vout_h--;
+       pl_vout_buf = pl_vout_set_mode(pl_vout_w, h, pl_vout_bpp);
 
        // try to align redraws to vsync
        vout_fbdev_wait_vsync(layer_fb);
@@ -304,7 +317,7 @@ void pl_frame_limit(void)
        if (!(g_opts & OPT_NO_FRAMELIM) && diff > frame_interval) {
                // yay for working usleep on pandora!
                //printf("usleep %d\n", diff - frame_interval / 2);
-               usleep(diff - frame_interval / 2);
+               usleep(diff - frame_interval);
        }
 
        if (pl_rearmed_cbs.frameskip) {
@@ -438,5 +451,8 @@ void pl_start_watchdog(void)
 
 void pl_init(void)
 {
+       pl_vout_w = pl_vout_h = 256;
+       pl_vout_bpp = 16;
+
        ts = pl_gun_ts_init();
 }