PSPx форум

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

Puella 06.08.2007 20:03

Цитата:

Сообщение от l3VGV (Сообщение 488556)
это в виндах у вас чевота нехватает :)

как просто все всегда свалить на винду :) а винда лицензионная-то, самая полная :Р

Цитата:

Сообщение от pspowner (Сообщение 488570)
Если брали из 1ого поста, то там ещё папка Language нужна

эх, уже приноровила Eclipse, но всеравно спасибо :)

pspowner 21.10.2007 11:52

Quick Start
 
Довольно много вопросов о том как и с чего начать программирование для PSP, вот решил написать
некое подобие Quick Start.


Итак, что нам понадобится

1) PSPSDK в сборке wSlava - http://elmortem.mirgames.ru/?link=18
(из архива всё распаковать, желательно в корень диска, если вы не знаете что такое "корень диска",
то советую дальше не читать, а записаться на какие-нибудь компьютерные курсы).
2) PSPxIDE от wSlava - http://pspx.ru/ide/PSPXIDEv_2_1_5.zip
http://ifolder.ru/1601332
(Качаем версию 2.1.5. и также распаковываем в корень диска, затем качаем по второй ссылке
обновление 2.1.6 и распаковываем в папку PSPxIDE, это заменит ехешник на более свежий)
Вот, собственно и всё. =) Запускаем IDE.

Идём в пункт меню Проект->Опции. Внимание, здесь вы должны в поле "Директория PSPDev" указать
куда вы распаковали PSPSDK, т.е. если как я и советывал вы распаковали его в корень диска, то путь будет
выглядеть примерно так - C:\pspdev

Поставьте галку у пункта "Параметры по умолчанию" и давите ОК.

Ну вот и всё готово. Просто, не правда ли? Однако, для того чтобы проверить всё ли мы сделали правильно,
мы попробуем откомпилировать один из примеров входящих в PSPSDK. Итак, идём в пункт меню Файл->Открыть
Идём в папку "c:\pspdev\psp\sdk\samples" (Именно там вы найдёте некоторые примеры программ для ПСП).
Входим в папку "controller\basic" и открываем файлик "main.c".

Сейчас мы не будем разбирать все строчки кода появившегося на экране. Эта программа написана
полностью правильно, так что для проверки работы нам надо просто её откомпилировать.

Идём в пункт "Проект->Компиляция". Если мы всё сделали правильно, то увидим в окошке вывода -

Код:

******************************************
Компиляция/Построение.
******************************************
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

>set PSPDEV=C:/pspdev

>set PATH=%PSPDEV%/bin;%PATH%

>C:\pspdev\bin\make.exe kxploit  2>>deberr.tmp
psp-gcc -I. -IC:/pspdev/psp/sdk/include -g -G0 -Wall -O0  -c -o main.o main.c
psp-gcc -I. -IC:/pspdev/psp/sdk/include -g -G0 -Wall -O0  -L. -LC:/pspdev/psp/sdk/lib  main.o  -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o controller_basic.elf
psp-fixup-imports controller_basic.elf
mkdir2 -p "controller_basic"
psp-strip controller_basic.elf -o controller_basic/EBOOT.PBP
mkdir2 -p "controller_basic%"
pack-pbp "controller_basic%/EBOOT.PBP" PARAM.SFO NULL  \
        NULL NULL NULL  \
        NULL NULL NULL

>echo 1 > OK.tmp"

>
******************************************
Компиляция завершена успешно !
Время компиляции: 0:00:01

Далее, идём в папку "c:\pspdev\psp\sdk\samples\controller\basic" и видим там 2 папки -

controller_basic
controller_basic%

Копируем их на мемори стик в папку psp/game150 и запускаем.
Наслаждаемся нашим первым откомпиленным хоумбрю.

Программа была откомпилена для ядра 1.50 с использованием kxploit.

TO BE CONTINUE...

pspowner 21.10.2007 13:43

Hello, World!
 
Первая программа =)

Ну прежде чем заняться непосредственно созданием прог, я советую завести папку pspdev\Projects\
где вы будете хранить всё своё хозяйство =)

Писать мы будем конечно же, следуя традиции, программу "Hello, world!".

Итак, создали папку с проектами (pspdev\Projects\), создаём там папку "HW",
запускаем PSPxIDE.

Для начала идём в пункт "Файл->Новый" и получаем чистый лист. Сохраним его (Файл->Сохранить как...).
Выбираем нашу папку для программы (pspdev\Projects\HW) Имя файла вбиваем "main"(именно так и никак иначе)
и давим кнопку сохранить.

Далее идём в пункт "Проект->Мастер Makefile" и приводим появившуюся формочку к следующему виду -

[IMG]http://img81.**************/img81/2580/21914180ti4.jpg[/IMG]

Давайте пока не будем разбирать что там и как, просто сделайте как на картинке и всё. =)
Сделали? Давите "ОК".

Ну всё =) Начинаем писать собственно программу.

Код:

#include <pspkernel.h>
#include <pspdebug.h>

Это два необходимых нам хедера, копипастим этот код :D в свою программу.
pspkernel.h - очень нужный хедер, без него вобще ничего работать не будет.
pspdebug.h - хедер для вывода на экран отладочной инфы, именно его методы будем использовать для
вывода на экран.

Код:

PSP_MODULE_INFO("HW", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);

Это тоже вписываем в программу и не задумываемся =) Последние две цифры модульинфы - версия вашей проги, второй аргумент указывает
что прога грузится в юзермод. Вторая строчка по сути дублирует первую, но туда ещё можно вписать и другие параметры, но мы их не рассматриваем здесь.

Код:

#define printf    pspDebugScreenPrintf
Для вывода текста на экран PSP мы будем использовать функцию pspDebugScreenPrintf из хедера pspdebug.h,
однако, название это слишком длинное, и для удобства набора, а также чтобы выглядело по привычней,
переопределим её как printf. Вписываем в программу.

Код:

int exit_callback(int arg1, int arg2, void *common)
{
    sceKernelExitGame();

    return 0;
}

int CallbackThread(SceSize args, void *argp)
{
    int cbid;

    cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
    sceKernelRegisterExitCallback(cbid);

    sceKernelSleepThreadCB();

    return 0;
}

int SetupCallbacks(void)
{
    int thid = 0;

    thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
    if(thid >= 0)
    {
        sceKernelStartThread(thid, 0, 0);
    }

    return thid;
}

Данный кусок кода мы тоже незадумываясь копипастим в нашу программу. Это обработчик колбеков,
которые нужны для правильной отработки выхода по кнопочке "HOME", а также чтобы прога правильно
прибила все свои хвосты, если вдруг пользователь вздумает выключать PSP с нашей работающей программой.


Код:

int main(void)
{

    SetupCallbacks(); //Установить колбеки
    pspDebugScreenInit(); //Проинициализировать экран для вывода текста

А вот собственно наш код. Функция main получит управление сразу после старта программы.
Переносим.

Код:

    printf ("Hello, World!\n");      //Собственно, строчка выводящая наше "Здравствуй, мир" =)
    sceKernelDelayThread (1000*1000); //Делаем 10 паузу чтобы можно было насладиться плодами наших трудов =)
        sceKernelExitGame();        //Завершаем работу программы.
    return 0;              //Ну это так, для порядку =)
}

Тоже переносим в текст программы. Ну вот и всё, наша программа "Здравствуй, Мир!" готова. Сохраняем
её. и идём в "Проект->Компиляция".

В "pspdev\Projects\HW" обнаруживаем две папки - Hello_world и Hello_world%, копируем из на
мемори стик в psp/game150, запускаем и наслаждаемся =)

Вот так. Даю несколько полезных ссылок для дальнейшиз изысканий.

pspdev\psp\sdk\samples - Не забывайте что здесь находится ряд примеров.
pspdev\psp\sdk\doc\html - Справочник.
Онлайн версия справочника доступна зесь - http://psp.jim.sh/pspsdk-doc/modules.html
В частности по pspdebug - http://psp.jim.sh/pspsdk-doc/group__Debug.html

Если с Си/Си++ совсем плохо, сходите в лавку с компьютерной литературой и купите какой-нибудь
худо бедно учебник(типа для начинающих), или погуглите на предмет подобной литературы.
Вот что нашёл почти сразу - http://www.lib.ru/CTOTOR/

Удачи :)

(C) pspowner for pspx.ru

Возможно, TO BE CONTINUE...

SееD 23.10.2007 14:32

а можно также кратенько и доступно, но про кернел 3хх. просто писать под 1,50 уже смысла нет.

l3VGV 23.10.2007 14:45

