2 puntos por GN⁺ 2024-01-08 | 1 comentarios | Compartir por WhatsApp

¿AoE fue escrito en ensamblador? - ¿¡Esto es verdad?!

  • Escritura de código ensamblador para AoE y AoK: Se escribieron unas 13,000 líneas de código ensamblador x86 de 32 bits. La mayor parte correspondía al "núcleo de renderizado", unas 11,500 líneas, que dibujaban sprites SLP de distintas maneras.
  • Compilación del código ensamblador: Se usó Microsoft Macro Assembler 6.1 para "compilar" archivos .asm en archivos .obj.
  • Ensamblador en línea dentro del código C++: El compilador soportaba "ensamblador en línea", lo que permitía agregar bloques de código ensamblador dentro de funciones con la palabra clave __asm { }.
  • Mejora de rendimiento del núcleo de renderizado: El núcleo de renderizado hecho en ensamblador ofrecía una velocidad de dibujo de sprites aproximadamente 10 veces mayor que la implementación de referencia en C++.
  • Diseño técnico del código ensamblador: Fue diseñado considerando la arquitectura de caché y el pipeline UV, aprovechando las características de los procesadores Pentium.
  • Código ensamblador en la edición AoK:HD: La edición AoK:HD (juego de 32 bits) también usaba código ensamblador.
  • Reescritura a C++ en las Definitive Editions: En las Definitive Editions, que son programas de 64 bits, las funciones en ensamblador se reescribieron en C++.

Comunidad y recursos de AoE

  • Transmisiones en vivo: Lista de transmisiones en vivo relacionadas con AoE en Twitch y Facebook en varios idiomas.
  • Juego en línea: Se puede jugar distintas versiones del juego, incluyendo Age of Empires 2 Definitive Edition, en Steam y Microsoft Store.
  • Parche actual: Se ofrece información del parche actualizado al 26 de julio de 2023.
  • Torneos y eventos: Se ofrece información de torneos a través de AoEZone, AoE2 Liquipedia y un calendario de eventos.
  • Sitios de comunidad: Enlaces a varios sitios de comunidad, como la página oficial de Age of Empires, foros, Discord y AoK Heaven.
  • Estadísticas de unidades y edificios: Enlaces a wikis y recursos con información sobre unidades y counters, corrección de bugs, consejos de juego e información de parches.
  • Canales de YouTube: Lista del canal oficial y de YouTubers conocidos de AoE2.

Opinión de GN⁺

  • Importancia del código ensamblador: En las primeras versiones de la serie AoE, el código ensamblador tuvo un gran impacto en el rendimiento del juego. En especial en el procesamiento gráfico, implementó optimizaciones difíciles de lograr con lenguajes de alto nivel modernos.
  • Impacto del avance tecnológico: Con el paso del tiempo, el avance de los compiladores de 64 bits y la introducción del procesamiento multinúcleo redujeron la necesidad de usar ensamblador. Esto muestra cómo la evolución de los lenguajes de programación y del hardware influye en el desarrollo de software.
  • Rol de la comunidad: La comunidad de AoE cumple un papel importante en la popularidad y evolución continua del juego. A través de diversos recursos y debates, ofrece una plataforma donde los fans pueden compartir su pasión por el juego e intercambiar conocimientos.

1 comentarios

 
GN⁺ 2024-01-08
Comentarios de Hacker News
  • Un usuario de Hacker News compartió su experiencia porteando juegos de Konami de PSX a PC entre 1999 y 2000. Dijo que el código escrito en C tenía muchos #ifdef con ensamblador en línea, y que se conservó el código original en C. Comentó que ese código original en C fue de gran ayuda para el trabajo de portabilidad. También mencionó su experiencia usando instrucciones SIMD y realizando optimizaciones en ensamblador durante el desarrollo de software para el procesador Katmai de Intel. En ese proceso, Intel VTune le resultó de gran ayuda. Sin embargo, recordó que en algunos casos el código escrito en ensamblador era más lento que el generado por el compilador.

  • Otro usuario mencionó NAC5, un gran torneo de 'Age of Empires 2' (AoE2) que se está llevando a cabo actualmente en Berlín, y compartió un enlace relacionado.

  • Citando una entrevista con un desarrollador, expresó la opinión de que si sabes antes del lanzamiento que un juego va a necesitar un parche, entonces no deberías lanzarlo.

  • Mencionó que una de las técnicas para acelerar 'Age of Empires' se discutió durante un almuerzo con Michael Abrash, programador de id Software y experto en optimización, y expresó nostalgia por las interacciones espontáneas que se han perdido con internet.

  • Compartió el sorprendente dato de que, en el caso de un núcleo gráfico hecho en ensamblador, se logró una mejora de aproximadamente 10 veces en la velocidad de dibujo de sprites en comparación con C++.

  • Expresó la opinión de que Michael Abrash parece aparecer en cualquier lugar donde haya ocurrido una innovación gráfica.

  • Un usuario comentó que esto también podría ser una oportunidad para entender por qué 'Age of Empires 2: Definitive Edition' tiene un rendimiento deficiente en Wine.

  • Señaló que 'Age of Empires 2: Definitive Edition', aunque no incluye el código del juego en sí, todavía contiene ensamblador escrito a mano en el ejecutable que descomprime el código del juego en tiempo de ejecución. Debido a esto, todo el código queda con permisos de lectura, escritura y ejecución (RWX), lo que lo hace muy vulnerable desde el punto de vista de la seguridad.

  • Un usuario que está leyendo sobre la historia de Borland comentó que el compilador Turbo Pascal estaba escrito casi por completo en ensamblador y que también se utilizó en Delphi 1.0. Como dentro de Borland nadie podía hacer cambios importantes en ese código, finalmente se reescribió para Delphi 2.0. También dijo que cree que los programadores que escribieron software para CPUs complejas en lenguaje ensamblador tienen rasgos muy particulares.