PatBoy emulator

Embed Size (px)

DESCRIPTION

Presentation about PatBoy emulator: https://github.com/Jonazan2/PatBoy

Citation preview

  • Qu es PatBoy

  • Objetivos

    Emulador de Game Boy en C++ Exactitud SDL y OpenGL Libre Escalable Emulacin de sonido exacta Optimizacin y compatibilidad

  • Motivacin

    La emulacin como reto tcnico Pasin por los videojuegos

  • Game Boy

    Hardware: CPU basada en el Z80. Bus de datos: 8 bits Bus de direcciones: 16 bits 8 KB SRAM Pantalla LCD 160x144 Paleta de 4 colores 8KB VRAM 4 canales de sonido Puerto serie 30 horas de autonoma

  • Game Boy

  • Emulacin

    Emulacin es distinto de simulacin Exiten diversas formas de emulacin: Software Hardware: FPGA

    Decisiones importantes: Seleccin del lenguaje de implementacin Compilado Virtualizado Interpretado

    Deseamos exactitud con la mquina?

  • Arquitectura

  • Diseo

  • Cartucho

    De 32KB a 8MB Pueden contener RAM

    RAM alimentada por pila

    Chip de banqueo

    Timer

    Cabecera con informacin

  • Memoria

    64KB en total divididos en regiones para almacenar: Cartucho VRAM SRAM Registros de I/O Sprites / Tiles

    Banqueo de memoria Permite cartuchos de mayor tamao Se divide el total del cartucho en bancos El programa solicita al chip de banqueo la carga de un banco

    especfico del cartucho a la memoria principal

  • Memoria ROM only 32KB

    MBC1 Hasta 2MB 32KB RAM

    MBC2 Hasta 256KB 514b x 4 RAM

    MBC3 Hasta 2MB 32KB RAM

  • CPU

    Registros A, F, B, C, D, E, H, L de 8 bits agrupables de dos a dos: AF, BC, DE, HL para formar registros de 16 bits.

    Flags (Alojados en el registro F) Acarreo, Suma/Resta, medio acarreo y zero.

    Basado en el Z80 con menos instrucciones: 245 instrucciones simples: loads, aritmetico-lgicas, jumps,

    call 256 instrucciones extendidas: operaciones a un bit, swaps,

    operaciones de rotacin

  • CPU

    Interrupciones: Vblank: una vez pintadas las 144 scanlines y mientras

    estamos entre la 144 y la 157. LCD: solicitada por el driver de video TIMER: cuando el contador del timer se desborda Joypad: cuando el jugador pulsa un botn del joypad

    Timers: Registro de division Contador

  • Video

    Sistema basado en tiles / sprites alojados en memoria 32x32 tiles con un rea visible de 20x18

    Emulacin mediante SDL para la ventana y OpenGL para pintar el framebuffer

  • Audio

    Cuatro canales principales Canal 1: onda cuadrada, ciclo de trabajo modificable,

    envolvente y portamento Canal 2: onda cuadrada, ciclo de trabajo modificable y

    envolvente Canal 3: onda programable con tabla de RAM de 32 pasos

    (32 valores de 4 bits) Canal 4: canal de ruido blanco con envolvente

    Emulacin mediante librera de sintetizacin Gb_Snd_Emu

  • Joypad

    Botones de direccin Arriba, abajo, derecha e izquierda

    Botones de estado Start y select

    Botones de control Botn A y B

    Recogidos los eventos de pulsacin mediante las libreras SDL

  • Mtricas Mtrica Valor

    Lineas de cdigo 8493

    Ficheros 22

    Tamao ficheros 208,6 KB

    Lineas de comentario 1411

    Ratio lineas/fichero 386

    Ratio comentarios/fichero 64

  • Y ahoraqu?

    Mejorar, mejorar y seguir mejorando. Aadir soporte para Game Boy Color

    Aadir soporte de puerto serie

    Chip MBC5

    Otro emulador!

  • Conclusiones

    PatBoy como emulador de Game Boy con filosofa de exactitud

    C++ como lenguaje idneo para la realizacin de emuladores.

    Programacin siempre basada en patrones de diseo, arquitectura y diseos cuidados.

  • Muchas gracias !