и новый сдк скомпиленый :)

Lord_Maloy 23.10.2007 19:32

Сразу хочу извиниться за оффтоп...
У меня возникла проблем, прошу помощи. Только не надо советовать читать мануал и давать прочие не относящиеся к делу советы.
Проблема такова, при попытке скомпилировать любой проект у меня возникает ошибка следующего характера:
http://nages.rxfly.net/files/pictures/er.jpg
Перепробовал всё что мог. Помогите. Заранее спасибо.

pspowner 23.10.2007 20:17

Так, есть подозрение что у тебя левый cygwin1.dll. Потому что качал девкит другой сборки? Или у тебя ещё 1 есть?

pspowner 23.10.2007 20:31

И ваще как и чего... по какому мануалу делалось то?

Lord_Maloy 23.10.2007 20:37

Цитата:

Сообщение от pspowner (Сообщение 547303)
Так, есть подозрение что у тебя левый cygwin1.dll. Потому что качал девкит другой сборки? Или у тебя ещё 1 есть?

В общем с самого начала я делал сборку сам. То есть скачал отдельно PSPDev который идёт с инсталятором, установил его. Затем распаковал архив с PSPxIDE и сделал всё по инструкции. Тогда у меня ничего не запустилось, да и как то не было времени разьираться.
Сейчас, прочитав последние сообщения скачал Вашу подборку т.е. уже подготовленный PSPDev и PSPxIDE 2.1.6. Всё установил, всё раскидал. В папке Windows проверил файлик "гугвин". его там как и должно не оказалось. Но вот при попытке запука компилятора вылазит сообщение... Чего я только уже не перепробовал...
Сечас вот на пареллельной ОСи запустить попробую.

В общем в ходе опытов, выяснилось что проблема именно в компе. Попробовал запускать не на ноутбуке, а на домашней банке, выслушал пару матов, но проект скомпилировать тем не менее смог...
Если вдруг кто-то узнает в чем состоит проблема, скажите плиз.

pspowner 23.10.2007 21:04

Цитата:

Сообщение от Lord_Maloy (Сообщение 547318)
В общем с самого начала я делал сборку сам. То есть скачал отдельно PSPDev который идёт с инсталятором, установил его. Затем распаковал архив с PSPxIDE и сделал всё по инструкции. Тогда у меня ничего не запустилось, да и как то не было времени разьираться.

Сейчас, прочитав последние сообщения скачал Вашу подборку т.е. уже подготовленный PSPDev и PSPxIDE 2.1.6. Всё установил, всё раскидал. В папке Windows проверил файлик "гугвин". его там как и должно не оказалось. Но вот при попытке запука компилятора вылазит сообщение... Чего я только уже не перепробовал...
Сечас вот на пареллельной ОСи запустить попробую.

В общем в ходе опытов, выяснилось что проблема именно в компе. Попробовал запускать не на ноутбуке, а на домашней банке, выслушал пару матов, но проект скомпилировать тем не менее смог...
Если вдруг кто-то узнает в чем состоит проблема, скажите плиз.

Очень странно, вот по тем сборкам которые указал, я устанавливал 3 раза - два раза дома и один раз на работе. Всё пашет на ура... матов не наблюдаю.

Сам Cygwin я ни разу не ставил, возможно дело в этом...

ALgraFx 23.10.2007 22:09

Lord_Maloy
у меня такая=же проблема была pspowner прав - дело 100% в версии Cygwin - найди все cygwin1.dll и удали их кроме того что в ...\pspdev\bin лежит (у меня например проблема была в том что использовалась cygwin1.dll от psp video converter)

добавлено через 12 минут
Lord_Maloy

И еще ты точно переменные среды настроил?

zaero 24.10.2007 02:02

Нужна сборка под слим. Пожалуйста выложите. А то пользоваться Eboot loader'ом надоело))

Lord_Maloy 24.10.2007 04:57

[quote=ALgraFx;547383]Lord_Maloy
у меня такая=же проблема была pspowner прав - дело 100% в версии Cygwin - найди все cygwin1.dll и удали их кроме того что в ...\pspdev\bin лежит (у меня например проблема была в том что использовалась cygwin1.dll от psp video converter)[quote]
Спасибо, в общем подумал тут. Где обычно Windows смотрит свои dll, и вот оно... C:\Windows\System32, удалил оттуда гугвин и всё стало ОК.
Спасибо всем.:thank_you:

