u32 tInc, tMsk;
GPUPacket PacketBuffer;
-u16 GPU_FrameBuffer[FRAME_BUFFER_SIZE/2] __attribute__((aligned(16))); // FRAME_BUFFER_SIZE is defined in bytes
+// FRAME_BUFFER_SIZE is defined in bytes; 512K is guard memory for out of range reads
+u16 GPU_FrameBuffer[(FRAME_BUFFER_SIZE+512*1024)/2] __attribute__((aligned(16)));
u32 GPU_GP1;
///////////////////////////////////////////////////////////////////////////////
if (bWrite)
{
p2->GPU_gp1 = GPU_GP1;
+ memset(p2->Control, 0, sizeof(p2->Control));
+ // save resolution and registers for P.E.Op.S. compatibility
+ p2->Control[3] = (3 << 24) | ((GPU_GP1 >> 23) & 1);
+ p2->Control[4] = (4 << 24) | ((GPU_GP1 >> 29) & 3);
+ p2->Control[5] = (5 << 24) | (DisplayArea[0] | (DisplayArea[1] << 10));
+ p2->Control[6] = (6 << 24) | (2560 << 12);
+ p2->Control[7] = (7 << 24) | (DisplayArea[4] | (DisplayArea[5] << 10));
+ p2->Control[8] = (8 << 24) | ((GPU_GP1 >> 17) & 0x3f) | ((GPU_GP1 >> 10) & 0x40);
memcpy(p2->FrameBuffer, (u16*)GPU_FrameBuffer, FRAME_BUFFER_SIZE);
return (1);
}
{
GPU_GP1 = p2->GPU_gp1;
memcpy((u16*)GPU_FrameBuffer, p2->FrameBuffer, FRAME_BUFFER_SIZE);
+ GPU_writeStatus((5 << 24) | p2->Control[5]);
+ GPU_writeStatus((7 << 24) | p2->Control[7]);
+ GPU_writeStatus((8 << 24) | p2->Control[8]);
+ gpuSetTexture(GPU_GP1);
return (1);
}
return (0);
#else
#include "../../frontend/plugin_lib.h"
+#include "../../frontend/arm_utils.h"
extern "C" {
-extern void bgr555_to_rgb565(void *dst, void *src, int bytes);
-extern void bgr888_to_rgb888(void *dst, void *src, int bytes);
static const struct rearmed_cbs *cbs;
static void *screen_buf;
if (isRGB24)
{
+#ifndef MAEMO
for (; h1-- > 0; dest += w0 * 3, srcs += 1024)
{
bgr888_to_rgb888(dest, srcs, w0 * 3);
}
+#else
+ for (; h1-- > 0; dest += w0 * 2, srcs += 1024)
+ {
+ bgr888_to_rgb565(dest, srcs, w0 * 3);
+ }
+#endif
}
else
{