2021년 8월 10일 화요일

[강좌] 08. 디스크 게임의 실행환경 만들기

디스크 전용 게임(2DD/1DD)들은 FDD에 디스켓을 넣고 전원을 켜면 게임이 실행됩니다.

뭔가 더 필요할까요?ㅋ

.

.

.

지금부터 얘기하려는 내용은...

아마 십여년 전부터 MMC/SD를 쓰신 분들이라면 잘 아시는 내용이겠지만,

읽다가 금시초문이라고 하실 분이 분명히 계실 듯 해서 적어봅니다 ㅎ.ㅎ

기억이 가물가물하셨던 분이라면, 글 마지막의 [요약]만 보고 넘어가시면 되겠습니다.



[본론]


80년대 FDD를 쓰셨던 분들의 대부분은 아마 아이큐2000 + FDD 또는 X-II 환경이겠죠?

FDD가 내장된 X-II 및 일제 MSX2/2+를 본체 그대로 쓰면 그대로 완벽한 환경이 되겠습니다.


90년대부터는 상황이 좀 바뀌기 시작했는데요.

쯔지가와씨의 MEGA-SCSI, 선라이즈 IDE 등의 외장 디스크기기가 널리 쓰였구요.

제가 만든 MMC/SD 드라이브는 2004년에 등장하면서 국내에서 많은 분들이 쓰기 시작했습니다.


이제 슬슬 문제가 발생합니다.

보통 대용량 디스크 기기에서는 기존 2DD 게임을 구동하기 위해,

DSK 파일(디스크 섹터를 덤프한 이미지)을 FDD에서 쓰는 것처럼 에뮬레이션을 하게되는데요.


FDD는 드라이브 문자가 2개(A: B:)인 장치입니다.

디스켓 구멍이 하나뿐인 싱글 드라이브를 쓰더라도 가상의 B: 드라이브가 생성이 되어서,

디스크를 사용하는 S/W입장에서는 둘을 구분하지 않습니다.


요즘 많이 쓰시는 MMC/SD V4의 경우, 번들된 SD카드는 파티션이 6개가 있으니까...

드라이브 A: ~ F:가 할당이 됩니다.

이 상태에서 DSK 파일을 구동하면?

기기가 FDD 에뮬모드로 전환되면서 DSK 이미지를 드라이브 A: B:로 매핑해줍니다.

다른기기들의 에뮬도 비슷한 방식으로 구동하고 있을거에요.


여기까지만 보면 FDD를 쓰는 경우와 별차이가 없는데요.

특히 아이큐2000처럼 본체에 FDD가 내장되지 않은 경우는,

일반 외장 FDD를 쓰는 경우와 대용량 디스크기기의 FDD에뮬 모드의 동작이 거의 같습니다.

실사용에서도 문제가 발생하지 않습니다.


하지만, FDD가 내장된 본체를 사용하게 되면 큰 문제가 발생하는데요.

S/W 구동 시, 에러를 표시하지않고 그냥 뻗어버리거나, 그래픽이 깨지는 등의 문제가 발생합니다.


이 문제는 디스크 커널의 특성과 거기 맞춰서 개발된 S/W의 문제가 모여서 발생합니다.


보통 DOS1 롬이라고 부르는 디스크 커널은 부팅할 때, WORKAREA에 필요한 메모리를 할당 후 사용합니다.

이 때 약 3KB가 사용이 되구요, FDD를 여러개 사용하면 그만큼 메모리 사용량도 늘어납니다.

본체에 FDD가 내장되어있는데, 외장 디스크를 추가연결하면 6KB가 소진되는 셈이죠.


근데 대부분의 디스크 게임들은 FDD 한개를 사용하는 환경을 기준으로 제작이 되어있습니다.

따라서, FDD를 여러개 꽂아서 WORKAREA가 많이 소진된 상태에서는?

스택(STACK) 영역이 부족하다보니, 힙(HEAP)과 스택이 충돌하는 상황이 발생하는거지요.

게임 구동 중 오동작하거나 그냥 멈추는 모습(?)으로 나타납니다.


그러면 디스크 기기가 2개 이상인 경우는 게임을 실행할 방법이 전혀 없는걸까요?

그건 아닙니다 ㅎ.ㅎ


모든 디스크롬에서는 공통으로 지원되는 기능이 하나 있는데요.

부팅 시 CTRL 키를 누르고 있으면, 드라이브 A: 한개만 할당하고 넘어갑니다.

그러니까 FDD의 드라이브 B:가 사라지게 되는거죠.

이렇게 드라이브 문자가 한개 줄어들면 WORKAREA에 할당되는 메모리도 줄어듭니다.

약 1.5KB가 되어요.


참고로, 유저의 CTRL 키 입력을 기다리는 표시가 따로 나오지 않기 때문에,

이 기능을 쓰려면 본체를 켠 후(또는 리셋 후) CTRL 키를 계속 누르고 있어야합니다.