easy_net 24.10.2007 15:26

Подскажите ка сделать сой загрузочный EBOOT.PBP со воей картинкой и названиием?

pspowner 24.10.2007 15:35

Что значит "загрузочный EBOOT.PBP"?

Если речь о PSPxIDE, то в пункте Проект->Мастер Makefile надо написать "Название в XMB". Далее, в пункте Проект->XMB Media включить картинки на заставку/фон и музыку.

Ещё проще воспользоваться программой PSPBrew.

easy_net 24.10.2007 17:08

Спасибо за поощь все получилось.

zurt 25.10.2007 14:17

попробовал сделать, как описано - все нормально компилится, но возникла проблема на 8гигстике - не запускается хоумбрюшка, черный экран, после вкл-выкл идет перезагрузка, причем и с другими хоумками такая беда, единственное идет PSPWrite. А на 4 гиг все нормально. У меня 3.40ОЕ.

SееD 26.10.2007 11:29

у хомок под 1,50 проблемы с запуском на 8Гб карте. обновись до 371М33 (хотя может и так сойдет) и пользуйся хомками для ядра 3хх.

надеюсь, кто Оунер таки объяснит как их делать :)

pspowner 26.10.2007 12:43

Ну хорошо, спрашивали - отвечаем =)

Итак, прошивки 3.ХХ требуют чтобы ваше хомбрю было в формате .prx

Что надо сделать -

Во-первых редактируем Makefile - хотите блокнотом/ворпадом, хотите через PSPxIDE пункт Проект->Мастер Makefile->Закладка
Advanced. Туда вписываем перед "include $(PSPSDK)/lib/build.mak" -

Код:

BUILD_PRX = 1
PSP_FW_VERSION = 371

Если у вас в Makefile уже есть строчка "BUILD_PRX = 0" - можете использовать её, заменив 0 на 1 =)

Во-вторых - Ваше хоумбрю должно работать в user - режиме. Для этого в тексте программы, в самом её начале,
приводим модульинфо к следующему виду(второй аргумент должен быть 0) -

Цитата:

PSP_MODULE_INFO("Homko", 0, 1, 0);
Также, сразу после модульинфо прописываем доступный размер памяти(будет доступен через malloc), а то по умолчанию нам памяти
маловато будет =) 20 метров в самый раз думаю =)

Цитата:

PSP_HEAP_SIZE_KB(20480);
Ну вот собстна и всё. Компилим мейком или через PSPxIDE, кстати PSPxIDE компилит всё с использованием параметра kxploit,
однако в данном случае kxploit компилятором будет проигнорирован. Компилим, копируем получившийся eboot.pbp на стик,
запускаем и радуемся.


Вот. К сожалению нет ща под рукой ПСП чтобы проверить, а до этого я не компилил по 3.ХХ.
Проверю вечером, если что поправлю. Но в теории всё должно быть именно так.

Если кому интересно, то вот тема на ps2dev.org

*UPDATE по компиляции хомок для 3ХХ

Идём в папку pspdev/psp/sdk/lib
Находим там файлег build.mak, открываем его, смотрим в самом низу -

$(PACK_PBP) EBOOT.PBP $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_UNKPNG) $(PSP_EBOOT_PIC1) \
$(PSP_EBOOT_SND0) strip_$(FINAL_TARGET) $(PSP_EBOOT_PSAR)

Приставку strip_ перед $(FINAL_TARGET) удаляем и сохраняем файл.

Вот теперь ебуты будут собираться правильно, если этого не сделать, то полученные хомки будут вываливаться в XMB с формулировкой Unsupported prx type.

SееD 26.10.2007 12:57

то есть кернел режим недоступен? только юзер? это получается что, например, во флэш0 не залезешь?

pspowner 26.10.2007 13:08

Только в ядре 1.50 можно грузить прогу напрямую в Кернел-мод.

На 3.ХХ, если надо чо из кернела - нада подгружать внешнюю либу. Т.е. не напрямую.

CHERTS 26.10.2007 14:11

Уважаемые! А подскажите как можно из программки проиграть flash-ролик? есть ли какие нибудь наработки на сях по этому делу?
А так же есть ли у кого исходники по воспроизведению MP3 на PSP

Заранее спасибо!

l3VGV 26.10.2007 14:42

