Gigamix DM-SYSTEM2

フォントドライバ

updated:

第1章 概要

1.1 フォントドライバとは

 DMシステム2の漢字表示に必要な漢字フォントデータを各種周辺機器から取得する専用のルーチンです。MSX標準の漢字ROMはもちろんのこと、漢字フォントとして使えそうな多くの周辺機器やシステムに対応します。

 DMシステム2では16×16px(16pxフォント)、12×12px(12pxフォント)の計2種類のフォントドライバを登録できます。漢字ROMが用意できないMSX2ユーザーの方々は、フォントドライバを交換することで、漢字ROMを搭載されたマシンとほぼ同じように漢字表示が可能になります。

第2章 各種ドライバの紹介

 この章ではDMシステム2で対応するドライバ及び、今後対応が予定されているドライバを紹介します。

 下線の引いてあるドライバ名をクリックすると.LZH形式のファイルを転送します。

2.1 16pxフォント

2.1.1 MSX標準 漢字ROM(FNT-KROM)

 MSXの漢字ROMを利用する標準的なドライバです。MSX2+とMSX turbo R、一部のMSX2など、現存する日本の多くの機種に漢字ROMが搭載されていますので、通常はこのドライバだけで支障は無いはずです。

 このドライバで半角文字とJIS第1水準、第2水準の全角文字が表示できます。

 このドライバはDMシステム2の出荷時に内蔵されています(16pxフォントドライバのデフォルト設定)。


(Panasonic FS-A1STでの使用例)
Download driver at Github FNT-KROM.LZH

2.1.2 ANKフォントだけのドライバ(FNT-ANK)

 MSXのANK(半角)フォントを利用して、全角文字をできるだけ表示させようとします。シフトJISで有効な半角文字、全角英数字、全角ひらがな、全角カタカナ、GRAPHキーで出せるような(月、火、時、分…)一部の漢字と記号が表示できます。

 デフォルトで用意されているキャラクタに無い文字はすべてダイヤマークで表示されます。

 漢字ROMの搭載されていない機種で最低限の日本語表示を行いシステムの互換性を維持する用途を想定しています。


Download driver at Github FNT-ANK.LZH

2.1.3 NVマガジン VRAMフォント(FNT-NV)

 草の根ソフトハウス・Syntax製の同人ディスクマガジン「NVマガジン」で採用されたオリジナルの漢字フォントデータを利用するドライバです。元々は当クラブの宣伝コンテンツをNVマガジン上で日本語表示するために開発したものです。


NV magazine

 漢字フォントファイルは、NVマガジンに同梱されている FONTNV.KNJ で、あらかじめVRAMの裏ページ(10000h)へ転送しておきます。

 このドライバは、半角文字とJIS第1水準の全角文字が表示できます。フォント寸法が8×16pxという特殊な形状ですが、DMシステム2では横サイズを2倍角して全角文字を形成しています。そのため横ドットが粗く表示されます。(全角文字の表示サイズを8×16pxに指定すれば本来の文字が表示できます)


Download FNT-NV.LZH (5KB)

※一部表示できない文字があります。調査中です。


2.1.4 へきるふぉんと(FNT-HEKI)

 人気声優・椎名へきるさんの直筆ひらがな(!?)を某マニアがX68000向けにフォントファイル化し、それをMSXのDMシステム2で利用できるようにしたドライバです。へきるファンの方はぜひどうぞ。

 このドライバは、半角文字とJIS第1水準、第2水準の全角文字が表示できます。ひらがな以外の文字は、MSX標準の漢字ROMを利用します。

 このドライバは、フォントファイルをマッパーRAM及びVRAMのいずれかへ配置して利用します。

※このドライバはマッパRAM管理の仕様が決定する前に製作されたもので、仕様に準拠していません。


2.2 12pxフォント

2.2.1 MSXView仕様 漢字ROM(FNT-VIEW)

 MSX turbo R専用のGUI、MSXViewで利用される2種類のフォントをDMシステム2で表示するドライバです。FS-A1GTでは同等のROMが本体に内蔵されています。それ以外の機種では製品に付属された漢字ROMカートリッジを接続します。


