Hello PSP world! (комментарии)
Это сообщение сгенерировано автоматически.
Отлично! Молодец. Попробую воспользоваться :)
Призыв ко всем участникам — генерируйте материал!
Статья хорошая, но маленькая. Как можно понять, существует три альтернативы для SDK:
1. Официальный SDK.
2. Неофициальный с ps2dev.org.
3. SDK, сформированный данным сообществом (доступен через subversion, ищется по ссылкам с форума сообщества).
Из инструментов программирования, тоже, три альтернативы:
1. Официальный GCC.
2. Специальный CodeWarrior для PSP.
3. Неофициальный, адаптированный GCC с ps2dev.org.
По личному мнению и по слухам, ни один из трех SDK не самодостаточен для полного счастья. Поэтому надо обязательно достать если и не все три, то уж точно вторые два.
При разработке приходится иметь дело c артефактами PBP, SFO, PSAR, ELF, PRX, PFX, PSP:
1. PBP. Все штатные игры и даже видео идут в комплекте с PBP-файлом. PBP - это простое объединение различных сопроводительных файлов приложения. Обязательно включает в себя мета-данные (формат SFO) о приложении, такие, как регион, версию, путь к данным сохранения, вид запуска (UMD, Memory Stick), число дисков, номер диска (для многодисковых игр) и еще много всего подобного. Кроме мета-данных, в PBP включаются несколько картинок и звуковой файл в формате ATRAC, которые демонстрируются пользователю в качестве обзорной информации о приложении. Далее идет PSP-артефакт с описанием программного кода (размер, формат, путь к модулю и т.п.). Последним идет архивная секция PSAR, видимо, там хранится цифровая подпись, сертифицирующая приложение.
2. SFO. Формат мета-данных, хранит набор пар "Ключ-значение". Суть содержимого меняется в зависимости от того, где эти мета-данные используются.
3. ELF. Как ни назови, ELF он и в Африке ELF, то есть, это стандартный MIPS ELF, с которого начинается выполнение программного кода приложения.
4. PRX. Это отдельный программный модуль, по сути как DLL в Windows. По формату несколько отличается от стандартного ELF.
В итоге, имеем необходимость сформировать правильные PBP, ELF и PRX. Это те основные файлы, из которых будет состоять программная часть приложения. Остальные ресурсы можно хранить в отдельных файлах. Программный код может выполняться в kernel и user-mode, это стандартная практика разграничения доступа к основным ресурсам. Почти любая ошибка в kernel-mode приведет к зависанию системы. Поэтому возникает желание разграничить те части программы, которым нужен kernel-mode и те, которым лучше бы работать в user-mode. Таким образом, можно написать отдельный загрузчик, собрать его в ELF, снабдить PBP и заставить его загружать модуль с игровым кодом, а также другие модули из числа системных, в которых может возникнуть необходимость (USB, кодеки и т.п.). Если программа маленькая, то можно не писать loader, а оформить весь код в ELF. Так сделано в примерах из утёкшего SDK.
Кстати, ищите файл pspdoc.pdf в разделе полезных ссылок сообщества, там форматы PBP, ELF, PRX, PSAR и SFO приведены подробно. Итак, чтобы сформировать нужные артефакты, существуют утилиты:
1. psp-strip - вырезает ненужную информацию из ELF-файлов, применять не обязательно, однако это позволяет сэкономить в среднем 50 кб. В частности, в ELF не должно быть debug symbols. И если psp-strip вдруг заругается на подсунутый ей ELF, то знайте - надо отключить debug information.
2. mksfo - на входе имеет ELF, а на выходе выдает файл с мета-данными SFO (см. выше). Если хотите разнообразить мета-данные, то наверно лучше залезть в исходники этой утилиты.
3. pack-pbp - создает PBP-артефакт из мета-данных, сгенерированных mksfo и остальных файлов, см. описание PBP. Именно из этой утилиты растут ноги у структуры каталогов на флешке, которую указал const в статье. То есть, сформированный PBP-файл переименуется в eboot.pbp и кладется в папку, имя которой заканчивается на %. А ELF-файл тоже переименовывается в eboot.pbp и складывается в папку с таким же именем, как и предыдущая, только без последнего символа %.
Эти утилиты присутствуют в SDK и от ps2dev.org, и от этого сообщества. Единственное их отличие в том, что в SDK с ps2dev.org они работают в POSIX-среде (либо в *Nix'ах, либо в cygwin), а во втором - в Win32 и используют cygwin1.dll. const уже рассказал про SDK ps2dev.org и про его установку. Однако, лично я бы отдавал предпочтение SDK с сообщества в смысле основной код-базы. По той причине, что он более близок к официальному по своей форме. Однако, для его работы требуются заголовочные файлы от утёкшего SDK.
Padawan
> По личному мнению и по слухам, ни один из трех SDK не самодостаточен для полного счастья. Поэтому надо обязательно достать если и не все три, то уж точно вторые два.
На самом деле SDK на этом коммьюнити это реверс-инжеренинг игр с использованием Leaked Official SDK. Т.е. полностью самодостаточен для полного счастья. Если не хватает каких-то PRX-ов, то их просто надо взять из любой 1.5 игры.
Оooo, Const & Padawan, спасибо большое - это именно тот самый сжатый, необходимый минимум, который хотелось увидеть, чтобы с чего-то начать.
Как раз сейчас буду понижать прошивку до 1.5, и дальше - да здравствует Hello World :))
В продолжении темы загрузчиков. В обоих неофициальных SDK сейчас есть свои загрузчики. В SDK сообщества загрузчик лежит в public/cw/prxLoader и является немногим более функциональным чем его аналог в другом SDK, т.к. ведет протокол и занимается выгрузкой загруженных модулей. В SDK с ps2dev.org загрузчик есть в toolchain/pspsdk/src/samples/prx/prx_loader, он более прост, но называть его хоть сколько-нибудь законченным я бы не стал, об этом даже написано в комментариях.
Для сборки и успешного запуска примера из статьи const'a проще собрать загрузчик из ps2dev.org SDK, возможно придется повозиться с make-файлом и поправить в нем пути.
Теперь о сборке загрузчика из SDK сообщества. Мне объяснили как это сделать для CodeWarrior:
1. Скомпилируйте какой-нибудь из примеров, и экспортируйте настройки путей в секциях Access paths и Source Tree в отдельные xml-файлы.
2. Создайте проект devkit stationery/application/c node и импортируйте во все конфигурации эти настройки.
3. Добавьте все файлы из каталога загрузчика в проект. Возможно потребуется подправить названия некоторых #define-констант, т.е. SCE_KERNEL_LM_POS_LOW заменить на SCE_KERNEL_LM_POS_Low и т.д.
4. Поставьте в настройках конфигурации Small Data = 4.
5. Уберите из списка libraries библиотеки kernel_bridge.o и crt0, т.е. вообще все *.o файлы.
6. Закомментируйте все вызовы функций sceUmd*.
7. Попытайтесь скомпилировать.
8. Должны выпасть linker errors, типа таких:
>.sceStub.text.LoadCoreForKernel(.sceStub.text.LoadCoreForKernel) in file libkernel.a is referenced but has not been written.
9. В этом случае надо добавить в lcf-файл проекта в секцию scestub.Text такую строчку:
> * (.sceStub.text.LoadCoreForKernel)
И сделать подобное для всех остальных функций, с которыми "не согласен" компоновщик.
11. Закомментируйте внутри main.c загрузку модулей, кроме program.prx, т.к. скорее всего у вас их нет и загрузчик зависнет после запуска.
12. Отключить debug information.
Получившийся ELF-файл надо подправить, как сказано в посте №1, для этого можно посмотреть bat- или make-файл какого-нибудь из примеров. Осталось дело за малым - создать program.prx. Из CodeWarrior это делается просто - создается новый проект PRX-модуля, собирается и сразу записывается на флешкку в то место, откуда его загружает загрузчик.
neteraser
>На самом деле SDK на этом коммьюнити это реверс-инжеренинг игр с использованием Leaked Official SDK. Т.е. полностью самодостаточен для полного счастья. Если не хватает каких-то PRX-ов, то их просто надо взять из любой 1.5 игры.
А я это понимаю. И еще то, что SDK сообщества не развивается в том же темпе, что и SDK с ps2dev.org, да и цели у них отличаются. Ну ты понял что я имел ввиду под "полным счастьем" :)
У меня есть предложение - объединить то, что накидал я с тем, что написал Padawan в одну общую статью, чтобы было проще искать в будущем.
const
Без проблем. Ты же можешь редактировать статью.
Вот тот файл с форматами и более подробным описанием:
http://hitmen.c02.at/files/releases/psp/psp_doc.pdf.tar.gz
Там документ переехал на новое место: http://hitmen.c02.at/files/yapspd/psp_doc.pdf.tar.gz
Тема в архиве.
Рекомендуем производственный холдинг Mukomoloff.ru Рекомендуем производственный холдинг Mukomoloff.ru. mukomoloff.ru |