2017년 7월 20일 목요일

ARKANOID PAD (DIY Kit)

자낙님께서 제작하신 알카노이드 패드 DIY 킷을 받았습니다.

상세한 제작설명서 덕분에 금방 만들었어요. ㅎ.ㅎb





사진 몇장 올려봅니다.


홀 위치 맞추고 요리조리 재단하느라 고생하신 흔적이 보입니다요~





저는 운좋게도 MD 패드 선색깔이 설명서랑 동일하네요.

다다닥 납땜~ ㅎ.ㅎ





패드 뚜껑 덮기전에 마지막으로 한장~

케이블 고정은 이올로님 하신것과 동일한 방법으로 했습니다.

기존 케이블 고정부분은 니퍼로 자르니까 잘 떨어지더라구요.





알카노이드 I/II 둘 다 구동해봤습니다.

잘 되네요. 잘 쓸께요~ 자낙님!! 올 추석에도 복많이 받으세요.ㅋㅋ




마지막으로 영상도 하나 올려봅니다.





그럼, 즐거운 밤 되세요! ㅎ.ㅎ/


2017년 7월 17일 월요일

paraMSX-R 제작 #12 - 내장된 기기 리스트

이제 H/W, S/W 거의 다 완성된 단계에 접어들었네요.

paraMSX-R 카트리지 내부에 구현된 기기들의 목록을 정리해봤습니다.



# SLOT


  기본 슬롯 4개, 모두 확장슬롯으로 설정가능

  각슬롯 개별 설정가능하며, 일부 MSX1처럼 슬롯1개에 롬+램 조합 가능



# System Flag


  MSX2+의 I/O 포트(#F4) 구현. 소프트 리셋 체크 용입니다.

  Inverted, Non-inverted type 가능



# Kanji / 한글


  Kanji JIS1/JIS2 폰트 구현 (파나소닉, 소니, 산요, 아스키 폰트, 총 4개 1024KB 폰트)

  대우 X-II 방식 한글/한자 폰트 구현 (대우 및 둥근모꼴, 총 2개 512KB 폰트)



# 일반 램


  넌매퍼 타입의 일반 메모리 구성

  각 페이지별로 16KB 조합가능 (총 64KB)



# 메모리 매퍼 램


  본체 내장형 표준 메모리 매퍼 구성 (레지스터 readback 가능)

  4가지 용량 설정 가능 (64KB, 128KB, 256KB, 512KB)



# 가상 디스크롬


  DOS1, DOS2 커널 동시 탑재 (MMC/SD V2와 동일한 구조)

  호스트(본체)의 디스크롬 호출로 실제 H/W 디스크와 연동

  디스크 드라이버 루틴을 직접 호출하므로, 섹터 Read 방식 S/W 구동가능 (각종 2DD 게임)



# PAC 및 FMPAC


  PAC SRAM 8KB 세이브/로드 구현

  SRAM 데이터는 에뮬 실행/종료 시, 플래쉬롬으로 백업/복원함 (별도의 배터리 필요없음)

  호스트(본체 내장 또는 외부 슬롯)의 OPLL 칩 유무에 따라 PAC/FMPAC 모드로 자동설정

  사용자가 FMPAC BIOS 업데이트 가능 (한글판, 영문판 패치롬 등)



# MSX-Audio BIOS


  롬 64KB + 램 8KB 타입의 Audio BIOS 설정가능

  호스트(본체)에 MSX-Audio 호환 카트리지 존재 시, BIOS 동작함 (필립스 뮤직모듈 등)

  문사운드의 경우, MSX-Audio BIOS v1.3 사용 시 OPL3 모드(ADPCM 제외)로 구동가능



# 재미나 딜럭스박스


  딜럭스박스 4메가비트 버전 구현

  국산 MSX 머신설정과 조합하면, 오래된 국산 메가램 로더 실행가능 (슬롯 문제 안생김ㅋ)



# 한글 FontPack


  호스트(본체)에 FontPack 카트리지가 있으면 지원가능

  BIOS 설정은 paraMSX-R 내부 슬롯으로 구성되므로, 호스트의 카트리지와 충돌하지 않음



# 기타 카트리지


  BASIC'n Plus, MSX-AID, 야마하 Painter 내장



# 내장 DOS1 롬디스크


  FDD등의 디스크드라이브가 없는 본체에서 간편하게 구동하기 위한 기능

  256KB 용량의 롬디스크에 DOS1 부트파일 및 PARAMSX.COM 프로그램 내장

  BASIC에서 CALL PARAMSX 명령으로 롬디스크로 설정, 재부팅 후 PARAMSX.COM 자동실행됨



마지막으로,

참고로 paraMSX-R 카트리지에는 플래쉬롬 8MB, SRAM 2MB가 들어있습니다.

현재 플래쉬롬쪽에 2MB 여유가 있는데, 이건 사용자 용으로 남겨둘까합니다.

ASCII 8KB, 16KB 메가롬 타입으로 구현될 예정이니,

 멀티롬, 메가롬 게임 또는 롬디스크 형태로 변환된 디스크게임 구동용으로 활용가능합니다.



그리고, 메인 프로그램인 PARAMSX.COM은 DOS1에서도 실행이 가능합니다.

본체 램이 64KB 뿐인 기종에서도 활용가능하도록 만들기위함이었는데요.

물론 키보드 없는 재믹스 등에서는 BIOS나 롬 업데이트(다운로드)를 할 수는 없으니까...

일단 정상적인 MSX랑 FDD 정도는 있어야합니다.

FDD만으로도 플래쉬롬 업뎃가능하도록 BIOS 팩은 512KB 정도로 쪼개서 넣을 생각입니다. ㅎ.ㅎ


그럼 진짜 마지막으로 영상 하나만 올리고 갈께요 ㅋㅋ

앞서 얘기했던 롬디스크로 PARAMSX.COM 자동실행하는 모습입니다.

저가형 MSX2인 파나소닉 FS-A1에 paraMSX-R 카트리지 하나만 꽂아서 구동합니다.

IQ-2000 및 소니 HB-F1의 내장 프로그램 구동하는걸 볼수 있어요.





그럼, 즐거운 밤 되세요. ㅎ.ㅎ/


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) 설정

   아라빅 워드프로세서 실행





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