PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   Запуск PSP Homebrew на PS3 (https://www.pspx.ru/forum/showthread.php?t=103479)

riku.kh3 11.04.2013 12:25

BlackDaemon, я думаю надо на заведомо рабочих играх тестить.. декриптовать, подписать и проверять на ps3.. киллзон она и на кобре не идет

BlackDaemon 11.04.2013 12:39

riku.kh3, я более, чем уверен, что корень проблемы заключается в ограничениях sceKernelLoadExec и sceKernelLoadModule/sceKernelStartModule. А это можно вылечить только вмешательством в код эмулятора, наверно.

riku.kh3 11.04.2013 12:52

BlackDaemon, если так рассуждать то и вообще во всем этом крипто мамбоджамбо и пересборкой pbp нет смысла)) если можно вмешательством в код эмулятора его заставить сразу ISO запускать xDD

BlackDaemon 11.04.2013 13:06

riku.kh3, ладно, распишу более подробно:

- все эксплойты в Minis для PS Vita не работают на PS3 - эмулятор падает с exception'ом.
- вызов функций sceKernelLoadModule+sceKernelStartModule с левым ELF из самопального загрузчика приводит к появлению сообщения об ошибке в логе TargetManager.
- на вызов функции sceKernelLoadExec с левым ELF из самопального загрузчика консоль никак не реагирует.
- все игры использующие внешний загрузчик [sceKernelLoadExec/sceKernelLoadModule+sceKernelStartModule] приводят к падению эмулятора с exception'ом. Одну я таки "вылечить" смог - Pirates of Caribbean: Dead Man's Chest.

riku.kh3 11.04.2013 13:55

Цитата:

Сообщение от BlackDaemon (Сообщение 1069294)
Одну я таки "вылечить" смог - Pirates of Caribbean: Dead Man's Chest.

Отсюда, пожалуйста, поподробнее... :)

BlackDaemon 11.04.2013 14:02

riku.kh3, предыстория, так сказать. Конкретнее - в PSP_GAME\USRDIR\SYSDIR\ лежит SP_BOOT.BIN. Подписываешь его через PrxEncrypter и заменяешь eboot.bin.

riku.kh3 11.04.2013 14:08

BlackDaemon, метал гир эсид пытаемся запустить (на кобре работает), там в папочке modules почти все prx'ы (коих 35 штук) декриптованые лежат. Думаю если правильно их подписать с нужным тегом то должна пойти.. но не получается пока((

BlackDaemon 11.04.2013 14:43

riku.kh3, глянь, что творится в папке stage. :D

riku.kh3 11.04.2013 15:39

BlackDaemon, мдя)) мимо моего беглого взляда это прошло)) надо пока на что-нить другое перейти попроще

BlackDaemon 11.04.2013 16:56

riku.kh3, гмм, я тут на интересный момент наткнулся - Prince of Persia: Revelations зависал также на загрузочном экране, когда я его через fake_np со сжатием запускал на PSP. Решил без сжатия сделать - заработал на PSP.

SILENT-Pavel 11.04.2013 17:29

Таким образом и на кобре юсб можно запускать хоумбрю перегранные в исо?

BlackDaemon 11.04.2013 22:33

SILENT-Pavel, думаю, что вполне возможно. :) Но проверяй сначала что-то простенькое - сэмплы из сдк, например, т.к. совместимость неважная.

BlackDaemon добавил 11.04.2013 в 22:33
CompilerPerf работает через printf :)

слегка подправленный исходник
Код:

#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspgu.h>
#include <pspgum.h>
#include <psppower.h>

#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>

PSP_MODULE_INFO("Compiler Performance Test", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | PSP_THREAD_ATTR_VFPU);

int done = 0;
int cpuFreq = 222;
int startSystemTime;

float pspDurationMillis[] = { 0, 910, 1137, 1214, 1023, 1125, 1227, 962, 1007, 1066, 1364, 682, 682, 819, 819, 819, 819, 682, 1214, 1227,
                              866, 1072, 1360, 792, 770, 920, 163, 243, 227 };
