GIGAMIX DM-SYSTEM2
半角表示の必殺ワザ
updated: Jun 13, 1997

● もくじ

  1. 概要

  2. 拡張フォントドライバとは

  3. DMシステム2からの利用方法

    1. 拡張ドライバを配置する
    2. フォントを配置する
    3. 拡張ドライバの初期化と利用

  4. ちょっとマニアックな利用方法

    1. 文字詰めと文字間
    2. 8×8フォントのリサイクル計画
    3. 12×12フォントの作り方

  5. 現状の問題点 (97/06/13)

● 概要

 DMシステム2では「16×16ドット」及び「12×12ドット」のフォントドライバによって漢字フォントを取り出し、文書表示を実現しています。

 しかし、1バイトコード(半角)の表示に限り拡張フォントドライバを登録することができ、通常用いられるフォントとは別の(半角専用の)フォントを表示することができます。

 英文のメッセージなど1バイトコードで文書を表示させたいような場合、この拡張フォントドライバと任意のフォントを用意すれば、とてもMSXとは思えないような美しい英文表示が可能となります。

● 拡張フォントドライバとは

 拡張フォントドライバとは、DMシステム2が半角処理を行う際、ある条件下において半角フォントの取得先を変更できる特性を利用したマシン語ルーチンです。ただし単なるマシン語プログラムであり、DMシステム2のドライバとして認識される形では公開されません(その予定もありません)。よって通常のフォントドライバのエリアへこれを配置して使用することはできません。
ANKSET1のサンプル画像
拡張フォントセット vol.1
ANKSET1.LZH (16KB)
このアーカイブには以下のファイルが梱包されています。
  • 拡張フォントドライバ (12ドット, 8ドット)
  • ドライバのソースリスト (12ドット, 8ドット)
  • サンプルプログラム 3点
  • Magical Labyrinth Bold (8 pts.)
  • Gigamix Small (8 pts.)
  • Arial もどき (12 pts.)
  • Fusion もどき (12 pts.)
  • German Bold もどき (12 pts.)
  • Macintoshもどき (12 pts.)

● DMシステム2からの使用方法

 拡張フォントドライバを用いる場合も、基本的には通常の漢字装飾機能がそのまま使えます。ただし事前に拡張フォントドライバを使用可能な状態にしておかなければなりません。


1)拡張ドライバをRAMへ配置する

拡張フォントドライバを任意のアドレスへ配置します。拡張フォントドライバはリロケータブルな為、RAM内の自由な位置に配置できます。

しかし訳あってページ0にはドライバを配置できません。CLEAR文でフリーエリアを確保してからドライバを配置するのが良いでしょう。


2)半角フォントをメモリへ配置する

フォントデータをRAMまたはVRAMの任意のアドレスへ配置します。拡張フォントドライバはフォントデータがRAMとVRAMのどちらに配置されていても利用できます。

ギガミックスが配布しているフォントデータには0000hから始まるBSAVEヘッダが付いています。配置するには

フォントはページ0にも配置できます。3000h〜3FFFhの空きエリアを有効に使えばCLEAR文でBASICフリーエリアを削る際、領域を最低限に抑えることができるでしょう。

ギガミックスが配布していない既存のフォントデータも利用できる場合があります。が、ちょっとコツが必要です。


3)拡張ドライバの初期化と利用

拡張フォントドライバの使用を宣言します。(イネーブル)

この命令以後の
CALL KPRINT で半角文字のフォントが変わります。また、既存の各種装飾機能もそのまま利用できます。

表示できる文字コードは20h〜7Ehの95文字となります。俗に言う「半角カナ」は表示できません。

英文フォントの横サイズの指定は通常の「半角分として数値を半分にしたもの」ではなく、実寸で指定します。ご注意ください。 拡張ドライバの使用中は全角文字が表示できません。通常の表示に切り替えるには、拡張ドライバを無効化してください

また、拡張ドライバの二重イネーブル(連続する使用の宣言)は避けてください。拡張ドライバを無効化するときにフォントセレクタを正しい値に戻せなくなり、その後のKRPINTで暴走します。一度、拡張ドライバを無効化した後に宣言をやり直してください

ちなみに無効化は CALL SYSON でもできます。


sample program
KPRINT5.BAS (2KB)

● ちょっとマニアックな活用方法

1)文字詰めと文字間

英文フォントは一般的に文字の横幅が不定で、文字によって横幅が違っています。漢字フォントのように横幅が一定のようにはデザインされていません。

DMシステム2では文字の横幅イコール「次の文字への移動量」と定められている為、常に一定の文字間隔で表示されます。漢字ならこれでも構わないのですが、英文フォントのデザインによっては文字と文字との間に異様な空間ができてしまう場合があります。

そこでDMシステム2の「文字詰め機能」を用いることで、文字の空間を詰めることができます。文字詰めを行うと英文での表示がガラッと変わり、エレガントな英文表示を行うことができます。

設定項目については
CALL KINITの説明を参照してください。
しかし文字詰めを利用するとものによっては逆に「詰め過ぎ」になる場合があります。 そこで次の文字への移動量を微調整する「文字間」を変えることで整形することができます。 CALL KSIZEの説明を参照してください。 文字詰めと文字間の調整が美しい英文表示へのカギとなります。


sample program
KPRINT6.BAS (2KB)

2)8×8フォントのリサイクル計画

拡張フォントドライバで利用できるフォントデータは、ギガミックスが用意したもの以外に、自分で作ることもできます。

フォントの作り方ですが、12×12ドットフォントは18バイト(2ラインで3バイト格納する手法です)、8×8ドットフォントは8バイトの羅列でできています。

そんなわけで8×8ドットのフォントにはMSXのパターンネームテーブルで定義できるフォントデータが(ほぼ)そのまま利用できます。8×8ドットのフォントはMSX-FAN(Mファン)の「ファンダム」などで馴染みがありますし、「自作ゲームには自作フォント」と言わんばかりに様々なフォントが公開されました。ああいったフォントをDMシステム2の装飾機能を織り交ぜて画面に表示させることができます。装飾がかかるだけで見た目は随分と変わるものです、ぜひお試しください!


例えば、こんな感じで

8×8ドットのフォントデータは一般的にMSXパターンネームテーブルの領域をそのまま保存した2KBのファイルで構成されています。ただしDMシステム2ではフォントのアドレスの先頭は20hのコード(=スペース)で無ければなりません。よってパターンネームテーブルそのままのデータではコントロールコードの部分が混ざっていることで正常に表示できませんので、工夫が必要です。以下の対処法を参考にしてください。

1)20h未満のデータを削ってRAMへ配置する。

コントロールコードに割り当てられている32キャラ分、256バイトを飛び越してRAMへ転送する方法。
CALL LOADの「オフセット指定」を利用します。

2)拡張ドライバのパラメータを変更する。

フォントデータはそのままRAMへ配置して、拡張ドライバの宣言時にコントロールコードを飛ばしたアドレスで指定する方法。

3)12×12フォントの作り方

まだフォント生成のノウハウが溜まっていないので、今のところはBASICプログラムによるコンバートで実現しています。

とりあえず、12×12ドットのフォントを以下のような形で左寄せに並べ、SCREEN 5のCGファイルをギガミックスへ転送していただければ、フォントデータにコンバートして差し上げます。

GERMAN.SC5

「こんなフォントが欲しい!」「使いたい!」というフォントのリクエストも募集しています。お気軽にギガミックスまでお寄せください。

● 現状の問題点

(97/06/09)

サンプル画を見ていただいた方はお気づきかもしれません。

フォントによっては、空白が広すぎるんですよ。特に small8 の空きかたは尋常じゃないです。これは、small8の平均的な横幅が3ドットで構成されているところに4ドットの空白(スペース)が作られるからです。さらに実際は文字間で1ドット足されるので、計5ドットの空白が幅を利かせています。文字よりも広い空白はやっぱり気になりますよね。small8の場合、空白は3ドットもあれば十分なんです。

フォントデータごとに「理想的な空白ドット」の情報を埋め込めばこのような不都合は回避されるでしょうが、はたしてそんな情報をどこに埋め込むべきでしょうか!?

今のところ、本来表示できない7Fhの先頭1バイト目に空白ドットの数値を埋め込む案が濃厚です。



(97/06/13)

最新版のDMシステム2・6月11日β版のほうで解決できました。文字詰め時の文字間が横サイズの1/2に自動的に設定される、というものです。つまり8×8ドットの場合、文字間は4ドットになります。こちらで紹介されているサンプル画像は、最新のシステムを組み込むと文字間がちょうど良いくらいの間隔で表示されると思います。

Takashi KOBAYASHI (nf_ban@mic.chiba-net.or.jp)
Copyright 1997 ban's design Inc. All rights reserved.