380 likes | 510 Views
Preservación de maquinas recreativas: Emuladores. ¿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.
E N D
Preservación de maquinas recreativas: Emuladores ¿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 (KeepingEmulationEnvironments 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 • ClassicCollections • 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 SNK NeoGeo Capcom CPS2 Sega Model2 A-CRX Konami Mystic Warrior Crystal System
ROMs Cartucho CPS3 (BIOS) Virtua Fighter 2 (Model 2) 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 Final Sprites (Posición)
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 Geometría Evolución de la emulación de 3D del emulador de Model2
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 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 • 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
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)