rendered paste body#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
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();
}
}