2020년 4월 2일 목요일

T-Wave 제작 #4 - 컨트롤

제가 기기를 만들 때는 되도록이면 외부 스위치가 필요없도록 설계를 하는데요.

이번 T-Wave는 조금 예외가 되겠습니다.


다른 S/W(주로 게임ㅋ)가 동작 중에 T-Wave를 컨트롤 해야하는 경우가 대부분이라서요.

사용자가 직접 이리저리 만지면서 쓰는 기기라고 보시면 되겠습니다.

물론 S/W로 세팅할 수 있도록 전용의 프로그램도 있습니다. MMC/SD 툴에서도 지원이 될 예정이구요.



일단 아래 사진을 보시죠~

3단 슬라이드 스위치 2개와 조그다이얼(조이스틱) 2개가 있습니다.





T-Wave에는 세 종류의 사운드가 들어있습니다.

SCC-I + DCSG 4Ch x 2 + WSG 3Ch x 2


기능별로 컨트롤 방법의 차이가 있습니다.


1) SCC-I


SCC-I는 기존의 스내처 또는 SD-스내처에 번들된 사운드 카트리지와 같은 기능을 갖고 있습니다.

스내처    = SCC-I 사운드 + 메가램 64KB (하위 메모리)

SD-스내처 = SCC-I 사운드 + 메가램 64KB (상위 메모리)


T-Wave는 스내처 모드, SD-스내처 모드로 설정이 가능하구요.

128KB로 메모리로 확장된 모드와 512KB 확장모드를 추가 지원합니다.

디폴트 모드는 128KB 메모리 모드입니다. (MMC/SD V4의 SCC-I 128KB 모드와 유사)

대부분 SCC-I 용 S/W들이 스내처/SD-스내처에 대응하기 때문에 128KB 모드가 가장 유용합니다요~

동작모드는 S/W로 전환가능합니다. 컨트롤 용 외부 스위치는 없어요.

본체를 리셋하더라도 모드는 바뀌지않고 유지됩니다.


2) DCSG


DCSG 컨트롤 포트는 S/W에서 설정하기 때문에 포트 설정 용 스위치는 없습니다.

대신 DCSG 두개의 출력을 STEREO 그대로 출력하거나, MONO로 다운믹스할 수 있는 스위치를 제공합니다.

슬라이드 스위치로 [MUTE / 강제 MONO / STEREO]로 설정합니다.

헤드폰잭을 안꽂으면 STEREO로 설정하더라도 MONO로 출력됩니다. (MSX 본체 사운드는 원래 MONO입니다요~)


3) WSG


이제 좀 복잡한데요. ㅎ.ㅎ;

WSG는 본체의 PSG와 연동해서 화음을 만들어내는 것이 주기능입니다.

화음 엔진은 두개가 들어있습니다.

LEFT 오디오를 담당하는 WSG-L과 RIGHT 오디오를 담당하는 WSG-R입니다.


각각을 컨트롤하기 위해 2개의 조그다이얼이 존재합니다. 각각 WSG-L, WSG-R 전용입니다.

왼쪽/오른쪽 기울이기 = 주파수배율(8단계) 또는 샘플패턴(32개) 변경

중앙 버튼 누르기     = 사운드 출력 MUTE


슬라이드 스위치로 주파수배율/샘플패턴 모드를 바꿀 수 있습니다.

조그다이얼의 버튼은 항상 사운드 MUTE로 동작합니다.

MUTE 버튼을 이용하면, 현재 설정이 어떤 효과를 내고 있는지 쉽게 알 수 있습니다.


근데 이렇게 구현을 해놓고 보니, 일반 사용자가 쓰기에 너무 복잡한 것 같더라구요.

보통 사용법이 복잡하면 결과는 한쪽으로 수렴합니다 -> 사용안함으로요 ㅋ


그래서 프리셋 모드를 추가했습니다. ㅎ.ㅎ

WSG 용 슬라이드 스위치는 [프리셋 모드 / 주파수배율 모드 / 샘플패턴 모드]로 설정됩니다.


프리셋 모드일 때는 두개의 조그다이얼이 아래처럼 동작합니다.

왼쪽   조그다이얼 = 주파수배율 조합 선택

오른쪽 조그다이얼 = 샘플패턴 선택 (WSG-L, WSG-R 동시에 설정됩니다. 같은 샘플로요~)


주파수배율 조합은 아래 4가지가 들어있습니다. 그럭저럭 괜찮은 조합입니다요~ㅋ

1. WSG-L x0.50 + WSG-R x0.75 <- 저음 조합

