jueves, 23 de junio de 2011

J1 vs. AVR: Pila contra registros

La comparativa puede sonar ridícula, después de todo; uno es un chip hecho en Verilog, y el otro es un chip hecho desde 0, aunque hay implementaciones libres en FPGA con su código mostrado.
Podrían haber más chips rondando que me podrían dar un buen poder mas duración de 48 horas con dos baterías AA, pero estos procesadores mencionados me llaman la atención por sus características:
- Una densidad de código lo suficientemente grande como para guardar un RPG que se puede acabar en 40 horas acumuladas en un espacio de 24 megabits aproximadamente (más pequeño todavía en un J1)
- Amigables con lenguajes de alto nivel de abstracción (J1 con Forth especialmente, AVR con C especialmente), y tienen un ensamblador muy entendible (aunque repito: Forth puede ser el ensamblador fácilmente de J1).
- Ambos pueden ser tan poderosos como para cargar todo un juego de una resolución de NES sin ninguna ayuda de chips externos (visto en el Uzebox que usa AVR).

Ahora bien, hay diferencias notables en sus arquitecturas que nos pueden afectar con la tarea de realizar juegos.
En esta entrada se hablará a continuación de la principal diferencia entre estos CPU's:
- J1 es un procesador de pila: todos los números, instrucciones, y operandos se manejan en una pila grande de datos que nos puede regresar el resultado.
La ventaja de los procesadores de pila es la densidad de código tan grande que tienen. Como dije antes: un RPG terminable en 48 horas y 7 finales (como Chrono Trigger) puede ser muy pequeño en J1.
Otra ventaja es que es muy fácil de fabricar, usar, y modificar en caso de que el proyecto tenga éxito y se pueda fabricar en masa dentro de un ASIC.
La desventaja es que muchas veces se necesitaría más instrucciones para tener un trabajo hecho. Eso podría aumentar el tamaño del código, si bien no negar la bendición de la densidad de código anteriormente dicha. Todo dependerá del lenguaje que usemos, y por supuesto; del programador.
Otra desventaja es el límte de cuánta información puede contener. Si llega a romperse, puede comprometerse el hardware a romperse físicamente o a quemarse. O en el más leve de los casos, una mala instrucción podría llevar al sistema abajo (recordemos que cuando mucho son dos pilas con diferente propósito) y tener que apagarlo/prenderlo más de una vez.
Un punto mejorable en el J1 sería tener unas cuantas instrucciones de 8-bits. En caso de que no necesitemos tanta memoria o sea una tarea simple lo que se tenga que lograr, una instrucción de 8-bits (valga la redundancia) podría ser una buena opción.
- AVR es un procesador RISC de registros: los registros son cajas pequeñas que nos guardan una pequeña porción de información. Nuestro procesador AVR tiene 32 registros de 8-bits usables para todo fin, y soporta punteros (esenciales a la hora de programar C).
La ventaja de los procesadores de registros es su seguridad. Un registro dañado no dañará a otros, y se puede recuperar con las medidas adecuadas (bloques try/catch/finally, TRY/EXCEPT ON/FINALLY, etc.). En un sistema operativo completo (o incluso una BIOS sencilla), eso es sumamente vital; no querremos tener un mensaje de error mientras estemos en el momento más emocionante de nuestro juego ya sea por un código mal escrito.
Otra ventaja es que se necesitarían menos instrucciones para tener un trabajo andando. La productividad aumenta de esa manera. Añadamos que las instrucciones de AVR son ortogonales: son independientes una de otra, y no causarán efectos colaterales (que algún valor cambie sospechosamente, por ejemplo); es algo no muy común en los RISC.
La desventaja es la densidad de código. Si bien un AVR produce ejecutables compilados más pequeños que otros procesadores (de hecho, es de los pocos RISC que logran subvertir la típica desventaja de programas pesados), no se compara todavía a un J1.
Y eso conlleva a la segunda desventaja: no es muy eficiente en su uso de RAM comparado con J1. Ya hemos visto a la Uzebox que con sólo 4 KB SRAM puede manejar gráficas de calidad de NES junto con un sonido decente; es aún limitado para lo que queremos (al menos, el autor desea gráficas dignas de una SuperGrafx en una resolución menor).
El precio de los AVR's "fijos" (que no están hechos dentro de un FPGA, ASIC, etc.) directo de Atmel en sí es barato; no debería superar los USD$3.50.

Esto cubre la primera de muchas partes del por qué me estoy decidiendo entre un AVR o un J1. Si tienen una sugerencia para otro procesador de 8-16 bits, cuéntenme para considerarlo.
Gracias.

No hay comentarios:

Publicar un comentario