레이블이 _FontPack인 게시물을 표시합니다. 모든 게시물 표시
레이블이 _FontPack인 게시물을 표시합니다. 모든 게시물 표시

2023년 3월 11일 토요일

FontPack - BIOS & Tool (2023-03-11)

 


Download: FontPack Tools (2023-03-11)


------------------------------------------------------------

    FontPack Tool Package (2023.03.11)

        By Yeongman Seo <email:sharksym@hitel.net>

------------------------------------------------------------


[ STARTUP.ROM, BIOS.ROM]

- 변경없음


[ FONTPACK.COM v2.01 ]

- 변경 없음


[ FontPackTool.exe v2.2 ]

- 0 문자가 사선을 포함하는 옵션을 추가 (TTF 전용)

- 원(KRW) 문자를 백슬래쉬로 바꾸는 옵션을 추가 (TTF 전용)


[ ROM 업데이트 가이드 ]

1. 윈도 FontPack_Tool 프로그램으로 ROM 생성

2. FONTPACK.COM 및 생성된 ROM을 MSX 용 디스크에 복사

3. MSX-DOS 부팅 후, FONTPACK W FILENAME.ROM 명령으로 다운로드

4. 다운로드 완료 후 시스템 리셋

5. 끝


[ FontPackTool.exe 설정 가이드 ]

  TTF 폰트로 롬 생성 시,

  12pt.로 설정하면 16x16 크기가 되며,

   9pt.로 설정하면 12x12 크기가 됩니다.


  유니코드를 제대로 지원하는 비트맵 폰트는 아래 4종류입니다.

  윈도 내장된 굴림체, 돋움체, 바탕체, 궁서체

  16x16, 12x12 사이즈가 모두 가능합니다.


  참고)

  GNU Unifont는 16x16 용 비트맵 유니코드 폰트입니다.

  http://unifoundry.com/unifont/index.html


2022년 1월 1일 토요일

FontPack V2 카트리지 제작이 완료되었습니다~




신청하신 카트리지가 제작완료되었습니다.

택배 개수가 많아서, 다음주 중으로 나눠서 보내드리겠습니다~ ㅎ.ㅎ


아래 사진은 기존 V1 카트리지와 함께 찍은 모습입니다.

상: V1

중: V2 proto

하: V2




MSX와 함께 즐거운 2022년이 되길 기원합니다! ㅎ.ㅎ/


2021년 12월 18일 토요일

FontPack 제작 #15 - BASIC 데모를 내장하면

폰트팩의 BIOS 영역은 240KB입니다.

현재 64KB 정도만 사용하고 있으니, 여유가 많이 있어요.


최근 V2 카트리지를 만들어 동작 테스트를 하다가 떠오른 생각인데요.

한글 데모 용 프로그램이 내장되어 있으면 좋겠다는 느낌이 들더라구요.


그래서, BASIC으로 간단한 데모를 만들어보려고 고민을 하는데 뭔가 번쩍하고 떠오릅니다ㅋ

아이큐2000에 내장된 '아이큐 교실'이 스크린7에서 한글을 사용하는 BASIC 프로그램이잖아요?

그냥 요걸 내장하고 BASIC에서 CALL TUTOR 명령으로 구동되도록 했습니다.


아래는 FS-A1에서 실행해본 모습입니다.





그리고,

폰트팩으로 기존 MSX2 용 한글 BASIC 프로그램을 활용하는 방법은 예전에 올린 글을 참고하세요!


그럼, 이만~~


2021년 10월 24일 일요일

FontPack 제작 #14 - 롬매퍼 변경

폰트팩 V1은 ASCII 16K 매퍼와 동일하게 구현되어 있고,

전체 주소영역을 반으로 나눠서 플래쉬롬과 SRAM이 2MB씩 사용합니다.


지난 6년(?)간 폰트팩을 사용해본 결과, ASCII 16K 매퍼를 활용하는 경우가 별로 없네요.

MMC/SD V4의 메가램도 용량이 2MB라서, ASCII 매퍼 테스트 목적으로 폰트팩을 쓸 이유도 사라졌구요.


폰트팩 V2에서는 롬이 8MB로 늘어났기 때문에,

