2015년 7월 27일 월요일

FontPack 제작 #5 - 한글 IME

폰트팩 BIOS 롬에 한글 입력기(IME)를 넣어보았습니다.


일단 아래처럼 구현해보았어요.


- 키배열: 두벌식 한글

- 문자입력: 영문, 한글, 한자

- 영문/한글 입력모드 전환: KANA 키

- 한글/일어 입력모드 전환: 한글 모드 상태에서 CTRL + SELECT 키

- 한자 입력: 한글 한글자 입력 후, GRAPH + SELECT 키 (동음 한자 순환)


문자 조합/삭제 방식은 윈도의 한글 IME와 유사하도록 되어있습니다.

아무래도 익숙한 방식으로 만드는게 편하겠죠?


한자 입력은 GRAPH + SELECT 키 누를 때마다, 해당 음의 한자들을 한글자씩 바꿔줍니다.

동음 한자 리스트가 끝나면, 원래 한글 문자로 돌아오구요. (계속 누르면 반복됩니다.)


본체 BIOS의 일어(KANA) 입력은, CTRL + SELECT 키를 누르면 즉시 전환됩니다.

전환 할 때, BEEP 소리 나도록 해놨으니 놀라지 마시구요~


물론 일어 코드와 한글(CP949) 코드 영역이 분리되지 않아서,

응용 프로그램에서 문자 출력 시, 한글/일어 선택할 수 있는 방법이 있거나...

하나의 코드로 고정해야됩니다.

(혹시 MSX3 만드시는 분 계시면, BIOS 문자 처리는 유니코드로 해주셔요. ㅎ.ㅎㅋ)


부팅 시, 스크린샷 하나 찍어보았습니다.



아래는 실제 동작영상입니다. 어떤식으로 돌아가는지 대충 파악이 되실꺼에요~ ㅎ





PS. 현재 업뎃된 M 프로그램에서는 2바이트 문자를 인식하도록 개선되어있습니다.

     커서키, BS, DEL 등의 키입력이 제대로 된다는 말씀이죵.


PS2. 조만간 코드 정리되면, 폰트팩 관련 유틸들의 업뎃이 있을 예정입니다.



2015년 6월 25일 목요일

FontPack 제작 #4 - 최종 스펙 정리

플래쉬롬의 빈 공간, SRAM, 코드 변환 등, 일주일정도 고민을 해봤는데요...

아래처럼 정리되었습니다. ㅋ


1. 코드 변환 테이블 5개 할당

  - 유니코드 -> CP949

  - 조합코드 -> CP949

  - CP949 -> 유니코드

  - CP949 -> 조합코드

  - CP949 한자 -> 한글독음


2. SRAM 영역 코드로 사용

  - 아스키16 매퍼 1메가롬팩 처럼 구동

  - 도스에서 다운로드 및 실행 


3. 유저 롬(128KB) 추가

 - 플래쉬롬에 유저 영역 128KB 할당.

 - 부팅 시 기본 BIOS 또는 유저 롬 선택 가능.

 - 유저 롬 선택 시, SRAM으로 롬코드 복사되어 실행


4. ASCII 폰트 셋 1개

 - 여러개 넣어봤자 크게 효용이 없을 듯....은 핑계구요.

   CPLD 용량이 꽉차서 -_- 폰트 셋 1개만 사용합니다.

   (8x16 한벌, 6x12 한벌)


그.래.서. 최종 레지스터 맵 나갑니다~ 빠빠빠~~




코드 변환 설정 용, BIT 영역이 좀 늘었구요.

SRAM을 메인 메모리 뱅크로 설정하는 기능이 들어갔습니다.

ASCII 16K 롬을 패치 없이 SRAM으로 로딩/구동이 가능합니다.



아래는 최종 메모리 맵입니다.




처음에 언급했던 USER ROM 영역(128KB) 추가되어있습니다.

사용자 취향에 따라 확장 BIOS롬 또는 일반 아스키16 메가롬 이미지를 넣으면 되겠습니다요.

부팅 시, "F" 키를 누르면, BIOS롬 대신 USER 롬이 구동됩니다.

물론 폰트 IO는 똑같이 동작하겠구요.


BIOS롬은 어떤 기능이 들어가게 될지 아직 정해진건 없습니다.

한글 입력기라던가.... KANJI 드라이버의 디스플레이(인터레이스 모드 등)에 한글 조합이라던가...

정도로 고려중입니다. ㅎ.ㅎ



아래는 코드변환 샘플 프로그램을 실행항 모습입니다

BASIC 프로그램이에요.



