CHIP-8

CHIP-8es unlenguaje de programacióninterpretado, desarrollado porJoseph Weisbecker. Fue inicialmente usado en losmicrocomputadoresde8 bitsCOSMAC VIPyTelmac 1800a mediados de 1970. Losprogramasde CHIP-8 corren sobre unamáquina virtualde CHIP-8. Esto se hizo así para que losvideo juegosfueran más fáciles de programar en otros computadores.
Aproximadamente 20 años después el CHIP-8 reapareció, pero esta vez, aparecieron diversosintérpretespara algunos modelos decalculadoras 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.
Hay un número no pequeño de videojuegos clásicos portados a CHIP-8, comoPong,Space Invaders,TetrisyPac-Man. También hay disponible un generador aleatorio de laberintos. Esos programas están endominio públicoy se pueden encontrar fácilmente enInternet.
Hay 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 llamadoSCHIP(Super Chip), presentado porErik Bryntse. En 1990, un intérprete de CHIP-8 llamadoCHIP-48fue hecho para lacalculadora gráficaHP-48de 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 variosopcodesadicionales 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 elemuladordeDavid Winter, que era undesensambladory además, elaboró una documentación técnica. Estableció una completa lista deopcodesy otras características que hasta esa fecha estaban sin documentar, y fue distribuida a través de variosforosde aficionados a los emuladores. Muchos de los emuladores listados abajo, tuvieron su punto de inicio en dicha documentación.
Lasdirecciones de memoriadel CHIP-8 tienen un rango 200h a FFFh, lo que hacen 3.584bytes. La razón del porqué la memoria comienza en 200h varía de acuerdo a la máquina. Para elCosmac VIPy elTelmac 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 lapila, uso interno y otras variables.
El CHIP-8 tiene 16registrosde 8-bitpara datos llamados V0, V1, V2, hasta el VF. El registro VF funciona como unflagoRegistro de Estado(Status Register). Se usa comocarryflag (cuando se usan instrucciones aritméticas) o como detector de colisiones (cuando se dibujanSprites).
Existe el registro de direcciones llamadoI, tiene 16 bits de ancho y es usado con variosopcodesque 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.
Lapilasolo se usa para almacenar direcciones que serán usadas luego, al regresar de unasubrutina. 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.
El CHIP-8 tiene 2 timers o temporizadores. Ambos corren hacia atrás hasta llegar a 0 y lo hacen a 60hertz.
Laentradaestá hecha con untecladode tipohexadecimalque 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 lano ha sidopresionada y el tercero espera que se presione una tecla. Estos 3 opcodes se almacenan en uno de los registros de datos.
LaResolución de Pantallaestándar es de 64×32píxels, y la profundidad del color esMonocromo(solo 2 colores, en general representado por los colores blanco y negro). Los gráficos se dibujan en pantalla solo medianteSpriteslos cuales son de 8pixelsde ancho por 1 a 15pixelsde alto. Si unpixeldelSpriteestá activo, entonces se pinta el color del respectivopixelen la pantalla; en cambio, si no lo está, no se hace nada. El indicador deacarreoocarry flag(VF) se pone a 1 si cualquierpixelde la pantalla se borra (se pasa de 1 a 0) mientras unpixelse está pintando.
Como se explicó antes, suena unbeepcuando 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.
CHIP-8 tiene 35 instrucciones, las cuales tienen un tamaño de 2bytes. Estos opcodes se listan a continuación, en hexadecimal y con los siguientes símbolos: