Gigamix DM-SYSTEM2

フォントドライバ

第1章 概要

1.1 フォントドライバとは

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

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

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

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

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

2.1 利用可能なドライバ

2.1.1 MSX標準 漢字ROM (16×16ドット)

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

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

※ このドライバはDMシステム2の出荷時に内蔵されています。


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

2.1.2 ANKフォントだけのドライバ (16×16ドット)

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

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

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


Download driver at Github FNT-ANK.LZH

2.1.3 NVマガジン VRAMフォント (16×16ドット)

 草の根ソフトハウス・Syntax製の同人ディスクマガジン「NVマガジン」で採用されたオリジナルの漢字フォントを利用するドライバです。漢字フォントファイルはNVマガジンに同梱されている FONTNV.KNJ で、VRAMの裏ページ(10000h)へ転送しておきます。

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

 もともと8×16ドットの縦長なフォントですが、横サイズを2倍角して全角文字を形成しています。よって横ドットが粗く表示されます。(全角文字の表示サイズを8×16ドットに指定すれば本来の文字が表示できます)

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


Download FNT-NV.LZH (5KB)

2.1.4 へきるふぉんと (16×16ドット)

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

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

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

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


2.1.5 MSX-View漢字ROMカートリッジ (12×12ドット)

 MSX turbo R専用のGUI、MSX-Viewに付属された漢字ROMカートリッジを利用するドライバです。同等のROMが内蔵されているPanasonic製FS-A1GTでも利用できます。

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

 そこで、A to Cさんの著作権フリーな漢字フォント「要町 as MSX-View」のROMイメージデータを「似非RAMディスク」や各種Flashカートリッジ等へ書き込むことにより、MSX-View漢字ROMカートリッジと互換性のあるカートリッジを自作することができ、DMシステム2で漢字表示が可能です。

 このドライバは、半角文字、JIS第1水準、第2水準の全角文字が表示できます。ただしFS-A1GTではフォント不足の為、JIS第2水準が表示できません。

※ このドライバはDMシステム2の出荷時に内蔵されています。

※ MSX-View漢字ROMカートリッジは、MSX標準漢字ROMとして代用することはできません。


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


(“要町 as MSX-View”での使用例)
Download driver at Github FNT-VIEW.LZH
Download 「要町 as MSX-View」ROM image file kaname_v.lzh

2.1.6 松下仕様12ドット漢字 (12×12ドット)

 Panasonicの通信モデムカートリッジ、FS-CM1に内蔵された松下仕様12ドット漢字ROMをDMシステム2で利用するドライバです。

 また、同等のROMが搭載されたMSX2の ワープロ・バソコンFS-4600F および FS-CM1の機能が内蔵された FS-A1FM でも利用できます。

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

※ 松下仕様12ドット漢字ROMは、MSX標準漢字ROMとして代用することはできません。ただし、この漢字ROMが搭載された状態で漢字BASIC(CALL KANJI1 及び CALL KANJI3)を利用すると、松下仕様12ドット漢字のフォントできれいに表示されます。


Download driver at Github FNT-CM1.LZH

2.1.7 HALNOTE (12×12ドット)

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

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

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


Download driver at Github FNT-HAL.LZH

2.1.8 ねこいらずフォント (12×12ドット)

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

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

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

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

 そこで、余ったRAMの活用方法として日本語フォントの搭載を当クラブは提案いたします。

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

※ねこいらずは、MSX標準漢字ROMとして代用することはできません。

※ねこいらずはKICHI氏のフリーウェアです。当クラブはプログラムの改変・商利用の許可を得ています。

※ねこいらずの文字コード規格は JIS C 6226がベース になっています。第1水準の漢字(2965文字)は全て対応します。第2水準の漢字は非対応です。非漢字(557文字)はJIS X 2013と比べて半分くらい違っており、互換性に気をつける必要があります。詳しくはブログ記事をご覧ください。→ https://gigamix.hatenablog.com/entry/ds2/nekoirazu


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

2.2.1 かんたん手帳リフィルくん (12×12ドット)

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

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

※ かんたん手帳リフィルくんは、MSX標準漢字ROMとして代用することはできません。

※ 解析資料は A to Cさんのサイト で入手できます。

Download driver at Github FNT-RFIL.LZH

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

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

2.2.2 16ドット漢字 (16×16ドット)

 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)

	ORG	7400h	;16×16用

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


	ORG	7600h	;12×12用

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]トップページへ