Patrocinadores

www.soporteoptico.com

www.zonavirtual.es

Tema V: Compilando mi Primer Programa

Tutoriales Avanzados Homebrewes

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.

Empezamos:

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)

Preparando la Carpeta

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)

Preparado para Compilar

Ya esta todo listo,ahora cojemos el Compilador.bat el cual ya deberiamos conocer y lo metemos dentro de nuestra carpeta.(Ver imagen)

Compilacion


Pinchar para ampliar.

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)

Compilacion Finalizada con Exito

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:

    Void menu();

    { <- 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

0

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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.

Imagen de crisman999

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

Imagen de crisman999

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

Imagen de Blitzkerj

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 


Imagen de ktix007

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?


Imagen de ktix007

Me ha funcionado

pero me podeis decir como puedo cambiar el color del fondo o poner una imagen?


/,*,/

Imagen de anyonki

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.

Imagen de churristian8

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?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.