PDA

Просмотр полной версии : Эксперименты...


Страницы : 1 [2]

pspowner
12.11.2007, 09:45
ОК, надеюсь ты положил всё в правильную папку т.е. game371(game352 или какая у тебя там) или в game с настроенным на 3хх Кернел, иначе последствия запуска - непредсказуемы.

Походу всётаки обновиться тебе надо, до 3.71 М33-3, ну да ладно, не хочешь - как хочешь. Как обещал высылаю исходник. Извиняюсь что в таком виде, просто лень заливаьб на ф/о, а аттачменты не пашут. :(


#include <pspsdk.h>
#include <stdio.h>
#include <zlib.h>
#include <malloc.h>
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <psputility_msgdialog.h>
#include <psputility.h>

#include <string.h>

#include <psputility_osk.h>

PSP_MODULE_INFO("osk", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(20048);


static unsigned int __attribute__((aligned(16))) list[262144];

//Содержимое мессадж бокса
char cdata[] = {
0x56, 0x49, 0x6E, 0x66, 0x6F, 0x20, 0x43, 0x68, 0x61, 0x6E,
0x67, 0x65, 0x72, 0x0D, 0x0A, 0xD0, 0x9D, 0xD0, 0xB0, 0xD0, 0xBF, 0xD0, 0xB8, 0xD1, 0x81, 0xD0, 0xB0,
0xD0, 0xBD, 0x20, 0x70, 0x73, 0x70, 0x6F, 0x77, 0x6E, 0x65, 0x72, 0x27, 0xD0, 0xBE, 0xD0, 0xBC,
0x20, 0xD1, 0x81, 0xD0, 0xBF, 0xD0, 0xB5, 0xD1, 0x86, 0xD0, 0xB8, 0xD0, 0xB0, 0xD0, 0xBB, 0xD1,
0x8C, 0xD0, 0xBD, 0xD0, 0xBE, 0x20, 0xD0, 0xB4, 0xD0, 0xBB, 0xD1, 0x8F, 0x0D, 0x0A, 0x68, 0x74, 0x74,
0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x70, 0x73, 0x70, 0x78, 0x2E, 0x72, 0x75, 0x20,
0x28, 0x43, 0x29, 0x32, 0x30, 0x30, 0x37
};

char fdata[28930];
gzFile fil;
int f;
void *hbuff, *fbuff;

#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define PIXEL_SIZE (4) /* change this if you change to another screenmode */
#define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
#define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2) /* zbuffer seems to be 16-bit? */

int SetupCallbacks();

int done = 0;

int UnPackLoad(void) {
fil=gzopen("ms0:/vshctrl.prx.gz","r");
gzread(fil,fdata,28930);
gzclose(fil);
f=sceIoOpen("ms0:/vshctrl.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
sceIoWrite(f, &fdata, 28930);
sceIoClose(f);
sceIoRemove("ms0:/vshctrl.prx.gz");
return 0;
}


static void ConfigureDialog(SceUtilityMsgDialogParams *dialog, size_t dialog_size)
{
memset(dialog, 0, dialog_size);

dialog->size = dialog_size;
sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE,
&dialog->language); // Prompt language
sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN,
&dialog->buttonSwap); // X/O button swap
dialog->buttonSwap = 1;
dialog->unknown[0] = 0x11; // ???
dialog->unknown[1] = 0x13;
dialog->unknown[2] = 0x12;
dialog->unknown[3] = 0x10;
}

static void ShowMessageDialog(const char *message)
{
SceUtilityMsgDialogParams dialog;

ConfigureDialog(&dialog, sizeof(dialog));
dialog.unknown[10] = 1;
strcpy(dialog.message, message);

sceUtilityMsgDialogInitStart(&dialog);

for(;;) {

sceGuStart(GU_DIRECT,list);
sceGuClearColor(0x666666);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

sceGuFinish();
sceGuSync(0,0);


switch(sceUtilityMsgDialogGetStatus()) {

case 2:
sceUtilityMsgDialogUpdate(1);
break;

case 3:
sceUtilityMsgDialogShutdownStart();
break;

case 0:
return;

}

sceDisplayWaitVblankStart();
sceGuSwapBuffers();
}
}

int PackPrepare(void) {

fil = gzopen("ms0:/vshctrl.prx.gz","w");
gzwrite(fil,fdata,28930);
gzclose(fil);

f = sceIoOpen("ms0:/header.prx", PSP_O_RDONLY, 0777);
hbuff=malloc(0x150);
sceIoRead(f, hbuff, 0x150);
sceIoClose(f);

f = sceIoOpen("ms0:/vshctrl.prx.gz", PSP_O_RDONLY, 0777);
int size=sceIoLseek(f, 0, SEEK_END);
sceIoLseek(f, 0, SEEK_SET);
fbuff=malloc(size);
sceIoRead(f, fbuff, size);
sceIoClose(f);

f = sceIoOpen("ms0:/vshctrl1.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
sceIoWrite(f, hbuff, 0x150);
sceIoWrite(f, fbuff, size);
sceIoClose(f);

//sceKernelDelayThread(1*1000*1000);

sceIoRemove("ms0:/vshctrl.prx.gz");
sceIoRemove("ms0:/header.prx");
sceIoRemove("ms0:/vshctrl.prx");

free(hbuff);
free(fbuff);

return 0;
}


int CopyrightCheck(void) {

unsigned int count, sum;

sum=0;

for (count=0; count<=sizeof(cdata); count++) sum=sum+(cdata[count] xor 0x5A03);


return sum;
}


int main(int argc, char* argv[]) {
SetupCallbacks();
if (CopyrightCheck()!=0x43E33) sceKernelExitGame();


//sceKernelDelayThread(3*1000*1000);


// INIT GU!!!! it will not work without!!!

sceGuInit();
sceGuStart(GU_DIRECT,list);
sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
sceGuDepthRange(0xc350,0x2710);
sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
sceGuEnable(GU_SCISSOR_TEST);
sceGuDepthFunc(GU_GEQUAL);
sceGuEnable(GU_DEPTH_TEST);
sceGuFrontFace(GU_CW);
sceGuShadeModel(GU_FLAT);
sceGuEnable(GU_CULL_FACE);
sceGuEnable(GU_TEXTURE_2D);
sceGuEnable(GU_CLIP_PLANES);
sceGuFinish();
sceGuSync(0,0);
sceDisplayWaitVblankStart();
sceGuDisplay(GU_TRUE);

// INIT OSK

unsigned short intext[128] = { '3','.','7','1',' ','M','3','3','-','3' }; // text already in the edit box on start
unsigned short outtext[128] = { 0 }; // text after input
//Введите новое название
unsigned short desc[128] = { 0x412, 0x432, 0x435, 0x434, 0x438, 0x442, 0x435, 0x20, 0x43D, 0x43E, 0x432, 0x43E, 0x435, 0x20, 0x43D, 0x430, 0x437, 0x432, 0x430, 0x43D, 0x438, 0x435, 0x00 }; // de******ion


// unsigned short [cpr]

ShowMessageDialog(cdata);



SceUtilityOskData data;
memset(&data, 0, sizeof(data));
data.language = 9; // Русский
data.lines = 1; // just online
data.unk_24 = 1; // set to 1
data.desc = desc;
data.intext = intext;
data.outtextlength = 128; // sizeof(outtext) / sizeof(unsigned short)
data.outtextlimit = 10; // just allow 32 chars
data.outtext = outtext;

SceUtilityOskParams osk;
memset(&osk, 0, sizeof(osk));
osk.size = sizeof(osk);
osk.language = 8;
osk.buttonswap = 1;
osk.unk_12 = 17; // What
osk.unk_16 = 19; // the
osk.unk_20 = 18; // fuck
osk.unk_24 = 16; // ???
osk.unk_48 = 1;
osk.data = &data;

// Only ascii code is handled so only the input of the small letters is printed

int rc = sceUtilityOskInitStart(&osk);
if(rc) {
return 0;
}

while(!done) {
sceGuStart(GU_DIRECT,list);
sceGuClearColor(0x666666);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

sceGuFinish();
sceGuSync(0,0);

switch(sceUtilityOskGetStatus()) {
case PSP_OSK_INIT :
break;
case PSP_OSK_VISIBLE :
sceUtilityOskUpdate(1); // 2 is taken from ps2dev.org recommendation - ***ня, с 1 лучше ся ведёт
break;
case PSP_OSK_QUIT :
sceUtilityOskShutdownStart();
break;
case PSP_OSK_FINISHED :
done = 1;
break;
case PSP_OSK_NONE :
default :
break;
}

sceDisplayWaitVblankStart();
sceGuSwapBuffers();
}

//Это потом надо будет убить
int r,i;
char bu[9];
for (i=0; i<=9; i++) bu[i]=data.outtext[i];

sceGuTerm();

//faccess.prx - грузится в кернел и списывает с ф0 vshctrl.prx в виде двух файлов - header.prx и vshctrl.prx.gz

SceUID mod = pspSdkLoadStartModule("faccess.prx", PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0)
{
pspDebugScreenInit();
printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
sceKernelDelayThread(10*1000*1000);
sceKernelExitGame();
}
UnPackLoad();
pspDebugScreenInit();
r=0x4650;
for(i = 0; i<=9; i++) {
fdata[r]=bu[i];
r+=2;
}

PackPrepare();

//flasher.prx - записывает vshctrl1.prx на ф0
mod = pspSdkLoadStartModule("flasher.prx", PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0)
{
printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
sceKernelDelayThread(10*1000*1000);
sceKernelExitGame();
}

sceIoRemove("ms0:/vshctrl1.prx");
sceKernelExitGame();

return 0;
}

int exit_callback(int arg1, int arg2, void *common) {
done = 1;
sceKernelExitGame();
return 0;
}

int CallbackThread(SceSize args, void *argp) {
int cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}

int SetupCallbacks(void) {
int thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}



Makefile


TARGET = osk
OBJS = main.o
BUILD_PRX=1

INCDIR =
CFLAGS = -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =
LIBS = -lpspgu zlib/libz.a

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = VIChangerGUI

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

l3VGV
12.11.2007, 11:29
Да, компилил Славиной сборкой СДК в ядро 3ХХ, последний СДК от ВГВ с ОСК почему-то не дружит :(

Запускать через ПСПЛИНК, даже не пробывал.


А как имнно не дружит? могу исходник сам поковырять если даш :)

А...туплю если это сверху оно то поквыряюсь.

За выходные накрутил дебиан и заставил его работать. голова немножка не варит, сори.

pspowner
12.11.2007, 12:15
Ну посмотри, увидешь :) Пытался откомпилить на твоей сборке, а он мне начал ругаться на свои собственные сдкашные либы, ну я кароче забил.

Mortem
12.11.2007, 12:32
Так это, ОСК под 1.50 вообще не пашет? Зафигом мне под 3.хх-то? Если уж и делать, то тогда под оба ядра, а не под какое-то одно...
А-то сейчас перепрошюсь, а потом окажется, что большую часть имеющегося софта менять нужно. Да и у меня сейчас большой напряг с инетом, чтобы выкачивать обновления и прочие патчи, а потом ещё и софт качать. Так что нафиг пока. Если уж ОСК не пашет, то пока и обойдусь...

MGF обновил.

pspowner
12.11.2007, 12:52
Там вроде ситуация такая - пашет только в оригинальной 1.50, в ядре 1.50 кастомов - не пашет. Вроде так.

Но собственно, для меня что 1.50, что ядро 150 в кастоме - вчерашний день, я для этого ничего делать не буду, хотя и так почти ничего не делаю ))

