#include #include #include void *g_vram_base, *g_vram_base_2; int linePos = 0; /* Define the module info section */ MODULE_INFO("PSPMC", 0x01010000) /* Define printf, just to make typing easier */ #define printf pspDebugScreenPrintf /* Exit callback */ void exit_callback(void) { sceKernelExitGame(); } /* Callback thread */ void CallbackThread(void *arg) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if (thid >= 0) sceKernelStartThread(thid, 0, 0); return thid; } unsigned char *getVramAddr() { if (frame == 0) return g_vram_base; return g_vram_base_2; } void swapBuffer() { if (frame == 0) { sceDisplaySetFrameBuf(g_vram_base, 512, 3, 1); frame = 1; } else { sceDisplaySetFrameBuf(g_vram_base_2, 512, 3, 1); frame = 0; } } void fillvram(unsigned long color) { unsigned long *vptr0; //pointer to vram unsigned long i, j; vptr0 = getVramAddr(); for (i = 0; i < 272; i++) { if (frame == 0) { //skip a line for (j = 0; j < 480; j++) { *vptr0 = 0; vptr0 += 1; } vptr0 += 512 - 480; } for (j = 0; j < 480; j++) { *vptr0 = color; vptr0 += 1; } vptr0 += 512 - 480; //skip offscreen buffer //skip a line if (frame == 1) { for (j = 0; j < 480; j++) { *vptr0 = 0; vptr0 += 1; } vptr0 += 512 - 480; } } //draw line vptr0 = getVramAddr(); vptr0 += 512 * linePos; for (i = 0; i < 4; i++) { for (j = 0; j < 480; j++) { *vptr0 = 0x00FFFFFF; vptr0 += 1; } vptr0 += 512 - 480; } linePos++; //linePos = linePos % 272; if (linePos > 268) linePos = 0; } int main(int argc, char* argv[]) { g_vram_base = (void *) (0x40000000 | sceGeEdramGetAddr()); g_vram_base_2 = (void *) (g_vram_base + 512 * 272 * 4); sceDisplaySetMode(0, 480, 272); sceDisplaySetFrameBuf(g_vram_base, 512, 3 /* 8888 ABGR mode*/, 1); SetupCallbacks(); printf("starting pspmc\n"); for (;;) { //uses fancy fillvram func to draw alternating lines of the color specified (ABGR format) if (frame == 0) fillvram(0x00FF0000); else fillvram(0x00FF0000); //not so fancy set vram all one color //for (i = 0; i < 272; i+=1) // memset(frame?g_vram_base:g_vram_base_2, i%2==0?0x007F0000:0x00000000, 512*270); sceDisplayWaitVblankStart(); swapBuffer(); } }