Nuevo server, vuelta del foro.

Vieju.Net, la red de retroinformática donde se aloja ladecadence.net, se ha hecho con un server nuevo bastante majo (dual xeon, 2gb de ram, 4 discos scsi en raid), asi que se ha aprovechado para instalar un debian 5 reluciente y poner todo al dia. Yo por mi parte acabo de actualizar el wordpress, y parece que todo va bien. Y para finalizar, como digo en el título, he revivido el foro. Hace tiempo lo cerré por un enorme problema de spam, pero aprovechando la migración, me he metido con ello, y después de decenas de consultas cruzadas de SQL(10.000 mensajes de spam y unos 1000 usuarios-bot), parece que lo he dejado limpio. Además he actualizado el software del foro y he añadido captchas para el registro e identificación, que supongo que ayudarán a que lo del spam no vuelva a pasar.

Podeis visitarlo en http://ladecadence.net/foro/
Espero que vuelva a coger inercia.

Un saludo.

Humor en el código. BeOS.

No hay duda que BeOS fue un gran sistema operativo, un sistema operativo que por presiones del mercado y por qué no decirlo, mala suerte, pasó casi sin pena ni gloria, aunque mucha gente que llegó a usarlo en su momento, quedó enamorada de él y todavía hoy conserva una base de usuarios significante para un sistema operativo que no se actualiza oficialmente desde noviembre de 2001, aunque gracias a proyectos de software libre como Haiku, puede que dentro de poco veamos un «OpenBeOS» que puede dar mucho que hablar.
Beos siempre se caracterizó por sus impecables APIs, alabadas en su momento por los programadores, su arquitectura y su rendimiento. Pero volviendo al tema del post, en ese impecable código, te puedes encontrar bastantes guiños de los programadores, que se ve que amaban lo que hacian, y se permitian pasarselo bien mientras creaban el sistema.

Unos ejemplos de la API:

int32 is_computer_on(void)

Returns 1 if the computer is on. If the computer isn't on, the value returned by this function is undefined.

double is_computer_on_fire(void)

Returns the temperature of the motherboard if the computer is currently on fire. If the computer isn't on fire, the function returns some other value.

Ahora por ejemplo en las enumeraciones de las CPU’s y plataformas soportadas podemos encontrar cosas como:

typedef enum cpu_types {
B_CPU_PPC_601,
B_CPU_PPC_603,
[...]
B_CPU_Z80,


typedef enum platform_types {
B_BEBOX_PLATFORM = 0,
B_MAC_PLATFORM,
B_AT_CLONE_PLATFORM,
B_ENIAC_PLATFORM,
B_APPLE_II_PLATFORM,
B_CRAY_PLATFORM,
B_LISA_PLATFORM,
B_TI_994A_PLATFORM,
B_TIMEX_SINCLAIR_PLATFORM,
B_ORAC_1_PLATFORM,
B_HAL_PLATFORM,
B_BESM_6_PLATFORM,
B_MK_61_PLATFORM,
B_NINTENDO_64_PLATFORM
} platform_type;

Ahi dejan claro que una cosa es un sistema multiplataforma y luego está BeOS :-)
Un saludo.

Mod SNES PAL/NTSC y CIC con microcontrolador.

Ya habia hecho el mod de video PAL/NTSC y del chip de región CIC al modo clásico, con interruptores para seleccionar los modos. Pero la verdad, taladrar agujeros en la SNES, ponerle unos feos interruptores… da pena. Asi que siguiendo ideas por la red, me puse a hacer mi propio mod basado en un microcontrolador, un AVR ATTiny2313, que se encarga de activar/desactivar las lineas que antes manejaban los interruptores. Ahora estaba el tema de la entrada… ¿qué mejor que usar algo integrado en la consola como el botón de reset?

Lo que hice fue monitorizar la linea de reset, asi cuando se pulse normal, no pasa nada, la consola se resetea normalmente, pero si se mantiene como dos segundos, el microcontrolador cambia al siguiente de los modos definidos, PAL, NTSC, PAL con CIC desactivado y NTSC con CIC desactivado.  La consola se enciende por defecto en modo PAL con CIC activado, como de fábrica.

Lo que falta es una manera de saber en que modo estamos… ¿que tal usar algo integrado en la consola…. como el LED de encendido?

Asi que lo cambié por un led RGB conectado al microcontrolador. Asi cada modo tiene un color, respectivamente rojo, verde, azul y rosa.

El esquema es seguir las instrucciones normales de estos mods, pero usando este circuito con el microcontrolador:

SNES-AVR-MOD-2

El firmware para el ATTiny2313 lo teneis aqui. (Poner los fuses a 0xD4 low, 0xDF high).
Fuente en: http://ladecadence.pastebin.com/f5dd1face

He añadido una galería con las fotos del montaje: http://ladecadence.net/galeria/#mod_snes

Un video del funcionamiento del mod:

Generador de sprites para Sega Master System

Estos dias he estado trasteando un poco con sistemas basados en z80 (calculadora Texas Instruments Ti-83+, MSX, Sega Master System…), y con ello ha surgido un pequeño proyecto (bueno, no tan pequeño) para la Master System, que iré publicando cuando esté el tema más maduro. Pero de momento he empezado a programar un poco para ella, leerme documentación, etc, y bueno, cuando he empezado con el tema gráfico, crear los bloques (tiles y sprites) gráficos no es una tarea sencilla. Resulta que le SMS usa un sistema «planar» para guardar los sprites (4 bytes por linea de 8 pixeles, 4 bits de color por pixel, donde el bit cero del primer byte, es el bit cero de color del primer pixel, el bit uno es el bit cero de color del segundo pixel… etc, hasta el bit siete del cuarto byte, que es el bit tres de color del octavo pixel, creo que se entiende).