l3VGV
12.11.2007, 13:12
Хых. жутко ругается на собственные хедеры...прикольно. будем копать.

Mortem
12.11.2007, 14:29
pspowner
Что есть во всех этих новомодных прошивках, чего нету в 3.52 М33-2?
А-то может я бы и прошился.
Да и вообще, тогда придётся постоянно колупать Makefile, чтобы компилить его PSPxIDE, а так ломает, чесслово. (:

pspowner
12.11.2007, 14:36
1) Ты можешь остаться на 3.52, но проги делать для 3хх
2) Ты можешь прошиться на 3.71 при этом ТЫ НЕ ПОТЕРЯЕШЬ возможность запускать 150 хомки. Какой смысл сидеть на старье?

Колупать? Чего колупать?


Ладно, как хош.

l3VGV
12.11.2007, 15:44
Итаг я тут чутка поковырялсо :)

дело в том что хедеры сильно изменились, причём некоторые нужно инклудить раньше других.
вобщемто всё вроде поправилось, окромя проверки чексуммы. она чёто на ксор ругается...

#include <pspsdk.h>
#include <stdio.h>
#include <zlib/zlib.h>
#include <malloc.h>
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <psputility.h>
#include <psputility_msgdialog.h>


#include <string.h>

#include <psputility_osk.h>

