Dolphin 에뮬레이터 - Dolphin 진행 보고서: 릴리스 2603
(dolphin-emu.org)- 2003년 GameCube 에뮬레이터로 시작한 Dolphin이 2026년 Triforce 아케이드 시스템 지원을 추가하며 새로운 플랫폼 영역으로 확장됨
- MMU Fastmem 최적화로 페이지 테이블 기반 메모리 접근을 가속화, 특히 Rogue Squadron III가 처음으로 풀 스피드로 실행 가능해짐
- Mario Strikers Charged의 온라인 동기화 버그가 5년 만에 해결되어, 실제 Wii와의 네트워크 플레이가 정확히 동작함
- Triforce 에뮬레이션에서는 The Key of Avalon의 터치스크린 프로토콜과 IC 카드 기능 복원이 진행 중이며, F-Zero AX 및 Virtua Striker 4 관련 기능도 개선 예정
- 게임 로딩을 RAM에 캐시하는 기능, SDL 컨트롤러 힌트 설정, Wii 메뉴 타이밍 조정 등 사용자 경험과 성능을 향상시키는 다수의 기능이 추가됨
Triforce 지원 추가
- Dolphin이 Sega·Namco·Nintendo의 공동 아케이드 시스템 Triforce를 공식 지원
- Magnetic Card 자동 삽입, 지역 설정, 멀티캐비닛 에뮬레이션 버그 수정 등 초기 개선 포함
- The Key of Avalon의 터치스크린 프로토콜이 Elo SmartSet과 유사함이 확인되어, 게임 시작까지 성공했으나 IC 카드 초기화 문제로 중단됨
- IC 카드 기능 복원을 통해 Virtua Striker 4, Gekitou Pro Yakyuu 등에서 팀 빌드·캐릭터 생성 모드가 다시 작동 예정
MMU Fastmem 및 Rogue Squadron 최적화
-
페이지 테이블 Fastmem 매핑 구현으로 Rogue Squadron II·III의 성능이 최대 두 배 향상
-
tlbie명령 추적을 통해 페이지 테이블 변경을 실시간 반영
-
- Branch Following 비활성화, 코드 무효화 최적화, CPU Vertex Culling 활성화 등으로 프레임 드롭과 스터터링 감소
- Rogue Squadron III는 고성능 하드웨어에서 처음으로 완전한 속도로 실행 가능
Mario Strikers Charged 버그 해결
- Dolphin과 실제 Wii 간 물리 동기화 오류의 원인이
fmadds명령의 부정확한 부동소수 연산으로 확인 -
2Sum알고리듬을 이용한 정밀한 반올림 보정으로 문제 해결, 온라인 매치가 완전 동기화됨 - 이 수정은 Inazuma Eleven GO: Strikers 2013의 유사 문제 해결 경험을 기반으로 발전
기타 주요 개선
- Wii 메뉴 데이터 관리 타이밍을 실제 하드웨어에 가깝게 조정해, NAND 접근 시 과도한 CPU 부하 완화
- Load Whole Game into Memory 기능 추가로 NAS 등 네트워크 저장소에서 실행 시 디스크 대기 지연 제거
- SDL 힌트 GUI 설정 도입으로 Joy-Con 분리, DualSense 핫플러그 문제 등 컨트롤러 호환성 개선
- Need for Speed: Hot Pursuit 2, Rabbids Go Home 등 일부 게임에 VBI 동기화 패치 적용으로 프레임 제한 정상화
성능 및 커뮤니티 기여
- 이번 릴리스는 465개의 커밋이 병합되었으며, 다수의 커뮤니티 테스트와 하드웨어 리서치가 반영
- Rogue Squadron 시리즈, Mario Strikers Charged, Triforce 등 장기 난제 해결 사례가 포함되어 Dolphin의 정확성과 성능이 크게 향상됨
Hacker News 의견들
-
오래전에 종료된 공식 서버 대신, Dolphin이 실제 Wii 콘솔과 온라인으로 연결되게 만든다는 점이 놀라움
이런 열정적인 헌신을 가진 사람들이 있다는 게 정말 기쁨임- 인류가 이렇게 협력한다면 얼마나 많은 걸 이룰 수 있을지 상상함
하지만 단기적으로는 이런 기술 발전이 불평등을 더 심화시킬 수도 있음 - 이런 노력은 게임 보존을 위해 꼭 필요함
에뮬레이터의 버그로 인해 게임이 완전히 혹은 부분적으로 실행되지 않는다면, 미래 세대가 이 게임을 경험할 기회를 잃게 됨
사람들이 이렇게까지 신경 써주는 게 정말 멋짐
- 인류가 이렇게 협력한다면 얼마나 많은 걸 이룰 수 있을지 상상함
-
내가 가장 흥미롭게 느끼는 부분은, 에뮬레이터 개발이 종종 원래 게임이 이상하지만 의도된 동작을 하고 있었다는 걸 발견하게 된다는 점임
- 거의 2년 동안 디컴파일 작업을 해왔는데, 컴파일러의 특이한 동작이나 오래된 GCC 버전의 한계, 그리고 당시 프로그래머들의 미신 같은 코드를 보는 게 재미있음
90년대 중반의 GCC가 이미 내가 2000년대 초에 수동으로 최적화하려 했던 걸 자동으로 처리하고 있었다는 걸 알고 놀랐음 - 오늘 9front 커뮤니티 덕분에 일부 GB 게임이 카트리지의 SRAM을 스왑 메모리처럼 사용했다는 걸 알게 됨
에뮬레이터가 SRAM을 저장하지 않아 세이브 불일치가 생겼는데, 빠르게 수정됨
Plan9 기반의 단순한 C 코드라 수정이 쉬웠음
- 거의 2년 동안 디컴파일 작업을 해왔는데, 컴파일러의 특이한 동작이나 오래된 GCC 버전의 한계, 그리고 당시 프로그래머들의 미신 같은 코드를 보는 게 재미있음
-
나는 항상 Dolphin 개발 보고서를 읽는 걸 좋아함
기술적인 내용을 이해하기 쉽게 잘 풀어줌- 나도 프로그래머가 되기 전부터 그 보고서를 읽었는데, 프로그램의 내부 동작을 논리적으로 생각하는 법을 배우는 데 큰 도움이 되었음
- 특히 단순히 “무엇이 바뀌었는가”가 아니라 “왜 어려웠는가”를 설명해주는 점이 인상적임
-
Dolphin 보고서와 관련해, 작성자 중 한 명이 오픈소스 에뮬레이터 커뮤니티의 문제를 다룬 흥미로운 글을 올렸음
Rethinking Open Source
요약하자면, 커뮤니티 기반과 정체성이 확립되기 전에 하이프가 큰 프로젝트를 오픈소스로 공개하면, 비현실적인 요구를 하는 사용자들로 인해 문제가 생길 수 있음
또한 미완성 브랜치를 다른 이가 가져가서 자신이 만든 것처럼 배포하는 경우도 있음
Dolphin 팀은 이런 어려움 속에서도 높은 수준의 전문성으로 프로젝트를 운영하고 있음- 공격적이거나 감사하지 않는 사용자들 속에서 동기부여를 유지하는 건 정말 힘든 일임
돈을 받는 상황에서도 어렵지만, 무료 프로젝트라면 더 힘들 것 같음 - 예전에 여러 개의 비호환 브랜치를 써야 했는데, 이제 메인라인에 Triforce 지원이 들어간 것 같아 기쁨
예전 포크는 완성도가 낮았음
- 공격적이거나 감사하지 않는 사용자들 속에서 동기부여를 유지하는 건 정말 힘든 일임
-
글쓴이가 자신이 쓴 내용에 대해 진심으로 신나 있는 모습이 보기 좋음
- JMC는 정말 최고임
예전에 Melee 네트플레이 버그를 보고했을 때, 그는 모든 것에 호기심을 가지고 깊이 파고드는 사람이었음
- JMC는 정말 최고임
-
Dolphin은 정말 똑똑한 개발의 모범 사례임
예전에는 내 구형 머신의 4코어를 모두 써야 Metroid Prime이 돌아갔는데, 몇 년 뒤엔 같은 게임이 코어의 25%만 사용함
JIT와 에뮬레이션 효율화 덕분에 성능이 비약적으로 향상된 것임
이런 최적화는 진짜 대단한 성취였음 -
Triforce 아케이드 호환성 논의 중에 “IC 카드 지원”이 언급되었는데, 이게 구현되면 많은 기능이 열릴 거라고 함
일본의 교통카드처럼 보이지만, Triforce 기판에서는 게임 진행 데이터를 저장하는 데 사용된다고 함
미국 아케이드에서는 본 적이 없는 멋진 기능임- Triforce 게임은 자기식 카드(magcard) 와 IC 카드 두 종류를 지원함
magcard는 저렴하지만 내구성이 약하고, 인쇄가 가능함
IC 카드는 더 두껍고 튼튼하지만 인쇄는 불가능함
사진과 함께 설명된 출처: Rise of the Triforce - 사실 이건 메모리 카드를 의미함
거의 모든 Triforce 게임이 세이브를 위해 카드를 사용함
아마 미국에서도 Mario Kart Arcade GP 버전을 본 적이 있을 것임 - 미국 아케이드에도 존재함
maimai, chunithm, DDR 등에서 사용하는 AIME 카드와 비슷한 개념임
다만 Triforce의 IC 카드는 인증뿐 아니라 데이터 저장 기능도 있음
- Triforce 게임은 자기식 카드(magcard) 와 IC 카드 두 종류를 지원함
-
fnmsubs CPU 명령이 JIT에서는 잘못 구현되어 있었지만 인터프리터에서는 올바르게 작동했다는 사례가 흥미로움
이런 경우 differential fuzzing을 적용하기 좋은 기회라고 생각함 -
이번 글의 핵심은 Dolphin이 Triforce 아케이드 캐비닛 지원을 복원했다는 점임
Triforce는 Nintendo, Sega, Namco가 공동 개발한 하드웨어로, Dolphin이 2016년에 지원을 중단했었음
이제 F-Zero AX, Mario Kart Arcade GP 1·2 같은 게임이 다시 돌아옴
자세한 내용: The Return of the Triforce- 몇 주 전에도 관련 스레드가 있었음
이전 토론 링크
기사 첫 문단이 이미 이 내용을 다루고 있어서 “묻힌 주제”라고 하긴 어려움
- 몇 주 전에도 관련 스레드가 있었음
-
혹시 기부를 받는지 궁금했는데, 공식 사이트에서는 찾을 수 없었음
- 실제로는 기부를 받지 않음
관련 포럼 글: Dolphin Donations
- 실제로는 기부를 받지 않음