ASCII 16KB 매퍼를 삭제하고 폰트팩 전용의 롬매퍼가 탑재되었습니다.

이렇게 변경되면서 V1에 있던 128KB 유저 메가램 기능도 함께 삭제되었습니다.

뭐, 바뀐 매퍼로 인해 사용자가 따로 신경 쓸 부분은 없어요. ㅎ.ㅎ


전체 8MB 플래쉬롬에서,

2MB는 기존 V1과 동일한 BIOS + CP949 관련 테이블/폰트가 들어가겠구요.

5MB는 V2 전용의 유니코드 테이블/폰트가 들어갑니다.

그럼 1MB가 남게 되는데요.


요기는 간단하게 활용할 수 있는 1MB짜리 멀티롬 하나를 넣어놨습니다.

제가 카트리지 배포할 때 넣어드리는건 아니고, 사용자가 직접 다운로드하셔야 됩니다요~

어차피 처음에 폰트롬 생성하고 다운로드 해야되니까 필수 작업이긴 하겠네요.


멀티롬은 요놈이 들어가니까 참고하시구요.





요약: V2에서는 '유저롬 128KB' 기능이 '멀티롬 1MB'으로 변경됨.


즐거운 주말 되세요~


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)을 실행해본 모습입니다.





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



2019년 10월 15일 화요일

FontPack - 케이스 간섭 수정

갑자기 FontPack이 제대로 동작하지 않아서, 이리저리 살펴보니...

BUSDIR 신호를 추가한 곳의 납땜이 떨어졌더라구요.

근데 제 FontPack 두개가 모두 떨어진 상태였습니다. -_-


요기입니다.





카트리지를 꽂았다뺐다 반복하면 케이스에 걸려서 끊어지게 생겼더라구요.

아마 최근에 SLTX를 제작하면서 카트리지를 자주 뺐다꽂으면서 떨어진 듯 합니다.


BUSDIR 수정이 적용된 FontPack을 쓰시는 분은 꺼내서 한번 확인해보세요! ㅎ.ㅎ;


암튼 떨어져나간 선은 다시 납땜했구요.

케이스는 아래 사진처럼 선이 걸리는 부분을 살짝 잘라줬습니다.




그럼, 즐 FontPack 하셔요~

2017년 2월 10일 금요일

FontPack 제작 #10 - 확장슬롯 동작문제(BUSDIR) 수정

폰트팩 H/W 오류 수정에 대한 내용입니다.


현상: DATA 라인에 양방향 버퍼를 사용하는 확장슬롯에서 폰트 I/O 에러 발생

원인: 확장슬롯 용 BUSDIR 신호처리가 되지않음


아래는 BUSDIR 신호를 추가하여, 보드를 수정하는 방법입니다.

직접 수정해보실 분은 참고하셔요~ ㅎ.ㅎ


------------------------------------------------------------------------------------------


폰트팩은 2종류의 보드가 있습니다.

2015년에 제작된 DevPack v1.0

2016년에 제작된 DevPack v1.1 두 종류입니다. 보드 좌측 상단의 버전 번호로 확인가능합니다.

두 회로의 차이는 크게 없지만 신호 패턴이 조금 다릅니다.


회로 추가를 위해 74LS05 칩 및 4.7K옴 저항 2개가 필요합니다.

노란색 부분은 니퍼 등을 이용해서 보드의 신호선을 끊어주어야합니다.

나머지 부분은 색깔에 맞춰 서로 연결하면 되겠습니다.

74LS05 14번핀의 VCC 5V 입력은 보드의 상단의 넒은 부분에 납땜하면 됩니다.

칼등으로 살살 긁으면 녹색 페인트를 벗길수 있어요.


아래는 DevPack v1.0 보드를 위한 납땜 위치를 보여줍니다.




아래는 DevPack v1.1 보드를 위한 납땜 위치를 보여줍니다.




아래는 제가 작업한 모습입니다.

74LS05 칩의 다리를 구부려서 저항 두개를 납땜했습니다.




아래는 최종 작업된 모습입니다.




2016년 11월 16일 수요일

FontPack 제작 #9 - 넌인터레이스 ANSI 스크린 추가

FontPack BIOS에는 ANSI 스크린이 구현되어있습니다.


