2021년 10월 22일 금요일

FontPack 제작 #13 - 컨트롤 레지스터 변경

폰트팩 V2는 기본적으로 V1과 호환이 됩니다.

예전 S/W들을 그대로 쓸 수 있습니다. (죄다 제가 만든 것 뿐이지만요ㅋㅋ)


V2는 이 상태에서 유니코드 기능이 추가로 들어가게 되었는데요.

이걸 직접 컨트롤하는 경우는 어떻게 해야하는지 잠깐 알아보겠습니다요~

(사실 모르셔도 됩니다ㅋ)



아래는 V1 호환 모드일 때의 레지스터입니다.




포트를 4개 사용하는 것은 기존 폰트팩 V1과 동일하구요.

MOD 레지스터에 VER(BIT7)값이 추가되었습니다.

기본값은 0으로 되어있구요. 위의 표에서 처럼 V1과 똑같이 동작합니다.

기존 V1의 BIT7 값은 0으로 고정되어 있으니까,

값을 바꿔서 적용이 되는지 체크하는 것으로, 보드 버전을 디텍션 할 수 있습니다.



아래는 V2 모드로 설정했을 때의 레지스터입니다.




VER(BIT7)을 1로 바꾸면 V2 모드가 됩니다.

유니코드는 0000H ~ FFFFH 영역을 모두 사용하기 때문에,

V1 호환모드의 FSEL(BIT7)은 존재하지 않습니다.

따라서 0000H ~ 7FFFH 문자도 플래쉬롬의 폰트가 사용됩니다.


V1의 KOR 레지스터와 V2의 UNI 레지스터의 동작방식은 동일합니다.

BPP에 맞춰 컬러가 적용된 폰트 데이터를 스트림으로 읽어냅니다.


V1 모드에서 문자 코드 변환기로 동작하는 CCV 레지스터는

V2 모드에서 WID 레지스터로 동작하며, 요놈은 기능이 전혀 다릅니다.

폰트의 가로폭 처리 시, VRAM 주소의 옵셋을 얻어옵니다.

그러니까 폰트를 그린 후, 다음 VRAM 주소값을 계산하는 용도로 쓰이는거죠.


CP949에서는 ASCII 문자가 한글/한자 폭의 절반으로 되어있어서,

S/W가 폰트의 폭을 이미 알고 있습니다. VRAM 주소를 계산하는데 H/W 도움이 필요없죠.


근데 유니코드의 폰트는 모양에 따라 폭이 결정되니까,

이걸 기반으로 VRAM 주소를 계산하도록 도와주는 레지스터 WID가 필요하게 되었네요.

BPP에 맞춰 값이 출력되기 때문에 포트에서 읽은 값을 기존 주소값에 더하면 끝입니다요.


그 외 BPP, PX12 등의 폰트 설정은 V1, V2 방식은 똑같구요.

CNV 설정은 V2에서도 변경이 가능하지만, 컨버터 데이터를 읽을 때는 V1 모드로 전환해야합니다.

코드 컨버터를 사용해야하는 경우가 어차피 CP949 또는 조합형 코드를 사용하는 경우일테니...

이렇게 해도 별 무리는 없을거에요.



그럼, 유니코드의 WID 레지스터를 활용하는 프로그램의 동작 모습을 보시죠.





폰트팩 V2 카트리지의 개발은 요렇게 마무리되겠습니다~


2021년 10월 20일 수요일

FontPack 제작 #12 - 유니코드 용 폰트 넣기

유니코드는 다국어 기본 평면(BMP, Basic Multilingual Plane)이 필요합니다.

부가 평면을 추가해도 되겠지만, 현재 MSX 활용 상황(ㅋ)를 볼 때 BMP만 있어도 충분할 것 같네요.


아래 그림이 폰트팩에서 실제 사용하는 유니코드(BMP) 폰트를 그림파일로 추출한 것입니다.




참고로, CP949 코드의 폰트는 1/4 정도의 영역만 사용합니다.




폰트 크기는 기존 폰트팩 V1과 같은 사이즈인 16 x 16 및 12 x 12 픽셀을 사용합니다.

BMP의 U+0000 ~ U+FFFF 문자를 16 x 16 사이즈의 비트맵으로 만들면 용량이 2MB가 됩니다.

