MSX Datapack wiki化計画

4章 プリンタ・インターフェイス

 本章では、MSXのプリンタインターフェイスをマシン語からアクセスする方法について説明します。ここで述べる情報は、特にビットイメージ印字によってグラフィックを表示するような目的でプリンタを使用する場合に必要となってきます。

 4.1 プリンタインターフェイスの概要

 MSXは規格により8ビットパラレルの出力ポートで、BUSYとSTROBE信号によるハンドシェーク方式でプリンタを動かします。コネクタなども仕様に定められています(アンフェノール14ピン、本体側メス)。信号線表を図6.18に示します。

図6.18 プリンタインターフェイス

 4.2 MSX仕様のプリンタへの出力

 MSXからプリンタへデータを送る場合、送られる側のプリンタがMSX仕様であるか否かによって、その動作は異なります。そこで、まずMSX仕様のプリンタの使い方について説明します。MSX仕様以外のプリンタについては次の節で述べることにします。
 MSX仕様のプリンタは、MSXが画面に表示できるすべてのキャラクタが印字でき、キャラクタコードn=01H〜1FHに相当するグラフィックキャラクタ(月、火、水…)も、グラフィックキャラクタヘッダ(01H)の後に40H+nというコードを出力することによって印字可能です。さらに、MSX仕様のプリンタは、少なくとも、表6.6に示す制御コードが使用できます(漢字印字など、これ以外の機能を備えたプリンタの制御に関しては、それぞれのプリンタの説明書を参照)。
 MSX仕様のプリンタを改行させるためには、0DHと0AHを続けて出力してください(MSX仕様でないプリンタには、ODHのみで改行する機種もある)。ビットイメージ印字を行うには、ESC+“Snnnn”(nnnnは10進4桁の数字)というエスケープシーケンスの後に、nnnnバイトのデータを出力します。ただし、MSXはタブ機能を持たないプリンタのために、タブコード(09H)を適当な数のスペースコード(20H)に変換してプリンタに送る機能があり、通常は常にこの変換を行ってしまいます。09Hという値を含むビットイメージを正しく表示するためには、次のワークエリアを書き換えてください。

【RAWPRT (F418H,1)】内容が00Hならばタブをスペースに置き換え、00H以外ならばそのまま出力する。

表6.6 プリンタ制御コード

コード機能
0AH ラインフィード
0CH フォームフィード
0DH キャリッジリターン
ESC+A 通常の改行間隔 (文字が読みやすいように行間をあける)
ESC+B グラフィック用の改行間隔 (行間の隙間がなくなる)
ESC+Snnnnビットイメージ印字

 4.3 MSX仕様以外のプリンタへの出力

 MSX仕様ではないプリンタを使用する場合に問題となるのは、「ひらがな」をどう扱うかという点です。普通は、カタカナは印字できても、ひらがなは印字できないというプリンタが一般的です。MSXには、そのようなプリンタのために、ひらがなをカタカナに変換して出力する機能があります。BASICからは、SCREEN命令の第5パラメータで指定しますが、これは次のワークエリアを書き換えることによっても可能です。

【NTMSXP (F417H,1)】内容が00Hならば、ひらがなをカタカナに変換、00H以外ならば、ひらがなをそのまま出力。

 4.4 プリンタのアクセス

 プリンタへの出力を行うために、以下に示すBIOSルーチンが用意されています。プリンタの機能については、「第7部 6章 24ドット漢字プリンタ」を参照して下さい。

LPOUT (00A5H/MAIN)
機能

プリンタへデータを出力します。

コール手順

Aデータ
戻り値

異常終了時はCYフラグON

変更レジスタ
F
解説
Aレジスタで指定したデータをプリンタに出力します。

LPTSTT (00A8H/MAIN)
機能

プリンタの状態を獲得します。

コール手順
なし
戻り値

Aプリンタの状態
変更レジスタ

AF

解説
現在のプリンタの状態をチェックします。このルーチンを呼び出して、Aレジスタが255でかつZフラグが0ならばプリンタは使用可能で、Aレジスタが0でかつZフラグが1ならば使用できません。

OUTDLP (O14DH/MAIN)
機能

プリンタへデータを出力します。

コール手順

Aデータ
戻り値

異常終了時はCYフラグON

変更レジスタ
F
解説
Aレジスタで指定したデータをプリンタに出力します。LPTOUTルーチンとの相違点は次のとおりです。

  1. TABコードは相当する個数のスペースをプリントします。
  2. MSX仕様でないプリンタでひらがなを出力する場合、カタカナに変換します。
  3. 異常終了した場合、「Device I/O error」となって返ってきます。