2009년 5월 4일 월요일

Hybrid Mame Rom (전천후 마메롬)

하이브리드 마메 롬을 만들어 보자.

Hybrid Mame Rom?
이 이름은 개인적으로 부르는 이름이지 통용된 것은 아니다.
여러 버전을 돌리기 위해서 특별히 만들어진 롬이다. All Version Support Mame Rom 정도로 생각하면 된다.
Mame Rom을 수집하는 사람은 Emulator가 최신 버전이라고 무조건 좋은게 아니라는걸 알 것이다.
개발자들의 필요에 따라서 롬셋 이름을 바꿀수도 있고 빼버릴 수도 있다. 또한 자식롬을 만들어 롬파일 이름이 바뀔수도, 삭제될 수도 있다. 따라서 전에는 잘 실행되던 것이 실행이 안될 수도 있는 것이다.
그래서 이 하이브리드 마메롬은 롬파일 하나에 이전버전까지를 모두 포함시키는 것을 의미한다.
업데이트 롬을 받아서 단순히 Rom Center나 Clrmame 등의 롬관리 유틸로 병합시킨 롬은 최신 버전에서만 동작하지 이전 버전에서는 동작하지 않는다. 새로 덤프되어 롬셋 이름은 같은데 CRC등이 다르기 때문이다. 한단계 전의 에뮬레이터에서는 miss rom이 많지 않을 것이다. 어짜피 롬셋은 크게 바뀌지 않았고 CRC로 판단되기 때문이다.

우선 만들기 위해서는 에뮬레이터에서 마메롬을 불러들이는 방식을 알아야 한다. 0.60 버전대의 롬까지는 롬파일 이름, 롬셋 이름, CRC가 모두 일치해야 한다. 그 이후 Mame Plus가 나오는 버전부터는 Mame32계열에서 롬파일 이름, 롬셋의 CRC만 일치하면 된다.
0.60을 언급한 이유는 0.34b4 버전부터 CRC32를 지원하긴 하지만 CRC가 00000000 인 것들은 롬셋 이름이 정확히 일치해야 하기 때문이다. 0.34b4 이전 버전은 롬셋 이름이 어짜피 일치해야 하므로 버전 별로 따로 수집하는 것도 괜찮은 방법이다. CRC 00000000으로 적용되어 롬셋이 같아야 하는 에뮬레이터는 0.34b7 버전부터 0.34rc1까지다. 해당 구간에는 20여개의 CRC 00000000인 롬들이 있다.
롬을 판단할때는 MameUI보다는 Mame Plus가 보기 편했다(icon 설정을 제대로 해주었을 경우)
최근의 Mame32 Plus에서는 롬셋을 CRC로만 판단이 가능하다. 다만 에뮬레이터에서 요구하는 롬 셋 이름과 롬 파일 안의 롬셋 이름이 일치할 경우 먼저 처리를 한다. 롬셋 이름이 같은데 CRC가 다를 경우 해당되는 CRC를 찾아서 실행한다. 최종적으로도 일치하는 CRC를 못찾을 경우 CRC가 다르다는 에러메세지를 보여준다.

자 여기서 알아야할게 있다. CRC만 일치하면 되므로 Mame Plus는 롬파일 안의 모든 롬셋을 풀어서 찾는다. 즉, zip파일 안에 디렉토리가 있어도 상관없다. Mame Plus는 Windows에서 실행되므로 디렉토리 이름의 길이에는 크게 문제되지 않는다. 하지만 도스를 염두에 두어서 8 X 3 파일명을 사용하는게 좋다. 또한, 어짜피 롬셋 이외에는 인식을 하지 않으므로 설명을 위해서 txt파일을 넣어도 된다. 분명히 다른 파일인데 롬셋 이름이 같을 경우 zip파일 안에 저장이 되지 않는다. 이럴 때는 zip파일 안에 다음과 같이 디렉토리를 만들어서 버전 별로 구분해 보자.

최신 에뮬레이터에서 쓰이는 232-m1.bin 파일과 같은 역할을 하는 kof97_m1.rom이라는 롬셋은 이름이 같은데 0.34b6과 rc1에뮬레이터에서 다르게 사용된다. 이 파일들을 zip파일 안에 그냥 넣을 경우 중복된 파일이 있다. 덮어쓸까요? 라고 묻게 된다. 따라서 위와 같이 중복된 이름의 롬셋을 버전별로 디렉토리를 만들어서 넣어 준다. 위와 같은 경우 용량부터가 틀리므로 쉽게 구분이 가능하지만 용량까지 같은 경우 Suzi CRC로 검사를 해본다.

그런데 문제가 있다. 0.34b4 이전버전의 에뮬레이터(CRC32는 0.34b4 부터 지원)는 Dos용 에뮬레이터도 있는 버전이므로 CRC만을 가지고 롬을 판단하지 않는다. 따라서 0.34rc1의 kof97_m1.rom이 필요한 에뮬레이터에서 먼저 롬파일 안의 0.34b6 폴더의 kof97_m1.rom을 읽어 들여서 에러를 뱉을 수도 있다.

이 경우 방법이 두가지 있다.
1. 중복되는 해당 파일들을 압축해서 넣는것. 압축하여 exe로 만들기 해서 롬 파일 안의 kof97_m1.exe를 실행하여 압축을 푼 후 다시 롬파일 안에 넣으면 된다.
2. 중복되는 해당 파일의 이름에 버전을 넣는것. kof97_m1(0.34rc1).rom 등으로 바꾼다. 이름이 길어지므로 압축방법을 추천한다. 8자리 이상의 파일 이름은 도스에서 보여지지 않기 때문이다.