мр3 есть. флеша не видел. если мр3 надо то в приват давай.

pspowner 26.10.2007 15:12

Ну хорошо, дабы подвести черту. Рассказываю как юзать кернел-мод в 3.ХХ хомках. По крайней мере как я это понял читая ps2dev.org

Фактически, на нужно сделать 2 проги.

1) Kernel mode PRX - обычная библиотека, она будет вызываться из нашей главной программы.
2) EBOOT.PBP - по сути простой PRX лоадер, загружающийся в USER-режиме.


Также, как это сделано на ps2dev разбираем на прмере Nand-дампера.

Делаем библиотеку.

main.c

Код:

#include <pspsdk.h>
#include <pspkernel.h>
#include <pspnand_driver.h>
#include <string.h>

PSP_MODULE_INFO("NandDumper", 0x1006, 1, 1);
PSP_MAIN_THREAD_ATTR(0);

int nandLocked = 0;

void LockNand()
{
  if (!nandLocked)
      sceNandLock(0);
 
  nandLocked = 1;
}


void UnlockNand()
{
  if (nandLocked)
      sceNandUnlock();

  nandLocked = 0;
}

int ReadBlock(u32 page, u8 *buffer)
{
  u32 i, j;
  u32 k1;

  k1 = pspSdkSetK1(0);

  LockNand();

  if (sceNandIsBadBlock(page))
  {
      memset(buffer, 0xFF, 528);
      UnlockNand();
      pspSdkSetK1(k1);     
      return -1;
  }

  for (i = 0; i < 32; i++)
  {
      for (j = 0; j < 4; j++)
      {
        sceNandReadPagesRawAll(page, buffer, NULL, 1);
        sceNandReadExtraOnly(page, buffer+512, 1);
      }

      page++;
      buffer += 528;
  }

  UnlockNand();
  pspSdkSetK1(k1);

  return 0;
}


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

int module_stop()
{
  return 0;
}

В заголовке обращаем внимание на -

Код:

PSP_MODULE_INFO("NandDumper", 0x1006, 1, 1);
PSP_MAIN_THREAD_ATTR(0);

0x1006 - Kernel mode prx
1,1 - версия нашей библиотеке (пофиг какая)

Также обратите внимание, что у нашей библиотеки есть функции module_start() и module_stop()
- они обязательны для внешних библиотек. Также важно, что в нашей библиотеке нету точки входа main().
pspSdkSetK1() - устанавливаем в 0, чтобы не дать Кернелу упасть при обращении к областям памяти юзер-режима..

Makefile делаем следущим образом -

Код:

TARGET = nanddumper
OBJS = main.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

BUILD_PRX = 1
PRX_EXPORTS = nanddumper.exp

USE_KERNEL_LIBC=1
USE_KERNEL_LIBS=1

LIBDIR =
LDFLAGS = -mno-crt0 -nostartfiles
LIBS = -lpspnand_driver2


PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Обращаем внимание на "no-crt0" и "nostartfiles". Так делается по той причине, что у нас не программа,
а просто библиотека и все это нам не надо. Также обращаем внимание на подключаемые библиотеки.
Да, и у нас появляется строчка "PRX_EXPORTS = nanddumper.exp" - в этом файлике указаны функции нашей библиотеки,
функции которые будут видимы после её загрузки.


nanddumper.exp -
Код:

# Define the exports for the prx
PSP_BEGIN_EXPORTS

# These four lines are mandatory (although you can add other functions like module_stop)
# syslib is a psynonym for the single mandatory export.
PSP_EXPORT_START(syslib, 0, 0x8000)
PSP_EXPORT_FUNC_HASH(module_start)
PSP_EXPORT_VAR_HASH(module_info)
PSP_EXPORT_END

PSP_EXPORT_START(NandDumper, 0, 0x4001)
PSP_EXPORT_FUNC(ReadBlock)
PSP_EXPORT_END

PSP_END_EXPORTS

Усё должно быть в этом файле именно так, за исключением строчек "PSP_EXPORT_FUNC()" -
именно этими строчками вы указываете ваши функции экспортируемые из вашей библиотеки.
Да, и не забываем что строчка "PSP_EXPORT_START(NandDumper, 0, 0x4001)" должна соответствовать тому,
что вы написали в модульинфе в файле main.c.

