CHIP-8CHIP-8 es un lenguaje de programación interpretado, desarrollado por Joseph Weisbecker. Fue inicialmente usado en los microcomputadores de 8 bits COSMAC VIP y Telmac 1800 a mediados de 1970. Los programas de CHIP-8 corren sobre una máquina virtual de CHIP-8. Esto se hizo así para que los video juegos fueran más fáciles de programar en otros computadores. Aproximadamente 20 años después el CHIP-8 reapareció, pero esta vez, aparecieron diversos intérpretes para algunos modelos de calculadoras gráficas. Como era de esperar, desde finales de 1980 en adelante, esos dispositivos de mano tienen mucho más poder de cálculo que los microcomputadores de mediados de 1970. Aplicaciones en CHIP-8Hay un número no pequeño de videojuegos clásicos portados a CHIP-8, como Pong, Space Invaders, Tetris y Pac-Man. También hay disponible un generador aleatorio de laberintos. Esos programas están en dominio público y se pueden encontrar fácilmente en Internet. El CHIP-8 hoy en díaHay una implementación de CHIP-8 para casi todas las plataformas imaginables, así como algunas herramientas de desarrollo. A pesar de eso, solo hay un pequeño número de juegos para CHIP-8. CHIP-8 tiene un descendiente llamado SCHIP (Super Chip), presentado por Erik Bryntse. En 1990, un intérprete de CHIP-8 llamado CHIP-48 fue hecho para la calculadora gráfica HP-48 de esta forma los juegos podían ser programados más fácilmente. Estas extensiones para CHIP-8 fueron conocidas como SCHIP. Este nuevo intérprete cuenta con una mayor resolución y varios opcodes adicionales que permiten programarlo más fácilmente. Si no fuera por el desarrollo del intérprete de CHIP-48, el CHIP-8 no sería conocido en nuestros días. El desarrollo que más influyó (el cual popularizó el S/CHIP-8 en otras plataformas) fue el emulador de David Winter, que era un desensamblador y además, elaboró una documentación técnica. Estableció una completa lista de opcodes y otras características que hasta esa fecha estaban sin documentar, y fue distribuida a través de varios foros de aficionados a los emuladores. Muchos de los emuladores listados abajo, tuvieron su punto de inicio en dicha documentación. Descripción de la Máquina VirtualMemoriaLas direcciones de memoria del CHIP-8 tienen un rango 200h a FFFh, lo que hacen 3.584 bytes. La razón del porqué la memoria comienza en 200h varía de acuerdo a la máquina. Para el Cosmac VIP y el Telmac 1800, los primeros 512 bytes son reservados para el intérprete. En esa máquinas, los 256 bytes más altos (F00h-FFFh en máquinas de 4K) fueron reservados para el refresco de pantalla, y los 96 bytes anteriores (EA0h-EFFh) fueron reservados para los llamados de la pila, uso interno y otras variables. RegistrosEl CHIP-8 tiene 16 registros de 8-bit para datos llamados V0, V1, V2, hasta el VF. El registro VF funciona como un flag o Registro de Estado (Status Register). Se usa como carry flag (cuando se usan instrucciones aritméticas) o como detector de colisiones (cuando se dibujan Sprites). Existe el registro de direcciones llamado I, tiene 16 bits de ancho y es usado con varios opcodes que involucran operaciones con la memoria. De estos 16 bits, el intérprete solo usa los 12 bits menores ya que los 4 bits mayores se usan para la carga de Fuentes. La pila o stackLa pila solo se usa para almacenar direcciones que serán usadas luego, al regresar de una subrutina. La versión original 1802 permitía almacenar 48 bytes hacia arriba en 12 niveles de profundidad. Las implementaciones modernas en general tienen al menos 16 niveles. TimersEl CHIP-8 tiene 2 timers o temporizadores. Ambos corren hacia atrás hasta llegar a 0 y lo hacen a 60 hertz.
EntradaLa entrada está hecha con un teclado de tipo hexadecimal que tiene 16 teclas en un rango de 0 a F. Las teclas '8', '4', '6' y '2' son las típicas usadas para las direcciones. Se usan 3 opcodes para detectar la entrada. Una se activa si la tecla es presionada, el segundo hace lo mismo cuando la no ha sido presionada y el tercero espera que se presione una tecla. Estos 3 opcodes se almacenan en uno de los registros de datos. Gráficos y SonidoLa Resolución de Pantalla estándar es de 64×32 píxels, y la profundidad del color es Monocromo (solo 2 colores, en general representado por los colores blanco y negro). Los gráficos se dibujan en pantalla solo mediante Sprites los cuales son de 8 pixels de ancho por 1 a 15 pixels de alto. Si un pixel del Sprite está activo, entonces se pinta el color del respectivo pixel en la pantalla; en cambio, si no lo está, no se hace nada. El indicador de acarreo o carry flag (VF) se pone a 1 si cualquier pixel de la pantalla se borra (se pasa de 1 a 0) mientras un pixel se está pintando. Como se explicó antes, suena un beep cuando el temporizador de sonido no es 0. Para quien esté desarrollando un emulador o intérprete de Chip-8, debe recordar que el sonido debe ser de un solo tono, quedando la frecuencia de dicho tono a decisión del autor del intérprete. Tabla de instruccionesCHIP-8 tiene 35 instrucciones, las cuales tienen un tamaño de 2 bytes. Estos opcodes se listan a continuación, en hexadecimal y con los siguientes símbolos:
|