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에서 실행됩니다. 참고하셔요.





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


댓글 없음:

댓글 쓰기