• Escribiendo un emulador de Game Boy desde cero [ENG]


    Siempre he querido escribir un emulador desde cero, pero me he resistido durante mucho tiempo porque es probablemente el proyecto de programación más avanzado que he querido hacer. Escoger un sistema para emular no es una opción fácil; el primer proyecto estándar de emulador parece ser un emulador CHIP-8. Así que después de leer mucha documentación, decidí escribir un emulador de Game Boy minimalista, sin soporte para mapeadores personalizados o sonido, al que llamé proyecto Cinoop.

    Leer en meneame.net | Noticia original

4 Comentarios

  1. abnog /  hace 1 año

    Pues yo me he tirado a la piscina, y he empezado con un emulador de PSX directamente. Tengo que decir que los procesadores MIPS son bastante "sencillos" de emular (no así el resto del hardware). xD

  2. ShOtGaN /  hace 1 año

    Spoiler: cuando toca implementar los opcodes es cuando lo dejas por tedio, y más sabiendo que mucha gente antes ya lo ha hecho en tu lenguaje y estas repitiendo trabajo de chinos.

    • Am_Shaegar /  hace 1 año

      Se te ve puesto en el tema.

      ¿Intentaste tú programar alguno por casualidad?

    • rastersoft /  hace 1 año

      Cierto. Precisamente por eso yo me escribí un programita en python que me generaba el código C con la emulación de los opcodes, a partir del nombre del opcode en sí. Fue sin duda la mejor idea que tuve.

  3. samdax /  hace 1 año

    Tipica noticia que todo el mundo menea pero no tenemos ni puta idea de que ha hecho y como {0x1f602}

    • Jobim /  hace 1 año

      Qué ignorante, como si no supiéramos qué es cruzar el Estrecho de Magallanes.

      • X...X /  hace 1 año

        De Elcano en realidad :troll:

        • Pertinax /  hace 1 año

          Magallanes murió tras descubrir el estrecho, así que de Magallanes. Elcano estaba vivo de milagro. Magallanes le perdonó la vida a pesar de haber apoyado un motín.

          • X...X /  hace 1 año

            Hombre que hablaba / escribía en broma xD

            • Pertinax /  hace 1 año

              Ya ya, estas cosas empiezan como bromas, y terminamos acuchillándonos en un callejón oscuro. xD

    • Julio_Antonio_García /  hace 1 año

      Hombre te aseguro que alguien hay que lo ha leido y si entiende lo que ha hecho y buena parte del como.

  4. borteixo /  hace 1 año

    Menudo currazo.

    • Blacloud /  hace 1 año

      Dicen que escribir un emulador es la prueba de fuego de todo programador de calidad, aunque la GameBoy sea nivel "fácil" dentro de lo que cabe.

      • borteixo /  hace 1 año

        nunca lo había escuchado, la verdad.

      • sisi /  hace 1 año

        Para mi la prueba de fuego es escribir un compilador.

        • SergioPereaDev /  hace 1 año

          el compilador en realidad es aprender una teoría básica y a partir de ahí puedes hacer compiladores como churros. El que de verdad tuvo mérito es el que creo inicialmente toda esa base teórica. Los compiladores no se diferencian tanto unos de otros.

          • sisi /  hace 1 año

            No le quites merito, que para entender esa teoria básica se necesitan los conocimientos de practicamente de toda la carrera, desde las matemática básicas de algebra, teoria de automatas y gramáticas. Despues necesitas conocimientos de programación y del funcionamiento interno de los lenguajes, para finalmente generar un codigo que debe ser optimizado para una arquitectura hardware concreta. Además el compilador no vive solo, sino que convive con unas apis que són las que realmente le dan la funcionalidad requerida.
            Evidentemente esto se aprende, ya que la teoria de compiladores ha sido un trabajo incremental de muchas personas, pero dista mucho de ser algo trivial.

            • malaz /  hace 1 año

              parce que has dicho algo y solo has dicho tonterías..

              • pulgosillo /  hace 1 año

                Más razón que un santo.

            • Conde_Lito /  hace 1 año

              #7 Para nada es tan dificil si tienes la documentación y sabes perfectamente el funcionamiento del microprocesador o microprocesadores para los que estás haciendo el compilador.
              En alguna ocasión he programado en código máquina a nivel de electrónica no de informática, que en el fondo es lo mismo, tienes que dar órdenes al microprocesador de turno para que este haga equis cosa.

              Realmente un compilador es un traductor, te voy a poner el ejemplo de una instrucción para un micro con arquitectura MIPS32, que tiene de bueno que es RISC
              Por ejemplo, la siguiente instrucción en ensamblador para esta arquitectura.
              addi $r1, $r2, 15E

              Esta misma instrucción la puedes introducir manualmente en binario directamente a través de las patillas del procesador.
              addi = 001000 (La operación u operaciones a hacer, opcode)
              $r1 = 00001 (Registro 1)
              $r2 = 00010 (Registro 2)
              15E = 0000000101011110 (Valor numérico, 350)

              00100000001000100000000101011110 (32)

              Es una simple traducción de la instrucción en ensamblador a código máquina, claro que hay que saber los opcodes específicos de cada micro, lo mismos con la estructura de las instrucciones y demás, pero eso no es problema si son micros comunes ya que vas a encontrar toda la documentación que quieras y más.

              Como puedes ver es una instrucción de 32 bits ya que el micro es de 32 bits, aunque no tiene porque ser siempre así, ya que el puerto de entrada y salida (I/O) del micro puede ser serie, aunque lo normal sigue siendo la transmisión en paralelo, también hay micros que para ahorrar patillaje lo dividen en 2 o más ráfagas de datos (latch)
              Cada bit de la instrucción hay que introducirlo por cada una de pines de entrada y salida de datos del micro de forma simultánea, al mismo tiempo. (latch)

              • PortgasDAce /  hace 1 año

                los compiladores modernos no son sólo eso, detectan código muerto, pasos innecesarios, tail recursion... Y no hablemos de JIT o de las funcionalidades de gcc de optimizar haciendo profiling... No me parece tan trivial, otra cosa son las prácticas de la carrera.

                De todas formas, la prueba de fuego de todo programador creo que debería ser escribir un código fácil de mantener y testear... Y esto si que no es trivial, el resto son detalles de implementación, para mi modo de ver.

                • Conde_Lito /  hace 1 año

                  Hombre claro, pero quería simplificar al máximo, sin meter programación de por medio y que viera que lo puede hacer él mismo fácilmente, que viera que se puede hacer casi siempre una traducción literal del ensamblador a código máquina.
                  Otra cosa es que luego quieras añadirle más y más funciones a la función básica del compilador.

        • Julio_Antonio_García /  hace 1 año

          Un emulador, un compilador, un interprete, una maquina virtual, un sistema operativo, un driver, un juego "de verdad"...

          Hay muchas cosas que pueden servir de "prueba de fuego" todo depende de a que se oriente el interes del programador y las herramientas que use no es lo mismo hacer un juego con opengl en c que usar unity3d.

          Lo importante al final es aprender y que sea un proyecto que le haga superarse.

        • otosigo /  hace 1 año

          de c++? :troll:

      • PacoJones /  hace 1 año

        es la primera vez que lo oigo

      • MDman /  hace 1 año

        Dicen también que si te mola el mundo de la emulación, el punto de inicio en este mundillo (como desarrollador) es implementar un emulador de Chip8 es.m.wikipedia.org/wiki/CHIP-8

        • MDman /  hace 1 año

          Uy perdón si en la noticia ya lo dice.

    • Julio_Antonio_García /  hace 1 año

      Es un curro muy gordo, ha debido necesitar una cantidad de tiempo bastante interesante para esto.

Ofertas

Loader noticialalminuto

Volver arriba

Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola