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 카트리지의 개발은 요렇게 마무리되겠습니다~


댓글 없음:

댓글 쓰기