Сюда я хочу добавлять полезные ссылки на документацию к PSP, исходные коды и т.п.
Просто уже не помню, где, что записывал и делал заметки на будущее )).
Программирование для PSP
Необходимы всего две программы, портированные под Windows (их родная среда обитания - Linux) :
Dev-C++ - полнофункциональная IDE (интегрированная среда разработки) для C/C++ языков программирования. Работает в среде Windows 32x. Удобна для просмотра, редактирования, написания программ на С++. Имеет подсветку синтаксиса, разбиение и логический автоотступ кода.
Minimalist PSPSDK for Windows - порт под Win32 от BSD PSPSDK (ps2dev.org), со свободно распространяемыми библиотеками и файлами заголовков (DevPaks) для компиляции Homebrew приложений для Sony PSP. Устанавливать строго по умолчанию, путь C:\pspsdk ни на что не менять. Иначе потом во всех исходниках придётся править пути к pspsdk, а это лишние головные боли.
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
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.");
}
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...");
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...");
}
}
С++ на 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
Цитата:
Сообщение от frostegater
(Сообщение 1032970)
С++ на PSP уныл, учите Си. Рекомендую для начала http://lib.ru/CTOTOR/starterkit.txt, а потом К.Поляков - Программирование на языке Си. А тот учебник по плюсам, что за 21 день - фигня, замануха для нубов. На 3-4 параграфе они сыплются. Вон я начинал с Богатырёва и ничего постыдного в названии учебника, правда есть правда.
Где бы это тогда бы скачать.
starterkit.txt - что-то одна страница на учебник не тянет, хотя точно понятно для идиотов )))
frostegater
28.05.2012 01:00
Цитата:
Сообщение от ErikPshat
(Сообщение 1033064)
starterkit.txt - что-то одна страница на учебник не тянет, хотя точно понятно для идиотов )))
Так и есть, это не учебник, а справочник. Зато всё понятно. Хотя указатели там фигово расписали.
Цитата:
Сообщение от ErikPshat
(Сообщение 1033064)
Где бы это тогда бы скачать.
А вот Поляков: kpolyakov.narod.ru/school/c.htm. В основном направлено на школоту, но ИМХО, школоте нужен более безопасный язык для начала.