Miguel Ángel Horna (ElSemi) Zaragoza, 16 de Diciembre de 2013 ¿Qué es un emulador? ¿Qué son las...

47
Preservación de juegos: Emulación y porting Miguel Ángel Horna (ElSemi) Zaragoza, 16 de Diciembre de 2013 ¿Qué es un emulador? ¿Qué son las ROMs? ¿Cómo funciona un emulador? Porting de juegos Autor:

Transcript of Miguel Ángel Horna (ElSemi) Zaragoza, 16 de Diciembre de 2013 ¿Qué es un emulador? ¿Qué son las...

Diapositiva 1

Preservacin de juegos: Emulacin y portingMiguel ngel Horna (ElSemi)

Zaragoza, 16 de Diciembre de 2013Qu es un emulador?Qu son las ROMs?Cmo funciona un emulador?Porting de juegosAutor:1EmuladoresEjecutar el programa original sobre hardware diferente. Normalmente sin acceso al fuente originalPara 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.eu2EmuladoresPreservar los sistemas antiguos (y los juegos)Datos en ordenadores o soportes que los sistemas actuales no pueden leer.El resurgir de los juegos clsicos:XBOX Live ArcadePlayStation NetworkNintendo Virtual ConsoleClassic CollectionsLas empresas de videojuegos apuestan por sagas clsicas, xito asegurado.3EmuladoresNebula: CPS1, CPS2, NeoGeo, PGM, KonamiModel2 Emulator: Sega Model 2 (original y revs A,B y C)CPS3 Emulator: Capcom CPS3 (CPX3 versin para XBOX)Crystal System Emulator: BrezzaSoft Crystal SystemChankast: Emulador de Dreamcast (Sonido y Maple bus), Naomi (preliminar)MAME: Colaboracin en CPS2,Neogeo, Model 1, Konami (Protecciones)Drivers para PGM, Crystal SystemCores para DSPs y CPU de Model 2Sonido para Saturn/Model2 (SCSP) y Dreamcast/Naomi (AICA) 4Qu hay dentro de una mquina?Monitor, Amplificador, Fuente de alimentacin, controlesCableado: Sonido, video, controles:Maquinas antiguas: Conexiones especficas para cada juegoMaquinas recientes (90s): Estndar JAMMA (sonido mono, solo entradas digitales, 2 players, 4 botones)(Ms recientes JVS (JAMMA2) pocas mquinas)Mquinas dedicadasPlaca (o placas) de juego

5Placas de juegoStandalone. Un juego por placa:Cambiar el juego=Cambiar la placa.Hardware diferente para cada juego=Cdigo diferente en el emulador.Mucho trabajo=1 juego.Sistemas. Una placa Base + placa(s) con el juegoEl mismo hardware, solo cambian las ROMs=El emulador solo tiene que cargar las roms apropiadas, el resto del cdigo es igual.Mucho trabajo=muchos juegos (o no, CPS3 6 juegos, Crystal System 3 juegos)6Placas de juegoSistemas de juegos:Cartuchos:SNK (NeoGeo)IGS (PolyGameMaster)Rom Board:Capcom (CPS1,CPS2)SEGA (System16,System32,Model2,Model3,)NamcoDisco:Capcom (CPS3)SEGA (Naomi GDRom)Standalone:Konami (Diseo modular. En MAME librera de componentes bsicos)Mucha info en www.system16.com. Mantenido por MAMEDevs, informacin correcta.

7Placas de juego

Capcom CPS3

IGS PolyGameMaster

SNK NeoGeo

Capcom CPS2

Sega Model2 A-CRX

Konami Mystic WarriorCrystal System

8ROMs

Virtua Fighter 2 (Model 2)

Cartucho CPS3 (BIOS)

Cartucho PGM

KOF 2003 (Neogeo PCB)

KOF 99 (Neogeo Cartucho)9ROMsPasar el cdigo almacenado en las ROMS a un archivoSe usan programadores/lectores de ROMsChips DIP: fciles. Programadores baratos.Chips SMD: desoldar + adaptadores caros = que lo hagan los que saben (MAMEDev, The Dumping Project)

10EstructuraFrontend (MAME: OSD)Dependiente del sistema operativo, facilita la portabilidad.Cargar las ROMs a memoria.Acceso a video y sonido.Leer controlesLibrera de dispositivos (MAME: Core): ProcesadoresChips de sonidoChips de videoEmulacin de mquinas/sistemas (MAME/MESS: Drivers): Instanciar dispositivos de la libreraAsociar mapas de memoria al emulador del procesadorConectar chips de la librera (sonido, grficos) al procesadorImplementar e interconectar los chips especficos al sistema.Ejecucin de procesadores (timeslice)11ProcesadorIdentificar el procesador (o procesadores) de la placa.Conocimiento del lenguaje mquina del procesador.Desensamblado de ROMs de programa (DataRescue IDA)MAME core: Decenas de emulaciones de procesadores testeadas y funcionales.Sistemas de juegos aos 90, lo normal: 68000+Z80Decenas de emuladores de 68k y Z80.

