martes 19 de agosto de 2008

Match!

¿Os acordais de hace 20 años cuando los videojuegos estaban hechos por equipos de una o como mucho dos personas? Eran otros tiempos, mejores o peores según a quien se le pregunte. A día de hoy quedan pocas plataformas en las que sea viable emprender un proyecto en solitario, y MIDP es una de ellas.

Comunmente conocidos como "Juegos Java", los juegos basados en MIDP corren en dispositívos móviles, casi siempre teléfonos, y debido a sus limitaciones técnicas suelen ser lo bastante sencillos como para ser abordados por un sólo programador. Con esa idea en mente me decidí hace unos días a crear mi primer juego MIDP.

El resultado fue "Match!", un juego de tipo puzzle en el que hay que formar parejas de frutas hasta que no quede ninguna suelta, todo en el menor tiempo posible. Tardé un par de días en programarlo así que no está muy pulido. Los gráficos me los ha hecho un amigo en una tarde, por lo que tampoco son gran cosa. De todas formas estoy bastante satisfecho con el resultado, dos días para hacer algo jugable, entretenido y que ha funcionado en varios equipos es un nuevo record personal.

Comienza un viaje alucinante.


¡Ánimo que sólo hay 72!


Esta es la pantalla que más me costó hacer... No es broma.

La forma de instalarlo varía en cada teléfono, aunque lo normal es usar un cable o BlueTooth. Si lo pruebas sería un detalle que dejases un comentario diciendo si en tu móvil ha funcionado bien o no y el modelo de éste. ¡Que lo disfrutes!

Descargar Match!

martes 10 de junio de 2008

PNGU 0.2b

Os presento la nueva versión de mi librería de manipulación de imágenes png para Wii y GC. Viene cargadita de novedades, así que espero que os guste :D

Características de la versión actual:

  • Está basada en libpng 1.2.29

  • Soporta imágenes de 8 y 16 bits por canal.

  • Soporta imágenes en formato RGB, RGBA, escala de grises y escala de grises + alfa.

  • Lee las dimensiones de la imágen, el formato de píxel, los colores transparentes y el color de fondo.

  • Convierte a formatos YCbYCr, RGB565 lineal, RGBA8 lineal, 4x4 RGB565, 4x4 RGB5A3 y 4x4 RGBA8.

  • Permite guardar imágenes YCbYCr en formato png RGB8.

  • Lee y escribe las imágenes en memoria o en dispositivos devoptab (SD, Gecko SD, etc...).

  • Está preparada para su uso en aplicaciones multihilo.

Limitaciones de la versión actual:
  • No carga imágenes de 1, 2 o 4 bits por canal.

  • No carga imágenes paletizadas.


I present you the new version of my png handling library for Wii and GC. It comes with a lot of new features, so I hope you like it :D

Current version features:

  • It's based in libpng 1.2.29

  • Handles images of 8 and 16 bits per channel.

  • Handles images in RGB, RGBA, grayscale and grayscale + alpha formats.

  • Reads image dimensions, pixel format, background color and transparent colors list.

  • Converts images to YCbYCr, linear RGB565, linear RGBA8, 4x4 RGB565, 4x4 RGB5A3 and 4x4 RGBA8 formats.

  • Saves YCbYCr images in png RGB8 format.

  • Handles images stored in memory or in devoptab devices (SD, Gecko SD, etc...).

  • It's ready to be used in multithreaded applications.

Current version limitations:
  • Doesn't handle images of 1, 2 or 4 bits per channel.

  • Doesn't handle paletized images.


Lista de aplicaciones que usan PNGU / List of applications using PNG
Descargar PNGU 0.2b / Download PNGU 0.2b

miércoles 14 de mayo de 2008

Virtual File System para Wii/GC


VFSlib es una librería que he desarrollado para Wii/GC y que permite realizar tareas de E/S bajo una interfaz unificada. En otras palabras, para el usuario de VFSlib leer archivos de una tarjeta SD o leerlos de Internet no supone ninguna diferencia, ya que las funciones que usa son las mismas en ambos casos.

