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)

CHERTS 06.11.2008 15:12

to ErikPshat А что за бинарник (pbp, prx)? и с какой целью? а то я немного не вьезжаю :scratch_one-s_head:

Astra1111 06.11.2008 16:13

ErikPshat, из какой картинки. Непонимаю.

ErikPshat 06.11.2008 16:30

Мне нужно из *.bmp сделать *.bin
Обычно исходники сорцы распространяют в bin. Вот и мне нужно BMP скомпилировать в BIN.

Astra1111 06.11.2008 16:38

ErikPshat, эээ... А как можно из картинки сделать бинарник? 0_о

CHERTS 06.11.2008 17:20

типа преобразовать в такой вот формат?

const unsigned long __logo_texte_data[] = {
0x89,0x50,0x4e,0x47,0x0a,0x0a,0x1a,0x0a,
.....
0x9d,0x26,0xbe,0x81,0xe2,0x00,0x00,0x00
};

дак это даже и не преобразование

если нет, то какого формата этот файл bin?

Astra1111 06.11.2008 17:53

Хм. Мне самому даже стало интересно.

ErikPshat 06.11.2008 19:28

Короче, есть такая картинка с англо-русским шрифтом:

http://i014.radikal.ru/0811/52/fdf02d42df13.gif

И есть патчер от Andy_maN, в котором эта картинка уже встроена и который патчит PRXы, для внедрения поддержки кириллицы в иностранные программы.

Так вот, в этом патчере есть функция, чтобы использовать свою картинку, если я например хочу нарисовать другой шрифт.
Но использовать просто BMP невозможно. Ему можно подсунуть только бинарный файл *.bin этой картинки. Вот бинарник картинки выше: http://foosa.do.am/_fr/0/lupus.bin
Вот до меня тоже не доходит, как из этой картинки сделан этот бинарник, которым потом патчат файл.

Кстати, по теме, по PSPSDK там есть небольшой урок у Andy_maN: http://foosa.do.am/forum/12-43-1

CHERTS 07.11.2008 07:48

Руссификация - это конечно полезное дело, но по моему таким образом это делать - великий изврат. Проще связаться с разработчиком и попробовать внести исправления в исходники.

Astra1111 07.11.2008 10:27

CHERTS, а если это не представляется возможным?

CHERTS 07.11.2008 10:50

Цитата:

Сообщение от Astra1111 (Сообщение 736144)
CHERTS, а если это не представляется возможным?

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

Astra1111 07.11.2008 10:55

CHERTS, в том то и дело. Что НОРМАЛЬНЫЕ разработчики. Исходников того же Ремурсиклинукси (или как там его) нигде не найти. Иначе он давно бы уже был бы перекомпилирован под ядро 4.хх.

ErikPshat 07.11.2008 14:00

Спасибо за участие. Я уже понял принцип бинарника. Короче даже в хексе нарисованные буквы отображаются в явном виде на вкладке "Character Distribution".

А в бинарнике код буквы записывается по 8 бит в строке, состоящем из 8 строк, получается 64 бит.

Например, если взять букву "Д", то она выглядет так:

00000000
00110000
01001000
01001000
01001000
01001000
11111100
10000100

Значит эта буква "Д" в битовом формате записывается так:
Код:

0000000000110000010010000100100001001000010010001111110010000100
Другое дело, что на картинке нарисовано в одной строке 16 букв. А это значит, что если даже я буду разглядывать готовую картинку в битовом виде, то первая битовая строка будет содержать первую строчку, содержащую все 16 символов по 8 бит. Первые 8 бит будут содержать первую строку из 8-ми первой буквы, следующие 8 бит будут содержать первую строку следующего символа и т.д..

Чтобы извлечь каждый символ отдельно, надо будет тогда брать первые 8 бит из каждой строки в каждой из 8-ми строк последовательно и прибавлять к ним следующие таких же 64 бит, получится 16 символов по 64 бит только в одном ряду символов, итого 1024 бит.

А так как вертикальных рядов символов 16, то получается бинарник будет размером 16384 бит = 2048 байт = 2 кб ровно.
То есть бинарник - это элементарная последовательность символов в чистом виде, без всяких хейдеров и служебной информации, как я понимаю.

Тогда эту последовательность операций можно автоматизировать, даже написав элементарный батник-компилятор.
Ну я ессно представляю, что Andy_maN его давно написал под себя.
По-моему так это должно быть логически.

ALgraFx 07.11.2008 18:35

ErikPshat
скинь в личьку ссылку на оригинальный bmp оригинальный bin и новый (с кирилицей bmp) я делал конвертер bmp в fbm (это шрифт для gba эмулятора) так вот могу переписать свой конвертер под твою задачу.

ErikPshat 09.11.2008 00:25

ALgraFx, да собсно в посте #307 всё есть, чем я располагаю...

ALgraFx 10.11.2008 20:04

ErikPshat
держи - инструкция внутри архива

ErikPshat 10.11.2008 21:23

ALgraFx, ооо, Респект!!!
Щас опробуем... Я так и предполагал, что всё-таки символы надо располагать один за другим.

На Висте кста, выдаёт ошибку.
Список команд не помешал бы...

ALgraFx 10.11.2008 22:27

на висте может не пойти т.к. программа по номерам функции вызывает (без имен функций)

а программа просто пропускает первые 62 байта (заголовок и палитру)
а потом инвертирует данные и обрезает в каждом двойном слове старшие 24бита (на асме это
lodsd
not eax
stosb)
другими словами записывает в bin файл первый байт (после заголовка и палитры) а затем каждый 4ый.

ErikPshat 10.11.2008 22:59

ALgraFx, ага, понял. Нельзя было написать на C# )))

Padre 17.12.2008 16:04

Цитата:

Сообщение от CHERTS (Сообщение 732230)
C Eclipse проблема решилась путем прописывания PATH в Project Properties -> Enviroment указывающей где проживает make.exe и т.п. и PSPSDK, после этого программа скомпилировалась

Пытаюсь разобраться с эклипсом и sdk вообще есть проблема... хочу в Hello world поменять цвет фона функцией pspDebugScreenSetBackColor. Компилятор говорит что такой не знает.
вот код main.c
Код:

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

PSP_MODULE_INFO("My Module",0,1,1);

#define printf pspDebugScreenPrintf

/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
          sceKernelExitGame();
          return 0;
}

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

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

          sceKernelSleepThreadCB();

          return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
          int thid = 0;

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

          return thid;
}


int main()
{
        pspDebugScreenInit();
        pspDebugScreenSetBackColor(200,125,60);
        SetupCallbacks();
        printf("Hello world");
        sceKernelSleepThread();
        return 0;
}


CHERTS 18.12.2008 07:23

у pspDebugScreenSetBackColor указывается один параметр

например
pspDebugScreenSetBackColor(0);


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

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