12ProcesadorEjecutar el programa original (Z80, 68k) sobre un procesador diferente (x86, PowerPC).Emulacin aproximadamente un 10% de la velocidad original: Emular 10Mhz requiere 100Mhz.El ncleo 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 aos 90, lo normal: 68000+Z80Decenas de emuladores de 68000 y Z80 libres. Gran cantidad de documentacin para hacerlos

13ProcesadorA veces no existe un core ya hecho para el procesador.Escribirlo usando los manuales de programacin y hardware. Problemas:Puede que ya no estn disponibles para descarga. Internet Archive (Manuales de HW Video Model 3)Prototipos o procesadores clasificados. Ingeniera Inversa (TGP de model 2/2A)En japons (TGPx4 de model 2C)Debe funcionar exactamente igual que el original. Pequeos errores causan fallos difciles de encontrar.

14ProcesadorRegistros -> StructMemoria -> ArrayEl emulador lee una instruccin y ejecuta las acciones sobre registros y memoria.L/E a memoria (mapa de memoria):ROM: Devuelve de un array con el contenido ledo de las ROMsRAM: Lee/Escribe a array de datos.Dispositivos: Ejecuta funcin del emulador. Parmetros: Direccin a leer/escribir y valor a escribir (o devuelve valor ledo).Interrupciones. Prioridad, colas,Optimizacin: Generadores de cdigo, Threaded code, Recompilacin dinmica

15ProcesadorVerificacin en el Hardware = Correr cdigo en la placa y comparar:

16Mapa de memoriaQue hay en cada rango de memoria?RAM, ROMRegistros de vdeo, RAM de vdeo, tilemaps, sprites, display listsRegistros de sonidoPuertos de E/S (Controles)ProteccinTest de memoria del men de servicio, da pistas sobre qu hay en cada rea (a veces).

17GrficosHardware sistemas 2D:FramebuffersTilemaps + SpritesFramebuffersDibujar toda la pantalla cada frame pixel a pixelProcesadores lentos=Hara falta un procesador dedicado a dibujar (existen sistemas as).Blitters (DMAs de ROM/RAM a Framebuffer con efectos)

18Grficos: TilemapsDibujado 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.Grficos 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 GPU para scroll, y mezcla. Tambin gratis para el emulador.

19Grficos: TilemapsCaractersticas avanzadasTransparenciaPrioridad mezclada con los spritesLinescroll, ColumnscrollROZModificaciones por interrupciones raster20Grficos: SpritesDisplay List: Lista de ndices en RAM o ROM + Paleta + posicin.Cada sprite, uno o mas tiles.Prioridad, intercalacin entre tilemaps.Para emularlo, recorrer la display list y dibujar tiles al framebuffer.Tambin precargar como texturas y dibujar quads, (sobre sistemas con 3D potente pero poco procesador (PSP))

21GrficosCPS1/CPS2: 3 Tilemaps (32x32,16x16,8x8 orden programable) + SpritesNeoGeo: 1 Tilemap (8x8, fijo) + SpritesPGM: 2 Tilemaps (8x8,16x16 orden fijo) + SpritesCrystal System: BlitterModel2: 2 Tilemaps (8x8 orden programable) + 3D.22GrficosAlmacenamiento en ROM, una pesadilla.Adivinar buscando grficos conocidos (letras, nmeros)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=4bppPGM: rom mscaras de pixels visibles + rom de colores (solo los visibles) empaquetados a 5bpp: 6 pixels en 32 bits (2 no usados)CPS3: Tablas de sustitucin de patrones de 2 bytes + compresin RLE. Fue un milagro.23Grficos

Tilemap Texto (mascara)24Grficos

Tilemap Texto (Color)25Grficos

Tilemaps Scroll26Grficos

Sprites (Posicin)

Final27Grficos

28Grficos: 3DDisplay listsDSPs para leer la display list y hacer T&L de polgonos.Dos opciones:Emular el DSP. Mas precisa pero mas lenta: MAME.Estudiar el cdigo del DSP y reescribirlo en el emulador optimizado (Model2 Emulator).Rasterizacin:Software render: Pixel accurate, ms lento: MAMEDirect3D/OpenGL: Menos preciso. Ms rpido, aprovecha tarjetas 3D. Model2 Emulator.29Grficos: 3D

GeometraEvolucin de la emulacin de 3D del emulador de Model2

30Grficos: 3D

Color31Grficos: 3D

