feat: collect the fpse, epsxe and mastergear assets

This commit is contained in:
Abdessamad Derraz committed 2026-09-03 22:04:14 +02:00
1 parent de1b4c4e6a
commit 3efe87f42b
50 files changed
+3951 -21

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,77 @@
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
// http://forums.ngemu.com/showthread.php?t=76098
// by guest(r) (guest.r@gmail.com)
// License: GNU-GPL
// Shader notes: looks better with sprite games
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
uniform sampler2D uTex;
varying vec4 v_texcoord0;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec4 v_texcoord5;
varying vec4 v_texcoord6;
const float mx = 0.325; // start smoothing factor
const float k = -0.250; // smoothing decrease factor
const float max_w = 0.25; // max. smoothing weigth
const float min_w =-0.05; // min smoothing/sharpening weigth
void main()
{
vec3 c = texture2D(uTex, v_texcoord0.xy).xyz;
vec3 i1 = texture2D(uTex, v_texcoord1.xy).xyz;
vec3 i2 = texture2D(uTex, v_texcoord2.xy).xyz;
vec3 i3 = texture2D(uTex, v_texcoord3.xy).xyz;
vec3 i4 = texture2D(uTex, v_texcoord4.xy).xyz;
vec3 o1 = texture2D(uTex, v_texcoord5.xy).xyz;
vec3 o3 = texture2D(uTex, v_texcoord6.xy).xyz;
vec3 o2 = texture2D(uTex, v_texcoord5.zw).xyz;
vec3 o4 = texture2D(uTex, v_texcoord6.zw).xyz;
vec3 dt = vec3(1.0,1.0,1.0);
float ko1=dot(abs(o1-c),dt);
float ko2=dot(abs(o2-c),dt);
float ko3=dot(abs(o3-c),dt);
float ko4=dot(abs(o4-c),dt);
float sd1 = dot(abs(i1-i3),dt);
float sd2 = dot(abs(i2-i4),dt);
float w1 = step(ko1,ko3)*sd2;
float w2 = step(ko2,ko4)*sd1;
float w3 = step(ko3,ko1)*sd2;
float w4 = step(ko4,ko2)*sd1;
c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
float lc = c.r+c.g+c.b+0.2;
w1 = (i1.r+i1.g+i1.b+lc)*0.2;
w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w);
w2 = (i2.r+i2.g+i2.b+lc)*0.2;
w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
w3 = (i3.r+i3.g+i3.b+lc)*0.2;
w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
w4 = (i4.r+i4.g+i4.b+lc)*0.2;
w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
gl_FragColor.a = 1.0;
}
@@ -0,0 +1,42 @@
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
attribute vec4 aVertex;
attribute vec2 aTexCoord;
uniform highp float outX;
uniform highp float outY;
uniform highp float resX;
uniform highp float resY;
varying vec4 v_texcoord0;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec4 v_texcoord5;
varying vec4 v_texcoord6;
void main()
{
float x = outX*((resX/outX)/2.0);
float y = outX*((resY/outY)/2.0);
vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y);
vec2 sd1 = dg1*0.5;
vec2 sd2 = dg2*0.5;
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);;
v_texcoord0=aTexCoord.xyxy;
v_texcoord1.xy = v_texcoord0.xy - sd1;
v_texcoord2.xy = v_texcoord0.xy - sd2;
v_texcoord3.xy = v_texcoord0.xy + sd1;
v_texcoord4.xy = v_texcoord0.xy + sd2;
v_texcoord5.xy = v_texcoord0.xy - dg1;
v_texcoord6.xy = v_texcoord0.xy + dg1;
v_texcoord5.zw = v_texcoord0.xy - dg2;
v_texcoord6.zw = v_texcoord0.xy + dg2;
}
+187
View File
@@ -0,0 +1,187 @@
precision highp float;
precision highp int;
uniform sampler2D uTex;
uniform highp float resX;
uniform highp float resY;
varying vec4 v_texture_coordinate;
varying vec4 v_texture_coordinate_1;
varying vec4 v_texture_coordinate_2;
varying vec4 v_texture_coordinate_3;
varying vec4 v_texture_coordinate_4;
varying vec4 v_texture_coordinate_5;
varying vec4 v_texture_coordinate_6;
varying vec4 v_texture_coordinate_7;
const float coef = 2.0;
const float threshold = 10.0;
const float y_weight = 48.0;
const float u_weight = 7.0;
const float v_weight = 6.0;
const mat3 yuv = mat3(0.299, 0.587, 0.114, -0.169, -0.331, 0.499, 0.499, -0.418, -0.0813);
const mat3 yuv_weighted = mat3(y_weight * yuv[0], u_weight * yuv[1], v_weight * yuv[2]);
vec4 RGBtoYUV(vec3 v0, vec3 v1, vec3 v2, vec3 v3) {
float a = yuv_weighted[0].x * v0.x + yuv_weighted[0].y * v0.y + yuv_weighted[0].z * v0.z;
float b = yuv_weighted[0].x * v1.x + yuv_weighted[0].y * v1.y + yuv_weighted[0].z * v1.z;
float c = yuv_weighted[0].x * v2.x + yuv_weighted[0].y * v2.y + yuv_weighted[0].z * v2.z;
float d = yuv_weighted[0].x * v3.x + yuv_weighted[0].y * v3.y + yuv_weighted[0].z * v3.z;
return vec4(a, b, c, d);
}
bvec4 _and_(bvec4 A, bvec4 B) {
return bvec4(A.x && B.x, A.y && B.y, A.z && B.z, A.w && B.w);
}
bvec4 _or_(bvec4 A, bvec4 B) {
return bvec4(A.x || B.x, A.y || B.y, A.z || B.z, A.w || B.w);
}
vec4 df(vec4 A, vec4 B) {
return vec4(abs(A - B));
}
bvec4 close(vec4 A, vec4 B) {
return (lessThan(df(A, B), vec4(10.0, 10.0, 10.0, 10.0)));
}
bvec4 eq2(vec4 A, vec4 B)
{
return (lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0)));
}
float c_df(vec3 c1, vec3 c2) {
vec3 df = abs(c1 - c2);
return df.r + df.g + df.b;
}
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) {
return (df(a, b) + df(a, c) + df(d, e) + df(d, f) + 4.0 * df(g, h));
}
void main() {
vec2 fp = fract(v_texture_coordinate.xy * vec2(resX, resY));
vec3 A1 = texture2D(uTex, v_texture_coordinate_1.xw).rgb;
vec3 B1 = texture2D(uTex, v_texture_coordinate_1.yw).rgb;
vec3 C1 = texture2D(uTex, v_texture_coordinate_1.zw).rgb;
vec3 A = texture2D(uTex, v_texture_coordinate_2.xw).rgb;
vec3 B = texture2D(uTex, v_texture_coordinate_2.yw).rgb;
vec3 C = texture2D(uTex, v_texture_coordinate_2.zw).rgb;
vec3 D = texture2D(uTex, v_texture_coordinate_3.xw).rgb;
vec3 E = texture2D(uTex, v_texture_coordinate_3.yw).rgb;
vec3 F = texture2D(uTex, v_texture_coordinate_3.zw).rgb;
vec3 G = texture2D(uTex, v_texture_coordinate_4.xw).rgb;
vec3 H = texture2D(uTex, v_texture_coordinate_4.yw).rgb;
vec3 I = texture2D(uTex, v_texture_coordinate_4.zw).rgb;
vec3 G5 = texture2D(uTex, v_texture_coordinate_5.xw).rgb;
vec3 H5 = texture2D(uTex, v_texture_coordinate_5.yw).rgb;
vec3 I5 = texture2D(uTex, v_texture_coordinate_5.zw).rgb;
vec3 A0 = texture2D(uTex, v_texture_coordinate_6.xy).rgb;
vec3 D0 = texture2D(uTex, v_texture_coordinate_6.xz).rgb;
vec3 G0 = texture2D(uTex, v_texture_coordinate_6.xw).rgb;
vec3 C4 = texture2D(uTex, v_texture_coordinate_7.xy).rgb;
vec3 F4 = texture2D(uTex, v_texture_coordinate_7.xz).rgb;
vec3 I4 = texture2D(uTex, v_texture_coordinate_7.xw).rgb;
vec4 b = RGBtoYUV(B, D, H, F);
vec4 c = RGBtoYUV(C, A, G, I);
vec4 e = RGBtoYUV(E, E, E, E);
vec4 d = b.yzwx;
vec4 f = b.wxyz;
vec4 g = c.zwxy;
vec4 h = b.zwxy;
vec4 i = c.wxyz;
vec4 i4 = RGBtoYUV(I4, C1, A0, G5);
vec4 i5 = RGBtoYUV(I5, C4, A1, G0);
vec4 h5 = RGBtoYUV(H5, F4, B1, D0);
vec4 f4 = h5.yzwx;
vec4 c1 = i4.yzwx;
vec4 g0 = i5.wxyz;
vec4 b1 = h5.zwxy;
vec4 d0 = h5.wxyz;
vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
vec4 Bo = vec4( 1.0, 1.0, -1.0, -1.0 );
vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
vec4 Bx = vec4( 0.5, 2.0, -0.5, -2.0 );
vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
vec4 By = vec4( 2.0, 0.5, -2.0, -0.5 );
vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
vec4 Az = vec4( 6.0, -2.0, -6.0, 2.0 );
vec4 Bz = vec4( 2.0, 6.0, -2.0, -6.0 );
vec4 Cz = vec4( 5.0, 3.0, -3.0, -1.0 );
vec4 Aw = vec4( 2.0, -6.0, -2.0, 6.0 );
vec4 Bw = vec4( 6.0, 2.0, -6.0,-2.0 );
vec4 Cw = vec4( 5.0, -1.0, -3.0, 3.0 );
// These inequations define the line below which interpolation occurs
bvec4 fx = greaterThan(Ao * fp.y + Bo * fp.x, Co);
bvec4 fx_left = greaterThan(Ax * fp.y + Bx * fp.x, Cx);
bvec4 fx_up = greaterThan(Ay * fp.y + By * fp.x, Cy);
bvec4 fx3_left = greaterThan(Az * fp.y + Bz * fp.x, Cz);
bvec4 fx3_up = greaterThan(Aw * fp.y + Bw * fp.x, Cw);
// bvec4 t1 = _and_( notEqual(e, f), notEqual(e, h) );
// bvec4 t2 = _and_( not(close(f, b)), not(close(h, d)));
// bvec4 t3 = _and_( not(close(f, i4)), not(close(h, i5)));
// bvec4 t4 = _or_( close(e, g), close(e, c) );
// bvec4 t5 = _and_( close(e, i), _or_(t3, t4) );
// bvec4 t6 = _and_( notEqual(f, f4), notEqual(f, i));
// bvec4 t7 = _and_( notEqual(h, h5), notEqual(h, i));
// bvec4 t8 = _or_( notEqual(h, g), notEqual(f, c));
// bvec4 t9 = _and_( close(b, c1), close(d, g0));
// bvec4 t10 = _or_(t2, t5);
// bvec4 t11 = _or_(_or_(t6, t7), _or_(t8, t9));
// bvec4 interp_restriction_lv1 = _and_(t1, _and_(t10, t11));
bvec4 t1 = _and_( notEqual(e, f), notEqual(e, h) );
bvec4 t2 = _and_( not(close(f, b)), not(close(h, d)) );
bvec4 t3 = _and_( not(close(h, i4)), not(close(h, i5)) );
bvec4 t4 = _and_( notEqual(f, f4), notEqual(f, i) );
bvec4 t5 = _and_( notEqual(h, h5), notEqual(h, i) );
bvec4 t6 = _and_( close(e, i), _or_(t4, t5) );
bvec4 t7 = _or_( close(e, g), close(e, c) );
bvec4 t8 = _and_( close(b, c1), close(d, g0));
bvec4 t9 = _or_( notEqual(h, g), notEqual(f, c));
bvec4 interp_restriction_lv1 = _and_( t1, _or_(_or_(_or_( _or_( _or_(t2, t3), t6 ), t7 ), t8), t9 ));
bvec4 interp_restriction_lv2_left = _and_( notEqual(e, g), notEqual(d, g) );
bvec4 interp_restriction_lv2_up = _and_( notEqual(e, c), notEqual(b, c) );
bvec4 interp_restriction_lv3_left = _and_( eq2(g,g0), not(eq2(d0,g0)) );
bvec4 interp_restriction_lv3_up = _and_( eq2(c,c1), not(eq2(b1,c1)) );
bvec4 edr = _and_( lessThan(weighted_distance(e, c, g, i, h5, f4, h, f),
weighted_distance(h, d, i5, f, i4, b, e, i)), interp_restriction_lv1 );
bvec4 edr_left = _and_( lessThanEqual(coef * df(f, g), df(h, c)), interp_restriction_lv2_left );
bvec4 edr_up = _and_( greaterThanEqual(df(f, g), coef * df(h, c)), interp_restriction_lv2_up );
bvec4 edr3_left = interp_restriction_lv3_left;
bvec4 edr3_up = interp_restriction_lv3_up;
bvec4 t13 = _or_(fx_left, _and_(edr3_left, fx3_left));
bvec4 t14 = _or_(fx_up, _and_(edr3_up, fx3_up));
bvec4 nc = _and_(edr, _or_(fx, _or_(_and_(edr_left, t13), _and_(edr_up, t14))));
bvec4 px = lessThanEqual(df(e, f), df(e, h));
vec3 res1 = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
vec3 res2 = nc.w ? px.w ? H : D : nc.z ? px.z ? D : B : nc.y ? px.y ? B : F : nc.x ? px.x ? F : H : E;
vec3 res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
gl_FragColor.xyz = res;
}
@@ -0,0 +1,32 @@
attribute vec2 aVertex;
attribute vec2 aTexCoord;
uniform highp float outX;
uniform highp float outY;
varying vec4 v_texture_coordinate;
varying vec4 v_texture_coordinate_1;
varying vec4 v_texture_coordinate_2;
varying vec4 v_texture_coordinate_3;
varying vec4 v_texture_coordinate_4;
varying vec4 v_texture_coordinate_5;
varying vec4 v_texture_coordinate_6;
varying vec4 v_texture_coordinate_7;
void main() {
float dx = 1.0 / outX;
float dy = 1.0 / outY;
// A1 B1 C1
// A0 A B C C4
// D0 D E F F4
// G0 G H I I4
// G5 H5 I5
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
v_texture_coordinate = aTexCoord.xyxy;
v_texture_coordinate_1 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, -2.0*dy); // A1 B1 C1
v_texture_coordinate_2 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, -dy); // A B C
v_texture_coordinate_3 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, 0.0); // D E F
v_texture_coordinate_4 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, dy); // G H I
v_texture_coordinate_5 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, 2.0*dy); // G5 H5 I5
v_texture_coordinate_6 = aTexCoord.xyyy + vec4(-2.0*dx, -dy, 0.0,dy); // A0 D0 G0
v_texture_coordinate_7 = aTexCoord.xyyy + vec4( 2.0*dx, -dy, 0.0,dy); // C4 F4 I4
}
+138
View File
@@ -0,0 +1,138 @@
/*
Hyllian's 5xBR v3.5a Shader
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
uniform sampler2D uTex;
uniform highp float resX;
uniform highp float resY;
uniform highp float outX;
uniform highp float outY;
varying vec2 v_texcoord0;
const float coef = 2.0;
const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
vec4 df(vec4 A, vec4 B) {
return abs(A-B);
}
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) {
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
}
void main(){
bool upscale = (1.0/outX) > (1.6 * (1.0/resX));
vec3 res = texture2D(uTex, v_texcoord0.xy).xyz;
// Let's skip the whole scaling if output size smaller than 1.6x of input size
if (upscale) {
bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule
bvec4 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up;
bvec4 nc; // new_color
bvec4 fx, fx_left, fx_up; // inequations of straight lines.
vec2 pS = 1.0 / (vec2(1.0/outX,1.0/outY));
vec2 fp = fract(v_texcoord0.xy*pS.xy);
vec2 TexCoord_0 = v_texcoord0.xy-fp*vec2(1.0/resX,1.0/resY);
vec2 dx = vec2(1.0/outX,0.0);
vec2 dy = vec2(0.0,1.0/outY);
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
vec3 A = texture2D(uTex, TexCoord_0 -dx -dy ).xyz;
vec3 B = texture2D(uTex, TexCoord_0 -dy ).xyz;
vec3 C = texture2D(uTex, TexCoord_0 +dx -dy ).xyz;
vec3 D = texture2D(uTex, TexCoord_0 -dx ).xyz;
vec3 E = texture2D(uTex, TexCoord_0 ).xyz;
vec3 F = texture2D(uTex, TexCoord_0 +dx ).xyz;
vec3 G = texture2D(uTex, TexCoord_0 -dx +dy ).xyz;
vec3 H = texture2D(uTex, TexCoord_0 +dy ).xyz;
vec3 I = texture2D(uTex, TexCoord_0 +dx +dy ).xyz;
vec3 A1 = texture2D(uTex, TexCoord_0 -dx -y2).xyz;
vec3 C1 = texture2D(uTex, TexCoord_0 +dx -y2).xyz;
vec3 A0 = texture2D(uTex, TexCoord_0 -x2 -dy).xyz;
vec3 G0 = texture2D(uTex, TexCoord_0 -x2 +dy).xyz;
vec3 C4 = texture2D(uTex, TexCoord_0 +x2 -dy).xyz;
vec3 I4 = texture2D(uTex, TexCoord_0 +x2 +dy).xyz;
vec3 G5 = texture2D(uTex, TexCoord_0 -dx +y2).xyz;
vec3 I5 = texture2D(uTex, TexCoord_0 +dx +y2).xyz;
vec3 B1 = texture2D(uTex, TexCoord_0 -y2).xyz;
vec3 D0 = texture2D(uTex, TexCoord_0 -x2 ).xyz;
vec3 H5 = texture2D(uTex, TexCoord_0 +y2).xyz;
vec3 F4 = texture2D(uTex, TexCoord_0 +x2 ).xyz;
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
vec4 d = vec4(b.y, b.z, b.w, b.x);
vec4 e = vec4(dot(E,rgbw));
vec4 f = vec4(b.w, b.x, b.y, b.z);
vec4 g = vec4(c.z, c.w, c.x, c.y);
vec4 h = vec4(b.z, b.w, b.x, b.y);
vec4 i = vec4(c.w, c.x, c.y, c.z);
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
vec4 f4 = vec4(h5.y, h5.z, h5.w, h5.x);
// These inequations define the line below which interpolation occurs.
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h)));
interp_restriction_lv2_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g)));
interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c)));
edr = bvec4(vec4(lessThan(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)))*vec4(interp_restriction_lv1));
edr_left = bvec4(vec4(lessThanEqual(coef*df(f,g),df(h,c)))*vec4(interp_restriction_lv2_left));
edr_up = bvec4(vec4(greaterThanEqual(df(f,g),coef*df(h,c)))*vec4(interp_restriction_lv2_up));
nc.x = ( edr.x && (fx.x || edr_left.x && fx_left.x || edr_up.x && fx_up.x) );
nc.y = ( edr.y && (fx.y || edr_left.y && fx_left.y || edr_up.y && fx_up.y) );
nc.z = ( edr.z && (fx.z || edr_left.z && fx_left.z || edr_up.z && fx_up.z) );
nc.w = ( edr.w && (fx.w || edr_left.w && fx_left.w || edr_up.w && fx_up.w) );
px = lessThanEqual(df(e,f),df(e,h));
res = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
}
gl_FragColor.rgb = res;
gl_FragColor.a = 1.0;
}
@@ -0,0 +1,37 @@
/*
Hyllian's 5xBR v3.5a Shader
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
attribute vec2 aVertex;
attribute vec2 aTexCoord;
varying vec2 v_texcoord0;
void main() {
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
v_texcoord0 = aTexCoord;
}
@@ -0,0 +1,69 @@
// AA-Color shader, Modified to use in PPSSPP. Grabbed from:
// http://forums.ngemu.com/showthread.php?t=76098
// by guest(r) (guest.r@gmail.com)
// license: GNU-GPL
// Color variables
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
const float a = 1.20 ; // saturation
const float b = 1.00 ; // brightness
const float c = 1.25 ; // contrast
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
float contrast0(float x)
{ return x; }
float contrast1(float x)
{ x = x*1.1547-1.0;
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
float contrast2(float x)
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
float contrast3(float x)
{ return 1.73*pow(0.57735*x,c); }
float contrast4(float x)
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
uniform sampler2D uTex;
varying vec4 v_texcoord0;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec4 v_texcoord5;
varying vec4 v_texcoord6;
void main()
{
vec3 c10 = texture2D(uTex, v_texcoord1.xy).xyz;
vec3 c01 = texture2D(uTex, v_texcoord4.xy).xyz;
vec3 c11 = texture2D(uTex, v_texcoord0.xy).xyz;
vec3 c21 = texture2D(uTex, v_texcoord5.xy).xyz;
vec3 c12 = texture2D(uTex, v_texcoord2.xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0);
float k1=dot(abs(c01-c21),dt);
float k2=dot(abs(c10-c12),dt);
vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001);
float x = sqrt(dot(color,color));
color.r = pow(color.r+0.001,a);
color.g = pow(color.g+0.001,a);
color.b = pow(color.b+0.001,a);
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
gl_FragColor.a = 1.0;
}
@@ -0,0 +1,41 @@
// by guest(r) - guest.r@gmail.com
// license: GNU-GPL
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
attribute vec2 aVertex;
attribute vec2 aTexCoord;
uniform highp float outX;
uniform highp float outY;
varying vec4 v_texcoord0;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec4 v_texcoord5;
varying vec4 v_texcoord6;
float scaleoffset = 0.8;
void main()
{
float x = (1.0/outX)*scaleoffset;
float y = (1.0/outY)*scaleoffset;
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
v_texcoord0 = aTexCoord.xyxy;
v_texcoord1 = v_texcoord0;
v_texcoord2 = v_texcoord0;
v_texcoord4 = v_texcoord0;
v_texcoord5 = v_texcoord0;
v_texcoord1.y-=y;
v_texcoord2.y+=y;
v_texcoord4.x-=x;
v_texcoord5.x+=x;
}
@@ -0,0 +1,296 @@
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
varying vec2 vTexCoord;
uniform sampler2D uTex;
uniform float resX;
uniform float resY;
/*
Hyllian's CRT Shader
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
// Uncomment to enable anti-ringing to horizontal filter.
//#define ANTI_RINGING
// Comment next line if you don't desire the phosphor effect.
//#define PHOSPHOR
// Uncomment to enable adjustment of red and green saturation.
//#define RED_GREEN_CONTROL
#define InputGamma 2.4
#define OutputGamma 2.2
#define RED_BOOST 1.0
#define GREEN_BOOST 1.0
#define SCANLINES_STRENGTH 0.72
#define BEAM_MIN_WIDTH 0.86
#define BEAM_MAX_WIDTH 1.0
#define COLOR_BOOST 1.5
#define CRT_TV_BLUE_TINT 1.0
#define GAMMA_IN(color) pow(color, vec3(InputGamma, InputGamma, InputGamma))
#define GAMMA_OUT(color) pow(color, vec3(1.0 / OutputGamma, 1.0 / OutputGamma, 1.0 / OutputGamma))
const vec3 dtt = vec3(65536.0,255.0,1.0);
// Horizontal cubic filter.
// Some known filters use these values:
// B = 0.0, C = 0.0 => Hermite cubic filter.
// B = 1.0, C = 0.0 => Cubic B-Spline filter.
// B = 0.0, C = 0.5 => Catmull-Rom Spline filter. This is the default used in this shader.
// B = C = 1.0/3.0 => Mitchell-Netravali cubic filter.
// B = 0.3782, C = 0.3109 => Robidoux filter.
// B = 0.2620, C = 0.3690 => Robidoux Sharp filter.
// B = 0.36, C = 0.28 => My best config for ringing elimination in pixel art (Hyllian).
// For more info, see: http://www.imagemagick.org/Usage/img_diagrams/cubic_survey.gif
// Change these params to configure the horizontal filter.
const float B = 0.0;
const float C = 0.5;
/*
const mat4 invX = mat4( (-B - 6.0*C)/6.0, (3.0*B + 12.0*C)/6.0, (-3.0*B - 6.0*C)/6.0, B/6.0,
(12.0 - 9.0*B - 6.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, 0.0, (6.0 - 2.0*B)/6.0,
-(12.0 - 9.0*B - 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, (3.0*B + 6.0*C)/6.0, B/6.0,
(B + 6.0*C)/6.0, -C, 0.0, 0.0);
*/
const mat4 invX = mat4( (-B - 6.0*C)/6.0, (12.0 - 9.0*B - 6.0*C)/6.0, -(12.0 - 9.0*B - 6.0*C)/6.0, (B + 6.0*C)/6.0,
(3.0*B + 12.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, -C,
(-3.0*B - 6.0*C)/6.0, 0.0, (3.0*B + 6.0*C)/6.0, 0.0,
B/6.0, (6.0 - 2.0*B)/6.0, B/6.0, 0.0);
/*
const static float4x4 invX = float4x4( (-B - 6.0*C)/6.0, (3.0*B + 12.0*C)/6.0, (-3.0*B - 6.0*C)/6.0, B/6.0,
(12.0 - 9.0*B - 6.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, 0.0, (6.0 - 2.0*B)/6.0,
-(12.0 - 9.0*B - 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, (3.0*B + 6.0*C)/6.0, B/6.0,
(B + 6.0*C)/6.0, -C, 0.0, 0.0);
*/
const float halfpi = 1.5707963267948966192313216916398;
const float pi = 3.1415926535897932384626433832795;
const float JINC2_WINDOW_SINC = 0.42;
const float JINC2_SINC = 0.92;
const float wa = JINC2_WINDOW_SINC*pi;
const float wb = JINC2_SINC*pi;
const float JINC2_AR_STRENGTH = 0.8;
/*
const vec2 OGLSize = vec2( 4096.0, 2048.0 );
const vec2 OGLInvSize = vec2( 1.0/4096.0, 1.0/2048.0 );
const vec2 dx = vec2( 1.0/4096.0, 0.0 );
const vec2 dy = vec2( 0.0, 1.0/2048.0 );
*/
/*
const vec2 OGLSize = vec2( 1024.0, 512.0);
const vec2 OGLInvSize = vec2( 0.0009765625, 0.001953125);
const vec2 dx = vec2( 0.0009765625, 0.0);
const vec2 dy = vec2( 0.0, 0.001953125 );
*/
//uniform vec4 OGL2InvSize;
//uniform vec4 OGL2Size;
float reduce(vec3 A)
{
return dot(A, dtt);
}
// Calculates the distance between two points
float d(vec2 pt1, vec2 pt2)
{
vec2 v = pt2 - pt1;
return sqrt(dot(v,v));
}
vec3 min4(vec3 a, vec3 b, vec3 c, vec3 d)
{
return min(a, min(b, min(c, d)));
}
vec3 max4(vec3 a, vec3 b, vec3 c, vec3 d)
{
return max(a, max(b, max(c, d)));
}
vec4 resampler(vec4 x)
{
vec4 res;
res = (x==vec4(0.0, 0.0, 0.0, 0.0)) ? vec4(wa*wb) : sin(x*wa)*sin(x*wb)/(x*x);
return res;
}
void main()
{
vec3 color, E;
vec2 OGL2InvSize = vec2(resX, resY);
vec2 OGL2Size = 1.0/OGL2InvSize;
vec2 dx = vec2(OGL2InvSize.x,0.0);
vec2 dy = vec2(0.0, OGL2InvSize.y);
vec2 pix_coord = vTexCoord.xy*OGL2Size+vec2(-0.5,0.5);
vec2 tex = (floor(vTexCoord.xy*OGL2Size) + vec2(0.5, 0.5))*OGL2InvSize;
vec2 tc = (floor(pix_coord)+vec2(0.5,0.5))*OGL2InvSize;
vec2 fp = fract(pix_coord*0.25);
vec3 c00 = GAMMA_IN(texture2D(uTex, tc - dx - dy).xyz);
vec3 c01 = GAMMA_IN(texture2D(uTex, tc - dy).xyz);
vec3 c02 = GAMMA_IN(texture2D(uTex, tc + dx - dy).xyz);
vec3 c03 = GAMMA_IN(texture2D(uTex, tc + 2.0*dx - dy).xyz);
vec3 c10 = GAMMA_IN(texture2D(uTex, tc - dx).xyz);
vec3 c11 = GAMMA_IN(texture2D(uTex, tc ).xyz);
vec3 c12 = GAMMA_IN(texture2D(uTex, tc + dx).xyz);
vec3 c13 = GAMMA_IN(texture2D(uTex, tc + 2.0*dx).xyz);
color = E = GAMMA_IN(texture2D(uTex, vTexCoord.xy).xyz);
vec3 F0 = texture2D(uTex, tex +dx+0.25*dx +0.25*dy).xyz;
vec3 F1 = texture2D(uTex, tex +dx+0.25*dx -0.25*dy).xyz;
vec3 F2 = texture2D(uTex, tex +dx-0.25*dx -0.25*dy).xyz;
vec3 F3 = texture2D(uTex, tex +dx-0.25*dx +0.25*dy).xyz;
vec3 H0 = texture2D(uTex, tex +0.25*dx +0.25*dy+dy).xyz;
vec3 H1 = texture2D(uTex, tex +0.25*dx -0.25*dy+dy).xyz;
vec3 H2 = texture2D(uTex, tex -0.25*dx -0.25*dy+dy).xyz;
vec3 H3 = texture2D(uTex, tex -0.25*dx +0.25*dy+dy).xyz;
float f0 = reduce(F0);
float f1 = reduce(F1);
float f2 = reduce(F2);
float f3 = reduce(F3);
float h0 = reduce(H0);
float h1 = reduce(H1);
float h2 = reduce(H2);
float h3 = reduce(H3);
bool block_3d = ((f0==f1)&&(f1==f2)&&(f2==f3)&&(h0==h1)&&(h1==h2)&&(h2==h3));
#ifdef ANTI_RINGING
// Get min/max samples
vec3 min_sample = min(min(c01,c11), min(c02,c12));
vec3 max_sample = max(max(c01,c11), max(c02,c12));
// vec3 min_sample = min(min(c01,c11), min(c02,c12)) + (c10-c11)*(c12-c13);
// vec3 max_sample = max(max(c01,c11), max(c02,c12)) - (c10-c11)*(c12-c13);
#endif
mat4 color_matrix0 = mat4(vec4(c00,1.0), vec4(c01,1.0), vec4(c02,1.0), vec4(c03,1.0));
mat4 color_matrix1 = mat4(vec4(c10,1.0), vec4(c11,1.0), vec4(c12,1.0), vec4(c13,1.0));
vec4 lobes = vec4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0);
vec4 invX_Px = invX * lobes;
vec3 color0 = (color_matrix0 * invX_Px).xyz;
vec3 color1 = (color_matrix1 * invX_Px).xyz;
/*
vec4 invX_Px = vec4(dot(invX[0], poli), dot(invX[1], poli), dot(invX[2], poli), dot(invX[3], poli));
vec3 color0 = vec3(dot(color_matrix0[0], invX_Px), dot(color_matrix0[1], invX_Px), dot(color_matrix0[2], invX_Px));
vec3 color1 = vec3(dot(color_matrix1[0], invX_Px), dot(color_matrix1[1], invX_Px), dot(color_matrix1[2], invX_Px));
*/
/*
float4x3 color_matrix0 = float4x3(c00, c01, c02, c03);
float4x3 color_matrix1 = float4x3(c10, c11, c12, c13);
float4 invX_Px = mul(invX, float4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0));
float3 color0 = mul(invX_Px, color_matrix0);
float3 color1 = mul(invX_Px, color_matrix1);
*/
#ifdef ANTI_RINGING
// Anti-ringing
color0 = clamp(color0, min_sample, max_sample);
color1 = clamp(color1, min_sample, max_sample);
#endif
float pos0 = fp.y;
float pos1 = 1.0 - fp.y;
vec3 lum0 = mix(vec3(BEAM_MIN_WIDTH), vec3(BEAM_MAX_WIDTH), color0);
vec3 lum1 = mix(vec3(BEAM_MIN_WIDTH), vec3(BEAM_MAX_WIDTH), color1);
vec3 d0 = clamp(pos0/(lum0+0.0000001), 0.0, 1.0);
vec3 d1 = clamp(pos1/(lum1+0.0000001), 0.0, 1.0);
d0 = exp(-10.0*SCANLINES_STRENGTH*d0*d0);
d1 = exp(-10.0*SCANLINES_STRENGTH*d1*d1);
color = clamp(color0*d0+color1*d1, 0.0, 1.0);
color *= COLOR_BOOST;
#ifdef RED_GREEN_CONTROL
color.rgb *= vec3(RED_BOOST, GREEN_BOOST, CRT_TV_BLUE_TINT);
#else
color.b *= CRT_TV_BLUE_TINT;
#endif
#ifdef PHOSPHOR
float mod_factor = VAR.texCoord.x * IN.output_size.x * IN.texture_size.x / IN.video_size.x;
vec3 dotMaskWeights = mix(
vec3(1.0, 0.7, 1.0),
vec3(0.7, 1.0, 0.7),
floor(fmod(mod_factor, 2.0))
);
color.rgb *= dotMaskWeights;
#endif
color = block_3d ? color : E;
color = GAMMA_OUT(color);
// final sum and weight normalization
gl_FragColor.xyz = color;
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
@@ -0,0 +1,31 @@
precision mediump float;
uniform sampler2D uTex;
uniform lowp float resX;
uniform lowp float resY;
varying vec2 vTexCoord;
void main()
{
const float th = 0.10;
const float bb = 0.50;
const float pp = 1.50;
vec2 stp0 = vec2(resX, 0.);
vec2 st0p = vec2(0., resY);
vec2 stpp = vec2(resX, resY);
vec2 stpm = vec2(resX, -resY);
vec3 c11 = texture2D(uTex, vTexCoord).rgb;
vec3 c00 = texture2D(uTex, vTexCoord-stpp).rgb;
vec3 c22 = texture2D(uTex, vTexCoord+stpp).rgb;
vec3 c20 = texture2D(uTex, vTexCoord-stpm).rgb;
vec3 c02 = texture2D(uTex, vTexCoord+stpm).rgb;
vec3 c01 = texture2D(uTex, vTexCoord-stp0).rgb;
vec3 c21 = texture2D(uTex, vTexCoord+stp0).rgb;
vec3 c10 = texture2D(uTex, vTexCoord-st0p).rgb;
vec3 c12 = texture2D(uTex, vTexCoord+st0p).rgb;
vec3 dt = vec3(1.0,1.0,1.0);
float d1=dot(abs(c00-c22),dt);
float d2=dot(abs(c20-c02),dt);
float hl=dot(abs(c01-c21),dt);
float vl=dot(abs(c10-c12),dt);
float d = bb*pow(max(d1+d2+hl+vl-th,0.0),pp)/(dot(c11,dt)+0.25);
gl_FragColor = vec4((1.1-d)*c11, 1.);
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
@@ -0,0 +1,30 @@
precision mediump float;
uniform sampler2D uTex;
uniform lowp float resX;
uniform lowp float resY;
varying vec2 vTexCoord;
const float th = 0.15;
const float bb = 1.50;
const float pp = 1.55;
const float cl = 7.00;
void main()
{
vec2 stp0 = vec2(resX, 0.);
vec2 st0p = vec2(0., resY);
vec3 ct = texture2D(uTex, vTexCoord).rgb;
vec3 lx = texture2D(uTex, vTexCoord-stp0).rgb;
vec3 rx = texture2D(uTex, vTexCoord+stp0).rgb;
vec3 uy = texture2D(uTex, vTexCoord-st0p).rgb;
vec3 dy = texture2D(uTex, vTexCoord+st0p).rgb;
vec3 dt = vec3(1.0,1.0,1.0);
float d1 = 2.5*dot(abs(lx-rx),dt)/(dot(lx+rx,dt)+0.50);
float d2 = 2.5*dot(abs(uy-dy),dt)/(dot(uy+dy,dt)+0.50);
float d = d1 + d2;
float l = cl*length(ct)/1.73;
float p = floor(l);
float v = fract(l);
float t = (p==0.0)?0.6:0.33;
v = 0.6*(max(v-1.0+t,0.0))/t;
v = 1.73*(p+v)/cl + 0.05;
gl_FragColor = vec4(clamp((1.12-bb*pow(max(d-th,0.0),pp))*v*normalize(ct),0.,1.), 1.);
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
+46
View File
@@ -0,0 +1,46 @@
precision highp float;
precision highp int;
uniform sampler2D uTex;
uniform highp float resX;
uniform highp float resY;
varying highp vec2 vTexCoord;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec2 v_texcoord5;
varying vec2 v_texcoord6;
float dist(vec2 coord, vec2 source)
{
vec2 delta = coord - source;
return sqrt(dot(delta, delta));
}
float color_bloom(vec3 color)
{
const vec3 gray_coeff = vec3(0.30, 0.59, 0.11);
float bright = dot(color, gray_coeff);
return mix(1.0 + 0.05, 1.0 - 0.05, bright);
}
vec3 lookup(vec2 pixel_no, float offset_x, float offset_y, vec3 color)
{
vec2 offset = vec2(offset_x, offset_y);
float delta = dist(fract(pixel_no), offset + vec2(0.5, 0.5));
return color * exp(-2.4 * delta * color_bloom(color));
}
void main()
{
vec3 mid_color = lookup(v_texcoord6, 0.0, 0.0, texture2D(uTex, v_texcoord5).rgb);
vec3 color = vec3(0.0, 0.0, 0.0);
color += lookup(v_texcoord6, -1.0, -1.0, texture2D(uTex, v_texcoord1.xy).rgb);
color += lookup(v_texcoord6, 0.0, -1.0, texture2D(uTex, v_texcoord1.zw).rgb);
color += lookup(v_texcoord6, 1.0, -1.0, texture2D(uTex, v_texcoord2.xy).rgb);
color += lookup(v_texcoord6, -1.0, 0.0, texture2D(uTex, v_texcoord2.zw).rgb);
color += mid_color;
color += lookup(v_texcoord6, 1.0, 0.0, texture2D(uTex, v_texcoord3.xy).rgb);
color += lookup(v_texcoord6, -1.0, 1.0, texture2D(uTex, v_texcoord3.zw).rgb);
color += lookup(v_texcoord6, 0.0, 1.0, texture2D(uTex, v_texcoord4.xy).rgb);
color += lookup(v_texcoord6, 1.0, 1.0, texture2D(uTex, v_texcoord4.zw).rgb);
vec3 out_color = mix(1.2 * mid_color, color, 0.65);
gl_FragColor = vec4(out_color, 1.0);
}
+24
View File
@@ -0,0 +1,24 @@
uniform highp float outX;
uniform highp float outY;
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying highp vec2 vTexCoord;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec2 v_texcoord5;
varying vec2 v_texcoord6;
void main()
{
vTexCoord = aTexCoord;
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
float dx = 1.0 / 1280.0;
float dy = 1.0 / 720.0;
v_texcoord1 = vec4(vTexCoord + vec2(-dx, -dy), vTexCoord + vec2(0.0, -dy));
v_texcoord2 = vec4(vTexCoord + vec2(dx, -dy), vTexCoord + vec2(-dx, 0.0));
v_texcoord3 = vec4(vTexCoord + vec2(dx, 0.0), vTexCoord + vec2(-dx, dy));
v_texcoord4 = vec4(vTexCoord + vec2(0.0, dy), vTexCoord + vec2(dx, dy));
v_texcoord5 = vTexCoord;
v_texcoord6 = vTexCoord * (vec2(1280.0,720.0));
}
@@ -0,0 +1,38 @@
precision mediump float;
uniform sampler2D uTex;
uniform lowp float resX;
uniform lowp float resY;
varying vec2 vTexCoord;
void main() {
float FXAA_SPAN_MAX = 8.0;
float FXAA_REDUCE_MUL = 1.0/8.0;
float FXAA_REDUCE_MIN = (1.0/128.0);
vec3 rgbNW = texture2D(uTex, vTexCoord + (vec2(-1.0, -1.0) * vec2(resX, resY))).xyz;
vec3 rgbNE = texture2D(uTex, vTexCoord + (vec2(+1.0, -1.0) * vec2(resX, resY))).xyz;
vec3 rgbSW = texture2D(uTex, vTexCoord + (vec2(-1.0, +1.0) * vec2(resX, resY))).xyz;
vec3 rgbSE = texture2D(uTex, vTexCoord + (vec2(+1.0, +1.0) * vec2(resX, resY))).xyz;
vec3 rgbM = texture2D(uTex, vTexCoord).xyz;
vec3 luma = vec3(0.299, 0.587, 0.114);
float lumaNW = dot(rgbNW, luma);
float lumaNE = dot(rgbNE, luma);
float lumaSW = dot(rgbSW, luma);
float lumaSE = dot(rgbSE, luma);
float lumaM = dot(rgbM, luma);
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
vec2 dir;
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * vec2(resX, resY);
vec3 rgbA = (1.0/2.0) * (texture2D(uTex, vTexCoord + dir * (1.0/3.0 - 0.5)).xyz +texture2D(uTex, vTexCoord + dir * (2.0/3.0 - 0.5)).xyz);
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (texture2D(uTex, vTexCoord + dir * (0.0/3.0 - 0.5)).xyz +texture2D(uTex, vTexCoord + dir * (3.0/3.0 - 0.5)).xyz);
float lumaB = dot(rgbB, luma);
if((lumaB < lumaMin) || (lumaB > lumaMax)){
gl_FragColor.xyz=rgbA;
}else{
gl_FragColor.xyz=rgbB;
}
gl_FragColor.a = 1.0;
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
@@ -0,0 +1,55 @@
precision mediump float; // Set the default precision to medium. We don't need as high of a
uniform sampler2D uTex; // The input texture.
uniform lowp float resX;
uniform lowp float resY;
varying vec2 vTexCoord; // Interpolated texture coordinate per fragment
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
0.587,-0.275,-0.523,
0.114,-0.321, 0.311);
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
void main() {
float FXAA_SPAN_MAX = 8.0;
float FXAA_REDUCE_MUL = 1.0/8.0;
float FXAA_REDUCE_MIN = (1.0/128.0);
vec3 rgbNW = texture2D(uTex, vTexCoord + (vec2(-1.0, -1.0) * vec2(resX, resY))).xyz;
vec3 rgbNE = texture2D(uTex, vTexCoord + (vec2(+1.0, -1.0) * vec2(resX, resY))).xyz;
vec3 rgbSW = texture2D(uTex, vTexCoord + (vec2(-1.0, +1.0) * vec2(resX, resY))).xyz;
vec3 rgbSE = texture2D(uTex, vTexCoord + (vec2(+1.0, +1.0) * vec2(resX, resY))).xyz;
vec3 rgbM = texture2D(uTex, vTexCoord).xyz;
vec3 luma = vec3(0.299, 0.587, 0.114);
float lumaNW = dot(rgbNW, luma);
float lumaNE = dot(rgbNE, luma);
float lumaSW = dot(rgbSW, luma);
float lumaSE = dot(rgbSE, luma);
float lumaM = dot(rgbM, luma);
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
vec2 dir;
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * vec2(resX, resY);
vec3 rgbA = (1.0/2.0) * (
texture2D(uTex, vTexCoord + dir * (1.0/3.0 - 0.5)).xyz +
texture2D(uTex, vTexCoord + dir * (2.0/3.0 - 0.5)).xyz);
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
texture2D(uTex, vTexCoord + dir * (0.0/3.0 - 0.5)).xyz +
texture2D(uTex, vTexCoord + dir * (3.0/3.0 - 0.5)).xyz);
float lumaB = dot(rgbB, luma);
if((lumaB < lumaMin) || (lumaB > lumaMax))
{
rgbM = RGBtoYIQ*rgbA;
rgbM = vec3(pow(rgbM.x,val00.x),rgbM.yz*val00.yz);
gl_FragColor.xyz=YIQtoRGB*rgbM;
} else {
rgbM = RGBtoYIQ*rgbB;
rgbM = vec3(pow(rgbM.x,val00.x),rgbM.yz*val00.yz);
gl_FragColor.xyz=YIQtoRGB*rgbM;
}
gl_FragColor.a = 1.0;
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
@@ -0,0 +1,9 @@
precision mediump float;
varying vec2 vTexCoord;
uniform sampler2D uTex;
void main()
{
vec4 fragColor = texture2D(uTex, vTexCoord);
gl_FragColor = vec4(dot(fragColor, vec4(0.299, 0.587, 0.114, 0.0)));
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
@@ -0,0 +1,80 @@
precision mediump float;
varying vec2 vTexCoord;
uniform sampler2D uTex;
uniform float resX;
uniform float resY;
float CLength(vec4 c)
{
float rmean = c.x*0.5;
c*= c;
return sqrt((2.0+rmean)*c.x+4.0*c.y+(3.0-rmean)*c.z)/3.0;
}
vec3 rgb_to_hsv(vec3 RGB)
{
float minVal = min(min(RGB.x,RGB.y),RGB.z);
float maxVal = max(max(RGB.x,RGB.y),RGB.z);
float delta = maxVal - minVal; //Delta RGB value
vec3 HSV;
HSV.z = maxVal;
if (delta != 0.0) { // If gray, leave H & S at zero
HSV.y = delta / maxVal;
vec3 delRGB;
delRGB = (((vec3(maxVal) - RGB)/6.0)+(delta/2.0))/delta;
if (RGB.x == maxVal) HSV.x = delRGB.z - delRGB.y;
else if (RGB.y == maxVal) HSV.x = (1.0/3.0) + delRGB.x - delRGB.z;
else if (RGB.z == maxVal) HSV.x = (2.0/3.0) + delRGB.y - delRGB.x;
if (HSV.x < 0.0) { HSV.x += 1.0; }
if (HSV.x > 1.0) { HSV.x -= 1.0; }
}
return HSV;
}
vec3 hsv_to_rgb(vec3 HSV)
{
vec3 RGB = vec3(HSV.z);
if ( HSV.y != 0.0 ) {
float var_h = HSV.x * 6.0;
float var_i = floor(var_h);
float var_1 = HSV.z * (1.0 - HSV.y);
float var_2 = HSV.z * (1.0 - HSV.y * (var_h-var_i));
float var_3 = HSV.z * (1.0 - HSV.y * (1.0-(var_h-var_i)));
if (var_i == 0.0) { RGB = vec3(HSV.z, var_3, var_1); }
else if (var_i == 1.0) { RGB = vec3(var_2, HSV.z, var_1); }
else if (var_i == 2.0) { RGB = vec3(var_1, HSV.z, var_3); }
else if (var_i == 3.0) { RGB = vec3(var_1, var_2, HSV.z); }
else if (var_i == 4.0) { RGB = vec3(var_3, var_1, HSV.z); }
else { RGB = vec3(HSV.z, var_1, var_2); }
}
return RGB;
}
void main (void)
{
vec2 OGL2Param = vec2(resX, resY);
vec4 c0 = texture2D(uTex, vTexCoord.xy);
vec4 c1 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 0.0, 1.0));
vec4 c2 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2(-1.0, 1.0));
vec4 c3 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2(-1.0, 0.0));
vec4 c4 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2(-1.0,-1.0));
vec4 c5 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 0.0,-1.0));
vec4 c6 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 1.0,-1.0));
vec4 c7 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 1.0, 0.0));
vec4 c8 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 1.0, 1.0));
vec4 a0 = c8 - c4;
vec4 a1 = a0 - c2 - 2.0 * c3 + c6 + 2.0 * c7;
a0 = a0 + c2 + c1 * 2.0 - 2.0 * c5 - c6;
a0 = a0 * a0 + a1 * a1;
float toon = CLength(a0);
c0.rgb = rgb_to_hsv(c0.rgb);
c0.b = min(1.0,2.0*c0.b);
c0.rgb = hsv_to_rgb(c0.rgb);
gl_FragColor = c0 - vec4(toon);
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
@@ -0,0 +1,17 @@
precision mediump float;
varying vec2 vTexCoord;
uniform sampler2D uTex;
uniform float resX;
uniform float resY;
void main()
{
vec4 rgb = texture2D(uTex, vTexCoord.xy);
vec4 intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz,1.0));
if (fract(gl_FragCoord.y*0.5) > 0.5) intens = rgb * 0.8;
gl_FragColor = intens;
}
@@ -0,0 +1,7 @@
attribute highp vec2 aVertex;
attribute highp vec2 aTexCoord;
varying mediump vec2 vTexCoord;
void main(){
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
vTexCoord = aTexCoord;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large. Load diff
+753
View File
@@ -0,0 +1,753 @@
# SC3000
SMS-0274179A: Basic 2.10
SMS-8CC35177: Basic 3.10
SMS-A1BB9533: Music Editor
SMS-67A72170: Music Editor
SMS-3D36FFBA: Nihonshi Nenpyou
SMS-676D1EF9: Tanoshii Sansuu
# SF7000
SMS-B44024B4: 102 Programs for Yeno
SMS-4C62E6A0: Board Games
SMS-7D7F46D9: Crocky
SMS-EDB3ADA4: Disk BASIC
SMS-ED201C54: Educational
SMS-2545DE44: Games 1
SMS-FA905FB6: Games 2
SMS-EDB3ADA4: Graphics
SMS-7139E375: Kamikaze
SMS-FF3154DC: Music
SMS-EDB3ADA4: Olympics
SMS-1B4AB585: Poseidon Space
SMS-EDB3ADA4: Programming
SMS-EDB3ADA4: System
SMS-5994FB34: Utils DAO
SMS-EDB3ADA4: Yeno Demo
SMS-EDB3ADA4: Yeno Draw 1
SMS-1264D53B: Yeno Draw 2
SMS-922F3E10: Yeno Super Games
# GameGear
GG-E5A00815: 4-in-1
GG-34645DAB: 5-in-1
GG-D14AD8D6: Aerial Assault
GG-600A43D7: Aladdin
GG-600A43D7: Aladdin
GG-92883E2B: Aleste
GG-6A8D3874: Aleste 2
GG-9E6C75CE: Alien 3
GG-5002A558: Alien Syndrome
GG-FE927A98: Andre Agassi Tennis
GG-4CBEA8CE: Arcade Classics
GG-4C24CA06: Arch Rivals
GG-E53F42A5: Arena
GG-A69FFC77: Asterix Great Rescue
GG-7E256149: Ax Battler
GG-E8D6C1CD: Ax Battler
GG-C9E73AB5: Baku Baku Animal
GG-8567CDFF: Baseball '91
GG-291521EA: Batman and Robin
GG-64D128F5: Batman Forever
GG-23242473: Batman Returns
GG-4FCC613C: Batter Up
GG-AD35B38E: Battle Ship
GG-2C3C293B: Battletoads
GG-F0D71343: Beavis and Butthead
GG-E860B271: Berlin Wall
GG-BCFE1DEB: Bonkers Wax Up
GG-8B85A184: Bubble Bobble
GG-A5CD4E3C: Bugs Bunny Double Trouble
GG-E34B9EAA: Bust a Move
GG-F72A96AA: Buster Ball
GG-3D6DC66C: Buster Fight
GG-87514CD3: Captain America
GG-B833EF21: Casino
GG-EB229B19: Chakan
GG-8CDA710B: Chessmaster
GG-FC56E19A: Chicago Syndicate
GG-F15432FC: Chuck Rock
GG-C4F83772: Chuck Rock 2
GG-B8F1C273: Clutch Hitter
GG-255AA0D6: Coca Cola Kids
GG-387118DA: Columns
GG-31EC7137: Cool Spot
GG-D209EF29: Crash Dummies
GG-6E0DE72F: Crystal Warriors
GG-7A88AA43: Cut Throat Island
GG-7A88AA43: Cut Throat Island
GG-C6ABEC57: Daffy Duck
GG-D15A7199: Deep Duck Trouble
GG-D7BDE00E: Defenders of Oasis
GG-D7BDE00E: Defenders of Oasis
GG-3E4C78BD: Desert Speedtrap
GG-273669D8: Desert Strike
GG-175FC339: Devilish
GG-08C43F46: Doraemon
GG-428E6528: Double Dragon
GG-BD1EDCA0: Dracula
GG-81CEA900: Dragon
GG-F06C38AE: Dragon Crystal
GG-9814ADB8: Dragon Crystal
GG-FC4D4A75: Dream 11 Soccer
GG-49A4DCD4: Dunk Kids
GG-FE0FD6E3: Dynamite Headdy
GG-D5F067DE: Earthworm Jim
GG-607E0092: Ecco Dolphin
GG-20EA9CAB: Ecco Tides of Time
GG-7EEFABB4: Eternal Legend
GG-2CD08031: Evander Holyfield Boxing
GG-F1B7E052: F1
GG-FB98F938: F15 Strike Eagle
GG-F7F08FD4: FIFA International Soccer
GG-C40AD91D: FIFA Soccer '96
GG-8A6688ED: Face Ball 2000
GG-68E6A5FF: Factory Panic
GG-0F12E62C: Factory Panic
GG-8685A064: Fantasy Zone
GG-0EE626E8: Fatal Fury Special
GG-554F3F9F: Foreman for Real
GG-BACB70BD: Frank Thomas Big Hurt Baseball
GG-F3C1DB29: Fred Couples Golf
GG-B0702E0E: GLoc Air Battle
GG-3E129A3D: GLoc Air Battle
GG-40F2667E: GLoc Air Battle
GG-8D1659E1: GP Rider
GG-5584BEF5: Galaga 91
GG-3FF119DB: Games Part 2
GG-2BD72848: Gear Stadium Heiseiban
GG-1E5F7151: Gear Stadium
GG-04E043C6: Gear Works
GG-C2E54AA9: George Foreman Boxing
GG-3432CD9E: Godzilla
GG-264BD84C: Greendog
GG-678B0561: Griffin
GG-04B828B9: Gunstar Heroes
GG-D6907642: Halley Wars
GG-E069DD7F: Hao Pai
GG-F66C754A: Head Buster
GG-90889275: Home Alone
GG-150B600A: Hook
GG-B0040194: House of Tarot
GG-AFD25B5C: Incredible Hulk
GG-211E10CD: Indiana Jones
GG-8EAE787D: Iron Man and Manowar
GG-E0BD3B6D: Itchy and Scratchy Game
GG-CCB4FD4A: Jeopardy
GG-88BA0882: Jeopardy Sports
GG-7838D891: Joe Montana Football
GG-F7D07FDA: Judge Dredd
GG-E856BEFF: Junction
GG-CBB8F95B: Jungle Book
GG-7FF40B54: Jurassic Park
GG-2C95B01C: Kinetic Connection
GG-7B335196: Krustys Fun House
GG-B8D220F6: Last Action Hero
GG-A8CA8BE7: Last Bible 2
GG-C98E268D: Last Bible
GG-0CE9B7AD: Lemmings
GG-62F04AC8: Lemmings
GG-62F04AC8: Lemmings
GG-7D791642: Lillehammer '94
GG-F1298278: Lion King
GG-28DEF1D3: Little Mermaid
GG-6D1C85A6: Lucky Dime
GG-6D1C85A6: Lucky Dime
GG-5B1888BD: Lunar
GG-5CE9B363: Madden '96
GG-48230FB0: Madden NFL '95
GG-5FA93289: Magical Taruru to Kun
GG-E29A261D: Mah Jong
GG-938FAB1C: Majors Pro Baseball
GG-EC433472: Mappy
GG-78CB84C2: Marble Madness
GG-EC8CBD76: Markos Magic Football
GG-47A5FD38: Mean Bean Machine
GG-FA1E3E04: Megaman
GG-1B32C3FC: Mick and Mack
GG-86A1D3D9: Mickey Land of Illusion
GG-E08C4910: Mickey Legend of Illusion
GG-74B8BC1D: Mickey Magical Kingdom
GG-3ED7D23A: Mickeys Ultimate Challenge
GG-30A2FDB7: Monster Truck Wars
GG-0957B6CD: Mortal Kombat
GG-76203566: Mortal Kombat 2
GG-5DD26F3A: Mortal Kombat 3
GG-58940629: Ms Pacman
GG-062301C0: NBA Action
GG-F7D4AF2A: NBA Jam
GG-95E72C68: NBA Jam Tournament
GG-72476239: NFL '95
GG-F8069F32: NFL Quarterback Club '96
GG-8F1BA221: NHL All Star Hockey
GG-C656FAAE: NHL Hockey
GG-7F28E71F: Nazo Puyo
GG-3B9335F1: Ninja Gaiden
GG-424242D5: Ninja Gaiden
GG-737ABE10: Ninku
GG-8725C4D9: Ottifants
GG-A433C4F6: Outrun
GG-FC582218: PGA Tour '96
GG-C1872E30: PGA Tour Golf 2
GG-9254B56D: Pac Attack
GG-9B0CCC37: Pacman
GG-0E957CD0: Paperboy
GG-54CC8034: Paul's Blackjack
GG-BF988548: Paul's Poker
GG-83B89174: Paul's Solitaire
GG-20214F74: Pengo
GG-FFD7FD2D: Phantasy Star Adventure
GG-51B3D341: Phantasy Star
GG-2584A84F: Phantom 2040
GG-0115CFD9: Pop Breaker
GG-E013AC9C: Popeye Beach Volleyball
GG-D41CF642: Popils
GG-A88D10B1: Power Rangers
GG-6948D542: Power Rangers Movie
GG-87AD08E3: Primal Rage
GG-40A32344: Psychic World
GG-861ECF73: Puyo Puyo 2
GG-3F9FC809: Puzlow Kids
GG-323489E0: Quiz Gear
GG-5B5B8BEF: RBI Baseball '94
GG-5B5B8BEF: RBI Baseball '94
GG-5F518F21: Ray Earth 2
GG-1D6EB8DD: Ray Earth
GG-DF55BBCA: Ren and Stimpy
GG-9A19C81E: Revenge of Drancon
GG-D0B035C1: Riddick Bowe Boxing
GG-C34CAEB8: Ristar
GG-32597488: Road Of Magic 2
GG-210C237D: Road Of Magic 3
GG-325BB911: Road Of Magic
GG-CCF0E19D: Road Rash
GG-77F6773B: Robocop 3
GG-60F52E6C: Robocop vs Terminator
GG-FA1E7714: Ronald in Magical World
GG-70C1A950: Royal Stone
GG-5E0E67A8: Ryu Kyu
GG-D239C688: SD Gundam Winners History
GG-EB5BCDB4: Sailor Moon
GG-1421A863: Saint
GG-7E57002C: Samurai Shodown
GG-AF96E5B7: Samurai Spirits
GG-C7FA78E8: Scratch Golf
GG-DB184610: Shanghai 2
GG-A64AE214: Shaq Fu
GG-1A9867E5: Shikin Castle
GG-70C791B2: Shining Force 2
GG-70C791B2: Shining Force 2
GG-70C791B2: Shining Force 3
GG-B42F5443: Shining Force
GG-4868AF97: Shinobi
GG-02CDBFD5: Shinobi 2
GG-4868AF97: Shinobi
GG-E081AEAB: Simpsons: Bart vs Mutants
GG-C513070B: Simpsons: Bart vs World
GG-44C49734: Simpsons: Bartman Meets Radioactive Man
GG-DF62839A: Skweek
GG-60BD0530: Slamdunk
GG-FE85E4D0: Slider
GG-1B6AD71A: Smash TV
GG-1CFF4419: Smurfs
GG-AB6A3283: Solitaire Fun Pak
GG-7F487400: Solitaire Poker
GG-462FDCE1: Sonic and Tails
GG-6D667E74: Sonic and Tails 2
GG-1167F6F2: Sonic Blast
GG-303D4CC6: Sonic Chaos
GG-9FB491AC: Sonic Drift
GG-9595442C: Sonic Drift 2
GG-412662EC: Sonic Hedgehog
GG-7CB94632: Sonic Hedgehog 2
GG-032E890C: Sonic Labyrinth
GG-28022178: Sonic Spinball
GG-3FC35B3C: Sonic Triple Trouble
GG-F63BDDDC: Soukoban
GG-5B34BBDC: Space Harrier
GG-FFD17781: Spiderman
GG-3745479C: Spiderman vs XMen
GG-60F3BFEC: Sports Illustrated Football and Baseball
GG-35B44CCD: Sports Trivia
GG-0E95AD8C: Sports Trivia Championship Edition
GG-8CE0D025: Star Wars
GG-1C7F4E00: Stargate
GG-B6279003: Streets of Rage
GG-37FF4A07: Streets of Rage 2
GG-ECE30A2F: Strider Returns
GG-7BFE73CC: Super Columns
GG-5752F009: Super Golf
GG-B38C0DD5: Super Monaco GP
GG-57C0F784: Super Monaco GP 2
GG-B9E9EABC: Super Off Road
GG-EDE3ACF8: Super Return of Jedi
GG-53EBABE4: Super Space Invaders
GG-B801A283: Super Wagan Land
GG-CC237DFD: Super Wars
GG-3C714539: Surfing Ninjas
GG-FEC55D11: Sylvan Tale
GG-75C5B7CC: T2Arcade Game
GG-52C14765: Tails Adventures
GG-19FCFD53: Tails Sky Patrol
GG-7F0446E7: Talespin
GG-C67260C2: Tama and Friends Olympics
GG-7E606200: Taz Escape from Mars
GG-43CFECCD: Tazmania
GG-5F5BE6C4: Tempo Jr
GG-32CDF9FE: Terminator
GG-6B9F80DC: Terminator 2
GG-0FF55C69: Tesserae
GG-559908DC: Tin Tin in Tibet
GG-0196A0D1: Tom and Jerry
GG-A9E62EAE: True Lies
GG-BD600BFF: Ultimate Soccer
GG-830422EB: VR Troopers
GG-579F0CD6: Vampire (SEGA)
GG-579F0CD6: Vampire (SIMS)
GG-4DBA836D: Virtua Fighter
GG-D40F76FA: Virtua Fighters Akira
GG-A53071DE: Virtua Fighters Pai Chan
GG-6C57F553: Volleyball
GG-C9907760: Voyage of Hyoutanjima
GG-42FD07F0: WWF Raw
GG-6295D408: Wizard Pinball
GG-49F26E0C: Wonder Boy
GG-183D4E26: Wonder Boy 3
GG-81E1D7B4: Wonder Boy 3
GG-AA6175EF: Woody Pop
GG-02ED2F29: World Class Leader Board Golf
GG-EBC0E24C: World Cup '94
GG-B38C0DD5: World GP
GG-C4CFA593: World Series Baseball
GG-4AA1C5F8: World Series Baseball
GG-8234C1C2: World Series Baseball '95
GG-FEC28F0A: XMen
GG-89482EF0: XMen Gamemaster's Legacy
GG-2529A965: XMen in Mojo World
GG-7CB2B470: Yaiba
GG-3F23F78C: Yogi Bears Gold Rush
GG-5FA2D398: Yu Yu Hakusho 2
GG-0C40C460: Yu Yu Hakusho
GG-76F3268F: Zan Gear
GG-D40CA2E9: Zool
GG-E4842114: Zoop
# SG1000
SMS-7E733101: Bank Panic
SMS-894ABB0A: Bomb Jack
SMS-066977F5: Borderline
SMS-2DF2E506: C-47
SMS-41D4ABE8: CSo
SMS-240D88EA: Castle
SMS-7569EEFF: Chack and Pop
SMS-E854AEEA: Champion Baseball
SMS-083AC52D: Champion Billiards
SMS-E152D16B: Champion Boxing
SMS-B4DA4E18: Champion Boxing
SMS-5A718F40: Champion Golf
SMS-5A718F40: Champion Golf
SMS-5AFD0539: Champion Ice Hockey
SMS-3EB2F398: Champion Pro Wrestling
SMS-C271E59F: Champion Soccer
SMS-7E744C66: Champion Tennis
SMS-DED6E279: Choplifter
SMS-98E58D21: Dragon Wang
SMS-2A5D58EC: Drol
SMS-DF0F1194: Elevator Action
SMS-8A7C7DA2: Exerion
SMS-6D022E3D: Flicky
SMS-DC5C8E60: GP World
SMS-F32BC995: Girls Garden
SMS-712CCE24: Golgo 13
SMS-894931FF: Gulkave
SMS-29B1909B: Guzzler
SMS-2B184269: Hang On 2
SMS-F2BD3DA2: Hero
SMS-2C8D3EA3: Hustle Chumy
SMS-602EE204: Hyper Sports
SMS-00901472: James Bond 007
SMS-20A22C16: Lode Runner
SMS-3AE47C9D: Lode Runner Championship
SMS-D46173E3: Monaco GP
SMS-9909FF02: Ninja
SMS-3B5F14F0: Orguss
SMS-FDCE4391: Pacar
SMS-184BA811: Pachinko 2
SMS-7FE3E65D: Penguin Egg
SMS-464FF4DA: Pop Flamer
SMS-37678738: QBert
SMS-BB7B1735: Rock and Bolt
SMS-E83023AB: Safari Hunting
SMS-1E3B67A8: Safari Race
SMS-C9DB366C: Sega Galaga
SMS-5D793949: Soukoban
SMS-F59FC1CB: Space Invaders
SMS-A89E022C: Star Force
SMS-1FDCA87D: Star Jacker
SMS-B165C080: Star Jacker
SMS-BD6FC22B: Super Tank
SMS-384339BB: Sword Fight
SMS-7CC5BE6A: Wonder Boy
SMS-C652BE2C: Yamato
SMS-C9EB9C6C: Zaxxon
SMS-BE551992: Zippy Race
# MasterSystem
SMS-BDD13CB6: ALF
SMS-B3341812: Ace of Aces
SMS-8391EB14: Action Fighter
SMS-C13645D5: Addams Family
SMS-75D66E6D: Aerial Assault
SMS-36DB262B: After Burner
SMS-34CC7833: Air Rescue
SMS-42FE34A4: Aladdin
SMS-0079B2BD: Aleste
SMS-CC76175F: Aleste 2
SMS-60A9475D: Aleste
SMS-7AED96C5: Alex in Hitech World
SMS-0F084CDE: Alex in Miracle World
SMS-83EE2949: Alex in Shinobi World
SMS-36134B51: Alex Kidd BMX Trial
SMS-BD555E2C: Alex Lost Stars
SMS-EC30F5D5: Alien 3
SMS-F2745B7E: Alien Storm
SMS-33E2D518: Alien Syndrome
SMS-58CA1BC1: Altered Beast
SMS-0DD199EC: American Baseball
SMS-22C6E438: American Pro Football
SMS-23A7D99D: Andre Agassi Tennis
SMS-D8F47118: Anmitsu Hime
SMS-1B619CCF: Arcade Hits
SMS-75235957: Ashura
SMS-B0E473DD: Asterix
SMS-9D631A24: Asterix Great Rescue
SMS-96DF1F67: Asterix Secret Mission
SMS-8CC13EF4: Astro Flash
SMS-9AE94EF7: Astro Warrior
SMS-B3397C20: Aztec Adventure
SMS-A5F44AE6: Back to the Future 2
SMS-383121F2: Back to the Future 3
SMS-33B2F22F: Baku Baku Animal
SMS-A848DF63: Bank Panic
SMS-CD54CB05: Barcelona '92
SMS-C9DA0600: Barcelona '92
SMS-AE56C45B: Basketball Nightmare
SMS-30007801: Batman Returns
SMS-17D09D7B: Battle Outrun
SMS-361A3DEE: Black Belt
SMS-46E8C4B1: Blade Eagle 3D
SMS-01BD8596: Bomber Raid
SMS-7B297369: Bonanza Brothers
SMS-89643C05: Borgman
SMS-BEC3B600: Bubble Bobble
SMS-BEC3B600: Bubble Bobble Final
SMS-F0E732FD: Buggy Run
SMS-14FB8953: California Games
SMS-61C27870: California Games 2
SMS-94824644: California Games 2
SMS-177FA54D: Captain Silver (1988)
SMS-4BB639B9: Captain Silver (1989)
SMS-D19FA102: Carmen San Diego
SMS-D60A3BD4: Casino Games
SMS-3E7EF412: Castelo Ra Tim Bum
SMS-F74187EF: Champions of Europe
SMS-60A28756: Championship Hockey
SMS-D0B6557C: Chapolim X Dracula
SMS-2696955F: Chase HQ
SMS-29F677C7: Cheese Catastrophe
SMS-17289447: Choplifter
SMS-C91A88EA: Chuck Rock
SMS-B2B80CDD: Chuck Rock 2
SMS-DFA7B8E7: Cloud Master
SMS-BE25530E: Columns
SMS-E6896DC3: Cool Spot
SMS-EC360D84: Crash Dummies
SMS-E5BC2A78: Cyber Shinobi
SMS-0365330C: Cyborg Hunter
SMS-0AC3EC2F: Daffy Duck
SMS-199FE655: Danan Jungle Fighter
SMS-AF22619F: Dead Angle
SMS-413707E6: Deep Duck Trouble
SMS-E583951B: Desert Speedtrap
SMS-84DBEF12: Desert Strike
SMS-2D707BC0: Dick Tracy
SMS-A2E204EE: Double Dragon
SMS-06C42559: Double Hawk
SMS-FAB83EDC: Double Target
SMS-87A29AFB: Dracula
SMS-5C3C27CC: Dragon
SMS-236B08D8: Dragon Crystal
SMS-B131B172: Dynamite Duke
SMS-167F6369: Dynamite Dux
SMS-2E7B1F40: ESWAT
SMS-131E2D7A: ESWAT
SMS-7F5DD956: Ecco Dolphin
SMS-3B696950: Enduro Racer
SMS-FE2F06ED: F1
SMS-BBCF84AA: F16 Fighter
SMS-528FF84D: F16 Fighting Falcon
SMS-35D86A2C: Fantasy Zone
SMS-9C7C0A81: Fantasy Zone 2
SMS-90260BEC: Fantasy Zone 2
SMS-198B83D7: Fantasy Zone Maze
SMS-DA8B3063: Fire and Forget 2
SMS-79D5C87B: Flash
SMS-9068D00F: Flintstones
SMS-68069DFD: Forgotten Worlds
SMS-72825350: GLoc Air Battle
SMS-733E589C: Gain Ground
SMS-7DCECFB4: Galactic Protector
SMS-C8C250D6: Galaxy Force
SMS-53FBB6B4: Game Box Esportes Radicais
SMS-48C86F02: Gangster Town
SMS-E5459863: Gauntlet
SMS-69256E75: George Foreman's Boxing
SMS-8D00AD02: Geraldinho
SMS-F14A3CC9: Ghost Busters
SMS-89849FBB: Ghost House
SMS-45504E03: Ghost House
SMS-6B6F3E4E: Ghouls and Ghosts
SMS-B8239443: Global Defense
SMS-CEAD6B89: Golden Axe
SMS-402B6A9C: Golden Axe Warrior
SMS-13CA704A: Golfmania
SMS-FD292E2C: Golfmania
SMS-2A841174: Golvellius
SMS-A2753BBC: Golvellius
SMS-40FD4426: Great Baseball
SMS-362CDD04: Great Baseball
SMS-D8C55506: Great Basketball
SMS-D3B477B5: Great Football
SMS-70BDB6FA: Great Golf
SMS-F616E67F: Great Golf
SMS-F37818ED: Great Ice Hockey
SMS-FF2E335F: Great Volleyball
SMS-6D15F4AD: Great Volleyball
SMS-D17C7DD7: Haja No Fuuin
SMS-81BDAFC8: Hang On and Safari Hunt
SMS-ED51C618: Hang On
SMS-0DEF7892: Hang On
SMS-51DA2540: Heavyweight Champ
SMS-94D5E609: Heroes of the Lance
SMS-FD2F3FDB: High School Kimengumi
SMS-4EDA3F89: Hokutoboken
SMS-4EDA3F89: Hokutoboken
SMS-C4FBEEBB: Home Alone
SMS-F4ABE06D: Hook
SMS-4571E6C3: Impossible Mission
SMS-956D46B0: Incredible Hulk
SMS-E4ED7339: Indiana Jones
SMS-8725269C: James Bond the Duel
SMS-F403A94C: James Pond 2
SMS-2CAC0668: Joe Montana Football
SMS-9CA33633: Jungle Book
SMS-7B552650: Jurassic Park
SMS-28F350C4: Kenseiden
SMS-6F729C16: Kenseiden
SMS-E6B61F94: Kings Quest
SMS-996FA827: Krustys Fun House
SMS-B298ACCC: Kungfu Kid
SMS-5D8067B9: Kungfu Kid
SMS-361CDAE9: Laser Ghost
SMS-0455F44B: Leader Board
SMS-7611A307: Lemmings
SMS-17CEFA6D: Lemmings
SMS-A9BC5E7C: Lillehammer '94
SMS-F398CA95: Line of Fire
SMS-664DC276: Lord of Sword
SMS-32A0DA0D: Lord of Sword
SMS-2269847F: Lucky Dime
SMS-C6653417: Machine Gun Joe
SMS-2F3440F1: Marble Madness
SMS-BDCC64F8: Master of Darkness
SMS-E100A494: Masters of Combat
SMS-08DF3C7B: Maze Hunter 3D
SMS-A6C5B0F2: Maze Walker 3D
SMS-39BA2AED: Mean Bean Machine
SMS-C5412E49: Megumi Rescue
SMS-B71AFB92: Mercs
SMS-3752D965: Mick and Mack
SMS-4946A6F3: Mickey Castle of Illusion
SMS-83764742: Mickey Castle of Illusion
SMS-6ED20CE8: Mickey Legend of Illusion
SMS-BF3A92C5: Mickey Magical Kingdom
SMS-F615C8DD: Miracle Warriors
SMS-FFB4D45F: Missile Defense 3D
SMS-031D490A: Monopoly
SMS-56C8BB97: Monopoly
SMS-E06EEF3E: Montezuma's Revenge
SMS-55704D2B: Moon Walker
SMS-702BDB3F: Mortal Kombat
SMS-ABE82847: Mortal Kombat 2
SMS-4CFC5067: Mortal Kombat 3
SMS-C81D8C9B: Ms Pacman
SMS-EDC031E3: My Hero
SMS-DD6F9AAC: My Hero
SMS-8EFBB405: Nekyuu Kousien
SMS-C83D1D88: New Zealand Story
SMS-3F3FBE04: Ninja
SMS-C8B2A530: Ninja Gaiden
SMS-C8B2A530: Ninja Gaiden
SMS-FF6A5ED6: Operation Wolf
SMS-D6600138: Ottifants
SMS-B71FECA2: Outrun
SMS-7874A1C2: Outrun 3D
SMS-72000C56: Outrun Europa
SMS-91DD2839: Pacmania
SMS-3B6FDDE6: Paperboy
SMS-24C15B82: Parlour Games
SMS-24C15B82: Party Games
SMS-43A392C0: Penguin Land
SMS-BE1FC612: Penguin Land
SMS-3BDDFA3A: Phantasy Star
SMS-5A96953C: Phantasy Star
SMS-3BDDFA3A: Phantasy Star
SMS-F6FDB60F: Pit Pot and Astro Warrior
SMS-BA5D6A25: Pit Pot
SMS-6DA3D782: Populous
SMS-8313AABE: Poseidon Wars 3D
SMS-4B2E4114: Predator 2
SMS-88C649F6: Prince of Persia
SMS-79A0DD9C: Pro Wrestling
SMS-E250B101: Psychic World
SMS-A0B2B541: Psycho Fox
SMS-29518ED3: Put and Putter
SMS-597F4310: Put and Putter
SMS-E316E2D2: Quartet
SMS-B09882AD: RC Grand Prix
SMS-226E05B2: RC Grand Prix
SMS-47746E5B: RType
SMS-C7ECCB75: Rainbow Islands
SMS-0CDFDB02: Rambo
SMS-4FDBC406: Rambo 3
SMS-14420564: Rampage
SMS-381AEF60: Rampart
SMS-FF13B093: Rastan
SMS-0DD199EC: Reggie Jackson Baseball
SMS-55ACF04D: Ren and Stimpy
SMS-63CE06D7: Renegade
SMS-77A9CA80: Rescue Mission
SMS-6E8C96C2: Road Rash
SMS-7A298AD3: Robocop 3
SMS-B9F2FAE2: Robocop vs Terminator
SMS-E193C554: Rocky
SMS-840F3F43: Running Battle
SMS-ED6EA166: Rygar
SMS-FDCDD2A8: Rygar
SMS-C4C4CBF3: SDI
SMS-C8EC02CD: SOS Lagoa Poluida
SMS-9F08AFE7: Sagaia
SMS-5A9CD0BC: Sapo Xule O Mestre Do Kung Fu
SMS-A0B2B541: Sapo Xule Os Invasores Do Brejo
SMS-DCDFF7FC: Satellite 7
SMS-61BF0CE8: Scramble Spirits
SMS-C4E804EA: Secret Commando
SMS-1CF80D81: Sega Chess
SMS-D84B8E35: Sengoku Jidai
SMS-CC0E834B: Sensible Soccer
SMS-92158110: Shadow Dancer
SMS-CEC60800: Shadow of the Beast
SMS-2EFBA21E: Shanghai
SMS-294F665B: Sherlock Holmes
SMS-31E9AA08: Shinobi
SMS-08988F8D: Shooting Gallery
SMS-7B25AF6C: Simpsons: Bart vs Mutants
SMS-3A184EE3: Simpsons: Bart vs World
SMS-E12945D1: Sitio Do Picapau Amarelo
SMS-CD49F209: Slap Shot
SMS-1FEC3A32: Smash TV
SMS-1157557C: Smurfs
SMS-D31A01DD: Smurfs 2
SMS-D47A6061: Solomon Key
SMS-ABA7D590: Sonic Blast
SMS-9A4C2C17: Sonic Chaos
SMS-3C24A124: Sonic Hedgehog
SMS-59631B6B: Sonic Hedgehog 2
SMS-C5249C58: Sonic Spinball
SMS-F2282126: Space Harrier
SMS-BF3AF302: Space Harrier 3D
SMS-F4FE3FDF: Space Harrier
SMS-BE94015C: Special Criminal Investigation
SMS-06D76A6D: Speed Ball
SMS-380E2509: Speed Ball 2
SMS-C7ADE045: Spellcaster
SMS-864CD012: Spellcaster
SMS-FFD17781: Spiderman
SMS-6ABF8373: Spiderman vs Kingpin
SMS-A5981D01: Sports Pad Soccer
SMS-1E244102: Spy vs Spy
SMS-22373C00: Spy vs Spy
SMS-2555BD8F: Star Wars
SMS-0B5DBCD8: Story of Mio
SMS-C4A8DFD2: Street Fighter 2
SMS-DB14819A: Streets of Rage
SMS-5583E316: Streets of Rage 2
SMS-2EF1811A: Strider
SMS-4271C0EA: Strider 2
SMS-B200F770: Submarine Attack
SMS-E614F356: Sukeban Deka 2
SMS-DDE22B56: Summer Games
SMS-C1994DC5: Super Kick Off
SMS-5BB43B8B: Super Kick Off
SMS-A84F6622: Super Monaco GP
SMS-AA343BA1: Super Monaco GP 2
SMS-4731942C: Super Off Road
SMS-755AFD1F: Super Racing
SMS-72A44AD8: Super Space Invaders
SMS-0BEBAB91: Super Tennis
SMS-A6F4F61B: Super Tetris
SMS-905C2069: Super Wrestlemania
SMS-FD847F03: Superman
SMS-C8CAF262: T2 Arcade Game
SMS-EC7389DD: Tazmania
SMS-BED01ABD: Tazmania
SMS-715D5443: Tecmo World Cup '93
SMS-8D00AD02: Teddy Boy
SMS-0E58FCCA: Teddy Boy Blues
SMS-856A134B: Tennis Ace
SMS-0E3E75BF: Tensai Bakabon
SMS-F4C6D0FD: Terminator
SMS-13FE9578: Terminator 2
SMS-2B8C3140: Thunder Blade
SMS-C8517CF5: Thunder Blade
SMS-D3CBE09C: Time Soldiers
SMS-460BE806: Tom and Jerry
SMS-C9B8DFDB: Tom and Jerry
SMS-14424F3F: Transbot
SMS-65087064: Trap Marksman Safari Shooting
SMS-73F8AF8B: Tri Formation
SMS-F64C5B76: Trivial Pursuit
SMS-E9A4DA39: Turma Da Monica 2
SMS-F126CFE9: Turma Da Monica
SMS-E79A79B0: Ultima 4 (1989)
SMS-8FB08EE4: Ultima 4 (1990)
SMS-1FC91F99: Ultimate Soccer
SMS-F618C7B7: Vampire
SMS-BF53E90C: Vigilante
SMS-C7851C8D: Virtua Fighter Animation
SMS-AF213933: Wimbledon
SMS-4DBDEFD8: Wolf Child
SMS-2451C59F: Wonder Boy
SMS-E9A4DA39: Wonder Boy 3
SMS-F126CFE9: Wonder Boy in Monster Land
SMS-5F2F6888: Wonder Boy in Monster World (Beta)
SMS-537D07C0: Wonder Boy in Monster World
SMS-564D1817: Woody Pop
SMS-62C95070: World Cup '90
SMS-9FD1A204: World Cup '92
SMS-23E2D5C3: World Cup '94
SMS-6D527091: World GP
SMS-790638F3: World GP
SMS-64FE313E: World Games
SMS-C7CF22E2: World Soccer
SMS-8219CB62: XMen in Mojo World
SMS-67ABEEB1: Xenon 2
SMS-B8ED368E: Ys
SMS-CF9FAE2A: Zaxxon 3D
SMS-E4DFBC4B: Zillion
SMS-3A92402B: Zillion
SMS-69F05047: Zool
Binary file not shown.