2024년 3월 2일 토요일

지난 20년 개발의 추억 #7 - AudioFactory

월간 추억팔이 #7편이 나왔습니다~ ㅎ.ㅎ


이전글을 보시려면, 아래 링크를 눌러주세요!

https://sharksym.blogspot.com/2023/07/20-1.html

https://sharksym.blogspot.com/2023/08/20-2.html

https://sharksym.blogspot.com/2023/10/20-3.html

https://sharksym.blogspot.com/2023/10/20-4-mmcsd-drive-v3.html

https://sharksym.blogspot.com/2023/11/20-5-paramsx-r.html

https://sharksym.blogspot.com/2024/01/20-6-paramsx-r-v11.html



2017년, MMC/SD V3를 3년째 쓰고 있군요~~

아시다시피 구버전(V2.x 등)에서 롬매퍼+사운드를 담당하던 SCC칩이 V3에서 제거되었습니다.


당시에 SCC-I 카트리지 또는 사운드 전용으로 개조한 SCC 카트리지를 쓰는 분이 많아서,

V3에 외부 SCC 사운드를 지원하는 방식으로 바뀐 것 자체가 큰 문제는 아니었는데요.

근데 이 방식은 기존 프로그램을 MMCSD가 자동패치해서 구동하는 방식이라서, 지원이 완벽하지 않다는 문제가...

암튼 다음번 MMC/SD V4에서는 SCC 사운드를 구현해서 넣기로 계획을 합니다. 흙흙...


좀 여담이지만...

2000년초에 레트로 사운드가 유행하면서, 각종 PSG, FM 계열의 에뮬로 뮤직플레이도 함께 유행했는데요.

저는 주로 윈도용 윈앰프를 썼는데, KSS, MGS 등의 음악 파일을 윈도에서 바로 들을 수 있어서 좋았지요.

그 때 윈앰프용 IMS 플러그인도 제가 만들었는데, 기억하시는 분들 계실지 모르겠네요ㅋ

회사에서 개발하면서 이어폰 꽂고 칩사운드를 즐기는 것도 나름 맛이 있었어요.


근데, 작년(2016년)에 MSX계에 어떤 S/W가 혜성처럼 등장하게됩니다. 바로 VGMPLAY

제가 GT를 쓰면서 MIDI, MP3 음악을 듣거나, 게임 오프닝을 보면서 사운드를 즐기는 경우가 많았거든요.

이젠 MSX용 VGMPLAY가 나오면서, PSG, SCC, OPLL, OPL4, DCSG 등 본체의 사운드 칩으로 음악을 쉽게 즐길 수 있게 되었네요.

실기를 켜는 즐거움이 2배로 더 늘어났다고 하면... 조금 과장이려나요? ㅎ.ㅎ


서론이 길었는데, 그렇게 AudioFactory 프로젝트가 시작됩니다.



13 AudioFactory


이름만 봐도 아시겠지만, 사운드 통합 기기가 되겠습니다.

현재 제가 쓰는 MSX 환경에서 슬롯 점유를 최소화하고 필요한 사운드를 추가하는 것이 목표입니다.



13.1 SCC-I


MMC/SD V4에 넣기 위한 SCC-I 에뮬입니다.

사운드만 넣어도 되겠지만, 어차피 슬롯 한개를 점유하는 기기니까... SCC-I 메모리도 128KB FULL로 넣어봅니다.



13.2 DCSG (SN76489)


세가 게임(오락실 기판 및 게임콘솔)에서 주로 쓰였는데요. 이제 MSX에서도 VGM 음악으로 즐길 수 있습니다.

저는 현재까지는 DCSG가 들어있는 SEGA VDP 카트리지(Franky)를 쓰고 있습니다.

이걸 대체하기 위한 DCSG(SN76489) 에뮬이 되겠네요.



13.3 Sec-PSG


일명 세컨더리 PSG가 되겠습니다 ㅎ.ㅎ

이쪽은 활용도가 높진 않지만, 오락실 기판에서 PSG 여러개를 쓰는 경우에 VGM 플레이를 즐길 수 있구요.

그 외 Sec-PSG를 쓰는 자작 게임에서도 활용할 수 있겠습니다요.



13.4 OPM (YM2151)