Asi que para agilizar esto, que sería tedioso hacerlo a mano, me puse a hacer una pequeña aplicación para poder dibujar los sprites y que me generara los gráficos automáticamente, y para matar dos pájaros de un tiro, me planteé hacerla en javascript, que nunca me ponía a aprenderlo.

El resultado:

smssprite

Al final le añadí también la capacidad de trabajar con sprites de 8×8 y 8×16 pixeles y de generar los datos de paleta y personalizarla a partir de los 64 colores hardware de la SMS.

Podeis usar la aplicación en:  http://ladecadence.net/smssprite/smssprite.html

PD: Los datos los genera en notación para usarlos con un ensamblador de z80 (yo uso el wla-dx).

ViejuLCD Shield

viejulcd-arduino-lado-redim1024Llevo un tiempo desarollando el ViejuLCD. En un momento se me ocurrió que sería buena idea desarrollar una versión «shield» para el arduino, así solo se necesitaría un pin del arduino para manejar un display LCD de texto, en lugar de los 7 que se necesitan normalmente en modo 4-bit.

Después de unas pruebas y de una placa casera, hablé con David Cuartielles (Arduino, BlushingBoy), y me dijo que por qué no fabricabamos unos prototipoviejulcd-arduino-funcionando-redim1024s. Hace un tiempo recibí los PCBs, monté uno e hice pruebas, pero hasta ahora no había tenido tiempo a postear nada ni hacer unas buenas fotos.

Aqui lo teneis montado y funcionando, en unos dias supongo que publicaremos en blushingboy todos los detalles, y el firmware y la libreria para arduino que he desarrollado también.

GameBroker

GameBroker, un proyecto realizado en colaboración con Derivart, aborda las últimas crisis históricas desde una serie de minijuegos para la Nintendo Gameboy(TM) original. Tres diferentes videojuegos nos trasladan a las crisis financieras de los ochenta, noventa y la llamada crisis de las puntocom a inicio de los años 2000, y nos retan a enfrentarnos a algunas de sus principales causas: la subida del petróleo, los imparables tipos de interés, o la burbuja empresarial. Los juegos, además de aportarnos el apartado lúdico, basado en los clásicos del mundo de los 8 bits, nos retan con preguntas acerca de estas épocas de crisis, que deberemos responder correctamente para aumentar nuestra puntuación final (ganar la mayor cantidad de euros posibles). GameBroker nos invita así a una pequeña reflexión sobre la naturaleza casi cíclica de las crisis financieras que nos vienen visitando en las últimas décadas.

Los tres juegos combinan un minijuego con preguntas referente a la crisis de la que hablan, convirtiendose una forma de recordar o aprender más sobre la historia de las burbujas pasadas.

Crisis Ochentera
El minijuego Crisis Ochetentera, nos reta a enfrentarnos a la subida del petróleo y las materias primas, que deberemos destruir antes de que alcancen sus cotas más altas o nos quitará dinero de nuestra cartera. Un desarrollo que nos recuerda en cierta medida a un Space Invaders con Naranjito a los mandos de la nave.

Crisis de los 90’s
Los inflados tipos de interés se han convertido en una amenaza para la paz mundial. Deberás luchar contra ellos a lo Arkanoid Style mientras respondes a las preguntas sobre esta crisis. Cobi y Curro te acompañarán en esta trepidante misión.

Crisis de las puntocom
Las burbujas creadas alrededor de las empresas de internet en los años 2000 amenazan con estallar y llevarse a la economía con ellas, deberás detenerlas al igual que cazabas meteoritos en el Asteroids. Responde correctamente las preguntas para aumentar tu puntuación.

GameBroker ha sido desarrollado para su presentación en el festival Innmotion en junio 2009 @ CCCB, Barcelona.

Asi en la parte técnica, he usado, GBDK, GBTD, GBMB, ATC, Lemon player, y alguna cosilla más que me estaré olvidando.

EDIT:  He subido las ROMs, podeis descargarlas aqui mismo. Crisis Ochentera, Crisis de los 90, y Crisis .COM.

ViejuLCD USB

Ya tengo el prototipo del ViejuLCD versión USB, he preparado el PCB y todo correcto a la primera. Ahora mandaré un par de ellos a un par de compas de vieju.net para que desarrollen software del lado del PC.

viejulcd-protousb-2La idea es hacer un servidor de datos al LCD, que implemente una cola y a la que las aplicaciones que quieran hablar con el LCD se conecten por sockets y dejen el stream de texto/comandos que quieran mandar. Asi no habra conflictos de bloqueo entre las aplicaciones si dos toman el control del puerto al mismo tiempo. Luego tenemos pensado desarrollar varios clientes,  para datos del sistema, notificaciones, etc.

En el lado XT, la idea de JoJo, es hacer un programa residente de DOS (TSR), que capture ciertas interrupciones para recabar datos del sistema y asi enviarla al LCD. Con esta técnica se podria incluso usar el LCD de pantalla externa, capturando las interrupciones necesarias.

Yo he estado haciendo un pequeño demo, para probar los comandos implementados en el firmware del LCD, y la verdad, ha sido un éxito.

Lo programé en ruby, toma el control directamente del puerto, y hace una serie de pruebas del firmware, texto, scroll, niveles de brillo, activacion/desactivación, etc.

Podeis ver un video del demo a continuación: