Loading...

E. WII


EmuCR: Dolphin








Dolphin es el primer emulador Gamecube capaz de ejecutar juegos comerciales! Dolphin es un emulador de Gamecube, Wii y Triforce (la máquina de arcade basada en el Gamecube) que soporta muchas características y habilidades adicionales que no están presentes en las consolas originales. Tiene un apoyo parcial de Wii y juega la mayoría de los juegos de Gamecube.

Dolphin 5.0

Informe de progreso

Uno de los desafíos más interesantes de desarrollar un emulador es que tanto el hardware de destino como la mayoría del software de destino comiencen como cuadros negros. Como se menciona a menudo en los círculos de emulación, el primer paso para desarrollar un emulador para una consola es obtener código sin firmar que se ejecuta en hardware real. Si bien ejecutar código sin firmar en GameCube puede ser un poco molesto, ya que requiere hardware personalizado o una mezcla del adaptador de banda ancha y ciertos juegos, el Wii tiene uno de los entornos homebrew más robustos de cualquier consola. Casi cualquier persona puede descargar devkitpro, escribir su propio homebrew y ejecutarlo en la consola Wii.

La verdad es que Dolphin se usa principalmente como un emulador para juegos minoristas, pero también puede ser un paso útil para probar homebrew y hacks. Después de todo, cuando se ejecuta en Dolphin, los usuarios pueden pausar la ejecución, volcar la memoria RAM y meter memoria sin la necesidad de un USB Gecko. Si bien la edad de oro de Wii Homebrew ha pasado hace mucho tiempo, varios ataques de juegos todavía están en desarrollo activo y el Wii sigue siendo una de las consolas de juego más fáciles de lanzar y desarrollar software. Debido a que homebrew puede confiar en comportamientos que los juegos nunca querrían hacer, incluso los proyectos más simples pueden tropezar con errores de emulador.

Los desarrolladores con la amabilidad de hacer su fuente abierta de código abierto dan a los desarrolladores de Dolphin una forma interesante de resolver problemas. ¡Es uno de los pocos casos en que el software que se está depurando no es una caja negra! Esto reduce en gran medida la cantidad de esfuerzo y experiencia necesarios para depurar lo que está sucediendo en un problema: en lugar de trazar un mapa de lo que un juego está haciendo a través del ensamblaje, ¡podemos simplemente mirar el código fuente! Los usuarios que escriben pruebas que rompen Dolphin y proporcionan código fuente nos dan una apariencia mucho más fácil que tratar de aplicar ingeniería inversa a lo que está haciendo el software de código cerrado.

Este mes, se descubrieron dos errores que, según nuestro conocimiento, ¡no afectan a ningún software minorista ! Gracias a los proyectos homebrew, estos errores ahora son cosa del pasado. Además de eso, Dolphin en Android ha visto una gran cantidad de mejoras desde nuestro artículo a principios de este mes , y netplay vio algunas características nuevas para facilitar la configuración de juegos junto con un nuevo modo para reducir la latencia en partidos de tres / cuatro jugadores.

Cambios notables

Los últimos meses han sido emocionantes para los usuarios de Android, ya que varios desarrolladores han asumido el reto de estabilizar y arreglar la versión de Dolphin, a veces maligna, de Android.

Los usuarios que siguen Dolphin en Android pueden haber notado que muchas de esas cosas molestas sobre el uso de Dolphin en Android están siendo reparadas. Si bien algunas características son más notables que otras, es seguro decir que los nuevos usuarios apreciarán los controles táctiles predeterminados en lugar de todos los controles agrupados en la esquina, y en realidad los menús de configuración de juego por juego . Estos son solo dos ejemplos, pero una multitud de cambios más grandes y más pequeños han mejorado enormemente la experiencia del usuario.

Los controles táctiles predeterminados hacen que saltar a los juegos sea una tarea menos ardua.
Las Cubiertas de juego ahora completan la lista en lugar de banners de baja resolución.

