2017년 6월 4일 일요일

[WIN] IMS Player v0.5 - WinAMP plugin

하이텔 시절(2002년)에 만든 프로그램인데, 혹시나 필요할까봐 올려놓습니다.

윈앰프 v2.x 시절 용 플러그인입니다. ㅎ.ㅎ


소리가 궁금해서 윈앰프 v2.95 버전을 깔아서 한번 들어봤어요.

지금 윈10 쓰는데 잘 돌아가는군요.


재생 중 파일정보를 띄우면(단축키 ALT+F3) 사용된 악기 리스트를 보여줍니다.

지금보니 진짜 대충만들었군요.ㅋ 누락된 악기 확인할 때 쓰면 되겠죠.




혹시나해서 윈앰프 v2.95 파일도 올려놓아요.

Download: winamp295_full_noaod.zip


아래 IMS 플러그인 받으시면 되겠습니다.

Download: ims_player_05.zip


====================================================


IMS Player Version 0.5 By 서영만  2002.01.06

                       (E-Mail : sharksym@hitel.net)


이 프로그램은 *.IMS 연주를 위한 Winamp용 플러그인입니다.

사운드 출력은 YM3812 에뮬레이션입니다.


설치는, in_ims.dll, Standard.bnk 두 파일을

윈앰프의 Plugins 폴더에 복사하면 OK.


Bank 파일은 기본적으로 Standard.bnk를 사용하며,

IMS 파일과 같은 이름의 BNK 파일이 발견되면 자동으로 읽어들입니다.

아직 ISS 파일은 지원하지 않습니다.


주의!! 특정 IMS 로딩시 윈앰프가 강제 종료되는 버그가 있습니다.

(원인은 찾았는데 해결이 잘 안되는군요... T^T )


그럼, 이만~


2017년 5월 10일 수요일

Dual DCSG 사운드를 들어보아요~ (feat. ALTERA CPLD)

DCSG는 SN76489 사운드 칩을 말하는데, 혹시 소리 한번 들어보셨나요?

MSX에는 PSG가 기본 사운드라서 DCSG 쪽엔 별 관심이 없는게 맞을텐데요.

오락실 게임이나 SEGA 게임기에서 좀 쓰였더라구요.

저는 오락실에서는 많이 들어봤는데, 물론 국딩 때엔 그게 무슨 칩으로 소리를 낸건지 궁금하지도 않았어요.ㅋㅋ


음... SMS 게임을 실행해주는 Franky 카트리지는 들어보셨나요?

이건 2009년쯤엔가 Super Soniqs 에서 만든 카트리지인데요.

SEGA VDP(315-5124)가 들어있어서, DCSG 사운드를 들을 수 있습니다.

참고로 DCSG가 315-5124 칩에 통합되어있어요.

그 외, Musical Memory Mapper (MMM) 카트리지나 PlaySoniq 카트리지에서 DCSG 사운드가 지원됩니다.


VGMPLAY 프로그램으로 덤프된 사운드파일을 재생할 수가 있으니,

음악 들으려고 일부러 게임 구동할 필요도 없어서 좋죠. ㅎ.ㅎ


근데...


VGMPLAY에서 Dual PSG, Dual DCSG가 지원된다는 얘기가 있어서, 이걸 한번 들어봐야하지 않을까? 생각이 들었습니다.

말그대로 사운드 칩 여러개 재생이 된다는 얘기죠.


저는 DCSG 사운드가 하나(Franky 카트리지) 뿐이라, 다른 카트리지가 있어야하는데...

paraMSX-R 보드에 CPLD가 있으니, 이걸로 MMM이랑 Franky의 사운드를 구현해서 재생해보았습니다.


아래는 VGMPLAY를 실행해본 모습입니다.

EXED EXES 게임에서 PSG 1개, DCSG 2개를 사용하고 있군요.

EXED EXES는 국딩 때 2인용으로 많이 했던 기억이 나네요. ㅎ.ㅎ




낭랑한 소리~~ 스피커 볼륨을 올리니 완전 오락실 삘이네요. ㅎ.ㅎㅋ


그럼, 영상으로 한번 감상하시지요~

영상 초반엔 Franky 카트리지를 꽂아서 DCSG 한개가 동작하는 모습이 나오구요.

그 뒤엔 Dual DCSG 카트리지로 구동하는 영상입니다.




그럼 이만~~ ㅎ.ㅎ


2017년 4월 29일 토요일

MMC/SD Drive V3 제작 #14 - BIOS 폰트 교체 테스트

일단 서론부터...


MSX의 비디오는 VDP 칩에서 출력된다는건 다 아시죠?

VDP 칩 내부에는 문자용 패턴 데이터가 없으니, VRAM에 폰트 데이터를 로딩해서 사용합니다.

VDP를 텍스트 모드로 쓰던 그래픽 모드로 쓰던 어쨌거나 문자를 표시하려면, 폰트가 필요합니다.


8 x 8 도트의 1BPP 데이터로 만들면, 256문자를 위해 2048바이트 데이터가 필요한데요.

메인 BIOS롬에 국가 규격에 맞는 폰트가 들어있어서, 기본적으로 이걸 활용하게 됩니다.


근데 갑자기 이 얘기를 왜 하냐구요? ㅎ.ㅎㅋ


