24 de Enero, 2015

»El teclado funciona · Aún queda bastante trabajo hasta tener un controlador de teclado que haga todo lo que tiene que hacer (en realidad se trata de implementar diferentes capas que normalmente se encuentan en el sistema operativo), pero ya se puede introducir texto con un teclado PS2. En esa demo se siguen usando los componentes que ya estaban "listos" (video generado desde la SRAM externa, etc).

Hay 0 comentarios, anotación clasificada en: avr, arduino.

17 de Enero, 2015

»¡Video bajo control! · O eso parece al menos viendo mis resultados capturando con EasyCap, que es una capturadora de vídeo USB. Parece que la tele de 15" que tengo para pruebas es más permisible cuando el vídeo generado no es muy bueno, pero esa misma señal no funcionaría en la capturadora. Ahora que la señal es suficientemente buena para EasyCap, es bastante cómodo tener la salida en una ventana (por ejemplo, con VLC); aunque es cierto que si no hubiera tenido la tele seguramente no hubiera llegado a generar nada visible ;).

Hay 0 comentarios, anotación clasificada en: avr, arduino.

12 de Enero, 2015

Video compuesto con Arduino Uno, desde SRAM externa

Este pasado fin de semana le eché un rato al tema y decidí empezar desde cero, más que nada porque no entendía el código que estaba usando y eso me impedía seguir adelante con el proyecto.

He encontrado bastante documentación, y ha sido cosa de leerla hasta entender cómo funciona PAL:

He repetido con la idea de usar SPI para enviar bytes a 8MHz (lo más rápido que se puede con el micro a 16MHz), y consigo salida de vídeo 32x24 en blanco y negro.

En mis pruebas he podido llegar a 40x24 caracteres, pero es un poco extremo para el microcontrolador y al final he decidido quedarme en 32x24 caracteres (que es la resolución del Spectrum, ¿casualidad?). Estoy usando code page 437, que es la codificación de caracteres para DOS; en una fuente bitmap de 256 caracteres, 8x8 pixeles.

En el ejemplo estoy usando un "modo texto", con lo que solo necesito 768 bytes de memoria de video (1 byte por caracter para saber los 8 bytes de nuestra fuente hay que mandar a la memoria de vídeo).

Para soportar gráficos, aunque sea con tiles, debería almacenar 6144 bytes de memoria de vídeo, así que decidí probar una experimento que consiste en usar memoria externa SRAM.

Estoy usando 23LCV512 de Microchip, que es bastante más de lo que necesito (64KB), pero tiene la ventaja de soportar SPI y además 5.5v (Microchip tiene chips de 32KB, pero funcionan a 3.3v, y no se pueden usar con las señales del Arduino a 5v).

La idea básica es escribir en la SRAM la memoria de vídeo, y al leer la memoria de nuevo, la salida de la SRAM iría a parar al DAC para generar la señal de vídeo.

El microcontrolador sigue generando los pulsos de sincronización y dirige el envío de datos (hay que enviar un byte desde el microcontrolador por cada byte que sale de la SRAM), pero podemos manejar mucha más memoria de vídeo a la misma velocidad: usando SRAM externa como memoria de vídeo.

El "problema" que tengo ahora es que la SRAM gestionada con SPI es muy lenta, y usando el interfaz SPI no podemos estar actualizando la pantalla y actualizando la memoria de vídeo al mismo tiempo, y en las 310 lineas de PAL que tenemos antes de empezar a dibujar (cada una es solo 64µs), no da tiempo a escribir gran cosa en la memoria de vídeo (un caracter son 8 bytes no consecutivos y SPI es muy lento: seleccionar el chip, enviar WRITE, enviar la dirección de 16-bits, enviar datos, deseleccionar el chip).

Tengo varias ideas para probar y creo que me estoy acercando a un diseño que puede valer. En ese momento publicaré esquemas y puede que algo de código.

Hay 0 comentarios, anotación clasificada en: arduino, avr.

4 de Enero, 2015

»Vídeo compuesto con Arduino Uno · Estoy haciendo experimentos generando vídeo con Arduino Uno (Atmega328p a 16MHz). La librería Arduino TV Out es genial, pero hace más cosas de lo que quiero (usa más memoria, en general) y me gustaría conseguir más resolución. He probado con esta técnica (usando el interfaz SPI para ir más rápido), y tras portar el código a AVR C contemporáneo (tal cual no compila), consigo los 38 x 20 caracteres de texto, que es más bien lo que tenía en mente. La idea de Serasidis es interesante, pero no queda tiempo para mucho más (y además nos deja sin SPI).

Hay 0 comentarios, anotación clasificada en: arduino, avr.

26 de Diciembre, 2014

»¿Y ahora qué? · Pues en realidad... poca cosa. Valga esta entrada corta como respuestas a preguntas frecuentes ;). Seguiré programando juegos, incluso participando en alguna jam, pero desde luego que no será uno al mes. Tampoco estoy seguro que serán juegos más grandes, porque esas cosas no se me dan bien. Puede que repita para el ZX Spectrum, puede que no.