결국 폰트팩 V2에서는 플래쉬롬의 4MB가 유니코드 폰트로 쓰이게 되는거죠.



폰트롬을 생성하는 방법은 FontPackTool 2.0 프로그램을 이용합니다.

기존 버전에서 유니코드 용 폰트를 선택하는 기능과 V2 롬을 생성하는 버튼이 추가되어있습니다.


고정폭의 폰트를 써야하니까 선택의 여지가 별로 없는건 똑같아요 ㅎ.ㅎ

굴림체, 돋움체, 바탕체, 궁서체 4개입니다.





V1 ROM으로 생성하면, 2MB의 파일이 나오구요. V2 ROM일때는 8MB입니다.

아래는 폰트팩 V2 롬을 다운로드 하는 모습입니다.

FONTPACK.COM 프로그램은 V1, V2 카트리지를 자동인식해서 동작합니다.

사용자가 따로 옵션에 신경 쓸 필요는 없어요.





기존 V1의 기능들은 이미 동작모습을 보셨으니, 유니코드가 제대로 동작하는지만 보겠습니다요~


U+AC00 문자입니다. 한글 영역입니다.




U+9752 문자입니다. 한자 영역이죠. 잘 나오네욤 ㅎ.ㅎ





이번엔 유니코드를 지원하는 프로그램에서 어떻게 출력되는지 봅시다요!

테스트 용으로 쓰인 문서는 첨부파일로 넣었으니 참고하시구요. (UTF16-LE 인코딩)

Download: UTF16LE.TXT


한글문서 뷰어인 HV의 동작 모습입니다.

아래는 기존 폰트팩 V1을 썼을 때의 출력입니다.

폰트팩에서 유니코드를 CP949로 코드변환을 지원합니다만...

CP949에 존재하지 않는 문자는 출력이 되지않겠죠.




아래는 폰트팩 V2의 유니코드 폰트를 이용하여 제대로 출력된 모습입니다.




음... 사진의 문자열이 익숙한 분이라면, 마츠다 세이코의 노래도 잘 아시겠네요 ㅎ.ㅎ

(노래 듣는데 제목이 제대로 안보여서, 폰트팩 V2를 만들었다는 소문이...ㅋ)



그럼, 편안한 밤 되세요~ ㅎ.ㅎ


2021년 10월 16일 토요일

FontPack 제작 #11 - V2로 업그레이드

한글 FontPack 카트리지라고 들어보셨나요?ㅋ

요게 6년전에 만든건데요. 이제 다음 버전으로 가야될 타이밍이 된 것 같아요.


이번 폰트팩 V2에서는 유니코드 폰트가 추가됩니다.

물론 기존 폰트팩에 Unicode to CP949 코드 변환기가 있지만,

CP949 코드에 없는 한자, 특수문자는 표시가 불가능하거든요.

최소한 MP3의 ID3v2의 유니코드 문자열이라도 제대로 보여주면 좋을 듯 해서요~ ㅎ.ㅎ






기존 폰트팩 V1은 1MB 플래쉬롬 두개에 이리저리 구겨 넣었는데요.

폰트팩 V2는 8MB 플래쉬롬을 사용합니다.

롬의 하위 2MB는 기존 V1과 용도가 같습니다.

바꿔 말하면, 기존 V1의 기능을 그대로 갖고 있다는 얘기죠.


SRAM은 32KB로 줄였습니다.

유저폰트를 만들어서 활용하는 경우가 없어서요. 사실 저도 안쓰고 있... ㅎ.ㅎ;

BIOS 용 8x8 2KB 폰트램(SRAM) 기능은 기존과 똑같이 동작합니다.


그 외, V1 보드에서 BUSDIR 신호를 빼먹었던건 넣어놨구요ㅋ



일단 보드가 바꼈으니, 기존 기능들이 제대로 동작하는지 확인해보아요~


기본 2MB 롬(BIOS + FONT)을 다운로드 하는 모습입니다.





조합형 폰트는 아래처럼 잘 나오네요.

HV에서 ISS 가사 파일을 읽은 모습입니다.





완성형 폰트도 나오구요.





12 x 12 사이즈의 작은 폰트도 잘 나오네요.





DOS2에서 ANSI5 모드로 전환한 모습





이건 ADIR(ANSI DIR)을 실행해본 모습입니다.





그럼, 즐거운 주말 되셔요!