テクハンwiki

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

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

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

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


図5.20 プリンタ・インターフェイス

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

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

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

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

表5.4 プリンタ制御コード

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

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

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

 4.4 プリンタのアクセス

 プリンタへの出力を行うために、以下に示すBIOSルーチンが用意されています。

● LPOUT (00A5H/MAIN)
入力:Aレジスタ←文字コード
出力:異常終了時CYフラグ=ON
機能:Aレジスタで指定した文字をプリンタに出力する。

● LPTSTT (00A8H/MAIN)
入力:---
出力:Aレジスタ←プリンタの状態
機能:現在のプリンタの状態をチェックする。このルーチンを呼び出して、Aレジスタが255でかつZフラグが0ならばプリンタは使用可能であり、Aレジスタが0でかつZフラグが1ならば使用できない。

● OUTDLP (O14DH/MAIN)
入力:Aレジスタ←文字コード
出力:異常終了時CYフラグ=ON
機能:Aレジスタで指定した文字をプリンタに出力する。LPTOUTルーチンとの相違点は次のとおりである。
  ・TABコードは相当する個数のスペースをプリントする。
  ・MSX仕様でないプリンタでひらがなを出力する場合、カタカナに変換する。
  ・異常終了した場合、Device I/O Errorとなって返ってくる。