2016년 11월 25일 금요일

MMC/SD Drive V3 제작 #13 - PAC-V를 이용한 PSG 비주얼라이저

PAC-V에는 9채널의 LED 비주얼라이저가 들어있습니다.

기본적으로는 OPLL(FM 음원) 칩의 동작을 LED로 보여주는 것인데요.

이걸 S/W적으로 디스플레이하는 것도 가능합니다.

현재까지는 M에서 MPXP/IMSP 플레이어가 활용을 하고 있어요.


이제 MMC/SD Drive 차례가 왔습니다. ㅎ.ㅎ

MSX 본체에는 PSG 사운드가 기본으로 들어있구요.

FM 사운드가 보편화되기전의 수많은 게임들이 PSG만으로 소리를 내고 있습니다.

PSG 사운드에 맞춰 PAC-V의 LED 쇼를 즐길수 있으면 훨씬 신나겠지요? ㅎ.ㅎㅋ


S/W에서 PSG를 액세스 할때는 주로 두가지 방법을 사용합니다.

1. PSG I/O 포트로 직접 출력

2. 메인 BIOS의 WRTPSG 루틴 사용


1번처럼 I/O 포트를 직접 건드리면, 코드를 패치하지 않는 이상은 PAC-V 활용은 힘들겠구요.

2번의 메인 BIOS 루틴을 사용하는 경우는 방법이 있습니다.


사실 WRTPSG 루틴은 훅이 없어서, 코드를 가로채는게 불가능한데요.

MMC/SD의 GameRunner BIOS를 쓰게 되면 구현이 가능해집니다.

GameRunner에서는 PSG로 출력도 하고, 동시에 PAC-V LED으로 출력도 하는 것이죠.


아래 실제로 동작하는 모습을 보시지요~




PSG는 구형파(및 노이즈) 출력 채널이 3개 있습니다.

이걸 PAC-V의 LED바 9개 중에서 6개를 이용합니다.

PSG 한 채널에서 LED바 2개를 쓰는거죠~


노이즈만 출력하는 경우는 LED 2개 중 오른쪽 LED로 표시를 하구요.

그 외의 경우는 LED 2개로 보여줍니다.


MMCSD.COM 프로그램에서 GameRunner 모드(/G 옵션)를 사용하면,

슬롯의 PAC-V 카트리지가 인식되는 경우, 비주얼라이저를 쓸지 물어보게됩니다.

아래 사진 보셔요. Y 눌러주면 LED 쇼로 직행~ㅋ




제가 이런저런 게임들 테스트 해보니, 대부분의 경우 메인 BIOS의 루틴을 쓰고있더라구요.

이런 경우는 PSG 비주얼라이저가 동작하니까 신나게 겜을 할 수 있습니다

그 외 몇몇 BIOS 경유하지 않는 게임은 PSG를 직접 컨트롤하기 때문에, 비주얼라이저가 움직이지 않습니다.

워로이드 같은 ASCII에서 발매한 게임인데도 BIOS를 안쓰는 경우가 있었습니다요. 참고하시구요.


MSX에서 BIOS를 통한 S/W 호환성을 외치긴 했지만,

사실 게임에서 속도저하를 막으려면 VDP, PSG, PPI 등을 직접 컨트롤 하는 방법밖에는 없죠. ㅎ.ㅎ;


마지막으로 실제 동작하는 모습을 영상으로 담았습니다.

게임 이것저것 실행하다보니 13분짜리 긴 영상이 되었네요. 그럼, 즐감하셔요! ㅎ.ㅎ




2016년 11월 22일 화요일

MPX R2.0 사용기

[서론]


MPX R2.0 카트리지를 구동해보았습니다.

MPX R2.0은 준소프트님께서 2016년 올해 출시하신 기기되겠습니다.


잠시 역사를 되짚어보면...ㅋ


2007년 MPX R1.0 (VS1003 디코더)

2010년 MPX R1.1 (VS1033 디코더)

2013년 박ㄹ혜 취임(?)

2016년 MPX R2.0 (VS1053 디코더)


3년에 한번씩 버전업이 된걸로 보입니다. (중간에 요상한게...)