Texturas32SonidoComponentes discretosOsciladores, filtros, electrnicaLibrera de simulacin de redes electrnicas (MAME)FM (Frequency Modulation)Chips Yamaha.Sonido electrnico.Interconexiones programables de generadores de ondas y moduladores.MAME: librera completa de chips Yamaha (menos mal).Sample mixersDiseo propioSonido digitalizadoVarios canales, bucles, frecuencia variable.Normalmente un procesador aparte dedicado a sonido33Sonido: Sample mixersCargar ROM de sonido en programa de edicin de audio.Pruebas con diferentes configuraciones de canales, frecuencia, bits, endianness.PCM,u-Law,a-Law, ADPCM. (Aun no haba 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 relacin registros de sonido con direccin, frecuencia, etc del sample encontrado.34ProteccinDongles (Mochila)SEGA (System32, Model2, Model3). Infrautilizada, fcil de emular.EncriptacinCapcom (CPS2,CPS3), IGS (PGM), SNK (Neogeo), GaelcoBuscar puntos dbiles para extraer los datos desencriptados (BIOS).CoprocesadoresIGS (PGM), Konami, GaelcoAdivinar el funcionamiento a partir de los parmetros.Si es programable, obtener el programa (tablas sin bounds check, decapping).35ProteccinExtraer los datos no es fcil:Datos a pantalla + Fotografa + Teclear a mano (Martial Masters: 4KB a mano).Conexin Placa PC (JammaLink, JVSLink )Decapping + microfotografa

Extraccin de programa de proteccin Martial Masters

Cable de conexin JAMMA Puerto Paralelo de PC

Microfotografa de ROM de MCU de sonido de Namco36Cuando todo funcionaEmular caractersticas poco usadas del hardware o que tengan pequeos fallos.OptimizacinProfiling: encontrar las funciones crticasOptimizacin a ensamblador (MMX).No portable.Multiprocesador.Otras caractersticas del emuladorFiltros grficosSavestates (a veces es bueno tenerlos antes)NetplayTrucos (Cheats)37MAMEMAMEDev:Decenas de programadores de todo el mundo.Un responsable del proyectoFTP con roms, manuales, documentos, datasheetsMailing list, IRC (no oficial)Repositorio SVN para el cdigoEstructura:OSD: Frontend y partes de acceso a video y sonido.Core: Libreras de dispositivos comunes (CPUs, chips de sonido, EEPROMs,)Drivers: instanciacin de dispositivos + mapa de memoria + emulacin de video (tambin sonido si es especfica al HW)38PortingConvertir un juego de una plataforma a otra, a partir del fuente. Ejemplos:Dreamcast->Xbox,PS3,PSVita (Jet Set Radio)Xbox->PS3,PSVita (Fez)Megadrive->Xbox,PS3 (Sonic CD)Cada plataforma tiene su propio API (a menudo incompatible incluso entre plataformas del mismo fabricante)APIs de video no estandar (Xbox si, DirectX)PortingBlitWorks (www.blitworks.com)Sonic CD: de MegaCD a Xbox,PS3Jet Set Radio: de Dreamcast a Xbox,PS3,PSVita,PC,iOS,AndroidSpelunky: de Xbox a PS3,PSVitaFez: de Xbox (XNA C#) a PS3,PSVita,PS4 (C++)Age Of Zombies: de iOS a PSVita

PortingJuegos ya existentes y con una rentabilidad asegurada.En teora poco trabajo peroDiferencias de potencia entre plataformasLos APIs de las consolas son incompatibles entre ellas.Incluso dentro del mismo fabricante (PS3/PSVita/PS4).APIs de video propias, acceso directo al hardware.Intentar desarrollar un framework bsico que abstraiga el hardware de la consola.

41PortingCada API grafica expone las peculiaridades del hardware:PS3: Generacin directa de display list a la GPU.Multiples display lists en paralelo, con call/return entre ellasParcheo en memoria de constantes en fragment program.PSVita:Cada render target cambia escena (overhead)Alpha blending en el fragment shader (cache de shaders)Vertex fetch en vertex shader (cache de shaders)Todo esto lo abstrae OpenGL en iOS, pero no hay control

42PortingJet Set Radio:Cdigo fuente de Dreamcast.Datos en blobs binarios con direcciones absolutas de memoria!!, la dreamcast no tenia un SO al usoDreamcast: Little endian. Xbox y PS3 big endian. Convertir los datos. Algunos sin el fuente originalRedibujado de algunas texturas en HDSonido MIDI en formato propio, grabado de emulador.Desarrollo de una versin de la librera grafica de Dreamcast para cada target.43PortingJet Set Radio

Dreamcast4:3 ratio. Max 576i.30 fps with frequent frame drops

Xbox16:9 ratio. 720p30 fps solid

44PortingSonic CD:Al principio se iba a usar la version de MegaCD, parcheada.Reimplementacin casera en scripts del juego original.Insertar trofeos, records,SpelunkyA partir de la versin de XboxShaders complejos. 10fps en vitaMucho alphablending, costoso en vita

45PortingFezVersin en C#!!, convertir a C++ (C++11)Reimplementar XNA por cada plataforma!!!Shaders no optimizadosMucha geometria, vertex shaders lentos en PS3/Vita : backface culling por CPUMucho alpha test (discard): Lento en PSVitaVersion xbox: frecuentes saltos (aleatorios) en el framerate debido al GC. En PS3/Vita framerate consistente, determinista.

46Preguntas?