Bien, llegado a este punto del tutorial deberiamos tener el Entorno del PC preparado para compilar cualquier programa (si no lo tienes revisa los tutoriales anteriores, usando el menu derecho). No vamos hacer mas incapie en definiciones y mas teoria, puesto que lo mejor para aprender es ponerse a practicar. De este modo lo entenderemos mejor todo. Por eso vamos a empezar a crear nuestro 1º Programa para PSP desde cero.
* Os recuerdo que las Definiciones y Librerias espuestas anteriormente, son para crear aplicaciones en MODO USER (Validas para todos los firmwares) y en MODO KERNEL (Validas para firmwares con kernel 1.50 solamente)
Vamos a comenzar a crear nuestra primera aplicacion de PSP. La aplicacion que vamos a crear es muy simple,se trata de una aplicacion cuya funcion sera ocultar y mostrar una carpetas. Esta aplicacion la crearemos en modo user para que funcione en todos los custom firmwares.
Lo primero que debemos hacer es crear una carpeta,la la podeis llamar como querais,ejemplo: "Mi Programa"
Ahora descargais la libreria Astaroth y las libreria graficas y power (Encontrareis las descargas en Archivos Adjuntos).Una vez tengamos las librerias las incluimos dentro de nuestra carpeta anteriormente creada. (ver imagen)
Una vez tengamos la carpeta preparada con las librerias,al igual que se muestra en la imagen,creamos un nuevo txt y le llamamos MAIN.C,cambiando la extension del archivo .TXT por .C. y le metemos dentro nuestra carpeta con las librerias.
Ahora abrimos el archivo MAIN.C con el wordpad,ultraedit,etc,etc (sirve cualquier editor de texto) y escribimos en el lo siguiente:
// Ejemplo creado por Marce82 //
#include "Astaroth.h" // Incluimos la libreria Astaroth //
PSP_MODULE_INFO("Mi Programa", 0, 1, 0); // Definimos el nombre del modulo //
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER); // Definimos el MODO de la aplicacion en este caso es MODO USER //
void menu() // Definimos nuestro Menu (Esto es un ejemplo de como crear una funcion propia) //
{
clearscreen(); // Limpia la Pantalla //
printf(" Pulse X para Ocultar la Carpeta PHOTO\n"); // Imprime texto en Pantalla //
printf(" Pulse O para Mostrar la Carpeta PHOTO\n\n"); // Imprime texto en Pantalla //
printf(" Pulse Triangulo para Salir de la Aplicacion"); // Imprime texto en Pantalla //
CtrlData pad; // Define el control del pad //
while (1) // Comenzamos la definicion de botones //
{
CtrlBuffer(&pad, 1); // Lectura del Buffer de los botones definidos anteriormente //
if (pad.Buttons & cross) // Definimos al pulsar el Boton Equis //
{
clearscreen(); // Limpia la Pantalla //
printf("Ocultando Carpeta... Espere..."); // Imprime texto en Pantalla //
rename("ms0:/PSP/PHOTO","ms0:/PSP/TOPSECRET"); // Renombra el Archivo o Carpeta //
delay(1*1000*1000); // Retardo de Tiempo (1 Segundo) //
menu(); // Regresa al menu //
}
if (pad.Buttons & circle) // Definimos al pulsar el Boton Circulo //
{
clearscreen(); // Limpia la Pantalla //
printf("Mostrando Carpeta... Espere..."); // Imprime texto en Pantalla //
rename("ms0:/PSP/TOPSECRET","ms0:/PSP/PHOTO" ); // Renombra el Archivo o Carpeta //
delay(1*1000*1000); // Retardo de Tiempo (1 Segundo) //
menu(); // Regresa al menu //
}
if (pad.Buttons & triangle) // Definimos al pulsar el Boton Triagulo //
{
clearscreen(); // Limpia la Pantalla //
printf("Saliendo... Espere..."); // Imprime texto en Pantalla //
delay(2*1000*1000); // Retardo de Tiempo (2 Segundo) //
exit(); // Sale de la Aplicacion //
}
} // Siempre que vamos a definir un comando,se abre el "{" recordad que luego ahy que cerrarlos todos "}"
}
int main() // Definimos aqui el Programa //
{
CtrlData currentPad, lastPad; // Define el control del pad //
CtrlBuffer(&lastPad, 1); // Lectura del Buffer de los botones definidos anteriormente //
screeninit(); // Inicia Pantalla para poder Escribir en ella //
menu(); // Llama a nuestra Definicion (En este caso a nuestro menu) //
}
Ahora salimos del editor de texto guardando los cambios en MAIN.C
*Este es el programa,al lado de cada funcion podeis observar un pequeño cometario explicativo,echarle un vistazo.
Ahora vamos a crear el Makefile necesario para compilar nuestro programa,para ello creamos un nuevo archivo txt y le llamamos "Makefile" (Sin extension),lo abrimos con cualquier editor de texto y escribimos lo siguiente:
Cita:
TARGET = MiPrograma
OBJS = main.o
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LDFLAGS =
LIBS =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Mi Programa de PSP
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Salimos del editor de texto y guardamos,ya tenemos nuestra primera aplicacion lista para ser Compilada.(Ver imagen)
Ya esta todo listo,ahora cojemos el Compilador.bat el cual ya deberiamos conocer y lo metemos dentro de nuestra carpeta.(Ver imagen)
Ahora solo debemos clickear 2 veces encima del Compilador.bat,se mostrara una pantalla de Ms-Dos mostrando el proceso de Compilacion y Listo!!! (Ver imagen)
Como observareis,se ha creado un Eboot.pbp en nuestra carpeta,ese es el resultado que esperabamos,ahora a testearlo.
* Es importante que cada vez que abrais una nueva funcion,nose os olvide cerrarla,hablo de las sangrias.Ejemplo:
{ <- Abrimos y comenzamos a definir
Definimos funcion
} <- Cerramos
** La Aplicacion que hemos creado esta en Modo User,esto significa que no requiere kernel 1.50,por lo cual debera ir en PSP/GAME y no GAME150
*** Realmente para crear esta aplicacion,no hace falta las librerias,con el main.c y el makefile sobraria,pero las añado para una futura actualizacion de la aplicacion,de este modo solo ahi que modificar el main.c en un futuro
Comentarios
Duda
tengo ya todo preparado para compilar le doy dos veces clic en el compilador y me pone:
Creando archivo... espere...
"make" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutabes.
Terminado.
Como hago para que me salga bien porque he seguido todos los pasos pero me pone eso y no consigo compilar.
Un error creo
Me dice lo siguiente:
Creando archivo... Espere...
make: *** h:/PSPDev/psp/sdk: is a directory. Stop
Terminado.
Creo que es un error
Ya se
pues lo tuve que descubir yo mismo, por que aqui no me quisieron ayudar
Como
lo hiciste?
Yo tengo el mismo error y si me podrias ayudar.
Gracias
Creaste el entorno en
Propiedades de Sistema?
Tambien puede ser que hayas programado en Win Vista, porque en Vista no arranca el compilador, solo en XP.
Salu2
Como lo ago para que
Como lo ago para que pulsando varios botones a la vez me oculte la carpeta es k he puesto circle+square+cross y lo que hace es k puedo usar todos tres para ocultar la carpeta pero yo quiero usarlos todos a la vez
/,*,/
¿si lo que se quieres
¿si lo que se quieres obtener es uninstalador de archivos en la F0 que habra que poner en MAIN.C?
Me ha funcionado
pero me podeis decir como puedo cambiar el color del fondo o poner una imagen?
/,*,/
algo de error sobre el makefile
Lo primero que quiero hacer es dar las gracias a todos los que han colaborado en crear todos y cada uno de los Homebrew ¡Gracias a vosotros el mundo de la PSP se expande cada dia mas!.
Ahora quiero pediros ayuda con un asunto. Miren, e ido siguiendo cada uno de los pasos para crear tu programa. Ahora bien, cuando abro el compilador aparece la ventana de MS-DOS y me pone lo siguiente:
comando o nombre de archivo no valido
comando o nombre de archivo no valido
Creando Archivo.. Espere
psp-gcc -I. -IC:\pspdev/psp/sdk/include -O2 -G0 -wall -D_PSP_FW_VERSION=150 -c -o main.o main.c
psp-gcc.exe: _spawnv: No such file or directory
MAKE: *** [main.o] Error 1
Terminado.
y ahi se queda. Estaria muy agradecido si me contestasen.
Me pone error
Hola a todos. Tengo un problema. A la hora de dar doble clic en el
compilador me pone en la ventana de MS-DOS un monton de warning y error
con el main.c que es el que adjuntais con el tutorial.
Espero que me ayudeis y gracias anticipadas
Salu2
Scenebeta.com, una web para gobernarlas a todas.
error
hola ami me da este error:
Creando Archivo... Espere...
psp-gcc -I. -IC:/PSPDev/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -c
-o main.o main.c
In file included from main.c:3:
Astaroth.h: In function 'writetoflashone':
Astaroth.h:96: warning: implicit declaration of function 'open'
Astaroth.h: At top level:
Astaroth.h:237: warning: 'pspDebugScreenPrintf' is an unrecognized format functi
on type
Astaroth.h: In function 'loadusb':
Astaroth.h:301: warning: implicit declaration of function 'pspSdkLoadStartModule
'
Astaroth.h: At top level:
Astaroth.h:364: warning: 'pspDebugScreenPrintf' is an unrecognized format functi
on type
Astaroth.h:489: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
Astaroth.h:489: warning: its scope is only this definition or declaration, which
is probably not what you want
Astaroth.h:500: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
Astaroth.h:511: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
Astaroth.h:522: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
Astaroth.h:533: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
Astaroth.h:544: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
Astaroth.h:555: warning: 'struct SceKernelLoadExecVSHParam' declared inside para
meter list
main.c: In function 'main':
main.c:52: warning: unused variable 'currentPad'
main.c:57: warning: control reaches end of non-void function
psp-gcc -I. -IC:/PSPDev/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -L.
-LC:/PSPDev/psp/sdk/lib main.o -lpspdebug -lpspdisplay -lpspge -lpspctrl -lp
spsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -
lpspuser -lpspkernel -o MiPrograma.elf
psp-fixup-imports MiPrograma.elf
mksfo 'Mi Programa de PSP' PARAM.SFO
psp-strip MiPrograma.elf -o MiPrograma_strip.elf
pack-pbp EBOOT.PBP PARAM.SFO NULL \
NULL NULL NULL \
NULL MiPrograma_strip.elf NULL
rm -f MiPrograma_strip.elf
Terminado
EDITO: e usado vuestros makefile y main
pero otra cosa: que tengo que hacer para testear el programa?
meter el eboot.pbp en PSP/GAME?