내년이면 MPX R1.0 출시 10주년이군요! ㅎ.ㅎb


MPX R2.0의 기능은 준소프님의 매뉴얼을 참고하시구요.

이번에는 몇가지의 음악파일 재생을 테스트해보기로 하겠습니다.



[본론]


그럼 본격적으로 구동을 해보아야겠지요?

아래는 저의 확장슬롯에 꽂힌 MPX의 모습입니다.



슬롯2-0: MMC/SD Drive V3

슬롯2-1: 한글 FontPack

슬롯2-2: MPX R2.0

슬롯2-3: MPX R1.1

슬롯 IO: RS-232C

슬롯 IO: MoonSound


MPX 카트리지 두개가 보이네요~ ㅎ.ㅎ


부팅하면 아래처럼 MIOS 메시지가 나타납니다.




구버전 MPX에도 BIOS를 위한 플래쉬롬이 탑재되어있었지만,

MPX R2.0부터 정식으로 MIOS(MPX BIOS)가 탑재됩니다.

아직은 MIOS에 어떤 기능들이 들어가게 될지는 미지수이지만,

 준소프트님께서 멋진 기능을 넣어주실거라 믿습니다~ ㅎ.ㅎ



mpxtool r1.2b 버전부터, MP3 재생 시 ID3 정보가 표시됩니다.

한글/한자 표시를 위해, 폰트팩의 ANSI 스크린을 함께 사용했습니다.

아래는 FontPack ANSI1 모드를 켠 모습입니다.





가장 기본 기능이라 할 수 있는 MP3 재생 테스트입니다.




ID3v1 정보가 제대로 표시되는 것을 볼 수 있습니다.

제가 주로 M에 내장된 MPXP를 쓰다보니, MP3 파일들이 대부분 ID3v1을 쓰고 있네요.

참고로 MPXP는 ID3v2를 지원안합니다.ㅋㅋ


잘 돌아가니까 슈슝~ 패스!



이번엔 MP1, MP2 테스트입니다.

참고로 음악 파일로 주로 쓰이는 MPEG1 Audio는 Layer1, 2, 3 이렇게 세 종류가 있어요.





음... 둘 다 재생안되고 파일이 넘어가네요.

아래는 VS1053 매뉴얼에 나오는 내용입니다.

Layer1, Layer2는 기본 Disable 상태라서, SCI_MODE 레지스터로 켜야한다고 나옵니다.

MPX R1.1의 VS1033 칩도 그랬어요. 제가 MPXP 만들면서 테스트를 해봐서리~ㅋ





그럼 WMA도 돌려볼까요? 참고로 WMA는 MPX R1.1에서도 지원이 됩니다.




소리 잘 나오네요~ ㅎ.ㅎ



다음은 AAC 파일입니다. MPX R1.1부터 들을 수 있었지요.

문제는 디코더가 특정구조의 AAC 파일만 재생이 된다는건데...

일단 기본 R1.1에서 돌아가던 파일을 R2.0으로 재생해보았습니다.


음... 잘 되네요.

혹시나 해서 R1.1에서 안되던 파일들 재생해봤지만, 역시나 안됩니다. ㅎ.ㅎ;

저는 뭐 AAC는 안들어도 상관없어요 ㅋㅋ




이번 MPX R2.0에서는 OGG와 FLAC 파일이 지원됩니다.

구버전 MPX R1.1에서는 안되던 기능이었지요.


그럼, OGG 돌려볼까요?

bitrate는 430kbps인 파일입니다. OGG max bitrate는 500kbps까지 가능한걸로 알고 있어요.



소리 잘 나오네요. 이제 OGG를 MP3로 변환할 필요가 없어졌네요~ 유후~ ㅎ.ㅎb



이제 대망의 FLAC 파일 재생입니다~ ㅎ.ㅎ/

bitrate는 615kbps입니다.

bitrate 높은 파일로 테스트하려니 파일 복사의 압박으로~ㅋ 그냥 이걸로 합니다요!



재생하니 unknown audio file 에러 뜨면서 재생이 되지 않네요.