위와 같이 변경 후 해당 에뮬레이터를 돌릴 때 압축을 풀거나 바꾸어 주어야 한다. 물론 최신 버전의 Mame Plus에서는 압축하거나 이름을 바꾸지 않아도 알아서 인식된다.

0.60버전 이후로는 에뮬레이터에서 CRC가 00000000인 것은 알아서 No Good Dump 등으로 처리해 주므로 롬셋 이름은 상관이 없었다.
개인적으로는 아래와 같은 롬파일을 선호하고 있다.

롬파일이름(추가버전)[CRC32]
romset.rom(0.133u1)[12345678]

다른 방법으로는 아래와 같이 Mame32부터 롬폴더를 여러개 지정 가능한 것을 이용하는 것이다. Window에서만 사용할 거면 버전별로 폴더를 추가하는 것도 괜찮지만 최신 버전에서는 어짜피 CRC로 인식하므로 롬파일 하나에 폴더를 만들어서 다 넣어도 된다. 하지만 Dos에서는 다중 폴더가 되지 않으므로 버전별로 롬 폴더를 추가하는 것은 되지 않는다.

구버전 에뮬레이터에서 구동가능한 롬을 만드는건 노가다라고 보면 된다. 롬 유틸리티로도 쉽게 병합하기가 힘들며 구분도 잘 되지 않는다. 오래된 롬이라고 해서 포기하지는 말자. 대부분의 롬은 다른 롬파일에 들어 있거나 롬셋 이름이 바뀐 것들이 대부분이다. 나야 물론 구버전부터 모아왔기 때문에 손쉬웠지만 구버전 에뮬레이터에 필요한 롬셋은 대부분 최신버전에도 들어있다.

아래의 이미지는 frogger2.zip 롬에 필요한 롬셋을 찾기 위한 것이다. (Mame32 0.35b2에서 필요한 롬셋 epr-1037.1h)
ArcadeStuff 사이트에서 CRC로 검색을 해보면 각각의 게임에 다른 이름으로 들어 있음을 알 수 있다.

frogger.607 Frogger (Moon Cresta hardware)
frogger.607 Frogger (Sega set 2)
frogger.607 Frogger (Sega set 1)
frogger.607 Frogger
frogger.607 Frogger (Falcon bootleg)
frogger.607 Frog
k.bin Frog (Galaxian hardware)
하지만 아쉽게도 arcadestuff 사이트는 망하고 이미 없다.

MameWorld MAWS에서도 가능했으나 현재는 열리지 않는다.

트래픽으로 인하여 이곳으로 바뀌었다.
특정 사이트에서 찾을 수 없다면 구글링을 이용하면 된다.

해당 롬파일을 찾을 수 없으면 사이즈가 똑같은 다른 파일을 이름을 똑같이 바꾸어서 해당 게임이름의 Zip파일 안에 넣으면 CRC가 맞지 않는다고 나온다.
Expected CRC를 복사한 뒤 구글 사이트에서 검색하면 해당 롬파일이 어디에 어떤 이름으로 있는지 나오게 된다.

여기까지는 폴더를 이용한 방법이었다.

공식(DOS) 및 Mame32 에뮬레이터의 버전 0.34b4부터는 부분적으로 CRC를 이용한다. 눈치 챘겠지만 Zip 파일 안의 이름이 틀려도 인식이 된다. 일단 해당 zip파일의 모든 파일을 검사한 뒤 없으면 CRC를 검색하여 찾는 듯 하다. 다만 완전히 CRC로만 인식되기 위해서는 버전이 좀 더 높아져야 한다. 0.34b4에서는 bad dump rom의 이름이 같아야 인식한다. 비록 CRC가 같지는 않지만 bad dump rom의 crc를 인식하여 Found but No good dump 등의 메세지를 띄운다. 0.63버전(대충 이정도) 정도 이상 되면 bad dump rom도 CRC로 알아서 인식되는 듯 하다. 간혹 이름이 꼭 같아야 하는 것도 버전 당 서너개쯤 존재한다.

예를 들어 0.101버전에 aaaa.b 라는 롬이 이전 버전에도 있었고 같은 이름의 롬파일이 0.102 버전에도 새로 나왔다면

aaaa.b(0.101)
aaaa.b(0.102)

이런 식으로 이름을 막 붙여도 인식이 된다.
간단히 수작업을 거치면 어떤 버전에서 나왔는지 한눈에 알아볼 수 있다.
버전업할때마다 새로 나오는 롬파일의 수를 감안하면 간단하더라도 그 작업량을 무시할 수는 없다.

이런 작업을 거치면 0.101버전에서도 실행 가능하고 0.102버전에서도 실행 가능하게 된다.
이름을 바꿔서 zip 파일 안에 모두 넣어 주면 된다.

이런 작업을 CRC로 인식이 가능한 0.34b4부터 현재까지 나온 버전까지 모두 수정해주면 어떤 버전에서도 실행이 가능한 전천후 마메롬이 된다.

0.34b4 이전 버전에서는 CRC를 사용하지 않으므로 해봤자 인식되지 않지만 이름뒤에 추가시킨 것을 빼버리면 간단히 실행이 가능해진다.


이 게시물에서 명명한 단어들

abc.zip - 집파일, zip파일, 롬파일 또는 롬이름

romset1.rom - 롬셋1
romset2.rom - 롬셋2
....

Checksum - 0.34b3까지 사용되는 에뮬레이터 내의 Checksum
CRC32 - 0.34b4부터 사용되는 CRC32

급하게 쓰느라 버전 등의 혼동이 있어 완벽하지는 않지만 2011년 12월에 수정을 약간 하였습니다

댓글 없음:

댓글 쓰기