Gigamix DM-SYSTEM2

漢字表示機能

updated:

第1章 概要

 日本人ならメッセージは漢字混じりで伝えたい…しかしMSX2で漢字混じりの文字列を表示するのは実は簡単ではありません。日本語表示に対する本体機能が貧弱だからです。

 BASICのPUT KANJI命令では1命令でたった1文字しか表示できません。漢字BASICに頼れば確か漢字を表示するのは簡単ですが、たかだか漢字を手軽に表示したいが為に漢字BASICを用いることで事実上「MSX2+規格以降対応ソフト」と定義せざるを得なくなることでMSX2ユーザーを切り捨てることになります。これはとても勿体ないことであると当クラブは考えています。

※ MSX2で漢字BASICを利用するには「日本語MSX-DOS2カートリッジ」や「HBI-J1」等の周辺機器が必要です。しかしこれらの周辺機器は現在入手が非常に困難です。

 そこで、MSX2規格から動作する、強力な漢字表示機能を搭載したDMシステム2をおすすめします。DMシステム2は漢字文字列のエディットこそできませんが、表示に関してはMSX業界屈指の完成度を自負しています。

SCREEN12の絵の上に影付き文字を表示するサンプルプログラム(WebMSXで動作)。https://webmsx.org/?DISKA=https://www.gigamix.jp/ds2/download/INNU.DSK&MACHINE=MSX2PJ だいたいこんな感じです! pic.twitter.com/tPRpsGB4hw — Takashi Kobayashi (@nf_ban) 2019年12月2日
自然画モード(SCREEN12)でも使えます!
Download DSK(267KB)
Run INNU.DSK on WebMSX

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

 漢字装飾機能が多岐にわたるため、表示する前に設定する項目が沢山あります。DMシステム2では以下の7命令で漢字表示を行います。

太さの設定 CALL KBOLD ([文字x][,y][,縁x][,y][,影x][,y])
色の設定 CALL KCOLOR ([文字][,背景][,縁][,影])
装飾効果の設定 CALL KINIT ([設定項目][,影x][,影y][,斜体table][,色table])
漢字の表示 CALL KPRINT (文字列[,制限文字数])[,TPSET]
漢字の高速表示 CALL KPUT (文字列[,制限文字数])[,TPSET]
表示サイズの設定 CALL KSIZE ([横][,縦][,文字間])
表示位置の設定 CALL XY (X座標,Y座標)

※「BASICリファレンス」も合わせてご覧ください。

※漢字装飾機能はSCREEN4以下のスクリーンモードではご利用いただけません。


2.1 漢字機能の初期化

 まずこの命令でDMシステム2の各種装飾効果の設定を初期化してください。

CALL KINIT

 初期化を省くと以前の設定を引きずることになります。ワザと引きずる場合は、これを実行する必要はありません。

2.2 各種装飾の設定

 DMシステム2の漢字機能で使用できる装飾効果8項目をビット単位で具体的に設定します。

CALL KINIT(設定項目)

 ビットは0でoff、1でonになり、8ビット(1バイト)の数値で設定します。初期化するとすべて0(off)になります。

   b7 b6 b5 b4 b3 b2 b1 b0
   i C R P V I S B
   ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ bit0	縁取り   (0:off 1:on)
	|  |  |  |  |  |  +--- bit1		   (0:off 1:on)
	|  |  |  |  |  +------ bit2	斜体	 (0:off 1:on)
	|  |  |  |  +--------- bit3	方向	 (0:横書き 1:縦書き)
	|  |  |  +------------ bit4	文字詰め (0:off 1:on)
	|  |  +--------------- bit5	処理単位 (0:文字 1:装飾)
	|  +------------------ bit6	色変更   (0:off 1:on)
	+--------------------- bit7	インターレース (0:off 1:on)
縁取り(bit0)
文字の周りに縁取りを書きます。縁取りの色と太さも変更できます。
影(bit1)
文字に影を書きます。影の位置は文字の左上を起点にします。
影の位置や色、太さも変更できます。
斜体(bit2)
文字を斜体(やや斜めに傾いた形)にします。
オリジナルの斜体を作ることもできます。
方向(bit3)
0:横書き  文字列を横書きで表示します。
1:縦書き  文字列を縦書きで表示します。
文字詰め(bit4)
文字(漢字フォント)のデザインによる空白を埋めて、文字同士がピッタリと密着します。
同じ文字数の文字列を並べて表示しても、文字詰めをonにすると文字のデザインによっては表示した文字列の長さが揃わないことがあります。

