제가 주로 사용하는 MSX 본체가 일제 기기이다보니,
한글이라던가 특수문자 등 KSC5601 셋을 활용하려면 뭔가 다른 방법이 필요한데요.
이제까지 DOS2의 메모리를 활용해서 폰트를 램상주 시키고, 프로그램에서 import하는 식으로 사용했습니다.
아래 글 참고하셔요~
http://sharksym.egloos.com/5250995
http://sharksym.egloos.com/5250996
http://sharksym.egloos.com/5251004
램상주 폰트를 사용하면, 응용 프로그램에서 폰트 공유를 할수 있어 좋지만...
메모리를 많이 점유한다는 점과 부팅할때마다 램에 로딩하는 시간때문에 답답하더군요.
실사용 시, DOS2 세그먼트 액세스하는 것도 코딩에 부담이 좀 되구요.
물론 제가 쓰는 HI-TECH C 환경으로는, LIB로 구현해놔서 쉽게 쓸 수 있지만...
아마 다른분들은 힘들겠...죠? ㅋ
결론은 "HW 폰트 메모리를 만들자!"가 되겠습니다.
일단 시작하려면 이름부터 지어야겠지요? ㅋ
그래서... 이름이 "FontPack" -_- 한참 고민해봤는데, 딱히 떠오르는게 없네요 ㅎ.ㅎ
기본적인 요구사항을 대충 적어보면,
- KSC5601 완성형 한글/특수문자/한자 set (문자 코드 영역: A000H ~ FFFFH)
- 조합형 한글/특수문자/한자 set (문자 코드 영역: 8400H ~ FFFFH)
- ASCII 문자 set (문자 코드 영역: 00H ~ FFH)
- 폰트 사이즈: 16 x 16, 1BPP 타입 문자 한개당 32bytes 사용
- Z80 Port I/O 사용
정도가 되겠습니다.
그냥 이렇게 만들면, 기존 일제 MSX의 JIS KANJI롬 또는 X-II의 한글/한자롬의 디럭스 버전 정도가 되려나요?
그래서 기능을 좀 추가합니다.
- MSX 스크린5,6,7 에서 픽셀 데이터를 바이트 단위로 뿌릴수 있는 2BPP/4BPP data 변환 기능
IO port에서 읽은 data를 그대로 VRAM에 write하면 됩니다.
- 한글 확장 BIOS: 조합 to 완성, 완성 to 조합 코드 변환, 844 조합형 한글처리 등
- SRAM을 이용, 사용자 문자set 지원 (BIOS 또는 응용 프로그램 내에서 폰트 가속처리)
- 12 x 12 폰트 지원. MSX에서 80컬럼 쓰려면 12픽셀폭 폰트가 필수입니다.
HW는,
- ALTERA EPM3128 (CPLD)
- 2MBytes 플래쉬메모리, 32KB SRAM
로 구성합니다.
CPLD 한개에 구겨넣을 수 있을지가 문제네요. 음...
폰트 data는,
- 16 x 16 사이즈: 완성형 및 조합형 한글/특수문자/한자 set, ASCII set
- 12 x 12 사이즈: 완성형 한글/특수문자/한자 set, ASCII set
(조합형 코드는 용량문제로 포기ㅋ, 조합 to 한글 코드 변환으로 때워야...)
플래쉬 메모리는 16KB 매퍼가 필요하니, 별도 매퍼 만들기보다는...
그냥 ASCII 16KB 매퍼를 구현하도록 합니다.
(CPLD 용량 딸리면...바뀔지도 몰겠네요 ㅋ)
대충 스펙을 정했으니, 제작에 돌입합니다~~ ㅎ.ㅎ
만능기판을 한장 준비해서 CPLD를 붙입니다.
EPM3128 TQFP 타입이라 DIP 변환기판 썼습니다. (한장에 7000원짜리 변환기판 ㄷㄷㄷ)
JTAG 핀헤더도 붙여주고요.
뒷면입니다.
CPLD 그라운드 배선을 했네요.
심시티 도로 깔때처럼 이쁘게~ 이쁘게~ 고가다리도 하나 보이네요.ㅋ
정신줄 놓고 바느질 하다보면, 어느새 플래쉬롬이 나타납니다.
만능기판에 붙이려고 SOP 500mil 타입을 찾았습니다.
1MBytes라서 두개를 포개서 납땜해야됩니다.
아래처럼 다리를 위/아래/위위/아래/ 벌리면 기판에 착~ 달라붙어요~
바느질이 끝난 모습입니다.
SLTSL(슬롯 선택) 신호에 스위치 하나 달았구요. 동작 표시(또는 디버깅) 용으로 LED하나 붙였습니다.
보면 귀신나올 것 같지만, 이쁘게 하려면 시간이 많이 걸리는 작업이라 ㅡ.ㅡ
걍 대충 납땜합니다.
터보알에 꽂아본 모습이네요.
이...이런... JTAG 핀헤더가 슬롯에 묻히네요 ㅡ.ㅡ
대충 붙였더니 이런 참사가...ㅋ 슬롯에 꽂은 상태로 CPLD 다운로드는 불가능하겠습니다.
ASCII 16KB 매퍼는 간단한거니, 대충 VHDL 코드를 만들었어요.
FontPack 툴도 대충 만들어서~ 바로 테스트 들어갑니다.
뱅킹 필요없는 일반 16KB 롬(킹스밸리) 먼저 확인!
잘되네요~
1메가겜인 갈포스도 돌려봅니다.
ASCII 16KB 매퍼는 잘 동작하네요.
마지막으로 2메가바이트 전체용량을 채워봅니다.
음... 잘 되는군요.
근데 테스트해보니, Pointless Fighting 롬을 1메가바이트만 넣어도 실행은 되더라구요. ㅎ.ㅎ
참고만 하셔요.
이거 실기로 처음 돌려봤는데, 문사운드 효과음도 깨끗하고 좋습니다.
캐릭터 움직임도 오락실 스파2랑 비슷하구요. 나이스하네요.
오늘은 여기까지구요, 다음 편에는 폰트 처리가 이어집니다~
그럼, 즐거운 하루 되셔요...
댓글 없음:
댓글 쓰기