PSP_MODULE_INFO("osk", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(20048);


static unsigned int __attribute__((aligned(16))) list[262144];

//Содержимое мессадж бокса
char cdata[] = {
0x56, 0x49, 0x6E, 0x66, 0x6F, 0x20, 0x43, 0x68, 0x61, 0x6E,
0x67, 0x65, 0x72, 0x0D, 0x0A, 0xD0, 0x9D, 0xD0, 0xB0, 0xD0, 0xBF, 0xD0, 0xB8, 0xD1, 0x81, 0xD0, 0xB0,
0xD0, 0xBD, 0x20, 0x70, 0x73, 0x70, 0x6F, 0x77, 0x6E, 0x65, 0x72, 0x27, 0xD0, 0xBE, 0xD0, 0xBC,
0x20, 0xD1, 0x81, 0xD0, 0xBF, 0xD0, 0xB5, 0xD1, 0x86, 0xD0, 0xB8, 0xD0, 0xB0, 0xD0, 0xBB, 0xD1,
0x8C, 0xD0, 0xBD, 0xD0, 0xBE, 0x20, 0xD0, 0xB4, 0xD0, 0xBB, 0xD1, 0x8F, 0x0D, 0x0A, 0x68, 0x74, 0x74,
0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x70, 0x73, 0x70, 0x78, 0x2E, 0x72, 0x75, 0x20,
0x28, 0x43, 0x29, 0x32, 0x30, 0x30, 0x37
};

char fdata[28930];
gzFile fil;
int f;
void *hbuff, *fbuff;

#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define PIXEL_SIZE (4) /* change this if you change to another screenmode */
#define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
#define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2) /* zbuffer seems to be 16-bit? */

int SetupCallbacks();

int done = 0;

int UnPackLoad(void) {
fil=gzopen("ms0:/vshctrl.prx.gz","r");
gzread(fil,fdata,28930);
gzclose(fil);
f=sceIoOpen("ms0:/vshctrl.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
sceIoWrite(f, &fdata, 28930);
sceIoClose(f);
sceIoRemove("ms0:/vshctrl.prx.gz");
return 0;
}


static void ConfigureDialog(pspUtilityMsgDialogParams *dialog, size_t dialog_size)
{
memset(dialog, 0, dialog_size);

dialog->base.size = dialog_size;
sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE,
&dialog->base.language); // Prompt language
sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN,
&dialog->base.buttonSwap); // X/O button swap
dialog->base.buttonSwap = 1;
// dialog->base.unknown[0] = 0x11; // ???
// dialog->base.unknown[1] = 0x13;
// dialog->base.unknown[2] = 0x12;
// dialog->base.unknown[3] = 0x10;
}

