

CHIP-8 es un lenguaje de programación interpretado , desarrollado por Joseph Weisbecker en su microprocesador 1802. Inicialmente se utilizó en los microordenadores COSMAC VIP y Telmac 1800 , de 8 bits , fabricados a mediados de la década de 1970.
CHIP-8 fue diseñado para usar menos memoria que otros lenguajes de programación como BASIC , a la vez que era más fácil de programar que el código máquina . [ 1 ] El lenguaje se parece al código máquina porque usa códigos hexadecimales para las instrucciones, pero como intérprete, al igual que BASIC, no necesita ser ensamblado ni enlazado antes de ejecutarse.
Desde entonces se han creado intérpretes de CHIP-8 para muchos dispositivos, como ordenadores domésticos , microordenadores , calculadoras gráficas , teléfonos móviles y consolas de videojuegos . [ 2 ] [ 3 ]
Comunidad
CHIP-8 se ha utilizado en una amplia gama de dispositivos a lo largo del tiempo; la primera comunidad en utilizar CHIP-8 comenzó en la década de 1970 en microcomputadoras . Compartían extensiones y programas en boletines informativos como VIPER de ARESCO para usuarios de COSMAC VIP o DREAMER para usuarios de DREAM 6800. [ 4 ] En el boletín VIPER, los tres primeros números detallaban el código máquina del intérprete CHIP-8 para VIP. [ 5 ]
Las aplicaciones de CHIP-8 incluyen juegos originales, demos , así como recreaciones de juegos populares de otros sistemas. [ 6 ] Algunas aplicaciones de CHIP-8 se han publicado en el dominio público utilizando licencias como la licencia Creative Commons Zero . [ 7 ] [ 8 ]
Extensiones y variaciones de CHIP-8
Durante las décadas de 1970 y 1980, los usuarios de CHIP-8 compartieron programas CHIP-8, así como cambios y extensiones del intérprete CHIP-8, como en la revista VIPER para COSMAC VIP. Estas extensiones incluían CHIP-10 y Hi-Res CHIP-8, que introdujeron una resolución superior a la estándar de 64x32, y CHIP-8C y CHIP-8X, que ampliaron las capacidades de visualización monocromática para admitir color limitado, entre otras características. [ 9 ] Estas extensiones eran en su mayoría retrocompatibles, ya que se basaban en el intérprete original, aunque algunas reutilizaron códigos de operación poco utilizados para nuevas instrucciones. [ 10 ]
En 1979, Electronics Australia publicó una serie de artículos sobre la construcción de un ordenador en kit similar al COSMAC VIP, basado en la arquitectura Motorola 6800. [ 11 ] Este ordenador, el DREAM 6800, incluía su propia versión de CHIP-8. Un boletín similar a VIPER, llamado DREAMER, [ 12 ] se utilizaba para compartir juegos de CHIP-8 para este intérprete. En 1981, Electronics Today International (ETI) publicó una serie de artículos sobre la construcción de un ordenador, el ETI-660, que también era muy similar al VIP (y utilizaba el mismo microprocesador). ETI publicó columnas regulares sobre el ETI-660 y sobre CHIP-8 en general [ 13 ] hasta 1985.
En 1990, Andreas Gustafsson [ 14 ] creó un intérprete de CHIP-8 llamado CHIP-48 para las calculadoras gráficas HP-48 . Posteriormente, Erik Bryntse creó otro intérprete basado en CHIP-48, [ 15 ] titulado "SUPER-CHIP", a menudo abreviado como SCHIP o S-CHIP. SCHIP extendió el lenguaje CHIP-8 con una mayor resolución y varios códigos de operación adicionales destinados a facilitar la programación. [ 16 ]
El intérprete, el desensamblador y la extensa documentación técnica de David Winter popularizaron CHIP-8/SCHIP en otras plataformas. Presentaba una lista completa de códigos de operación y características no documentadas [ 17 ] y se distribuyó en foros de aficionados. Muchos intérpretes utilizaron estos trabajos como punto de partida.
Sin embargo, CHIP-48 modificó sutilmente la semántica de algunos códigos de operación, y SCHIP continuó utilizando esa nueva semántica además de modificar otros códigos de operación. Muchos recursos en línea sobre CHIP-8 difunden esta nueva semántica, por lo que muchos juegos modernos de CHIP-8 no son retrocompatibles con el intérprete original de CHIP-8 para COSMAC VIP, incluso si no utilizan específicamente las nuevas extensiones de SCHIP. [ 18 ]
Algunas extensiones toman códigos de operación o comportamiento de múltiples extensiones, como XO-CHIP que toma algunos comportamientos de SCHIP y CHIP-8E. [ 19 ]
Descripción de la máquina virtual
Memoria
CHIP-8 se implementó con mayor frecuencia en sistemas 4K, como el Cosmac VIP y el Telmac 1800. Estas máquinas contaban con 4096 (0x1000) ubicaciones de memoria, todas de 8 bits (un byte ), de donde proviene el término CHIP-8. Sin embargo, el intérprete de CHIP-8 ocupa los primeros 512 bytes de la memoria en estas máquinas. Por esta razón, la mayoría de los programas escritos para el sistema original comienzan en la ubicación de memoria 512 (0x200) y no acceden a la memoria por debajo de esta. Los 256 bytes superiores (0xF00-0xFFF) están reservados para la actualización de la pantalla, y los 96 bytes inferiores (0xEA0-0xEFF) se reservan para la pila de llamadas, el uso interno y otras variables.
En las implementaciones modernas de CHIP-8, donde el intérprete se ejecuta de forma nativa fuera del espacio de memoria de 4K, no es necesario evitar los 512 bytes inferiores de memoria (0x000-0x1FF), y es común almacenar allí los datos de las fuentes.
Registros
CHIP-8 tiene 16 registros de datos de 8 bits , denominados V0 a VF. El registro VF también funciona como indicador para algunas instrucciones; por lo tanto, debe evitarse. En una operación de suma, VF es el indicador de acarreo , mientras que en una resta, es el indicador de "no préstamo". En la instrucción de dibujo, VF se activa al producirse una colisión de píxeles.
El registro de direcciones, que se denomina I, tiene 12 bits de ancho y se utiliza con varios códigos de operación que implican operaciones de memoria.
La pila
La pila solo se utiliza para almacenar direcciones de retorno cuando se llaman subrutinas . La versión original de RCA 1802 asignaba 48 bytes para hasta 12 niveles de anidamiento; [ 20 ] las implementaciones modernas suelen tener más. [ 21 ] [ 22 ]
Temporizadores
CHIP-8 tiene dos temporizadores de 8 bits . Ambos cuentan hacia atrás a 60 hercios hasta llegar a 0.
- Temporizador de retardo: Este temporizador está diseñado para medir el tiempo de los eventos de los juegos. Su valor se puede configurar y leer.
- Temporizador de sonido: Este temporizador se utiliza para efectos de sonido. Cuando su valor es distinto de cero, se emite un pitido. Su valor solo se puede configurar.
Aporte
La entrada de datos se realiza mediante un teclado hexadecimal de 16 teclas, del 0 a la F. Las teclas "8", "4", "6" y "2" se utilizan normalmente para la entrada direccional. Se emplean tres códigos de operación para detectar la entrada. Uno omite una instrucción si se pulsa una tecla específica, mientras que otro hace lo mismo si no se pulsa ninguna tecla específica. El tercero espera a que se pulse una tecla y, a continuación, almacena la pulsación en uno de los registros de datos.
Gráficos y sonido
La resolución de pantalla original del CHIP-8 es de 64 × 32 píxeles y su color es monocromo . Los gráficos se dibujan en la pantalla únicamente mediante sprites , que tienen 8 píxeles de ancho y pueden tener entre 1 y 15 píxeles de alto. Los píxeles de los sprites se combinan mediante la operación XOR con los píxeles correspondientes de la pantalla. En otras palabras, los píxeles de los sprites que se activan invierten el color del píxel correspondiente de la pantalla, mientras que los píxeles de los sprites que no se activan no hacen nada. El indicador de acarreo (VF) se establece en 1 si algún píxel de la pantalla cambia de activado a desactivado al dibujar un sprite, y en 0 en caso contrario. Esto se utiliza para la detección de colisiones.
Como se describió anteriormente, se reproduce un pitido cuando el valor del temporizador de sonido no es cero.
Tabla de códigos de operación
CHIP-8 tiene 35 códigos de operación , todos de dos bytes de longitud y almacenados en formato big-endian . Los códigos de operación se enumeran a continuación, en formato hexadecimal y con los siguientes símbolos:
- NNN: dirección
- NN: constante de 8 bits
- N: constante de 4 bits
- X e Y: identificador de registro de 4 bits
- PC : Contador de programas
- I : Registro de 12 bits (para dirección de memoria) (similar a un puntero void);
- VN: Una de las 16 variables disponibles. N puede ser de 0 a F (hexadecimal);
Desde 1978, se han desarrollado numerosas implementaciones del conjunto de instrucciones CHIP-8. La siguiente especificación se basa en la especificación SUPER-CHIP de 1991 (pero sin los códigos de operación adicionales que proporcionan funcionalidad extendida), ya que es el conjunto de extensión más común en la actualidad. Las notas al pie indican las incompatibilidades con el conjunto de instrucciones CHIP-8 original de 1978.
Véase también
Notas
- 1 2 3 4 Los códigos de operación lógicos 8XY3, 8XY6, 8XY7 y 8XYE no estaban documentados en la especificación original de CHIP-8, ya que todos los códigos de operación 8000 se enviaban a instrucciones en la ALU del 1802 y no se encontraban en el intérprete mismo; por lo tanto, se presume que estos cuatro códigos de operación adicionales eran una funcionalidad no intencionada.
- 1 2 Los códigos de operación 8XY6 y 8XYE del CHIP-8 (las instrucciones de desplazamiento de bits), que de hecho eran códigos de operación no documentados en el intérprete original, desplazaban el valor en el registro VY y almacenaban el resultado en VX. Las implementaciones del CHIP-48 y del SCHIP, en cambio, ignoraban VY y simplemente desplazaban VX. [ 18 ]
- ↑ La mayoría de las instrucciones FX1E de los intérpretes CHIP-8 no afectan a VF, con una excepción: el intérprete CHIP-8 para Commodore Amiga establece VF en 1 cuando hay un desbordamiento de rango (I+VX>0xFFF) y en 0 cuando no lo hay. [ 24 ] El único juego conocido que depende de este comportamiento es Spacefight 2091!, mientras que al menos un juego, Animal Race, depende de que VF no se vea afectado.
- 1 2 En la implementación original de CHIP-8, y también en CHIP-48, I se incrementa a la izquierda después de que se ejecuta esta instrucción. En SCHIP, I se deja sin modificar.
Referencias
- ↑ "Un sistema de programación sencillo". BYTE . Vol. 3, n.º 12. Diciembre de 1978. pág. 108.
- ↑ "Página principal del emulador CHIP-8" .
- ↑ "La escena de hacking de Nintendo Game & Watch trae Pokémon, CHIP-8 y más a la consola portátil de 50 dólares" . 8 de diciembre de 2020.
- ↑ https://archive.org/details/dreamer_newsletter_01/mode/2up
- ↑ " VIPER para el propietario de RCA VIP" . Revista Intelligent Machines ( InfoWorld ) . InfoWorld Media Group. 11 de diciembre de 1978, pág. 9. Consultado el 30 de enero de 2010 .
- ↑ "Página principal del emulador CHIP-8" .
- ↑ "ROMs de dominio público de Chip-8 - El dominio de Zophar" .
- ↑ Archivo CHIP-8
- ↑ Referencia de extensiones de CHIP-8 por Matthew Mikolay
- ↑ https://github.com/trapexit/chip-8_documentation
- ↑ https://archive.org/stream/EA1979/EA%201979-05%20May#page/n85/mode/2up
- ↑ https://archive.org/details/dreamer_newsletter_01/mode/2up
- ↑ https://archive.org/stream/ETIA1981/ETI%201981-11%20November#page/n113/mode/2up
- ↑ "Código fuente de CHIP-48" . GitHub .
- ↑ Documentación de SCHIP 1.1
- ↑ Repositorio HP48-Superchip en GitHub
- ↑ CHIP8.pdf por David WINTER (HPMANIAC)
- 1 2 Dominando la sección de compatibilidad
- ↑ "Especificación XO-CHIP por John Earnest" . GitHub .
- ↑ Manual de instrucciones RCA COSMAC VIP CDP18S711 . Somerville: RCA Solid State Division. 1978. pág. 36.
- ↑ Greene, Thomas P. (1997-08-30). "Referencia técnica del chip-8 de Cowgod" . devernay.free.fr . Archivado del original el 2024-01-03 . Recuperado el 2020-02-03 .
- ↑ Mikolay, Matthew. "Dominando CHIP-8 : Subrutinas" . mattmik.com . Consultado el 3 de febrero de 2020 .
- ^ Schümann , Steffen " Gulrak " . "Tabla de códigos de operación variantes de CHIP-8" . chip8.gulrak.net .
- ↑ "FX1E y VF · Número 2 · Cromatóforo/HP48-Superchip · GitHub" . GitHub .
Lecturas adicionales
- Tabla de códigos de operación de variantes CHIP-8: una referencia precisa a los códigos de operación para CHIP-8 y varias extensiones, incluidas CHIP-48, SCHIP 1.0, 1.1 y XO-CHIP.
- Dominando CHIP-8 , una referencia precisa al conjunto de instrucciones original de CHIP-8.
- La guía técnica del Chip-8 de Cowgod contiene imprecisiones y omisiones en varias instrucciones.
- Referencia de extensiones CHIP-8 de Matt Mikolay
- Grupo RCA COSMAC en Yahoo , con escaneos autorizados de la revista VIPER.
- CHIP-8.com Manual de la computadora clásica CHIP-8
- Archivo del sitio web Chip8.com , dedicado a CHIP-8 y sistemas relacionados. Mantenía una amplia colección de programas CHIP-8 en la red.
- "Manual de instrucciones RCA COSMAC VIP CDP18S711", RCA Solid State Division, Somerville, NJ 08776, febrero de 1978. Parte VIP-311. págs. 13–18, 35–37.
- Revista BYTE , diciembre de 1978 , págs. 108-122. "Un sistema de programación sencillo", por Joseph Weisbecker . Describe CHIP-8 con un ejemplo específico de un juego de disparos de naves espaciales y ovnis.
Enlaces externos
- FPGA SuperChip: Una implementación en Verilog de la especificación SCHIP.
- Octo es un IDE en línea para CHIP-8, un sistema de desarrollo, compilador/ensamblador y emulador, con un lenguaje de scripting propietario.
- Cadmium es un intérprete de CHIP-8 para ordenadores, con una interfaz gráfica de usuario que permite seleccionar la emulación precisa de diferentes extensiones e implementaciones de CHIP-8.
- Silicon8: Un emulador de CHIP-8 para navegadores web.
- ChippOtto Un intérprete de CHIP-8 escrito en C.
- Consola Chip-8. Una consola de hardware CHIP-8 y SCHIP que cuenta con una pantalla OLED y está alimentada por un microcontrolador de 8 bits.
- Máquinas virtuales
- Software de virtualización
- Software para microcomputadoras
- Software para calculadoras gráficas