]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Palette bypass + monochrome support.
authorToni Wilen <twilen@winuae.net>
Sun, 31 Jan 2016 13:40:16 +0000 (15:40 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 31 Jan 2016 13:40:16 +0000 (15:40 +0200)
genlinetoscr.cpp
gfxutil.cpp

index 43f40f5a60f96bfd555de79103d4d3ca39baa0c0..326440ade57858bc55679deb167902bbe8b7767e 100644 (file)
@@ -142,7 +142,7 @@ static void out_linetoscr_do_srcpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_
                if (aga && cmode != CMODE_DUALPF) {
                        if (spr)
                                outln (     "    sprpix_val = pixdata.apixels[spix];");
-                       outln (         "    spix_val = pixdata.apixels[spix] ^ xor_val;");
+                       outln (         "    spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val;");
                } else if (cmode != CMODE_HAM) {
                        outln (         "    spix_val = pixdata.apixels[spix];");
                        if (spr)
@@ -160,7 +160,7 @@ static void out_linetoscr_do_dstpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_
                outln (     "    dpix_val = CONVERT_RGB (spix_val);");
        } else if (cmode == CMODE_HAM) {
                outln (         "    spix_val = ham_linebuf[spix];");
-               outln ( "    dpix_val = xcolors[spix_val];");
+               outln ( "    dpix_val = p_xcolors[spix_val];");
                if (spr)
                        outln ( "    sprpix_val = pixdata.apixels[spix];");
        } else if (aga && cmode == CMODE_DUALPF) {
@@ -169,23 +169,23 @@ static void out_linetoscr_do_dstpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_
                outln (         "        if (lookup_no[spix_val])");
                outln (         "            val += dblpfofs[bpldualpf2of];");
                outln (         "        val ^= xor_val;");
-               outln (         "        dpix_val = colors_for_drawing.acolors[val];");
+               outln (         "        dpix_val = p_acolors[val];");
                outln (         "    }");
        } else if (cmode == CMODE_DUALPF) {
-               outln (         "    dpix_val = colors_for_drawing.acolors[lookup[spix_val]];");
+               outln (         "    dpix_val = p_acolors[lookup[spix_val]];");
        } else if (aga && cmode == CMODE_EXTRAHB) {
                outln (         "    if (spix_val >= 32 && spix_val < 64) {");
                outln (         "        unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;");
                outln (         "        dpix_val = CONVERT_RGB (c);");
                outln (         "    } else");
-               outln (         "        dpix_val = colors_for_drawing.acolors[spix_val];");
+               outln (         "        dpix_val = p_acolors[spix_val];");
        } else if (cmode == CMODE_EXTRAHB) {
                outln (         "    if (spix_val <= 31)");
-               outln (         "        dpix_val = colors_for_drawing.acolors[spix_val];");
+               outln (         "        dpix_val = p_acolors[spix_val];");
                outln (         "    else");
-               outln (         "        dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];");
+               outln (         "        dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];");
        } else
-               outln (         "    dpix_val = colors_for_drawing.acolors[spix_val];");
+               outln (         "    dpix_val = p_acolors[spix_val];");
 }
 
 static void out_linetoscr_do_incspix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr)
