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 |