char *testNames[] = { "", "Empty loop", "Simple loop", "read32", "read16", "read8", "write32", "write16", "write8",
                      "Function call no params", "Function call with params",
                      "FPU add.s", "FPU mul.s",
                      "VFPU vadd.s", "VFPU vadd.p", "VFPU vadd.t", "VFPU vadd.q", "VFPU vadd.q sequence",
                      "LWC1", "SWC1",
                      "memcpy (native)", "memset (native)", "strcpy (native)",
                      "memcpy (non-native)", "memset (non-native)", "strcpy (non-native)",
                      "syscall, fast, no params", "syscall, fast, one param",
                      "jalr"
                    };

#define KB(n)    ((n) * 1024)
#define MB(n)    (KB(n) * 1024)
#define GB(n)    (MB(n) * 1024)
#define BUFFER_SIZE        MB(10)
char __attribute__((aligned(16))) buffer[BUFFER_SIZE];
int dummy;
int sumDurationMillis;
float sumPspDurationMillis;

SceUID logFd;


void printResult(char *name, int durationMillis, float pspDurationMillis)
{
    char s[1000];
    printf("%-25s: %5d ms (%5.0f%%) @ %d MHz\n", name, durationMillis, pspDurationMillis / durationMillis * 100, scePowerGetCpuClockFrequencyInt());
    sprintf(s, "%-25s: %5d ms (%5.0f%%) @ %d MHz\n", name, durationMillis, pspDurationMillis / durationMillis * 100, scePowerGetCpuClockFrequencyInt());
    pspDebugScreenPrintf("%s", s);
    sceIoWrite(logFd, s, strlen(s));
}


void startTest()
{
    startSystemTime = sceKernelGetSystemTimeLow();
}


void endTest(int testNumber)
{
    int endSystemTime = sceKernelGetSystemTimeLow();
    int durationMicros = endSystemTime - startSystemTime;
    int durationMillis = (durationMicros + 500) / 1000;
    sumDurationMillis += durationMillis;
    sumPspDurationMillis += pspDurationMillis[testNumber];

    printResult(testNames[testNumber], durationMillis, pspDurationMillis[testNumber]);
}


void runTest1()
{
    startTest();
    int i;
    int j;
    for (j = 50; j > 0; j--)
    {
        for (i = 1000000; i > 0; i--)
        {
        }
    }
    endTest(1);
}


int runTest2()
{
    startTest();
    int i;
    int j;
    int sum = 0;
    for (j = 50; j > 0; j--)
    {
        for (i = 1000000; i > 0; i--)
        {
            sum += i;
        }
    }
    endTest(2);

    return sum;
}


int runTest3()
{
    startTest();
    int i;
    int j;
    int sum = 0;
    for (j = 0; j < 10; j++)
    {
        int *address = (int *) buffer;
        for (i = BUFFER_SIZE / 4; i > 0; i--)
        {
            sum += *address++;
        }
    }
    endTest(3);

    return sum;
}


int runTest4()
{
    startTest();
    int i;
    int j;
    int sum = 0;
    for (j = 0; j < 5; j++)
    {
        short *address = (short *) buffer;
        for (i = BUFFER_SIZE / 2; i > 0; i--)
        {
            sum += *address++;
        }
    }
    endTest(4);

    return sum;
}


int runTest5()
{
    startTest();
    int i;
    int j;
    int sum = 0;
    for (j = 0; j < 3; j++)
    {
        char *address = (char *) buffer;
        for (i = BUFFER_SIZE; i > 0; i--)
        {
            sum += *address++;
        }
    }
    endTest(5);

    return sum;
}


void runTest6()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 10; j++)
    {
        int *address = (int *) buffer;
        for (i = BUFFER_SIZE / 4; i > 0; i--)
        {
            *address++ = i;
        }
    }
    endTest(6);
}


void runTest7()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 5; j++)
    {
        short *address = (short *) buffer;
        for (i = BUFFER_SIZE / 2; i > 0; i--)
        {
            *address++ = (short) i;
        }
    }
    endTest(7);
}