Aparte estoy volviendo a la carga con mi idea de aprender electrónica, que dejé apartada hace un par de años porque soldar algunos componentes en superficie se me hacía cuesta arriba, pero... ¡ya sabemos soldar! (un poco), así que parece que la cosa vuelve a avanzar. Iremos comentando los progresos ;).

Hay 1 comentario

16 de Diciembre, 2014

»One Game a Month · Anoche escribí mi post-mortem de one game a month (en inglés). Traduciendo las conclusiones:

El reto 1GAM ha sido intenso y duro, muy duro. He aprendido muchas cosas nuevas y he acabado 12 juegos. Eso es parte del reto: acabar proyectos. Es posible que haya cometido los mismos errores una y otra vez, pero perseverar es lo importante.

Hay 0 comentarios, anotación clasificada en: 1gam.

14 de Diciembre, 2014

Micro INC

Ya está, he finalizado mi reto de un juego al mes durante 2014; algo antes porque se acercan las vacaciones y no tendré mucho tiempo libre para programar :).

El último juego de la serie es Micro INC, otro juego tipo puzzle en la categoría match-3.

Pantalla del juego

La idea no es muy excitante, pero como acabé completamente agotado con el juego anterior, y dado que tenía unas dos semanas para hacer el juego (que al final ha sido una semana solo), no tenía más remedio que ir a por un objetivo relativamente sencillo. Al final el juego no está mal del todo y se deja jugar, aunque no sea muy original.

Intentaré escribir un post-mortem de la experiencia que ha sido programar un juego cada mes, pero eso será más adelante :).

Hay 0 comentarios, anotación clasificada en: programming, 1gam, speccy.

30 de Noviembre, 2014

Escape from Colony 8

Acabo de publicar el juego de Noviembre dentro de mi reto de un juego al mes: Escape from Colony 8.

Se trata de un juego tipo corre y dispara en el que controlamos a un personaje que tiene que escapar de una base espacial invadida por criaturas alienígenas (y hostiles, claro). Algo parecido a lo que propone Alien Gamma, pero en prespectiva top-down, y con un mundo continuo (sin niveles separados), y además para el ZX Spectrum 48K (como mi juego anterior: The Legend of Traxtor).

Pantalla del juego

He vuelto a repetir con Z88DK (y sus bugs :P) y la librería SP1 para ayudarme con los sprites. Creo que ya les voy cogiendo el tranquillo, aunque gran parte del trabajo es programar herramientas de apoyo (en Python).

Este juego es técnicamente más complejo que el anterior y me ha costado bastante hacerme a las limitaciones de la memoria (en teoría 48KB, y en la práctica tenemos mucha menos). El diseño de los mapas ha quedado muy bien, pero usan bastante memoria, con lo que el juego es algo corto (y no muy difícil). Buenos gráficos pero poco juego :(.

Sigo aprendiendo y es un juego menos que tengo que hacer este año, ¡me falta uno solo para acabar el reto!

Hay 0 comentarios, anotación clasificada en: programming, 1gam, speccy.

2 de Noviembre, 2014

It's Behind You

Estoy leyendo muy poco este año, simplemente porque no encuentro el momento con tanto lío de hacer un juego al mes. Al final mi costumbre de leer antes de irme a la cama es bastante difícil de mantener porque casi prefiero dormir un poco más y estar más descansado al día siguiente, y no termino de engancharme a ningún libro.

Lo último que he leído es este It's Behind You de Bob Pape, donde nos cuenta su experiencia desarrollando la conversión al ZX Spectrum de R-Type, un shoot'em up de máquina recreativa que tuvo algo de nombre a finales de los 80 principalmente por las conversiones que se hicieron a diferentes sistemas domésticos. Creo jugué al juego en el Amstrad de un amigo, pero nunca vi siquiera la recreativa (o la versión para Spectrum).

El libro está disponible en formato e-book para descargar desde la página del autor en bizzley.com, y la entradilla es como sigue:

In April 1982 Clive Sinclair launched the follow up to his successful ZX81 home computer, The ZX Spectrum. In the ten years that followed over nine thousand commercial games were written for this iconic machine. This is the story of one of them.

El libro es entretenido, Pape tiene gracia explicando la historia, y yo diría que tiene un efecto inspirador similar al de Masters Of Doom, aunque la carga nostálgica es bastante mayor, al menos para mi que mi primer ordenador fue un ZX Spectrum +2A ;).

El libro proporciona una idea de lo particular era el negocio del desarrollo de videojuegos en UK cuando las máquinas de 8-bit dominaban el mundo (de los dormitorios de los programadores a millones de jugadores), algo de contenido técnico interesante de leer (casualmente ahora que estoy programando un poco para Spectrum), y en general recomendable para cualquiera que vivió aquella época y sus ordenadores (y con un poco de nivel de inglés, eso sí).

Hay 0 comentarios, anotación clasificada en: lecturas.

28 de Octubre, 2014

»Resultados de la SpeccyJam · Ya están los resultados de la SpeccyJam en la que participé con The Accolade. Mi juego ha quedado entre los tres primeros según uno de los jueces (hay un ganador por juez), lo cuál no está nada mal :). Sigo trabajando en mi siguente juego, que como Traxtor (ZX), será para ZX Spectrum.

Hay 0 comentarios, anotación clasificada en: speccy.

Entradas antiguasEntradas nuevas