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 :)
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 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);
}
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);
}
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");
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;
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
Эмуляция псп вообще всегда была таинственной штукой.
Кобра вообще имеет что-то общее с этим способом?
Если со временем научатся исправлять зашифрованные модули и все такое - совместимость может быть 100%? Ведь некоторые игры идут идеально как родные, а другие даже интро не показывают чем не конвертируй.
---
И что насчет слуха, что проскочил на иностранном форуме, будто на дексе эмулируется лучше?
---
В общем имеется кобра донгл и прошивка, если нужно что-нибудь протестировать, пишите.
Цитата:
Сообщение от riku.kh3
(Сообщение 1069363)
Тут либо в сторону PSP ремастеров копать, может там менее все строго.. либо ковырять кобру смотреть что они там патчили.
Они там ничерт не улучшили начиная с 4ого обновления донгла. Видимо просто нашли уже готовые файлы серого эмулятора и запихнули туда без всяких пояснения и исправлений, игры работают ужасно, впрочем как и по этому способу. Но например игра Гост'н'Гоблинс сохраняется на бесплатном способе и виснет с коброй. А фф 2 юбилейная работает на кобре и сохраняет ,а на этом способе вообще не запускается и черный экран. Еще на кобре можно масштабировать игру на R2, на этом способе всегда рамки.
Логика ты где?
Цитата:
Сообщение от BlackDaemon
(Сообщение 1068812)
В общем, меня интересует любое хомбрю, которое способно запуститься на оф. прошивке из disc0:/psp_game/sysdir/eboot.bin с помощью fake_np. Заранее спасибо.thank you
судя по всему в эмуляторе присутствует "особый" вид защиты - все ELF/PRX должны быть подписаны, таким образом все старые игры, в которых модули и/или внешние исполняемые файлы в декриптованом виде неработают.
Но на кобре работают очень старые простые игры года так 2005.
---
p.s. если у кого-нибудь будет время, поможете с запуском GTA LCS через эмулятор на пс3? Мне пс2 версия всегда не нравилась. У нее черный экран на любых способов запуска включая кобру, вот список prx из образа:
Имею работающий собственный RIP размером ~400 мегабайт, что убирает все проблемы с размерами при конвертации, нужно просто подписать PRX по инструкции на второй странице треда и появится шанс запуска? Или с ибутом такой старой игры что-то надо делать?
Еще интересный вопрос, раз уж заговорили про PRX, возможно ли запустить читдевайс при эмуляции на пс3 (если сама игра пойдет) вставив его внутрь образа, он же тоже 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 работает. :(
Только подписаны они не тем заголовком и не тем ключом. Все ранее подписанные хоумбрю подписывались тегом от демоверсий игр из 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 как оказалось совсем не реализована. :(
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 :)