psp fixes, gamma
[libpicofe.git] / psp / emu.c
index 9fc890c..4292615 100644 (file)
--- a/psp/emu.c
+++ b/psp/emu.c
@@ -1,3 +1,8 @@
+// (c) Copyright 2007 notaz, All rights reserved.
+// Free for non-commercial use.
+
+// For commercial use, separate licencing terms must be obtained.
+
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/syslimits.h> // PATH_MAX
 #include "menu.h"
 #include "emu.h"
 #include "mp3.h"
+#include "asm_utils.h"
 #include "../common/emu.h"
 #include "../common/lprintf.h"
 #include "../../Pico/PicoInt.h"
 
-#define OSD_FPS_X 424
+#define OSD_FPS_X 432
 
 // additional pspaudio imports, credits to crazyc
 int sceAudio_38553111(unsigned short samples, unsigned short freq, char unknown);  // play with conversion?
@@ -192,7 +198,6 @@ static void set_scaling_params(void)
        if (fbimg_width >= 480) {
                g_vertices[0].u = (fbimg_width-480)/2;
                g_vertices[1].u = src_width - (fbimg_width-480)/2 - 1;
-               if (fbimg_width == 480) border_hack = 1;
                fbimg_width = 480;
                fbimg_xoffs = 0;
        } else {
@@ -200,6 +205,7 @@ static void set_scaling_params(void)
                g_vertices[1].u = src_width;
                fbimg_xoffs = 240 - fbimg_width/2;
        }
+       if (fbimg_width > 320 && fbimg_width <= 480) border_hack = 1;
 
        if (fbimg_height >= 272) {
                g_vertices[0].v = (fbimg_height-272)/2;
@@ -234,25 +240,25 @@ static void set_scaling_params(void)
 
 static void do_pal_update(int allow_sh)
 {
-       unsigned int *spal=(void *)Pico.cram;
        unsigned int *dpal=(void *)localPal;
        int i;
 
-       for (i = 0x3f/2; i >= 0; i--)
-               dpal[i] = ((spal[i]&0x000f000f)<< 1)|((spal[i]&0x00f000f0)<<3)|((spal[i]&0x0f000f00)<<4);
+       //for (i = 0x3f/2; i >= 0; i--)
+       //      dpal[i] = ((spal[i]&0x000f000f)<< 1)|((spal[i]&0x00f000f0)<<3)|((spal[i]&0x0f000f00)<<4);
+       do_pal_convert(localPal, Pico.cram, currentConfig.gamma);
 
        if (allow_sh && (Pico.video.reg[0xC]&8)) // shadow/hilight?
        {
                // shadowed pixels
                for (i = 0x3f/2; i >= 0; i--)
-                       dpal[0x20|i] = dpal[0x60|i] = (dpal[i]>>1)&0x738e738e;
+                       dpal[0x20|i] = dpal[0x60|i] = (dpal[i]>>1)&0x7bcf7bcf;
                // hilighted pixels
                for (i = 0x3f; i >= 0; i--) {
-                       int t=localPal[i]&0xe71c;t+=0x4208;
-                       if (t&0x20) t|=0x1c;
-                       if (t&0x800) t|=0x700;
-                       if (t&0x10000) t|=0xe000;
-                       t&=0xe71c;
+                       int t=localPal[i]&0xf79e;t+=0x4208;
+                       if (t&0x20) t|=0x1e;
+                       if (t&0x800) t|=0x780;
+                       if (t&0x10000) t|=0xf000;
+                       t&=0xf79e;
                        localPal[0x80|i]=(unsigned short)t;
                }
                localPal[0xe0] = 0;
@@ -985,7 +991,7 @@ void emu_Loop(void)
                        for (i = 0; i < currentConfig.Frameskip; i++) {
                                updateKeys();
                                SkipFrame(); frames_done++;
-                               if (PsndOut) { // do framelimitting if sound is enabled
+                               if (!(currentConfig.EmuOpt&0x40000)) { // do framelimitting if needed
                                        int tval_diff;
                                        tval = sceKernelGetSystemTimeLow();
                                        tval_diff = (int)(tval - tval_thissec) << 8;
@@ -1030,7 +1036,7 @@ void emu_Loop(void)
 
                if (currentConfig.Frameskip < 0 && tval_diff - lim_time >= (300000<<8)) // slowdown detection
                        reset_timing = 1;
-               else if (PsndOut != NULL || currentConfig.Frameskip < 0)
+               else if (!(currentConfig.EmuOpt&0x40000) || currentConfig.Frameskip < 0)
                {
                        // sleep if we are still too fast
                        if (tval_diff < lim_time)