2025년 1월 18일 토요일

WAU 제작 #12 - 터미널용 폰트

Wi-Fi도 있고, UART도 있으면 터미널(단말기)로 활용하는 것이 먼저 떠오르긴 하는데요.

MSX를 터미널로 만들어서 뭘 할 수 있을까요?

.

.

.

2025년 현재, 아무리 머리를 굴려도 반짝하고 떠오르는 건 딱히 없네요 ㅎ.ㅎ

뭐, '못쓰는 것'과 '안쓰는 것'은 조금 차이가 있긴 합니다요.


MSX2의 텍스트2 모드는 SCREEN 0에서 WIDTH 80 명령을 쓰도록 되어있습니다.

이 모드는 80 x 24 텍스트로 동작하니까, 터미널 기본 화면으로 딱 맞습니다.

근데, 이대로 쓰는 건 재미없으니까, 고해상도 그래픽 모드로 한글도 쓸 수 있도록 해보아요~


스크린7 인터레이스 또는 스크린6 인터레이스 모드를 위한 폰트를 만들어봅시다.

참고로, 화면 해상도는 512 x 424입니다.

영문 6 x 16, 한글 12 x 16 픽셀이 필요하겠네요.


먼저 ASCII 영역의 폰트를 에디터로 대강 찍어보았습니다.




한글 폰트는 둥근모 폰트를 폭을 줄여서 만들어봤습니다.

세로 라인들이 1픽셀로 바뀌어서 그런지, 둥근모의 느낌이 많이 사라지더라구요.




한자폰트는 워낙 많아 손으로 수정하는 건 불가능해서,

그냥 기존 폰트를 대충 스케일다운해서 넣었습니다.

모양이 안좋습니다만... 없는 거 보다는 낫겠죠? ㅎ.ㅎㅋ





WAU의 폰트 I/O는 한글 폰트팩의 그것과는 조금 구현이 다르게 되어있습니다.

WAU쪽은 1BPP, 4BPP 데이터만 처리가능하구요.

I/O포트로 읽을 때 16bit 어드레싱을 쓰도록 되어있습니다.

만약 IN A,(N) 명령을 쓰려면, 매번 A레지스터로 상위 8bit 주소를 넘겨야하니 쓰기 힘들겠네요.

그냥 IN r,(C), INI, INIR 등의 명령을 써야합니다.


보통 1BPP 폰트는 램으로 전송 후, 그래픽 모드에 맞춰서 다시 그려주니까...

폰트를 읽을 때에는 B레지스터를 16(영문) 또는 32(한글)로 놓고 INIR로 주르륵 가져오면 되겠습니다.


4BPP 폰트는 1BPP의 1/0가 아닌 15/0으로 데이터가 들어옵니다.

폰트팩의 경우는 컬러매핑 기능이 있어서, 설정된 컬러값으로 자동변경됩니다만,

WAU의 폰트는 컬러 변경을 SW로 해야합니다요~ 컬러값과 AND 연산을 해주면 되겠죠.


폰트를 연속으로 읽으려면,

먼저 B레지스터를 0으로 설정 후 IN r,(C)로 읽고, DEC B로 주소를 카운트다운합니다.

IN 및 DEC를 반복으로 하면 되겠죠.

한글폰트의 경우 96바이트를 읽게 됩니다.


참고로 한글코드는 CP949를 지원합니다.

WAU의 내장 FlashROM 절반을 폰트데이터로 쓰고 있어요ㅋ


아래는 영문 6 x 16 폰트 및 한글 12 x 16 폰트를 출력해본 모습입니다.

메인 BIOS의 영문 6 x 8 폰트도 함께 표시했으니, 사이즈를 비교해보셔요~





실제 터미널 프로그램에서는 어떻게 표시되는지 볼까요?

간이 텔넷 프로그램을 만들어보았습니다. 요건 영상으로 보시죠.

고해상도 그래픽이라 많이 무겁습니다만, turboR의 도움을 받으시면 좋아요 ㅎ.ㅎ




WAU의 기본 기능은 이정도로 마무리합니다~ ㅎ.ㅎ/

PS. 2025-01-19
한글 머드 서버가 있어서 접속해보았어요!




댓글 없음:

댓글 쓰기