MSXView付属 漢字ROMカートリッジ

 MSXViewはMSX turbo R専用のソフトウェアですが、漢字ROMカートリッジ自体は単なるメガROMカートリッジなため、turbo R 未満の機種でも利用できます

 MSXView仕様の漢字ROMカートリッジと互換性のある、フリーフォントの「ROMイメージ」がインターネットで公開されており、ROMイメージデータを「似非RAMディスク」や各種Flashカートリッジ等へ書き込むことによりMSXView漢字ROMカートリッジと互換性のあるカートリッジを自作することができ、DMシステム2で漢字表示が可能です。

 このドライバは、半角文字、JIS第1水準・第2水準の全角文字が表示できます。また、通常利用時の12pxフォントに加え、拡張フォントドライバによる12×8pxの縮小フォントも表示可能です。

 このドライバはDMシステム2の出荷時に内蔵されています(12pxフォントドライバのデフォルト設定)。


(MSX-View専用漢字カートリッジでの使用例)


(“要町 as MSX-View”での使用例)
Download driver at Github FNT-VIEW.LZH
Download 「要町 as MSX-View」ROM image file
Download 「k12x8+東雲12(k12x8shn)」ROM image file

MSXView仕様の漢字フォントについて、詳しくはブログ記事 MMと合わせて揃えたい!MSXView漢字カートリッジと対応アプリ(作者捜索編) - Gigamix Online をご覧ください。

MSXView仕様 拡張フォントドライバによる縮小フォントの利用方法について、詳しくは 拡張フォントドライバによる文字表示 をご覧ください。

※MSXView仕様の漢字ROMはMSX標準漢字ROMとのハードウェアレベルの互換性が無いため、標準漢字ROMとして代用することはできません。
※FS-A1GTの内蔵ROMはJIS第2水準漢字が搭載されていません。


2.2.2 松下仕様12ドット漢字(FNT-CM1X)

 Panasonic(松下電器)製のMSX本体や周辺機器で用いられた松下仕様12ドット漢字ROMをDMシステム2で利用するドライバです。通信モデムカートリッジ FS-CM1のほか、MSX2パソコンのFS-4600FやFS-A1FMに搭載されています。


通信モデムカートリッジ FS-CM1

 松下仕様12ドット漢字の利用可能環境でMSXの漢字BASICを併用すると、CALL KANJI1 及び CALL KANJI3のコンソール画面では松下仕様12ドット漢字のきれいな文字で表示されます。DMシステム2ではこのフォントを漢字BASICの有無問わず利用することができます。

【細かすぎて伝わらない】松下仕様12ドット漢字ROMとは、パナソニックの一部環境(FS-4600F、FS-A1FM、FS-CM1)に搭載されたROM。画面解像度が低いMSXでは16px角の標準漢字ROMより12px角が重宝する場面あり。また、漢字BASICの_kanji1と_kanji3でこのROMが利用される。文字の見え方が全然違うでしょ? — Takashi Kobayashi (@nf_ban) 2020年07月20日

 このドライバは、半角文字とJIS第1水準の全角文字が表示できます。


Download driver at Github FNT-CM1X.LZH

※松下仕様12ドット漢字ROMはMSX標準漢字ROMとのハードウェアレベルの互換性が無いため、標準漢字ROMとして代用することはできません。


2.2.3 HALNOTE(FNT-HAL)

 HAL研究所より発売されたGUIソフト・HALNOTEのROMカートリッジに内蔵されているオリジナルの12ドット漢字ROMを利用して表示します。


HALNOTE 付属カートリッジ

 NALNOTEはMSXViewの12pxフォントと全く同じフォントのROMを搭載するほか、MSX標準の漢字ROMも搭載しています。このドライバと併用すれば表示サイズに併せて使用フォントを最適化でき、いつでも読みやすい文字を表示できるようになります。

HALNOTEで思い出したけど12pxフォントだけでなく標準漢字ROMも載ってるのであった。漢字ROMが載ってないPHC-23で問題なく表示できることを確認。 — Takashi Kobayashi (@nf_ban) 2021年04月30日

 このドライバは、半角文字とJIS第1水準の全角文字が表示できます。また、いくつかの文字(チルダ等)にデザイン上のバグがあります。


Download driver at Github FNT-HAL.LZH

※HALNOTEの12ドット漢字ROMはMSXView仕様とのハードウェアレベルの互換性が無いため、MSXView互換ROMカートリッジとして代用することはできません。

2.2.4 かんたん手帳リフィルくん(FNT-RFIL)