2. WSG-L x0.75 + WSG-R x1.25 <- 근거리 조합

3. WSG-L x0.50 + WSG-R x1.50 <- 원거리 조합 (디폴트 설정)

4. WSG-L x1.25 + WSG-R x1.50 <- 고음 조함


참고로 제가 WSG관련 영상(유투브)을 두번 올렸는데요.

첫번째 영상은 2번 조합이고, 두번째 영상은 3번 조합이었습니다.


WSG 설정은 본체를 리셋하더라도 바뀌지 않습니다.

대신 프리셋모드에서 오른쪽 조그를 누르면, 주파수배율/샘플패턴을 디폴트로 초기화해줍니다.

스위치를 마구 돌리다가 기본값으로 돌아오고싶을 때 쓰면 되겠죠? ㅎ.ㅎ


4) Secondary PSG EMU


Secondary PSG는 포트 10H, 11H로 구동되는 AY-3-8910 사운드입니다.

일부 게임에서 사용하고 있구요. VGMPlay에서도 지원되니 유용하게 쓸 수 있습니다.


T-Wave에서는 PSG 사운드가 따로 들어있진 않습니다.

대신 WSG의 주파수배율을 x1.00(1789772.5Hz)으로 고정하고,

샘플패턴을 구형파(Square Wave)로 설정해서, PSG와 동일한 소리를 낼 수 있습니다. 노이즈 출력도 똑같이 됩니다.

이걸 Sec-PSG EMU라고 부릅니다. (제가 그냥 그렇게 정했어요ㅋ)

이 모드에서는 포트 10H/11H으로 Secondary PSG처럼 동작합니다.


프리셋 모드에서 왼쪽 조그다이얼 버튼을 눌러 [WSG 화음 / Sec-PSG EMU] 모드를 토글합니다.

조그다이얼 옆에 LED가 있어서 현재 동작 모드를 쉽게 알 수 있어요.

LED ON  <- WSG 화음모드

LED OFF <- Sec-PSG EMU 모드


VGMPlay에서는 Sec-PSG EMU가 자동으로 ON/OFF 될 예정이니, 따로 버튼을 누를 필요는 없겠습니다.


.

.

.

여기까지네요.


글로 적으니까 복잡해보이는데... 한번 써보면 그리 어렵지는 않을꺼라 믿습니다.

(믿고 싶습니다 ㅠ.ㅠ)


그럼, 다음편에서 또 뵈어요~ ㅎ.ㅎ/


2020년 3월 29일 일요일

T-Wave 제작 #3 - WSG 출력은 스테레오

오디오 출력은 스테레오입니다. 왼쪽~ 오른쪽~ ㅋ

물론 헤드폰잭을 꽂아야 가능하겠구요. 외부 오디오 믹서로 적당하게 밸런스를 맞추시면 되겠습니다.

헤드폰잭이 없으면 모노로 믹스되어 본체의 SOUNDIN 단자로 입력됩니다.


보드는 이렇게 생겼습니다~






오디오 왼쪽 채널은   WSG-L + DCSG-L + SCC-I

오디오 오른쪽 채널은 WSG-R + DCSG-R + SCC-I


SCC-I는 이어잭으로 스테레오 출력을 하더라도 좌우 똑같은 소리가 나와요. 참고하시구요~

DCSG 출력은 다음편에 언급하기로 하고, 오늘은 WSG 얘기만 하도록 하겠습니다.


WSG-L/R은 주파수 배율 및 샘플 파형을 각각 설정합니다.

본체 리셋되면 WSG-L은 x0.5배율, WSG-R은 x1.5배율로 기본설정됩니다.

왼쪽은 한옥타브 낮은 음이 출력되고, 오른쪽은 반옥타브 높은 음이 출력되겠습니다.


본체의 PSG가 모노 3채널, T-Wave에서 왼쪽 3채널, 오른쪽 3채널을 담당하니까 밸런스가 잘 맞습니다.

이리저리 들어보면 스테레오 듣는게 훨씬 재밌네요! ㅎ.ㅎ

XAK 등의 게임은 FM을 메인 BGM으로 쓰지만 PSG도 함께 사용하고 있는데요.

이 경우에도 WSG 화음이 섞이면 꽤 괜찮은 스테레오를 느낄 수 있더라구요. 예상밖의 소리가 나서 깜놀~ㅋ


아래는 오디오 믹서로 녹음된 모습입니다.

왼쪽과 오른쪽 오디오의 음색이 많이 다른걸 볼 수 있죠?





백문이 불여일견이 아니라... 이건 소리를 들어봐야합니다ㅋㅋ

