sharksym's MSX World

sharksym.egloos.com

포토로그


구글 애드센스 (블로그 기본)


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


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) 설정
   아라빅 워드프로세서 실행





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





CCL

크리에이티브 커먼즈 라이선스
Yeongman Seo에 의해 작성된 저작물은, 별도의 라이선스 조건이 없는 경우 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

MSX rating & email

ClusterMaps

구글 애드센스 (세로 큰직사각형)

통계 위젯 (화이트)

4333
238
123158

이 이글루를 링크한 사람 (화이트)

20