Sie sind auf Seite 1von 31

PROGRAMACIN EN PSP

ALBERT PAOS
DAVID CUENCA
ANTONI SERRA
PSE





1

INDICE


INTRODUCCIN ........................................................... 3

HISTORIA PSP ............................................................. 4
Especificaciones tcnicas ............................................ 5
XrossMediaBar ............................................................ 9
Desarrollador .......................................................... 9

Legalidad pirateo PSP ................................................. 10

HOMEBREWS ............................................................ 15

PROGRAMACIN EN PSP: LUA ..................................... 19

PRCTICA: JUEGO EN LUA FUNCIONANDO EN PSP ......... 20

JUEGO EN PSP ........................................................... 29

COMPARATIVA Y CONCLUSIONES ................................ 29

BIBLIOGRAFIA ........................................................... 31
















2
INTRODUCCIN

La industria del videojuego es, a da de hoy, el sector con una facturacin mayor
dentro del sector del ocio. En los ltimos aos ha superado incluso a la
todopoderosa industria discogrfica.
Dentro del sector, en el presente la importancia de las consolas de sobremesa ha
disminuido de forma progresiva para dejar paso a las cada vez ms crecientes
consolas porttiles. El monopolio de Nintendo con su Game Boy ha tocado a su fin,
y a da de hoy el de las porttiles es la que posee unas mayores perspectivas de
desarrollo a largo plazo. Su capacidad de juego en cualquier parte ha propiciado
que cada vez ms usuarios descubran las posibilidades y ventajas que ofrece este
sistema.
Curiosamente, su desarrollo ha evolucionado en paralelo con el desarrollo de
software casero para ellas; por algn motivo, los usuarios tienen mas tendencia a
volcarse en el desarrollo de las porttiles; seguramente debido a que el hecho de
poder usarse en cualquier parte favorece el uso de muchas aplicaciones extra (tales
como lectores de pdf, reproductores de msica, o receptores wifi) que no ofrece de
base el fabricante.
Con todo, la complejidad es mayor de lo que podra creerse a priori, pues la
compaa desarrolladora no ofrece ninguna facilidad para ello.
De todas las consolas porttiles en el mercado, la PSP es la que mas grupos de
desarrollo amateurs ha generado a su alrededor: entre otros motivos por ser la
consola ms potente y con mas potencial; de hecho es casi un ordenador en
miniatura.
En el siguiente documento ofreceremos una visin del desarrollo de software
casero para la consola PSP, desde el punto de vista legal, tcnico y de desarrollo,
pues crearemos un minijuego casero que funciona en una consola PSP.











3
HISTORIA PSP

Sony anunci por primera vez el desarrollo de la Playstation Portable en una
conferencia de prensa previa al E3 2003. Aunque no se present ningn dato
referente al sistema ni en la conferencia ni en el E3, Sony si mostr una lista con
extensos detalles referentes a la nueva consola.
EN el CEO de Sony Computer Entertainment, Ken kutaragi llam al dispositivo el
Walkman del siglo 21 en referencia a las capacidades multimedia de la consola.
Diversas webs de videojuegos quedaron impresionadas por las capacidades de la
consola y estaban expectantes por el potencial que poda tener como plataforma de
videojuegos.
Las primeras imgenes conceptuales de PSP aparecieron en Noviembre de 2003 en
el Sony Corporate Strategy Meeting y mostraron una PSP con botones anchos y sin
stick analgico. Aunque algunos expresaron su preocupacin por la falta de stick
analgico, esos miedos se disiparon cuando la PSP fue presentada oficialmente en
la conferencia de prensa de Sony durante el E3 de 2004. Adems de anunciar mas
detalles sobre el sistema y sus accesorios, Sony tambin mostr una lista con 99
compaas desarrolladoras que haban mostrado su apoyo para la nueva consola.
Diversas demos de PSP como el Metal Gear Acid de Konami, y el Wipeout Pure de
SCE Studio Liverpool se mostraron en esa conferencia.
Lanzamiento
El 17 de Octubre de 2004 Sony anunci que la PSP se lanzara en Japn el 12 de
Diciembre de 2004 a un precio de 19800 yenes (185 euros) para el modelo base, y
24800 yenes (unos 230 euros) para el Sistema Value. La consola fue lanzada con
xito con ms de 200,000 unidades vendidas el mismo da.
Sony anunci el 3 de Febrero de 2005 que la PSP saldra a la venta en
Norteamrica el 24 de Marzo de 2005 en una configuracin a un precio
recomendado de 249$. Algunos expresaron su preocupacin debido al alto precio,
que era casi 20 dlares mas alto que el precio en Japn, y mas de 100$ de
diferencia con la Nintendo DS. A pesar de ello, el lanzamiento americano de PSP fue
un xito, aunque dos semanas despus hubo noticias de que el sistema no se
estaba vendiendo tan bien como se esperaba a pesar de las declaraciones de Sony
de que se haban vendido 500,000 unidades en los dos primeros das.

