|
Программирование для PSP Вы программист? Welcome сюда... |
28.05.2007, 12:43
|
Сообщение: #1 (440206)
|
Прошивка: Slim&Light 3.90 M33
Другие консоли: SONY PLAYSTATION THREE & Nintendo Wii
Регистрация: 10.03.2006
Адрес: Москва
Сообщений: 2,407
Вы сказали Спасибо: 810
Поблагодарили 2,294 раз(а) в 756 сообщениях
Сила репутации: 1Репутация: 1508 
(обеспечено прекрасное будущее)
|
NAND Flash
Приветствую всех.
Решил сегодня накатать програмку а-ля Version Changer, только чтобы работала на 3.40ОЕ.
Ну изначально мне показалось всё довольно просто. Прочитать строчку из файлика - без проблем, а вот с записью её обратно возникли проблемы.
Вобщем отрабатывает нормально, но ничего никуда не записывается.
Если добавляю PSP_MAIN_THREAD_ATTR(0) и sceNandSetWriteProtect(true);
то просто тупо виснет, проичём виснет даже не доходя до записи.
Народ, если кто где встречал, или может сам знает как правильно писать во flash0, то буду благодарен за разъяснения или ссылку.
Брикеров обещаю не клепать
Вот как выглядит у меня.
int main(int argc, char *argv[])
{
int cnt, fd, pos=0;
char buff[18];
SceCtrlData pad;
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_DIGITAL);
pspDebugScreenInit();
printf ("This will try to read version info!\n");
fd = sceIoOpen("flash0:/kn/vshctrl.prx", PSP_O_RDONLY, 0777);
sceIoLseek(fd, 0x3D70, PSP_SEEK_SET);
sceIoRead(fd, &buff, 18);
sceIoClose(fd);
printf("Data read:[");
for (cnt=0; cnt<=18; cnt+=2) printf("%c",buff[cnt]);
printf("]");
pspDebugScreenSetXY(11+(pos/2),1);
pad.Buttons=0;
while(1) {
sceDisplayWaitVblankStart();
sceKernelDelayThread(100000);
sceCtrlReadBufferPositive(&pad, 1);
switch (pad.Buttons) {
case PSP_CTRL_START: sceKernelExitGame();
break;
case PSP_CTRL_LEFT: pos-=2;
if (pos<0) pos = 0;
pspDebugScreenSetXY(11+(pos/2),1);
break;
case PSP_CTRL_RIGHT: pos+=2;
if (pos>18) pos= 18;
pspDebugScreenSetXY(11+(pos/2),1);
break;
case PSP_CTRL_UP: buff[pos]+=1;
printf("%c", buff[pos]);
pspDebugScreenSetXY(11+(pos/2),1);
break;
case PSP_CTRL_DOWN: buff[pos]-=1;
printf("%c", buff[pos]);
pspDebugScreenSetXY(11+(pos/2),1);
break;
case PSP_CTRL_CROSS: buff[pos]-=1;
printf("\n\n\n Writing value to flash0...");
sceNandSetWriteProtect(true);
fd = sceIoOpen("flash0:/kn/vshctrl.prx", PSP_O_WRONLY, 0777);
if (!fd) printf ("/n Failed to open file for writing! /n");
sceIoLseek(fd, 0x3D70, PSP_SEEK_SET);
int res;
res=sceIoWrite(fd, &buff, 18);
sceIoClose(fd);
printf("\n\n\n %i bytes written. DONE... Exiting...", res);
sceNandSetWriteProtect(false);
sceKernelDelayThread(10*1000*1000);
sceKernelExitGame();
break;
}
pad.Buttons=0;
}
sceKernelDelayThread(10*1000*1000);
sceKernelExitGame();
return 0;
}
Fur die freiheit zu kampfen um jeden preis
Последний раз редактировалось pspowner; 28.05.2007 в 14:04.
|
|
|
28.05.2007, 14:51
|
Сообщение: #2 (440333)
|
Прошивка: 3.90 М33-2
Регистрация: 16.03.2007
Адрес: Планета Земля
Сообщений: 165
Вы сказали Спасибо: 64
Поблагодарили 163 раз(а) в 66 сообщениях
Сила репутации: 1Репутация: 100 
(скоро придёт к известности)
|
Последний раз редактировалось Mortem; 28.05.2007 в 14:52.
Причина: так...
|
|
|
Этот пользователь сказал Спасибо Mortem за это полезное сообщение:
|
|
28.05.2007, 17:28
|
Сообщение: #3 (440472)
|
Прошивка: Slim&Light 3.90 M33
Другие консоли: SONY PLAYSTATION THREE & Nintendo Wii
Регистрация: 10.03.2006
Адрес: Москва
Сообщений: 2,407
Вы сказали Спасибо: 810
Поблагодарили 2,294 раз(а) в 756 сообщениях
Сила репутации: 1Репутация: 1508 
(обеспечено прекрасное будущее)
|
Ага, спасибо.
Поиск использовал, но видимо каким-то чудом прощёлкал этот исходник.
Ну вобщем сделал, остались мелкие глюки приводящие к брику (шутка).
Надо просто немножко подправить, а то почему-то отображаемая в свойствах системы версия прошивки на 1 меньше выставленной, но этого жука я убью.
Почему-то когда выставляю PSP_MAIN_THREAD_ATTR(0)
- перестаёт работать блок switch { } - это меня глючит или PSP?
Также расстроила меня невозможность писать в файл по смещению -
sceIoLseek(fd, 0x3D70, PSP_SEEK_SET);
sceIoWrite(fd, &buff, 18);
Т.е. приходится считывать файл полностью в память, там его изменять, старый транкейтить, а потом снова целиком записывать...
Fur die freiheit zu kampfen um jeden preis
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 12:16. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7 Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.
|
|
|