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!)

SILENT-Pavel 12.04.2013 18:42

BlackDaemon, ну а что насчет Spinout [ULES-00693] - он простой до безумия, стоит вообще пробовать зарываться в эти все дебри что бы его запустить, есть шансы или просто ждать новой версии инструмента?

BlackDaemon 12.04.2013 19:13

SILENT-Pavel, то, что игра простая ещё не значит, что работать через псп эмулятор на пс3 будет. В качестве примера - я вчера сначала пробовал использовать fprintf(stdout, "message"); вместо printf("message"); - в результате PSP с оф. прошивкой 6.60 выходила в XMB с ошибкой 0x80020148.

Yoti 14.04.2013 14:43

Цитата:

Сообщение от BlackDaemon (Сообщение 1069429)
ыходила в XMB с ошибкой 0x80020148

Нефиг kernel и user путать.

BlackDaemon 14.04.2013 18:36

Yoti, с этим, к сожалению на пс3 трудности. Слегка подкорректировал загрузчик (который работает на PSP под OFW 6.60 без проблем), чтобы посмотреть чего он выводит на PS3:
Код:

sceKernelLoadModule result 0x80020148
sceKernelStartModule result 0x8002012E
sceKernelLoadExec result 0x80020002

Запускать простенький ELF через sceKernelLoadModule+sceKernelStartModule в отличии от PSP не хочет, а sceKernelLoadExec как оказалось совсем не реализована. :(

Yoti 18.04.2013 13:31

SILENT-Pavel,

SILENT-Pavel 19.04.2013 05:35

Yoti,

Yoti 19.04.2013 16:49

SILENT-Pavel,

BlackDaemon 26.04.2013 18:30

Итак, свершилось. :D Подписанные игры как PSP Remaster'ы загружают декриптованные модули через sceKernelLoadModule+sceKernelStartModule.

SILENT-Pavel 02.05.2013 11:57

Цитата:

Сообщение от BlackDaemon (Сообщение 1070540)
Итак, свершилось. :D Подписанные игры как PSP Remaster'ы загружают декриптованные модули через sceKernelLoadModule+sceKernelStartModule.

Ну как тебе сказать...
http://www.youtube.com/watch?v=yLQf_IiCrAw
http://www.youtube.com/watch?v=fu5Dxcez4pM
(смотреть обязательно со звуком)
---
но самое классное что фф тайп-0 и паразитка заработали нормально.

harryoke 12.05.2013 23:33

i wonder if you can help please .. i am from ps3hax and we are trying to get psp homebrew running on ps3 cfw ... we can run the cube sample & beginobject but we are running into problems getting hello world to run .... we have NICs but we keep getting black screen ... any help you could give us would be amazing ...we have an irc channel gitbrew #mirc ..or goto ps3hax : http://www.ps3hax.net/showthread.php...t=psp+homebrew hope to hear from you soon :)

Yoti 13.05.2013 01:01

harryoke,
as you may see this topic started by BlackDaemon too ;)
Explain what "hello world" you want to run?

harryoke 13.05.2013 20:59

we have achieved hello world :) http://www.youtube.com/watch?v=P9LMD3n1p6c but need help getting other homebrew working...as the pspemu on ps3 is very limited and lots of homebrew call on funtions not implimented in the pspemu ...any help would be great :)

harryoke 15.05.2013 05:15

we did it :) http://www.youtube.com/watch?v=9I8spvP0rmo

Sharaba 13.05.2014 02:17

Люди, а можете написать или кинуть ссылку на гайд как делается порт PSP Homebrew на PS3, а прочитал у вас тут все и все равно почти ничего не понял)

SILENT-Pavel 13.05.2014 02:57

Цитата:

Сообщение от Sharaba (Сообщение 1086917)
Люди, а можете написать или кинуть ссылку на гайд как делается порт PSP Homebrew на PS3, а прочитал у вас тут все и все равно почти ничего не понял)

никак не делатся, никак не работает - если кратко и понятно. только часть игр и то с косяками


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

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