※縦書きモードでは文字詰めは無効になります。

処理単位(bit5)

後述の CALL KPRINT や CALL KPUT で表示する文字列に対して行う処理を文字単位で区切るか、装飾単位で区切るかを決定します。
0:文字単位  設定されたすべての各種装飾を1文字ずつ処理し終えてから次の文字を処理します。
1:装飾単位  設定された各種装飾1行分を一気に処理してから次の装飾を処理します。

装飾単位にすると、影は影で一行書いた後に文字を一行重ねる感じになります。これは、影の位置が文字の位置よりも左にあった場合、一つ前の文字を影で潰してしまうことを回避する為に用意されています。表示したい装飾機能を事前に決めてから、これを決めてください。

装飾単位では以下の制限があります。

色変更(bit6)
文字の1文字(または1ライン)ごとに色を変更します。
色を設定する色テーブルは事前に用意しておく必要があります。
インターレース(bit7)

漢字をインターレース表示にします。インターレースonにするとVRAMの次のページを使用し、縦に小さい文字が表示できます。

※インターレースはSCREEN5以上のVRAMモードで使用できます。

実際の使用法:

ex.)
CALL KINIT(1) ←縁取りだけon
CALL KINIT(2) ←影だけon
CALL KINIT(4) ←斜体だけon

ビット設定は慣れるまで難しい…。慣れないうちは2進数のまま8ビットを設定すると分かりやすいと思います。

ex.)
CALL KINIT(&B00000001) ←縁取りだけon
CALL KINIT(&B00000010) ←影だけon
CALL KINIT(&B00000011) ←影と縁取りをon
CALL KINIT(&B00000111) ←斜体と影と縁取りをon
CALL KINIT(&B00001111) ←上のに文字詰めonを追加
CALL KINIT(&B10001111) ←さらにインターレースonを追加

2.3 文字の太さの設定

表示する漢字文字列の「太さ」を設定します。

CALL KBOLD(文字x,文字y,縁取りx,縁取りy,影x,影y)

太さはドット単位でそれぞれ1~16を設定できます。ただしあまり太すぎると文字のサイズ(後述)によっては本来の文字が潰れて見えなくなってしまうことがありますので、ほどほどにしておきましょう。

ex.)
CALL KBOLD(2,1) ←文字の横への太さを2にする
CALL KBOLD(,,3,3) ←縁取りの太さをxyそれぞれ3に
CALL KBOLD(,,,,3,3) ←影の太さをxyそれぞれ3にする

影だけに関しては、影xか、影yに0を入れると、縁取りと文字の太さによって影の太さを自動的に計算します。不自然な影を作らない為の機能です。

※1997年6月3日の時点ではまだ自動的に計算しないようです(^^;

ex.)
CALL KBOLD(2,1,3,3,0,0) ←影xの太さは2+3=5、影yは1+3=4

2.4 文字の色の設定

表示する漢字文字列の「色」を設定します。

CALL KCOLOR(文字色,背景色,縁取り色,影色)

色はMSX2のカラーコードと同等のものです。表示するスクリーンモードによってはカラーの設定が変わりますのでご注意下さい。

ex.)
CALL KCOLOR(15,0) ←文字色を15、背景色を0
CALL KCOLOR(,,3) ←縁取り色を3
CALL KCOLOR(172,,,64) ←文字色を172、影色を64 (SCREEN8)
※CALL KCOLORでは以下の制限があります。
  • SCREEN10・11ではRGBカラー(0~15の指定)となります。
  • SCREEN12ではYJKのY成分のみ(0~31の指定)となります。
  • CALL KINITの色テーブルをonにした場合、文字色は無視されます。

2.5 文字のサイズの設定

表示する漢字文字列のサイズ(大きさ)を設定します。

CALL KSIZE(横サイズ,縦サイズ)

サイズはドット単位で1~64で設定しますが、横サイズは「半角」単位で設定します(よって横サイズは1~32になります)。

ex.)
CALL KSIZE(8,16) ←16×16ドットを設定
CALL KSIZE(4,12) ←8×12ドットを設定

2.6 文字の位置の設定

表示する漢字文字列の表示座標を設定します。

CALL XY(x座標,y座標)

