레이블이 MAME인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MAME인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 17일 목요일

MAME에 관한 궁금증 ____ 0

MAME를 이용해 게임을 즐기려다 보면 은근히 혼란스러운 부분들이 있는데,
원하는 게임이 제대로 실행되지 않는 경우가 있다는 것이다.

그저 아직 에뮬레이션의 개발이
완료되지 않았으니 좀 더 버전이 올라가서 지원되기를 기다려야 하는 것이 아니라,
동일한 게임 롬을 가지고도 A라는 컴퓨터에 설치된 MAME로는 실행이 되는데, B라는 컴퓨터에 설치된 MAME로는 실행이 되지 않는 경우가 있다는 것이다.

단지 버전 차이가 아니겠냐고 반문할 수도 있겠지만, 절대 그렇지 않다.
심지어는 낮은 버전의 MAME에서는 실행이 되는데, 최신 버전의 MAME에서는 실행이 되지 않는 경우도 있으니 정말 괴이하기 짝이 없다.


아주 오래전에 MAME UI32라는 프로그램을 사용하기 시작했다.
이 프로그램은 MAME의 0.143u9이라는 버전에 front-end를 추가해서 하나로 만든 버전이었다.
릴리즈 시기는 2011년 10월 27일.

MAME UI32

이 프로그램의 장점은 사용하기 쉽다는 점.
각종 설정도 간편하고, 게임들을 고르기도 쉽다.

단점은... 저 많은 게임의 목록을 다 읽어 들여야 하기 때문에 실행시 초반에 시간이 꽤 걸린다.
물론 옵션으로 디렉토리 검색을 하지 않도록 선택할 수도 있다.
하지만 롬파일의 개수가 어느 정도 이상 많아지면 그 목록을 단지 메모리에 읽어 들이고 화면에 표시하는 데에만도 시간이 적지 않게 걸린다.
그러다 보니 발생하는 문제가 있는데, 기존의 목록에 새로운 게임을 추가하게되면 이 목록을 새로 고치도록 해야 하는데, 그러면 디렉토리를 모두 다시 검색한다.....ㅠ.ㅠ

더욱더 치명적인 단점이 있으니....MAME 코어와 Front-end가 하나로 뭉쳐져 있다는 점이다.
따라서 계속 업데이트 되는 MAME를 따라가려면 이 Front-End의 제작자가 업데이트 해 주기를 기다려야 한다.
그리고 이 Front-End는 더 이상 업데이트가 되고 있지 않다.....ㅠ.ㅠ


이러한 단점들 때문에 어떻게 되는지도 모를 Front-End들은 과감히 버리기로 작정을 했고,
MAME 코어를 직접 다운 받아서 사용하게 되었다.

MAME 0.161

MAME 코어만을 사용하면 적쟎이 당황하게 된다.
시작때마다 랜덤하게 아무 게임들이 골라서 목록을 보여준다. 그리고 저게 다다.
저 아래로 더 있을거라는 생각은 하지 말자.
원하는 게임이 있다면 그 게임의 이름을 입력하면 맨 위에 표시가 되면서 그에 해당되는 게임들의 목록이 나타난다.

그리고 저기에 나오는 목록은 내가 가지고 있는 게임롬 내에서 검색한 게 아니다.
단지 MAME가 "지원"하는 게임들의 목록이다.
해당 게임에 커서를 옮겨서 엔터를 누르면, 그제서야 지정해 두었던 내 컴퓨터의 디렉토리에서 검색하기 시작한다.

물론 내가 가진 롬파일이 어느 디렉토리인지는 따로 설정해 주어야 한다.
전체화면으로 볼 것인지 윈도우로 볼 것인지, 가로세로 비율을 강제로 조절할지 원래대로 유지할지, 꽉차게 볼지 아닐지 등등을 모두 직접 설정해 줘야 한다.
mame.ini를 직접 편집해서...

하지만 시작은 아주 경쾌하다.
하드 디스크를 별로 긁어대지도 않고 순식간에 실행이 된다.

MAME 0.171
최근에 나온 MAME 0.171은 마치 심플한 Front-End를 내장한 것처럼 보인다.
좌측에서 MAME가 지원하는 전체 목록을 볼지, 현재 보유한 게임만을 볼지 등을 선택할 수도 있다.
게임의 목록을 모두 로드해야 하기에 이전 버전보다 시작하는 게 버거워졌다.

설정해야 하는 것들도 모두 여기에서 할 수 있다.


그리고 이렇게 사용하면서 맨 위에서 언급한, 정말 궁금한 문제들이 나타나기 시작했다.

비록 불완전한 에뮬레이팅이지만 MAME UI32에서는 Ray Storm, Street Fighter Ex, Radiant Silvergun이 실행이 된다.
하지만 MAME 0.161과 MAME 0.171에서는 이 게임들이 실행되지 않는다.

모든 MAME용 롬파일들은 하나의 디렉토리에 존재하고 있으며, 모든 버전의 MAME는 이 디렉토리를 사용하고 있는데도....


===============================

사실 MAME 0.171은 새로 다운로드 받았다.

위의 문제를 직접 확인해 보고 싶어서, 소스레벨의 디버깅을 해 보고 싶었고,
소스를 받으러 갔다가 새로운 버전이 있길래 받은 것이다.

바이너리 파일, 소스파일, 그리고 디버그 빌드를 한 바이너리 파일과 심볼 파일을 받았다.

그리고 소스 빌드를 하지 않고, 디버그 바이너리와 소스, 심볼 파일을 이용해 디버깅을 시도해 보았다.

하나도 안된다.

디버그 바이너리를 읽고는 디버그 정보를 찾을 수 없다고 하는 gdb.