static void ShowMessageDialog(const char *message)
{
pspUtilityMsgDialogParams dialog;

ConfigureDialog(&dialog, sizeof(dialog));
//dialog.unknown[10] = 1; //Туто явно надо знать в какую структуру эту 1 запизать и что раньше под акновном понималось, смотри файл пспутилити.х
strcpy(dialog.message, message);

sceUtilityMsgDialogInitStart(&dialog);

for(;;) {

sceGuStart(GU_DIRECT,list);
sceGuClearColor(0x666666);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

sceGuFinish();
sceGuSync(0,0);


switch(sceUtilityMsgDialogGetStatus()) {

case 2:
sceUtilityMsgDialogUpdate(1);
break;

case 3:
sceUtilityMsgDialogShutdownStart();
break;

case 0:
return;

}

sceDisplayWaitVblankStart();
sceGuSwapBuffers();
}
}

int PackPrepare(void) {

fil = gzopen("ms0:/vshctrl.prx.gz","w");
gzwrite(fil,fdata,28930);
gzclose(fil);

f = sceIoOpen("ms0:/header.prx", PSP_O_RDONLY, 0777);
hbuff=malloc(0x150);
sceIoRead(f, hbuff, 0x150);
sceIoClose(f);

f = sceIoOpen("ms0:/vshctrl.prx.gz", PSP_O_RDONLY, 0777);
int size=sceIoLseek(f, 0, SEEK_END);
sceIoLseek(f, 0, SEEK_SET);
fbuff=malloc(size);
sceIoRead(f, fbuff, size);
sceIoClose(f);

f = sceIoOpen("ms0:/vshctrl1.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
sceIoWrite(f, hbuff, 0x150);
sceIoWrite(f, fbuff, size);
sceIoClose(f);

//sceKernelDelayThread(1*1000*1000);

sceIoRemove("ms0:/vshctrl.prx.gz");
sceIoRemove("ms0:/header.prx");
sceIoRemove("ms0:/vshctrl.prx");

free(hbuff);
free(fbuff);

return 0;
}


int CopyrightCheck(void) {

unsigned int count, sum;

sum=0;

for (count=0; count<=sizeof(cdata); count++) sum=sum+(cdata[count] xor 0x5A03);


return sum;
}


int main(int argc, char* argv[]) {
SetupCallbacks();
if (CopyrightCheck()!=0x43E33) sceKernelExitGame();


//sceKernelDelayThread(3*1000*1000);


// INIT GU!!!! it will not work without!!!

sceGuInit();
sceGuStart(GU_DIRECT,list);
sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
sceGuDepthRange(0xc350,0x2710);
sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
sceGuEnable(GU_SCISSOR_TEST);
sceGuDepthFunc(GU_GEQUAL);
sceGuEnable(GU_DEPTH_TEST);
sceGuFrontFace(GU_CW);
sceGuShadeModel(GU_FLAT);
sceGuEnable(GU_CULL_FACE);
sceGuEnable(GU_TEXTURE_2D);
sceGuEnable(GU_CLIP_PLANES);
sceGuFinish();
sceGuSync(0,0);
sceDisplayWaitVblankStart();
sceGuDisplay(GU_TRUE);

// INIT OSK

unsigned short intext[128] = { '3','.','7','1',' ','M','3','3','-','3' }; // text already in the edit box on start
unsigned short outtext[128] = { 0 }; // text after input
//Введите новое название
unsigned short desc[128] = { 0x412, 0x432, 0x435, 0x434, 0x438, 0x442, 0x435, 0x20, 0x43D, 0x43E, 0x432, 0x43E, 0x435, 0x20, 0x43D, 0x430, 0x437, 0x432, 0x430, 0x43D, 0x438, 0x435, 0x00 }; // de******ion


// unsigned short [cpr]

ShowMessageDialog(cdata);



SceUtilityOskData data;
memset(&data, 0, sizeof(data));
data.language = 9; // Русский
data.lines = 1; // just online
data.unk_24 = 1; // set to 1
data.desc = desc;
data.intext = intext;
data.outtextlength = 128; // sizeof(outtext) / sizeof(unsigned short)
data.outtextlimit = 10; // just allow 32 chars
data.outtext = outtext;

SceUtilityOskParams osk;
memset(&osk, 0, sizeof(osk));
osk.base.size = sizeof(osk);
osk.base.language = 8;
osk.base.buttonSwap = 1;
// osk.unk_12 = 17; // What
// osk.unk_16 = 19; // the
// osk.unk_20 = 18; // fuck
// osk.unk_24 = 16; // ???
// osk.unk_48 = 1;
osk.data = &data;

// Only ascii code is handled so only the input of the small letters is printed

int rc = sceUtilityOskInitStart(&osk);
if(rc) {
return 0;
}

while(!done) {
sceGuStart(GU_DIRECT,list);
sceGuClearColor(0x666666);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

sceGuFinish();
sceGuSync(0,0);

switch(sceUtilityOskGetStatus()) {
case PSP_UTILITY_DIALOG_INIT :
break;
case PSP_UTILITY_DIALOG_VISIBLE :
sceUtilityOskUpdate(1); // 2 is taken from ps2dev.org recommendation - ***ня, с 1 лучше ся ведёт
break;
case PSP_UTILITY_DIALOG_QUIT :
sceUtilityOskShutdownStart();
break;
case PSP_UTILITY_DIALOG_FINISHED :
done = 1;
break;
case PSP_UTILITY_DIALOG_NONE :
default :
break;
}

sceDisplayWaitVblankStart();
sceGuSwapBuffers();
}

//Это потом надо будет убить
int r,i;
char bu[9];
for (i=0; i<=9; i++) bu[i]=data.outtext[i];

sceGuTerm();

//faccess.prx - грузится в кернел и списывает с ф0 vshctrl.prx в виде двух файлов - header.prx и vshctrl.prx.gz

SceUID mod = pspSdkLoadStartModule("faccess.prx", PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0)
{
pspDebugScreenInit();
printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
sceKernelDelayThread(10*1000*1000);
sceKernelExitGame();
}
UnPackLoad();
pspDebugScreenInit();
r=0x4650;
for(i = 0; i<=9; i++) {
fdata[r]=bu[i];
r+=2;
}

PackPrepare();

//flasher.prx - записывает vshctrl1.prx на ф0
mod = pspSdkLoadStartModule("flasher.prx", PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0)
{
printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
sceKernelDelayThread(10*1000*1000);
sceKernelExitGame();
}

sceIoRemove("ms0:/vshctrl1.prx");
sceKernelExitGame();

return 0;
}

int exit_callback(int arg1, int arg2, void *common) {
done = 1;
sceKernelExitGame();
return 0;
}

int CallbackThread(SceSize args, void *argp) {
int cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}

int SetupCallbacks(void) {
int thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}

Mortem
12.11.2007, 19:44
qsPSP v.0.3 (QSP 5.4.0)
- Ввод пользовательского текста
- Сообщение (MSG)
- Активная панель выделяется по краям
http://elmortem.mirgames.ru/?path=psp-qsp

MGF v.0.0.3.5 (12.11.2007)
+ Добавлена функция рисования одного символа (MGFFONT::RenderChar)
+ Добавлено выравнивание по пикселям при рисовании текста с MGFFONT_CENTER, чтобы текст не размывался.
+ Добавлена функция рисования линии (MGF::Gfx_RenderLine)
http://elmortem.mirgames.ru/?path=psp

Mortem
19.11.2007, 02:24
qsPSP v.0.4 (QSP 5.4.0)
* Исправлена ошибка со Sleep
* Исправлена ошибка при удалении символов в диалоге ввода текста
+ Добавлкна поддержка команды INPUT
http://elmortem.mirgames.ru/?path=psp-qsp

Если кто не в курсе, то в поставке идёт книга-игра Д. Брославского "Подземелье Чёрного Замка". Это игра моего детства, и наверняка не только моего. (:

Я вот думаю, надо бы создавать уже пост в ветке про софт или помедитировать над графикой интерфейса?

pspowner
21.11.2007, 10:16
Мортем, релизь в софте. Прикреплю.

Второе. Мы тут вчера с ВГВ выяснили, что он тестил не ту версию моего ВЧанжера т.е. тестил ту, которая без ГУИ и ОСК(при старте в ядре 1.50 виснет намертво). Видимо тажа ошибка у тебя, ты не пробовал эту - http://www.pspx.ru/forum/showpost.php?p=560066&postcount=10
(интересно, почему темы целиком никто не смотрит?)

Так вот, та версия что в 10ом посте работает, причём как в ядре 1.50, так и в 3.71 - что странно. И ОСК там работает, даже на слиме - это подтверждено.

так что если ты на ОСК окончательно не забил, советую посмотреть.

======Правда есть проблема с доступом в ф0 на слиме и вобще на 3.71 М33, хотя на толстой ПСП и 3.71 м33-2(3) я эту траблу заборол. Так что проблема только со слимом.

По сообщениям заграничной резедентуры, это дело можно вылечить -


Try to use vsh mode instead of user mode, this is:

PSP_MODULE_INFO("blahblah", 0x800, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_VSH)

You could even reassign the flashes from it directly. M33-2 and 3 updaters do that, and they don't have any piece of kernel code.
Т.е. вместо всех этих извращений с внешними prx, можно просто всё юзать в главном модуле. Но эт конечно нуждается в тестировании.

Mortem
21.11.2007, 11:58
Гляну.
На счёт просмотра тем - так хорошим тоном является обновлять первый пост. (: Ибо кто знает, сколько сотен постов там уже накатали, попробуй-ка найди среди них тот один с очень важным обновлением. (:

pspowner
21.11.2007, 12:11
Там сообщений то кот наплакал. Ладно, проехали. Поправил 1ый пост.

Mortem
23.11.2007, 12:17
Други добрые, поможите откомпилить под 3.71, чтобы на слимках тоже работало.
http://elmortem.mirgames.ru/download/psp/qspsp060src.rar
Вот полные исходники проекта. Версия 0.6.0.
http://elmortem.mirgames.ru/download/psp/mgf_0_0_3_6.rar
Вот последняя версия MGF. Версия beta 3.6.
Заранее спасибо.

pspowner
23.11.2007, 12:18
Ща попробую.

pspowner
23.11.2007, 12:58
Всё откомпилил. У меня на ядре 3.71 работает.
Выставил BUILD_PRX=1 и кучу установил в 20000К
Всётаки впритык нехорошо память выделять, это я про 23500..
Полученный PRX впаковал в ебут вручную, через pack-pbp


Полная сборка. Прошу l3VGV затестить на Слиме.
http://ifolder.ru/4252036

Это для модемного Мортема, только скомпиленный ИПУТ (если повторишь адресок, могу и на почту зафигачить)

http://ifolder.ru/4252089

PS. Мортем, если сам так и не разберёшься как компилить под 3ХХ (влом тебе это или ещё как), то могу я тебе компилить. Вобщем смотри сам.

l3VGV
23.11.2007, 19:53
Всё откомпилил. У меня на ядре 3.71 работает.
Выставил BUILD_PRX=1 и кучу установил в 20000К
Всётаки впритык нехорошо память выделять, это я про 23500..
Полученный PRX впаковал в ебут вручную, через pack-pbp


Полная сборка. Прошу l3VGV затестить на Слиме.
http://ifolder.ru/4252036

Это для модемного Мортема, только скомпиленный ИПУТ (если повторишь адресок, могу и на почту зафигачить)

http://ifolder.ru/4252089

PS. Мортем, если сам так и не разберёшься как компилить под 3ХХ (влом тебе это или ещё как), то могу я тебе компилить. Вобщем смотри сам.
Доброго вечера уважаемому собранию, спешу поделиться с вами результатами теста. Для проведения полевых испытаний была использована беленькая псп-слим нерусской сборки и 3го региона с прошивкою 3.71-2. приложение успешным образом стартовало и нарисовало симпотишное меню, реагирует на аналоговый стик и кнопки однако игнорирует д-пад.
за сим откланиваюсь, коли чё стучите в аську :)

Mortem
23.11.2007, 21:59
Есть какие-нить идеи из-за чего это может происходить? И ты б аську свою где-нить написал - пообчались бы. (:

pspowner
23.11.2007, 23:10
Мортем, на щёт игнора пада - может красную рамочку пожирнее сделать?

Mortem
06.03.2009, 15:15
Я вернулся. Местами. Скоро будет обновление qsPSP, и последующее развитие. Буду писать простенький HTML-рендер... (:
Всем снова здрасьте.

l3VGV
06.03.2009, 15:39
Коничиваааа.

а чего на аську не отвечал? я тебе туда писал месагу!

а хтмл рендер будет какой? опен сорс, либа или как?

какие цели задачи?

Mortem
23.04.2009, 01:41
Аську может сменил... 400088801, а ваще жаббер круче - elmortem@jabber.org
HTML-рендер ясно дело опенсорсный, "цели задачи" развитие qsPSP, а там в вендовой версии поддержка HTML на базовом уровне с поддержкой исполнения команд в ссылках. Так что структуру коллбеков забацаю. Но пока важнее сам рендер написать... (:
До мая времени совсем нет, всё буквально по часа расписано, так что уже ближе к лету будет всё.
Аккум ещё очень не вовремя сдох и нигде не могу под толстушку найти его. А тут ещё Андройд масла в огонь подливает, очень хочется его. (:

l3VGV
23.04.2009, 09:21
Андройд глядел я на наладошнике своём. прикольно, джава таки решает, интерфейс и тп, софт общий. тока подтормаживает покачто :(

насчет хтмл, я вот смотрел такую штуку как HTMLite, она официально не опенсорсе, но автор говорит что хорошим людям под интересную задачу исходник он выдает.
Вещь мега мощщная.