実は、単にMSX2のシステムワークである「グラフィックアキュムレータ」を読んで、位置を設定するだけの命令です。よって、PSET命令など既存の命令で代用することも可能です。

ex.)
CALL XY(128,64) ← 表示開始座標を(128,64)に設定する ※点が描画されない
PSET(128,64) ← 上に同じ ※点が描画される
DRAW "BM128,64" ← 上に同じ ※点が描画される

CALL XY は点を打つ・消す手間が省けるうえ、SCREEN5以上の画面モードでは画面外のy座標を設定することによって裏画面の座標を設定することができます。(+256ごとに次のページ)

ex.)
PSET(512,64) ←SCREEN5ではページ2の(0,64)を指定する

2.7 そしてようやく漢字表示

設定された装飾機能を用いて、漢字文字列を表示します。

CALL KPRINT("文字列")

CALL KPRINT は CALL K? と略すこともできます。

ex.)
CALL KPRINT("うなぎ大王") ←「うなぎ大王」を画面に表示
CALL K?("うなぎ大王") ←上に同じ
※CALL KPRINTではスクリーンモードにより以下の制限があります。
  • SCREEN10、11、12ではVRAM情報によっては色バケが生じます。

2.8 ロジカルオペレーションを指定する

表示したい漢字文字列に対し、MSX2以降のVDP(V9938/V9958)で対応する「ロジカルオペレーション」をかけることができます。

CALL KPRINT("文字列"),ロジカルオペレーション

ロジカルオペレーションはCOPY文で使用できるものがそのまま流用できます。特に「背景との重ね合わせ(,TPSET)」は多用されることでしょう。

ex.)
CALL K?("馬なり"),AND ←「馬なり」をANDで表示
CALL K?("馬なり"),TPSET ←「馬なり」をTPSETで表示
CALL K?("馬なり"),TXOR ←「馬なり」をTXORで表示

2.9 機能限定・高速漢字表示

装飾を簡略化し、表示を高速化します。

CALL KPUT("文字列")

装飾が簡略されるとは言いつつも、とりあえず影だけは文字の横に付きます。文書を速く表示させたい場合に用いましょう。

※CALL KPUTでは以下の制限があります。
  • サイズは 12 又は 16固定(12、16以外の数値は近似値)。
  • 文字と影の太さは1固定、影の位置は(1,0)固定。
  • ロジカルオペレーションは無視されます(背景を潰します)。
  • 縁取り、斜体、文字詰め、文字方向、処理単位は無視されます。

第3章 ちょっとマニアックな活用方法

3.1 影の位置

通常、影は文字の左上の座標(0,0)に表示させており、そのままでは影が文字に潰されて、結果的に影が見えません。が、影の位置は何も(0,0)である必要はなく影の位置を自由に設定できます。

CALL KINIT(設定項目,影位置x,影位置y)

影の位置は文字の左上の位置から縦横それぞれ-128~127で設定できます。

ex.)
CALL KINIT(,3,3) ←文字の位置から(3,3)で影を表示

※ 影の位置を文字の位置より左 又は 上へ設定すると、サイズや太さによっては影で一つ前の文字を潰してしまうことがあります。

3.2 オリジナルの斜体テーブル

DMシステム2が用意している斜体以外にも、オリジナルの斜体を作ることができます。

CALL KINIT(設定項目,影位置x,影位置y,斜体テーブル)

「斜体テーブル」を事前に作成して、その先頭アドレスを代入してください。

斜体テーブル説明

「斜体テーブル」は1ラインごとに左端からの移動量-128~127を設定、表示サイズy分+32を用意する必要があります。また、影や縁取りなどの装飾効果を行った際は、その太さ分だけさらにテーブルを用意する必要があります。

文字の1ライン目に対して斜体テーブルが有効になるのはテーブルの先頭アドレスから32バイト先になります。32バイト目よりも前のデータは

など、文字の1ライン目よりも上のラインへ表示を行うような装飾効果を行った際に、それぞれのラインに対して有効になります。

※ 太さ1の縁取りをかけた場合、斜体テーブル+31バイト目からデータを用意することになります。

ex.)
CALL KINIT(,,,&HC000) ←斜体テーブルをc000hと設定

3.3 「色変更」モード用の色テーブル

CALL KINITには文字の色を1ラインごとに可変できる「色変更」モードがあります。その際に必要なのが「色テーブル」です。