심볼파일 패스를 지정했음에도 역시 심볼을 찾지 못하고 소스에 브레이크 포인트를 잡지 못하는 windbg

Windbg

exe를 불러오자 analyzing에 무지막지하게 버벅대던 Ollydbg,
급기야 중지하려고 해도 안되고 먹통이 되어버리더니 강제 종료시킬 수 밖에 없는 상황.

그리고 이 모든 상황을 더욱 짜증나게 만드는 프로그램들이 있었으니....

혹시라도 자기를 디버깅할까봐 지레 겁을 먹고 경고를 날리는 보안 프로그램.
INCA internet의 nossvc - nProtect Online Security Service와 Wizvera의 Delfino라는 프로그램.

Delfino와 nossvc

이 프로그램들의 삭제 방법부터 강구해 봐야겠다.

강제 종료도 되지 않으면서 디버깅 툴마저 작동하지 못하게 방해를 하다니....

이거야말로 악성 어플이 아닌가...

2015년 4월 26일 일요일

MAME에 대한 궁금증

시간이 날 때에 아무 생각 없이, 부담 없이 즐길 수 있는 게임으로 MAME 만한 것이 없다.

MAME는 Multiple Arcade Machine Emulator의 약자로 업소용 게임기의 게임 에뮬레이터이다.

대부분 과거 십수년이 지난 게임들이기에 저작권에 대한 문제도 그리 민감하진 않고 (그렇다고 저작권이 없다는 뜻은 절대 아니다. 그러기에 게임 하나마다 게임에 대한 사용권리를 가지고 있는지 주의를 환기시키는 문구가 포함되어 있다.),
플레이 시간이 비교적 짧아서 부담도 적다.

그런데 그 많은 게임들을 대체 어떻게 에뮬레이팅을 하는 것일까?

게임기에 대한 큰 분류가 있어서 동일한 기종에서 돌아가는 게임들이 아주 많고, 그런 게임기들 몇가지를 에뮬레이팅 해 주면 되는 걸까?
설마 각 게임마다 각각 에뮬레이팅을 해 주는 것일까?
간혹 롬파일이 없다는 문구도 보이던데, 그럼 롬파일에 대한 정보도 모두 가지고 있는 걸까?

딥스위치에 대한 정보는 어떻게 알고 있으며, 입력 장치의 수정은 어떻게 하고 있으며, 자동연사기능은 왜 없어진걸까?


궁금증은 많지만, 의문을 풀고 싶은 욕구는 적었던가 보다.
수년 이상을 가졌던 의문을 풀지 않고 그냥 지내 온 것을 보니.....

그래서....마음만 먹으면 얼마든지 구할 수 있는게 소스코드이니 소스를 구해서 저런 궁금증 만이라도 풀어보기로 했다.


최신 소스코는 다음에서 받을 수 있다.
http://www.mamedev.org/release.html

0.160b인데, MAME와 MESS의 소스코드가 묶여 있다. (대략 55MB ~ 79MB)

살펴보니, 이미 다운로드 받았던 0.149 소스가 있어서 이것을 풀어 보았다.

MAME 소스의 디렉토리 구조

대략적인 소스의 디렉토리 구조는 위와 같았다.
0.149 버전에서도 MAME와 MESS의 소스가 함께 존재했다.
에뮬레팅에 대한 핵심적인 부분은 emu 폴더에 있지 않을까 싶다.


소스가 너무 방대하기에 소스인사이트를 이용해서 살펴보기로 하고
프로젝트를 만들어 파일들을 프로젝트에 등록하고 싱크로나이즈 해 주었다.

전체 소스들이 정렬되어 나타난 브라우징 창이 다음과 같았다.

MAME의 소스들
이 창에서 7번째부터 익숙한 이름이 보인다.
1942.*, 1943.*
캡콤의 유명한 슈팅게임들이다.
두개의 C 파일과 하나의 헤더 파일.
drivers라는 폴더와 video라는 폴더, includes라는 폴더에 각각 위치하고 있음을 볼 수 있다.

잠깐 살펴보니 drivers폴더에 있는 내용이 알아보기 쉽다는 것을 알게 되었다.


잠시 MAME를 직접 구동해서 게임을 하나 골라서 해 보았다.

슈퍼 보블보블

우리에겐 보글보글로 알려진 게임인데, MAME에서의 이름은 Super Bobble Bobble이다.
윈도우 타이틀바에 표기된 [sboblbob]가 소스 파일의 이름일지 모르겠다는 생각이 들었다.
하지만 찾아보니 그런 파일은 없었다.

조금 더 찾아보니, Bublbobl.c(drivers 폴더)라는 파일에 다음과 같은 부분이 보인다.

보글보글 게임에 대한 매크로

위 소스의 밑에서 두번째 줄을 보면,
GAME( 1986, sboblbob,   bublbobl, boblbobl, sboblbob....
라고 되어 있다.

그리고 GAME이라는 매크로는 다음과 같이 정의 되어 있다.
PARENT가 보글보글(bublbobl)인 게임의 몇가지 버전들이 위와 같이 주~욱 나열되어 있는 듯하다.


이렇게 보니 MAME는 엄청난 노력이 들어간 에뮬레이터였다.
처음의 시작부터 현재의 모습까지 오는 과정에는 엄청난 노력과 발전이 있었음을 미루어 짐작할 수 있다.
아마도 지속적인 발전을 해 오면서 공통되는 부분을 묶고, 기능을 공유할 수 있도록 일반화 하는 과정이 있었을 것이며, 그럼에도 각 게임 하나 하나의 에뮬레이션도 직접 손대야 하느 번거로움까지....


아주 아주 맛보기만 보았지만, 시간이 나면 나머지 의문들도 하나 둘씩 파헤쳐 볼 수 있기를 바래본다.