¿Qué es un emulador?
¿Qué son las ROMs?
¿Cómo funciona un emulador?
Autor:
Miguel Ángel Horna (ElSemi)
Zaragoza, 26 de Mayo de 2009
Emuladores
 Ejecutar el programa original sobre hardware
diferente.
 Para ello, simular el funcionamiento del Hardware
por Software.
 Pero existe multitud de hardware actual (y futuro)
donde queremos que funcione. Portabilidad.
 Proyecto KEEP (Keeping Emulation Environments
Portable) http://www.keep-project.eu
Emuladores
 Preservar los sistemas antiguos (y los juegos)
 Datos en ordenadores o soportes que los sistemas
actuales no pueden leer.
 El resurgir de los juegos clásicos:
 XBOX Live Arcade
 PlayStation Network
 Nintendo Virtual Console
 Classic Collections
 Ahora las empresas de videojuegos buscan
emuladores
Emuladores
Nebula: CPS1, CPS2, NeoGeo, PGM, Konami
Model2 Emulator: Sega Model 2 (original y revs A,B y C)
CPS3 Emulator: Capcom CPS3 (CPX3 versión para XBOX)
Crystal System Emulator: BrezzaSoft Crystal System
Chankast: Emulador de Dreamcast (Sonido y Maple bus),
Naomi (preliminar)
 MAME:





 Colaboración en CPS2,Neogeo, Model 1, Konami
(Protecciones)
 Drivers para PGM, Crystal System
 Cores para DSPs y CPU de Model 2
 Sonido para Saturn/Model2 (SCSP) y Dreamcast/Naomi
(AICA)
¿Qué hay dentro de una máquina?
 Monitor, Amplificador, Fuente de alimentación,
controles…
 Cableado: Sonido, video, controles:
 Maquinas antiguas: Conexiones específicas para cada
juego
 Maquinas recientes (90s): Estándar JAMMA (sonido
mono, solo entradas digitales, 2 players, 4 botones)
 (Más recientes JVS (JAMMA2) pocas máquinas)
 Máquinas dedicadas
 Placa (o placas) de juego
Placas de juego
 Standalone. Un juego por placa:
 Cambiar el juego=Cambiar la placa.
 Hardware diferente para cada juego=Código
diferente en el emulador.
 Mucho trabajo=1 juego.
 “Sistemas”. Una placa Base + placa(s) con el juego
 El mismo hardware, solo cambian las ROMs=El
emulador solo tiene que cargar las roms apropiadas,
el resto del código es igual.
 Mucho trabajo=muchos juegos (o no, CPS3 6 juegos,
Crystal System 3 juegos)
Placas de juego
 Sistemas de juegos:
 Cartuchos:


SNK (NeoGeo)
IGS (PolyGameMaster)
 Rom Board:



Capcom (CPS1,CPS2)
SEGA (System16,System32,Model2,Model3,…)
Namco
 Disco:


Capcom (CPS3)
SEGA (Naomi GDRom)
 Standalone:
 Konami (Diseño modular. En MAME librería de componentes
básicos)
 Mucha info en www.system16.com. Mantenido por MAMEDevs,
información correcta.
Placas de juego
Capcom CPS3
IGS PolyGameMaster
Capcom CPS2
Sega Model2 A-CRX
SNK NeoGeo
Konami Mystic Warrior
Crystal System
ROMs
Virtua Fighter 2 (Model 2)
Cartucho CPS3 (BIOS)
KOF 2003 (Neogeo PCB)
Cartucho PGM
KOF 99 (Neogeo Cartucho)
ROMs
 Pasar el código almacenado en las ROMS a un
archivo
 Se usan programadores/lectores de ROMs
 Chips DIP: fáciles. Programadores baratos.
 Chips SMD: desoldar + adaptadores caros = que lo
hagan los que saben (MAMEDev, The Dumping
Project)
Estructura
 Frontend (MAME: OSD)
 Dependiente del sistema operativo, facilita la portabilidad.
 Cargar las ROMs a memoria.
 Acceso a video y sonido.
 Leer controles
 Librería de dispositivos (MAME: Core):
 Procesadores
 Chips de sonido
 Chips de video
 Emulación de máquinas/sistemas (MAME/MESS: Drivers):
 Instanciar dispositivos de la librería
 Asociar mapas de memoria al emulador del procesador
 Conectar chips de la librería (sonido, gráficos) al procesador
 Implementar e interconectar los chips específicos al sistema.
 Ejecución de procesadores (timeslice)