void runTest8()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 3; j++)
    {
        char *address = (char *) buffer;
        for (i = BUFFER_SIZE; i > 0; i--)
        {
            *address++ = (char) i;
        }
    }
    endTest(8);
}

void runTest9c()
{
    dummy = 0;
}

void runTest9b()
{
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
    runTest9c();
}

void runTest9a()
{
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
    runTest9b();
}

void runTest9()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 30; j++)
    {
        for (i = 10000; i > 0; i--)
        {
            runTest9a();
        }
    }
    endTest(9);
}


int runTest10a(int a, int b, int c, int d)
{
    dummy = 0;
    return a;
}

void runTest10()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 20; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            runTest10a(1, 2, 3, 4);
        }
    }
    endTest(10);
}


float runTest11()
{
    startTest();
    int i;
    int j;
    float sum = 0;
    for (j = 0; j < 30; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            sum += 1;
        }
    }
    endTest(11);

    return sum;
}


float runTest12()
{
    startTest();
    int i;
    int j;
    float sum = 1;
    for (j = 0; j < 30; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            sum *= 0.999999f;
        }
    }
    endTest(12);

    return sum;
}


void runTest13()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 30; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            asm("vadd.s S000, S100, S200\n");
        }
    }
    endTest(13);
}


void runTest14()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 30; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            asm("vadd.p C000.p, C100.p, C200.p\n");
        }
    }
    endTest(14);
}


void runTest15()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 30; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            asm("vadd.t C000.t, C100.t, C200.t\n");
        }
    }
    endTest(15);
}


void runTest16()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 30; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            asm("vadd.q C000, C100, C200\n");
        }
    }
    endTest(16);
}


void runTest17()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 10; j++)
    {
        for (i = 1000000; i > 0; i--)
        {
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
            asm("vadd.q C000, C100, C200\n");
        }
    }
    endTest(17);
}


float runTest18()
{
    memset(buffer, 0, BUFFER_SIZE);
    startTest();
    int i;
    int j;
    float sum = 0;
    for (j = 0; j < 10; j++)
    {
        float *address = (float *) buffer;
        for (i = BUFFER_SIZE / 4; i > 0; i--)
        {
            sum += *address++;
        }
    }
    endTest(18);

    return sum;
}


void runTest19()
{
    startTest();
    int i;
    int j;
    for (j = 0; j < 10; j++)
    {
        float *address = (float *) buffer;
        for (i = BUFFER_SIZE / 4; i > 0; i--)
        {
            *address++ = 1.f;
        }
    }
    endTest(19);
}


void runTest20()
{
    startTest();
    int i;
    int length = BUFFER_SIZE / 2;
    for (i = 0; i < 10; i++)
    {
        memcpy(buffer, buffer + length, length);
    }
    endTest(20);
}


void runTest21()
{
    startTest();
    int i;
    int length = BUFFER_SIZE;
    for (i = 0; i < 10; i++)
    {
        memset(buffer, 0, length);
    }
    endTest(21);
}


void runTest22()
{
    startTest();
    int i;
    int length = BUFFER_SIZE / 2 - 16;
    char *s = buffer + BUFFER_SIZE / 2;
    memset(s, 'a', length);
    s[length] = '\0';

    for (i = 0; i < 10; i++)
    {
        strcpy(buffer, s);
    }
    endTest(22);
}


int runTest23()
{
    startTest();
    int i;
    int j;
    int length = BUFFER_SIZE / 2;
    int sum = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = length - 1; j >= 0; j--)
        {
            buffer[j] = buffer[j + length];
            // Fake sum to avoid a native code sequence
            sum += j;
        }
    }
    endTest(23);

    return sum;
}


int runTest24()
{
    startTest();
    int i;
    int j;
    int length = BUFFER_SIZE;
    int sum = 0;
    for (i = 0; i < 2; i++)
    {
        for (j = length - 1; j >= 0; j--)
        {
            buffer[j] = '\0';
            // Fake sum to avoid a native code sequence
            sum += j;
        }
    }
    endTest(24);

    return sum;
}


