PSPx форум

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

Mortem 23.06.2007 01:04

А я вот захожу в тему ТЕТРИС, смотрю ты версию обновил, сразу сюда, точно, коск нашёл... (:
Отличная работа! Пойду поправлю.

wSlava 25.06.2007 19:44

Исходник работы со шрифтом
 
http://ifolder.ru/2483558

Технология работы:
в подкаталоге MGF\hgefonted\ утилитка,
запускаем, выбираем шрифт, диапазон символов,
формат текстур можно любой, но больше 1024 не советую, тормозно.
Затем сохраняешь например с именем my, получаем 2 файла:
my.fnt,my.png. Далее в MGF\fnt2fb\ запускаем
в командной строке fnt2fb.exe my.fnt my.fb, получается файл
my.fb. Далее при программировании нужно использовать
2 файла my.fb и my.png.

К примеру:

MGFFONT *font=new MGFFONT("times.fb");
font->SetScale(2.4f);
font->SetAngle(angle);
font->SetColor(0xFFFF00FF);
font->Render(10, 10, MGFFONT_CENTER, "Preved !");

Mortem 24.09.2007 12:33

Переписал все примеры под новую версию MGF. Одна проблема - тестирование. Хочу тестировать на новой версии PSPxIDE. (:
Так что релиз следующей версии MGF будет чуть после релизп PSPxIDE. (&

добавлено через 1 минуту
Из нововведений: оптимизация класса-вектора и добавление класа для более оптимизированной анимации.

[offtop]Вышла моя первая шароварка. Смотреть сюда: http://karmateam.com[/offtop]

Mortem 01.11.2007 02:11

wSlava на IDE подзабил, и это очень печально. Т.к. без нормальной IDE у меня не получается доделать Кримсон. Да ещё с новым SDK какие-то текстурные глюки полезли, тоже не радует.

Отсюда возникает вопрос: кто каким IDE пользуется? Говорили, что как-то можно прикрутить Dev-C++, но все мои попытки оказались тщетны. ):

Пока решил немного размятся и написать что-нить простенькое. И так совпало, что начал портировать на PSP движёк для тектовых квестов QSP.
Двиган под винду, а так же сами квесты можно скачать тут: http://qsp.org.ru .
Форум QSP: http://qsp.borda.ru

Собственно портирование самого движка завершено и можно даже своеобразно погонять в тестовый квест.
Основной вопрос сейчас стоит в проектировании интерфейса, т.к. экранчик у PSP маленький и нету мышки. Так что релиз qsPSP планирую где-то через неделю.

Не будет поддержки сохранения в выбранный файл, а так же не будет поддержки музыки и картинок. Дальше нужно будет искать косяки в текстурах и универсальный модуль для проигрывания нескольких звуковых дорожек одновременно.

Вот такой вот у меня прогресс.

l3VGV 01.11.2007 11:15

Уважаемый моретем, после долгих дней гемороя к пспсдк можно прикрутить еклипс. но "инлайн" отладки(ну когда можно на строки ставить точки и смотреть значения переменных и тп) всёравно у меня добиться не получилось :( там нужно долго курить доки по гдб-дебуг.

вообще еклипс весьма удобная штука. если знать что где ковырять.
но моему спалённому 1Сом мозгу конечно приятнее ИДЕ от Славы. где ничего ковырять ненадо и можно просто работать.

Слава, где ты :( мы скучаем...

Mortem 01.11.2007 19:23

Ну, сейчас у wSlava инлайн тож не до конца сделан. Например работает только в пределах одного файла. Так что в основном отладка всё равно основана на логе, с котрым я-таки разобрался. (:

Если не затруднит, можешь подробно написать, где скачать Эклисп и как его прикрутить к PSPSDK?
Даже если там есть стандартное смежение блоков по Tab - это будет очень круто. Т.к. от некоторых привычек очень сложно избавляться. (:

добавлено через 5 часов 33 минуты
Зарелизил первую версию порта QSP на PSP (ядро 1.5), основанную на QSP 5.4.0.

qsPSP v.0.1 (QSP 5.4.0)

- Нет поддержки звуков
- Нет поддержки картинок
- Нет поддержки стилей (цвет, шрифт, и т.д.)
- Нет сохранения и загрузки
- Нет меню для объектов
- Иногда строки переносятся не правильно
- Нет выбора квеста (test.gam)
- Нет строки ввода и её обработки
- Нет сообщений

В планах на версию 0.2:

- Поддержка картинок
- Сохранение в слотах
- Выбор квеста
- Меню для объектов
- Исправить перенос строки

Обладателей PSP просьба потестировать на разных квестах. Для этого нужно просто заменить test.gam на любой другой квест, переименовав его в test.gam.

Так же сейчас стоит вопрос с графическим оформлением. Очень нужна помощь людей, умеющих рисовать. Нужно будет сделать всякие кнопочки, окошки и прочую графику. Сейчас всё очень похоже на DOS-консоль. (:

Страничка проекта тут: http://elmortem.mirgames.ru/?path=psp-qsp

pspowner 02.11.2007 12:31

Имхо, Сид прав, ядро 1.50 - уже вчерашний день.
Я себе на 3.71М33-2 даже пока 1.50 патч не ставил даже.

Mortem 02.11.2007 13:31

Я указал лишь совместимость. Теоретическую... (:
Тестил на 3.52 M33-2 - всё работает. Дальше апгрейдится пока не намерен, т.к. меня пока всё устраивает.

pspowner 02.11.2007 13:40

Я прекрасно понял что ты указал. :) А вот ты меня походу не понял. Может я непонятно написал...
Я не про то что работает на 3.52 М33-2, и не призываю апдейтится если оно тебе не надо.
Я предлагаю компилить проги под ядро 3ХХ.

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

l3VGV 02.11.2007 14:53

Слимку мне обещали на даун принести. можно будет попробовать. если принесут конечно...

Mortem 06.11.2007 20:18

Хех, знать бы ещё, как её компилить под ядро 3.хх... (:

l3VGV 06.11.2007 23:22

Я сказать прямо совсем не понял что имел в виду Мортем.
Как компилить под 3.71? просто поставить в мэйк файл буилд_прх=1, а в программе добавить директиву для увеличения кучи.

Mortem 08.11.2007 02:41

l3VGV
Ладно, с этим буду разбираться, когда всё будет работать быстро и без багов хотя бы под 1.50.

Сейчас вот встал вопрос с быстрым выводом текста. 1024 символа - и уже тормоза, что ого-го! Сейчас вот хочу глянуть исходники Bookr'а. Там же как-то выводят целые листинги в 800кб... С переносом строк и всеми прочими делами.

Пока сделал неполноценный гейм-браузер, так что можно ограниченно играть в разные игры. Но тестовый "Чукча" всё равно по стабильности заруливает всех. (:

l3VGV 08.11.2007 11:10

Попробуй поиграть в майк файле ключами юз_пспдклиб_с, это даёт скорость.

pspowner 08.11.2007 12:03

Экспериментирую с OSK (On Screen Keybyard)

Откомпилил приведённый пример от McZonc для для ядра 3.ХХ
Потребовались небольшие правки.

Всё работает, хотя поведение странновато, надо с параметрами поиграццо.
Может и русский удасцо заюзать. Потом внедрю всё это в свой Version Changer

Mortem 10.11.2007 20:48

Заборол страшный и очень тупой (с моей стороны) баг с Дельтой. Кусаю локти и думаю о том, как же я его такого пропустил. А ведь грешил на специфику работы со временем в PSP.
На днях выложу обновлённый MGF.

Вывод текста ускорил, хотя после 10000 символов фпс падает до 10-15. Но хоть не зависает наглухо - и то радость.

добавлено через 7 часов 13 минут
pspowner
Скачал и откомпилил OSK. Компилил с PSPxIDE с последней сборкой SDK от wSlawa (нет сейчас возможности скачать СОВСЕМ последнюю версию SDK). Запускал через PSPLINK 2.0 final.
В итоге увидел только серо-голубенький экран. Ничего похожего на ввод текста не заметил.

Так же пытался запустить откомпиленные примеры Диалоговых окон из PSPSDK - не пашут. Отдебажить никак не получается. ):

pspowner 11.11.2007 10:07

Мортем, сложно сказать. Умну откомпилилось и работает(МессаджБокс тоже), также у Сида работает, он мне скришот сделал -

http://i012.radikal.ru/0711/d2/efd7d753ec56.jpg

Я уже выложил ВЧэнжер с ОСК, по ссылке https://www.pspx.ru/forum/showthread.php?t=57113

Попробуй запустить, если не заработает - значит прошивку тебе надо обновить.

Да, компилил Славиной сборкой СДК в ядро 3ХХ, последний СДК от ВГВ с ОСК почему-то не дружит :(

Запускать через ПСПЛИНК, даже не пробывал.


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

Mortem 11.11.2007 11:07

pspowner
Запустить попробую. Исходники тоже неплохо бы глянуть. То, что код некрасивый - так это не главное, у меня у самого не всегда получается красиво структерировать программу, так что не страшно.

pspowner 11.11.2007 18:52

Мортем, ну как? )

Mortem 12.11.2007 01:33

Не пашет. Сэмплы с форумной ветки и из SDK тупо зависают, а твой Ченжер падает на загрузке.

Пока по qsPSP 0.2 готово:
- Сохранение в слотах
- Выбор квеста
- Исправлен перенос строки

Доделаю меню для объектов и выложу. Вьювер картинок и прогрывание музыки оставлю на самый конец.

Если так и не удасться прикрутить ОСК, то придётся для командной строки делать самопальный ввод. Навеное как wSlava делал в тетрисе.

добавлено через 3 часа 43 минуты
Обновил qsPSP до версии 0.2.
- Сохранение в слотах
- Выбор квеста
- Меню для объектов
- Исправлен перенос строки

Брать тут: http://elmortem.mirgames.ru/?path=psp-qsp

pspowner 12.11.2007 09:45

ОК, надеюсь ты положил всё в правильную папку т.е. game371(game352 или какая у тебя там) или в game с настроенным на 3хх Кернел, иначе последствия запуска - непредсказуемы.

Походу всётаки обновиться тебе надо, до 3.71 М33-3, ну да ладно, не хочешь - как хочешь. Как обещал высылаю исходник. Извиняюсь что в таком виде, просто лень заливаьб на ф/о, а аттачменты не пашут. :(

Код:

#include <pspsdk.h>
#include <stdio.h>
#include <zlib.h>
#include <malloc.h>
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <psputility_msgdialog.h>
#include <psputility.h>

#include <string.h>

#include <psputility_osk.h>

PSP_MODULE_INFO("osk", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(20048);


static unsigned int __attribute__((aligned(16))) list[262144];

//Содержимое мессадж бокса
char cdata[] = {
    0x56, 0x49, 0x6E, 0x66, 0x6F, 0x20, 0x43, 0x68, 0x61, 0x6E,
    0x67, 0x65, 0x72, 0x0D, 0x0A, 0xD0, 0x9D, 0xD0, 0xB0, 0xD0, 0xBF, 0xD0, 0xB8, 0xD1, 0x81, 0xD0, 0xB0,
    0xD0, 0xBD, 0x20, 0x70, 0x73, 0x70, 0x6F, 0x77, 0x6E, 0x65, 0x72, 0x27, 0xD0, 0xBE, 0xD0, 0xBC,
    0x20, 0xD1, 0x81, 0xD0, 0xBF, 0xD0, 0xB5, 0xD1, 0x86, 0xD0, 0xB8, 0xD0, 0xB0, 0xD0, 0xBB, 0xD1,
    0x8C, 0xD0, 0xBD, 0xD0, 0xBE, 0x20, 0xD0, 0xB4, 0xD0, 0xBB, 0xD1, 0x8F, 0x0D, 0x0A, 0x68, 0x74, 0x74,
    0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x70, 0x73, 0x70, 0x78, 0x2E, 0x72, 0x75, 0x20,
    0x28, 0x43, 0x29, 0x32, 0x30, 0x30, 0x37
};

char fdata[28930];
gzFile fil;
int f;
void *hbuff, *fbuff;

#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define PIXEL_SIZE (4) /* change this if you change to another screenmode */
#define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
#define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2) /* zbuffer seems to be 16-bit? */

int SetupCallbacks();

int done = 0;

int UnPackLoad(void) {
    fil=gzopen("ms0:/vshctrl.prx.gz","r");
    gzread(fil,fdata,28930);
    gzclose(fil);
    f=sceIoOpen("ms0:/vshctrl.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
    sceIoWrite(f, &fdata, 28930);
    sceIoClose(f);
      sceIoRemove("ms0:/vshctrl.prx.gz");
    return 0;
}


static void ConfigureDialog(SceUtilityMsgDialogParams *dialog, size_t dialog_size)
{
    memset(dialog, 0, dialog_size);

    dialog->size = dialog_size;
    sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE,
                &dialog->language); // Prompt language
    sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN,
                &dialog->buttonSwap); // X/O button swap
      dialog->buttonSwap = 1;
    dialog->unknown[0] = 0x11;    // ???
    dialog->unknown[1] = 0x13;
    dialog->unknown[2] = 0x12;
    dialog->unknown[3] = 0x10;
}

static void ShowMessageDialog(const char *message)
{
    SceUtilityMsgDialogParams dialog;

    ConfigureDialog(&dialog, sizeof(dialog));
    dialog.unknown[10] = 1;
    strcpy(dialog.message, message);

    sceUtilityMsgDialogInitStart(&dialog);

    for(;;) {

        sceGuStart(GU_DIRECT,list);
        sceGuClearColor(0x666666);
        sceGuClearDepth(0);
        sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

        sceGuFinish();
        sceGuSync(0,0);

   
    switch(sceUtilityMsgDialogGetStatus()) {
       
    case 2:
            sceUtilityMsgDialogUpdate(1);
        break;
       
    case 3:
        sceUtilityMsgDialogShutdownStart();
        break;
       
    case 0:
        return;
       
    }

    sceDisplayWaitVblankStart();
    sceGuSwapBuffers();
    }
}

int PackPrepare(void) {

    fil = gzopen("ms0:/vshctrl.prx.gz","w");
  gzwrite(fil,fdata,28930);
  gzclose(fil);
 
  f = sceIoOpen("ms0:/header.prx", PSP_O_RDONLY, 0777);
  hbuff=malloc(0x150);
  sceIoRead(f, hbuff, 0x150);
  sceIoClose(f);
 
  f = sceIoOpen("ms0:/vshctrl.prx.gz", PSP_O_RDONLY, 0777);
  int size=sceIoLseek(f, 0, SEEK_END);
  sceIoLseek(f, 0, SEEK_SET);
  fbuff=malloc(size);
  sceIoRead(f, fbuff, size);
  sceIoClose(f);
 
  f = sceIoOpen("ms0:/vshctrl1.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
  sceIoWrite(f, hbuff, 0x150);
  sceIoWrite(f, fbuff, size);
  sceIoClose(f);
 
  //sceKernelDelayThread(1*1000*1000);

  sceIoRemove("ms0:/vshctrl.prx.gz");
  sceIoRemove("ms0:/header.prx");
  sceIoRemove("ms0:/vshctrl.prx");

  free(hbuff);
  free(fbuff);
 
  return 0;
}


int CopyrightCheck(void) {

unsigned int count, sum;

sum=0;

for (count=0; count<=sizeof(cdata); count++) sum=sum+(cdata[count] xor 0x5A03);                       
                   

return sum;
}


int main(int argc, char* argv[]) {
    SetupCallbacks();
    if (CopyrightCheck()!=0x43E33) sceKernelExitGame();


  //sceKernelDelayThread(3*1000*1000);


    // INIT GU!!!! it will not work without!!!

    sceGuInit();
    sceGuStart(GU_DIRECT,list);
    sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
    sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
    sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
    sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
    sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
    sceGuDepthRange(0xc350,0x2710);
    sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
    sceGuEnable(GU_SCISSOR_TEST);
    sceGuDepthFunc(GU_GEQUAL);
    sceGuEnable(GU_DEPTH_TEST);
    sceGuFrontFace(GU_CW);
    sceGuShadeModel(GU_FLAT);
    sceGuEnable(GU_CULL_FACE);
    sceGuEnable(GU_TEXTURE_2D);
    sceGuEnable(GU_CLIP_PLANES);
    sceGuFinish();
    sceGuSync(0,0);
    sceDisplayWaitVblankStart();
    sceGuDisplay(GU_TRUE);

    // INIT OSK

    unsigned short intext[128]  = { '3','.','7','1',' ','M','3','3','-','3' }; // text already in the edit box on start
    unsigned short outtext[128] = { 0 }; // text after input
    //Введите новое название
    unsigned short desc[128]    = { 0x412, 0x432, 0x435, 0x434, 0x438, 0x442, 0x435, 0x20, 0x43D, 0x43E, 0x432, 0x43E, 0x435, 0x20, 0x43D, 0x430, 0x437, 0x432, 0x430, 0x43D, 0x438, 0x435, 0x00 }; // de******ion


//    unsigned short [cpr]
   
    ShowMessageDialog(cdata);



    SceUtilityOskData data;
    memset(&data, 0, sizeof(data));
    data.language = 9; // Русский
    data.lines = 1; // just online
    data.unk_24 = 1; // set to 1
    data.desc = desc;
    data.intext = intext;
    data.outtextlength = 128; // sizeof(outtext) / sizeof(unsigned short)
    data.outtextlimit = 10; // just allow 32 chars
    data.outtext = outtext;

    SceUtilityOskParams osk;
    memset(&osk, 0, sizeof(osk));
    osk.size = sizeof(osk);
    osk.language = 8;
    osk.buttonswap = 1;
    osk.unk_12 = 17; // What
    osk.unk_16 = 19; // the
    osk.unk_20 = 18; // fuck
    osk.unk_24 = 16; // ???
    osk.unk_48 = 1;
    osk.data = &data;

    // Only ascii code is handled so only the input of the small letters is printed

    int rc = sceUtilityOskInitStart(&osk);
    if(rc) {
        return 0;
    }

    while(!done) {
        sceGuStart(GU_DIRECT,list);
        sceGuClearColor(0x666666);
        sceGuClearDepth(0);
        sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

        sceGuFinish();
        sceGuSync(0,0);

        switch(sceUtilityOskGetStatus()) {
        case PSP_OSK_INIT :
            break;
        case PSP_OSK_VISIBLE :
            sceUtilityOskUpdate(1); // 2 is taken from ps2dev.org recommendation - ***ня, с 1 лучше ся ведёт
            break;
        case PSP_OSK_QUIT :
            sceUtilityOskShutdownStart();
            break;
        case PSP_OSK_FINISHED :
            done = 1;
            break;
        case PSP_OSK_NONE :
        default :
            break;
        }

        sceDisplayWaitVblankStart();
        sceGuSwapBuffers();
    }

//Это потом надо будет убить
int r,i;
char bu[9];
for (i=0; i<=9; i++) bu[i]=data.outtext[i];

    sceGuTerm();

//faccess.prx - грузится в кернел и списывает с ф0 vshctrl.prx в виде двух файлов - header.prx и vshctrl.prx.gz

    SceUID mod = pspSdkLoadStartModule("faccess.prx", PSP_MEMORY_PARTITION_KERNEL);
  if (mod < 0)
  {
      pspDebugScreenInit();
            printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
      sceKernelDelayThread(10*1000*1000);
      sceKernelExitGame();
  }
    UnPackLoad();
  pspDebugScreenInit();
    r=0x4650;   
        for(i = 0; i<=9; i++) {
            fdata[r]=bu[i];
            r+=2;
}

    PackPrepare();

//flasher.prx - записывает vshctrl1.prx на ф0
    mod = pspSdkLoadStartModule("flasher.prx", PSP_MEMORY_PARTITION_KERNEL);
            if (mod < 0)
                {
                  printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
                  sceKernelDelayThread(10*1000*1000);
                  sceKernelExitGame();
            }

  sceIoRemove("ms0:/vshctrl1.prx");   
    sceKernelExitGame();

    return 0;
}

int exit_callback(int arg1, int arg2, void *common) {
    done = 1;
    sceKernelExitGame();
    return 0;
}

int CallbackThread(SceSize args, void *argp) {
    int cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
    sceKernelRegisterExitCallback(cbid);
    sceKernelSleepThreadCB();
    return 0;
}

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

Makefile

Код:

TARGET = osk
OBJS = main.o
BUILD_PRX=1

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

LIBDIR =
LDFLAGS =
LIBS = -lpspgu zlib/libz.a

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = VIChangerGUI

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


l3VGV 12.11.2007 11:29

Цитата:

Сообщение от pspowner (Сообщение 561640)

Да, компилил Славиной сборкой СДК в ядро 3ХХ, последний СДК от ВГВ с ОСК почему-то не дружит :(

Запускать через ПСПЛИНК, даже не пробывал.

А как имнно не дружит? могу исходник сам поковырять если даш :)

А...туплю если это сверху оно то поквыряюсь.

За выходные накрутил дебиан и заставил его работать. голова немножка не варит, сори.

pspowner 12.11.2007 12:15

Ну посмотри, увидешь :) Пытался откомпилить на твоей сборке, а он мне начал ругаться на свои собственные сдкашные либы, ну я кароче забил.

Mortem 12.11.2007 12:32

Так это, ОСК под 1.50 вообще не пашет? Зафигом мне под 3.хх-то? Если уж и делать, то тогда под оба ядра, а не под какое-то одно...
А-то сейчас перепрошюсь, а потом окажется, что большую часть имеющегося софта менять нужно. Да и у меня сейчас большой напряг с инетом, чтобы выкачивать обновления и прочие патчи, а потом ещё и софт качать. Так что нафиг пока. Если уж ОСК не пашет, то пока и обойдусь...

MGF обновил.

pspowner 12.11.2007 12:52

Там вроде ситуация такая - пашет только в оригинальной 1.50, в ядре 1.50 кастомов - не пашет. Вроде так.

Но собственно, для меня что 1.50, что ядро 150 в кастоме - вчерашний день, я для этого ничего делать не буду, хотя и так почти ничего не делаю ))

l3VGV 12.11.2007 13:12

Хых. жутко ругается на собственные хедеры...прикольно. будем копать.

Mortem 12.11.2007 14:29

pspowner
Что есть во всех этих новомодных прошивках, чего нету в 3.52 М33-2?
А-то может я бы и прошился.
Да и вообще, тогда придётся постоянно колупать Makefile, чтобы компилить его PSPxIDE, а так ломает, чесслово. (:

pspowner 12.11.2007 14:36

1) Ты можешь остаться на 3.52, но проги делать для 3хх
2) Ты можешь прошиться на 3.71 при этом ТЫ НЕ ПОТЕРЯЕШЬ возможность запускать 150 хомки. Какой смысл сидеть на старье?

Колупать? Чего колупать?


Ладно, как хош.

l3VGV 12.11.2007 15:44

Итаг я тут чутка поковырялсо :)

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

Код:

#include <pspsdk.h>
#include <stdio.h>
#include <zlib/zlib.h>
#include <malloc.h>
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <psputility.h>
#include <psputility_msgdialog.h>


#include <string.h>

#include <psputility_osk.h>

PSP_MODULE_INFO("osk", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(20048);


static unsigned int __attribute__((aligned(16))) list[262144];

//Содержимое мессадж бокса
char cdata[] = {
    0x56, 0x49, 0x6E, 0x66, 0x6F, 0x20, 0x43, 0x68, 0x61, 0x6E,
    0x67, 0x65, 0x72, 0x0D, 0x0A, 0xD0, 0x9D, 0xD0, 0xB0, 0xD0, 0xBF, 0xD0, 0xB8, 0xD1, 0x81, 0xD0, 0xB0,
    0xD0, 0xBD, 0x20, 0x70, 0x73, 0x70, 0x6F, 0x77, 0x6E, 0x65, 0x72, 0x27, 0xD0, 0xBE, 0xD0, 0xBC,
    0x20, 0xD1, 0x81, 0xD0, 0xBF, 0xD0, 0xB5, 0xD1, 0x86, 0xD0, 0xB8, 0xD0, 0xB0, 0xD0, 0xBB, 0xD1,
    0x8C, 0xD0, 0xBD, 0xD0, 0xBE, 0x20, 0xD0, 0xB4, 0xD0, 0xBB, 0xD1, 0x8F, 0x0D, 0x0A, 0x68, 0x74, 0x74,
    0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x70, 0x73, 0x70, 0x78, 0x2E, 0x72, 0x75, 0x20,
    0x28, 0x43, 0x29, 0x32, 0x30, 0x30, 0x37
};

char fdata[28930];
gzFile fil;
int f;
void *hbuff, *fbuff;

#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define PIXEL_SIZE (4) /* change this if you change to another screenmode */
#define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
#define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2) /* zbuffer seems to be 16-bit? */

int SetupCallbacks();

int done = 0;

int UnPackLoad(void) {
    fil=gzopen("ms0:/vshctrl.prx.gz","r");
    gzread(fil,fdata,28930);
    gzclose(fil);
    f=sceIoOpen("ms0:/vshctrl.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
    sceIoWrite(f, &fdata, 28930);
    sceIoClose(f);
      sceIoRemove("ms0:/vshctrl.prx.gz");
    return 0;
}


static void ConfigureDialog(pspUtilityMsgDialogParams *dialog, size_t dialog_size)
{
    memset(dialog, 0, dialog_size);

    dialog->base.size = dialog_size;
    sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE,
                &dialog->base.language); // Prompt language
    sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN,
                &dialog->base.buttonSwap); // X/O button swap
      dialog->base.buttonSwap = 1;
    // dialog->base.unknown[0] = 0x11;    // ???
    // dialog->base.unknown[1] = 0x13;
    // dialog->base.unknown[2] = 0x12;
    // dialog->base.unknown[3] = 0x10;
}

static void ShowMessageDialog(const char *message)
{
    pspUtilityMsgDialogParams dialog;

    ConfigureDialog(&dialog, sizeof(dialog));
    //dialog.unknown[10] = 1;  //Туто явно надо знать в какую структуру эту 1 запизать и что раньше под акновном понималось, смотри файл пспутилити.х
    strcpy(dialog.message, message);

    sceUtilityMsgDialogInitStart(&dialog);

    for(;;) {

        sceGuStart(GU_DIRECT,list);
        sceGuClearColor(0x666666);
        sceGuClearDepth(0);
        sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

        sceGuFinish();
        sceGuSync(0,0);

   
    switch(sceUtilityMsgDialogGetStatus()) {
       
    case 2:
            sceUtilityMsgDialogUpdate(1);
        break;
       
    case 3:
        sceUtilityMsgDialogShutdownStart();
        break;
       
    case 0:
        return;
       
    }

    sceDisplayWaitVblankStart();
    sceGuSwapBuffers();
    }
}

int PackPrepare(void) {

    fil = gzopen("ms0:/vshctrl.prx.gz","w");
  gzwrite(fil,fdata,28930);
  gzclose(fil);
 
  f = sceIoOpen("ms0:/header.prx", PSP_O_RDONLY, 0777);
  hbuff=malloc(0x150);
  sceIoRead(f, hbuff, 0x150);
  sceIoClose(f);
 
  f = sceIoOpen("ms0:/vshctrl.prx.gz", PSP_O_RDONLY, 0777);
  int size=sceIoLseek(f, 0, SEEK_END);
  sceIoLseek(f, 0, SEEK_SET);
  fbuff=malloc(size);
  sceIoRead(f, fbuff, size);
  sceIoClose(f);
 
  f = sceIoOpen("ms0:/vshctrl1.prx",PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
  sceIoWrite(f, hbuff, 0x150);
  sceIoWrite(f, fbuff, size);
  sceIoClose(f);
 
  //sceKernelDelayThread(1*1000*1000);

  sceIoRemove("ms0:/vshctrl.prx.gz");
  sceIoRemove("ms0:/header.prx");
  sceIoRemove("ms0:/vshctrl.prx");

  free(hbuff);
  free(fbuff);
 
  return 0;
}


int CopyrightCheck(void) {

unsigned int count, sum;

sum=0;

for (count=0; count<=sizeof(cdata); count++) sum=sum+(cdata[count] xor 0x5A03);                       
                   

return sum;
}


int main(int argc, char* argv[]) {
    SetupCallbacks();
    if (CopyrightCheck()!=0x43E33) sceKernelExitGame();


  //sceKernelDelayThread(3*1000*1000);


    // INIT GU!!!! it will not work without!!!

    sceGuInit();
    sceGuStart(GU_DIRECT,list);
    sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
    sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
    sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
    sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
    sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
    sceGuDepthRange(0xc350,0x2710);
    sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
    sceGuEnable(GU_SCISSOR_TEST);
    sceGuDepthFunc(GU_GEQUAL);
    sceGuEnable(GU_DEPTH_TEST);
    sceGuFrontFace(GU_CW);
    sceGuShadeModel(GU_FLAT);
    sceGuEnable(GU_CULL_FACE);
    sceGuEnable(GU_TEXTURE_2D);
    sceGuEnable(GU_CLIP_PLANES);
    sceGuFinish();
    sceGuSync(0,0);
    sceDisplayWaitVblankStart();
    sceGuDisplay(GU_TRUE);

    // INIT OSK

    unsigned short intext[128]  = { '3','.','7','1',' ','M','3','3','-','3' }; // text already in the edit box on start
    unsigned short outtext[128] = { 0 }; // text after input
    //Введите новое название
    unsigned short desc[128]    = { 0x412, 0x432, 0x435, 0x434, 0x438, 0x442, 0x435, 0x20, 0x43D, 0x43E, 0x432, 0x43E, 0x435, 0x20, 0x43D, 0x430, 0x437, 0x432, 0x430, 0x43D, 0x438, 0x435, 0x00 }; // de******ion


//    unsigned short [cpr]
   
    ShowMessageDialog(cdata);



    SceUtilityOskData data;
    memset(&data, 0, sizeof(data));
    data.language = 9; // Русский
    data.lines = 1; // just online
    data.unk_24 = 1; // set to 1
    data.desc = desc;
    data.intext = intext;
    data.outtextlength = 128; // sizeof(outtext) / sizeof(unsigned short)
    data.outtextlimit = 10; // just allow 32 chars
    data.outtext = outtext;

    SceUtilityOskParams osk;
    memset(&osk, 0, sizeof(osk));
    osk.base.size = sizeof(osk);
    osk.base.language = 8;
    osk.base.buttonSwap = 1;
    // osk.unk_12 = 17; // What
    // osk.unk_16 = 19; // the
    // osk.unk_20 = 18; // fuck
    // osk.unk_24 = 16; // ???
    // osk.unk_48 = 1;
    osk.data = &data;

    // Only ascii code is handled so only the input of the small letters is printed

    int rc = sceUtilityOskInitStart(&osk);
    if(rc) {
        return 0;
    }

    while(!done) {
        sceGuStart(GU_DIRECT,list);
        sceGuClearColor(0x666666);
        sceGuClearDepth(0);
        sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);

        sceGuFinish();
        sceGuSync(0,0);

        switch(sceUtilityOskGetStatus()) {
        case PSP_UTILITY_DIALOG_INIT :
            break;
        case PSP_UTILITY_DIALOG_VISIBLE :
            sceUtilityOskUpdate(1); // 2 is taken from ps2dev.org recommendation - ***ня, с 1 лучше ся ведёт
            break;
        case PSP_UTILITY_DIALOG_QUIT :
            sceUtilityOskShutdownStart();
            break;
        case PSP_UTILITY_DIALOG_FINISHED :
            done = 1;
            break;
        case PSP_UTILITY_DIALOG_NONE :
        default :
            break;
        }

        sceDisplayWaitVblankStart();
        sceGuSwapBuffers();
    }

//Это потом надо будет убить
int r,i;
char bu[9];
for (i=0; i<=9; i++) bu[i]=data.outtext[i];

    sceGuTerm();

//faccess.prx - грузится в кернел и списывает с ф0 vshctrl.prx в виде двух файлов - header.prx и vshctrl.prx.gz

    SceUID mod = pspSdkLoadStartModule("faccess.prx", PSP_MEMORY_PARTITION_KERNEL);
  if (mod < 0)
  {
      pspDebugScreenInit();
            printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
      sceKernelDelayThread(10*1000*1000);
      sceKernelExitGame();
  }
    UnPackLoad();
  pspDebugScreenInit();
    r=0x4650;   
        for(i = 0; i<=9; i++) {
            fdata[r]=bu[i];
            r+=2;
}

    PackPrepare();

//flasher.prx - записывает vshctrl1.prx на ф0
    mod = pspSdkLoadStartModule("flasher.prx", PSP_MEMORY_PARTITION_KERNEL);
            if (mod < 0)
                {
                  printf("Error 0x%08X loading/starting prx.\nExiting...\n", mod);
                  sceKernelDelayThread(10*1000*1000);
                  sceKernelExitGame();
            }

  sceIoRemove("ms0:/vshctrl1.prx");   
    sceKernelExitGame();

    return 0;
}

int exit_callback(int arg1, int arg2, void *common) {
    done = 1;
    sceKernelExitGame();
    return 0;
}

int CallbackThread(SceSize args, void *argp) {
    int cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
    sceKernelRegisterExitCallback(cbid);
    sceKernelSleepThreadCB();
    return 0;
}

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


Mortem 12.11.2007 19:44

qsPSP v.0.3 (QSP 5.4.0)
- Ввод пользовательского текста
- Сообщение (MSG)
- Активная панель выделяется по краям
http://elmortem.mirgames.ru/?path=psp-qsp

MGF v.0.0.3.5 (12.11.2007)
+ Добавлена функция рисования одного символа (MGFFONT::RenderChar)
+ Добавлено выравнивание по пикселям при рисовании текста с MGFFONT_CENTER, чтобы текст не размывался.
+ Добавлена функция рисования линии (MGF::Gfx_RenderLine)
http://elmortem.mirgames.ru/?path=psp

Mortem 19.11.2007 02:24

qsPSP v.0.4 (QSP 5.4.0)
* Исправлена ошибка со Sleep
* Исправлена ошибка при удалении символов в диалоге ввода текста
+ Добавлкна поддержка команды INPUT
http://elmortem.mirgames.ru/?path=psp-qsp

Если кто не в курсе, то в поставке идёт книга-игра Д. Брославского "Подземелье Чёрного Замка". Это игра моего детства, и наверняка не только моего. (:

Я вот думаю, надо бы создавать уже пост в ветке про софт или помедитировать над графикой интерфейса?

pspowner 21.11.2007 10:16

Мортем, релизь в софте. Прикреплю.

Второе. Мы тут вчера с ВГВ выяснили, что он тестил не ту версию моего ВЧанжера т.е. тестил ту, которая без ГУИ и ОСК(при старте в ядре 1.50 виснет намертво). Видимо тажа ошибка у тебя, ты не пробовал эту - https://www.pspx.ru/forum/showpost.ph...6&postcount=10
(интересно, почему темы целиком никто не смотрит?)

Так вот, та версия что в 10ом посте работает, причём как в ядре 1.50, так и в 3.71 - что странно. И ОСК там работает, даже на слиме - это подтверждено.

так что если ты на ОСК окончательно не забил, советую посмотреть.

======Правда есть проблема с доступом в ф0 на слиме и вобще на 3.71 М33, хотя на толстой ПСП и 3.71 м33-2(3) я эту траблу заборол. Так что проблема только со слимом.

По сообщениям заграничной резедентуры, это дело можно вылечить -

Цитата:

Try to use vsh mode instead of user mode, this is:

PSP_MODULE_INFO("blahblah", 0x800, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_VSH)

You could even reassign the flashes from it directly. M33-2 and 3 updaters do that, and they don't have any piece of kernel code.
Т.е. вместо всех этих извращений с внешними prx, можно просто всё юзать в главном модуле. Но эт конечно нуждается в тестировании.

Mortem 21.11.2007 11:58

Гляну.
На счёт просмотра тем - так хорошим тоном является обновлять первый пост. (: Ибо кто знает, сколько сотен постов там уже накатали, попробуй-ка найди среди них тот один с очень важным обновлением. (:

pspowner 21.11.2007 12:11

Там сообщений то кот наплакал. Ладно, проехали. Поправил 1ый пост.

Mortem 23.11.2007 12:17

Други добрые, поможите откомпилить под 3.71, чтобы на слимках тоже работало.
http://elmortem.mirgames.ru/download...spsp060src.rar
Вот полные исходники проекта. Версия 0.6.0.
http://elmortem.mirgames.ru/download...gf_0_0_3_6.rar
Вот последняя версия MGF. Версия beta 3.6.
Заранее спасибо.

pspowner 23.11.2007 12:18

Ща попробую.

pspowner 23.11.2007 12:58

Всё откомпилил. У меня на ядре 3.71 работает.
Выставил BUILD_PRX=1 и кучу установил в 20000К
Всётаки впритык нехорошо память выделять, это я про 23500..
Полученный PRX впаковал в ебут вручную, через pack-pbp


Полная сборка. Прошу l3VGV затестить на Слиме.
http://ifolder.ru/4252036

Это для модемного Мортема, только скомпиленный ИПУТ (если повторишь адресок, могу и на почту зафигачить)

http://ifolder.ru/4252089

PS. Мортем, если сам так и не разберёшься как компилить под 3ХХ (влом тебе это или ещё как), то могу я тебе компилить. Вобщем смотри сам.

l3VGV 23.11.2007 19:53

Цитата:

Сообщение от pspowner (Сообщение 570999)
Всё откомпилил. У меня на ядре 3.71 работает.
Выставил BUILD_PRX=1 и кучу установил в 20000К
Всётаки впритык нехорошо память выделять, это я про 23500..
Полученный PRX впаковал в ебут вручную, через pack-pbp


Полная сборка. Прошу l3VGV затестить на Слиме.
http://ifolder.ru/4252036

Это для модемного Мортема, только скомпиленный ИПУТ (если повторишь адресок, могу и на почту зафигачить)

http://ifolder.ru/4252089

PS. Мортем, если сам так и не разберёшься как компилить под 3ХХ (влом тебе это или ещё как), то могу я тебе компилить. Вобщем смотри сам.

Доброго вечера уважаемому собранию, спешу поделиться с вами результатами теста. Для проведения полевых испытаний была использована беленькая псп-слим нерусской сборки и 3го региона с прошивкою 3.71-2. приложение успешным образом стартовало и нарисовало симпотишное меню, реагирует на аналоговый стик и кнопки однако игнорирует д-пад.
за сим откланиваюсь, коли чё стучите в аську :)

Mortem 23.11.2007 21:59

Есть какие-нить идеи из-за чего это может происходить? И ты б аську свою где-нить написал - пообчались бы. (:

pspowner 23.11.2007 23:10

Мортем, на щёт игнора пада - может красную рамочку пожирнее сделать?


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

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