MSX용 기본 사운드는 아니지만, 야마하 뮤직 컴퓨터에서 사용된 SFG 카트리가 있습니다. 여기에 OPM이 포함되어있어요.

Memory Mapped I/O로 되어있어서 SCC-I랑 슬롯이 겹치니까, 이걸 넣으려면 고민을 좀 해야겠는데요.

근데 막상 기존에 즐겨듣던 VGM들이 OPM + ADPCM로 구성된 경우가 대부분이라, OPM 하나만으로는 그닥 쓸모가 없겠더라구요.

고민할 필요도 없이 OPM 기능은 삭제합니다 ㅎ.ㅎ



13.5 프로토타입 제작


paraMSX-R에서 쓰였던 보드 한장을 개조해서 만들어봅니다.




열심히 에뮬을 구현해보아요~ ㅎ.ㅎ

로직 소모를 줄이기 위해 짱구를 요리조리 돌려서 VHDL 코딩을!

기존의 음악환경에서 불편했던 것들이 해결되니 좋네요. 특히 DCSG 때문에 큼지막한 Franky를 꽂아둘 필요가 없어져서 최고!ㅋ


근데, 갑자기 이런 생각이 머리를 스칩니다.

MMC/SD V4에 SCC-I와 DCSG, Sec-PSG 에뮬을 몽땅 넣으면 어떨까? 으흠...



암튼, 요렇게 AudioFactory 프로젝트는 종료됩니다.

참고로, 이 기기는 제가 다른 분들에게 제작해드린 적은 없습니다.

아마 나중에 만들어지는 기기들을 보시면, 이유를 알 수 있을거에요 ㅎ.ㅎ/


.

.


2017년에 재밌는 작업을 했던 게 있어서 하나 더 적어봅니다.


IOBox라는 건데요.

이건 별도의 주변기기를 의미하는 것은 아니고 시리얼 포트를 활용한 프로그램입니다.


MSX에서 VGMPLAY를 쓰다보니, 예전 486 도스에서 썼던 SOP 음악이 생각나더라구요.

OPL3를 사용하는 음악이라서 재밌는 것들이 많았는데, MSX에는 SOP 플레이어가 없죠 ㅎ.ㅎ


그래서, 요상한걸 하나 구상하게 됩니다.

윈도의 DOSBOX 프로그램을 수정해서 OPL3 I/O를 MSX로 전송해서 들어보면 어떨까? 였죠.


PC와 MSX 간의 통신은 RS-232C 카트리지를 사용합니다.

DOSBOX의 OPL3 에뮬코드에 시리얼포트로 데이터 입출력을 넣습니다.

사실 이건 예전에 TV 내장된 리눅스용 paraMSX 에뮬에서 썼던 방식이긴합니다.

그 때는 PSG와 키보드(PPI) I/O를 본체쪽으로 시리얼포트를 이용해서 구현했었죠.


암튼 그렇게 구현해서 만든 DOSBOX용 외장 리얼 사운드카드가 되겠습니다.

PAC-V의 불꽃쇼도 나오면 좋으니, 함께 넣어봅니다ㅋ



아래는 NOTEW 프로그램으로 SOP 음악을 재생하는 모습이네요.




요렇게 2017년은 마무리되었습니다.


그럼, 다음편에서 뵙겠습니다! ㅎ.ㅎ


2024년 2월 29일 목요일

'시끌시끌 야구' 카트리지 제작

'시끌시끌 야구' 카트리지 제작


음성과 효과음이 PCM 사운드로 출력되는 야구 게임 카트리지가 있었습니다.


혹시 기억하시나요? ㅎ.ㅎ 'PLAYBALL'과 '불타라! 열투야구'입니다.

음성이 기록된 ADPCM 칩으로 소리를 내주고 있어요.


아래는 PLAYBALL 카트리지의 모습입니다.

투명한 케이스로 제작된 이유가... 아마도 ADPCM 칩이 내장된걸 뽐내려는 목적이겠죠? ㅎ.ㅎ




그 외 'Hard Ball' 게임에서도 음성출력이 되는데요.

본체의 SLOT 1에는 Hard Ball, SLOT 2에는 PLAYBALL을 함께 꽂아서 실행하면,

