이번에는 문자 인코딩 및 폰트팩에서 사용될 폰트롬에 관한 얘기입니다.
요즘은 유니코드가 기본으로 사용되지만,
80~90년대에는 KSSM으로 불리던 상용조합 코드와 KS완성형(KS C 5601) 코드가 주로 쓰였습니다.
80년대에 정부에서 완성형 한글 코드를 표준으로 채택했지만, 90년대초까지 조합형 한글도 많이 썼던걸로 기억합니다.
그러다가 윈95에서 MS가 완성형 한글을 확장한 CP949 인코딩(MS 949로도 불림)을 사용하게 되면서,
국내에서 오랫동안 CP949의 완성형 한글이 쓰이게 되었습니다.
한글 윈도는 파일명을 설정할 때, 메모장 등에서 텍스트 문서 저장할 때 아직도 CP949를 기본으로 씁니다.
결국, MSX에서 지원할 문자 인코딩을 선택한다면, 최소한 CP949는 있어야 쓸모가 있겠습니다.
얘기 나온김에 위키에서 긁어온 그림 몇장 첨부합니다.
아래는 EUC-KR 인코딩에서 쓰이는 코드입니다.
KS X 1001 문자셋이 예전 KS C 5601로 불리던 KS완성형 코드를 의미합니다.
(세로축이 High 8bit, 가로축이 Low 8bit로 되어있습니다.)
출처: 위키백과 |
KS X 1001은 특수문자 + 한글 + 한자 조합으로 되어있구요.
아시다시피 완성형 한글 2350자 밖에 없어서, "펲시콜라" "똠방각하" 이런걸 표시할 수가 없었지요.ㅋ
출처: 위키백과 |
아래는 CP949 인코딩입니다. KS X 1001에 빠진 한글을 대충 구겨넣은 모습이죠? ㅋ
출처: 위키백과 |
참고로, 아래는 조합형입니다.
15bit 문자 코드로 가능한 한글 조합이 모두 들어있어서, 코드 영역도 많이 차지하고 있습니다.
출처: 위키백과 |
아래는 폰트팩에서 고려한 사항들입니다.
1. CP949 인코딩 (완성형 한글)
2. 조합형 인코딩
3. 비트맵 폰트 16 x 16 사이즈
4. 비트맵 폰트 12 x 12 사이즈
5. 폰트롬 용량 2MBytes
만약 MSX에서 문자 표시를 하게 된다면, 12 x 12 크기의 폰트가 상당히 중요합니다.
고해상도 모드인 스크린 7을 쓰더라도, 80컬럼 표시를 하려면 12픽셀 폭의 문자가 있어야 되니까요.
일단 12 x 12 완성형 넣고 보니, 조합형 폰트랑 16 x 16 크기의 폰트를 모두 넣기에는 롬이 너무 많이 필요하더군요.
롬을 2MB 사이즈로 끊기 위해 ㅋ
조합형 폰트는 포기하고, 대신 CP949/조합코드 변환 테이블을 넣기로 했습니다.
최종 결정된 폰트롬 구조는 아래와 같습니다.
총 2MB 플래쉬롬 + 128KB SRAM으로 구성됩니다.
문자 코드 하나 당 32byte를 차지합니다.
32bytes면 비트맵 16 x 16 폰트 글자 한개 사이즈입니다.
ASCII 영문 문자의 경우는 가로폭 절반으로 구성됩니다.
CP949 코드는 롬 주소와 1:1로 매핑되도록 되어있습니다.
ASCII 코드는 비어있는 영역에 배치하였구요.
코드 변환은 128KB 테이블 4개로 구성됩니다.
ASCII 코드 및 CP949/조합 코드 변환은 CPLD가 해주게 됩니다.
유니코드 변환은 CPLD 용량 부족으로 약간의 SW 도움이 필요합니다.ㅋ
SRAM 128KB 영역은 16 x 16 크기 문자 4096개를 넣을 수 있습니다.
사용자 프로그램이나, 기타 OS 등에서 폰트 가속이 필요할 때 활용할 수 있겠습니다.
BIOS에서 데이터 메모리로도 사용도 가능합니다.
SW 구현 시, 메모리가 많이 필요하게 된다면 유용하게 쓰일 수 있겠네요.
참고로 메모리 맵 I/O 상으로는 플래쉬롬 및 SRAM은 일반 롬팩처럼 동작합니다. (램이 내장된 롬팩으로 보면 되겠네요.)
마지막으로, 현재 제작된 폰트팩 proto-type 모습입니다.
SRAM은 32KB짜리가 달려 있습니다. 나중에 보드 뜨면, 128KB로 대체되겠습니다.
SRAM은 뒷면에 부착~ ㅋ
1MB 플래쉬롬 두개가 겹쳐있습니다.
오늘은 여기까지구요.
다음편엔 폰트팩의 I/O 동작에 관한 내용이 이어집니다. 기대해주셔요~ ㅋ
PS. 예고편으로 사진한장 투척합니다. ㅎ.ㅎ
한글 뷰어인 HV 프로그램을 실행한 모습입니다.
윈도 굴림체 9포인트(12 x 12) 폰트 기반으로 만들어진 폰트롬이 사용되었습니다.