› Foros › Multiplataforma › Desarrollo
/*
_____ ___ ____
____| | ____| MrSiir / SiirLabs
| ___| | (C)2005, MrSiir (mrsiir@gmail.com)
------------------------------------------------------------------------
stars.h
Stars
------------------------------------------------------------------------
*/
#ifndef STARS_H
#define STARS_H
#define MAX_STARS 200 // Numero de estrellas
#define SCREEN_WIDTH 480 // Ancho de la pantalla
#define SCREEN_HEIGHT 272 // Alto de la pantalla
// Las estrellas se mueve hacia la:
#define STARS_LEFT 0 // Izquierda
#define STARS_RIGHT 1 // Derecha
#define STARS_UP 2 // Arriba
#define STARS_DOWN 3 // Abajo
// Estructura para las estrellas
typedef struct _star
{
int x; // Posicion X
int y; // Posicion Y
int speed; // Velocidad de la estrella
unsigned short color; // Color
} star;
star stars[MAX_STARS]; // Array con las estrellas
void stars_new(int n); // Inicializamos una estrella en la posicion n
void stars_init(void); // Inicializamos todas las estrellas de 0 a MAX_STARS
void stars_draw(int stars_dir); // Pintamos todas las estrellas
#endif
/*
_____ ___ ____
____| | ____| MrSiir / SiirLabs
| ___| | (C)2005, MrSiir (mrsiir@gmail.com)
------------------------------------------------------------------------
stars.c
Stars
------------------------------------------------------------------------
*/
#include "stars.h"
#include "mtrand.h"
/*
* Inicializamos una estrella en la posicion n
*/
void stars_new(int n)
{
stars[n].x = rand() % SCREEN_WIDTH; // Posicion X inicial entre 0 y SCREEN_WIDTH
stars[n].y = rand() % SCREEN_HEIGHT; // Posicion Y inicial entre 0 y SCREEN_HEIGHT
stars[n].speed = (rand() % 4) + 1; // Velocidad de la estrella entre 1 y 4
stars[n].color = rgb2col(0,0,0); // Color inicial negro
// Cambiamos el color segun la velocidad
if(stars[n].speed == 1) stars[n].color = rgb2col(255,255,255); // Blanco
if(stars[n].speed == 2) stars[n].color = rgb2col(211,211,211); // Gris claro
if(stars[n].speed == 3) stars[n].color = rgb2col(128,128,128); // Gris
if(stars[n].speed == 4) stars[n].color = rgb2col(255,255,0); // Amarillo
}
/*
* Inicializamos todas las estrellas de 0 a MAX_STARS
*/
void stars_init(void)
{
int n;
// Inicializamos el generador de numeros aleatorios
srand(SCREEN_WIDTH);
// Inicializamos todas las estrellas
for(n=0; n<MAX_STARS; n++)
{
stars_new(n);
}
}
/*
* Pintamos todas las estrellas
*/
void stars_draw(int stars_dir)
{
int n;
// Recorremos todas las estrellas para moverlas y pintarlas
for(n=0; n<MAX_STARS; n++)
{
// Las estrellas pueden hacia la izquierda, derecha, arriba o abajo
switch(stars_dir)
{
case STARS_LEFT:
// Decrementamos la posicion X
stars[n].x -= stars[n].speed;
if(stars[n].x <= 0) stars_new(n);
break;
case STARS_RIGHT:
// Incrementamos la posicion X
stars[n].x += stars[n].speed;
if(stars[n].x >= SCREEN_WIDTH) stars_new(n);
break;
case STARS_UP:
// Decrementamos la posicion Y
stars[n].y -= stars[n].speed;
if(stars[n].y <= 0) stars_new(n);
break;
case STARS_DOWN:
// Incrementamos la posicion Y
stars[n].y += stars[n].speed;
if(stars[n].y >= SCREEN_HEIGHT) stars_new(n);
break;
}
// Pintamos la estrella en su posicion X,Y con su color
pgDrawFrame(stars[n].x, stars[n].y, stars[n].x, stars[n].y, stars[n].color);
}
}
/*
_____ ___ ____
____| | ____| MrSiir / SiirLabs
| ___| | (C)2005, MrSiir (mrsiir@gmail.com)
------------------------------------------------------------------------
main.c
Stars
------------------------------------------------------------------------
*/
#include "pad.h"
#include "pg.h"
#include "colors.h"
#include "mtrand.h"
#include "stars.h"
#include "image_psp.c"
/*
* Punto de entrada del programa establecido por startup.s
*/
int xmain(int argc, char *argv)
{
pgInit(); // Iniciamos el modo grafico
pgScreenFrame(2,0);
CtrlInit(0); // Iniciamos el PAD
pgFillvram(0); // Vaciamos
pgScreenFlipV(); // Pintamos
int stars_dir = STARS_LEFT; // Inicialmente hacia la izquierda
stars_init(); // Iniciamos las estrellas
// Bucle infinito
while(1)
{
// Leemos el PAD
readpad();
// Si presionan cambiamos la direccion
if(new_pad & CTRL_UP) stars_dir = STARS_UP; // Arriba
if(new_pad & CTRL_DOWN) stars_dir = STARS_DOWN; // Abajo
if(new_pad & CTRL_LEFT) stars_dir = STARS_LEFT; // Izquierda
if(new_pad & CTRL_RIGHT) stars_dir = STARS_RIGHT; // Derecha
pgFillvram(0); // Vaciamos
stars_draw(stars_dir); // Printamos las estrellas
pgPrint2(10, 15, white, "PSP Stars By"); // Printamos el texto 1 en blanco
pgPrint2(23, 15, bluepsp, "MrSiir"); // Printamos el texto 2 en azul
pgBitBlt(10, 10, 131, 42, 1, image_pspData); // Printamos la imagen
pgScreenFlipV(); // Printamos
}
// Nunca llegaremos a este punto ;-)
return 0;
}
Paloseco escribió:Una pregunta, para los programas de PSP hay que programar siempre en modo grafico, o sea C++ no? Lo digo por lo del hello world que no vale un simple printf...
#include "pg.h"
int xmain(int argc, char *argv)
{
pgInit();
pgScreenFrame(2,0);
CtrlInit(0);
pgFillvram(0);
pgScreenFlipV();
while(1)
{
pgFillvram(0);
pgPrint2(0, 0, 0xffff, "Hello World!!!");
pgScreenFlipV();
}
return 0;
}
AlvaroBF escribió:alvaro@ubuntu:~/pspstars $ make
/ee/bin/ee-gcc -march=r4000 -g -mgp32 -c -xassembler -O -o startup.o startup.s
make: /ee/bin/ee-gcc: No se encontró el programa
make: *** [startup.o] Error 127
alvaro@ubuntu:~/pspstars $
Como deberia hacerlo?
mrsiir@ubuntu:~/ps2dev/pspstars$ make
/usr/local/ps2dev/ee/bin/ee-gcc -march=r4000 -g -mgp32 -c -xassembler -O -o startup.o startup.s
/usr/local/ps2dev/ee/bin/ee-gcc -march=r4000 -O3 -fomit-frame-pointer -g -mgp32 -mlong32 -c main.c -o main.o
/usr/local/ps2dev/ee/bin/ee-gcc -march=r4000 -O3 -fomit-frame-pointer -g -mgp32 -mlong32 -c pg.c -o pg.o
/usr/local/ps2dev/ee/bin/ee-gcc -march=r4000 -O3 -fomit-frame-pointer -g -mgp32 -mlong32 -c pad.c -o pad.o
/usr/local/ps2dev/ee/bin/ee-gcc -march=r4000 -O3 -fomit-frame-pointer -g -mgp32 -mlong32 -c mtrand.c -o mtrand.o
/usr/local/ps2dev/ee/bin/ee-gcc -march=r4000 -O3 -fomit-frame-pointer -g -mgp32 -mlong32 -c stars.c -o stars.o
/usr/local/ps2dev/ee/bin/ee-ld -O0 startup.o main.o pg.o pad.o mtrand.o stars.o -M -Ttext 8900000 -q -o out > out.map
./bin/outpatch
successed filesize:0000C1AE modulename:00005B64 scemoduleinfo:000090B3
./bin/elf2pbp outp "PSP Stars"
Elf2Pbp v0.3 - loser 2005
successfully generated pbp file
alh4k escribió:Voy a probar y luego te cuento. Gracias
Efectivamente era eso muchas gracias y ¿ Porque ?
Paloseco escribió:Hombre, si quieres entender lo que hace el programita convendria tener una base solida de C y luego a partir de ahi C++, pero para compilar y eso no hace falta saber programar. Lo que si convendria es que tuvieses algunos conocimientos de Linux, asi en general aunque eso se aprende sobre la marcha asique puedes ir preguntando y te vamos diciendo. El mk.sh es un script del shell (o interprete de comandos) que hace automaticamente una serie de comandos sin que tu tengas que hacerlos uno por uno. Para que te hagas una idea seria como en .bat en windows pero mas evolucionado.
Los $PS2DEV son variables de entorno para que al ejecutar un comando te busque en ese directorio, como las que tienes en Windows si vas a Mi PC -> propiedades -> Opciones avanzadas -> Variables de entorno y asi si desde msdos pones un comando sin la ruta completa ya te busca ahi, es como si vas a Inicio->ejecutar y pones mspaint te abre el Paint porque esta en C:\Windows\system32\ que es una de las rutas que tienes en las variables de entorno.
Asique ya sabes, pregunta cualquier cosa que no sepas
Gremio escribió:
Muchas gracias por la aclaracion, la verda es que no tengo conocimientos de programacion en C ni siquiera bases de linux ¿lo tengo chungo no?
Gremio escribió:Okis, tanks
¿entonces lo suyo es empezar por el primer tuto que se a currao MrSiir[S]?
Me refiero a Como programar para PSP (mini-HOWTO)
Salu2
Paloseco escribió:Una pregunta: Lo vas hacer desde linux o desde windows con el cygwin?
MrSiir[S escribió:]Buenas, pues si, siempre en modo gráfico, en la PSP no existe el modo texto o modo consola, solo existe el modo gráfico, se puede programar en C++ pero todavía no se ha podido con el GCC, de momento todo es C.
neoisback escribió:Alguien ha probado a compilar con el SDK de PSP??
Ninguna, todo depende de lo que pongas en el startup.s, puedes poner main, kmain, xmain, etc..Juen escribió:Que diferencia hay entra main y xmain? en unos codigos veo uno y en otros otro
No, el Eclipse sirve para Java, C/C++, PHP, Perl, Webs con Tomcat, etc... Todo funciona con sus plugins, por ejemplo para C/C++ el plugin se llama CDT que es C/C++ Development Tools, puedes encontrar más información en la Web del Eclipse http://www.eclipse.orgPaloseco escribió:Pero el eclipse no era solo para Java?