int runTest25()
{
    startTest();
    int i;
    int j;
    char c;
    int length = BUFFER_SIZE / 2 - 16;
    char *s = buffer + BUFFER_SIZE / 2;
    memset(s, 'a', length);
    s[length] = '\0';

    int sum = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; 1; j++)
        {
            c = s[j];
            buffer[j] = c;
            if (c == 0)
            {
                break;
            }
            // Fake sum to avoid a native code sequence
            sum += j;
        }
    }
    endTest(25);

    return sum;
}


int runTest26()
{
    startTest();
    int i;
    int sum = 0;
    for (i = 200000; i > 0; i--)
    {
        sum += sceKernelGetSystemTimeLow();
    }
    endTest(26);

    return sum;
}


int runTest27()
{
    startTest();
    int i;
    int sum = 0;
    SceKernelSysClock time;
    for (i = 200000; i > 0; i--)
    {
        sum += sceKernelGetSystemTime(&time);
    }
    endTest(27);

    return sum;
}

void runTest28a()
{
}

void (*fn28)() = runTest28a;

void runTest28()
{
    startTest();
    int i;
    for (i = 5000000; i > 0; i--)
    {
        (*fn28)();
    }
    endTest(28);
}


void runTest()
{
    sumDurationMillis = 0;
    sumPspDurationMillis = 0;
    runTest1();
    runTest2();
    runTest3();
    runTest4();
    runTest5();
    runTest6();
    runTest7();
    runTest8();
    runTest9();
    runTest10();
    runTest11();
    runTest12();
    runTest13();
    runTest14();
    runTest15();
    runTest16();
    runTest17();
    runTest18();
    runTest19();
    runTest20();
    runTest21();
    runTest22();
    runTest23();
    runTest24();
    runTest25();
    runTest26();
    runTest27();
    runTest28();

    printResult("Overall performance index", sumDurationMillis, sumPspDurationMillis);
}


int main(int argc, char *argv[])
{
    SceCtrlData pad;
    int oldButtons = 0;
#define SECOND      1000000
#define REPEAT_START (1 * SECOND)
#define REPEAT_DELAY (SECOND / 5)
    struct timeval repeatStart;
    struct timeval repeatDelay;

    repeatStart.tv_sec = 0;
    repeatStart.tv_usec = 0;
    repeatDelay.tv_sec = 0;
    repeatDelay.tv_usec = 0;

    logFd = sceIoOpen("compilerPerf.log", PSP_O_WRONLY | PSP_O_CREAT, 0777);

    pspDebugScreenInit();
    pspDebugScreenPrintf("Press Cross to start the Performance Test\n");
    printf("Press Cross to start the Performance Test\n");
    pspDebugScreenPrintf("Press Circle to change the CPU Clock\n");
    printf("Press Circle to change the CPU Clock\n");

    while(!done)
    {
        sceCtrlReadBufferPositive(&pad, 1);
        int buttonDown = (oldButtons ^ pad.Buttons) & pad.Buttons;

        if (pad.Buttons == oldButtons)
        {
            struct timeval now;
            gettimeofday(&now, NULL);
            if (repeatStart.tv_sec == 0)
            {
                repeatStart.tv_sec = now.tv_sec;
                repeatStart.tv_usec = now.tv_usec;
                repeatDelay.tv_sec = 0;
                repeatDelay.tv_usec = 0;
            }
            else
            {
                long usec = (now.tv_sec - repeatStart.tv_sec) * SECOND;
                usec += (now.tv_usec - repeatStart.tv_usec);
                if (usec >= REPEAT_START)
                {
                    if (repeatDelay.tv_sec != 0)
                    {
                        usec = (now.tv_sec - repeatDelay.tv_sec) * SECOND;
                        usec += (now.tv_usec - repeatDelay.tv_usec);
                        if (usec >= REPEAT_DELAY)
                        {
                            repeatDelay.tv_sec = 0;
                        }
                    }

                    if (repeatDelay.tv_sec == 0)
                    {
                        buttonDown = pad.Buttons;
                        repeatDelay.tv_sec = now.tv_sec;
                        repeatDelay.tv_usec = now.tv_usec;
                    }
                }
            }
        }
        else
        {
            repeatStart.tv_sec = 0;
        }

        if (buttonDown & PSP_CTRL_CROSS)
        {
            runTest();
        }

        if (buttonDown & PSP_CTRL_CIRCLE)
        {
            cpuFreq += 111;
            if (cpuFreq > 333)
            {
                cpuFreq = 111;
            }

            int result = scePowerSetCpuClockFrequency(cpuFreq);
            if (result == 0)
            {
                pspDebugScreenPrintf("CPU Clock set to %d MHz\n", cpuFreq);
                printf("CPU Clock set to %d MHz\n", cpuFreq);
            }
            else
            {
                pspDebugScreenPrintf("Could not set CPU Clock set to %d MHz\n", cpuFreq);
                printf("Could not set CPU Clock set to %d MHz\n", cpuFreq);
            }
        }

        if (buttonDown & PSP_CTRL_TRIANGLE)
        {
            done = 1;
        }

        oldButtons = pad.Buttons;
    }

    sceGuTerm();

    sceIoClose(logFd);

    sceKernelExitGame();
    return 0;
}

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

