X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Fgp2x%2Fcpuctrl.c;h=b5b47360b6d009113d56ef6325cd616596934cc0;hb=82bc9cdd10371209663e62f5a21ab0bccd671ab0;hp=9940fd5db4e0e8dbd5d759b23f17e876e25dabec;hpb=29a951879b9e2d2f93f9aa3a34c2872e6cbf4e39;p=picodrive.git diff --git a/platform/gp2x/cpuctrl.c b/platform/gp2x/cpuctrl.c index 9940fd5..b5b4736 100644 --- a/platform/gp2x/cpuctrl.c +++ b/platform/gp2x/cpuctrl.c @@ -255,25 +255,46 @@ void set_RAM_Timings(int tRC, int tRAS, int tWR, int tMRD, int tRFC, int tRP, in } -void set_gamma(int g100) +void set_gamma(int g100, int A_SNs_curve) { float gamma = (float) g100 / 100; int i; - //printf ("set gamma = %f\r\n",gamma); gamma = 1/gamma; - //enable gamma - MEM_REG[0x2880>>1]&=~(1<<12); + //enable gamma + MEM_REG[0x2880>>1]&=~(1<<12); - MEM_REG[0x295C>>1]=0; - for(i=0; i<256; i++) - { + MEM_REG[0x295C>>1]=0; + for(i=0; i<256; i++) + { unsigned char g; - unsigned short s; - g =(unsigned char)(255.0*pow(i/255.0,gamma)); - s = (g<<8) | g; + unsigned short s; + const unsigned short grey50=143, grey75=177, grey25=97; + float blah; + + if (A_SNs_curve) + { + // The next formula is all about gaussian interpolation + blah = (( -128 * exp(-powf((float) i/64.0f + 2.0f , 2.0f))) + + ( -64 * exp(-powf((float) i/64.0f + 1.0f , 2.0f))) + + (grey25 * exp(-powf((float) i/64.0f - 1.0f , 2.0f))) + + (grey50 * exp(-powf((float) i/64.0f - 2.0f , 2.0f))) + + (grey75 * exp(-powf((float) i/64.0f - 3.0f , 2.0f))) + + ( 256 * exp(-powf((float) i/64.0f - 4.0f , 2.0f))) + + ( 320 * exp(-powf((float) i/64.0f - 5.0f , 2.0f))) + + ( 384 * exp(-powf((float) i/64.0f - 6.0f , 2.0f)))) / (1.772637f); + blah += 0.5f; + } + else + { + blah = i; + } + + g = (unsigned char)(255.0*pow(blah/255.0,gamma)); + //printf("%d : %d\n", i, g); + s = (g<<8) | g; MEM_REG[0x295E>>1]= s; - MEM_REG[0x295E>>1]= g; - } + MEM_REG[0x295E>>1]= g; + } }