영상으로 보시죠~

스테레오로 녹음되어구요. 몇가지 게임실행 모습과 카라시스2의 노래 두곡을 담아봤습니다.





그럼, 다음편에서 계속됩니다.

즐거운 일요일되세요~ ㅎ.ㅎ/


2020년 3월 8일 일요일

T-Wave 제작 #2 - 화음을 만들어보아요

먼저 WSG 구조를 설명드려야겠죠?

T-Wave에는 WSG 엔진이 두개 들어있구요. 대강 이렇게 생겼습니다~ (그림은 없어요ㅋ)


1) 샘플 데이터는 SCC와 동일한 Signed 8BIT PCM를 사용합니다.

SCC의 1주기(32바이트)으로 동작하는 SCC와는 조금 다른 부분이 있어요.

최대 256바이트(8주기)의 샘플 데이터를 사용할 수 있습니다.

파형이 지속적으로 변하는걸 만들 수 있다는 얘기입니다.


뭐, 데이터 크기를 좀 더 늘리면 간단한 트레몰로/비브라토 효과도 만들 수 있겠지만,

대부분 게임에서는 S/W적으로 효과를 내고 있으니...

어설프게 중복 효과를 넣기보다는 없는편이 더 듣기 좋을 확률이 높습니다.


2) PSG와 동일한 방식의 Noise 합성을 지원합니다.

WSG의 주 목적이 본체의 PSG와 화음을 만드는 것이니 Noise 부분도 있어야되겠죠? ㅎ.ㅎ

실제 구현해서 들어보니 Noise 처리가 없을 때는 상당히 어색하더라구요.


3) 기본 레지스터는 PSG와 같은 구성으로 되어있습니다.

이 때문에 화음모드에서는, 기존 S/W를 변형(패치)없이 WSG로 동작가능합니다.

사실 이게 메인 기능이죠. PSG 포트로 함께 동작하는 화음모드~ ㅎ.ㅎ


4) 전체 주파수 비율을 조절하는 기능과 최종 출력 Gain을 조절할 수 있습니다.

주파수 조절은 화음을 만들 때 필수겠죠?

PSG 톤의 2/8배수부터 16/8배수까지 1/8배수 단위로 주파수 조절이 가능합니다.

WSG 2개를 각각 다른 배수로 설정할 수 있어요.


5) WSG 2개는 2개의 DAC으로 각각 출력이 됩니다.

3.5파이 이어잭 단자를 쓰면 그대로 스테레오로 들을 수 있어요.

내부적으로는 WSG-L, WSG-R로 이름붙였습니다ㅋ


참고로 이어잭을 꽂으면, 슬롯의 SOUNDIN으로는 출력이 들어가지 않습니다.

이어잭을 뽑으면, 모노로 믹스되서 SOUNDIN으로 들어가게 되겠구요.



대충 어떻게 동작되는지 아시겠죠? ㅎ.ㅎ

설명이 길었으니 그냥 동영상으로 동작 모습을 보시면 되겠습니다.

아직 PCB를 찍은건 아니라서, 기존 MMC/SD V4 두개로 구현한 상태입니다.

현재 사운드 출력은 슬롯 SOUNDIN으로 믹스되서 모노로 들리는데요.

다음주에 이어잭으로 분리해서 한번 녹음해보려고 합니다. (납땜이 귀찮귀찮...ㅋ)



아래 영상에서는 WSG 두개를 화음모드로 동작하는 모습입니다.

WSG 1번은 0.5배 주파수로 설정되어있고,

WSG 2번은 1.25배 주파수로 설정되어있습니다.

샘플 파형은 사인파와 톱니파를 섞어서 사용합니다.


주파수 배율 및 파형 설정은 Switched I/O 포트(40H ~ 47H)로 구현되어 있구요.

실제 보드가 완성되면 외부 스위치(조그 다이얼)로 쉽게 조절가능하겠습니다.


영상에서는 사운드 비교를 위해, 처음에는 본체 PSG 음악(몽대륙)이 잠깐 나오구요.

WSG 화음모드 설정 후에는 끝까지 화음모드로 나옵니다.





혹시 실제 파형이 궁금하신 분이 있을까봐 MP3도 하나 첨부합니다.

몽대륙의 BGM 하나를 일반 PSG 녹음한 것과 WSG 화음모드로 녹음한 파일입니다.

MP3 두개가 들어있어요. 교대로 들어보시면 차이를 확~ 느끼실 수 있겠습니다~ ㅎ.ㅎ

Download: 20200308_WSG_Chord_BGM.zip


그럼, 다음편에서 이어지겠습니다~