diff --git a/VSLinux/Amiberry.vcxproj b/VSLinux/Amiberry.vcxproj
index 19dfe62d..22f691b0 100644
--- a/VSLinux/Amiberry.vcxproj
+++ b/VSLinux/Amiberry.vcxproj
@@ -54,6 +54,7 @@
cd ~/projects/Amiberry; make
cd ~/projects/Amiberry; make clean; make
cd ~/projects/Amiberry; make clean
+ D:\midwa\Projects\GitHub\amiberry\src\guisan\include;D:\midwa\Projects\GitHub\amiberry\src\threaddep;D:\midwa\Projects\GitHub\amiberry\src\osdep;D:\midwa\Projects\GitHub\amiberry\src;D:\midwa\Projects\GitHub\amiberry\src\include;$(NMakeIncludeSearchPath)
@@ -286,9 +287,6 @@
false
-
- false
-
false
diff --git a/VSLinux/Amiberry.vcxproj.filters b/VSLinux/Amiberry.vcxproj.filters
index 52f036d1..3987df5e 100644
--- a/VSLinux/Amiberry.vcxproj.filters
+++ b/VSLinux/Amiberry.vcxproj.filters
@@ -258,9 +258,6 @@
src
-
- src
-
src
diff --git a/src/drawing.cpp b/src/drawing.cpp
index 5c1013d8..d7953e52 100644
--- a/src/drawing.cpp
+++ b/src/drawing.cpp
@@ -280,7 +280,7 @@ static int src_pixel, ham_src_pixel;
/* How many pixels in window coordinates which are to the left of the left border. */
static int unpainted;
-#include "linetoscr.c"
+#include "linetoscr.cpp"
static void pfield_do_linetoscr_0_640(int start, int stop)
{
diff --git a/src/linetoscr.c b/src/linetoscr.cpp
similarity index 97%
rename from src/linetoscr.c
rename to src/linetoscr.cpp
index 2f6fc272..973e6aa2 100644
--- a/src/linetoscr.c
+++ b/src/linetoscr.cpp
@@ -1,806 +1,806 @@
-/* Note:
- * xcolors[] contains 16-bit color information in both words
- * colors_for_drawing.acolors (non AGA) contains 16-bit color information in both words
- * colors_for_drawing.acolors (AGA) contains 16-bit color information in one word
- */
-
-STATIC_INLINE uae_u32 merge_words(uae_u32 val, uae_u32 val2)
-{
- __asm__ (
- "pkhbt %[o], %[o], %[d], lsl #16 \n\t"
- : [o] "+r" (val) : [d] "r" (val2) );
- return val;
-}
-
-STATIC_INLINE uae_u32 double_word(uae_u32 val)
-{
- __asm__ (
- "pkhbt %[o], %[o], %[o], lsl #16 \n\t"
- : [o] "+r" (val) );
- return val;
-}
-
-static int NOINLINE linetoscr_16 (int spix, int dpix, int dpix_end)
-{
- uae_u16 *buf = (uae_u16 *) xlinebuffer;
-
- if (bplham) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- buf[dpix++] = ham_linebuf[spix++];
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 out_val;
-
- out_val = *((uae_u32 *)&ham_linebuf[spix]);
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = out_val;
- dpix += 2;
- }
- if (rem) {
- buf[dpix++] = ham_linebuf[spix++];
- }
- } else if (bpldualpf) {
- int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix++];
- buf[dpix++] = colors_for_drawing.acolors[lookup[spix_val]];
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++];
- out_val = colors_for_drawing.acolors[lookup[spix_val]];
- spix_val = pixdata.apixels[spix++];
- dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix++];
- buf[dpix++] = colors_for_drawing.acolors[lookup[spix_val]];
- }
- } else if (bplehb) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix++];
- if (spix_val <= 31)
- dpix_val = colors_for_drawing.acolors[spix_val];
- else
- dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++];
- if (spix_val <= 31)
- out_val = colors_for_drawing.acolors[spix_val];
- else
- out_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- spix_val = pixdata.apixels[spix++];
- if (spix_val <= 31)
- dpix_val = colors_for_drawing.acolors[spix_val];
- else
- dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix++];
- if (spix_val <= 31)
- dpix_val = colors_for_drawing.acolors[spix_val];
- else
- dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- buf[dpix++] = dpix_val;
- }
- } else {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix++];
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++];
- out_val = colors_for_drawing.acolors[spix_val];
- spix_val = pixdata.apixels[spix++];
- dpix_val = colors_for_drawing.acolors[spix_val];
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix++];
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- }
-
- return spix;
-}
-
-static int NOINLINE linetoscr_16_stretch1 (int spix, int dpix, int dpix_end)
-{
- uae_u16 *buf = (uae_u16 *) xlinebuffer;
-
- if (bplham) {
- while (dpix < dpix_end) {
- uae_u32 out_val = ham_linebuf[spix++];
- *((uae_u32 *)&buf[dpix]) = double_word(out_val);
- dpix += 2;
- }
- } else if (bpldualpf) {
- int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
-
- spix_val = pixdata.apixels[spix++];
- *((uae_u32 *)&buf[dpix]) = colors_for_drawing.acolors[lookup[spix_val]];
- dpix += 2;
- }
- } else if (bplehb) {
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++];
- if (spix_val <= 31)
- out_val = colors_for_drawing.acolors[spix_val];
- else
- out_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x0777];
- *((uae_u32 *)&buf[dpix]) = double_word(out_val);
- dpix += 2;
- }
- } else {
- while (dpix < dpix_end) {
- uae_u32 spix_val;
-
- spix_val = pixdata.apixels[spix++];
- *((uae_u32 *)&buf[dpix]) = colors_for_drawing.acolors[spix_val];
- dpix += 2;
- }
- }
-
- return spix;
-}
-
-static int NOINLINE linetoscr_16_shrink1 (int spix, int dpix, int dpix_end)
-{
- uae_u16 *buf = (uae_u16 *) xlinebuffer;
-
- if (bplham) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 dpix_val;
- dpix_val = ham_linebuf[spix];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- out_val = ham_linebuf[spix];
- spix += 2;
- dpix_val = ham_linebuf[spix];
- spix += 2;
- out_val = merge_words(out_val, dpix_val);
-
- *((uae_u32 *)&buf[dpix]) = out_val;
- dpix += 2;
- }
- if (rem) {
- uae_u32 dpix_val;
- dpix_val = ham_linebuf[spix];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- } else if (bpldualpf) {
- int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix];
- dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix];
- out_val = colors_for_drawing.acolors[lookup[spix_val]];
- spix += 2;
- spix_val = pixdata.apixels[spix];
- dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix];
- dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- } else if (bplehb) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix];
- if (spix_val <= 31)
- dpix_val = colors_for_drawing.acolors[spix_val];
- else
- dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix];
- if (spix_val <= 31)
- out_val = colors_for_drawing.acolors[spix_val];
- else
- out_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- spix += 2;
- spix_val = pixdata.apixels[spix];
- if (spix_val <= 31)
- dpix_val = colors_for_drawing.acolors[spix_val];
- else
- dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix];
- if (spix_val <= 31)
- dpix_val = colors_for_drawing.acolors[spix_val];
- else
- dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- } else {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix];
- spix += 2;
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix];
- out_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- spix_val = pixdata.apixels[spix];
- dpix_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix];
- spix += 2;
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- }
-
- return spix;
-}
-
-#ifdef AGA
-
-static int NOINLINE linetoscr_16_aga (int spix, int dpix, int dpix_end)
-{
- uae_u16 *buf = (uae_u16 *) xlinebuffer;
- uae_u8 xor_val = bplxor;
-
- if (bplham) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- buf[dpix++] = ham_linebuf[spix];
- spix++;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 out_val;
-
- out_val = *((uae_u32 *)&ham_linebuf[spix]);
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = out_val;
- dpix += 2;
- }
- if (rem) {
- buf[dpix++] = ham_linebuf[spix];
- spix++;
- }
- } else if (bpldualpf) {
- int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;
- int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- if (spritepixels[spix]) {
- dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- dpix_val = colors_for_drawing.acolors[val];
- }
- spix++;
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- if (spritepixels[spix]) {
- out_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- out_val = colors_for_drawing.acolors[val];
- }
- spix++;
- if (spritepixels[spix]) {
- dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- dpix_val = colors_for_drawing.acolors[val];
- }
- spix++;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- if (spritepixels[spix]) {
- dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- dpix_val = colors_for_drawing.acolors[val];
- }
- spix++;
- buf[dpix++] = dpix_val;
- }
- } else if (bplehb) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- dpix_val = CONVERT_RGB (c);
- } else
- dpix_val = colors_for_drawing.acolors[spix_val];
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- out_val = CONVERT_RGB (c);
- } else
- out_val = colors_for_drawing.acolors[spix_val];
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- dpix_val = CONVERT_RGB (c);
- } else
- dpix_val = colors_for_drawing.acolors[spix_val];
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- dpix_val = CONVERT_RGB (c);
- } else
- dpix_val = colors_for_drawing.acolors[spix_val];
- buf[dpix++] = dpix_val;
- }
- } else {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- out_val = colors_for_drawing.acolors[spix_val];
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- dpix_val = colors_for_drawing.acolors[spix_val];
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- }
-
- return spix;
-}
-#endif
-
-#ifdef AGA
-static int NOINLINE linetoscr_16_stretch1_aga (int spix, int dpix, int dpix_end)
-{
- uae_u16 *buf = (uae_u16 *) xlinebuffer;
- uae_u8 xor_val = bplxor;
-
- if (bplham) {
- while (dpix < dpix_end) {
- uae_u32 out_val;
- out_val = ham_linebuf[spix++];
- *((uae_u32 *)&buf[dpix]) = double_word(out_val);
- dpix += 2;
- }
- } else if (bpldualpf) {
- int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;
- int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 out_val;
-
- if (spritepixels[spix]) {
- out_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- out_val = colors_for_drawing.acolors[val];
- }
- spix++;
- *((uae_u32 *)&buf[dpix]) = double_word(out_val);
- dpix += 2;
- }
- } else if (bplehb) {
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- out_val = CONVERT_RGB (c);
- } else
- out_val = colors_for_drawing.acolors[spix_val];
- *((uae_u32 *)&buf[dpix]) = double_word(out_val);
- dpix += 2;
- }
- } else {
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix++] ^ xor_val;
- out_val = colors_for_drawing.acolors[spix_val];
- *((uae_u32 *)&buf[dpix]) = double_word(out_val);
- dpix += 2;
- }
- }
-
- return spix;
-}
-#endif
-
-#ifdef AGA
-static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int dpix_end)
-{
- uae_u16 *buf = (uae_u16 *) xlinebuffer;
- uae_u8 xor_val = bplxor;
-
- if (bplham) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- buf[dpix++] = ham_linebuf[spix];
- spix += 2;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- out_val = ham_linebuf[spix];
- spix += 2;
- dpix_val = ham_linebuf[spix];
- spix += 2;
- out_val = merge_words(out_val, dpix_val);
- *((uae_u32 *)&buf[dpix]) = out_val;
- dpix += 2;
- }
- if (rem) {
- buf[dpix++] = ham_linebuf[spix];
- spix += 2;
- }
- } else if (bpldualpf) {
- int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;
- int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- if (spritepixels[spix]) {
- dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- dpix_val = colors_for_drawing.acolors[val];
- }
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- if (spritepixels[spix]) {
- out_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- out_val = colors_for_drawing.acolors[val];
- }
- spix += 2;
- if (spritepixels[spix]) {
- dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- dpix_val = colors_for_drawing.acolors[val];
- }
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- if (spritepixels[spix]) {
- dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
- } else {
- spix_val = pixdata.apixels[spix];
- uae_u8 val = lookup[spix_val];
- if (lookup_no[spix_val] == 2)
- val += dblpfofs[bpldualpf2of];
- val ^= xor_val;
- dpix_val = colors_for_drawing.acolors[val];
- }
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- } else if (bplehb) {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- dpix_val = CONVERT_RGB (c);
- } else
- dpix_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- out_val = CONVERT_RGB (c);
- } else
- out_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- spix_val = pixdata.apixels[spix] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- dpix_val = CONVERT_RGB (c);
- } else
- dpix_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- spix_val = pixdata.apixels[spix] ^ xor_val;
- if (spix_val >= 32 && spix_val < 64) {
- unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
- dpix_val = CONVERT_RGB (c);
- } else
- dpix_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- buf[dpix++] = dpix_val;
- }
- } else {
- int rem;
- if (((long)&buf[dpix]) & 2) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix] ^ xor_val;
- spix += 2;
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- if (dpix >= dpix_end)
- return spix;
- rem = (((long)&buf[dpix_end]) & 2);
- if (rem)
- dpix_end--;
- while (dpix < dpix_end) {
- uae_u32 spix_val;
- uae_u32 dpix_val;
- uae_u32 out_val;
-
- spix_val = pixdata.apixels[spix] ^ xor_val;
- out_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- spix_val = pixdata.apixels[spix] ^ xor_val;
- dpix_val = colors_for_drawing.acolors[spix_val];
- spix += 2;
- *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
- dpix += 2;
- }
- if (rem) {
- uae_u32 spix_val;
- spix_val = pixdata.apixels[spix] ^ xor_val;
- spix += 2;
- buf[dpix++] = colors_for_drawing.acolors[spix_val];
- }
- }
-
- return spix;
-}
-#endif
+/* Note:
+ * xcolors[] contains 16-bit color information in both words
+ * colors_for_drawing.acolors (non AGA) contains 16-bit color information in both words
+ * colors_for_drawing.acolors (AGA) contains 16-bit color information in one word
+ */
+
+STATIC_INLINE uae_u32 merge_words(uae_u32 val, uae_u32 val2)
+{
+ __asm__ (
+ "pkhbt %[o], %[o], %[d], lsl #16 \n\t"
+ : [o] "+r" (val) : [d] "r" (val2) );
+ return val;
+}
+
+STATIC_INLINE uae_u32 double_word(uae_u32 val)
+{
+ __asm__ (
+ "pkhbt %[o], %[o], %[o], lsl #16 \n\t"
+ : [o] "+r" (val) );
+ return val;
+}
+
+static int NOINLINE linetoscr_16 (int spix, int dpix, int dpix_end)
+{
+ uae_u16 *buf = (uae_u16 *) xlinebuffer;
+
+ if (bplham) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ buf[dpix++] = ham_linebuf[spix++];
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 out_val;
+
+ out_val = *((uae_u32 *)&ham_linebuf[spix]);
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = out_val;
+ dpix += 2;
+ }
+ if (rem) {
+ buf[dpix++] = ham_linebuf[spix++];
+ }
+ } else if (bpldualpf) {
+ int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix++];
+ buf[dpix++] = colors_for_drawing.acolors[lookup[spix_val]];
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++];
+ out_val = colors_for_drawing.acolors[lookup[spix_val]];
+ spix_val = pixdata.apixels[spix++];
+ dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix++];
+ buf[dpix++] = colors_for_drawing.acolors[lookup[spix_val]];
+ }
+ } else if (bplehb) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix++];
+ if (spix_val <= 31)
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ else
+ dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++];
+ if (spix_val <= 31)
+ out_val = colors_for_drawing.acolors[spix_val];
+ else
+ out_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ spix_val = pixdata.apixels[spix++];
+ if (spix_val <= 31)
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ else
+ dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix++];
+ if (spix_val <= 31)
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ else
+ dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ buf[dpix++] = dpix_val;
+ }
+ } else {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix++];
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++];
+ out_val = colors_for_drawing.acolors[spix_val];
+ spix_val = pixdata.apixels[spix++];
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix++];
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ }
+
+ return spix;
+}
+
+static int NOINLINE linetoscr_16_stretch1 (int spix, int dpix, int dpix_end)
+{
+ uae_u16 *buf = (uae_u16 *) xlinebuffer;
+
+ if (bplham) {
+ while (dpix < dpix_end) {
+ uae_u32 out_val = ham_linebuf[spix++];
+ *((uae_u32 *)&buf[dpix]) = double_word(out_val);
+ dpix += 2;
+ }
+ } else if (bpldualpf) {
+ int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+
+ spix_val = pixdata.apixels[spix++];
+ *((uae_u32 *)&buf[dpix]) = colors_for_drawing.acolors[lookup[spix_val]];
+ dpix += 2;
+ }
+ } else if (bplehb) {
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++];
+ if (spix_val <= 31)
+ out_val = colors_for_drawing.acolors[spix_val];
+ else
+ out_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x0777];
+ *((uae_u32 *)&buf[dpix]) = double_word(out_val);
+ dpix += 2;
+ }
+ } else {
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+
+ spix_val = pixdata.apixels[spix++];
+ *((uae_u32 *)&buf[dpix]) = colors_for_drawing.acolors[spix_val];
+ dpix += 2;
+ }
+ }
+
+ return spix;
+}
+
+static int NOINLINE linetoscr_16_shrink1 (int spix, int dpix, int dpix_end)
+{
+ uae_u16 *buf = (uae_u16 *) xlinebuffer;
+
+ if (bplham) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 dpix_val;
+ dpix_val = ham_linebuf[spix];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ out_val = ham_linebuf[spix];
+ spix += 2;
+ dpix_val = ham_linebuf[spix];
+ spix += 2;
+ out_val = merge_words(out_val, dpix_val);
+
+ *((uae_u32 *)&buf[dpix]) = out_val;
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 dpix_val;
+ dpix_val = ham_linebuf[spix];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ } else if (bpldualpf) {
+ int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix];
+ dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix];
+ out_val = colors_for_drawing.acolors[lookup[spix_val]];
+ spix += 2;
+ spix_val = pixdata.apixels[spix];
+ dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix];
+ dpix_val = colors_for_drawing.acolors[lookup[spix_val]];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ } else if (bplehb) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix];
+ if (spix_val <= 31)
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ else
+ dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix];
+ if (spix_val <= 31)
+ out_val = colors_for_drawing.acolors[spix_val];
+ else
+ out_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ spix += 2;
+ spix_val = pixdata.apixels[spix];
+ if (spix_val <= 31)
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ else
+ dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix];
+ if (spix_val <= 31)
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ else
+ dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ } else {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix];
+ spix += 2;
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix];
+ out_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ spix_val = pixdata.apixels[spix];
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix];
+ spix += 2;
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ }
+
+ return spix;
+}
+
+#ifdef AGA
+
+static int NOINLINE linetoscr_16_aga (int spix, int dpix, int dpix_end)
+{
+ uae_u16 *buf = (uae_u16 *) xlinebuffer;
+ uae_u8 xor_val = bplxor;
+
+ if (bplham) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ buf[dpix++] = ham_linebuf[spix];
+ spix++;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 out_val;
+
+ out_val = *((uae_u32 *)&ham_linebuf[spix]);
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = out_val;
+ dpix += 2;
+ }
+ if (rem) {
+ buf[dpix++] = ham_linebuf[spix];
+ spix++;
+ }
+ } else if (bpldualpf) {
+ int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;
+ int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ if (spritepixels[spix]) {
+ dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ dpix_val = colors_for_drawing.acolors[val];
+ }
+ spix++;
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ if (spritepixels[spix]) {
+ out_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ out_val = colors_for_drawing.acolors[val];
+ }
+ spix++;
+ if (spritepixels[spix]) {
+ dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ dpix_val = colors_for_drawing.acolors[val];
+ }
+ spix++;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ if (spritepixels[spix]) {
+ dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ dpix_val = colors_for_drawing.acolors[val];
+ }
+ spix++;
+ buf[dpix++] = dpix_val;
+ }
+ } else if (bplehb) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ dpix_val = CONVERT_RGB (c);
+ } else
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ out_val = CONVERT_RGB (c);
+ } else
+ out_val = colors_for_drawing.acolors[spix_val];
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ dpix_val = CONVERT_RGB (c);
+ } else
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ dpix_val = CONVERT_RGB (c);
+ } else
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ buf[dpix++] = dpix_val;
+ }
+ } else {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ out_val = colors_for_drawing.acolors[spix_val];
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ }
+
+ return spix;
+}
+#endif
+
+#ifdef AGA
+static int NOINLINE linetoscr_16_stretch1_aga (int spix, int dpix, int dpix_end)
+{
+ uae_u16 *buf = (uae_u16 *) xlinebuffer;
+ uae_u8 xor_val = bplxor;
+
+ if (bplham) {
+ while (dpix < dpix_end) {
+ uae_u32 out_val;
+ out_val = ham_linebuf[spix++];
+ *((uae_u32 *)&buf[dpix]) = double_word(out_val);
+ dpix += 2;
+ }
+ } else if (bpldualpf) {
+ int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;
+ int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 out_val;
+
+ if (spritepixels[spix]) {
+ out_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ out_val = colors_for_drawing.acolors[val];
+ }
+ spix++;
+ *((uae_u32 *)&buf[dpix]) = double_word(out_val);
+ dpix += 2;
+ }
+ } else if (bplehb) {
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ out_val = CONVERT_RGB (c);
+ } else
+ out_val = colors_for_drawing.acolors[spix_val];
+ *((uae_u32 *)&buf[dpix]) = double_word(out_val);
+ dpix += 2;
+ }
+ } else {
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix++] ^ xor_val;
+ out_val = colors_for_drawing.acolors[spix_val];
+ *((uae_u32 *)&buf[dpix]) = double_word(out_val);
+ dpix += 2;
+ }
+ }
+
+ return spix;
+}
+#endif
+
+#ifdef AGA
+static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int dpix_end)
+{
+ uae_u16 *buf = (uae_u16 *) xlinebuffer;
+ uae_u8 xor_val = bplxor;
+
+ if (bplham) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ buf[dpix++] = ham_linebuf[spix];
+ spix += 2;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ out_val = ham_linebuf[spix];
+ spix += 2;
+ dpix_val = ham_linebuf[spix];
+ spix += 2;
+ out_val = merge_words(out_val, dpix_val);
+ *((uae_u32 *)&buf[dpix]) = out_val;
+ dpix += 2;
+ }
+ if (rem) {
+ buf[dpix++] = ham_linebuf[spix];
+ spix += 2;
+ }
+ } else if (bpldualpf) {
+ int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;
+ int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ if (spritepixels[spix]) {
+ dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ dpix_val = colors_for_drawing.acolors[val];
+ }
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ if (spritepixels[spix]) {
+ out_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ out_val = colors_for_drawing.acolors[val];
+ }
+ spix += 2;
+ if (spritepixels[spix]) {
+ dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ dpix_val = colors_for_drawing.acolors[val];
+ }
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ if (spritepixels[spix]) {
+ dpix_val = colors_for_drawing.acolors[spritepixels[spix]];
+ } else {
+ spix_val = pixdata.apixels[spix];
+ uae_u8 val = lookup[spix_val];
+ if (lookup_no[spix_val] == 2)
+ val += dblpfofs[bpldualpf2of];
+ val ^= xor_val;
+ dpix_val = colors_for_drawing.acolors[val];
+ }
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ } else if (bplehb) {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ dpix_val = CONVERT_RGB (c);
+ } else
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ out_val = CONVERT_RGB (c);
+ } else
+ out_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ dpix_val = CONVERT_RGB (c);
+ } else
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ if (spix_val >= 32 && spix_val < 64) {
+ unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;
+ dpix_val = CONVERT_RGB (c);
+ } else
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ buf[dpix++] = dpix_val;
+ }
+ } else {
+ int rem;
+ if (((long)&buf[dpix]) & 2) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ spix += 2;
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ if (dpix >= dpix_end)
+ return spix;
+ rem = (((long)&buf[dpix_end]) & 2);
+ if (rem)
+ dpix_end--;
+ while (dpix < dpix_end) {
+ uae_u32 spix_val;
+ uae_u32 dpix_val;
+ uae_u32 out_val;
+
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ out_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ dpix_val = colors_for_drawing.acolors[spix_val];
+ spix += 2;
+ *((uae_u32 *)&buf[dpix]) = merge_words(out_val, dpix_val);
+ dpix += 2;
+ }
+ if (rem) {
+ uae_u32 spix_val;
+ spix_val = pixdata.apixels[spix] ^ xor_val;
+ spix += 2;
+ buf[dpix++] = colors_for_drawing.acolors[spix_val];
+ }
+ }
+
+ return spix;
+}
+#endif
diff --git a/src/newcpu.cpp b/src/newcpu.cpp
index 10a565a8..f2838c79 100644
--- a/src/newcpu.cpp
+++ b/src/newcpu.cpp
@@ -50,6 +50,7 @@
#include "cia.h"
#include "inputdevice.h"
#include "audio.h"
+#include
#ifdef JIT
#include "jit/compemu.h"
#include
@@ -1345,6 +1346,10 @@ static void exception2_handle (uaecptr addr, uaecptr fault)
void m68k_go (int may_quit)
{
+#ifdef DEBUG
+ ProfilerStart("amiberry-sdl2.prof");
+#endif
+
int hardboot = 1;
int startup = 1;
@@ -1457,6 +1462,9 @@ void m68k_go (int may_quit)
}
protect_roms (false);
in_m68k_go--;
+#ifdef DEBUG
+ ProfilerStop();
+#endif
}
#ifdef SAVESTATE
diff --git a/src/trace.c b/src/trace.c
deleted file mode 100644
index b826f061..00000000
--- a/src/trace.c
+++ /dev/null
@@ -1,87 +0,0 @@
-#define _GNU_SOURCE
-
-#include
-#include
-#include
-#include
-
-
-#define MAX_TRACE 2000
-
-static void* trc_func[MAX_TRACE];
-static void* trc_caller[MAX_TRACE];
-static int trc_enter[MAX_TRACE];
-static int trc_number[MAX_TRACE];
-static int trc_next_write = 0;
-static int trc_counter = 0;
-
-static int do_trace = 0;
-
-static FILE *fd;
-
-
-void trace_begin (void)
-{
- if(do_trace)
- return;
- memset(trc_enter, 0, sizeof(int) * MAX_TRACE);
- do_trace = 1;
-}
-
-void trace_end (void)
-{
- if(do_trace)
- {
- do_trace = 0;
-
- fd = fopen("trace.txt", "w");
- for(int i=0; i 0)
- {
- Dl_info dlinfo;
- memset(&dlinfo, 0, sizeof(dlinfo));
- int func_found = dladdr(trc_func[trc_next_write], &dlinfo);
- if(func_found && dlinfo.dli_sname != NULL)
- {
- fprintf(fd, "%8d - %s 0x%08X from 0x%08X (%s)\n", trc_number[trc_next_write], (trc_enter[trc_next_write] == 1 ? "enter" : "leave"),
- trc_func[trc_next_write], trc_caller[trc_next_write], dlinfo.dli_sname);
- }
- }
- ++trc_next_write;
- if(trc_next_write >= MAX_TRACE)
- trc_next_write = 0;
- }
- fclose(fd);
- }
-}
-
-void __cyg_profile_func_enter (void *func, void *caller)
-{
- if(do_trace)
- {
- trc_enter[trc_next_write] = 1;
- trc_func[trc_next_write] = func;
- trc_caller[trc_next_write] = caller;
- trc_number[trc_next_write] = trc_counter;
- ++trc_counter;
- ++trc_next_write;
- if(trc_next_write >= MAX_TRACE)
- trc_next_write = 0;
- }
-}
-
-void __cyg_profile_func_exit (void *func, void *caller)
-{
- if(do_trace)
- {
- trc_enter[trc_next_write] = 2;
- trc_func[trc_next_write] = func;
- trc_caller[trc_next_write] = caller;
- trc_number[trc_next_write] = trc_counter;
- ++trc_counter;
- ++trc_next_write;
- if(trc_next_write >= MAX_TRACE)
- trc_next_write = 0;
- }
-}