Procesador
 Identificar el procesador (o procesadores) de la
placa.
 Conocimiento del lenguaje máquina del procesador.
 Desensamblado de ROMs de programa (DataRescue
IDA)
 MAME core: Decenas de emulaciones de
procesadores testeadas y funcionales.
 Sistemas de juegos años 90, lo normal: 68000+Z80
 Decenas de emuladores de 68k y Z80.
Procesador
 Ejecutar el programa original (Z80, 68k) sobre un
procesador diferente (x86, PowerPC).
 Emulación aproximadamente un 10% de la velocidad
original: Emular 10Mhz requiere 100Mhz.
 El núcleo del emulador (core). Debe funcionar 100%
igual que el original (incluyendo errores).
 MAME core: Decenas de emulaciones de
procesadores testeadas y funcionales.
 Sistemas de juegos años 90, lo normal: 68000+Z80
 Decenas de emuladores de 68000 y Z80 libres. Gran
cantidad de documentación para hacerlos
Procesador
 A veces no existe un core ya hecho para el
procesador.
 Escribirlo usando los manuales de programación y
hardware. Problemas:
 Puede que ya no estén disponibles para descarga.
Internet Archive (Manuales de HW Video Model 3)
 Prototipos o procesadores “clasificados”. Ingeniería
Inversa (TGP de model 2/2A)
 En japonés (TGPx4 de model 2C)
 Debe funcionar exactamente igual que el original.
Pequeños errores causan fallos difíciles de
encontrar.
Procesador
 Registros -> Struct…
 Memoria -> Array…
 El emulador lee una instrucción y ejecuta las acciones sobre
registros y memoria.
 L/E a memoria (mapa de memoria):
 ROM: Devuelve de un array con el contenido leído de las
ROMs
 RAM: Lee/Escribe a array de datos.
 Dispositivos: Ejecuta función del emulador. Parámetros:
Dirección a leer/escribir y valor a escribir (o devuelve
valor leído).
 Interrupciones. Prioridad, colas,…
 Optimización: Generadores de código, Threaded code,
Recompilación dinámica
Procesador
 Verificación en el Hardware = Correr código en la
placa y comparar:
Mapa de memoria
 ¿Que hay en cada rango de memoria?
 RAM, ROM
 Registros de vídeo, RAM de vídeo, tilemaps, sprites, display lists
 Registros de sonido
 Puertos de E/S (Controles)
 Protección
 Test de memoria del menú de servicio, da pistas sobre qué
hay en cada área (a veces).
Gráficos
 Hardware sistemas 2D:
 Framebuffers
 Tilemaps + Sprites
 Framebuffers
 Dibujar toda la pantalla cada frame pixel a pixel
 Procesadores lentos=Haría falta un procesador
dedicado a dibujar (existen sistemas así).
 Blitters (DMAs de ROM/RAM a Framebuffer con
efectos)
Gráficos: Tilemaps
Dibujado por hardware, 0% de CPU.
Mosaico de NxN piezas de MxM Pixels.
Piezas (Tiles) en ROM o RAM.
Área de memoria con las casillas.
Cada casilla, índice a tile + paleta de color.
Gráficos limitados a los tiles existentes.
Mosaico mas grande que la pantalla. Scroll H/V
cambiando un registro. Movimiento “gratis” para la
CPU.
 Dos forma de emularlo:







 Dibujar al framebuffer todo el tilemap cada frame.
 Carga en textura y usar D3D para scroll, y mezcla.
También “gratis” para el emulador.
Gráficos: Tilemaps
 Características avanzadas
 Transparencia
 Prioridad mezclada con los sprites
 Linescroll, Columnscroll
 ROZ
 Modificaciones por interrupciones raster
Gráficos: Sprites
 Display List: Lista de índices en RAM o ROM + Paleta
+ posición.
 Cada sprite, uno o mas tiles.
 Prioridad, intercalación entre tilemaps.
 Para emularlo, recorrer la display list y dibujar tiles
al framebuffer.
 También precargar como texturas y dibujar quads,
(sobre sistemas con 3D potente pero poco
procesador (PSP))
Gráficos
 CPS1/CPS2: 3 Tilemaps (32x32,16x16,8x8 orden
programable) + Sprites
 NeoGeo: 1 Tilemap (8x8, fijo) + Sprites
 PGM: 2 Tilemaps (8x8,16x16 orden fijo) + Sprites
 Crystal System: Blitter
 Model2: 2 Tilemaps (8x8 orden programable) + 3D.
