Вход

Просмотр полной версии : Полезные ссылки


ErikPshat
25.09.2009, 00:47
Сюда я хочу добавлять полезные ссылки на документацию к PSP, исходные коды и т.п.
Просто уже не помню, где, что записывал и делал заметки на будущее )).

Программирование для PSP

Необходимы всего две программы, портированные под Windows (их родная среда обитания - Linux) :

Dev-C++ (http://www.bloodshed.net/dev/index.html) - полнофункциональная IDE (интегрированная среда разработки) для C/C++ языков программирования. Работает в среде Windows 32x. Удобна для просмотра, редактирования, написания программ на С++. Имеет подсветку синтаксиса, разбиение и логический автоотступ кода.
Minimalist PSPSDK for Windows (http://sourceforge.net/projects/minpspw/) - порт под Win32 от BSD PSPSDK (ps2dev.org), со свободно распространяемыми библиотеками и файлами заголовков (DevPaks) для компиляции Homebrew приложений для Sony PSP. Устанавливать строго по умолчанию, путь C:\pspsdk ни на что не менять. Иначе потом во всех исходниках придётся править пути к pspsdk, а это лишние головные боли.


Литература для начинающих:

Руководство полного идиота
по программированию на языке Си (Андрей Богатырев) (http://lib.ru/CTOTOR/starterkit.txt)
Язык программирования Си (Константин Поляков) (http://kpolyakov.narod.ru/school/c.htm)
С++ за 21 день (Джесс Либерти) (http://narod.ru/disk/13531889000/С%2B%2B%20за%2021%20день%20(Джесс%20Либерти).zip.html) - рекомендуется к прочтению
Первые шаги (http://foosa.do.am/forum/12-43-1) от Andy_maN
Дополнительная литература по С++ (http://www.pspx.ru/forum/showthread.php?t=86934)


===========================================

yet another PlayStationPortable Documentation (http://hitmen.c02.at/files/yapspd/psp_doc/frames.html)
IPL Decrypt Sample (direct HW access) (http://my.malloc.us/silverspring/2007/10/ipl-decrypt-sample-direct-hw-access/)
Decrypting IPL (http://forums.ps2dev.org/viewtopic.php?t=3573)
pspsdk-1.0+beta2 (http://sceners.org/pspsdkdocs/)
Psp Browser API Project 2.0 (http://pspdev.ofcode.com/api2.0/index.php)
PSP Button codes (http://cwcheat.consoleworld.org/wiki/doku.php?id=english:code:button_codes)
SPIM - A MIPS32 Simulator (http://pages.cs.wisc.edu/~larus/spim.html)
PSP PRX Libraries Documentation Project (http://silverspring.lan.st/)

PSP Primal Tools I - NIDattack (http://sceners.org/blog/?itemid=11&catid=4)
PSP Primal Tools II - PSARdumper (http://sceners.org/blog/?itemid=17&catid=4)
PSP Primal Tools III - PRXdecrypter & PSPident (http://sceners.org/blog/?itemid=26&catid=4)
PSP Primal Tools IV - PRXtool (http://sceners.org/blog/?itemid=34&catid=4)
Документация PSX (http://psxdevru.sourceforge.net/ru/docs.htm)
PSP Репозиторий (http://svn.pspdev.org/)
Заголовок ~PSP (http://forums.ps2dev.org/viewtopic.php?p=57770#57770)
Prx Decryption NID’s (http://my.malloc.us/silverspring/2009/01/prx-decryption-nids/)

PSP Code Clips I - Makefiles (http://sceners.org/blog/?itemid=36&catid=4)
PSP Code Clips II - IdStorage (http://sceners.org/blog/?itemid=46&catid=4)
PSP Code Clips III - IdStorage II (http://sceners.org/blog/?itemid=62&catid=4)
PSP Code Clips IV - Hello, World! (http://sceners.org/blog/?itemid=69&catid=4)
PSP Code Clips V - IPL Facts (http://sceners.org/blog/?itemid=80&catid=4)
PSP Code Clips VI - PRX Sample (http://sceners.org/blog/?itemid=93&catid=4)

Free PSP Downloads (http://www.psp-hacks.com/psp-downloads.php)
Ubuntu 9.04 VMWare Image with PSPSDK (http://sceners.org/blog/?itemid=52&catid=4)

Номер | |
регистра | мнемоника | описание

r0 zr zero. Значение этого регистра всегда равно нулю
r1 at asm temp. Темповый регистр. Часто используется в указателях.
r2-r3 v0-v1 result values. Используются, как выходные значения функций.
r4-r7 a0-a3 argument values. Используются, как входные значения функций.
r8-r15 t0-t7 temp. Темповые регистры (для "мусора" промежуточных операций)
r16-r23 s0-s7 save. Сохраняются функциями в стеке, при их (функций) вызове.
r24-r25 t8-t9 temp. Еще одни темповые регистры, в дополнение к t0-t7.
r26-r27 k0-k1 kernel. Регистры, предназначенные для внутреннего использования ядром PSX-OS.
r28 gp global pointer. Глобальный указатель. Используется ядром.
r29 sp stack pointer. Указатель стека. Используется при сохранении регистров в стеке.
r30 fp frame pointer. Еще один указатель. Используется очень редко.
r31 ra return address. Содержит адрес возврата, после вызова функции.

По другому:


Название Номер Применение нужно ли резервировать?

$zero $0 всегда хранит 0 N/A
$at $1 временный регистр для языка ассемблера НЕТ
$v0—$v1 $2-$3 значения функций и выражений НЕТ
$a0—$a3 $4-$7 аргументы функций НЕТ
$t0—$t7 $8-$15 временные НЕТ
$s0—$s7 $16-$23 сохраненные временные значения ДА
$t8—$t9 $24-$25 временные НЕТ
$k0—$k1 $26-$27 зарезервирована для ядра ОС НЕТ
$gp $28 глобальный указатель ДА
$sp $29 указатель стека ДА
$fp $30 указатель фрейма ДА
$ra $31 возвращает адрес N/A


Интересный сайт про программирование (http://fipu.ucoz.ru/publ/2)
HexRays – декомпилятор нового поколения: превращаем любой бинарник в C-код (http://www.xakep.ru/post/42769/default.asp)
Повелители PlayStation Portable (http://www.xakep.ru/post/43191/default.asp)
Домашняя страничка FreePlay с интересными утилитами (http://freeplay.halfmoon.ws/pspdev/)
PSP Secrets (http://www.edepot.com/reviews_sony_psp.html)

KingSD
25.09.2009, 07:53
ErikPshat, спасибо))) очень полезная тема))

Dovovoy
25.09.2009, 16:52
...

спасибо.
---------------
:dwarf:Real vikings never die - they just go to Hell for regroup

ErikPshat
09.02.2010, 10:44
Очень похоже на исходники CFW Enabler v1

Le code source du CFE publiй par Davee sur M4mature




/*
ohai nubcakes
*/

#include
#include

#include "rebootex.h"

PSP_MODULE_INFO("HENControl_module", 0x1000, 0, 1);

#define MAKE_CALL(a, f) _sw(0x0C000000 | (((u32)(f) >> 2) & 0x03ffffff), a)

int (* DecompressReboot)(u32 addr, u32 size, void *unk, void *unk2, void *unk3) = NULL;

void ClearCaches()
{
sceKernelIcacheInvalidateAll();
sceKernelDcacheWritebackInvalidateAll();
}

int DecompressRebootPatched(u32 addr, u32 size, void *unk, void *unk2, void *unk3)
{
sceKernelGzipDecompress((void *)0x88FC0000, size_rebootex, rebootex, NULL);
return DecompressReboot(addr, size, unk, unk2, unk3);
}

int PatchLoadExec()
{
SceModule *mod = sceKernelFindModuleByName("sceLoadExec");
u32 text_addr = mod->text_addr;

MAKE_CALL(text_addr + 0x27DC, DecompressRebootPatched);
_sw(0x3C0188FC, text_addr + 0x2820);

DecompressReboot = (void *)text_addr;
ClearCaches();
}

int module_start(SceSize args, void *argp)
{
PatchLoadExec();
return 0;
}


******************************************************************************** *******


/*
Eboot.pbp
Relative pseudo C
*/

int Exit(char *message)
{
printf("%s", message); //genius work, really
sceKernelDelayThread(0x3D0900);
sceKernelExitGame();
}

int WriteFile(const char *file, void *buffer, SceSize size) //Awesome error handling ;)
{
SceUID fd = sceIoOpen(file, PSP_O_CREAT | PSP_O_TRUNC | PSP_O_WRONLY, 511);
int ret = sceIoWrite(fd, buffer, size);

sceIoClose(fd);
return ret;
}

void FlashFiles() //bet you had fun writing this ;)
{
if (WriteFile("flash0:/kd/vshctrl.prx", vshctrl, size_vshctrl) != size_vshctrl)
{
Exit("Error writting vshctrl.");
}

if (WriteFile("flash0:/kd/galaxy.prx", galaxy, size_galaxy) != size_galaxy)
{
Exit("Error writting galaxy.");
}

if (WriteFile("flash0:/kd/march33.prx", march33, size_march33) != size_march33)
{
Exit("Error writting march33.");
}

if (WriteFile("flash0:/kd/popcorn.prx", popcorn, size_popcorn) != size_popcorn)
{
Exit("Error writting popcorn.");
}

if (WriteFile("flash0:/kd/idcanager.prx", idcanager, size_idcanager) != size_idcanager)
{
Exit("Error writting idcanager.");
}

if (WriteFile("flash0:/kd/usbdevice.prx", usbdevice, size_usbdevice) != size_usbdevice)
{
Exit("Error writting usbdevice.");
}

if (WriteFile("flash0:/vsh/module/satelite.prx", satelite, size_satelite) != size_satelite)
{
Exit("Error writting satelite.");
}

if (WriteFile("flash0:/kd/systemctrl_02g.prx", systemctrl_02g, size_systemctrl_02g) != size_systemctrl_02g)
{
Exit("Error writting systemctrl.");
}

if (WriteFile("flash0:/kd/pspbtlnf_02g.bin", pspbtlnf_02g, size_pspbtlnf_02g) != size_pspbtlnf_02g)
{
Exit("Error writting pspbtlnf.");
}

if (WriteFile("flash0:/kd/pspbtlnf_02g.bin", pspbtdnf_02g, size_pspbtdnf_02g) != size_pspbtdnf_02g)
{
Exit("Error writting pspbtdnf.");
}

if (WriteFile("flash0:/kd/pspbtjnf_02g.bin", pspbtjnf_02g, size_pspbtjnf_02g) != size_pspbtjnf_02g)
{
Exit("Error writting pspbtjnf.");
}

if (WriteFile("flash0:/kd/pspbtknf_02g.bin", pspbtknf_02g, size_pspbtknf_02g) != size_pspbtknf_02g)
{
Exit("Error writting pspbtknf.");
}
}

int main() //why store strings in vars?
{
SceIoStat stat;
SceCtrlData pad;

int model; //initalize?
pspDebugScreenInit();

printf("Hen de los huevos, como falla el cabron. Custom Firmware Enabler 1.0\nBy Xenogears and Becus25\n\n");
printf("Press O to flash M33 custom firmware files into the flash.\nPress X to run the custom firmware.\nPress R to exit.\n");

while (1)
{
sceCtrlReadBufferPositive(&pad, 1);

if (pad.Buttons & PSP_CTRL_CROSS)
{
pspDebugScreenClear();
printf("\nLoading henctrl.prx...");

SceUID modid = sceKernelLoadModule("henctrl.prx", 0, NULL);

if (modid < 0)
{
Exit(" Error loading henctrl.prx");
}

printf("\nStarting henctrl.prx...");
sceKernelStartModule(modid, strlen("henctrl.prx") + 1, "henctrl.prx", NULL, NULL, NULL);

printf("Wait 5 seconds...")'
sceKernelDelayThread(0x4C4B40);
sceKernelExitGame();
}

else if (pad.Buttons & PSP_CTRL_CIRCLE)
{
if (sceIoUnassign("flash0:") < 0)
{
Exit("Error unassigning flash0:");
}

if (sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", IOASSIGN_RDWR, NULL, 0) < 0)
{
Exit("Error assigning flash0:");
}

if (!sceIoGetstat("flash0:/kd/loadexec_01g.prx", &stat)) //hello? sceKernelGetModel? >.>
model = 0;

if ((ret = sceIoGetstat("flash0:/kd/loadexec_02g.prx", &stat)) < 0 && model != ret) //model isn't even predefined...
{
Exit("Your PSP is not 2000. Exiting...");
}
else
model = 1;

printf("\nFlashing...");
FlashFiles();

printf("Done.\n\nPress X to run the custom firmware.");
}

else if (pad.Buttons & PSP_CTRL_RTRIGGER)
{
Exit("Exiting...");
}
}

return 0; //nice program flow controlИсточник (http://dls2.pspgen.com/C/code-source-cfe-publie-par-davee-m4mature_1243556351.txt)

ErikPshat
19.02.2010, 07:44
well to start there are 22 colors in 13-27!

so you can do

copy /b 01-12_3g.bmp+13-27.bmp 01-12.bmp

now you have 34 images in your 01-12.bmp

now edit vshmain.prx (not the .bin file) and go to offset 273AC and change 12 to 34 and also 273B4 change 12 to 34.

DO NOT change the files on flash0,you will need to do this in a ctf.

Источник (http://endlessparadigm.com/forum/showthread.php?tid=19482&pid=254771#pid254771)

ErikPshat
02.04.2010, 00:52
Digital Comics Reader из PSN: http://book.dl.playstation.net/book/psp/NPEG00012/EBOOT.PBP

frostegater
27.05.2012, 16:07
С++ за 21 день (Джесс Либерти) (http://narod.ru/disk/13531889000/С%2B%2B%20за%2021%20день%20(Джесс%20Либерти).zip.html) - рекомендуется к прочтению
Первые шаги (http://foosa.do.am/forum/12-43-1) от Andy_maN
Дополнительная литература по С++ (http://www.pspx.ru/forum/showthread.php?t=86934)


С++ на PSP уныл, учите Си. Рекомендую для начала http://lib.ru/CTOTOR/starterkit.txt, а потом К.Поляков - Программирование на языке Си. А тот учебник по плюсам, что за 21 день - фигня, замануха для нубов. На 3-4 параграфе они сыплются. Вон я начинал с Богатырёва и ничего постыдного в названии учебника, правда есть правда.

Yoti
27.05.2012, 17:48
Только Керниган и Ричи!

frostegater
27.05.2012, 18:07
Yoti, для начинающих слишком чёрство будет. И K&R пропагандируют египетский стиль, меня тошнить начинает) Лучше перепишу 3км кода, чем буду разбирать такой)

Yoti
27.05.2012, 20:35
frostegater,
анархист, штоле - против системы идти?

ErikPshat
27.05.2012, 22:20
С++ на PSP уныл, учите Си. Рекомендую для начала http://lib.ru/CTOTOR/starterkit.txt, а потом К.Поляков - Программирование на языке Си. А тот учебник по плюсам, что за 21 день - фигня, замануха для нубов. На 3-4 параграфе они сыплются. Вон я начинал с Богатырёва и ничего постыдного в названии учебника, правда есть правда.
Где бы это тогда бы скачать.
starterkit.txt - что-то одна страница на учебник не тянет, хотя точно понятно для идиотов )))

frostegater
28.05.2012, 01:00
starterkit.txt - что-то одна страница на учебник не тянет, хотя точно понятно для идиотов )))

Так и есть, это не учебник, а справочник. Зато всё понятно. Хотя указатели там фигово расписали.


Где бы это тогда бы скачать.
А вот Поляков: kpolyakov.narod.ru/school/c.htm. В основном направлено на школоту, но ИМХО, школоте нужен более безопасный язык для начала.

ErikPshat
15.05.2013, 06:13
devkitPro (http://sourceforge.net/projects/devkitpro/) внутри есть devkitPSP (http://sourceforge.net/projects/devkitpro/files/devkitPSP/)