[Ryan Miceli] Estuve unos años realizando auditorías e ingeniería inversa. halo 2 Cuando un amigo le pidió un favor, su amigo construyó una Xbox mejorada con un overclocking significativo, actualizaciones de RAM, hacks de BIOS y reemplazo de procesador. El objetivo era simple: corregir la resolución máxima preprogramada de 480p a 720p y tal vez incluso a 1080p. Con el doble de velocidad de la CPU pero solo un aumento del 15% en la velocidad de la GPU, [Ryan] fui a trabajar.
El primer paso fue aumentar el tamaño del cuadro de DirectX. El aumento de la resolución de salida ha provocado graves fallos gráficos y errores de visualización. El juego reutiliza cuadros de DirectX varias veces como pantalla de memoria, y cada pantalla codifica un encabezado en la parte superior con información útil como ancho, alto y división. Después de corregir eso, [Ryan] Algo quedó más claro, pero algunos modelos no cargaban (especialmente el agua en la pantalla de título). La respuesta fue una capa de acumulación de textura. Xbox tiene un límite de hardware de solo muestrear cuatro texturas por pasada de sombreador, lo que significa que necesita un búfer de tamaño de resolución para recopilar texturas si desea muestrear más de cuatro texturas. Al intentar ejecutar el juego se produjo un bloqueo debido a la falta de memoria. xbox [Ryan] La actualización funcionaba con 64 MB adicionales de RAM, pero la asignación de memoria estaba en halo 2 Aún no me he beneficiado de ello.
Para ver a dónde va la memoria, [Ryan] He escrito una nueva herramienta llamada software de captura de xbox Para mostrar dónde se asigna la memoria y quién la asigna. La mayoría de los juegos realizan algunas personalizaciones iniciales importantes a partir del asignador original y luego lo incorporan a un asignador personalizado adaptado al juego. Sin embargo, los 64 MB de RAM adicionales estaban en las consolas de desarrollo y estaban asignados para parchear la RAM, lo que significa que la GPU no podía acceder a ellos correctamente. Además, entre los 64 MB inferiores y superiores se encuentra el kernel de Xbox. Ahora, es un ejercicio de depuración de la asignación para trabajar con dos bloques de memoria en lugar de uno contiguo. También mueve los datos de tiempo de ejecución a los 64 MB superiores mientras mantiene las personalizaciones de video en la parte inferior. al final, [Ryan] Me resultó más fácil parchear el kernel del juego para permitir asignaciones de memoria que la GPU puede usar en los 64 MB superiores de memoria. Ejecutar el juego a 720p resultó en una velocidad de fotogramas solo semi-reproducible, cayendo hasta 10 fps en algunas escenas.
Después de algunas pruebas preliminares, [Ryan] Llegué a la conclusión de que no era la GPU o la CPU la que estaba causando esto, sino la cadena de intercambio. halo 2 Activa VSync de forma predeterminada, lo que significa que debe esperar hasta un período vacío antes de cambiar entre los dos cuadros del búfer. Una modificación sencilla consiste en añadir un tercer marco de almacenamiento en caché. El FPS promedio aumentó un 10% y la GPU se convirtió en el siguiente cuello de botella en ajustarse. Con un ligero overclocking de la GPU, el juego se acercaba mucho a los 30 fps. Afortunadamente, [Ryan]No fue necesaria ninguna modificación del BIOS ya que el hardware del reloj de la GPU se podía configurar y modificar como MMIO. Después de la ingeniería inversa, se agregó una función de depuración para las salidas de caché visual. [Ryan] El caché de textura y geometría se ha ajustado para reducir el pop-in por el que era famoso el juego original.
En general, es un truco increíble que requirió meses de arduo trabajo. El código del parche está en Github.Hay un vídeo después del descanso que compara juegos parcheados y no parcheados. Si aún necesitas más Halo en tu vida, ¿por qué no crear un rifle de batalla realista del juego?