CALL KINIT(設定項目,影位置x,影位置y,斜体テーブル,色テーブル)

斜体テーブルと同様、「色テーブル」を事前に作成して、その先頭アドレスを代入してください。

次に、DMシステム2のインフォメーションエリアを下記のように書き換えます。

CALL POKE(&H4300+141,&B10001100) ← 文字に対して色変更をかける
CALL POKE(&H4300+149,&B10001100) ← 縁取りに対して色変更をかける
CALL POKE(&H4300+157,&B10001100) ← 影に対して色変更をかける
色変更テーブル説明

「色テーブル」は1ラインごとにカラーコードを設定、表示サイズy分+32を用意する必要があります。また、影や縁取りなどの装飾効果を行った際は、その太さ分だけさらにテーブルを用意する必要があります。

文字の1ライン目に対して色テーブルが有効になるのはテーブルの先頭アドレスから32バイト先になります。32バイト目よりも前のデータは

など、文字の1ライン目よりも上のラインへ表示を行うような装飾効果を行った際に、それぞれのラインに対して有効になります。

※太さ1の縁取りをかけた場合、色テーブル+31バイト目からデータを用意することになります。

色変更を終了させるには CALL KINIT を実行するか、書き換えた各インフォメーションエリア&B10000000(128) を書き込んでください。

ex.)
CALL KINIT(,,,,&HC000) ←色テーブルをC000hと設定

3.4 文字間

表示する漢字文字列に「文字間」を設定します。ここをいじれば文字間を詰めたり、広げたりできます。

CALL KSIZE(横サイズ,縦サイズ,文字間)
ex.)
CALL KSIZE(,,4) ←常に4ドット開けて文字列を表示する

3.5 文字表示に効果音を付ける

インフォメーションエリアの「効果音番号(KJSE:4300h+199)」へSE番号を代入することにより、1文字表示するごとに効果音が鳴るようになります。ゲームのメッセージ表示などに用いると面白そうです。

ex.)
CALL POKE(&H4300+199,3) ←1文字ごとにse #3を鳴らす

これを実行する前に、事前にSEデータをメモリへ用意しておく必要があります。CALL SETSEによるSEの初期化も必要です。

※「装飾単位」モードでは利用できません。
※ 効果音については「効果音機能(ds2se.txt)」をご覧ください。

3.6 表示スピードを変える

インフォメーションエリアの「ウェイト(KJWAIT:4300h+195)」へ1/60秒単位の数値を代入することにより、文字列の表示スピードを調節できます。これもゲーム向けと言えます。

ex.)
CALL POKE(&H4300+195,3) ←1文字ごとに3/60秒待つ

※「装飾単位」モードでは利用できません。

第4章 外部フォント

4.1 漢字表示とフォントドライバ

 DMシステム2では通常、多くの機種に搭載されているMSX標準・16ドット漢字ROMを用いて漢字表示を行っています。

しかし日本の廉価版MSX2では漢字ROMが搭載されなかったモデルも発売され、しかもその廉価版がきっかけでMSX市場が伸びた過去がある為、結果的に漢字ROMの搭載されなかったMSXが数多く出回りました。こういったマシンでは当然のことながら漢字表示ができません。よって市販のゲームソフトでもソフトにフォントを内蔵したり、半角だけで表示するなどして苦境を乗り越えていました。

DMシステム2でもやはり漢字ROMを利用していますが、漢字ROM以外に外部(RAM、VRAM、スロット等)でフォントを用意することができれば、DMシステム2ではそのフォントを利用して漢字表示が行えます

そういった際に必要なのがフォントドライバです。フォントドライバとは、表示したい漢字のフォントデータを漢字ROM等、既存のメモリからデータを取り出す専門のルーチンです。

フォントドライバは基本的に「16×16ドット」「12×12ドット」の2種類を登録でき、その出荷時の設定は以下の通りです。

16×16ドット
MSX標準 漢字ROM
12×12ドット
MSXView(A1GT内蔵)12ドット漢字ROM

 DMシステム2に対応しているフォントドライバを差し替えれば、漢字ROM以外のフォントを利用できるようになります。

 12×12と16×16の両方のドライバが有効な場合、表示サイズによってそのとき使用するドライバが自動的に決められます。具体的には以下の通りになります。

 片方のドライバのみが有効な場合、すべてのサイズでその有効なドライバが使用されます。

ドライバについて | フォントドライバについて もお読みください。