Ha habido un montón de cambios menores diseñados para que el uso de Dolphin en Android sea mejor para quienes lo prueban. Hay algunas cosas que son solo una desafortunada realidad: los teléfonos de hoy no son lo suficientemente fuertes como para ejecutar la mayor parte de la biblioteca de Dolphin. Por otro lado, muchas de las molestias menores con la configuración y el uso de Dolphin, están bajo nuestro control y podemos continuar haciéndolos mejores. Desde el artículo de The State of Dolphin en Android a principios de este mes, mahdihijazi y zackhow han seguido añadiendo muchas características necesarias para una experiencia más fluida.

En particular, zackhow ha estado trabajando arduamente para mejorar la configuración y el uso de varios esquemas de control de Dolphin más fácilmente. Hay una gran cantidad de compromisos a lo largo del mes que solucionan problemas durante todo el proceso de configuración del controlador . En la parte frontal de la pantalla táctil, además de agregar los diseños predeterminados, zackhow también ha renovado el dpad en pantalla para que funcione más como joysticks, por lo que puedes mover el pulgar para cambiar las direcciones en lugar de bloquearlo en una dirección por empujón . No hace falta decir que, si estás intentando configurar controles remotos Wii emulados, asegúrate de haber actualizado a la última versión en la Play Store o en nuestra página de descarga . Hubo muchos errores críticos que podían causar bloqueos, controles no receptivos y otros problemas que no son culpa del usuario!

Otras contribuciones notables de Android han sido proporcionadas por Riking y weihuoya . Riking se tomó la molestia de volver a formatear el código de Android para seguir las pautas del código de Dolphin y weihuoya envió una solución para evitar el parpadeo al cambiar de pantalla en la GUI de Android.

Por último, pero no menos importante, Dolphin en Android ahora puede proporcionar estadísticas de uso. Considerando cuán ansiosos están algunos usuarios de Android por contarnos sobre su experiencia , esperamos utilizar estas estadísticas para ayudar a identificar los problemas que enfrentan los usuarios y mucho más en el futuro. Al igual que en la versión de escritorio de Dolphin, esta recopilación de datos es 100% opcional y los usuarios deben participar para que se active. Al actualizar a la última versión de la aplicación desde Play Store, debe recibir un aviso solicitando permiso. Si dices que no, nunca más te molestarás con eso. Si cambia de opinión, siempre puede apagarlo o encenderlo en el menú Configuración.

5.0-8553 - JIT64

Si bien estos son dos arreglos muy diferentes, surgieron de la misma manera: los ejecutables caseros fallaron en el recopilador Just-in-Time (JIT) de Dolphin. El primero de ellos es en realidad un error muy divertido que fue reportado por CryZe92 . Estaban recopilando aplicaciones / romhacks homebrew de Wii en Rust con LLVM, y Dolphin's JIT no manejaba bien esos ejecutables, con fallas y bloqueos molestos. Si bien descubrieron que el JIT funcionaría si las optimizaciones de LLVM estuvieran desactivadas, esa no era una solución ideal.

Para ayudarnos a resolver el error, compilaron un ejecutable muy simple que imprimió el mensaje "Hola" cuando se ejecutó correctamente. En el intérprete de Dolphin, todo funcionó correctamente. En Dolphin's JIT, el texto fue malinterpretado en caracteres no imprimibles, dándonos esto:

 

\u{48}\u{65}\u{6c}\u{6c}\u{6f}

 

Dado que el periodista ya había trabajado mucho para aislar el error, Delroth fue capaz de descifrar qué estaba pasando mal. Las CPU PowerPC tienen registros especiales llamados Registros de condición (CR). Estos registros generalmente se administran automáticamente dentro de la CPU, y contienen información sobre los resultados de una operación anterior: ¿era menor, igual o mayor que cero? Controlar esto es muy costoso, por lo que Dolphin hace un gran esfuerzo para optimizar las operaciones en torno a los CR. PowerPC también tiene códigos de operación específicos para realizar manipulaciones en CR, pero afortunadamente el compilador utilizado por los juegos oficiales ( Metrowerks CodeWarrior) y las cadenas de herramientas caseras ( GCC ) más comunes casi nunca los usan. Sin embargo, esto significa que Dolphin no está bien probado en estos casos.

