Урок 5: Новые методы программирования на PSP, глава 1

Итак, мы создали среду для разработки, написали нашу первую программу, изучили некоторые методы программирования и занимались программированием изображений. Чем же мы займемся теперь? Вы находитесь на этой странице и, держу пари, не удивляетесь тому, что уже дошли до 5 урока. Мы будем улучшать наши навыки программирования (говоря «мы» я подразумеваю «вас») и познакомимся с расширенными понятиями.

Хотя «расширенный» — это довольно субъективно. Мы по-прежнему будем формировать основу программирования в С (Си), которая поможет вам создать более сложные приложения. По окончании данного урока вы должны будете знать, как «разогнать» PSP до его истинной скорости в 333 МГц, как вывести текст на экран (графический текст, а не текст отладки, использованные ранее) и как работают цвета в PSP.

Программу, которую мы собираемся создать в этом уроке, называется «backround changer». Мы собираемся научить пользователя выбирать цвет фона и создавать свой собственный подобно тому, как мы выводили цветовые изображения на экран.

Во-первых, у нас есть какой-то фон. В большинстве случаев люди имеют неправильное понятие о «разгоне» PSP. Из-за своих предубеждений «разгон» ассоциируется у них с тепловыми проблемами и повреждениями аппаратных средств. Но дело не только в PSP. В действительности производитель PSP поставляет неполную комплектацию с данным товаром. Есть несколько версий, почему Sony делает это. Одна их них заключается в том, что максимальный «разгон» быстро будет разряжать батарею, что неблагоприятно повлияет на популярность Sony (для нас, не беспокоящихся по этому поводу, вращение UMD диска забирает гораздо больше заряда батареи по сравнению с загрузкой карты памяти). По другой версии Sony хотел, чтобы разработчики написали оптимизированный код. И третья (на мой взгляд, более вероятная) состоит в следующем: они хотели позволить разработчикам использовать максимальную скорость тогда, когда выйдут более мощные игры. Так или иначе PSP обычно достигает 222 МГц. Если вам требуется большее количество заряда батареи для своих программ, то опция — «разгон». Программа, которую мы будем составлять, не нуждается в таком питании. Однако самое время рассказать об этом понятии.
Итак, с этого момента мы начинаем составлять нашу программу. Вам необходимо загрузить данный zip-файл для этого урока. Вы можете скачать его здесь. Вы должны поместить main.c файл в ту же самую папку, в которую извлекаете файлы из zip-файла.

#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspctrl.h>
#include <stdio.h>
#include <psppower.h>
#include "graphics.h"

Принимая во внимание предыдущие уроки, вам все это должно быть знакомо. Единственное, что может показаться новым для вас, является включенный файл psppower.h. Данный файл содержит функции, которые мы будем использовать для того, чтобы изменить тактовую частоту PSP.

С помощью более знакомого кода:

PSP_MODULE_INFO("Background Changer", 0, 1, 1);

#define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16))

Помните, как в уроке 2 мы только упомянули об этой строке без подробного объяснения ее функционирования. Думаю, сейчас хороший момент для этого. Первый параметр – ваш идентификатор программы, как правило, это название вашего приложения. Второй параметр позволяет вам присваивать атрибуты. Для большинства ваших программ понадобится только 0, но если вы будете создавать более мощные приложения, то вам необходимо будет переключиться на «0×1000″. Третий параметр для основной версии, четвертый для вспомогательной версии. Они предназначены только для того, чтобы документировать номер версии вашей программы.

Теперь стандартные обратные вызовы:

/* 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, 0×11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}

return thid;
}

На этом заканчивается часть установки в данном учебном руководстве. Смело переходим ко второй части данного урока.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: