'2026/07/16'에 해당되는 글 1건

고전게임을 최신기기에서 굴리는건 사실 꽤나 어려운 일입니다.
사실 저만해도 여러가지방법을 동원하고 많은 사람들의 삽질사례들을 참고하면서 성공사례를 몇번 올렸습니다.

사실 이러한 삽질을 하다보면 자연스럽게 깨닫게 되는게 있는데 컴퓨터 환경이 그동안 많이 변했다는 것입니다. 그래서 출시시기가 멀면 멀수록 고생이 더 심해집니다. 그러다보니 방법들이 참 기괴해집니다. 그래서 한번 방법을 써내려볼까합니다.

1. 호환레이어
정확히 말하면 API를 재구현한 레이어를 말합니다. 그냥 간단히 Windows에 내장된 호환성기능을 생각하면 편합니다. 과거의 Windows환경에서 쓰던대로 API를 구현해주는 겁니다. WinAPI는 한번에 와장창 바뀌는 경우는 거의 없으며 일부 API가 사라지거나 구동방식이 바뀌거나 하기에 이 부분을 보충하는 것입니다. 사라진 API의 대표적인것은 한때 게임용으로 쓰이다가 없어진 XNA가 있지요.

사실 Wine도 이와 크게 다르지 않지만 이쪽은 현재 WinAPI를 Unix함수위에 깔아주는거에 가깝습니다. 반대로 mingw-msys는 Unix함수를 WinAPI위에 한겹깔아줍니다. 그래서 요즘은 Wine을 mingw-msys위에서 굴려서 사용하는 방식으로 구형 프로그램 호환성을 노리는 신기한 방식도 존재한다고 합니다.

또한 WindowsNT 32비트버전(2000부터 10 32버전)에서 Dos호환을 위해 잠시 존재했던 NTVDM도 호환레이어라고 볼 수있습니다. 이건 32비트환경에서 16비트환경을 구현한것이지요.

또 최근 dgVoodoo나 ddrawcompat, inmm같이 래퍼라고 불리는 것들도 어떻게보면 호환레이어의 일종입니다. 다만 그래픽이나 사운드같은 특정분야 특화 레이어지요. 이런쪽에 전문레이어들을 모아서 한 겹씩 깔아 각 부분을 호환시키는 방법도 있습니다.

그런데 이 호환레이어란게 당연히 부족한 부분만 땜빵하는 수준이라 완벽하지 않습니다. Wine써보신분들은 다들 알고계실거고 NTVDM도 그렇지요. 그도 그럴게 API를 한겹까는 정도라서 하드웨어의 구동방식 차이까진 어찌하기 힘든것이 사실입니다. 그래서 적당히 하드웨어를 흉내내는 것이 등장합니다.

2. 가상머신
VMWare나 VirtualBox같은 하이퍼바이저를 말합니다. 호환레이어로는 답이 없을때 구형OS를 굴릴때 씁니다. API 재구현으로도 답이 안 나오면 그냥 가상으로 기기를 하나 만들어서 OS부터 과거의 것 그대로 쓰는방법인것이지요. 그리고 하이퍼바이저 특성상 bios부터 디스크드라이브를 에뮬레이션해주는데 구형OS는 디스크의 용량이 너무크면 오류가 납니다. 그리고 램이 너무커도 오류가 납니다. 그래서 이런것도 어느정도 커버해주는 역할을 해줍니다. 다만 하이퍼바이저가 특정 게스트OS를 지원해야하고 지원이 안되는 경우 어마어마한 에러속에서 이걸 잡아야합니다. 인텔CPU와 AMD CPU간의 미묘한 차이도 있고요. 그래도 VMware는 짬밥이 오래되서 그런지 Win3.1부터 정상적으로 지원해주고 있고 리눅스는 커널2.4부터 지원하고 있습니다. 생각보다 오래된OS부터 지원해주고 있는것이지요. 그에비해 VirtualBox는 리눅스 커널2.6부터 윈도우는 최신버전으로 오면서 점점 구형OS지원을 버리고 최신OS가 제대로 지원됩니다. (7.0기준 Vista부터)고전게임용으로는 애매한거죠.

그런데 이것도 프로세서는 그대로이기에 또다른 오류인 너무빠른 연산으로 생기는 오류가 발생할 수 있습니다. Win95의 경우 CPU클록이 2Ghz가 넘어가면 블루스크린이 뜬다고 합니다.

그래서 하이퍼바이저가 사용하는 반가상화대신 기기를 통째로 구현해버리기 시작하는데...

3. 에뮬레이터
Dosbox나 Bochs를 생각하면 편합니다. 그외에 MAME같은 아케이드 에뮬레이터도 그렇고 Qemu는 그냥 이름 에뮬레이터가 들어가 있습니다.

여긴 CPU부터 흉내냅니다. 위의 호환레이어가 API 재구현정도고 하이퍼바이저가 과거OS를 구동하는게 목적이라면 이쪽부터는 CPU부터 과거의 것으로 흉내냅니다. 아케이드는 해당기기에서 쓰인 모토로라나 히타치 칩셋을 에뮬레이팅하는거고 Dosbox는 486이나 펜티엄MMX같은것을 흉내내는겁니다. 현대 CPU는 과거의 것과 다르게 몇몇 명령어들의 구현이 다르기 때문에 다르게 동작할 수 있습니다. 그래서 같은 인텔프로세서를 쓰지만 과거칩셋(486등의 x86)과 현대칩셋(AMD64아키텍처)는 구동방식이 다른부분이 있다보니 여기서부터 흉내내는거지요. 심지어 MMX나 3DNow 명령어의 경우 최신CPU에선 SSE로 대체되거나 그냥 사라지면서 현대 CPU에선 하이퍼바이저를 써도 일부가 오작동 될수도 있다고 합니다.

그래서 이를 방지하고자 에뮬레이터를 사용하는겁니다. 아케이드나 콘솔 에뮬레이터는 아키텍처부터 다르니 전체적으로 재구현하는것이고요. 기기를 통째로 구현하는것이니 구형OS를 돌릴때 훨씬 문제를 덜탑니다. 어찌보면 확실한 방법입니다. 구형기기를 통째로 흉내내서 구형OS를 돌리고 그에 따라 구형인 고전게임실행을 하는 방식입니다.

4. 그냥 구형기기를 구하기
모든것을 포기하면 편할때 쓰는 방법입니다.
에뮬레이터까지 동원했음에도 구동이 불가능한 경우  이땐 진짜 방법이 없습니다. 현재 굴러가는 구형기기를 구해야합니다. 대신 모니터나 키보드등은 하드웨어젠더로 어찌저찌 최신기기를 쓸 순 있습니다.
사실 이와같은 문제로 현재 전자상가에서 펜티엄3급 PC의 가격이 상당히 비싼편입니다. 에뮬레이터까지 썼는데도 안 돌아가는 PC98프로그램 같은것이 일부 있거든요. 뭐 어쩌겠어요. 최후의 최후방법은 이것 뿐인걸요.

,