FontPack 만들 때, 처음 생각했던 기능은 H/W 폰트 엔진 + 한글 IME 였는데...

점점 프로젝트가 산으로 가고있어요~ ㅎ.ㅎ


기존 ANSI 스크린은 VDP 그래픽 모드 5, 6으로 구현됩니다.

(BASIC SCREEN 6, 7과 동일합니다.)


그래픽 모드의 가로 해상도가 512 픽셀이라, 글자를 그리면 새로로 길쭉하게 나옵니다.

하지만, 인터레이스 모드를 켜면 세로 해상도를 두배로 높일 수 있어서, 글자가 이쁘게 그릴수 있습니다.


인터레이스 디스플레이라는게 우리에겐 참 익숙한 화면인데요.

TV 화면이 그렇고, IQ-2000의 SCREEN 9 화면에서도 볼수 있었구요.

디스플레이 개발자라면, VGA의 1024x768 인터레이스 모드도 써보셨겠구요~


근데, 요즘 TV 보면서 "아... 화면이 너무 떨리네!" 이렇게 느끼시는 분 없으시지요?

디인터레이서 기술이 보편화된지 십여년이 지났습니다.

모션 보정 기능도 상향 평준화되서 왠만한 저가 기기 아니면 화면이 잘 나옵니다.


하.지.만.

레트로 느낌을 위해서 구형 CRT 디스플레이를 쓰시는 분들도 많이 있습니다.

우리 천국동도 마찬가지구요~ ㅎ.ㅎ


잡설이 길었네요.

암튼 디인터레이서 없는 CRT 모니터에서는, 인터레이스 화면의 떨림이 눈에 상당히 거슬립니다.

그래서, 세로 해상도를 절반으로 낮춘 넌인터레이스 화면으로 ANSI 스크린을 추가했습니다


아래 사진을 보시지요. ANSI3 모드로 설정된 화면입니다.





참고로, 아래는 현재 지원되는 전체 ANSI 모드에 관한 설명입니다.




ANSI1,2 모드와는 달리 12x12 폰트를 사용합니다.

원래 MSX 표준 텍스트 모드는 세로 글자 24개 사용됩니다.

ANSI3,4 모드는 세로로 글자 17개를 쓸 수 있습니다. 원래 화면의 70%정도 되는 셈이지요.

글자가 세로로 길쭉하니까, MSX가 아닌 것처럼 보이네요~ㅋ


VDP VSync 출력을 50Hz로 바꾸면, 출력 해상도가 240p(또는 480i)에서 288p(또는 576i)로 바뀝니다.

출력 해상도 바뀌어도 실제 그래픽 화면의 도트수는 변하지 않습니다.

결국 수평 라인수만 늘어난 셈이라 글씨 높이가 줄어드는 현상만 생기게 되지요.

근데 요렇게 하니까, 글자가 적당히 이쁘게 보이네요. ㅎ.ㅎ

아래 사진 보셔요~ 참고로 VDP 설정 바꾸려면, BASIC에서 CALL 50HZ 치면 됩니다.


 



CRT 모니터 쓰시는 분들께 활용이 잘 되었으면 하는 바램입니다요~

마지막으로 동작 영상 짧게 하나 찍어봤습니다.





즐거운 하루 되셔요!



2016년 3월 28일 월요일

FontPack 제작 #8 - 한글 BASIC 지원

오랜만에 FontPack BIOS 업뎃을 해보았습니다.

최근 맛탱이님의 폰트팩 활용 프로그램을 보며 많은 생각(약 10초)이 들더군요.ㅋ

BASIC에서 한글 출력을 해보려는 분들이 얼마나 될까?...


생각은 10초면 충분했구요.ㅋ 일단 수정작업으로 들어갑니다.

결론: 기존 코드의 버그들도 소탕하면서~ 주말을 홀라당 까먹었네요. ㅎ.ㅎ


[ 사용 환경 ]

- 텍스트 모드: 기존 ANSI 스크린 모드 활용 (ANSI1, ANSI2 모드, Fake SCREEN 0)

- 그래픽 모드: 문자 출력 디바이스 지원 (기존 BASIC의 GRP 디바이스와 유사, SCREEN 2 ~ 12 지원)