Ingrese LLVM , un compilador que es un gran admirador de estos códigos de operación de manipulación CR. Utiliza una amplia gama de códigos de operación que Dolphin casi no ha probado en contra. Como era de esperar, uno de estos códigos de operación (crset) tenía un error en su implementación: solo funcionaría si se estaba configurando un bit determinado, y no haría nada para todos los demás bits. ¡Reparar ese único problema causa que todos los errores al usar las optimizaciones de LLVM en Dolphin desaparezcan!

5.0-8576 - JIT64

El segundo problema nos lleva a un proyecto homebrew más establecido para Wii llamado Not64 . Este es un puerto de Mupen64 para la consola Wii que cuenta con un recompilador de CPU MIPS a PowerPC y muchas otras opciones para tratar de hacer que la emulación N64 se pueda jugar con la potencia de procesamiento limitada de la Wii. Con Dolphin, podemos hacer un poco de trampas y poner en marcha el reloj emulado de la CPU en cantidades ridículas para que la mayoría de los juegos corran a toda velocidad, siempre que su computadora pueda manejarlo. Dicho esto, Not64 es un homebrew bastante complicado de emular y tenía algunos problemas bastante importantes en Dolphin.

La mayor limitación que enfrentan los usuarios que intentan ejecutar Not64 in Dolphin es el hecho de que cualquier rom de 32MB no se cargaría cuando se usa el JIT. Debido a que la memoria de Wii es limitada, Not64 solo cargaría parcialmente la ROM en MEM2. Luego usaría paginación ( al igual que los juegos MMU ) para cargar partes de la ROM dentro y fuera de NAND. Si quisieras pasar al intérprete, podrías evitar este desagradable error, pero para entonces cualquier esperanza de usar el emulador de forma jugable desaparecería.

Mucha información faltante y una región incorrecta. Intenta golpear el juego en este estado y se congelará muy pronto ya que no puede cargar datos críticos.
Con el intérprete, la ROM se cargaría correctamente si estuviera dispuesto a esperar varios minutos.

Considerando que Not64 funciona en el intérprete de Dolphin pero no en su JIT, puede parecer que una instrucción en el JIT está rota. Pero ese no es el caso aquí, ese error está realmente en el comportamiento del JIT cuando recurrimos al intérprete en un caso muy específico. Homebrew puede usar instrucciones que los juegos tienden a no usar mucho, y muchas de estas instrucciones raramente usadas no se implementan en el JIT. Algunas de estas instrucciones son bastante difíciles de implementar, mientras que otras son tan raras que no vale la pena escribir una implementación de JIT. En el caso de Not64 , estaba usando la instrucción lswx (cargar cadena de caracteres indexada) y desencadenar excepciones DSI (interrupción de almacenamiento de datos) con ella para ingresar y sacar datos de MEM1. Esa instrucción fue tan pocas veces utilizada para ese caso que Dolphin todavía tenía una alerta de pánico en su lugar para advertir a los desarrolladores de este comportamiento válido hasta que se descubrió que algo realmente lo usó a principios de este mes.

Esto puede hacer que parezca que el error debe estar en el intérprete, pero como se mencionó anteriormente, el intérprete podría cargar las ROM muy bien. Entonces, ¿qué estaba pasando exactamente? Bueno, Delroth cavó más profundo y encontró un error bastante atroz al retroceder desde el JIT al intérprete: Dolphin se olvidaba de actualizar PC (contador de programas) al valor correcto.

