|  | 
     
	
	
		| Программирование для PSP Вы программист? Welcome сюда... |  
	
	
		
	
	
	
		|  12.11.2007, 09:45 | Сообщение: #18 (562504) |  
	| 
 
  
			
Прошивка: Slim&Light 3.90 M33 Другие консоли: SONY PLAYSTATION THREE & Nintendo Wii Регистрация: 10.03.2006 Адрес: Москва 
					Сообщений: 2,407
				 Вы сказали Спасибо: 810 
		
			
				Поблагодарили 2,294 раз(а) в 756 сообщениях
			
		
	 Сила репутации: 1 Репутация: 1508 
					(обеспечено прекрасное будущее)
      | 
				  
 
	
		ОК, надеюсь ты положил всё в правильную папку т.е. 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
 
 |  
	|  |       |  
	
		
	
	
	
	
	
	
	
	
		| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) |  
		|  |  
	| 
	|  Ваши права в разделе |  
	| 
		
		Вы не можете создавать новые темы Вы не можете отвечать в темах Вы не можете прикреплять вложения Вы не можете редактировать свои сообщения 
 HTML код Выкл. 
 |  |  |  
          Текущее время: 09:58. Часовой пояс GMT +3.
        
      
        | 
		
		Powered by vBulletin® Version 3.8.7 Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot 
			
		PSPx Forum - Сообщество фанатов игровых консолей.
	    |  |  |