@@ -287,7 +287,7 @@ static void out_sprite (DEPTH_T bpp, HMODE_T hmode, CMODE_T cmode, int aga, int
                        outlnf ( "    if (spritepixels[dpix].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf("        if (sprcol) {");
-                       outlnf ( "            out_val = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val = p_acolors[sprcol];");
                        put_dpixsprgenlock(0, genlock);
                        outlnf("        }");
                        outlnf("    }");
@@ -299,14 +299,14 @@ static void out_sprite (DEPTH_T bpp, HMODE_T hmode, CMODE_T cmode, int aga, int
                        outlnf("    if (spritepixels[dpix + 0].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf ( "        if (sprcol) {");
-                       outlnf ( "            out_val1 = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val1 = p_acolors[sprcol];");
                        put_dpixsprgenlock(0, genlock);
                        outlnf("        }");
                        outlnf("    }");
                        outlnf ( "    if (spritepixels[dpix + 1].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 1, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf ( "        if (sprcol) {");
-                       outlnf ( "            out_val2 = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val2 = p_acolors[sprcol];");
                        put_dpixsprgenlock(1, genlock);
                        outlnf("        }");
                        outlnf("    }");
@@ -322,28 +322,28 @@ static void out_sprite (DEPTH_T bpp, HMODE_T hmode, CMODE_T cmode, int aga, int
                        outlnf("    if (spritepixels[dpix + 0].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf ( "        if (sprcol) {");
-                       outlnf ( "            out_val1 = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val1 = p_acolors[sprcol];");
                        put_dpixsprgenlock(0, genlock);
                        outlnf("        }");
                        outlnf("    }");
                        outlnf ( "    if (spritepixels[dpix + 1].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 1, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf ( "        if (sprcol) {");
-                       outlnf ( "            out_val2 = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val2 = p_acolors[sprcol];");
                        put_dpixsprgenlock(1, genlock);
                        outlnf("        }");
                        outlnf("    }");
                        outlnf ( "    if (spritepixels[dpix + 2].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 2, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf ( "        if (sprcol) {");
-                       outlnf ( "            out_val3 = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val3 = p_acolors[sprcol];");
                        put_dpixsprgenlock(2, genlock);
                        outlnf("        }");
                        outlnf("    }");
                        outlnf ( "    if (spritepixels[dpix + 3].data) {");
                        outlnf ( "        sprcol = render_sprites (dpix + 3, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                        outlnf ( "        if (sprcol) {");
-                       outlnf ( "            out_val4 = colors_for_drawing.acolors[sprcol];");
+                       outlnf ( "            out_val4 = p_acolors[sprcol];");
                        put_dpixsprgenlock(3, genlock);
                        outlnf("        }");
                        outlnf("    }");
@@ -358,7 +358,7 @@ static void out_sprite (DEPTH_T bpp, HMODE_T hmode, CMODE_T cmode, int aga, int
                outlnf ( "        sprcol = render_sprites (dpix, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga);
                put_dpixsprgenlock(0, genlock);
                outlnf("        if (sprcol) {");
-               outlnf ( "            uae_u32 spcol = colors_for_drawing.acolors[sprcol];");
+               outlnf ( "            uae_u32 spcol = p_acolors[sprcol];");
                outlnf ( "            out_val = spcol;");
                outlnf ( "        }");
                outlnf ( "    }");
@@ -414,7 +414,7 @@ static void out_linetoscr_mode (DEPTH_T bpp, HMODE_T hmode, int aga, int spr, CM
        if (spr >= 0)
                outln (         "    out_val = dpix_val;");
        else
-               outln (         "    out_val = colors_for_drawing.acolors[0];");
+               outln (         "    out_val = p_acolors[0];");
 
        if (hmode == HMODE_DOUBLE) {
                put_dpixgenlock(0, cmode, aga, genlock, NULL);
@@ -532,8 +532,10 @@ static void out_linetoscr (DEPTH_T bpp, HMODE_T hmode, int aga, int spr, int gen
                outlnf("    uae_u8 *genlock_buf = xlinebuffer_genlock;");
        if (spr)
                outln ( "    uae_u8 sprcol;");
-       if (aga && spr >= 0)
-               outln ( "    uae_u8 xor_val = bplxor;");
+       if (aga && spr >= 0) {
+               outln("    uae_u8 xor_val = bplxor;");
+               outln("    uae_u8 and_val = bpland;");
+       }
        outln  (        "");
 
        if (spr >= 0) {
index ac269938b7b78d94e9edb112a74cff6f7534241e..9580d4c116c92928f6731f403e8185d184c5f6f0 100644 (file)
@@ -154,12 +154,16 @@ static void video_calc_gammatable (void)
                        v = video_gamma((float)(i - 256), gams[j], bri, con);
 
                        vi = (uae_u32)v;
-                       if (vi > 255)
-                               vi = 255;
 
                        if (currprefs.gfx_luminance == 0 && currprefs.gfx_contrast == 0 && currprefs.gfx_gamma == 0)
                                vi = i & 0xff;
 
+                       if (currprefs.gfx_threebitcolors)
+                               vi *= 2;
+
+                       if (vi > 255)
+                               vi = 255;
+
                        gamma[i][j] = vi;
                }
        }
@@ -363,12 +367,13 @@ void alloc_colors64k (int rw, int gw, int bw, int rs, int gs, int bs, int aw, in
                r = gamma[r + j][0];
                g = gamma[g + j][1];
                b = gamma[b + j][2];
-               xcolors[i] = doMask(r, rw, rs) | doMask(g, gw, gs) | doMask(b, bw, bs) | doAlpha (alpha, aw, as);
+               xcolors[i] = doMask(r, rw, rs) | doMask(g, gw, gs) | doMask(b, bw, bs) | doAlpha(alpha, aw, as);
                if (byte_swap) {
-                       if (bpp <= 16)
-                               xcolors[i] = bswap_16 (xcolors[i]);
-                       else
-                               xcolors[i] = bswap_32 (xcolors[i]);
+                       if (bpp <= 16) {
+                               xcolors[i] = bswap_16(xcolors[i]);
+                       } else {
+                               xcolors[i] = bswap_32(xcolors[i]);
+                       }
                }
                if (bpp <= 16) {
                        /* Fill upper 16 bits of each colour value