Con una PC obsoleta, el manejador de excepciones restablecería el punto de ejecución al comienzo del último bloque de ejecución en el que se desencadenó la excepción. Eso significaba que si la excepción se activaba a mitad del bloque de ejecución, ¡Dolphin acabaría ejecutando erróneamente instrucciones adicionales por segunda vez! Esto, más que probable, podría bloquear Dolphin o Not64 de una manera bastante espectacular.

Si tienes suerte, not64 se bloqueará antes que Dolphin y te dará una hermosa pantalla de error.

Una vez que se corrigió este error, los problemas con Not64 desaparecieron y ahora puede cargar ROM de cualquier tamaño sin la penalidad de rendimiento de habilitar uno de los intérpretes de Dolphin. Así que si quieres sacar tus frustraciones en la deslucida biblioteca Wii Virtual Console N64 de Nintendo al usar Not64 emulado dentro de Dolphin ... puedes. Todavía es una mejor idea usar un emulador nativo en su dispositivo de elección, pero la opción está ahí.

¡Ahora puedes jugar un puerto en un emulador en un emulador!

Nota: Dolphin no puede detectar si Not64 es un ejecutable de Wii o GameCube debido a la forma en que está empaquetado y por defecto a GameCube. Como tal, se debe usar un cargador casero de Wii, como el canal Open Homebrew Channel para cargar Not64 en Dolphin. Sí, sabemos que esto es una tontería.

5.0-8602 , 5.0-8633 , y 5.0-8669

Con la adición de Discord Rich Presence, anunciada en el Informe de progreso de junio , una de las mayores preguntas formuladas en las redes sociales fue si Discord podría usarse para ayudar a organizar los juegos netplay. La respuesta ahora es gracias a la última incorporación de YourWaifu al soporte de presencia enriquecida de Dolphin agregado el mes pasado. Unirse a Netplay es más fácil que nunca: solo tiene una compilación compatible con Dolphin en su computadora y habilitada la detección de juegos de Discord. Luego, si está organizando una sesión de netplay, puede invitar a canales o personas individuales para jugar. Además de eso, otras personas pueden solicitar unirse a su juego también.

Si tienes una versión compatible de Dolphin, ¡todo lo que tienes que hacer es aceptar!

delroth , y Techjar también se unieron para agregar portadas de juegos para aparecer en algunos de los juegos más populares cuando se ejecutan en discordia. Nota: las aplicaciones tienen un límite de 150 activos, por lo que solo un pequeño subconjunto de los juegos más populares funcionará con esta función.

¡Por supuesto que agregamos a Melee como uno de los juegos con portada!

5.0-8598

Con la eliminación de SOIL (Simple OpenGL Image Loader) de las dependencias externas de Dolphin en 5.0-7631 , Dolphin ahora depende de libpng directamente. Si bien el paso a algo más moderno ha sido principalmente una transición fluida, algunas texturas PNG transparentes tenían problemas con el nuevo cargador. AdmiralCurtiss determinó que LoadPNG () estaba fallando con ciertas texturas PNG transparentes válidas . Para arreglar esto y simplificar enormemente la carga PNG, migró el cargador PNG para usar la nueva API simplificada presente en libpng 1.6 y posteriores .

Si bien las nubes pueden parecer bastante interesantes, en realidad se están cargando de forma involuntaria.
Con la nueva API simplificada, se cargan correctamente una vez más.

El único inconveniente de esto es que Dolphin ahora requiere libpng 1.6 como mínimo y no compilará con versiones anteriores. También hubo un error de bloqueo presente inmediatamente después de la fusión de esta compilación. Esto fue rectificado rápidamente en 5.0-8606 .