4.2 プレイヤーから見たメリット

 前述の「逃げ道」とはこのことで、漢字ROMは無くともオリジナルの漢字フォントを用意できるMSX2ユーザーは、この周辺機器に対応したフォントドライバを組み込むことで漢字ROMの搭載したハード環境とほとんど同じように漢字を表示できる仕組みです。これはDMシステム2上で動作するソフトウェアすべてに共通します。「漢字ROM(または漢字BASIC)が無いMSX2には対応しない」という、対象ユーザーを限定してしまう今までの手法では到底実現しなかった画期的なものです。

※ ハードウェア的に漢字ROMと互換になるわけではありません。PUT KANJI命令や漢字BASICによる漢字表示に効果が出ることもありません。

 漢字ROMカートリッジの入手が困難になる昨今ですが、最近では 要町 as MSX-View などの「MSXView互換のフリーフォントROMイメージ」を「似非RAMカートリッジ」や各種Flashカートリッジなどの「ROMエミュレーションカートリッジ」へインストールすることで「MSXView」互換のカートリッジを自作することが容易となり、DMシステム2やMSX-DOSの各種対応アプリで日本語表示が可能になりつつあります。

 「MSXView」はMSX turboR専用のGUIソフトで、FS-A1GTにもROMが内蔵されていました。付属の漢字カートリッジ自体はMSX1・MSX2・MSX2+でも接続できるメガROMカートリッジであることから、MSX系のパソコン通信で当時流通していたフリーソフトではこのフォントをサポートする傾向にありました。もちろんDMシステム2でもこの漢字フォントを「12pxフォント」として標準でサポートしています。

 フォントドライバの変更は「ユーティリティーディスク」のセットアップツールで行います(自力でドライバを変更することもできます)。また、最近ではDMシステム2を搭載したソフトが自動的にフォントドライバを変更して漢字表示できるよう作られたものもあります。

4.3 クリエイターから見たメリット

 DMシステム2でソフトを構築すれば、漢字ROM搭載の有無を意識せずに日本語の文字表現を利用できます。

 これまでの手法ではクリエイターは漢字ROMの搭載されていない機種のユーザーに対して「漢字ROMが無いなら諦めてください」と言ったり「グラフィックとしてソフトに内蔵するが文字数は限定的」な方法しかありませんでしたが、DMシステム2を利用すればより多くのユーザーを動作対象者に変えることができます。

 漢字ROMカートリッジを探し出すより、現在では似非RAMカートリッジを製作したほうがてっとり早い現状を考えると、ユーザーに「使える」可能性だけでも残しておく事はとても有益ではないかと思っています。

 できれば、ソフトの初期設定プログラム中に漢字表示が可能かどうかをチェックし、表示ができないようなら別のドライバに差し替えるくらいの「気配り」を作ると最高なのですが。

※ 当クラブのソフトでは初期設定プログラムで漢字表示をチェックし、漢字表示がどうしても行えない場合、ANKフォントドライバをインストールして、半角文字を強引に全角文字として表示させています。

 気になる漢字BASICからの移行は、DMシステム2上でのプログラムの表記は「漢字BASIC」と似ていることから、比較的容易に行えるはずです。漢字BASICを利用することでどうしても生じるデメリット(メモリが制限されたり、FM音源を併用すると動作不安定になる)が、DMシステム2ではまずありませんので、ぜひ漢字BASICからの移行をオススメします。

 機種間・規格間の動作の違いについても、現在当クラブで確認できる機種についてはすべて共通した動作をしています(フォント自体のデザインによる表示の違いは考えないことにします)。MSX2、MSX2+、MSXturboR、各種MSXエミュレータの規格を越えて共通した動作環境をDMシステム2では自信を持って提供します。

4.4 マッパーRAMへフォントを転送する

 本体RAMを128KB以上搭載する機種では、漢字フォントをマッパーRAMへインストールすることにより、そのフォントをDMシステム2上で利用することができます。

 つまるところ、漢字ROMが無いMSX2でも、RAMさえあればなんとかなる状況です。特に海外製の機種では有効的に利用可能です。

※ 64KB以下の拡張RAMカートリッジは一マッパーRAMの規格に準じておりませんので非対応です。

※ ハードウェア的に漢字ROMと互換になるわけではありません。DMシステム2のフォントドライバは、PUT KANJI命令や漢字BASICによる漢字表示に効果はありません。