Las ventajas de acceder a dispositivos distintos usando una interfaz común son evidentes: Se simplifica la creación de aplicaciones ya que no hay que preocuparse de los detalles específos de cada dispositivo y, además, las aplicaciones adquieren automáticamente la capacidad de usar nuevos dispositivos cuando estos se añaden a VFSlib.

Para facilitar aún más las cosas las funciones de VFSlib son compatibles con las funciones stdio de manejo de streams de ANSI C. Sólo son específicas de VFSlib aquellas operaciones no definidas en stdio, como por ejemplo las relativas a directorios.

La versión 0.1a de VFSlib permite acceder al lector SD de Wii y a archivos disponibles en Internet mediante el protocolo HTTP.

Podeis descargar el código fuente de VFSlib y un ejemplo de uso aquí. También he escrito una documentación, que poco a poco iré completando.



VFSlib is a library I've developed for Wii/GC that encapsulates different I/O operations under a common interface. In other words, for the user of VFSlib reading files from an SD card or from Internet doesn't make any difference, because the functions used in both cases are exactly the same.

The advantages of accessing different devices using a common interface are obvious: The process of developing applications is simplified because there is no need to concern about the specific details of each device and, moreover, the applications adquire automatically the ability of using new devices when they are added to VFSlib.

To make things even easier, the functions of VFSlib are compatible with ANSI C stdio stream handling functions. The only ones specific to VFSlib are those that are not defined in stdio, for example directory related functions.

VFSlib release 0.1a allows accessing Wii's SD card reader and all files available in Internet via the HTTP protocol.

You can download source code and an example of usage here. I've also written a documentation that will be gradually completed.

viernes 25 de abril de 2008

LIBPNG 1.2.26 + PNGU v0.1c para Wii

Desde que hace unos meses se descubrió un bug que permite ejecutar código casero en Wii mucha gente se ha metido de cabeza a estudiar los entresijos de la consola de Nintendo.

Hay varias librerías que pueden usarse para hacer aplicaciones caseras en Wii, pero la más utilizada sin duda es libogc, que está incluida en devkitpro. Aunque es una librería muy completa suelen necesitarse librerías complementarias que cubran aquellos aspectos para los que libogc no ha sido diseñada. Uno de estos aspectos es la carga de imágenes, sonido, etc...

Para rellenar una parte de ese hueco he compilado la librería libpng para Wii. Creo que puede ser una alternativa a libjpeg, que también ha sido portada recientemente. El formato PNG presume de muchas prestaciones: Almacena un color de fondo, un color de transparencia, permite tener un canal alpha con varias modalidades de profundidad, comprime sin deteriorar la calidad, es un formato abierto, etc... Además libpng es la librería más completa para manejarlo.

Para rematar la faena he creado un conjunto de funciones (PNGU_*) que permiten cargar una imagen en un búfer de memoria muy fácilmente. De esta forma se puede empezar a experimentar con la librería de inmediato. La versión actual de PNGU es la 0.1c y tiene las siguientes características:

Permite cargar ficheros desde un búfer de memoria o desde una tarjeta SD.

Puede descomprimir imágenes PNG y convertirlas a formato YCbYCr, RGBA8, 4x4 RGB565, 4x4 RGB5A3 y 4x4 RGBA8.

De momento sólo está probada con archivos PNG en formato RGB8, aunque es muy posible que funcione con otros tipos de PNG, como RGBA8.

Os dejo la librería ya compilada, las funciones PNGU_*, varios proyectos de ejemplo, un archivo .bat para el que quiera compilar la librería él mismo y algunas indicaciones adicionales aquí.

Y por supuesto, no dudeis en dejar un comentario si encontrais algún bug o teneis dudas sobre como usarla.

martes 25 de marzo de 2008

La odisea de programar un PIC: SMT1

Hace unos días me dirigí a una tienda de electrónica de mi localidad para comprar un programador de PICs. Mi intención era adquirir un TE20, por su precio y compatibilidad con todos los modelos de PIC. Lo más parecido que pude encontrar fue un clon del TE20 llamado SMT1, así que pagué 15€ por él y me lo llevé a casa. Y pensar que no me construí un programador casero para ahorrarme problemas...