Hard Ball에서 SLOT 2에 있는 ADPCM 칩을 구동합니다.

결국 PLAYBALL 카트리지가 있어야, 음성/효과음을 들을 수 있습니다요.



.

.

.


여기까지 읽으셨으면, 제가 뭘 하려는지 눈치채셨겠지만ㅋ

Oraksil보드에 내장된 PCM player로 이 ADPCM 칩의 음성을 에뮬하는 거죠.


ADPCM을 H/W 로직으로 구현하려면 MoonBase처럼 큰 보드가 필요합니다만...

음성을 녹음해서 LPCM으로 바꿔 처리하면 쉽게 출력할 수 있어요~

그냥 용량 큰 플래쉬롬을 박으면 해결 ㅎ.ㅎ/


사실 음성지원 야구 카트리지는 작년말에 만들었는데, 올초에 TapTapRevolution 작업에 정신이 팔려서...ㅋ

TTR을 대충 완성한 후에야, 야구 카트리지 제작을 마무리했습니다요~


카트리지 이름은 '시끌시끌 야구'로 붙여보았습니다.

8개의 야구 게임이 들어있구요. 부팅하면 커서키(또는 조이패드)로 게임을 골라서 실행합니다.

게임 선택화면에서 제목도 음성으로 들을 수 있어요.


아...  Hard Ball은 별도의 PLAYBALL 카트리지 없이 음성출력이 되도록 수정되어있습니다.


아래는 들어간 게임들의 목록입니다. 발매년도 순으로 넣었어요.


1986. PLAYBALL (음성 지원)

1986. Hard Ball (음성 지원)

1987. Victorius NINE II

1988. 프로야구 FAN 텔레넷 스타디움

1988. 불타라! 열투야구 (음성지원)

1989. 프로야구 패밀리스타디움 - 페넌트레이스

1989. 프로야구 패밀리스타디움 - 홈런콘테스트

1989. PLAYBALL III



동작 모습은 아래 유투브로 구경하세욤~ ㅎ.ㅎ/




그럼, 이만~~

2024년 2월 24일 토요일

TapTapRevolution 제작 #4 - 노래와 함께~ 고고

이제 음악을 넣어보아요! ㅎ.ㅎ


1편 글에서 PCM 출력을 사용한다고 얘기했었는데요.

turboR, 뮤직모듈, Covox 등의 PCM은 CPU가 데이터 1바이트씩 전송(write)해야 되니까, CPU 부하가 매우 큽니다.

동영상 플레이어 같은 단순 반복작업인 경우는 타이밍 맞춰서 사용할 수 있겠습니다만... TTR에서는 못 쓴다고 봐야겠죠.


TTR 카트리지에는 8MB의 플래쉬롬이 내장되어있구요. 이 데이터를 8BIT PCM으로 자동 재생이 되는 기능이 들어있습니다.

CPU는 단지 Play/Stop 커맨드만 보내주면 됩니다. 노래는 그냥 쭈욱~ 출력됩니다요.

메인 프로그램에서 그래픽과 사운드 싱크만 잘 맞춰주면 OK입니다!


카트리지의 PCM 출력은 22.05kHz, 44.1kHz 모드가 있는데요.

TTR에서 쓰이는 곡은, 길이가 약 90초 쯤 됩니다. 44.1kHz PCM으로 변환하면 거의 4MB 분량이 나오게 됩니다.

22.05kHz PCM으로 변환하면 2MB 정도가 되니까, 8MB 플래쉬롬에 4곡을 넣을 수 있겠네요.

11.025kHz 등으로 샘플레이트를 낮추면 곡을 많이 넣을 수는 있겠지만, 음질 손해가 크니 22.05kHz로 갑니다요!


TTR에서는 22.05kHz 모드로 3곡을 넣고 남은 2MB 영역은, 프로그램 및 그래픽 데이터가 들어가게 되겠습니다.

결국 노래는 3곡이 들어가게 되겠네요.



그럼, 실제로 구동해보겠습니다. 잘 나오는지 한번 보셔요! ㅎ.ㅎ/~




.

.

.


으흠... 사운드는 딱히 더 설명할 부분이 없네요ㅋ


그럼, 다음편에서 보아요~ ㅎ.ㅎ/