2019년 3월 30일 토요일

MMC/SD Drive V4 제작 #11 - PSG to SCC 구현




아시다시피 V4에는 SCC 사운드가 들어있습니다.


게임을 구동할 때 PSG만 지원하는 경우는 V4의 SCC 사운드가 쉬고 있을텐데요.

이걸 강제로 구동해보려고 합니다.

그러니까 원래 PSG 사운드는 그대로 출력이 되고, SCC가 추가되는 셈이에요.


PSG의 사운드 출력을 가로채려면 아래 두가지 방법이 있습니다.

1. 기존 게임의 PSG write 코드를 패치

2. 주기적으로 PSG 레지스터를 읽어서 처리


참고로 V3의 게임러너는 PAC-V의 비주얼라이저 처리를 위해, 위의 1번 방법을 사용했습니다. 

V4에서는 게임러너 BIOS에서 PSG 레지스터를 읽어서 PAC-V로 전달하는 방법으로 바꿨습니다.

그러니까 위의 2번 방법을 쓰고 있는거죠.


두둥~ 선택은? 2번으로 갑니다.

이유는? 이미 PAC-V 때문에 같은 방식으로 쓰고 있으니까요 ㅎ.ㅎㅋ



그럼 SCC 소리를 PSG랑 섞었을 때 적당한 파형이 있을까요?

PSG는 구형파로 고정되어 있으니, 간단하게 사인파 또는 톱니파 등으로 섞어봅니다.


아래는 사운드 에디터로 만든 파형입니다.

두개는 기존 코나미 게임에서 쓰이는 샘플을 편집했구요.

나머지는 대충 만들었습니다ㅋ





게임 동작 중 단축키를 눌러서 SCC wave 메모리를 변경할 수 있습니다.


  단축키 = CTRL + SHIFT + 숫자키

  1 키 = PSG only

  2 키 = PSG + SCC (Sine wave)

  3 키 = PSG + SCC (Half sine + half sawtooth)

  4 키 = PSG + SCC (Double sine + sawtooth)

  5 키 = PSG + SCC (Double sawtooth)

  6 키 = PSG + SCC (사용자 wave 파일)


기본 파형 4개 외, 사용자가 임의로 추가할 수 있는 영역도 넣었어요.

롬파일과 같은 이름의 *.PCM파일이 발견되면, 자동으로 로딩되도록 합니다.


*.PCM 파일은 SCC 채널 3개에서 쓰일 샘플 데이터로 구성됩니다.

한 채널의 샘플은 32바이트의 signed 8BIT PCM이구요.

3채널을 모으면 총 96바이트의 PCM 파일이 되겠네요.


아래는 요술나무에서 쓰려고 편집한 PCM 파일입니다.

에디터에서 읽으면 요렇게 볼 수가 있죠~





MMCSD.COM으로 로딩하면 아래처럼 롬파일과 PCM파일이 한꺼번에 로딩됩니다.

PCM파일이 로딩되는 경우는 PSG2SCC 기능이 자동으로 ON 되니까 편하게 쓸 수 있어요.



샘플 파일 몇개 넣은 ZIP파일입니다.

심심하시면 구경하셔요~

Download: V4_PSG2SCC_Sample.zip



그럼 설명은 여기서 끝내고, 어떻게 동작하는지 영상으로 한번 보시죠.

영상 초반에는 롬파일만 로딩해서 내장된 샘플을 사용하고,

영상 후반에는 PCM파일을 자동으로 로딩해서 구동되는걸 볼 수 있어요.






그럼, 편안한 밤 되셔요~


댓글 없음:

댓글 쓰기