이 때는 /f 옵션으로 강제 재생으로 슈슈슉...

참고로, /f옵션을 쓰면 mpxtool에서 파서를 거치지않고, 그냥 스트림을 전송하는걸로 생각됩니다.


/f 옵션 쓰면, 소리 잘 나오네요! ㅎ.ㅎ



[결론]


많은 파일을 테스트해본건 아니지만, 파일 재생은 잘 됩니다.

아직 구동 안해보신 분들은 한번 테스트해보셔요~ ㅎ.ㅎ


PS. 미디파일은 테스트 안해봤어요. 음질이... ㅎ.ㅎ;

그냥 사캔 쓰시는게 좋습니다.

2016년 11월 16일 수요일

FontPack 제작 #9 - 넌인터레이스 ANSI 스크린 추가

FontPack BIOS에는 ANSI 스크린이 구현되어있습니다.


FontPack 만들 때, 처음 생각했던 기능은 H/W 폰트 엔진 + 한글 IME 였는데...

점점 프로젝트가 산으로 가고있어요~ ㅎ.ㅎ


기존 ANSI 스크린은 VDP 그래픽 모드 5, 6으로 구현됩니다.

(BASIC SCREEN 6, 7과 동일합니다.)


그래픽 모드의 가로 해상도가 512 픽셀이라, 글자를 그리면 새로로 길쭉하게 나옵니다.

하지만, 인터레이스 모드를 켜면 세로 해상도를 두배로 높일 수 있어서, 글자가 이쁘게 그릴수 있습니다.


인터레이스 디스플레이라는게 우리에겐 참 익숙한 화면인데요.

TV 화면이 그렇고, IQ-2000의 SCREEN 9 화면에서도 볼수 있었구요.

디스플레이 개발자라면, VGA의 1024x768 인터레이스 모드도 써보셨겠구요~


근데, 요즘 TV 보면서 "아... 화면이 너무 떨리네!" 이렇게 느끼시는 분 없으시지요?

디인터레이서 기술이 보편화된지 십여년이 지났습니다.

모션 보정 기능도 상향 평준화되서 왠만한 저가 기기 아니면 화면이 잘 나옵니다.


하.지.만.

레트로 느낌을 위해서 구형 CRT 디스플레이를 쓰시는 분들도 많이 있습니다.

우리 천국동도 마찬가지구요~ ㅎ.ㅎ


잡설이 길었네요.

암튼 디인터레이서 없는 CRT 모니터에서는, 인터레이스 화면의 떨림이 눈에 상당히 거슬립니다.

그래서, 세로 해상도를 절반으로 낮춘 넌인터레이스 화면으로 ANSI 스크린을 추가했습니다


아래 사진을 보시지요. ANSI3 모드로 설정된 화면입니다.





참고로, 아래는 현재 지원되는 전체 ANSI 모드에 관한 설명입니다.




ANSI1,2 모드와는 달리 12x12 폰트를 사용합니다.

원래 MSX 표준 텍스트 모드는 세로 글자 24개 사용됩니다.

ANSI3,4 모드는 세로로 글자 17개를 쓸 수 있습니다. 원래 화면의 70%정도 되는 셈이지요.

글자가 세로로 길쭉하니까, MSX가 아닌 것처럼 보이네요~ㅋ


VDP VSync 출력을 50Hz로 바꾸면, 출력 해상도가 240p(또는 480i)에서 288p(또는 576i)로 바뀝니다.

출력 해상도 바뀌어도 실제 그래픽 화면의 도트수는 변하지 않습니다.

결국 수평 라인수만 늘어난 셈이라 글씨 높이가 줄어드는 현상만 생기게 되지요.

근데 요렇게 하니까, 글자가 적당히 이쁘게 보이네요. ㅎ.ㅎ

아래 사진 보셔요~ 참고로 VDP 설정 바꾸려면, BASIC에서 CALL 50HZ 치면 됩니다.


 



CRT 모니터 쓰시는 분들께 활용이 잘 되었으면 하는 바램입니다요~

마지막으로 동작 영상 짧게 하나 찍어봤습니다.





즐거운 하루 되셔요!