Значит этот файлег "nanddumper.exp" нам нужен для того, чтобы сгенерить .S файл, который в свою очередь
юзается нашей прогой для доступа к экспортированным функциям. Чтобы сгенерить S файл идём в Пуск->выполнить
вбиваем "cmd", заходим в папку с установленным PSPSDK и выполняем команду-

Код:

psp-build-exports -s nanddumper.exp
Не забываем, что перед этим нам надо установить правильное окружение(запустить файл pspdev.bat)
Т.е. вся процедура отображена здесь -

[IMG]http://img521.**************/img521/8778/54330844wh4.jpg[/IMG]

Получившийся .S - файл будет выглядеть примерно так -

Код:

    .set noreorder

#include "pspstub.s"

    STUB_START "NandDumper",0x40090000,0x00010005
    STUB_FUNC  0x9EDD6EE1,ReadBlock
    STUB_END

Копируем .S файл в папку с нашей прогой. Усё, компилим нашу либу.

Ну а теперь делаем наш EBOOT.PBP - главную программу, которая грузит нашу библиотеку.

Код:

#include <pspsdk.h>
#include <pspkernel.h>
#include <stdio.h>
#include <string.h>

PSP_MODULE_INFO("NandDumperMain", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(20000);

u8 block[32*32*528];

int ReadBlock(u32 page, u8 *buffer);

#define printf pspDebugScreenPrintf

int main()
{
  pspDebugScreenInit();
 
  SceUID mod = pspSdkLoadStartModule("nanddumper.prx", PSP_MEMORY_PARTITION_KERNEL);

  if (mod < 0)
  {
      printf("Error 0x%08X loading/starting naddumper.prx.\n", mod);
  }

  else
  {

      SceUID fd = sceIoOpen("ms0:/nanddump.flash", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);

      printf("Dumping...\n");

      int i, j;

      for (i = 0; i < (2048*32); )
      {       
        u8 *p = block;
        memset(block, 0xff, sizeof(block));

        for (j = 0; j < 32; j++)
        {

            if (ReadBlock(i, p) < 0)
            {
              printf("bad block at page %d block %d\n", i, i/32);
            }

            i += 32;
            p += (528*32);
        }
       
        sceIoWrite(fd, block, sizeof(block));       
      }

      sceIoClose(fd);

      printf("Done. Exiting in 5 seconds\n");
  }

  sceKernelDelayThread(5*1000*1000);
  sceKernelExitGame();

  return 0;
}

Обращаем внимание на заголовок. Прога должна быть в USER-режиме.

Код:

PSP_MODULE_INFO("NandDumperMain", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(20000);

Размер буфера тоже увеличиваем.
Внимание, необходимо задекларировать все функции которые будем юзать из внешней библиотеки

Код:

int ReadBlock(u32 page, u8 *buffer);
А вот этой строчкой -

Код:

SceUID mod = pspSdkLoadStartModule("nanddumper.prx", PSP_MEMORY_PARTITION_KERNEL);
Грузим нашу библиотеку. Она уже будет в КЕРНЕЛ-режиме. Файлег .s у нас позаботится о переходах юзер/кернел
и голова у нас об этом не болит.

Ну и makefile

Код:

TARGET = nanddumpermain
OBJS = main.o NandDumper.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

BUILD_PRX = 1
PSP_FW_VERSION = 371

LIBDIR =
LIBS =
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Ну вот собстна и всё. Откомпилив всё это, вы получаете 2 файла - nanddumper.prx и EBOOT.PBP
Закидываете на стик и всё готово.

(С)Перевод мой) Оригинал на ps2dev

Писал, не проверяя на PSP, вечерком возможно проверю. Если есть каменты, пожелания/исправления - пишите.

CHERTS 29.10.2007 12:47

Уважаемые, у кого-нибудь пробовал скомпилить плагин Mp3prx?

есть исходники но непонятно под какую SDK?
при компиляции арет что файл psputility_avmodules.h не найден

какие есть идеи?

ALgraFx 29.10.2007 14:58

Цитата:

Сообщение от CHERTS (Сообщение 551150)
Уважаемые, у кого-нибудь пробовал скомпилить плагин Mp3prx?

есть исходники но непонятно под какую SDK?
при компиляции арет что файл psputility_avmodules.h не найден

какие есть идеи?

очевидный вариант - ищи psputility_avmodules.h - либо геморный удали строку подключающую этот файл и смотри по ошибкам компиляции чего нехватает и ищи только эти переменные, структуры...

pspowner 29.10.2007 15:09

*UPDATE по компиляции хомок для 3ХХ

Идём в папку pspdev/psp/sdk/lib
Находим там файлег build.mak, открываем его, смотрим в самом низу -

$(PACK_PBP) EBOOT.PBP $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_UNKPNG) $(PSP_EBOOT_PIC1) \
$(PSP_EBOOT_SND0) strip_$(FINAL_TARGET) $(PSP_EBOOT_PSAR)