- 한글 코드: SET HAN 명령 추가 (아스키 폰트는 8x8, 8x16 크기선택 가능)

- IME 모드: 기존 폰트팩 입력기 활용 (조합/완성 한글 및 한자 입력)


[ 사용 예 ]

국딩 때 만든 아이큐2000 용 BASIC 프로그램을 수정/구동하고 싶다.

> 2바이트 조합형 코드 편집을 위해, ANSI2 및 IME1 모드 켜기

> 텍스트 한글 출력은 PRINT 명령 그대로 사용

> 그래픽 모드에서 문자 출력 디바이스는 GRP 대신 FNP 사용 ( OPEN"FNP:" AS #1 )


IME는 꺼져있어도 한글 출력에 영향을 주지 않습니다.

그리고, 그래픽 모드만 사용하는 BASIC 프로그램일 경우, GRP -> FNP 디바이스만 변경하면 실행됩니다.

SET HAN 명령은 대우 CPC-300/400 과 유사하지만, 인자 사용은 다릅니다.

기존 코드를 그대로 쓸 때에도 에러가 발생하지 않도록 처리를 하고 있습니다. (그냥 인자를 무시합니다. ㅋ)


사용 가능한 경우는 아래 4종류 입니다.

SET HAN 0 -> 아스키 코드 8x8 크기, 조합형 한글 16x16 크기

SET HAN 1 -> 아스키 코드 8x16 크기, 조합형 한글 16x16 크기

SET HAN 2 -> 아스키 코드 8x8 크기, 완성형 한글 16x16 크기

SET HAN 3 -> 아스키 코드 8x16 크기, 완성형 한글 16x16 크기


그럼, 설명이 대충 끝났으니 사진 한장이랑 동영상 하나 올려봅니다.

아래는 아이큐2000(CPC-300)의 내장 프로그램 "아이큐 교실"을 실행한 모습입니다.

원본코드는 BASIC 롬으로 되어있는데, 소스로 받아서 그래픽 디바이스만 변경했습니다. (GRP -> FNP)

잘 나오네요. 아마 스크린 7 모드일겁니다.




아래는 동영상으로 찍어본 모습입니다.

아이큐 교실 및 BASIC으로 작성된 바이오리듬 프로그램(제가 만든건 아닙니다~)을 실행해보았어요.




2015년 12월 8일 화요일

FontPack 제작 #7 - 메인 BIOS 폰트 바꾸기

FontPack은 대게 아래처럼 활용됩니다.


- M, HV 등의 FontPack 지원 SW 구동

- ANSI 스크린 전환 (고해상도 컬러 터미널 활용)

- IME 전환 (조합형 또는 완성형 한글 코드 입력)

- 1메가롬 게임 구동


오늘(2015.12.08) 업뎃된 FontPack Tool을 사용하면...

FontPack 내부의 SRAM 여유 공간을 활용하여, MSX Main BIOS의 폰트데이터를 바꿀 수 있습니다.


MSX의 Main BIOS에는 8 x 8 사이즈의 256개 문자 폰트가 들어있는데요.

MSX 본체가 판매되는 국가에 맞도록 문자 폰트가 조금씩 다르게 들어갑니다. (특수 영문, 한글, 일어 등등)


근데 여기서 한가지 중요한 사실이 있어요. ㅎ.ㅎ

Main BIOS는 기본적으로 바이오스 롬 내부의 폰트를 사용하지만,

외부 슬롯에 존재하는 폰트로 바꿀 수 있습니다.


예를 들어, 유럽에서 라틴 특수문자가 포함된 폰트 카트리지를 사용하면,

일제 MSX에서도 일어대신 라틴 특수문자로 쓸 수 있다는 얘기지요.

근데 실제로 이런 카트리지가 발매되어서 쓰인적이 아마 없을겁니다. (뭐, 있을지도 몰라요 ㅋ)


Main BIOS는 외부 슬롯의 롬폰트 지원 외, 한가지를 더 지원하거든요.

바로 문자 설정 용 Hook인데요.

BIOS에서 VDP에 문자 폰트를 재설정할 때 마다, Hook을 호출해서 SW적으로 오버라이드 할 수 있게 만들어놨습니다.

누가 만들었는지 잘 만들어놨죠? (이런 무수한 Hook때문에 MSX가 느려지는건 단점이긴 하지만요..ㅋ)


이번에 소개해드리는, FontPack을 이용한 BIOS 폰트 바꾸기는...

Hook을 쓰지 않고, FontPack 내부 메모리를 사용하는 방법입니다.


폰트 데이터는 8x8 1BPP로 된 FNT파일이구요.

256문자니까 총 2KBytes 용량의 파일이 되겠습니다.


아래는 제가 만든 MYFONT.FNT 입니다.




제꺼 터보알의 일어폰트에서 영문/숫자 정도만 조금 다르게 그려본 것입니다.

약간 동글동글하게 그렸어요. ㅎ.ㅎㅋ

엔화 기호도 역슬래쉬 문자로 바꿔넣었습니다.



참고로 BASIC 화면에서 표시해보면, 아래처럼 보이게됩니다.




FontPack으로 폰트를 바꾸면 Hook을 쓰는게 아니라서, 본체 메모리를 점유하지 않게 됩니다.

따라서 일반 프로그램 구동 시, 메모리 또는 Hook으로 인한 제약 사항이 발생하지 않습니다.


아래는 MuPLAY 프로그램을 실행한 모습인데요.

그래픽 모드로 구동되지만, FontPack으로 설정한 BIOS 폰트가 적용된 걸 볼 수 있습니다.

파일 경로랑 파일 목록 창을 자세히 보셔요~




어떻게 쓰는지 아시겠죠?

그냥 DOS에서 한번만 실행하면 끝이니까, AUTOEXEC.BAT에 넣어두어도 좋습니다.

만약 외부 폰트 변경으로 인한 문제(호환성 문제)가 발생하면,

파일명 없이 FONTPACK F 실행하면 원래의 메인 BIOS 폰트로 복구됩니다.

제가 몇개 테스트 하다보니, MGSEL에서 문제가 되더라구요. -_- 참고하시구요.


궁금한 점 있으시면 댓글달아주셔요~

그럼, 즐거운 밤 되시고...


PS. 제가 수정한 폰트랑 유럽,일본,한국 MSX에 들어간 폰트데이터 뽑아서 첨부합니다.

     압축 푸셔서 쓰시면 되겠습니다요!!!

Download: BIOS_FNT_20151208.zip


2015년 8월 23일 일요일

FontPack 제작 #6 - ANSI 스크린

FontPack....

M, HV 프로그램 외에는 활용하는 프로그램이 없어서 심심하셨죠? 아니라구요? 음... ㅎ.ㅎㅋ


이번에는 ANSI escape 코드를 지원하는 스크린 드라이버를 구현해봅시다.

참고로 ANSI 코드(ANSI escape sequences)는 아래 링크에서 확인할 수 있습니다.

궁금하신 분을 클릭하셔요.

http://ascii-table.com/ansi-escape-sequences.php


대강 요렇게 구현되겠습니다.

- 스크린7(VDP G6), 인터레이스 모드

- CP949 코드, 6x12(영문), 12x12(한글) 폰트

- 화면 사이즈는 85컬럼 35라인

- MSX-DOS 모드 지원 (스크린7)


아래는 보너스 모드입니다.

- 스크린6(VDP G5), 인터레이스 모드

- CP949 및 조합 코드, 8x16(영문), 16x16(한글) 폰트

- 화면 사이즈는 64컬럼 24라인

- MSX-DOS 및 BASIC 텍스트 모드 지원 (Fake 스크린0)


문자 입출력 관련 Hook으로 구현되기 때문에 호환성 문제가 생길 수 있습니다.

따라서, 기본으로 OFF 상태로 부팅하도록 합니다.

ANSI 스크린 설정은, 아래처럼 DOS 용 프로그램 또는 BASIC의 CALL 명령을 사용합니다.



아래는 실제로 구현/동작하는 영상입니다.

아직 ANSI 코드, BASIC 지원이 100% 완료된 상태는 아니구요, 기본 기능 몇가지만 구현된 상태입니다. 참고하셔요~




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 코드와 조합형 코드 사이 변환이 가능한 것을 볼수 있습니다.