/* Callback thread */
int CallbackThread(SceSize args, void *argp)
{
    int cbid;

    cbid = sceKernelCreateCallback("Exit Callback", exit_callback, (void*)0);
    sceKernelRegisterExitCallback(cbid);

    sceKernelSleepThreadCB();

    return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
    int thid = 0;

    thid = sceKernelCreateThread("CallbackThread", CallbackThread, 0x11, 0xFA0, 0, 0);
    if(thid >= 0)
    {
        sceKernelStartThread(thid, 0, 0);
    }

    return thid;
}


ErikPshat 11.04.2013 22:45

Цитата:

Сообщение от riku.kh3 (Сообщение 1069287)
PRX модули в играх правильно подписать тегами от ебутов не получается(( блекскринит пс3 и все тут..

Эмм, модули не надо подписывать тегами экзешников :)

Для модулей существуют свои теги - kernel or user.
Поэтому нужно найти аналогичный модуль большего размера, чем декриптованный ELF, сдампить с него заголовок и kirk.buff, подменить в PrxEncrypter и этим заголовком подписывать.
Например, думаю заголовки от psmfplayer.prx, libfont.prx, libheap.prx подойдут как раз.

P.S. У нас есть своя, полностью расписанная таблица тегов и ключей (ничего секретного), но выложить я её не могу, т.к. тема там не закончена, т.е. всё лежит в сыром виде.

riku.kh3 11.04.2013 23:23

Эхх.. как BlackDaemon и писал там судя по всему вообще все запущено..(( ничего кроме главного ебута он запускать не хочет, никакие сторонние elf будь они подписаны или нет(( как только команда на загрузку поступает весь эмуль падает с экцепшеном. и мне кажется даже модули prx подписаные в играх не используются вообще.. он их не грузит, вместо них свои внутренние использует

BlackDaemon 11.04.2013 23:25

riku.kh3, не-не, не совсем. :) Модули грузит, возьми Infected в качестве "подопытной крысы", причём часть модулей явно не грузит - при запуске проигрывается только первая заставка и сразу загрузочный экран с меню. А если затереть mpeg.prx - то запустится без заставок. ;) Если подменить mpeg.prx левым ELF - эмуль упадёт. :D

riku.kh3 11.04.2013 23:26

Тут либо в сторону PSP ремастеров копать, может там менее все строго.. либо ковырять кобру смотреть что они там патчили.

BlackDaemon 11.04.2013 23:31

riku.kh3, с PSP ремастером я чуть-чуть пробовал - сейчас тупик. Если в PARAM.SFO подменить MN (Minis) на PE (PSP Remaster), то при запуске чёрный экран, и в дебаг окне вылезает какая-то ошибка связанная с sceNp (MINIS2.EDAT пробовал делать сапопальный, к сожалению декриптованого оригинала на руках нет). Пробовал ещё другой способ - взял в качестве базового pbp от Monster Hunter Portable 3rd HD и перепаковал с ним игру как Minis - при запуске лезет немного ошибок и чёрный экран.

SILENT-Pavel 11.04.2013 23:35



Цитата:

Сообщение от riku.kh3 (Сообщение 1069363)
Тут либо в сторону PSP ремастеров копать, может там менее все строго.. либо ковырять кобру смотреть что они там патчили.

Они там ничерт не улучшили начиная с 4ого обновления донгла. Видимо просто нашли уже готовые файлы серого эмулятора и запихнули туда без всяких пояснения и исправлений, игры работают ужасно, впрочем как и по этому способу. Но например игра Гост'н'Гоблинс сохраняется на бесплатном способе и виснет с коброй. А фф 2 юбилейная работает на кобре и сохраняет ,а на этом способе вообще не запускается и черный экран. Еще на кобре можно масштабировать игру на R2, на этом способе всегда рамки.
Логика ты где?
Цитата:

Сообщение от BlackDaemon (Сообщение 1068812)
В общем, меня интересует любое хомбрю, которое способно запуститься на оф. прошивке из disc0:/psp_game/sysdir/eboot.bin с помощью fake_np. Заранее спасибо.thank you

Тут много подписанных хоумбрю любого типа с хорошим описанием.
Цитата:

Сообщение от BlackDaemon
судя по всему в эмуляторе присутствует "особый" вид защиты - все ELF/PRX должны быть подписаны, таким образом все старые игры, в которых модули и/или внешние исполняемые файлы в декриптованом виде неработают.

Но на кобре работают очень старые простые игры года так 2005.
---
p.s. если у кого-нибудь будет время, поможете с запуском GTA LCS через эмулятор на пс3? Мне пс2 версия всегда не нравилась. У нее черный экран на любых способов запуска включая кобру, вот список prx из образа:
Список prx из lcs
AUDIOCODEC.RPX
MPEGBASE.PRX
SC_SASCORE.PRX
USBPSPCM.PRX
VIDEOCODEC.PRX
LIBATRAC3PLUS.PRX
MPEG.PRX

Имею работающий собственный RIP размером ~400 мегабайт, что убирает все проблемы с размерами при конвертации, нужно просто подписать PRX по инструкции на второй странице треда и появится шанс запуска? Или с ибутом такой старой игры что-то надо делать?

А вообще вот игра Infected [ULES-00337] - содержит не малый набор PRX и все-равно работает, с чего же?
И вот например игра Spinout [ULES-00693] - такая же простая как летающий на пс3 Cube [ULUS-10223], но всегда черный экран о_О

BlackDaemon 12.04.2013 12:49

Гмм...HereticPSP полуживой - положил heretic.wad в sysdir рядом с eboot.bin - при запуске ругается, что не может найти этот wad:
Цитата:

W_InitFiles: no files found
На кастом прошивке при запуске ISO ведёт себя аналогично. Исходные коды этого чуда у кого-нить есть? На Jpcsp и PPSSPP из образа запускается без проблем.:crazy:

BlackDaemon добавил 12.04.2013 в 12:19
SILENT-Pavel, GTA: LCS на данный момент трупик. VCS работает без вывода графики, т.е. по звукам слышно, что доходит до ingame. Насчёт обязательной подписи - это было моё первоначальное предположение, запуск Infected его опровергает. :D

BlackDaemon добавил 12.04.2013 в 12:29
Ахах, надурил таки. :D Хексом заменил в ELF heretic.wad -> boot.bin и заменил boot.bin на heretic.wad.:lol:

BlackDaemon добавил 12.04.2013 в 12:49
На PS3 завести не удалось, несмотря на то, что на PSP под OFW работает. :(

ErikPshat 12.04.2013 15:11

Цитата:

Сообщение от SILENT-Pavel (Сообщение 1069366)

Только подписаны они не тем заголовком и не тем ключом. Все ранее подписанные хоумбрю подписывались тегом от демоверсий игр из PSN формата исходного DATA.PSP.

Как мы уже выяснили, на PS3 пока запускаются только игры, подписанные способом FakeNP и у которых подписан экзешник EBOOT.BIN тегом от Retail UMD-дисков или Minis - это теги группы EBOOT.BIN 0xD916xxF0 (теги не для DATA.PSP!)


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

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