Приставку strip_ перед $(FINAL_TARGET) удаляем и сохраняем файл.

Вот теперь ебуты будут собираться правильно, если этого не сделать, то полученные хомки будут вываливаться в XMB с формулировкой Unsupported prx type.

CHERTS 29.10.2007 15:50

Цитата:

Сообщение от ALgraFx (Сообщение 551210)
очевидный вариант - ищи psputility_avmodules.h - либо геморный удали строку подключающую этот файл и смотри по ошибкам компиляции чего нехватает и ищи только эти переменные, структуры...

Очевидный, но с подводными камнями, даже если я и нашел psputility_avmodules.h, но он от старой SDK, и даже с ним возникают корявости.

Ладно, будем грызть кактус дальше.

SееD 29.10.2007 17:40

что у меня получилось:

1) всё поставил
2) успешно скомпилил готовый сэмпл под 1,50
3) успешно скомпилил Превед Мир! под 1,50
4) успешно скомпилил Превед Мир! под 3,71

5) безуспешно попытался скомпилить Нанд Дампер.

ошибки при комплиляции PRX следующие:

Код:

******************************************
Ошибки/Предупреждения ...
******************************************
main.c: In function 'ReadBlock':
main.c(49) : warning: implicit declaration of function 'sceNandReadPagesRawAll'
main.c(50) : warning: implicit declaration of function 'sceNandReadExtraOnly'
/cygdrive/c/pspdev/bin/../lib/gcc/psp/4.0.2/../../../../psp/bin/ld: cannot find -lpspnand_driver2
collect2: ld returned 1 exit status
make: *** [nanddumper.elf] Error 1
Компиляция прервана !

я где-то ошибся или нужен новый SDK? и если да, то можно ссылку?

pspowner 29.10.2007 22:29

Цитата:

Сообщение от SееD (Сообщение 551371)
что у меня получилось:

1) всё поставил
2) успешно скомпилил готовый сэмпл под 1,50
3) успешно скомпилил Превед Мир! под 1,50
4) успешно скомпилил Превед Мир! под 3,71

5) безуспешно попытался скомпилить Нанд Дампер.

ошибки при комплиляции PRX следующие:

Код:

******************************************
Ошибки/Предупреждения ...
******************************************
main.c: In function 'ReadBlock':
main.c(49) : warning: implicit declaration of function 'sceNandReadPagesRawAll'
main.c(50) : warning: implicit declaration of function 'sceNandReadExtraOnly'
/cygdrive/c/pspdev/bin/../lib/gcc/psp/4.0.2/../../../../psp/bin/ld: cannot find -lpspnand_driver2
collect2: ld returned 1 exit status
make: *** [nanddumper.elf] Error 1
Компиляция прервана !

я где-то ошибся или нужен новый SDK? и если да, то можно ссылку?

Это хорошо что откомпилил) Надеюсь запустилось?

Вобщем ну его к черту этот НАНДДампер. Это был лишь пример того как использовать внешние библиотеки, к тому же я скорее всего в инструкции чот не так написал(по мелочи)))). Но это не главное, главное что в ДевКите чевота нехватает, подозреваю что этого самого nand_driver2


Разбирацца было лень, такчто ща сделал простенькую пару prx/pbp - всё компилица и работает. Надеюсь там будет всё понятно ибо уж упростил до предела. Потом может и инструкцию под это перепишу.

http://www.rapidshare.ru/448787
http://www.rapidshare.ru/448790

З.Ы. Кстати, нечто похожее лежит в сэмплах в папке prx. Не совсем то что нужно, правда, но для общего развития советую посмотреть.

HRR 02.11.2007 21:02

Люди, скажите ламеру, реально написать дебаггер под PSP (хотя бы просто окно дизасма, вьювер памяти/регистров, возможность бряков) так, чтобы на PSP скомпилить плагин, который будет обмениваться данными с софтиной на PC через USB? Или есть какие-нибудь другие рабочие дебаггеры, в которых можно дебажить UMD-шные игры?