Por supuesto, estos increíbles paquetes de texturas no existirían sin los creadores de contenido que ponen su corazón en hacer paquetes de calidad. En los foros, un grupo de usuarios con Custom Texture Subforum mantiene herramientas, guías y más. Muchos de los problemas que se resuelven en los Informes de progreso provienen de estos usuarios que ayudan a mantener y mejorar la función de Textura personalizada de Dolphin. Para saber qué contenido necesitan los creadores, a veces se necesita un experto dentro de esa comunidad para ayudar a comunicar lo que necesitan. Bighead ha sido ese usuario durante años y ha ayudado a solicitar nuevas funciones e informar errores. ¡Incluso informaron el error del que acabamos de hablar y el comportamiento que está a punto de seguir!

5.0-8619

Incluso cuando Dolphin técnicamente está haciendo todo bien, crear un paquete de texturas personalizado es un proceso arduo. Los juegos pueden hacer muchas cosas molestas para que reemplazar cada textura sea extremadamente frustrante. En este caso, revisa los siguientes hash:

 tex1_48x51_53403146169829a2_45604eac43c6fd37_9 tex1_48x51_53403146169829a2_00bdbbec7bd28d9d_9 tex1_48x51_53403146169829a2_51202438fd7443e1_9 tex1_48x51_53403146169829a2_b85163ac8b4598d4_9 

Estos hash son todos para la misma textura: la clave grande en The Legend of Zelda: The Wind Waker . Si bien la primera parte del hash es estable, la segunda parte parece efectivamente aleatoria. De hecho, Bighead terminó con literalmente miles de la misma textura con cada uno teniendo un hash diferente después de jugar durante el juego. Si bien la razón de esto no ha sido completamente aislada, una teoría propuso que una parte no utilizada de la paleta de texturas cambia para otros datos. Sin embargo, esto dejó a los creadores de texturas personalizados con un problema muy molesto.

Una mirada interna a cómo se vería el inventario de Link si no tirara cada llave después de usarla.

Techjar decidió investigar la situación y se dio cuenta de que ya había una solución de fuerza bruta para esto. ¡Un símbolo comodín había sido agregado hace años para este caso exacto! Con el símbolo comodín, ¡una sola textura podría representar los miles de duplicados del juego! ... Excepto que el símbolo del comodín era "*", un carácter que no es válido para nombres de archivo en Windows. Como tal, ninguno de los paquetes de texturas hizo uso de él e incluso si lo hicieran, su paquete no funcionaría en Windows. Como tal, Techjar cambia el comodín a $, porque este cambio es efectivo directo. (POR HACER: eliminar este PLZ)

Ahora, en el caso de las claves de jefe duplicadas, solo tiene que haber una única textura personalizada: tex1_48x51_53403146169829a2 _ $ _ 9. Esto debería hacer que completar paquetes de texturas sea mucho más fácil, especialmente cuando se trata de molestas duplicaciones de texturas objeto de dumping.

5.0-8631

Si bien el juego de red actual de par a par de Dolphin es óptimo para juegos de dos jugadores de baja latencia, las cosas tienden a desmoronarse cuando se agrega un tercer / cuarto jugador. Una sesión solo podría funcionar bien en la situación perfecta: computadoras sobrecalificadas con todos los jugadores que tienen conexiones fuertes a Internet y juegos que no empujaron demasiado las cosas. La mayoría de las veces los usuarios terminan decepcionados o tienen que usar un buffer increíblemente alto que deja la mayoría de los juegos de acción / lucha fuera de la cuestión.

Mientras miraba los artículos de red de Factorio , Techjar tuvo una idea sobre el uso del Modo de Autoridad de Entrada de Host. Al otorgarle a un anfitrión la autoridad total sobre cuándo se le dan las entradas al juego, los clientes podrían correr asincrónicamente sin desincorporarlos. Esta reducción en la sincronización da como resultado una experiencia de netplay mucho más suave y reduce en gran medida la latencia en las partidas de cuatro jugadores. Si un cliente en particular tartamudea o lucha, no afectará a nadie más, sino que se retrasará temporalmente. Luego, una vez que terminan los tartamudeos, Dolphin automáticamente hará que el jugador vuelva a su latencia mínima. En la mayoría de los casos de generación de sombreado, ligeros enganches de red y otras formas de ralentización temporal, este proceso será invisible. Para mostrar cómo funciona, aquí hay un ejemplo extremo del proceso en acción.

