2017년 4월 22일 토요일

paraMSX-R 제작 #9 - 폰트롬 I/O 구현

대부분의 MSX2 이상의 본체에는 16x16 사이즈의 폰트롬이 내장되어있습니다.

일제 기종은 JIS1 128KB 일어/한자 폰트가 들어있구요. (FS-A1 등의 저가 모델은 없어요 ㅎ.ㅎ)

2+, turboR 기종에는 JIS2 128KB가 추가되어있습니다. 합하면 256KB 사이즈가 되겠네요.

12x12 또는 24x24 폰트도 함께 들어있는 경우도 있다고 합니다. (안써봐서 자세히는 모릅니다요~)


국내 기종은 유일하게 X-II 시리즈(CPC-400/400S)에 256KB의 한글/한자 폰트가 들어있습니다.


만약 본체에 폰트롬이 없는 경우는 한자롬 카트리지를 꽂으면, Kanji 드라이버, 폰트 등을 쓸 수 있는걸로 알고 있어요.

제가 만든 FontPack을 쓰면 1.5MB 사이즈의 대용량 폰트를 쓸 수도 있구요. ㅎ.ㅎㅋ


그러면 여기서 한가지 의문이 생깁니다.

이런 폰트롬이 내장되어 있으면 이걸 제거하거나 다른 폰트롬으로 교체하려면 어떻게 해야되나요?


롬을 뽑아서 교체? 사실 그냥 롬만 바꾸는건 의미가 없습니다.

각각의 폰트 처리용 H/W가 조금씩 다르거든요.

물론 내장된 폰트의 모양만 바꾼다면, 롬만 새로 구워서 교체해도 되긴합니다.


이 문제는 폰트롬뿐만 아니라, 수퍼임포즈, RS-232C 등의 기기가 내장되는 경우에도 발생하는데요.

사실은...ㅋ

MSX가 내장 기기를 H/W OFF하고, 외장 기기가 구동될 수 있도록 만들어져있습니다.


바로 포트 F5H에 들어간 System control 레지스터입니다.


http://map.grauw.nl/resources/msx_io_ports.php#systemcontrol





MSX의 메인 BIOS가 부팅 할때 이런식으로 진행이 됩니다.

1. 내장 기기를 모두 OFF

2. 외장 기기가 존재하는지 체크

3. 외장 기기가 없으면, 내장 기기를 ON


간단하죠? ㅎ.ㅎ


오~~ 그럼 paraMSX-R에서 폰트롬 구현할 때, F5H 포트로 내장 폰트 꺼버리면 OK 겠군~ 유후~~


.

.

.

.

아름답게 해피엔딩이 될 것 같았지만, 실제 구현해보니 눈물만...ㅜ.ㅜ



암튼 본론으로 들어갑니다!!


System control 포트(F5H)로 내장 기기를 끌 수 있는지, 먼저 확인을 해야겠죠?


1. 제가 주력으로 쓰는 A1GT -> JIS1/2 끄니까 한자안나오네요. 잘 동작합니다.


2. A1WSX -> JIS1/2 역시나 잘 되네요. 아마 MSX2+ 이후 기종들은 정상 지원되지 않을까 싶으네요.


3. OCM -> 안됩니다. VHDL 소스를 대충 뒤져봐도 구현 자체가 안된 것 같네요.


4. X-II 실제 테스트는 못해봤지만, 매뉴얼 상으로 봤을 때는 안될 확률이 높은 것 같네요.




X-II 매뉴얼에 보면 F5H 포트는 언급이 안되어있네요. 그냥 예약된 포트라고만 되어있습니다.

수퍼임포즈의 F7H 포트는 자세하게 설명이 된걸로 봤을 때, 아마 F5H는 안넣었을 확률이 높아요.

작동되는(?) X-II 가지신 분 있으시면 한번 테스트해보셔요.


BASIC에서 OUT &HF5,&HFC 입력하면 폰트롬 I/O가 OFF됩니다.

이 상태에서 SCREEN 9:WIDTH 64 하셔서 명조체 한글이 나오는지 보시면 되겠습니다.

만약 X-II에서 F5H 포트 컨트롤이 된다면, Kanji롬 카트리지를 꽂으면 내장한글을 죽일 수 있을겁니다요. ㅎ.ㅎ


참... blueMSX 등의 에뮬에서는 F5H 지원이 안되니 테스트해보지 마셔요.

에뮬에서는 부팅하면 Kanji 롬 등의 H/W는 내장이 아닌, 외장 기기로 인식됩니다.

그래도 동작에는 문제없으니까, 일반 사용의 경우는 별 차이없다고 보면 됩니다.



으흠... OCM이랑 X-II를 포기하는게 좋을지 잠시 고민하면서~~ㅋ

일단 paraMSX-R에서 폰트롬 I/O를 넣고 제 A1GT에서 테스트해보기로 합니다.


CPLD는 제대로 구현한 것 같은데, 이거 뭔가 동작이 안되네요. -_-

한참을 삽질하다가 혹시나해서 A1WSX에 꽂아봤더니, 그냥 돌아갑니다. 어허허허~~~


내 GT가 보드 불량이려나...

JIS1/2 폰트를 끄는건 되는데, 외장 폰트 데이터가 전혀 읽히지 않습니다.

포트 값들이 죄다 FFH로 들어오네요.


설마설마... 하는 마음으로 회로도를 봤더니 -_-;;;;;;;;;

A1GT에 뭔가가 들어있습니다. 웃기는게 A1ST에는 없구요. 아마 ST에서는 정상 동작할걸로 예상됩니다.

그게 뭐냐면 폰트롬 I/O로 쓰이는 DxH 포트가 회로적으로 막혀있네요~ 으잉!!


아래 사진을 보시죠.

외부 슬롯의 /IORQ 출력 조건에 DxH 포트는 제외가 되어있습니다.

ST는 이 회로가 없는데요. 아마 회로 버그가 GT에서 임시로 막아놓은게 아닐까 싶습니다.

외부 폰트롬 충돌 문제이거나 뭐 그렇겠죠.




파나소닉 이놈들 ㅜ.ㅜ 잊지않겠다! (까지는 아니고, GT 만들어주셔서 감사~ ㅎ)

GT에서는 폰트쪽을 업그레이드 기기로 쓸 수가 없네요.

GT가 안되면 말짱 꽝~ ㅋ


어차피 OCM, X-II도 안되는데 걍 다른 방법으로 구현하기로 합니다.


paraMSX-R의 사실상 주 기능은, Z80 명령어를 가로채서 바꾸는 기능인데요.

이게 구현이 되어서, PPI, 메모리매퍼 등의 포트를 다르게 구동하고 있죠.


JIS1/2, 한글/한자 폰트롬은 포트 D8H,D9H,DAH,DBH 4개 포트를 사용합니다.

이걸 paraMSX-R의 다른 포트로 구현해서 바꿔치기하면 동작이 되겠죠?


플래쉬롬 여유가 많기 때문에,

JIS1/2 폰트 3종류랑 X-II의 한글/한자 폰트 다 넣었습니다.

256KB x 4셋 다 넣어도 1024KB 밖에 안됩니다요. ㅎ.ㅎ

JIS1/2는 메이저 제작사인 파나소닉,소니,산요 정도로 넣으면 좋구요.


그럼, 동작하는 모습을 한번 볼까요?


Kanji는 이제 지겨울테니, X-II 한글/한자를 띄워봅니다.

테스트 프로그램을 만든건 아니구요. 그냥 대우 데모 디스크를 실행해봤습니다. ㅎ.ㅎ

명조체 한글과 한자가 잘 보이시죠?





삽질을 꽤 했지만, 의지의 한국인! 결국 다 때려넣었습니다. 해피엔딩~ㅎ


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

대우 데모 프로그램은 GT의 내장 FDD에서 실행됩니다. 참고하셔요.





그럼, 즐거운 주말되세요~ ㅎ.ㅎ


2017년 4월 16일 일요일

paraMSX-R 제작 #8 - 디럭스박스 4메가로 달려~달려~

재미나 디럭스박스(DeluxeBox) 아시죠?

램을 넣어서 만든 메가롬팩인데요.

FDD 또는 카세트로 롬 이미지를 로딩해서 구동하는 방식입니다.