그럼, FDD 두대를 연결했을 때 CTRL 부팅을 하게 되면?

첫 FDD가 드라이브 A:로 사용되고, 두번째 FDD가 드라이브 B:로 사용됩니다.

결국 WORKAREA 사용량이 FDD 한대일때와 똑같아지는거죠.


만얀 FDD가 세대 이상 연결되어있다면?

CTRL 부팅을 해도 드라이브 A: B: C: 3개가 할당되어서 게임이 안돌아갈겁니다요~

결국 FDD 두대 정도는 항상 연결해놓더라도 크게 문제 없다는 얘기죠.


하지만 복병이 하나 있었으니ㅋ

코에이 게임처럼 메모리를 빡빡하게 사용하는 경우는,

처음부터 CTRL 부팅을 요구합니다.

FDD가 한대뿐인데도 CTRL키를 눌러야 실행이 됩니다. (램 1.5KB만 봐주겠다! 뭐 그런거죠)

이런 경우는 디스크 기기가 두대 이상 연결되어 있으면, 딱히 방법이 없죠.


제가 만든 MMC/SD의 경우는 OneDrive라는 기능이 있는데요.

이걸 쓰면 외부 슬롯(SLOT 1 또는 2)으로 DSK 에뮬모드로 진입 시,

본체 내장된 FDD가 구동되지 않도록 게임 디스크를 바로 부팅시킵니다.

그리고 CTRL 키를 누른 것 처럼 초기화를 합니다.

FDD가 한대뿐인 환경에서 CTRL 키를 누르고 부팅하는 것과 같은 조건을 만들어주는 것이지요.


제가 예전에 올린 사진이나 영상을 보시면 항상 MMC/SD V2 두개가 꽂힌걸 볼 수 있는데요.

이 상태에서도 게임을 구동할 수 있는게 OneDrive 기능때문이었습니다요.

그럼 이대로 상황종료?

.

.

.

그럴리가 있겠습니까요? ㅋ

또다른 복병 바로 마이크로캐빈의 게임인데요.

이넘들은 FDD 한대 그대로 부팅하는 상황(드라이브 문자 A: B: 유지)에서만 실행이 됩니다.

만약 내 본체에 FDD가 내장되어 있고, MMC/SD로 DSK 파일을 구동한다면?

OneDrive를 끄고 유저가 CTRL 부팅을 해주는 방법밖에 없습니다.

물론 본체에 FDD가 내장되지 않았다면, 그냥 OneDrive만 끄면 잘 실행되겠습니다.


마지막으로 보너스 입니다.

MMC/SD Drive V4에서는 GameRunner II라는 막강(?)한 환경을 제공합니다.

가상의 슬롯, BIOS, 디스크 등으로 구동되어, 본체의 주변기기 조건과는 별개의 공통 환경을 만들 수 있습니다.

예) 아이큐2000 + FDD 한대의 환경 구동



[요약]


- 대부분의 디스크 게임은 FDD 한대만 있는 환경에서만 실행이 됨

- FDD가 두대인 경우는 CTRL 부팅으로 해결가능

- FDD가 세대 이상이면 해결책이 없음

- MMC/SD Drive의 OneDrive 기능으로 추가된 FDD를 무력화 할 수 있음

- 코에이의 게임은 OneDrive으로 간편하게 실행가능

- 마이크로캐빈의 게임은 CTRL 부팅 시 실행안됨 (OneDrive OFF 필수)

- MMC/SD V4의 GameRunner II로 FDD 한개뿐인 가상의 환경을 만들 수 있음

- MMC/SD 외의 디스크기기로 구동하는 환경은 제게 물어보지마세요 (잘 몰라요)


2021년 8월 1일 일요일

MoonBase 제작 #5 - OPLL 용 PCM 드럼셋을 두개로~

플래쉬롬과 로직에 조금 여유가 있어서, PCM 드럼셋을 하나 더 추가해보았습니다.

약간 드라이(?)한 느낌 드럼셋입니다 ㅎ.ㅎ


먼저 사이코월드 오프닝 영상을 녹화해보았습니다.

첫 오프닝은 기존 드럼셋을 사용하구요. 두번째 오프닝은 추가된 드럼셋을 사용합니다.

비교해서 한번 들어보셔요~





아래는 MGS 파일 3개를 재생 후,

기존 드럼은 왼쪽 오디오로, 추가된 음원은 오른쪽 오디오로 편집해서 넣었습니다.

OPLL 멜로디는 양쪽이 같으니까 모노로 들리겠구요.

드럼 사운드는 스테레오로 들리겠습니다.


드럼 비교용으로 만든건데, 이렇게 들어보는 것도 재밌네요.

모노 오디오는 뭔가 좀 먹먹한 느낌이 있어요. 흐...

https://soundcloud.com/yeongman-seo/moonbase-drum-set-l-r-mgs-music



그럼, 즐거운 일요일 되세요! ㅎ.ㅎ