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)
Porting
Convertir 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)
Porting
BlitWorks (www.blitworks.com)
Sonic CD: de MegaCD a Xbox,PS3
Jet Set Radio: de Dreamcast a Xbox,PS3,PSVita,PC,iOS,Android
Spelunky: de Xbox a PS3,PSVita
Fez: de Xbox (XNA C#) a PS3,PSVita,PS4 (C++)
Age Of Zombies: de iOS a PSVita
Porting
Juegos ya existentes y con una rentabilidad “asegurada”.
En teoría poco trabajo pero…
Diferencias de potencia entre plataformas
Los 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 básico que abstraiga el hardware de la consola.
Porting
Cada API grafica expone las peculiaridades del hardware:
PS3:
Generación directa de display list a la GPU.
Multiples display lists en paralelo, con call/return entre ellas
Parcheo 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
Porting
Jet Set Radio:
Código fuente de Dreamcast.
Datos en blobs binarios con direcciones absolutas de memoria!!, la dreamcast no tenia un SO al uso
Dreamcast: Little endian. Xbox y PS3 big endian. Convertir los datos. Algunos sin el fuente original
Redibujado de algunas texturas en HD
Sonido MIDI en formato propio, grabado de emulador.
Desarrollo de una versión de la librería grafica de Dreamcast para cada target.
Porting
Jet Set Radio
Dreamcast
4:3 ratio. Max 576i.
30 fps with frequent frame drops
Xbox
16:9 ratio. 720p
30 fps solid
Porting
Sonic CD:
Al principio se iba a usar la version de MegaCD, parcheada.
Reimplementación casera en scripts del juego original.
Insertar trofeos, records,…
Spelunky
A partir de la versión de Xbox
Shaders complejos. 10fps en vita
Mucho alphablending, costoso en vita
Porting
Fez
Versión en C#!!, convertir a C++ (C++11)
Reimplementar XNA por cada plataforma!!!
Shaders no optimizados
Mucha geometria, vertex shaders lentos en PS3/Vita : backface culling por CPU
Mucho alpha test (discard): Lento en PSVita
Version xbox: frecuentes saltos (aleatorios) en el framerate debido al GC. En PS3/Vita framerate consistente, determinista.
Página anterior | Volver al principio del trabajo | Página siguiente |