한글 처리시 다루는 데이터
초, 중, 종성 19 + 21 + 27 자로 이루어지는 한글의 8*4*4 벌의 한글 폰트에서 폰트의 개수는 344 개이며 16*16 비트맵이므로 전체 한글 폰트 테이블의 크기는 11,008 Byte 가 된다.
LCD 에서 문자를 표시할 경우 한글만 쓰는 경우는 드무니 여기에 ASCII 코드 앞 부분 128 자 (한글 코드 첫째 비트가 1 이므로 ASCII 코드 뒷부분은 필요치 않게 된다.) 에 대한 폰트(8*16 비트맵 총 4096Byte)를 더해 폰트의 데이터만 13056 Byte 가 된다.
여기서 한글을 다룰 때 좀더 고려해 봐야 할 것이 타겟 보드에 대한 코딩이나 자신의 보드가 다른 기기와 통신시 우리가 주로 사용하거나 접하는(주로 PC 에서 다뤄지는) 한글 코드는 LCD 에 표시하려는 폰트를 지정하는 코드(조합형)와는 다르게 완성형이라는 데에 있다.
자신의 보드에서 표현하려는 한글이 몇 글자 안 된다면 한글폰트와 한글표시 루틴이 필요 없이 글자 이미지 자체를 표시해 주면 되지만 한글표시를 구현하려는 이유가 대부분 상태와 환경에 따라 여러 가지로 정의된 문자열을 동적으로 변화하는 글자를 표시하기 위해 필요한 것이므로 이런 이유들로 인해 완성형->조합형의 코드 변환루틴을 지원해야할 필요가 있다.
완성형 코드 자체가 일정한 규칙이 없이 부여된 코드이기 때문에 둘 사이를 대응 시키는 공식 같은 건 없으며 완성형을 조합형으로의 코드변환은 완성형 2350 자에 대해 조합형 순서로 열거한 테이블을 참조하여야 한다.
2Byte 코드에 대한 2350 자의 테이블의 크기는 4,700Byte (2350 X 2Byte) 이며 지금까지 설명한 것들이 한글 폰트 표시를 위해 필요한 데이터들이며 그 크기들이다.
조합형 한글 폰트 11,008Byte + ASCII 폰트 2048 Byte + 완성형->조합형 테이블 4700 Byte = 총 17,756 Byte 를 코드메모리나 ROM 에 배분해서 넣어야 한다.
이를 위해 선정한 ROM 은 시리얼 EEPROM 인 AT24C128 (16KByte) 이며 위 열거한 데이터 모두를 넣기에는 약간 부족하다.
이들 데이터를 배치하는 방안은 두 가지인데 첫째는 한글폰트와 완성->조합테이블을 24C128 에 넣고 상대적으로 크기가 작은 ASCII 폰트를 프로그램메모리나 다른 여분의 데이터 메모리(만약에 자신의 보드에 있다면) 에 배치하거나 두 번째 방법은 폰트 두 가지를 모두 24C128 에 넣고 코드변환용 테이블은 프로그램메모리에 배치하면 된다.
전자는 원 칩의 경우 코드 메모리가 적을 때를 위한 경우이며 후자는 폰트관리(폰트 타입 교체 시 24C128 만 교체해 주면 한글과 영문 폰트 모두 간편히 바꿀 수 있다.) 의 일관성을 위한 것이다.
또 다른 방법은 몇 백 원 더 투자해 24C256 (32KB) 을 사용하는 것이다. 위 열거한 데이터를 모두 저장하고도 남는 공간에 LCD 에 표시할 이미지나 다른 나라 언어의 폰트 (이를 표시하려 한다면) 도 넣을 수 있다.
이 문서의 예는 프로그램 메모리 16KByte 의 ATMega163을 사용하였으므로 코드변환 테이블은 프로그램 코드에서 갖고 있고 한글과 ASCII 폰트는 24C128 에 저장시켰다. (이 경우 24C128 내의 여분이 있기에 ASCII 폰트 256 자 모두를 저장시켰다.)
Leave a Reply
댓글을 달기 위해서는 로그인해야합니다.