アスキーから発売された実用ソフト・「かんたん手帳リフィルくん」に内蔵されたオリジナルの12ドット漢字ROMを利用するドライバです。


かんたん手帳リフィルくん 付属カートリッジ

 このドライバは、半角文字とJIS第1水準の全角文字が表示できます。

Download driver at Github FNT-RFIL.LZH

かんたん手帳リフィルくん 付属ROMカートリッジの解析資料は A to Cさんのサイト で入手できます。

※かんたん手帳リフィルくんの12ドット漢字ROMはMSX標準漢字ROMとのハードウェアレベルの互換性が無いため、標準漢字ROMとして代用することはできません。


2.2.5 ねこいらずフォント (FNT-NEKO)

 旧DMシステムの漢字表示で利用されていた「ねこいらずフォントファイル(約64KB)」をDMシステム2で利用するドライバです。

 フォントファイルをどのRAMへ配置するかによって、利用するドライバが変わります。ドライバはVRAM版マッパーRAM版の2種類が用意されています。

 VRAM版はVRAMの裏ページ(10000h)へ配置しておきます。マッパーRAM版はフォントをマッパーRAMへインストールする必要があり、空きセグメントを4枚(64KB)使用します。

 「ねこいらず」の文字コードは JIS C 6226(いわゆる旧JIS)がベース になっています。第1水準の漢字(2965文字)は全て対応します。第2水準の漢字は対応しません。非漢字(557文字)部分はMSX実機と互換性がありますが、いくつかの文字は表示できないため、互換性に気をつける必要があります。


VRAM版 FNT-NEKO.LZH (51KB)
マッパーRAM版 FNT-NEK2.LZH (51KB)

 マッパーRAM版は特に海外のMSX2で日本語を表示する用途に適しています。なぜなら、海外ではMSX2の殆どの機種で128KB以上のマッパーRAMが標準的に搭載されていた経緯があり、日本の環境でソフトウェアを構築して海外の機種で動作させると、一般的に64KB以上のRAMを余らせるうえに日本語が表示できない残念な結果に陥るためです。そこで、余ったRAMの活用方法として日本語フォントの搭載を当クラブは提案いたします。

「ねこいらず」フォントについて、詳しくはブログ記事 DMシステム2:「ねこいらず」という当時の8bitパソコンで不要だったがMSXでは必要だった日本語表示技術のメモ - Gigamix Online をご覧ください。

※「ねこいらず」はソフトウェアであるため、標準漢字ROMとして代用することはできません。
※「ねこいらず」はKICHI氏のフリーウェアです。当クラブはプログラムの改変・商利用の許可を得ています。


2.3 現在開発中および対応を検討中のドライバ

 DMシステム2で今後対応を検討している周辺機器を紹介します。

2.3.1 16ドット漢字 (16×16ドット)のマッパーRAM版

 MSX標準の漢字ROMと同じ、16×16ドットサイズの漢字フォント(半角文字とJIS第1水準で約96KB)をMSXのマッパーRAMへ常駐し、漢字を表示させるドライバです。

 マッパーRAMさえあれば漢字ROMが無くても漢字表示が可能になります。主に海外のMSX2で日本語を表示させる為に利用しようと考えています。

 現在、A to Cさんの著作権フリーな漢字ROMイメージが公開されており、フォント調達の問題は解決しましたが、ドライバの開発はまったく進んでおりません。

※MSX標準の漢字ROMとして代用することはできません。

また、ハードが発掘され次第、順次開発して行く予定です。

  • A1テロッパ→後差し
  • カシオ漢字ワープロ MW-24→後差し!?
  • YAMAHA日本語ワープロ SKW-01/05→YAMAHAサイドスロット
  • SANYO漢字ワープロ KA-MAP-06→後差し!?
  • MSXワープロ コナミEC700→後差し!?
  • ICランドラスター 漢字ワープロ (要空きRAM96KB)→入手困難!?

第3章 ドライバの利用方法

 詳しくは、ドライバについて第2章 ドライバのインストール方法 をご覧ください。


第4章 フォントドライバの作り方

 この章では、DMシステム2で動作可能なドライバをユーザー自身が開発・利用するための手順を紹介します。

4.1 ドライバのメモリマップ

 フォントドライバは、計512バイトで、3部構成です。

  1. ヘッダ (48バイト)
  2. コールエントリ (3バイト×1エントリー)
  3. 本体 (461バイト)

 フォントドライバの先頭アドレスは、フォントの対応サイズにより変わります。

