sharksym's MSX World

sharksym.egloos.com

포토로그


구글 애드센스 (블로그 기본)


MMC/SD Drive V3 제작 #10 - 테입 로딩을 해보자 by sharksym

MSX로 카세트 테입으로 게임 해보셨죠?
어린시절 기억이겠지만요~ ㅎ.ㅎ
저는 국딩 때, 테입 게임이 열몇개 정도 있었어요.
나중에 쓸모가 없어져서, 아마 고딩 때였던 것 같네요, 다 내다버렸었지요.
한 두개는 기념품으로 남겼어야하는데...바보같이 ㅜ.ㅜ
보람소프트 테입이 보고싶군요~

그래서!! 이번엔~~
MMC/SD V3로 테입으로 된 게임실행에 도전해봤습니다.
사실 지난 4월 정모에 우유속의소주님이셨나요?
테입 게임은 지원 안되냐고 하셔서리, 한번 해봤어요. ㅎ.ㅎ


아래 내용을 구현하면 되겠네요.
1. MMCSD.COM 유틸로 CAS 파일을 MegaRAM으로 로딩
2. BIOS TAPIxx 루틴을 MegaRAM의 CAS 데이터를 쓰도록 구현
3. 이상한 게임들은 테입 루틴을 직접 패치


구현에 앞서, 기존 테입 게임들이 어떤 구조로 되어있는지 분석이 필요하겠습니다.
크게 나누면 두 종류의 게임이 있어요.

1. 처음부터 MSX 용으로 만든 게임
  - MSX 롬팩이었던 16KB/32KB 게임을 덤프한 해적판 테입
  - MSX 테입 전용 게임 (ZARTH 등)

  얘들은 MSX 표준 환경에 맞춰서 돌아갑니다.
  특별한 문제가 없다면 저장매체를 바꾸는건 별 문제가 되지 않아요.

2. 타 기종의 S/W를 포팅한 게임
  이부분은 확실하진 않지만...
  대부분 ZX 스펙트럼 게임을, MSX에서 구동되도록 VDP 부분을 수정한 것으로 생각됩니다.
  그래픽 구현이 ZX 스펙트럼이랑 똑같아요. 스프라이트 없는 8x8 단색 패턴 -_-
  ZX 스펙트럼 쪽은 VRAM이 CPU 메모리맵 I/O로 직결되는걸로 아는데,
  이걸 MSX VDP쪽으로 옮기면 포트 I/O가 되어서 속도가 상당히 떨어지게됩니다.
  그 때문인지 이런 게임들은 실행해보면 많이 느릿느릿 하더라구요.


일단 MSX BIOS의 TAPIxx 루틴들을 변경해야, 기존 테입루틴 대신 MMC/SD의 메가램을 쓸수 있는데요.
아시다시피 MSX의 하위 디바이스 I/O 루틴은 훅이 없습니다.
결론부터 얘기하면 별도의 H/W 도움없이는 힘들다는 얘기죠.
하지만 MMC/SD V3는 MSX 슬롯처럼 16KB 페이지의 뱅킹으로 메가램을 구동할 수 있습니다.
사실 이부분이 예전 MMC/SD V1/V2에서는 지원이 안되던거였죠. (SCC 매퍼로는 못 만듭니다.)

암튼 가짜 BIOS를 구동해서 테입을 실행해봤습니다.
롬팩 덤프한 파일들은 귀찮아서 안돌려봤구요. 안될 이유가 없으니~ㅋ
일단 ZARTH랑 잡다 소용량 게임들 돌려봤습니다.
잘 되군요! 오호~ ㅎ.ㅎ (사진은 없어요 ㅋ)

MSX의 BIOS/WORKAREA/HOOK 이런 표준이 참 좋은 구조같아요.
이리저리 코드가 많이 구동되어서 속도가 떨어지는 단점은 있지만,
지금 21세기에 이런저런 기능들을 추가해서 돌리는게 얼마나 큰 장점인지...
옛날 사람들 존경합니다! ㅎ.ㅎb
언젠가 만나게 되면, 코리안 떡볶기를 대접해드리는걸로~ ㅎ.ㅎ


그럼 본격적으로 유럽에서 유통되던 게임들을 돌려봐야겠지요.

1차 시도는 After Burner로 정했습니다.
일단 한번 실행해볼까요?
아래는 터보알에서 MMC/SD로 구현한 TAPIxx 바이오스로 구동한 모습입니다.
BASIC에서 BLOAD까지는 당연히 잘 됩니다요!



