피씨는 여전히 구엑박을 에뮬하지 못하는 상황입니다. (헤일로만 데모로 썰렁하게 돌아가죠) 그 이유에 대해선 바로 그 헤일로 데모만 돌아갔던 CXBX 에뮬레이터의 제작자이신 블루쇼군씨의 발언을 번역하면서 알려드리겠습니다.
"엑스박스는 완전 피씨잖아. 에뮬하기 존나 쉬울거야!" 그래, 난 이 병신 같고 쓰잘데기 없는 주장을 백만번이나 들었지만 결국에 끝에 나오는 결론은 '엑스박스와 피씨는 하드웨어가 비슷하니 에뮬레이트 하기가 쉬울것이다'라는 무지한 멍청이들의 이야기만 들을뿐이다. 얘들아, 그건 아주 아주 틀린 마인드적인 프레임이란다. 너희들이 말했지? "그래봤자 얼마나 어렵겠냐?" 내가 말해주지 "존나 빡세게" 엑스박스 하드웨어는 굉장히 복잡하고 다큐멘테이션적인 부분도 굉장히 자료가 전무하다. 추가 설명을 해주겠다.
1. 내가 먼저 묻겠다. 그럼 '피씨' 자체는 에뮬레이트 하기가 쉬울까? 나라면 절대로 그런 말은 못할텐데? bochs측에서의 소스 코드를 한번 보시지. 굉장히 많은 소스 코드지 안그러냐?
2. x86을 에뮬레이트 한다는건 보기보다 굉장히 어렵다. 도대체 왜 이런 돌대가리 같은 착각을 하는지 난 도통 모르겠다. 그래, x86 프로세서가 어떻게 구동되는가에 대한 다큐멘테이션은 방대하고 어마어마하게 많다. 하지만 그렇다고 쉽다는게 아냐. 우선 x86 인스트럭션 셋은 레거시까지 합쳤기 때문에 엄.청.나.게.빡.세.게.많.다.고!!! 하나의 인스트럭션만 해도 20가지 버전들이 존재한다. (예를 들어서 MOV 인스트럭션을 처리하는 버전은 너무나도 많다. INC, DEC, ADD, SUB, SHR, SHL, AND, OR, XOR 등등) 그리고 이들을 모두 접목하려면 시간이 많이 걸린다고. 물론 아주 어려운것은 아니다. 진짜 문제는 펜티엄3를 포함하는 근대 x86 프로세서는 한번에 멀티플 인스트럭션을 처리한다는 점이다. 그렇기 때문에 한번마다 1개의 인스트럭션만 처리하는 Z80을 에뮬레이트 하는것과는 엄청나게 다른 문제라는것이다. 실제 x86의 알고리즘적인 부분이라던지 어떻게 동작하는지에 대한 제일 중요한 부분들은 여전히 특허권에 묶여 다큐멘테이션이 되어 있지 않고 물음표라는것이다. 짧게 말해서 엑스박스의 CPU는 에뮬레이트가 될수 있지만 결코 정확하게 에뮬레이트를 할수 없다는것이다.
3. 엔비디아 지포스를 에뮬레이트 하는것 또한 소풍놀이가 아니란다 얘들아! 엑스박스 GPU인 NV2A는 대다수 사람들이 지포스3라고 알고 있는데, 전혀 아니란다~ 비슷하지만 동일하지 않다랄까. 지포스4의 기능들도 상당히 포함되어 있기 때문이다. 그러니 NV20과 NV25의 중간상태의 제품이라고 보면 된다. 물론 얘들 또한 에뮬레이트하기 편하지 않다. 엔비디아 GPU들은 굉장히 방대한 레지스터 세트를 지니고 있고 심지어는 절반의 경우는 발견조차 되지 않았다고. 게다가 알려진 나머지 레지스터들 또한 상당수가 목적이 알려지지 않은 기능들로 쌓여져 있다. 현재 엔비디아 GPU가 어떻게 구동되는지에 대한 다큐멘테이션은 아예 없단 말이다. 가장 이상적인 접근 방법은 과거에 사용되었던 리바,TNT,올드 지포스 비디오카드들을 조사할수밖에 없다. 몇몇 레지스터들은 비슷하지만 그래도 동일하진 않다. 이러한 정보를 찾을수 있는 가장 좋은 방법은 인터넷에서 오픈 소스 드라이버를 찾아서 조사하는 방법밖에 없다. 여기서 더 빡센점이 있다면 바로 NV2x 비디오카드들의 픽셀 셰이더가 구동되는 방식을 아무도 모른다는 점이다. 버텍스 셰이더? 그건 다행히 커버할순 있었다. 엑스박스 GPU는 또한 피씨에 발매된 지포스 비디오카드들엔 아예 존재하지 않는 독자적인 레지스터들 또한 무궁무진하게 있다. NV2A의 GPU 레지스터에 대한 소소한 정보가 간신히 겨우 최근 몇달전에 발견이 되기 시작하고 있었다. 그리고 여전히 우린 갈길이 너무나도 멀다. 지포스3가 모든 엔비디아 비디오카드중에서 가장 미스테리한 제품이다. (G7x과 G8x 빼고) 게다가 NV2A는 그 지포스3조차 버로우 시킬 정도로 언노운이다. "하지만 NV2A의 인스트럭션을 또다른 엔비디아 카드에 실행시킬수 없냐?" 내가 이런 질문들을 수도 없이 받는데 아니 미안. 그건 불가능해. MMIO 어드레스가 완전히 틀리고 익스클루시브 레지스터도 결국은 에뮬레이션 과정을 거쳐야 하거든. 게다가 윈도우스에선 '링0' 액세스는 불가능하잖아. 그건 콘솔 독점 요소인데. 그러니 그런 아이디어는 일찌감치 포기해라. 이런 모든 과정을 거쳐도 또 엔포스2 칩셋이 등장한다. 엔비디아 MCPX는 오디오, 인풋용도의 USB, 네트워크 어댑터, PCI, AGP 등등을 총괄하는 기능인데 다행스럽게도 이 모든 기능들은 에뮬레이트 하기가 어렵진 않다...제일 중요한 오디오만 빼고.
4. 오디오 시스템은 상당히 어렵다. 엑스박스의 오디오는 최소한 4개의 DSP로 구성되어 있고 오디오 코덱(AC '97)과 엔비디아 사운드스톰 APU를 사용한다. DSP들은 문제가 되진 않을것이다. (얘네들이 무슨 역할을 하는지 알아내면 되니까) AC '97 역시 어렵진 않을테지만 엔비디아 사운드스톰 APU야 말로 진짜 어려운 파트다. 여태까지 난 이쪽에 대한 정보를 하나도 찾지 못했다. 하지만 지금 당장 볼땐 사운드쪽의 중요성은 다른쪽의 산재한 문제에 비하면 낮다고 볼수 있겠다.
5. 엑스박스의 BIOS 또한 완벽히 이해를 할수 없는 상황이다. BIOS의 기본 작동 프로세서는 이해가 ?榮쨉?그 프로세스의 디테일적인 부분에선 전혀 모르겠다. 내가 현재까지 알고 있는 부분으로 유추를 해본다면 그걸로 얻은 힌트를 몇가지 얻긴 하는데. 바이오스가 에뮬레이트 되기 그전에 엑스박스 하드웨어 레이아웃에 대한 더 상세한 이해가 필요하다. 왜냐하면 바이오스는 부팅시 좀 이상하고 이유가 알려지지 않은 독특한 하드웨어 초기화 과정을 거치면서 XDK를 거치지 않고 직접 하드웨어에 접근을 하는것을 보았기 때문이다. 분명 어느정도 시간과 노력이 걸릴테지만 이쪽 부분은 결국은 작동하게 만들어놓겠다.
6. 비디오 인코더 "헬" : 일반적으로 비디오출력은 RAMDAC을 거치는데 엑스박스는 램댁을 사용하지 않고 대신 비디오 인코더를 사용한다. 이 놈 때문에 내가 얼마나 개고생을 하게 되었냐고? 마이크로소프트는 엑스박스의 리비젼마다 비디오 인코더를 지속적으로 교체해왔거든. (총 일곱개가 존재한다. 1.0서부터 1.6까지) 왜? 내가 어떻게 아냐. 마이크로소프트가 원래 그렇지. 걔들은 원래 멀쩡한것도 만지는 애들인데. 내가 아는한 최소한 세개의 종류의 인코더가 사용된다. Conexant CX25871, Focus FS454, 그리고 Xcalibur다. 이러한 모든 세가지의 비디오 인코더를 에뮬레이트 한다는건 단순히 절반의 싸움일뿐이다. 진짜 문제는 BIOS가 버전에 따라 특정한 인코더에 특정한 목적으로 묶여있다는 점인다. (그 이유는 나한테 물어보지마) PS2와 마찬가지로 모든 엑스박스 모델들은 바이오스 업데이트 과정이 존재하고 다양한 예상상태에 존재한다는 점이다. 잠재적인 문제점일수도 있겠지만 그렇게 큰 문제는 아니다.
쉽게 말하자면 나는 "엑스박스는 피씨와 완전 똑같으니까 에뮬레이트 하기 쉬울거야"라는 개소리를 너희들의 대갈통에서 빼버리라는 소리를 하고 싶다는것이다. 분명히 너희 대부분은 나와 동의하지 않겠지만 이러한 이유들과 더 많은 이유들로 로우 레벨로만 따진다면 엑스박스는 PS2보다 훨씬 에뮬레이트하기 어렵다는 뜻이다.
내가 위에 적은 예외의 요소가 될 점이 있다면 현재 NV2A의 다큐멘테이션이 지속적으로 개선되고 있다는점이지만 완전하지는 않다. 현재 pbkit이라는 OpenXDK용 오픈소스 라이브리가 존재한다. 하드웨어와 직접적으로 인터페이싱을 하며 진짜 가능성을 열어주는것이다. 마이크로소프트가 진작에 했어야 할 일이었다. (최소한 로우레벨 오픈GL 접목 코드라도 만들어줬다던가)
|