Nada más introducir "SMT1" en Google aparecen decenas de foros con mensajes de gente a la que el susodicho programador les da problemas. Ni ICProg ni WinPIC800 traen un perfil de configuración específico para el SMT1, aunque el WinPIC800 si lo trae para el TE20, por lo que debería funcionar a la primera. Y digo debería porque me ha llevado casi 5 horas hacerlo funcionar bien, y tan sólo lo he conseguido en ICProg.

Como en ninguno de los foros que he mencionado antes se da una solución al problema voy a comentaros la configuración precisa que a mi me ha funcionado:

Usaremos ICProg versión 1.06A.
En configuración de hardware (F3) seleccionamos "JDM Programmer", "Windows API", "I/O delay 20 ms" y el puerto serie al que tengais conectado el programador, normalmente "COM1" o "COM2". Todo lo demás hay que dejarlo en blanco. Aceptamos para volver a la pantalla principal de ICProg y seleccionamos el dispositivo que vayamos a programar. Yo he probado con éxito el PIC12F629 y el PIC16F628A.

Configuramos el puerto serie correctamente.
Todas mis pruebas las he hecho bajo WinXP, así que si alguien usa un S.O. distinto tendrá que hacer estos ajustes de otra forma. En concreto los que useis WinNT/2000 tendreis que instalar un driver específico para ICProg que podéis descargar de la página oficial del programa. Aclarado esto entramos en "Panel de control", icono "Sistema", pestaña "Hardware", botón "Administrador de dispositivos". En el árbol de dispositivos buscamos "Puertos (COM & LPT)" y hacemos doble click sobre el puerto serie que estemos usando. Vamos a la pestaña "Configuración del puerto" y, de arriba a abajo, introducimos los valores "1200", "8", "Ninguno", "1" y "Ninguno". A continuación pulsamos "Opciones avanzadas" y deshabilitamos la casilla "Usar búferes FIFO". Aceptamos los cambios y cerramos el panel de control.

Insertamos el PIC en su zócalo.
Esto SIEMPRE hay que hacerlo con el programador desconectado del ordenador. Recordad que los integrados se insertan de modo que la patilla 1 quede en el extremo que tiene una muesca. Si vais a programar PICs de 8 patas insertadlos en un extremo del zócalo de 18 patas, ya que el de 8 está configurado para programar memorias EEPROM. Ahora sí, conectamos el programador al PC. Si la conexión con el puerto serie es correcta y el PIC está bien puesto la luz roja del SMT1 debería encenderse.

Volvemos a ICProg.
Abrimos el fichero hex que contiene el código a programar (Ctrl+O), y pulsamos el botón "Program All" (F5). Si todo ha ido bien ICProg muestra el mensaje de confirmación "Verification succesful".

Cosas a tener en cuenta si el invento sigue dando problemas:

Cerrar todas las aplicaciones a excepción de ICProg.
He comprobado que con algunos programas P2P trabajando en segundo plano se producen muchos fallos en la comunicación.

Usar un PC de sobremesa.
En algunos portátiles los puertos serie están "recortados" para ahorrar batería y no dan la corriente necesaria para programar.

Jugar con la configuración del puerto en Windows.
Por lo general se recomienda una velocidad inferior a 9600 baudios, es cuestión de ir probando. También se puede configurar el control de flujo a "Xon/Xoff".

Usar "Direct I/O" en lugar de "Windows API".
A mi se me cuelga el ICProg cuando lo intento, pero he leído que hay a quien le funciona.

Variar el valor de "I/O delay".
Cuanto más alto sea este parámetro más lento será el proceso de programación pero también menos propenso a errores de comunicación.

Repasar la colocación del PIC dentro del zócalo.
Recordad que el pin 1 va en el lado que tiene la muesca y que para los PICs de 8 patas se usa un extremo del zócalo de 18. Podeis probar con más de un PIC por si se diera la improbable circunstancia de que tengais uno defectuoso.

Desconectar y reconectar el programador al PC.
He notado que a veces se producen muchos fallos seguidos y se solucionan de esta forma. Puede que sea por el puerto o por el software... Misterios de la informática.

