PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Программирование для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=101)
-   -   Эксперименты... (https://www.pspx.ru/forum/showthread.php?t=37390)

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

Цитата:

Сообщение от pspowner (Сообщение 561640)

Да, компилил Славиной сборкой СДК в ядро 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 виснет намертво). Видимо тажа ошибка у тебя, ты не пробовал эту - https://www.pspx.ru/forum/showpost.ph...6&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...spsp060src.rar
Вот полные исходники проекта. Версия 0.6.0.
http://elmortem.mirgames.ru/download...gf_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

Цитата:

Сообщение от pspowner (Сообщение 570999)
Всё откомпилил. У меня на ядре 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

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


Текущее время: 11:29. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.