フォントをマッパRAMへインストール もお読みください。

第5章 補足

5.1 半角文字(ANK)について

 基本的にフォントドライバがサポートしている漢字フォントの半角文字を使用します。半角文字が無い漢字フォントの場合は、半角文字が出ないこともあります。

 なお、半角文字に限り「拡張フォントドライバ」による装飾表示が可能です。拡張フォントドライバ(とフォントデータ)を用意すれば、漢字表示で使用されるフォントデータとは別のフォントで半角文字を表示できます。

半角表示の装飾 もお読みください。

5.2 漢字BASICとの共存について

 プログラミングは漢字BASIC上で、プログラムの実行(表示)はDMシステム2という、DMシステム2と漢字BASICとの共存は、可能です。

 ですが、DMシステム2のインストール後に漢字BASICをインストール(CALL KANJIを実行)すると、実行環境によってはMSXが極端に不安定になり、MSX-JEで文字入力した途端いきなり暴走したり、誤動作を起こす場合があります。最悪の場合ユーザー辞書や学習内容が消えることもあります。安定したプログラミング環境を構築するには、以下の手順に従ってください。

  1. BASICフリーエリアをできるだけ広げてください。MSX-DOS2/Nextor環境が理想ですが、DOS1環境なら通信モデム等フリーエリアを消費するカートリッジを取り外したり、Ctrlキーを押しながらMSXの電源を入れてください。
  2. MSX BASICのプロンプト表示が出たら、CALL KANJI で、漢字BASICを起動します。
  3. 漢字BASICを起動した後、DMシステム2をインストールします。
  4. D800h (は目安の一つで、厳密には漢字BASICをインストールした時点でのHIMEM)を越えないようにプログラミングを行ってください。

5.3 エスケープシーケンス(ESC)について

 CALL KPRINT(CALL K?)の文字列中にCHR$(27)に続く以下のコードを埋めこむことにより、装飾機能を一時的に変更することができます。これを使用すると突然文字を大きくしたり、色を変えたりできます。

[3nm 文字色 (n=0~7) ※ANSI互換
[4nm 背景色 (n=0~7) ※ANSI互換
[m 初期化 (文字色:7 背景色:0)
"]F"+CHR$(c) 文字色
"]B"+CHR$(c) 背景色
"]S"+CHR$(c) 影色
"]O"+CHR$(c) 縁色
"]f"+CHR$(32+x)+CHR$(32+y) 文字の太さ
"]s"+CHR$(32+x)+CHR$(32+y) 影の太さ
"]o"+CHR$(32+x)+CHR$(32+y) 縁取りの太さ
"]s"+CHR$(32+x)+CHR$(32+y)+CHR$(32+z) 文字サイズ・文字間

 なお、文字列表示中に文字サイズを変更した際、ベースラインは常に下になります。

※ ESCコードにより変更された内容はその文字列内でのみ有効です。
※「装飾単位」モードでは利用できません。

5.4 漢字表示が崩れるトラブルについて

 MSXに搭載されたVDP(V9938/V9958)には、VDPコマンド実行直後、それを描画する領域に他のVDPコマンドを実行すると以前の処理がキャンセルされて描画が正常に行われないという制約があります。

 DMシステム2の漢字表示機能では、処理の高速化の為、あえてVDPの処理終了をチェックしていません

 MSXのVDPには「VDPコマンドとI/Oアクセスは同時に実行できる」という裏技(!?)があるので、CALL KPUT に限り「画面塗りつぶしと漢字表示を同時に処理」なんてマニアックな使い方ができます。

 しかしVDPの処理終了チェックを省いたことにより、漢字表示後の処理によっては漢字表示が正常に行われない現象が生じることがあります。特に、LINE命令やCOPY命令などで描画を開始した(VDPコマンドを実行した)直後に、漢字表示など新たな描画命令がその描画中の領域へ上書きするような場合に、この現象が生じます。

 これを未然に防ぐ為、DMシステム2にはVDPの処理中かどうかをチェックし、処理中ならウェイトがかかる CALL VDPWAIT という命令があります。もし漢字表示が崩れる場合はそれらの処理直後に CALL VDPWAIT を追加してみてください。

 なお、文字列表示中、x座標が画面サイズを超えた場合は、以降の文字列は無視されますので、画面サイズを超えないような座標を指定し直してください。

[Back]トップページへ