Skip to content

DiegoGutierrezFing/chip-8-interpreter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

chip-8-interpreter

Descripción

Interprete/emulador sencillo de la plataforma CHIP-8 en Java SE.

Uso

En linea de comandos ejecutar:

java -jar Chip8_Emulator.jar <path y nombre de ROM a ejecutar>

Mapa del teclado

Teclas PC              CHIP-8
| 1 2 3 4 |            | 1 2 3 C |
| q w e r |  --------> | 4 5 6 D |
| a s d f |            | 7 8 9 E |
| z x c v |            | A 0 B F |

Historia - Background

Este proyecto forma parte de uno de los proyectos de emulación de sistemas que tenía deseos de realizar hace un par de años en mis tiempos libres a modo de hobby, siendo el primero que logro concretar debido a su relativa baja complejidad.

Resumiendo, se trata de un proyecto de implementación rápido o de prueba de concepto funcional con fines de aprendizaje.

Debido a la naturaleza del proyecto (con finalidad más enfocada en la satisfacción y aprendizaje personal que por utilidad práctica) el mismo contiene bastantes errores. Por otra parte el código en si no respeta nociones básicas de modularidad.

En otras palabras, es bastante desprolijo en cuanto a modularidad pero funciona

Puesto que el proyecto en realidad contiene porciones de código basado en la implementacion de otros autores (en realidad, se trata de un port inicial que realice de un codigo C++ a codigo C, y recientemente a Java), agrego referencias en los ficheros fuente a fin de indicar que porciones del mismo fueron basados en codigo ajeno o en otro tipo de fuentes de información, a fin de dar crédito a quien corresponde por su trabajo, por la inspiración para la implementación de alguna funcionalidad particular o simplemente a modo de referencia bibliográfica.

Capturas de pantalla - Test screenshots

Nombre del ROM Screenshot
KEYPADTEST
ASTRODODGE
INVADERS
PONG 2

Futuras mejoras a realizar

  • Mejorar la aritmetica de enteros que implementa el interprete: a diferencia de C y C++, Java no cuenta con el calificador unsigned para los tipos enteros, lo que puede provocar problemas al realizar operaciones aritmeticas cuando se produce desbordamiento.1.
  • Separar en hilos de ejecucion independientes el codigo de la interfaz grafica (GUI) y el interprete: actualmente se ejecutan ambas funcionalidades en el mismo hilo de ejecucion.
  • Modularizar el codigo en funciones: fetch, decode y execute forman parte del mismo bloque de codigo. Seria optimo separarlos en funciones independientes.
  • Agregar menu de ajustes y de seleccion de ROM a la GUI.
  • Agregar un debugger y opciones de ejecucion "single stepping".
  • Agregar funcionalidad extendida (soporte a opcodes de Super Chip-8 y/o MegaChip).
  • Agregar opcion de configuración de teclado.
  • Agregar funcionalidad de realizar memory dumps - savestates.

Referencias y créditos

Documentacion técnica de referencia

Implementación usada como referencia inicial en C++ (luego portada a C)

Artículo en wikipedia (en inglés)

Footnotes

  1. En C y C++, si tengo un entero unsigned char i, puede tomar el rango de valores de 0 a 255 haciendo "wrap around" pasando por cero cuando se sobrepasa ese valor. Por otra parte, en Java, si tengo un entero byte i, i puede tomar el rango de valores de -128 a 127 haciendo "wrap around" pasando por -128 o 127 cuando se sobrepasan esos valores.

About

Interprete y emulador de plataforma CHIP-8 en Java

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages