Está en la página 1de 21

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 !