16×16ドット用 7400h~75FFh
12×12ドット用 7600h~77FFh

4.2 ドライバのヘッダ部・コールエントリ

 ヘッダは48バイトで構成されており、以下の用途で用いられます。ヘッダの次には「コールエントリへのコール先」となる3バイトの羅列が続きます。

 フォントドライバは計1つのコールエントリを構築します。

オフセット バイト数 用途
+ 0 40 ドライバ名称 (漢字可, 空白は20hで埋める)
+40 1 EOFコード (1Ah)
+41 1 ドライバ種別番号 (00h:フォントドライバ)
+42 1 対応サイズ番号 (1:16x16 2:12x12 3:拡張)
+43 5 未使用
+48 3 コールエントリ1(FNTDRV)へのコール先 (JP xxxxh)

					;16×16用
		ORG		7400h

7400	DEFM	'ドライバ名称を漢字20文字に収めます。  '	;余白は20hで
7428	DEFB	1Ah	;EOF
7429	DEFB	00h	;フォントドライバの意
742A	DEFB	01h	;16×16フォントドライバの意
742B	DEFS	5	;未使用
7430	JP	FNTDRV	;フォントの獲得


;12×12用
		ORG		7600h

7600	DEFM	'ドライバ名称を漢字20文字に収めます。  '	;余白は20hで
7628	DEFB	1Ah	;EOF
7629	DEFB	00h	;フォントドライバの意
762A	DEFB	02h	;12×12フォントドライバの意
762B	DEFS	5	;未使用
7630	JP	FNTDRV	;フォントの獲得
	
				

4.3 ドライバの本体

 ドライバは、DMシステム2から直接アクセスされるマシン語ルーチン群“コールエントリ”を中継して機能します。

 コールエントリの本体はヘッダ部と合計して512バイト以内に収める必要があります。

 本体はドライバ内のどこにでも配置して構いませんが、DMシステム2はドライバのヘッダ部に記載された“コールエントリへのコール先”を利用するので、このアドレスに対応したメモリへルーチンを配置するようにしてください。


4.4 コールエントリ

FNTDRV (フォントの獲得)

 文字コードに対応するフォントを1文字読み出します。ドライバでは、指定されたフォントに対するフォントデータを構築し、各種パ ラメータをシステム内へ転送させます。

[in] B 0: 半角
1: 全角第一水準
2: 全角第二水準
DE シフトJISコード (半角の場合 D←0 E←アスキーコード)
[out] HL フォント格納アドレス
D フォントサイズ:x (半角サイズで)
E フォントサイズ:y
B オフセット (ビット数)
C フォント折り返し幅 (ビット数)
ex.1) 18バイトのサイズ, 12×12の全角フォント… D←12, E←12, B←0, C←12
ex.2) 18バイトのサイズ, 6×12の半角フォント(左詰め)… D←12, E←6, B←0, C←12
ex.3) 18バイトのサイズ, 6×12の半角フォント(右詰め)… D←12, E←6, B←6, C←12

4.4 インストーラの製作

 開発したドライバを一般公開したいのでしたら、ぜひインストーラもご用意ください。インストーラの制作方法については、ドライバについてインストーラの製作 をご覧ください。

 フォントドライバのインストールは、インストール後に インフォメーションエリア の以下のワークを設定してください。

16×16ドットフォント
FNTSEL (0300h+174) ← 1 (16ドット固定) ※12ドットも利用可能なら 0
FNTSIZ (0300h+175) ← 8 (半角サイズ:x)
FNTSIZ+1 (0300h+176) ← 16 (半角サイズ:y)
FNTSIZ+2 (0300h+177) ← 16 (JIS第1水準, 全角サイズ:x)
FNTSIZ+3 (0300h+178) ← 16 (JIS第1水準, 全角サイズ:y)
FNTSIZ+4 (0300h+179) ← 16 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0
FNTSIZ+5 (0300h+180) ← 16 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0

