Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Retrogamedev:
Creando un traductor
de IL a Game Boy C
@r2d2rigo
http://english.r2d2rigo.es/
Motivación
 Aprender sobre el hardware/software de la Game Boy.
 Aprender más sobre IL.
 Usar una tecnología moderna pa...
Primer intento: Roslyn
Segundo intento: transformaciones de sintaxis
 Parsear código de C# y generar
árbol.
 Recorrerlo aplicando reglas de
tra...
Decisión: Mono.Cecil
 Más versátil que System.Reflection.
 Permite cargar ensamblados ya compilados y ver su IL.
 Aprov...
Herramientas
GBDK
 Librerías + compilador de C para Z80/LR35902.
 Pros: más productivo que ASM.
 Contras: poco optimizado, poca docu...
IL2C
 Traductor de IL a C.
 Traduce ejecutable y referencias.
 Modular: soporta distintos front
ends.
 C#, LINQ y Mono...
GBSharp
 “Wrapper” en C# de GBDK + front end para IL2C.
 Librería managed para hacer el juego en C#.
 Librería nativa c...
Walkthrough
El programa más simple
Stack primitiva en C
 Vamos a imitar la funcionalidad
de IL haciendo una stack.
 Tamaño máximo de tipo de
datos es 16 bi...
IL traducido
 Headers por defecto.
 Declaración de variables en mismo
orden que .locals.
 Front end decide qué tipo nat...
Hello World
 Imprimir un número por pantalla.
 Parece trivial pero hay que llamar
a función nativa.
 NativeMethodAttrib...
NativeMethodAttribute
 Atributo para etiquetar
funciones.
 Si IL2C encuentra una llamada a
una función con ella, la sust...
IL traducido
Game Loop
 Comparación.
 Etiquetas/branching.
 Ajustes a variables
autogeneradas.
IL traducido
Input
 Funciones no void.
 No retornar valor, sino apilarlo.
 Sucesivas llamadas desapilan el
resultado.
IL traducido
Dibujado
 ¿Cómo podemos cargar bitmaps/tiles?
 Const: no válido para arrays.
 Static: demasiado complejo.
 Solución: e...
Dibujado
 Crear gráficos con Gameboy Tile
Designer.
 Exportar como *.bin.
 Añadir como resource.
 Autogenerar código.
Demo: Flappy Boy
¿Preguntas?
@r2d2rigo
http://english.r2d2rigo.es/
Upcoming SlideShare
Loading in …5
×

Retrogamedev: Creando un traductor de IL a Game Boy C

0 views

Published on

Slides for the talk at Freakend 2015 in Spanish.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Retrogamedev: Creando un traductor de IL a Game Boy C

  1. 1. Retrogamedev: Creando un traductor de IL a Game Boy C @r2d2rigo http://english.r2d2rigo.es/
  2. 2. Motivación  Aprender sobre el hardware/software de la Game Boy.  Aprender más sobre IL.  Usar una tecnología moderna para algo que no fue pensada.  Probar Roslyn.
  3. 3. Primer intento: Roslyn
  4. 4. Segundo intento: transformaciones de sintaxis  Parsear código de C# y generar árbol.  Recorrerlo aplicando reglas de transformación.  Generar ficheros .h y .c
  5. 5. Decisión: Mono.Cecil  Más versátil que System.Reflection.  Permite cargar ensamblados ya compilados y ver su IL.  Aprovechar la potencia/optimización del compilador de C#.  C# -> .EXE -> .C -> .GB
  6. 6. Herramientas
  7. 7. GBDK  Librerías + compilador de C para Z80/LR35902.  Pros: más productivo que ASM.  Contras: poco optimizado, poca documentación.  http://gbdk.sourceforge.net/
  8. 8. IL2C  Traductor de IL a C.  Traduce ejecutable y referencias.  Modular: soporta distintos front ends.  C#, LINQ y Mono.Cecil. Carga .EXE Procesado front-end Dialecto de C
  9. 9. GBSharp  “Wrapper” en C# de GBDK + front end para IL2C.  Librería managed para hacer el juego en C#.  Librería nativa con las llamadas a las APIs de GBDK.
  10. 10. Walkthrough
  11. 11. El programa más simple
  12. 12. Stack primitiva en C  Vamos a imitar la funcionalidad de IL haciendo una stack.  Tamaño máximo de tipo de datos es 16 bits.  Cada instrucción IL se corresponderá con una función en C.
  13. 13. IL traducido  Headers por defecto.  Declaración de variables en mismo orden que .locals.  Front end decide qué tipo nativo usar y qué función representa cada opcode.
  14. 14. Hello World  Imprimir un número por pantalla.  Parece trivial pero hay que llamar a función nativa.  NativeMethodAttribute.
  15. 15. NativeMethodAttribute  Atributo para etiquetar funciones.  Si IL2C encuentra una llamada a una función con ella, la sustituye por la función nativa equivalente.  La función nativa debe desapilar los parámetros que necesite.
  16. 16. IL traducido
  17. 17. Game Loop  Comparación.  Etiquetas/branching.  Ajustes a variables autogeneradas.
  18. 18. IL traducido
  19. 19. Input  Funciones no void.  No retornar valor, sino apilarlo.  Sucesivas llamadas desapilan el resultado.
  20. 20. IL traducido
  21. 21. Dibujado  ¿Cómo podemos cargar bitmaps/tiles?  Const: no válido para arrays.  Static: demasiado complejo.  Solución: embedded resources.
  22. 22. Dibujado  Crear gráficos con Gameboy Tile Designer.  Exportar como *.bin.  Añadir como resource.  Autogenerar código.
  23. 23. Demo: Flappy Boy
  24. 24. ¿Preguntas? @r2d2rigo http://english.r2d2rigo.es/

×