닌텐도 Wii에서 클래식 Mac OS 부팅 성공
원제 My favourite PowerMac is a Nintendo Wii
154 포인트댓글 44
Key Point
Nintendo 게임 콘솔의 PowerPC 칩셋에서 1990년대 클래식 Mac OS를 정상 부팅한 것은 역사적인 시스템 포팅 사례로, 레트로 컴퓨팅 개발자와 하드웨어 역학 연구자들에게 의미 있는 기술 성과다.
핵심 요약
- 한 개발자가 Nintendo GameCube와 Wii의 ArtX 칩셋(Flipper, Vegas 등)을 탑재한 PowerPC 시스템에서 클래식 Mac OS를 포팅하여 데스크톱에 부팅하는 데 성공했으며, CHRP 클론 시대 이후 Apple 외부에서 처음으로 이루어낸 성과다.
- OpenBIOS를 포팅하고 Open Firmware 환경에서 부팅하는 'Trampoline' 부트로더를 구동하기 위해 SD Gecko와 EXI-IDE 디스크 드라이버를 개발했으며, 기존 Mac OS ROM 이미지를 FAT 파일시스템에 직접 배치하는 방식으로 초기 테스트를 수행했다.
- Trampoline이 가정한 물리 주소 공간 레이아웃이 실제 하드웨어와 맞지 않아 버퍼 주소와 메모리 청크 리스트를 패치했으며, 0x8000_0000 이상의 주소가 메모리 매핑 입출력이라는 가정을 수정하고 RAM 영역의 구멍을 처리하기 위해 0x0100_0000 물리 주소를 0xE000_0000 가상 주소로 매핑했다.
- Trampoline 초기화 함수가 버전마다 다르게 작동하여 탐지 로직을 추가했고, 0x8000_0000 이상의 무조건적 1:1 매핑 충돌을 제거했으며, 마이크로컨트롤러 비트플래그 설정, 버스 주파수 재계산, 인터럽트 컨트롤러 레지스터 쓰기 등 하드웨어별 패치를 적용했다.
- 커널 초기화 단계에서 인터럽트 컨트롤러 드라이버를 Flipper 인터럽트 컨트롤러에 맞게 패치했으며, 68000 에뮬레이터 코드에서 인터럽트 컨트롤러 레지스터 직접 접근 경로를 수정했다.
- 68000 코드에서 ADB와 전원 관리 마이크로컨트롤러 초기화 함수가 하드웨어 존재 여부를 확인하지 않아 저메모리를 손상시키는 문제를 해결했고, 직렬 포트 2 초기화에서 레이블 복사 실수로 인한 무한 루프 버그를 수정했다.
- USB 컨트롤러가 없을 때 USBShimKeyboard 드라이버가 NULL 포인터 호출로 충돌하는 문제를 처리했으며, 전원 관리 드라이버를 BlueBox 스텁 드라이버로 일시적으로 대체했다.
- 디스플레이 드라이버를 작성하고 GameCube 컨트롤러 포트 드라이버를 포팅했으며, 가짜 SCSI 드라이버를 구현하여 블록 입출력 드라이버 문제를 해결했다.
- 광학 디스크 드라이버가 스캐터-게더 버퍼를 사용하면서 기반 SCSI 드라이버의 스캐터-게더 지원 여부를 확인하지 않아 읽기 시 지원을 추가했으며, StartLib!GetStartupDevice 함수가 장치 트리와 내장 SCSI 장치를 가정하는 문제를 수정했다.
- HFS 부트 섹터 오류가 EXI-IDE 드라이버의 버그로 인한 것으로, IDE PIO 모드에서 16비트 단위 읽기 시 정렬되지 않은 홀수 버퍼 주소를 처리하지 못했으며, EXI DMA를 시도하지 않도록 수정했다.
- Mac OS 9.2.2는 에뮬레이터에서 약 1시간 후 충돌했고, Mac OS 7.6은 20분 후 데스크톱에 도달했으며, Open Transport 익스텐션 제거 후 Mac OS 9.2.2가 완벽하게 부팅되었다.
- 실제 하드웨어에서 SD over SPI 방식으로 Mac OS 7.6이 40초 이내에 부팅되었으며, 에뮬레이터에서의 MacsBug 충돌은 에뮬레이션 오류이지 하드웨어 문제가 아니었다.
- 향후 계획은 Wii의 SD 컨트롤러와 USB 컨트롤러 구동, Wii U로의 포팅, RAM 제한 극복을 위한 패치 작업이며, 현재는 아직 공개 릴리스 단계가 아니다.