PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   Полезные ссылки (https://www.pspx.ru/forum/showthread.php?t=83733)

ErikPshat 25.09.2009 00:47

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

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

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

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

yet another PlayStationPortable Documentation
IPL Decrypt Sample (direct HW access)
Decrypting IPL
pspsdk-1.0+beta2
Psp Browser API Project 2.0
PSP Button codes
SPIM - A MIPS32 Simulator
PSP PRX Libraries Documentation Project

PSP Primal Tools I - NIDattack
PSP Primal Tools II - PSARdumper
PSP Primal Tools III - PRXdecrypter & PSPident
PSP Primal Tools IV - PRXtool
Документация PSX
PSP Репозиторий
Заголовок ~PSP
Prx Decryption NID’s

PSP Code Clips I - Makefiles
PSP Code Clips II - IdStorage
PSP Code Clips III - IdStorage II
PSP Code Clips IV - Hello, World!
PSP Code Clips V - IPL Facts
PSP Code Clips VI - PRX Sample

Free PSP Downloads
Ubuntu 9.04 VMWare Image with 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

Интересный сайт про программирование
HexRays – декомпилятор нового поколения: превращаем любой бинарник в C-код
Повелители PlayStation Portable
Домашняя страничка FreePlay с интересными утилитами
PSP Secrets

KingSD 25.09.2009 07:53

ErikPshat, спасибо))) очень полезная тема))

Dovovoy 25.09.2009 16:52

Цитата:

Сообщение от ErikPshat (Сообщение 824351)
...

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

ErikPshat 09.02.2010 10:44

Очень похоже на исходники CFW Enabler v1

Source
Код:

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

Источник

ErikPshat 19.02.2010 07:44

Цитата:

Сообщение от SchmilK
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.

Источник

ErikPshat 02.04.2010 00:52

Digital Comics Reader из PSN: http://book.dl.playstation.net/book/...0012/EBOOT.PBP

frostegater 27.05.2012 16:07

Цитата:

Сообщение от ErikPshat (Сообщение 824351)

С++ на 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. В основном направлено на школоту, но ИМХО, школоте нужен более безопасный язык для начала.

ErikPshat 15.05.2013 06:13

devkitPro внутри есть devkitPSP


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

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