Gráficos
 Almacenamiento en ROM, una pesadilla.
 Adivinar buscando gráficos conocidos (letras, números)
 Cada fabricante su sistema:
 CPS1/2: Bit interleaved en 4 roms. 1 bit de cada rom=pixel
de 4bpp.
 NeoGeo: Byte interleaved en 2 roms. Bloques de 4 bytes, 1
bit de cada byte en el bloque=4bpp
 PGM: rom máscaras de pixels visibles + rom de colores
(solo los visibles) empaquetados a 5bpp: 6 pixels en 32 bits
(2 no usados)
 CPS3: Tablas de sustitución de patrones de 2 bytes +
compresión RLE. Fue un milagro.
Gráficos
Tilemap Texto (mascara)
Gráficos
Tilemap Texto (Color)
Gráficos
Tilemaps Scroll
Gráficos
Sprites (Posición)
Final
Gráficos
Gráficos: 3D
 Display lists
 DSPs para leer la display list y hacer T&L de
polígonos.
 Dos opciones:
 Emular el DSP. Mas precisa pero mas lenta: MAME.
 Estudiar el código del DSP y reescribirlo en el
emulador optimizado (Model2 Emulator).
 Rasterización:
 Software render: Pixel accurate, más lento: MAME
 Direct3D: Menos preciso. Más rápido, aprovecha
tarjetas 3D. Model2 Emulator.
Gráficos: 3D
 Evolución de la emulación de 3D del emulador de
Model2
Geometría
Gráficos: 3D
Color
Gráficos: 3D
Texturas
Sonido
 Componentes “discretos”
 Osciladores, filtros, electrónica
 Librería de simulación de redes electrónicas (MAME)
 FM (Frequency Modulation)
 Chips Yamaha.
 Sonido “electrónico”.
 Interconexiones programables de generadores de ondas y
moduladores.
 MAME: librería completa de chips Yamaha (menos mal).
 Sample mixers
 Diseño propio
 Sonido digitalizado
 Varios canales, bucles, frecuencia variable.
 Normalmente un procesador aparte dedicado a sonido
Sonido: Sample mixers
 Cargar ROM de sonido en programa de edición de audio.
 Pruebas con diferentes configuraciones de canales,




frecuencia, bits, endianness.
PCM,u-Law,a-Law, ADPCM. (Aun no había MP3)
Buscar un sample reconocible (meter moneda, start,
sound test en el menú de servicio)
Parar el emulador en el punto del juego donde se
genera.
Buscar relación registros de sonido con dirección,
frecuencia, etc… del sample encontrado.
Protección
 Dongles (Mochila)
 SEGA (System32, Model2, Model3). Infrautilizada, fácil de
emular.
 Encriptación
 Capcom (CPS2,CPS3), IGS (PGM), SNK (Neogeo), Gaelco
 Buscar puntos débiles para extraer los datos
desencriptados (BIOS).
 Coprocesadores
 IGS (PGM), Konami, Gaelco
 “Adivinar” el funcionamiento a partir de los parámetros.
 Si es programable, obtener el programa (tablas sin bounds
check, decapping).
Protección
 Extraer los datos no es fácil:
 Datos a pantalla + Fotografía + Teclear a mano (Martial
Masters: 4KB a mano).
 Conexión Placa <-> PC (JammaLink, JVSLink )
 Decapping + microfotografía
Extracción de programa de
protección Martial Masters
Cable de conexión JAMMA <->
Puerto Paralelo de PC
Microfotografía de ROM de MCU
de sonido de Namco
Cuando todo funciona
 Emular características poco usadas del hardware o que
tengan pequeños fallos.
 Optimización
 Profiling: encontrar las funciones críticas
 Optimización a ensamblador (MMX).No portable.
 Multiprocesador.
 Otras características del emulador
 Filtros gráficos
 Savestates (a veces es bueno tenerlos antes)
 Netplay
 Trucos (Cheats)
MAME
 MAMEDev:
 Decenas de programadores de todo el mundo.
 Un responsable del proyecto
 FTP con roms, manuales, documentos, datasheets…
 Mailing list, IRC (no oficial)
 Repositorio SVN para el código
 Estructura:
 OSD: Frontend y partes de acceso a video y sonido.
 Core: Librerías de dispositivos comunes (CPUs, chips de
sonido, EEPROMs,…)
 Drivers: instanciación de dispositivos + mapa de memoria +
emulación de video (también sonido si es específica al
HW)
Descargar

2009-05-26 Preservacion Recreativas