l3VGV 03.11.2007 09:09

psplink+usbhost+pcterm+psp-gdb. Это всё описано в мануале к псп линку.

pspowner 03.11.2007 13:01

Есть ещё CWCheats который имеет встроенную фанукцию дизасма. Однако отладки там нет.

Ваще RISC для меня китайская грамота, скока не пытался хоть чевота понять.

HRR 03.11.2007 13:54

Цитата:

psplink+usbhost+pcterm+psp-gdb. Это всё описано в мануале к псп линку.
А что нужно знать и уметь для написания подобной вещи?
И вообще реально ли мне это сделать?..

Цитата:

Есть ещё CWCheats который имеет встроенную фанукцию дизасма. Однако отладки там нет.
Ну, отдизасмить я и так смогу, но мне позарез нужны бряки :( От дизасма толку нет...

Цитата:

Ваще RISC для меня китайская грамота, скока не пытался хоть чевота понять.
Ты о R4000? Что там понимать то? Не сложнее ГБА и PSX(R3000) :)

pspowner 03.11.2007 14:03

Цитата:

Сообщение от HRR (Сообщение 555181)
А что нужно знать и уметь для написания подобной вещи?
И вообще реально ли мне это сделать?..


Ну, отдизасмить я и так смогу, но мне позарез нужны бряки :( От дизасма толку нет...


Ты о R4000? Что там понимать то? Не сложнее ГБА и PSX(R3000) :)

А что такое "бряки"? Брейкпоинты? Странное произношение...

Я о RISC, упрощённом наборе инструкций для процессоров. RХХХХ в частности. CISC на х86 у меня вопросов не вызывает, я с ним работал.

Если знаешь по риску полезное чтиво, буду рад ознакомиться.

HRR 03.11.2007 16:15

Цитата:

А что такое "бряки"? Брейкпоинты? Странное произношение...
Не знаю, все знакомые знатоки дебаггеров произносят именно так :)

Цитата:

Если знаешь по риску полезное чтиво, буду рад ознакомиться.
Мне просто приходилось дебажить пару игр на PSX. Совершенно ничего сложного, не сложней, чем дебаг GBA. В особенности процессора я не вникал, да и не изучал ничего, так что практически ничего не знаю. Справочник инструкций - и вот оно, счастье :) Хотя большинство инструкция там и так сразу понятно на интуитивном уровне.
Смотрел инструкции R4000 - не сильно отличается от 3k, но вот дебаггера нет :( С удовольствием бы написал сам, да вот нет необходимых знаний и умений :(
Насколько я понимаю, достаточно написать плагин, который будет дежурить во время игры и связываться с прогой на PC, при требовании отсылая ей данные о регистрах, памяти и т.п. А прога в свою очередь будет обладать юзверьским интерфейсом, дизасмом и т.п.
Реально ли такое сделать?...
Если всё получится - выйдет немало хороших переводов :)

L0NG 30.11.2007 01:33

люди подскажите плиз, у меня сабж psplink - не работает!
все настроил, и никак... пишет что к псп никак не подключиться. делал всё шаг в шаг как писал камрад Pspowner. псп fat прошивка 3.71 m33 - 3
очень хотелось бы откомпилированный код запускать сразу на железяке!


psplink ставил 2.0 из набора что выкладывал Pspowner
у меня когда его запускаешь, на компе зыза определяется просто зыза, НЕ type B.
пробовал и 3.0 с ней определяется как type B но все равно не работает.
что пробовать сделать?

pspowner 01.12.2007 11:29

Поставить драйвера PSP type b. найти пральный psplink.ini или выправить его самому.

Попробуй снять/установить галку на Запускать "USBHost в Daemon-режиме".

Вобще ща уже не помню всех этих плясок с бубном... Но кароч работает он.
А запускать на железяке - ну скомпили, перепиши да запускай.

L0NG 01.12.2007 14:52

спасибо, ждал! сейчас попробую. я кстати раздобыл дрова для psp type B
и поставил но когда просто втыкаю её она определяется как PSP. напрочь грохнуть обычные дрова я не решаюсь ... или она как тип Б должна определяться только в psplink ?

l3VGV 01.12.2007 15:02

только после запуска псплинк на псп.


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

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