문제는 그 다음인데, 바로 먹통이네요. 으어~~
디버깅하려면 윈도의 영원한 친구 blueMSX가 필수죠! ㅋ

대충 살펴보니 가관이네요 ㅜ.ㅜ
확실히 "난 MSX게임이 아니야"라고 아우성치는 듯 합니다.
Page3의 WORKAREA 다 날리고 시작하네요.
BIOS의 ENASLT, CALSLT 이런 것 다 필요없습니다.
그냥 포트 A8H 출력으로 슬롯 바꾸고, CALL xxxx 이렇게 다이렉트로 돌아가네요.
게다가 스택을 Page1이랑 Page3 번갈아서 씁니다.
어허허... MMC/SD를 Page2에 매핑해야하나...

blueMSX만 뚫어져라 보니, 완전 방법이 없는건 아니더라구요.
메모리 마지막 부분 수십 바이트는 안쓰고 있군요. ㅎ.ㅎ
ZX 스펙트럼이 이쪽에 IO가 있나... 확인해보진 않아서 잘 몰겠지만요.
암튼 이쪽으로 코드를 우회해서 돌아가도록 해봤습니다.

결과는?
.
.
.
체크썸 에러! ㅋ
아~~ 데이터를 조금 바꿨는데, 이걸 로더가 체크썸으로 확인하는군요.
역시 테입 로딩과 헤더 조절 드라이버는 절친인 걸로~ ㅎ.ㅎ

체크썸 루틴도 마저 패치했습니다.
다시 구동!!

결과는? 아래 사진이 증거가 되겠습니다요.


오~~~ 돌아가네요.
한판 끝나면, 테입을 REWIND 해달라고 띄우네요. ㅎ.ㅎ;;
이건 게임 많이 하지말라는 얘기겠죠? 하루에 한판만? ㅋ
뭐, 이건 나중에 구현하는걸로 약속하고 다른 게임으로 넘어갑니다.


2차 시도는 PAC MANIA입니다.
며칠전에 게시판에서 본 기억도 나고해서리... 도전해봅니다.
요건 유럽 아저씨들이 남코 라이선스 받아서 만든거네요.
회사 이름이 GRANDSLAM ㄷㄷㄷ

윈도 에뮬로는 잘 돌아가는거라, 바로 터보알로 구동!
.
.
.
안되네요. 얘들도 이상한 구조로 되어있나봅니다.
blueMSX 출동!!
아... 얘도 "난 MSX 출신이 아님"이라고 외치고 있습니다.
스택을 Page1에서 돌리는 경우도 있네요.
문제는 테입에서 데이터 로딩하는데, 메모리 FFFEH 까지 덮어씁니다.
애프터버너는 양반이었네요. ㅎ.ㅎ;;;

음... 자세히 보니, 다행하게도 메모리 끝부분은 게임에서 쓰는 데이터가 아닌걸로 보입니다.
일단 데이터 잘라내고 돌려봅니다.

결과는?
흐흐... 돌아가네요.
참고로 이 게임은 터보알 고속모드에서 쾌적하게 돌아갑니다. 마치 이게 원래 속도라는 듯이요~


게임 두개 분석하는 것도 시간이 꽤 걸리네요.
그나마 다행인건 다른 게임도 좀 봤더니, 구조가 비슷해보였습니다.
안돌아가는 애들은 심심할 때 하나씩 분석하면 재밌을 듯 하네요.
.
.
.
라고는 하지만 연말에 paraMSX-R을 만들면 그냥 구동될게 뻔하니... 시간을 아끼도록 하겠습니다. ㅎ.ㅎ

그리고 한가지 테입 로딩을 편하게 할 수 있도록,
BASIC으로 전환 후, RUN"CAS:", CLOAD + RUN, BLOAD"CAS:",R 을 자동으로 실행합니다.
이 테입을 어케 로딩하더라? 기억할 필요없습니다. 그냥 M에서 리턴키 한방으로 끝! ㅎ.ㅎb

백문이 불여일견이죠?
테입 게임 구동하는 모습을 영상으로 담았습니다.




그럼, 즐거운 불금되셔요!


핑백




CCL

크리에이티브 커먼즈 라이선스
Yeongman Seo에 의해 작성된 저작물은, 별도의 라이선스 조건이 없는 경우 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

MSX rating & email

ClusterMaps

구글 애드센스 (세로 큰직사각형)

통계 위젯 (화이트)

2231
202
112648

이 이글루를 링크한 사람 (화이트)

19