{
p2->GPU_gp1 = GPU_GP1;
memset(p2->Control, 0, sizeof(p2->Control));
- p2->Control[5] = DisplayArea[0] | (DisplayArea[1] << 10);
- p2->Control[7] = DisplayArea[4] | (DisplayArea[5] << 10);
- p2->Control[8] = ((GPU_GP1 >> 17) & 0x3f) | ((GPU_GP1 >> 10) & 0x40);
+ // 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);
}
}
///////////////////////////////////////////////////////////////////////////////
-void GPU_dmaChain(u32* baseAddr, u32 dmaVAddr)
+long GPU_dmaChain(u32* baseAddr, u32 dmaVAddr)
{
#ifdef DEBUG_ANALYSIS
dbg_anacnt_GPU_dmaChain++;
pcsx4all_prof_start_with_pause(PCSX4ALL_PROF_GPU,PCSX4ALL_PROF_HW_WRITE);
u32 data, *address, count, offset;
unsigned int DMACommandCounter = 0;
+ long dma_words = 0;
GPU_GP1 &= ~0x14000000;
lUsedAddr[0]=lUsedAddr[1]=lUsedAddr[2]=(u32*)0x1fffff;
else dmaVAddr = 0x1FFFFF;
if(count>0) GPU_writeDataMem(address,count);
+ dma_words += 1 + count;
}
GPU_GP1 = (GPU_GP1 | 0x14000000) & ~0x60000000;
pcsx4all_prof_end_with_resume(PCSX4ALL_PROF_GPU,PCSX4ALL_PROF_HW_WRITE);
+
+ return dma_words;
}
///////////////////////////////////////////////////////////////////////////////
#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;
u16 *srcs;
u8 *dest;
- x0 = DisplayArea[0] & ~3; // alignment needed by blitter
+ x0 = DisplayArea[0] & ~1; // alignment needed by blitter
y0 = DisplayArea[1];
srcs = &((u16*)GPU_FrameBuffer)[FRAME_OFFSET(x0,y0)];
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
{
blit();
fb_dirty = false;
- if (*cbs->fskip_option)
+ if (cbs->fskip_advice)
isSkip = true;
}
else