2017년 7월 16일 일요일

paraMSX-R 제작 #11 - 가상디스크 구현

paraMSX-R 에뮬모드 동작 중, 본체(호스트)에 장착된 디스크를 사용하려면 어떻게 해야할까요?



[ 1차: 외부 기기 그대로 구동 ]


이건 paraMSX-R을 처음 구상하던 때에 생각했던 방법입니다. (벌써 1년반이 흘렀네요.ㅋ)

각 연결은 하드웨어적(슬롯 커넥터)으로 연결된 상태입니다.


@ paraMSX-R이 없을 때

본체 -> 확장슬롯 -> 디스크 드라이브


@ paraMSX-R을 연결 후

본체 -> paraMSX-R (bypass 모드) -> 확장슬롯 -> 디스크 드라이브


@ paraMSX-R을 연결 후, 에뮬모드로 동작 시

본체 -> paraMSX-R (기본슬롯 에뮬 모드) -> 확장슬롯 -> 디스크 드라이브


이렇게 됩니다.



에뮬모드에서 CPU 재기동 시, paraMSX-R의 슬롯에서는 /RESET 신호가 재생성됩니다.

결국 확장슬롯에 장착된 기기들은 본체가 리셋되는 것 처럼 인식되는거죠.


H/W로 연결이 되는 방식이라, 어떻게 보면 가장 간단한(?) 구조인데요. ㅎ.ㅎ

제 경우는 MMC/SD V3, FontPack, MPX, 232-C, 문사운드 등등 죄다 확장슬롯에 연결되어있습니다.

에뮬모드에서도 이런 기기들을 그대로 구동할 수 있으니, 아주 편할거라는 생각이었죠.



근데 실제로 만들어서 테스트해보니, 몇가지 문제에 직면하게 되었는데요.


- Z80 명령어 remap 기능 동작 시, 타이밍이 너무 빡빡해서 에러가 자주 발생.

  확장슬롯 기기 종류(자작판, 파라동 20주년판, 8421님 제작 등)에 따라 불안정한 경우가 제각각


- 확장슬롯에 연결되지 못한 기기들은 구동할 수 있는 방법 없음 (본체 내장된 FDD 등)


이리저리 고민하다가 다른 방법을 생각하게 됩니다.



[ 2차: 외부기기 간접 구동 방식 ]


원래 생각했던 에뮬모드 구동 방식은,

본체 동작 상태에서 에뮬모드로 전환되면 MSX 환경이 완전히 바뀌게 되고 그상태로 유지되는 것이었습니다.


그러니까, 제 GT에서 X-II 에뮬모드로 구동이 되면, 전원 끄기전까지는 그냥 계속 X-II인거죠.

한번 구동하면 -끝- ㅎ


이걸 본체/에뮬을 멀티태스킹처럼 구현하면 호스트 자원을 활용할 수 있으니 뭔가 해답이 나오겠다싶었죠.

물론 CPU 하나뿐이라, 유니코어 멀티태스킹이랑 비슷하게 볼 수도 있겠습니다.


MSX는 Z80 주소를 모두 다 사용하기 때문에, 코드가 바뀌려면 결국 슬롯전체를 전환하는 방식으로 구현이 필요합니다.

Z80 RST 명령어도 상당히 유용하게 쓸 수 있습니다.

명령어 자체가 1바이트로 점프하는거라,

OP code fetch 시 DATA BUS를 한번만 속이면(data remap) 현재 CPU 주소와 상관없이, 원하는 곳으로 갈(?) 수 있습니다.

음... 그러니까 소프트 인터럽트와 슬롯전환이 동시에 일어나는 현상으로 생각하면 되려나요? ㅎ.ㅎ


에뮬모드 종료하는 것도 같은 방식으로 구현됩니다.

어차피 에뮬/호스트 전환되는 건 똑같으니까요...



암튼 구현 완료되어 이런식으로 동작합니다.


1. 본체 부팅

2. DOS에서 PARAMSX.COM 프로그램 구동

3. 특정 머신으로 에뮬 구동

4. 호스트 자원(디스크 등)이 필요할 때, 모드 전환

5. PARAMSX.COM 프로그램으로 복귀

6. 필요한 동작 후 에뮬 모드로 복귀



