2P by neo 6달전 | favorite | 댓글 1개

AoE는 어셈블리로 작성되었나요? - 이것이 사실인가요?!

  • AoE와 AoK의 어셈블리 코드 작성: 약 13,000줄의 x86 32비트 어셈블리 코드가 작성됨. 대부분은 '그리기 코어'에 해당하는 약 11,500줄로, SLP 스프라이트를 다양한 방식으로 그림.
  • 어셈블리 코드의 컴파일: Microsoft Macro Assembler 6.1을 사용하여 .asm 파일을 .obj 파일로 "컴파일".
  • C++ 코드 내 인라인 어셈블리: 컴파일러가 '인라인 어셈블리'를 지원하여 함수 내에 어셈블리 코드 블록을 __asm { } 키워드로 추가.
  • 그리기 코어의 성능 향상: 어셈블리를 사용한 그리기 코어는 C++ 참조 구현보다 약 10배 빠른 스프라이트 그리기 속도를 제공.
  • 어셈블리 코드의 기술적 설계: 캐시 아키텍처와 UV 파이프를 고려한 설계로, 펜티엄 프로세서의 특성을 활용.
  • AoK:HD 에디션에서의 어셈블리 코드: AoK:HD 에디션(32비트 게임)에서도 어셈블리 코드 사용.
  • Definitive Editions에서의 C++로의 재작성: 64비트 프로그램인 Definitive Editions에서 어셈블리 함수를 C++로 재작성.

AoE 커뮤니티 및 리소스

  • 라이브 스트림: Twitch 및 Facebook에서 다양한 언어로 진행되는 AoE 관련 라이브 스트림 목록.
  • 온라인 플레이: Steam과 Microsoft Store에서 AoE2 Definitive Edition을 포함한 다양한 버전의 게임 플레이 가능.
  • 현재 패치: 2023년 7월 26일에 업데이트된 패치 정보 제공.
  • 토너먼트 및 이벤트: AoEZone, AoE2 Liquipedia, 이벤트 캘린더를 통한 토너먼트 정보 제공.
  • 커뮤니티 사이트: 공식 Age of Empires 페이지, 포럼, Discord, AoK Heaven 등 다양한 커뮤니티 사이트 링크.
  • 유닛 및 건물 통계: 유닛 및 카운터 정보, 버그 수정, 게임 팁, 패치 정보 등을 제공하는 위키 및 자료 링크.
  • YouTube 채널: 공식 채널 및 유명 AoE2 YouTubers 목록.

GN⁺의 의견

  • 어셈블리 코드의 중요성: AoE 시리즈의 초기 버전에서 어셈블리 코드가 게임의 성능에 큰 영향을 미쳤음. 특히 그래픽 처리에 있어서 현대의 고급 언어로는 달성하기 어려운 최적화를 구현했음.
  • 기술 발전의 영향: 시간이 지나면서 64비트 컴파일러의 발전과 멀티코어 프로세싱의 도입으로 어셈블리 코드의 필요성이 감소함. 이는 프로그래밍 언어와 하드웨어의 발전이 소프트웨어 개발에 어떻게 영향을 미치는지를 보여줌.
  • 커뮤니티의 역할: AoE 커뮤니티는 게임의 지속적인 인기와 발전에 중요한 역할을 함. 다양한 리소스와 토론을 통해 팬들이 게임에 대한 열정을 공유하고 지식을 나눌 수 있는 플랫폼을 제공함.
Hacker News 의견
  • 한 해커뉴스 사용자는 1999-2000년에 PSX에서 PC로 코나미 게임을 포팅한 경험을 공유했다. C언어로 작성된 코드에는 인라인 어셈블리가 포함된 #ifdef가 많았으며, 원본 C 코드가 유지되었다고 한다. 이 원본 C 코드가 포팅 작업에 큰 도움이 되었다고 한다. 또한, 인텔의 카트마이 프로세서를 위한 소프트웨어 개발 작업에서 SIMD 명령어를 사용한 경험과 어셈블리 최적화 작업에 대해 언급했다. 이 과정에서 Intel의 VTune이 큰 도움이 되었다고 한다. 그러나 어셈블리로 작성한 코드가 컴파일러가 생성한 코드보다 느린 경우도 있었다고 회상했다.

  • 또 다른 사용자는 현재 베를린에서 진행 중인 'Age of Empires 2' (AoE2) 게임의 대규모 토너먼트인 NAC5에 대해 언급하며, 관련 링크를 공유했다.

  • 한 개발자 인터뷰를 인용하여, 게임을 출시하기 전에 패치가 필요하다는 것을 알고 있다면 게임을 출시해서는 안 된다는 의견을 나타냈다.

  • 'Age of Empires'의 속도 향상 기술 중 하나가 iD 소프트웨어 프로그래머이자 최적화 전문가인 마이클 아브라쉬와의 점심 식사 중에 논의되었다는 사실을 언급하며, 인터넷으로 인해 잃어버린 자유로운 상호작용에 대해 아쉬움을 표현했다.

  • 어셈블리를 사용한 그래픽 코어의 경우 C++에 비해 약 10배의 스프라이트 그리기 속도 향상을 이루었다는 놀라운 사실을 공유했다.

  • 마이클 아브라쉬가 그래픽 혁신이 일어난 곳이라면 어디든 등장하는 것 같다는 의견을 표현했다.

  • 한 사용자는 'Age of Empires 2: Definitive Edition'이 왜 Wine에서 성능이 떨어지는지 이해할 기회가 될 수도 있다고 언급했다.

  • 'Age of Empires 2: Definitive Edition'은 게임 코드 자체는 아니지만, 실행 파일이 실행 시간에 게임 코드를 압축 해제하는 핸드라이팅 어셈블리를 여전히 포함하고 있다고 한다. 이로 인해 모든 코드가 읽기, 쓰기, 실행이 가능한 상태(RWX)로 남아 있어 보안에 매우 취약하다고 지적했다.

  • 보랜드의 역사에 대해 읽고 있는 한 사용자는 터보 파스칼 컴파일러가 대부분 어셈블리로 작성되었으며, 델파이 1.0에서도 사용되었다고 한다. 보랜드 내에서 아무도 코드에 큰 변화를 줄 수 없었기 때문에 결국 델파이 2.0을 위해 코드를 다시 작성했다고 한다. 어셈블리 언어로 복잡한 CPU를 위한 소프트웨어를 작성한 프로그래머들에게는 독특한 특성이 있다고 생각한다고 말했다.