Hanja to Hangul 변환은 그냥 한자 음독이라고 생각하시면 되겠습니다.


아래는 실제 프로그램 소스입니다.

IO 포트 핸들링 참고하시면 되겠습니다.




머리털 나고 처음으로 PCB 한번 그려보았습니다.

왜 그렸냐구요? PCB 찍으려구요. ㅋㅋ

Eagle 캐드이구요. 오버리치님 케이스에 맞는 사이즈로 되어있습니다.




보드 오른쪽 공간에 SD카드 자리도 하나 넣었어요.

다른 개발 테스트 용도로...으헙...ㅎ.ㅎㅋ



아래는 PCB 실물 사진입니다.

납땜 실력이 메롱이라, CPLD 붙이는게 힘드네요.



비아홀이 Eagle 캐드 기본설정인데, 사이즈가 너무 크네요. -_-




여기까지입니다~

즐거운 밤 되셔요~ ㅎ.ㅎ


2015년 6월 16일 화요일

FontPack 제작 #3 - 문자 출력 테스트

이번에는 폰트팩의 문자 출력 및 코드 변환을 해보았습니다.


아래는 폰트팩의 I/O 레지스터 맵입니다.

기본적인 입출력은 I/O 포트를 통해 동작하도록 만들어져있습니다.




첫번째 레지스터(50H)는 read 시, 이전에 write한 값이 들어오지만,

그 외 레지스터(51H, 52H, 53H)들은 read/write 각각 기능이 다르게 동작합니다.

52H, 53H 레지스터는 읽을 때마다, 값이 변하게 되어있습니다.

레지스터 내부적으로는 메모리의 32bytes 공간을 순차적으로 read하도록 동작합니다. (1BPP 기준)

만약 4BPP 모드라면, 128번 read 가능합니다.



아래는 16 x 16 사이즈 폰트로 내장된 데이터입니다.

90년대 널리 쓰였던 844 조합 폰트로 만들어져있습니다.




아래는 간단한 BASIC 프로그램으로 폰트 데이터를 표시해주는 모습입니다.

1BPP 모드로 설정되므로, 글자 한개당 32bytes를 읽습니다.


문자코드 B0A1 '가' 입니다.




CP949 확장 코드인 8142 '갃' 입니다.




아래는 사용되었던 BASIC 프로그램 소스입니다.

한글 뷰어 HV로 표시한 모습입니다. (12 x 12 폰트 모드 사용)




아래는 컬러 레지스터를 활용하여, 4BPP 모드로 출력해본 모습입니다. (스크린 7 사용)

문자색이 설정되면, 포트에서 읽은 데이터에 이미 색이 입혀져(?) 있습니다.

VRAM에 그대로 써주면 되도록 만들어져있습니다.




같은 방식으로 아스키 문자를 표시한 모습이구요.

참고로 아스키 문자는 4벌이 들어있습니다.

모드 레지스터 설정으로 선택이 가능합니다.




아래는 한글뷰어(HV)로 16 x 16 및 12 x 12 폰트를 테스트한 모습입니다.

하이텔 파라동 시절 완성형 코드로 된 갈무리 문서를 표시했습니다.


16 x 16 사이즈~




요건 12 x 12 사이즈

폰트가 굴림체라서, 윈도 메모장 처럼 보이죠? ㅋ




아래는 조합형 코드를 사용하는 ISS 문서를 표시한 모습입니다.

ISS 파일 아시죠? IMS 음악 가사 파일이요. ㅎ.ㅎ



 

12 x 12 폰트로 표시한 모습~




아래는 12 x 12 폰트로 사용된 굴림체 데이터입니다.

원본 FNT 파일은 16 x 16 사이즈로 되어있지만, 폰트롬으로 변환할때는 12 x 12 외의 공백은 삭제되어 들어갑니다.




그럼, 이번에는 폰트팩 SRAM를 이용한 문자 출력 테스트입니다.

MS 도스시절 쓰이던 폰트의 특수 문자 몇개를 긁어왔습니다.ㅋ (4Kbytes)




아래처럼 FONTPACK.COM으로 다운로드 가능하구요.




아래는 4BPP 모드로 설정해서 표시한 모습입니다.

참고로 2bytes 문자 코드가 0000H ~ 7FFFH 사이값이면, 폰트팩 SRAM 데이터가 출력이 되구요.

코드가 8000H ~ FFFFH 사이값이면, 플래쉬롬의 데이터가 출력됩니다.




마지막으로 코드 변환 테스트입니다.

CP949 코드와 조합형 코드 사이 변환이 가능한 것을 볼수 있습니다.