paraMSX-R에는 4메가 버전의 디럭스박스를 에뮬레이션합니다.

4메가니까 128 x 4 = 512KBytes 용량이 되겠습니다.


참고로 paraMSX-R에는 2048KB의 SRAM이 들어있습니다.

그 중 1024KB는 메인 메모리 매퍼로 쓰이구요,

나머지 용량 중 512KB를 디럭스박스로 사용합니다.


오리지널 디럭스박스와 H/W 동작이 같도록 만들었습니다.

그러니까 80년대 재미나에서 발매했던 로더 프로그램을 그대로 사용가능합니다.


아래는 CPC-400 머신 세팅으로 버블보블을 로딩하는 모습입니다.






사용 편의를 위해서 PARAMSXR.COM 실행할 때,

슬롯1이 비어있으면 디폴트로 디럭스박스를 세팅하도록 했습니다.


아래는 에뮬을 종료한 상태의 레지스터 및 기본슬롯 상태를 보여주는데요.

페이지0 = 슬롯0-0 (메인 BIOS)

페이지1 = 슬롯1 (디럭스박스)

페이지2 = 슬롯1 (디럭스박스)

페이지3 = 슬롯0-2 (메인 램)

으로 동작하고 있네요. ㅎ.ㅎ



마지막으로 제 GT에서 구동하는 영상을 올려봅니다.

1. X-II + 디럭스박스 + FDD에서 재미나 램카드 테스트 프로그램 구동 (RAMTEST)

2. X-II + 디럭스박스 + FDD에서 버블보블 실행

3. IQ-2000 + 디럭스박스 + FDD에서 불새 실행





그럼, 다음편에서 또 만나겠습니다요~ ㅎ.ㅎㅋ


2017년 4월 15일 토요일

paraMSX-R 제작 #7 - FMPAC, DOS2, FDD 지원

- FMPAC/PAC BIOS가 추가되었습니다.

SRAM 세이브 등의 기본 기능을 위한 것이라고 보면 되겠네요.


아래는 IQ-1000 + FMPAC 모드로 구동한 모습입니다.

키티야님의 한글판 롬으로 실행해봤어요.




- 이제 paraMSX-R 에뮬 구동 중 종료하고 DOS2로 돌아올 수 있습니다.

카트리지 상단에 버튼 스위치가 추가되었습니다.

원래 슬라이드 스위치를 달았는데, 푸쉬 버튼으로 바꿨어요. ㅎ.ㅎ

써보니까 버튼이 편하네요.


스위치를 누르게 되면, 소프트 인터럽트를 발생시켜 종료할 수 있게됩니다.

프로그램 종료 시, CPU 레지스터랑 슬롯 값 한번 찍어봤어요.

혹시 디버깅 할때 도움이 될까 모르겠습니다. 흐...




- DOS2 지원이 추가되었습니다.

ASCII DOS2 v2.20 카트리지의 롬을 사용합니다.

KANJI 드라이버는 제거했습니다. 대우 MSX2에서 문제없도록이요~ㅋ



- FDD 지원이 추가되었습니다.

이부분이 paraMSX-R의 중요한 부분 중 하나인데요.

아마 이전 글에서 조금 언급이 되었을거에요.

본체의 FDD 또는 디스크 이미지 파일을 에뮬 드라이브로 연결(마운트)하는 방식입니다.

에뮬 상에서는 A: 드라이브로 인식되어 부팅가능합니다.


이제 좀 진짜 에뮬레이터...스럽네요.ㅋ

X-II + FMPAC + 재미나 디럭스카드 + FDD 세팅으로, 처절했던 19세기 환경을 재현할 날이 곧 오게되겠습니다요~ ㅎ.ㅎ



마지막으로, 저의 A1GT에서 동작하는 모습을 영상으로 담았습니다.

영상은,

1. IQ-1000 + FMPAC

2. IQ-2000 + FDD (퀸플 구동)

3. A1WSX + DOS2 + FDD (DOS2 디스켓 부팅)

4. A1WSX + FDD (피드백 구동)

...순으로 진행됩니다. 참고하셔요.





그럼, 즐거운 주말 되시구요!