4
PSP deba haber sido lanzada el mismo da en las regiones PAL (como Europa) y en
Norteamrica, pero el 15 de Marzo de 2005, Sony anunci que el lanzamiento en
las regiones PAL se retrasara debido a la alta demanda de la consola en
Norteamrica en Japn. Un mes despus, el 25 de Abril de 2005, Sony anunci que
PSP se lanzara en la regin PAL el 1 de Septiembre de 2005 por 249. Sony
defendi que el alto precio, que era cerca de 100$ mayor que en Norteamrica,
argumentando que los consumidores norteamericanos tenan que pagar tasas
locales y que el IVA era mayor en el Reino Unido que en USA. A pesar del alto
precio, las consolas de la regin PAL fue un rotundo xito, vendiendo mas de
185,000 unidades en el Reino Unido solamente, mas del doble que las ventas del
1er da de Nintendo DS (87,000). El sistema tambin disfrut de un gran xito en
otras regiones PAL con ms de 25,000 unidades reservadas en Australia y cerca de
un milln por toda Europa en la primera semana





Especificaciones tcnicas
Unidad de Procesamiento Central: Custom CPU multipropsito Sony
"Allegrex" basado en MIPS de velocidad configurable en 1/333 MHz, incluye un
CPU basado en MIPS32 Rk-4 de 32 bits, un FPU (Unidad de Coma Flotante) y un
VFPU de clculo vectorial. Tambin incluye un procesador conocido como "Media
Engine"; siendo tambin un CPU basado en MIPS32 Rk-4 de 32 bits dedicado al
manejo de audio/video por hardware y un DSP (Procesador digital de seal)
programable "Virtual Mobile Engine". El "Media Engine" tiene funcionalidades
similares al CPU principal y sirve como equivalente ante la falta de VPU.

Memoria: 32 MB RAM de memoria principal (64 MiB en PSP Slim & Lite) y 4 MiB
DRAM embedida; los 4 MiB corresponden a 2 MiB para el chip grfico y a 2 MiB
del "Media Engine", ambos CPUs contienen 16KB de cach de instrucciones y
cach de datos y 16KB de scratchpad, adems de 32 MiB de memoria Flash
NAND (usada para guardar configuraciones y archivos del sistema).

5
Chip grfico: Custom GPU de velocidad configurable en 1/166 MHz con 2 MiB
de memoria interna e interfaz de 512 bits soportando renderizado de polgonos
y NURBS, iluminacin direccional por hardware, environment projection y
texture mapping, compresin de texturas y mosaicos, niebla, alpha blending,
depth and stencil test, vertex blending para efectos de morphing y dithering;
todo en 16 o 24 bits de profundidad de color. El Chip grfico tambin maneja la
salida de vdeo. El sistema es capaz de mover unos 33 millones de polgonos
iluminados y tratados, con un ratio de 664 millones de pxeles por segundo.
Chip de Sonido: Custom DSP configurable Sony "Virtual Mobile Engine" Sonido
3D, Multi-Canal 7.1ch.
Pantalla: 4,3 pulgadas, 16:9 widescreen TFT LCD 480 x 272 pxeles (16.77
millones de colores)
Cdecs: ATRAC3 plus, AAC, MP3, WMA, AVC/@MP for Picture / Movi, H.264
(MPEG-4 Part 10). Soporte de imgenes en formato JPEG, GIF, TIFF, BMP y
PNG.
Media: Lectura de datos desde sistema de discos pticos UMD (Universal Media
Disk) y Memory Stick PRO DUO, conexin y manejo remoto del sistema
PlayStation 3. (Salida de TV en PSP Slim & Lite)
WIFI: Wi-Fi IEEE 802.11b permite conexin Ad-HOC e Infraestructura con otras
PSP y con Internet con jugabilidad para 2/16 jugadores simultneamente. El
software de sistema incluye un Navegador Web basado en Access NetFront.
Gamesharing: Algunos ttulos del sistema PSP soportan la transferencia de
juego en modo multijugador con otras consolas que no cuenten con el juego en
cuestin, esto se logra enviando los datos a travs de conexin Ad-Hoc y
cargndolos sobre la memoria RAM. El soporte de esta opcin est limitado a los
juegos que hacen uso de ella.
Accesorios: Cmara de video de 1.2 mega pxeles "Chotto Shot", receptor de
seal GPS, receptor de TV digital y PSP Headset (incluido con ciertos ttulos)
Interfaz: XMB "XrossMediaBar" desarrollada por Sony y presente en sus
nuevos televisores as como en el sistema PlayStation 3.
Medidas: 190 mm de anchura (110 de pantalla TFT) y 74 mm de altura.
Peso: 260 g sin incluir batera (320 gramos con batera).
Diseo: Shin'ichi Ogasawara para Sony Computer Entertainment (subsidiaria
de Sony Corporation)
6

PSP Desmontada, vemos la placa base y la tarjeta WIFI
(parte inferior)

Diagrama de bloques del sistema PSP

7
Especificaciones del disco UMD

Imagen del disco UMD
Sony originalmente desarroll el UMD como un medio de almacenamiento
multimedia en tres versiones diferentes: PSP Game, UMD Video y UMD Audio.
Existe la posibilidad de usarse en un futuro para almacenar datos; es el caso del
HI-MD. En el momento de la salida de la Playstation Portable, el formato PSP Game
obtiene un soporte muy amplio pero en el caso de UMD Video no consigue el
soporte internacional que se esperaba debido a la fortaleza del DVD Video. En
cuanto al UMD Audio su soporte inicial fue nulo debido sobre todo a la fuerte
competencia de soportes mundialmente aceptados como el Compact Disc u otros
soportes como el Minidisc, DVD Audio y SACD.
Dimensiones: Aprox. 6564x4.2 (mm)
Peso: Aprox. 10g
Dimetro: 60 mm
Capacidad mxima: 1.8GB
Longitud de onda del lser: 660nm (Lser rojo)
Encriptacin: AES 128bit
Utilidades: Juego de PSP, Audio UMD (codec ATRAC3plus, PCM, (MPEG4 AVC),
UMD Video (codec MPEG4 AVC, ATRAC3plus, Caption PNG)

8
XrossMediaBar

XMB en PSP PSX XMB en una Sony BRAVIA TV

El XrossMediaBar (XMB) es la interfaz de usuario grfica de Sony para PSP y PS3
La interfaz incluye iconos que se esparcen horizontalmente a travs de la pantalla.
La navegacin mueve los iconos en vez del cursor. Estos iconos se usan como
categoras para organizar las opciones disponibles para el usuario. Cuando un icono
es seleccionado en la barra horizontal, diversas opciones mas aparecen en la
vertical, encima y debajo de l (seleccionable con el pad)
Usado originalmente en la PSX, el XroosMediaBar se usa como interfaz estndar
tanto en PSP como en PS3. Desde 2006 tambin se utiliza en los televisores WEGA,
BRAVIA desde la 3000 (solo en las series S y superior) y en el receptor de alta
salida STR-DA 5200ES AV. Los mens de los Sony Ericsson K859 i W910 tambin
son una versin del XMB, dando a entender que el XMB ser lo prximo que se
implemente en los telfonos Sony Ericsson. Tambin se ha confirmado para la
prxima generacin de las televisiones BRAVIA
Desarrollador
Q-Games Ltd, una pequea compaa de desarrollo con sede en Kyoto, Japn
desarroll la tecnologa grfica que hay tras el XMB, su estilizado fondo i los
visualizadores. La versin para PS3 usa una versin del explorador NetFront de
AccessCo. Como su explorador web interno. Es el mismo que en la PSP (Sony-
Branded NetFront 2.81) con las misma interface, mens y teclado virtual. Sony
tambin ha colaborado con la Universidad de Stanford para traer el proyecto
Folding@home a la PS3. Una vez descargado, el programa puede ser configurado
para funcionar cuando el sistema esta sin hacer nada o ejecutado manualmente
desde el XMB
9
Legalidad pirateo PSP
Actualmente se ha declarado una sentencia en el Tribunal de Valencia sobre la
legalidad de piratear la PSP. La sentencia fue la siguiente:
Conforme al Art. 270-3 del Cdigo Penal, se castiga a quien fabrique, importe,
ponga en circulacin o tenga cualquier medio especficamente destinado a facilitar
la supresin no autorizada o la neutralizacin de cualquier dispositivo tcnico que
se haya utilizado para proteger programas de ordenador o cualquiera de las otras
obras, interpretaciones o ejecuciones en los trminos previstos en el apartado 1 de
este artculo. Atendiendo a la literal diccin del referido artculo, y examinadas las
actuaciones, se impone la confirmacin de la resolucin recurrida, en la que la
Magistrado a quo, a peticin del Ministerio Fiscal, acuerda el sobreseimiento
provisional de la causa al amparo del Art. 641-1 de la Ley de Enjuiciamiento
Criminal., por ser racional y ajustado a derecho su razonamiento de haberse
acreditado, por la prueba pericial practicada, que los chips que se instalan o se
pueden instalar en las videoconsolas de autos, pueden servir, desde luego, como
dispositivo tendente a desprotegerlas para permitir utilizar juegos no originales,
pero tambin, para permitir la ejecucin de juegos originales de otras zonas y para
convertir la consola en un ordenador personal apto para realizar mltiples tareas
absolutamente lcitas, como pueda ser el manejo de fotografas, ejecutar juegos de
libre distribucin no diseados para consola, escuchar msica, etc. No se cumplira,
por tanto, el requisito de la exclusiva o especfica destinacin a la supresin o
neutralizacin de dispositivos de proteccin de las consolas, y en este sentido el
razonamiento de la instructora no resulta desacertado para este Tribunal.
Proceso de Downgrade
La consola de Sony est oficialmente vetada para ejecutar software de usuario.
Como hemos visto, actualmente es perfectamente lcito, pero la empresa no tiene
porqu proporcionar los medios para ello; as que los usuarios se ven obligados a
buscar errores de programacin o bugs en el sistema para intentar buscar la
forma de acceder a todas las propiedades que ofrece el sistema. La idea es ejecutar
un Exploit o programa malicioso cuyo objetivo es romper las protecciones de
seguridad del sistema.
En si, toda la vida de PSP ha sido una lucha entre los programadores y Sony;
Llegando al punto de sacar actualizaciones peridicas solo para evitar la ltima
forma de pirateo.
10
El Exploit ms comn consiste en lo que llamamos Downgrade.
DOWNGRADE
En las versiones del firmware (esto es, la versin del software de la consola) 1.00
a 1.50 la ejecucin de cdigo casero era posible sin necesidad de ningn tipo de
exploit. Inmediatamente, Sony saco la versin 1.51 que correga ese error. Desde
ese momento, el objetivo de todos los exploits mas populares de la red han sido el
downgrade, es decir, el volver a las versiones anteriores (normalmente la 1,5 por
ser la ltima) dnde si eran posible este tipo de acciones de forma sencilla.
Hay lneas de desarrollo que han intentado la ejecucin de cdigo casero en las
versiones posteriores directamente, pero esto no suele ser lo ms ptimo: primero
porque suele ocurrir que la libertad de accin en estos casos es mucho menor y
solo permite cdigo de tamao pequeo o de acciones limitadas; y segundo porque
cada nueva versin tiene que buscar su propio exploit lo cul es una tarea de
meses.
En este documento centraremos el estudio en describir un tipo de downgrade
estndar para mostrar cmo acta sin entrar en detalles especficos.
Para empezar a describir lo necesario para realizar un Downgrade en la consola,
empezaremos por recalcar las caractersticas de la misma, necesarias para
entender el proceso:

Cada consola tiene un tipo de placa y, adems, un tipo de consola.
Respecto al tipo de placa, hay que saber que ciertas placas no son compatibles con
la funcin de Downgrade. Hasta hace poco por lo menos, haba un tipo de placa que
la hacia incompatible debido a sus altas probabilidades de brickeo (Apagado
definitivo de la consola sin probabilidad de iniciarla de nuevo. Del ingls brick,
ladrillo, porque es poco ms que en lo que se convierte la consola despus de que
ocurra).
11
Una vez confirmado que nuestra consola
est lista por hardware para el downgrade
se comprueba el software. El tipo de
consola indica la actualizacin por defecto
que incluye, esto es, la versin del
firmware y se indica con una letra
mayscula asociada a una versin (A, B...
por ejemplo el G es la 2.01)
Cada versin del firmware tiene su propio
exploit. Para el usuario medio saber que
exploit acta y cmo lo hace no es importante, en la mayora de casos los archivos
necesarios para el downgrade se presentan para que sea hecho de forma ms o
menos intuitiva.

Comprobacin de tipo de placa
A modo de ejemplo se presentar la explicacin tcnica de dos casos de exploit
usados para el downgrade.

Buffer Overflow
El mtodo mas conocido de exploit es el conocido como de Buffer Overflow.
Las variables locales de una rutina se guardan en la pila, que es una zona de la
memoria apuntada por un registro hardware (SP). Cuando se entra en la rutina,
hace falta guardar la direccin donde estaba para volver ms tarde donde estaba
para seguir con la ejecucin del programa. La PSP (procesador mips) guarda dicha
direccin en un registro llamado RA (return address). Si durante la rutina se llama
a otra rutina, dicho registro perdera su valor, por eso es necesario guardarlo en
memoria para poder restaurar su valor mas adelante. Esa informacin se guarda en
la pila.
Un buffer overflow (desbordamiento del buffer) es una condicin anmala que se
produce en un programa al exceder un buffer en memoria (por ejemplo, se excede
la capacidad de un array). Suelen ser consecuencia de un fallo en la programacin
(lo que se conoce como bug).
12
En este caso, se uso una imagen especficamente diseada, para que al ser abierta
por el visor de imgenes desbordara la capacidad del buffer, sobrescribiendo
tambin la pila hasta el punto de perder el ndice de retorno del programa.
Cuando el error ocurre y el punto de ejecucin es movido al lugar sobrescrito por el
overflow se consigue un puntero para la ejecucin de algn cdigo sin pasar por los
sistemas de seguridad.
Este fallo fue explotado hasta poder hacer funcionar un programa que permita
instalar una versin anterior del firmware, sobrescribiendo la existente. Como se
haba saltado los sistemas de seguridad que permitan comprobar que la versin
instalada era ms reciente, sencillamente borraba la actual y escriba la antigua
volviendo al firmware con el bug para poder hacer funcionar cdigo casero.
El exploit 1.50
En el firmware 1.00 la ejecucin de cdigo casero era libre, es decir, nadie se
plante que alguien pudiera hacer un cargador de cdigo casero (eboot). Con la
versin 1.50, se solucion eso.
Para contrarrestar eso, sali un exploit llamado swaploit, era un mtodo que
aprovechaba un fallo en la lectura de la tarjeta de memoria que permita cargar
cdigo casero. No obstante, era un mtodo que requera tener dos tarjetas de
memoria (memory sticks) e intercambiarlas en el momento justo, cosa que si no se
haca bien, poda daar la consola.
Poco tiempo despus sali el Kxploit, un mtodo mucho mas seguro que solo
requera de una tarjeta para funcionar.
El mtodo era el siguiente:
El bootloader (cargador de programas, por as decirlo) de la PSP comprueba la
carpeta de la tarjeta de memoria (en formato FAT) que el cdigo sea legal o
registrado (signed). Si encuentra cdigo no legal, se niega a iniciar el programa.
Sin embargo, el sistema operativo (OS) de la PSP no comprueba eso. Asume
sencillamente que el bootloader ha filtrado cualquier cdigo no vlido y ejecuta el
cdigo que encuentra.
Pero da la casualidad que el bootloader y el OS de la PSP no funcionan de la misma
manera. Se descubri que el bootloader ignoraba el smbolo % pero el OS no. La
13
solucin fue poner dos carpetas con el mismo nombre. La primera estara vaca,
pero la segunda, que contendra el programa, tendra el mismo nombre pero con el
smbolo %. De esta forma el bootloader leera nombre% como nombre y dara
el acceso, y el OS cargara el programa.
Esta es la idea bsica detrs de la ejecucin de cdigo casero en PSP.
Reaccin y contra reaccin: Custom Firmware
El mayor handicap a la hora de jugar con la versin 1.50 es que eso implica
renunciar a las actualizaciones de Sony en materia de novedades en aplicaciones y
funcionalidades (por ejemplo, en la 1.50 no haba navegador web con lo que no era
posible el acceso a Internet de ese modo).
Actualmente, la poltica de Sony respecto al pirateo le deja con las manos ms
atadas, as que su solucin es hacer que los juegos nuevos solo funcionen con
versiones de Firmware superiores a una concreta, obligando a los usuarios a
actualizar a un firmware con menos bugs para poder jugar a los juegos.
Para solucionarlo, el grupo de desarrolladores ha creado lo que se llama: Custom
Firmware, o emuladores de firmware. Para ello, el eboot carga un programa que te
deja elegir una versin de firmware para emular, as, de cara al exterior y a la
consola la versin que ejecuta es la del firmware seleccionado (emulando todas sus
funcionalidades y aadidos) pero corriendo en realidad sobre la 1.50, lo cual
permite la ejecucin de cdigo casero.
Actualmente, las ltimas versiones cuentan con sistemas de mens dentro del
propio men para seleccionar extras y cargar programas sin tener que reiniciar la
consola


Figura : Programa DevHook para ejecucin
de custom firmware
Figura: Botn de carga de DevHook en el
menu de PSP
14
HOMEBREWS
Se suele denominar homebrew a las aplicaciones informticas realizadas por
aficionados para plataformas de videojuegos propietarias. En otras palabras,
plataformas de videojuegos que no son tpicamente programables por usuarios o
usan sistemas de almacenamiento propietarios.
Podemos encontrar diferentes tipos de homebrews dependiendo de la finalidad que
tenga. As pues podemos tener:
Aplicaciones generales
Ad Hoc Messenger 2.0: recibir y enviar mensajes
sin Internet Wi-Fi, solo mediante Ad-Hoc.


HM Lua Player 5.0: permite ejecutar juegos en
lua.


PspSpoof 1.1: permite ejecutar aplicaciones o juegos homebrew que necesiten un
Firmware superior sin necesidad de actualizarlo.
PSP-Maps v0.6: muy parecido a google maps que
permite ver mapas de todo el mundo.


PspDos 0.1: permite traer ms-dos de Windows a la consola para poder ejecutar
juegos o programas de MSDOS.


15
Windows Vista Lua v2: una Shell para psp con el
aspecto de Windows vista, permite explorar la
Memory Stick, activar el USB, jugar a juegos, etc.



Emulacin
PSPUAE 0.71: emulador de Commodore Amiga.


RacePSP: emulador de los sistemas porttiles de
SNK NeoGeo Pocket y NeoGeo Pocket Color.


PSPTHOM v1.2.0: emulador computadora
Thomson T07.



Juegos: CSPortable 0.75, Luigi World v.1, space 0.1, Mario Kart PSP v1.0, Kitten
Canon, Zelda Alpha 2, etc.
Aplicaciones multimedia

16
VisMP3 v0.1.2: permite reproducir MP3 y a la vez
pone a nuestro alcance un entorno grfico
agradable.


DIR to XML Tool v.1.0.2: pasar nuestros archivos MP3 a RSS/XML, lo que
posibilita escuchar nuestras canciones del PC en nuestra PSP a travs del sistema
WiFi.
PSPRadio v0.37: cliente de streaming de radio por
Internet.


Time Baby v12h: realiza la funcin de despertador,
que dispone de soporte MP3.


Aplicaciones customizables
NervOS v1.6: sustituye al XMB original.



Wallpaper Changer v1.20: permite a los usuarios
fijar un fondo de pantalla para determinadas fechas
y variar aleatoriamente algunos recursos sin
necesidad de escribir la Flash.
17
Firmwares
RS PsarDumper v3.2: permite poder
desencriptar y descomprimir directamente los
archivos del firmware.


Time Machine Configurator v2: permite
configurar la Time Machine desde la PSP sin usar
el PC.

18
PROGRAMACIN EN PSP: LUA

Descripcin
Lua fue creado en 1993 por Roberto
Ierusalimschy, Luiz Henrique de Figueiredo, I
Waldemar Celes.




- de peso ligero: usa poca memoria, es fcil de implementar con una
estructura simple
- reflexivo: permite analizar ,observar y modificar su estructura de alto nivel
- imperativo: como casi todos los lenguajes actuales, declara una serie de
acciones que el programa debe ejecutar por orden paso a paso
- Lenguaje script: lenguaje que puede ser escrito en un bloc de notas, no
requiere de compilacin y normalmente ejecuta una programa o aplicacin
de software simple
CARACTERSTICAS
Las variables no tienen tipo, solo los datos, q pueden ser: lgicos, enteros, coma
flotante, o cadenas de caracteres.
Lua solo posee una nica estructura de datos: la tabla
La principal caracterstica de Lua es que no ahonda dentro de un tipo concreto de
paradigma (Ej.: orientado a objetos) sino que se compone de una serie de
caractersticas generales muy poco restrictivas que permiten la implementacin de
funciones, herencias, clases etc de forma relativamente simple mediante el uso de
las meta tablas.
19
Es un lenguaje ligero, pensado para ser simple y, al mismo tiempo y debido a eso,
muy flexible y capaz de extenderse mucho ms de lo que podra parecer en una
primera aproximacin.
Su propsito de uso es como extensin de otro programa, o como script, y es
suficientemente pequeo para caber en una amplia variedad de aplicaciones
Es bastante utilizado en juegos por su flexibilidad para aadir pequeos scripts de
apoyo o de extras a un juego concreto; o como en este caso, para crear
videojuegos.
PRCTICA: JUEGO EN LUA FUNCIONANDO EN PSP
A continuacin describiremos el cdigo de nuestro juego que ejecutamos en PSP. El
juego se trata de esquivar bloques enemigos que se dedican a rebotar por la
pantalla, aguantando el mayor tiempo posible.





Figura : Captura del joc en moviment Figura: Captura de la pantalla de final de joc
Para empezar el lenguaje LUA no requiere el uso (de base) de libreras adicionales,
as que empezamos directamente a escribir el cdigo.
azul = Color.new( 0,0,255)
verde = Color.new( 0,255,0)
blanco = Color.new( 255,255,255)
Definimos tres colores que usaremos para el bloque del jugador, los bloques
enemigos y el texto.
player = I mage.createEmpty( 32,32)
20
player:clear( azul)
block = I mage.createEmpty( 32,32)
block:clear( verde)
Definimos el jugador como una imagen vaca de 32x32 y la vaciamos pintndola de
azul. Lo mismo para los bloques enemigos en verde
Player = { x=30, y=100}
playerHeight = 32
playerWidth = 32
Aqu podemos observar una de las caractersticas mas curiosas de LUA: definimos
una variable Player y le asignamos propiedades de estructura: de esta forma dentro
de Player tenemos x e y que nos definen la posicin del jugador. Esta estructura
no necesita indicar el tipo de variable que contiene, puede tener tanto valores como
texto y la cantidad que deseemos, solo hace falta ir aadindolos a continuacin y
el lenguaje lo interpreta automticamente. Definimos altura y anchura del jugador
para poder referenciarla luego.
Block = {}
Block[ 1] = {x=100,y=80, height=block:height( ) , width =
block:width( ) ,k=3,h=- 2 }
Block[ 2] = {x=300,y=30, height=block:height( ) , width = block:width( ) ,k=-
1,h=- 2 }
Block[ 3] = {x=200,y=58, height=block:height( ) , width = block:width( ) ,k=-
2,h=2 }
Aqu definimos un vector de estructuras. La cantidad de elementos la vamos
actualizando segn nos interesa aadir mas. Creamos los bloques enemigos de un
modo distinto a como hemos creado Player pero en esencia contiene la misma
informacin. Las variables k i h indicaran la velocidad horizontal y vertical
respectivamente de cada bloque.
function movePlayer( )
21
pad=Controls.read( )
if pad:left( ) then
Player.x = Player.x - 2
end
if pad:right( ) then
Player.x = Player.x +2
end
if pad:up( ) then
Player.y = Player.y - 2
end
if pad:down( ) then
Player.y = Player.y +2
end
end
Despus de definir las variables definiremos las funciones del programa. Como LUA
carece de programa principal (main) en realidad no importa el orden en que se
escriba el programa, pero eso si, es importante haber definido las funciones antes
de llamarlas claro. En nuestro programa incluimos funciones para comprobar
colisiones y mover los bloques tanto del jugador como de los bloques enemigos.
La funcin movePlayer controla el movimiento del bloque del jugador. Esta pensado
para leer la entrada del teclado (o de la psp) y reaccionar en consecuencia. La
velocidad de desplazamiento se ha ajustado para que sea competitivo. Vemos que
la funcin no contiene corchetes que la delimiten, sino solamente la palabra
reservada end que indica el fin de la funcin. Eso ocurre tambin con la condicin
if cuya estructura se asemeja a la de Visual Basic con la combinacin if X then.
La relacin entre la funcin pad y el input la hace el programa que lo ejecuta (en
nuestro caso, el luaplayer)
22
function moveBlock ( bloc)
bloc.x = bloc.x + bloc.k
bloc.y = bloc.y + bloc.h
end
La funcin moveBlock sencillamente desplaza los bloques enemigos una distancia
igual a su velocidad. Vemos como actualiza la variable posicin.
function collisionWallsBlockCheck ( obj )
if( obj .x + playerWidth < 35) or
( obj .x + playerWidth > 475) then
obj .k= - ( obj .k)
end
if( obj .y + playerHeight < 35) or
( obj .y + playerHeight > 268)
then
obj .h= - ( obj .h)
end
end
La funcin collisionWallsBlockCheck comprueba si los bloques enemigos llegan al
final de la pantalla y, en ese caso, les hace rebotar en la direccin opuesta. Los
limites de la pantalla se han descubierto por el mtodo del prueba-error, aunque
nos consta que existen libreras que tienen implementada una funcin de
identificacin de estos.
function collisionWallsCheck ( obj )
if( obj .x + playerWidth < 35) or
23
( obj .x + playerWidth > 475) or
( obj .y + playerHeight < 35) or
( obj .y + playerHeight > 268)
then
obj .x=oldx
obj .y=oldy
end
end
Esta es la misma funcin para el caso del jugador. Sencillamente actualiza la
posicin con la misma que tenia lo que consigue que se mantenga esttico.
function collisionCheck( obj ect1,obj ect)
if( obj ect1.x + playerWidth > obj ect.x) and ( Player.x < obj ect.x +
playerWidth) and
( obj ect1.y + playerHeight > obj ect.y) and ( Player.y < obj ect.y +
playerHeight) then
return - 1

else
return 0
end
end
Esta funcin comprueba si el jugador colisiona con alguno de los otros bloques. Vale
la pena destacar que como LUA no define tipo de funcin, la posibilidad de retornar
un valor a la salida es opcional y no hace falta declararlo. En este caso comprueba
24
los cuatro lados del jugador con el bloque pasado por referencia y devuelve 1 en
caso de colisin lo que nos marcara el final de la partida.


function collisionBlockCheck( obj ect1,obj ect2)
if( obj ect1.x + obj ect1.width > obj ect2.x) and ( obj ect1.x < obj ect2.x +
obj ect2.width) and
( obj ect1.y + obj ect1.height > obj ect2.y) and ( obj ect1.y < obj ect2.y +
obj ect2.height) then
obj ect1.h = - ( obj ect1.h)
obj ect1.k = - ( obj ect1.k)
obj ect2.k = - ( obj ect2.k)
obj ect2.h = - ( obj ect2.h)
end
end
Finalmente, la funcin que controlar la colisin entre bloques enemigos que har
que reboten en la direccin opuesta a la que iban. Destacar que los objetos pasados
por referencia no se indican, con lo que no se comprueba que realmente se est
pasando algo con lo que se pueda trabajar. Dado que LUA carece de compilador el
programa sencillamente funcionar o no funcionar, pero siempre podr ser
ejecutable. El luaplayer nos indica en una lnea de texto de MS-DOS el error y la
lnea donde se ha producido.


counter = Timer.new( )
counter:start( )
25
tiempo =0
result=true

Timer es una funcin que cuenta el tiempo en milisegundos que ha pasado desde el
inicio del programa. Lo que hacemos es mostrar ese tiempo por pantalla a modo de
puntuacin.
while ( result==true) do
currentTime=counter:time( )
oldx = Player.x
oldy = Player.y
screen:clear( )
screen:print( 10,10,"Tiempo de j uego: "..currentTime,blanco)
Empieza el bucle de juego del programa. Este bucle ejecuta lo que es propiamente
el juego y se repite hasta que se cumplen las condiciones de derrota. Para empezar
se guarda el valor de la posicin actual del jugador y se limpia la pantalla con la
propiedad clear. Luego lo primero que hacemos es actualizar el tiempo de juego
mostrndolo por pantalla.
moveBlock( Block[ 1] )
moveBlock( Block[ 2] )
moveBlock( Block[ 3] )
movePlayer( )
Desplaza los bloques y comprueba si el jugador esta presionando el pad.


26
collisionWallsCheck( Player)
collisionWallsBlockCheck( Block[ 1] )
collisionWallsBlockCheck( Block[ 2] )
collisionWallsBlockCheck( Block[ 3] )
Comprueba las colisiones de cada bloque con las paredes.
if( collisionCheck( Player,Block[ 1] ) <= - 1) or
( collisionCheck( Player,Block[ 2] ) <= - 1) or
( collisionCheck( Player,Block[ 3] ) <=- 1) then
result=false
end
Comprueba si el jugador est en colisin con alguno de los tres bloques, en cuyo
caso cambia result que es la variable que comprueba el bucle para decidir cuando
sale de l y finaliza el juego.
collisionBlockCheck( Block[ 1] ,Block[ 2] )
collisionBlockCheck( Block[ 1] ,Block[ 3] )
collisionBlockCheck( Block[ 2] ,Block[ 3] )
Comprueba la colisiones entre cada uno de los bloques.
screen:blit( Player.x, Player.y, player)
for a = 1,3 do
screen:blit( Block[ a] .x, Block[ a] .y,block)
end
La funcin screen:blit pinta los elementos por pantalla. Vemos que usamos una
iteracin for para mostrar los bloques dado que los tenemos en un vector.
27


screen.waitVblankStart()
screen.flip()
end
La primera funcin hace una pausa. La segunda muestra por pantalla las acciones
realizadas anteriormente, y por tanto actualiza cada bucle la imagen para crear el
movimiento. Con esto termina el bucle principal.
counter:stop( )
while true do
screen:clear( )
screen:print( 200,100,"FI N DE LA PARTI DA",blanco)
screen: print( 200, 120, "Puntuacion:"..currentTime,blanco)

screen.waitVblankStart( )
screen.flip( )
pad=Controls.read( )
if pad:start( ) then break end
end
Esta es la parte final del programa al que solo se accede saliendo del bucle
principal, esto es, cuando pierdes. Detiene el contador, vaca la pantalla y muestra
la frase FIN DE LA PARTIDA junto con tu puntuacin o tiempo. Esa pantalla esta
dentro de un bucle porque se mantiene hasta que el jugador presiona la tecla
start de la PSP.
28
JUEGO EN PSP
El juego requiere de un programa para ejecutarlo llamado LUA player.
Evidentemente como programa que es, solo es ejecutable en las versiones del
firmware que lo permitan. El programa contiene una lista de todos los elementos
que reconoce como archivos ejecutables (extensin *.lua)






Figura X: Dos capturas del LUA player en funcionamiento en la PSP







Captura del juego funcionando en PSP

29
COMPARATIVA Y CONCLUSIONES
Aun con todo lo que se ha conseguido, las capacidades que puede ofrecer la
ejecucin no legal de cdigo casero son todava muy limitadas. Las capacidades
grficas y de rendimiento de un sistema ejecutado desde UMD o desde memory
stick legalmente.
La diferencia principal es que el sistema signed trabaja en Kernel mode, esto es,
utilizando todas las capacidades que ofrece la consola; mientras que muchos de los
sistemas caseros no, con lo que cuentan con unas capacidades ms limitadas.
El mayor problema a la hora de hacer software para la PSP, es la gran diversidad
de pblico con gran diversidad de firmwares y tipos de exploit. Como cada grupo de
desarrollo ha trabajado por su cuenta, existen muchas combinaciones de
firmwares-exploit: hay quien la tiene en la 1.50 con el downgrade, pero si algo falla
la consola puede brickearse, y eso asusta a muchos usuarios.
Hay quien la posee en versiones posteriores usando solo una capacidad menor
debido a las limitadas capacidades del exploit encontrado; adems Sony trabaja
rpido para tapar todos los posibles parches sacando actualizaciones, con lo que el
tipo de usuario cada vez se va diversificando ms.
El objetivo del desarrollador de software es que llegue al mayor nmero de usuarios
posible, y eso a veces, le obliga a limitar las funcionalidades de su cdigo.
La realidad por eso, es que la PSP como centro multimedia esta muy limitada por
las protecciones que impone Sony. Hoy en da es difcil imaginarse que alguien
desaproveche todas las opciones que podra ofrecerle su sistema limitndose a lo
que la compaa decide ofrecer.
No obstante, existe una cara negativa de todo eso, y es que la capacidad para
acceder al modo Kernel, permite ejecutar cdigo de mayor capacidad de memoria.
Actualmente la venta de juegos de PSP ha disminuido en gran medida, y Sony sabe
que la mayor parte de usuarios aprovecha el filn de ejecutar cdigo para ejecutar
copias de seguridad o mejor dicho copias pirata. Es una tentacin muy fuerte
sobretodo si tenemos en cuenta el precio que alcanza un videojuego en el mercado.

30
31
BIBLIOGRAFIA
Conseguido kernel mode en PSP : http://tec.fresqui.com/kernel-mode-en-psp-
2-50-y-2-60
Exploits:
http://es.wikipedia.org/wiki/Exploit
Swaploit info:
http://www.afterdawn.com/glossary/terms/swaploit.cfm
Kxploit info: http://www.afterdawn.com/glossary/terms/kxploit.cfm
Firmware exploits:
http://wiki.scummvm.org/index.php/PlayStation_Portable
Buffer overflow:
http://www.pspain.com/foro/showthread.php?t=8584
http://www.elotrolado.net/hilo_descubierto-exploit-para-el-firmware-2-0-de-la-
psp-re-actualizado_455619

Downgrade info:
http://www.todopsp.com/foros/showthread.php?t=48813
Custom firmware info:
http://www.todopsp.com/foros/showthread.php?t=34159

Das könnte Ihnen auch gefallen