만약 에뮬 모드에서 디스크 액세스가 호출되면 아래처럼 동작하겠네요.

1. 디스크 읽기 호출 (DiskROM DISKIO 등)

2. 에뮬의 가상 디스크롬은 에뮬->호스트 모드 전환 후 DISKIO 커맨드 전달

3. 호스트(본체)에서 실제 연결된 DiskROM을 호출하여 DATA를 받음

4. paraMSX-R 디스크 버퍼로 전송 후 호스트->에뮬 모드로 전환

5. 에뮬의 가상 디스크롬은 paraMSX-R 디스크 버퍼에서 DATA를 읽어서 처리


아래 사진은 PARAMSX.COM의 디스크롬 설정부분입니다.

호스트(본체)의 디스크롬이 존재하는 슬롯과 에뮬의 가상 디스크롬을 연결해주는 모습입니다.

이때 드라이브 갯수는 동일하게 설정되니까, 에뮬모드에서도 실기를 쓰는 느낌과 똑같습니다.





긴 설명읽느라 수고많으셨습니다. 흐... 

그럼, 실제 동작 영상을 보시지요~

아래 순서로 나옵니다.

1. 대우 CPC-400, 가상디스크(MMC/SD V3) 연결

   X-II 컴퓨터 교실 실행 (X-II 명조체 한글)

2. 필립스 MSX2, 폰트팩 연결, 가상디스크(MMC/SD V3) 연결

   X-II 컴퓨터 교실 실행 (폰트팩 한글)

3. 대우 DPC-200, 가상디스크(FDD) 연결

   딜럭스박스 에뮬로 몽대륙 로딩/실행

4. 아라빅 MSX2, 가상디스크(OFF) 설정

   아라빅 워드프로세서 실행





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


2017년 6월 25일 일요일

paraMSX-R 제작 #10 - 텍스트 모드 용 UI 구현

사용자와 뭔가 주고받는(?) 프로그램을 만든다는게 상당히 귀찮은 작업이죠~ㅋ

처음에는 그냥 예전 MS-DOS 커맨드로 실행하던 fMSX 스타일로 만들까했는데요,

예전 윈도 용 paraMSX 에뮬과 비슷하게 만들면 괜찮지않을까...싶은 생각이 들었습니다.


알록달록 그래픽은 패쓰하고~ 텍스트 모드로 최대한 단순하게 만들어봤습니다.

무려~~~ 40컬럼 MSX1 기본 텍스트 모드입니다요~ ㅎ.ㅎ


paraMSX-R의 최소 구동환경이 MSX2 RAM 64KB라서, DOS1에서 실행가능한 프로그램으로 만들었습니다.

"그럼 디스크드라이브가 없는 본체에서는 못쓰나요?" 그러면 재미없겠죠? ㅎ.ㅎ

롬디스크 드라이브가 내장되어서, 외부 디스크가 없어도 구동할 수 있도록 제작되겠습니다요~

요건 다음 편에 소개해드리겠습니다.


일단 PARAMSX.COM을 띄워본 모습을 한번 보시죠!





으흠... 뭔가 MMC/SD Drive V2의 DISKMAN.COM이랑 비슷한 모양이죠? ㅎ.ㅎㅋ

펑션키를 눌러서 탭 전환을 하구요.

커서키 상/하 눌러서 항목 이동, 커서키 좌/우 눌러서 옵션을 바꿀 수 있습니다.

펑션키 F5를 누르면 바로 에뮬이 구동됩니다.

에뮬 동작 중에는 카트리지 상단의 버튼을 눌러주면, PARAMSX.COM 프로그램으로 복귀가능합니다.


그럼, 영상을 감상하시지요~~ ㅎ.ㅎ

여러가지 머신 선택, 슬롯 정보, 부팅 모습, MSXMEM.BAS 데모 등의 동작 모습을 볼 수 있겠습니다.





이제 S/W, H/W 기본틀은 완성이네요! ㅎ.ㅎ/

참, 보드는 모양이 조금 바꼈습니다. 아래처럼 나왔어요~ (v1.0 보드는 휴지통으로~ㅋ)




그럼, 다음 편에서 뵙겠습니다~


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 )


그럼, 이만~