지난 3월에 봄정모가 있었죠? 그 때 키티야님이 하신 말씀이...

"BIOS의 폰트를 쓰는 게임은 한글화가 불가능한데, 이걸 해결할 수 있는 방법이 있을까요?

에를 들어 FontPack을 활용한다거나..."


그.래.서.

약간의 테스트를 해보게 되었습니다. ㅎ.ㅎ



지금부터 본론입니다...


시스템의 폰트 데이터를 읽으려면 두가지 방법이 있는데요.


1. BIOS 롬의 문자 패턴을 그대로 읽어서 활용

   BIOS의 0004H 번지에 16BIT 주소값이 들어있는데, 그게 폰트 데이터의 테이블 주소값입니다.

   슬롯0(또는 슬롯0-0)에서 해당 번지를 확인 후 읽어서 쓰면 되겠죠.


2. MSX는 부팅 후, 폰트 데이터를 변경할 수 있습니다.

   특정 슬롯에 폰트롬을 장착 후, WORKAREA의 아래 2개의 시스템 변수를 세팅하면 됩니다.

   이 변수는 메인 BIOS에서 텍스트 모드 전환할 때, 해당 테이블을 자동으로 VRAM에 로딩하기 때문에 편리합니다.


   아래는 일제 MSX1 ROM의 기본값입니다.

   F91FH CGPNT:  DEFB 00H     ; Slot ID

   F920H         DEFW 1BBFH   ; Address


   여기에 설정된 슬롯에서 데이터를 읽어서 쓰면 됩니다.


근데 실제 게임에서 BIOS의 폰트를 가져오는 경우가 많을까요?

그건 저도 몰라요. ㅎ.ㅎ


게임에서 쓰는 문자가 아스키코드 128개 정도라면, 1024바이트 용량으로 충분하니까...

왠만한 게임은 자기만의 폰트 데이터를 갖고 있다고 봐야겠죠.

특히 메가롬 게임처럼 용량이 크다면 BIOS 폰트를 쓸 필요가 거의 없겠죠? ㅋ


일단 BIOS 폰트를 쓰는 게임 몇개를 찾아봤습니다.

도마에 오른건 블랙 오닉스, 람보, 던전 마스터 3개입니다.


하나씩 테스트해봅니다. 두가지 방법을 썼습니다.

1. GameRunner 모드 전용 BIOS의 폰트를 바꾸는 방법

   BIOS 롬 자체를 해킹하는 방법입니다.


2. FontPack의 메모리에 로딩하는 방법

   WORKAREA의 CGPNT를 재설정하는 방식이죠. 저기 위에 2번에서 설명했던 방법이요.



사용자의 편의를 위해,

롬 파일과 이름이 같은 폰트 파일(확장자 FNT)이 있으면, MMCSD.COM에서 자동으로 로딩하도록 만들었습니다.


아래는 블랙 오닉스를 실행하는 모습이네요.




테스트로 쓰인 폰트는 아래처럼 생겼어요.



  


* 블랙 오닉스의 테스트 결과입니다.


아래는 폰트를 바꾸지 않고 그냥 실행한 모습입니다.

BIOS 폰트의 점 하나도 바꾸지 않고 그냥 쓰고 있네요! ㅎ.ㅎ





아래는 GameRunner의 폰트 로딩으로 실행한 모습입니다.

글자가 바뀐게 보이시죠?





이번에는 FontPack에 로딩한 모습입니다.

글자가 엉망이 됐군요. 버그겠죠. ㅎ.ㅎ;

폰트 로딩 시 슬롯0로 고정해놨거나 뭐 그런 이유가 아닐까 싶은데... 게임 디버깅은 PASS~






* 람보의 테스트 결과입니다.


아래는 폰트를 바꾸지 않고 실행한 모습인데요.

FontPack에 로딩을 해도 폰트가 바뀌지 않네요.

WORKAREA의 설정값을 무시하고, BIOS 롬 내부의 폰트 데이터를 쓰는걸로 생각됩니다.





아래는 GameRunner의 폰트 로딩으로 실행한 모습입니다.

제대로 폰트 변경이 되어있네요.






* 던전 마스터의 테스트 결과입니다.


아래는 폰트를 바꾸지 않고 실행한 모습입니다.

BIOS의 폰트를 두껍게 만들어서 쓰고 있네요. 예전 BASIC 게임들이 이런식으로 많이 썼었던 기억이납니다.

코드 서너줄로 글자를 이쁘게 만들 수 있으니까요~ ㅎ.ㅎ





아래는 GameRunner 및 FontPack의 폰트 로딩으로 실행한 모습입니다.

두 경우 모두 아래처럼 폰트가 제대로 변경이 되었어요.

WORKAREA의 테이블값을 제대로 활용하는 게임이 되겠습니다! 와우~ ㅎ.ㅎb






결론입니다...


시스템(WORKAREA)에 설정된 최종 폰트 데이터를 사용하는 게임도 있고, 아닌 경우도 있네요.

실제로 적용해본다면, FontPack으로 로딩하는건 포기하는게 맞을 것 같구요.

GameRunner 쪽만 적용하는걸로 진행해야될 듯 합니다.


그럼, 즐거운 주말되셔요!!