Construyendo un emulador CHIP-8

En este proyecto desarrollo un emulador de la plataforma CHIP-8 para poder correr juegos de este tipo. El CHIP-8 es una arquitectura surgida en los 70. Algunas máquinas de la época utilizaban esta arquitectura virtual para correr juegos primitivos. Hoy en día no es una arquitectura extendida, más allá de algunas calculadoras potentes y de personas interesadas en el tema, pero es una arquitectura sencilla de comprender para todo aquél que intente meterse en el mundo del desarrollo de emuladores.

58:58

1. Introducción

El objetivo de este proyecto es construir un emulador de una máquina. En la Temporada 1, comenzamos por el CHIP-8, una arquitectura simple diseñada en los años 70. En este Capítulo 1, por ser el primero, explico qué es un emulador, qué es la arquitectura de Von Neumann, y presento cómo es la arquitectura del CHIP-8.

1:20:40

2. ROM y bucle principal

En este episodio implemento una función para cargar una ROM en memoria. Después diseño el bucle principal mediante el cual podremos procesar los opcodes y básicamente dar vida a la máquina.

1:25:43

3. Opcodes

Ayer perdí demasiado tiempo para sacar adelante el bucle principal. Veamos si hoy dejo hechos todos los opcodes excepto los que tengan que ver con la pantalla y el teclado. Además hay un par de bugs y erratas en el código por corregir.

47:40

4. GDB, bugs y sufriendo con SDL2

En este episodio arreglo algunos bugs entre ellos el de gdb. Para que gdb funcione bien es necesario compilar el emulador como (make CFLAGS='-g -O0'). Luego comienzo a usar SDL intentando cargar una ventana sudando la gota gorda. Directo más corto que de costumbre, lo sé.

1:17:23

5. Pantalla

Agregamos una pantalla donde colocar píxeles e implementamos parcialmente el operador DRW. Este código no está en el repositorio porque no está terminado.

1:10:32

6. ¡Terminamos la v0.1!

En esta sesión en directo he terminado de implementar la pantalla, los opcodes que quedaban de la pantalla, y también el teclado. El resultado: ¡un emulador que funciona!

1:00:29

7. Windows, stahp it

En este episodio **intento** compilar el CHIP-8 en Windows. Desgraciadamente el karma no quiere que funcione. Así que ahora tengo un tutorial muy majo sobre cómo instalar SDL2 en Windows de 1 hora de duración.

1:24:04

8. ¡v0.1.0!

En este directo organizo un poco el código, hago un poco de limpieza y genero la versión 0.1.0 estable final, incluyendo el binario para Windows, que publico en la página web del proyecto.

1:14:23

9. Sonido

En este episodio implemento el sonido de modo que la máquina emita un pitido cuando así lo diga la CPU. Iba a empezar a hacer una herramienta para compilar ROMs, pero prefiero aguardar a mañana y hacer un diseño de lo que quiero hacer.

1:12:26

10. Hexadecimal

En el último episodio de la primera temporada de Construyendo un emulador agrego soporte para cargar ROMs hexadecimales, es decir, archivos de texto que sólo tienen caracteres hexadecimales. Construimos una ROM sencilla para probar que todo funciona y despido la primera temporada resumiendo lo que hemos hecho todos estos episodios. ¡Nos vemos en la segunda temporada!

1:35:56

11. S02E01

Temporada 2. Más intenso y esta vez en HD real. Objetivos: agregar soporte para instrucciones SUPERCHIP; fabricar un ensamblador; fabricar un desensamblador; agregar una mejor interfaz de usuario. URL: http://www.github.com/danirod/chip8

1:10:31

12. S02E02

Segundo episodio de la segunda temporada de Desarrollando un emulador CHIP-8.

1:22:45

13. S02E03

En el capítulo de hoy, una hora y cuarto para depurar una función que no funciona bien. Qué bien. Qué maravilla. No sé por qué lo intento a veces.

1:05:04

14. S02E04

En este episodio se agrega soporte para la 'resolución HD' (modo ESM) en el emulador SCHIP. Ahora se pueden correr roms para SCHIP y verse bien. Repositorio: https://github.com/danirod/chip8

1:29:28

15. S02E05

Quinto episodio de la segunda temporada de Construyendo un emulador CHIP-8.

1:26:42

16. S02E06

Temporada 2, Episodio 6.

1:36:28

17. S02E07

Temporada 2, Episodio 7

1:25:36

18. S02E08

Temporada 2, Episodio 8

1:15:10

19. S02E09

Temporada 2, Episodio 9

1:48:39

20. S02E10 (Final de temporada)

Último episodio de la temporada 2