Comprar / fabricar otro programador.
Si sólo vais a usar PICs de 8 patas hay esquemas circulando por la red en los que con tan sólo 3 resistencias y un transistor tendreis el apaño hecho. Yo mismo he construido uno de este tipo, comunmente conocido como el "Cutre Programador", y funciona mucho mejor que el dichoso SMT1. Para los más manitas circula incluso el esquema de un programador genérico para PICs USB, que al ser USB se puede usar sin problemas en un portátil.

Espero que estos consejos os hayan servido de ayuda, ¡Suerte y buena programación!

viernes 21 de marzo de 2008

Compresor + PVC + Patatas = Cañón casero

Primeras pruebas del cañón de patatas neumático (más conocido como potatogun o spudgun) que hemos construido entre un amigo y yo.


El cañón ha sido todo un éxito, cumpliendo de sobra nuestras expectativas. Calculamos que algunos proyectiles han aterrizado a más de 300 metros del punto de disparo y han alcanzado velocidades de 90 m/s...

El lanzapatatas consta de una cámara de presión, una llave de paso y una tobera de salida. Todas las partes están hechas con tubo de PVC de 10 bares. La cámara tiene 600 mm de alto y 63 mm de diámetro externo. La tobera mide 100 mm de largo y 32 mm de diámetro externo. Es importante asegurarse de que todas las piezas, incluida la reducción de 63 a 32, aguanten como mínimo 10 bares.

Como ya os habréis imaginado la idea es comprimir aire en la cámara, es decir el tubo grueso, para después abrir la llave de paso y dejarlo escapar a través de la tobera, o sea, el tubo fino. Si introducimos un objeto dentro de la tobera la fuerza del aire lo arrastrará a gran velocidad... que es precisamente lo que pretendemos :D

Existe otra variante de cañón de patatas casero, el cañón de combustión. El principio de funcionamiento es el mismo: Un gas a presión se libera por una tubería arrastrando los objetos que contenga. La diferencia es que en este caso el gas se obtiene detonando una pequeña cantidad de laca u otra sustancia inflamable dentro de la tubería gruesa.

En la red podeis encontrar gran cantidad de material gráfico demostrando lo que estos "bichos" pueden hacer. Uno de los mejores sitios es Spudtech, aunque tal vez no dure mucho ya que está en venta. De esta página se pueden descargar tutoriales de construcción tanto de cañones neumáticos como de combustión, así como herramientas para calcular las dimensiones de los mismos según la masa que se pretenda disparar.


El invento en cuestión.


Enseñando el perfil bueno :P


En esta imagen se aprecia la condensación que produce el aire al viajar a mucha velocidad. Es un efecto análogo a las estelas que dejan los aviones.


En la parte superior de la imagen puede verse una especie de rayo amarillo, que no es otra cosa que la patata partiendo rauda hacia las estrellas...


El misterioso rayo amarillo no sospecha que hay una pared delante...


Ataque con metralla (semillas de arbol del paraíso).

miércoles 30 de enero de 2008

Un tema muy especial: Estación 20

No todos los días se cumplen 20 años - por lo menos a mi sólo me pasó una vez - así que es una ocasión especial para cualquiera. Pero si la persona que los cumple, lejos de ser cualquiera, a su vez es alguien especial, la efeméride se torna en acontecimiento. Y hace no mucho tiempo aconteció que alguien muy especial cumplió 20 primaveras.

Pensé regalarle la luna o incluso las estrellas, pero los poetas han devaluado tanto esa clase de presentes, antes ciclópeos, que no me parecieron suficientes para ella. Finalmente le ofrecí algo que en realidad ya era suyo: Mi amor. Así mismo le dí algo que ese amor había inspirado: Un heraldo que a grandes voces lo anunciaría a todo aquel dispuesto a escuchar. Por siempre.


Frontier - Estación 20.mp3



Creative Commons License

Estación 20 creado por
Frontier se distribuye bajo licencia
Creative Commons Reconocimiento-Compartir bajo la misma licencia 2.5 España.


Esta pieza está publicada bajo licencia Creative Commons, por lo que podeis copiar, modificar y usar la canción en cualquier proyecto, ya sea comercial o no. Las únicas restricciones son que si la usais en un proyecto debeis citar al autor (Frontier - http://frontier-dev.net) y que si la modificais, además de citar al autor, debeis publicar la obra modificada bajo una licencia idéntica a esta.

Noticias anteriores