A pesar de que los clientes se ejecutan de forma asincrónica, Dolphin aún no se desincronizará.

Y esa es la razón por la cual el modo Host Input Authority funciona mucho mejor para juegos de cuatro jugadores. Simplemente hubo demasiada sincronización para hacerlo funcionar en situaciones realistas antes. Sin embargo, existen otros beneficios para los usuarios familiarizados con la función Netplay de Dolphin. En el modo de autoridad de entrada de host , ya no es necesario administrar la latencia del host. ¡Dolphin ahora automáticamente hará que tus entradas se disparen tan pronto como lleguen al host! Mantuvimos la opción de búfer, pero adquiere un nuevo propósito cuando se usa este modo. En lugar de estar directamente relacionado con la latencia, actúa como un rango en el cual Dolphin se considera atrapado como anfitrión. Es un método de seguridad para mantener las conexiones inestables funcionando sin problemas, como internet celular. A menos que tenga una conexión especialmente problemática, simplemente puede configurar el búfer en cero y dejar que Dolphin le otorgue la latencia mínima posible.

Hay algunas dificultades potenciales cuando se utiliza el modo de Autoridad de entrada de host. Debido a que es asincrónico, si un cliente no puede jugar a toda velocidad, no podrá mantenerse al día con el resto de la sala. Otra cosa a tener en cuenta es que la latencia básica ahora es de ida y vuelta para los clientes. Esto significa que en un juego típico de dos jugadores, el host obtiene latencia cero y el cliente tiene el doble de la latencia de igual a igual. Para salas de tres y cuatro jugadores, el modo de autoridad de entrada de host tiende a otorgar una latencia más baja ya que cada cliente es el único responsable de su propia latencia. Para obtener más información, consulte el siguiente video.

La cuestión de los servidores dedicados

Servidores dedicados podría ser una herramienta extremadamente útil para netplay utilizando el modo de autoridad de entrada de host . Después de todo, si logras unirte a un servidor que sea el correcto, puedes evitar la penalización de doble latencia del nuevo modo al obtener todos los beneficios. Un uso potencial de esto sería para los sitios web competitivos de Super Smash Bros. Melee and Brawl (Está bien, es una broma sobre Brawl . Sin embargo, los juegos de lucha serios como Shrek SuperSlam podrían beneficiarse).

La idea sería tener servidores dedicados para cada región donde los jugadores puedan unirse y organizar juegos. Debido a que este servidor es más o menos estático y usted solo es responsable de su propia latencia, podrá obtener la misma latencia independientemente de a quién juegue en este servidor. Entonces, si alguien de Europa puede soportar el retraso y jugar en el servidor de la Costa Este, no afectará a ninguno de los clientes habituales del servidor. Además de todo eso, dado que el servidor dedicado actúa como host , ningún jugador obtiene una ventaja competitiva al jugar como host. ¿El pateador? ¡Los partidos de dobles serían un juego justo ya que, como se explicó anteriormente, no hay penalización de latencia por tener más jugadores en una habitación! Los servidores también pueden registrar automáticamente las entradas para la verificación de coincidencia, ya que la función de entrada de registros realmente funciona con el modo de autoridad de entrada de host.

Si bien todo esto suena genial, aún nos esperan algunos desafíos técnicos antes de que podamos pensar en implementar servidores dedicados. Además del código de red de Dolphin que no está diseñado para servidores dedicados, existe el problema de que actualmente Dolphin requiere que el host emule el juego para que pueda enviar emular la entrada en serie y las encuestas MMIO. A largo plazo, los servidores dedicados podrían suceder, pero habrá que hacer muchos pasos más pequeños y limpiezas para que eso sea posible.


Calle Los Nogales 251 Torre 3 Oficina 709 El Agustino Lima
(+51) 984 763 626