12×12ドットフォント
FNTSEL (0300h+174) ← 2 (12ドット固定) ※16ドットも利用可能なら 0
FNTSIZ+6 (0300h+181) ← 6 (半角サイズ:x)
FNTSIZ+7 (0300h+182) ← 12 (半角サイズ:y)
FNTSIZ+8 (0300h+183) ← 12 (JIS第1水準, 全角サイズ:x)
FNTSIZ+9 (0300h+184) ← 12 (JIS第1水準, 全角サイズ:y)
FNTSIZ+10 (0300h+185) ← 12 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0
FNTSIZ+11 (0300h+186) ← 12 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0

拡張フォントドライバ
FNTSIZ +12,13 ANKフォントサイズ (0,0のとき非対応)
FNTSIZ +14,15 第一水準フォントサイズ (0,0のとき非対応)
FNTSIZ +16,17 第二水準フォントサイズ (0,0のとき非対応)

第5章 漢字表示とマッパーRAM

 128KB以上のマッパRAMを利用して漢字フォントをフォントドライバから利用するには、フォントデータとフォントドライバをそれぞれ有効にしなければなりません。

 この章では、マッパーRAMを利用した漢字表示を実現する手順を紹介します。


5.1 フォントをマッパRAMへ転送

 フォントインストーラ(FONTINST.OBJ)をロードして、C000hをコールします。

BLOAD"FONTINST.OBJ"
DEFUSR=&HC000
A=USR("フォントファイル名")

 Aの戻り値は以下の通りになっています。

bit0
DOSのバージョン (0:DOS1, 1:DOS2)
bit1
インストール結果 (0:成功, 1:失敗)

 フォントの転送が正常に行われた場合は、以下のワークエリアに情報を残します。

ALCSLT (C700h+19) インストール成功したマッパRAMのスロット
ALCBNK (C700h+20) 同じく、先頭セグメント番号 (0~255)
BNKSIZ (C700h+21) 同じく、セグメント数 (1~255)

 マッパーRAMへ転送したフォントが有効で無い場合は、フォントドライバのインストールを中止してください。

※フォントが有効か否かはフォントインストーラを実行してみなければ分かりません。フォントをインストールするRAMが明らかに無い場合でも、一度インストーラを実行し、その際出力されるエラーを関知してから処理してください。

※フォントをインストールするマッパRAMは連続した空きセグメントでないとインストールできません。複数のスロットにまたがることもできません。


5.3 インフォメーションエリアの修正

 インフォメーションエリアを書き換えます。書き換える内容は以下の通りです。

16×16ドットの場合
MAPSL0 (4300h+109) ← ALCSLT (C700h+19, マッパのスロット)
MAPBK0 (4300h+110) ← ALSBNK (C700h+20, 先頭セグメント)
MAPSZ0 (4300h+111) ← BNKSIZ (C700h+21, セグメント数)
FNTSEL (4300h+174) ← 1 (16ドット固定) ※12ドットも利用可能なら 0
FNTSIZ (4300h+175) ← 8 (半角サイズ:x)
FNTSIZ+1 (4300h+176) ← 16 (半角サイズ:y)
FNTSIZ+2 (4300h+177) ← 16 (JIS第1水準, 全角サイズ:x)
FNTSIZ+3 (4300h+178) ← 16 (JIS第1水準, 全角サイズ:y)
FNTSIZ+4 (4300h+179) ← 16 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0
FNTSIZ+5 (4300h+180) ← 16 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0

12×12ドットの場合
MAPSL1 (4300h+112) ← ALCSLT (C700h+19, マッパのスロット)
MAPBK1 (4300h+113) ← ALTBNK (C700h+20, 先頭セグメント)
MAPSZ1 (4300h+114) ← BNKSIZ (C700h+21, セグメント数)
FNTSEL (4300h+174) ← 2 (12ドット固定) ※16ドットも利用可能なら 0
FNTSIZ+6 (4300h+181) ← 6 (半角サイズ:x)
FNTSIZ+7 (4300h+182) ← 12 (半角サイズ:y)
FNTSIZ+8 (4300h+183) ← 12 (JIS第1水準, 全角サイズ:x)
FNTSIZ+9 (4300h+184) ← 12 (JIS第1水準, 全角サイズ:y)
FNTSIZ+10 (4300h+185) ← 12 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0
FNTSIZ+11 (4300h+186) ← 12 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0

※変更した設定を以後も継承する場合は、上記の内容を 0300h+nへ同じように設定(コピー)してください。これを忘れると CALL SYSON を実行したとたん設定が初期化されてしまい、今までの設定が無効になってしまいます。

[Back]トップページへ