このエントリーをはてなブックマークに追加
スポンサーリンク

FMPR-201系制御コード

FMPR-201

富士通のカラー熱転写プリンターです。富士通FM-7シリーズ用のプリンターとして使われてきました。現在でもFM-R用のプリンターとして業務で使われているプリンターには、同様のFMPR-201系の制御コードを受け付ける(エミュレーションですが)ものもあります。

後継機としてFMPR-202/203/204があり、同様にFM系の制御コードを使うことができます。

以下の説明で<1B>や<1C>は16進数で0x1b(ESC)と、0x1c(CEX)のコードを示します。その他は特に説明がない限りはバイナリではなくテキストで指定します。

漢字オン、漢字オフ

<1B>$@ ・・・ JIS-78漢字オン <1B>$B ・・・ JIS-83の漢字オン
<1B>(H ・・・ 漢字オフ
JIS-78は主にPC9801で使われている体系で、一部記号(@や♪など)や、一部の文字(桧や篭)の文字に相違があります。通常、PC9801で使わない限りはJIS-83を指定します。

半角全角まじりの文書を指定する場合は、半角から全角への境目で<1B>$Bを送出し、全角から半角への境目で<1B>(Hを送出する事になります。また、全角文字はプリンターに送出する際にはシフトJISコードからJISコードに変換しておく必要があります。

文字間ピッチの指定

半角送り量ピッチの指定
<1B>[左側送り量ピッチ;右側送り量ピッチ G

実際の半角1文字あたりの文字間ピッチは、左側の送り量と右側の送り量の合計ですが、左側に指定すると文字の左側に空白が補われます。右側に指定すると文字の右側に空白が補われます。

たとえば、10CPIにするためには1インチ10文字にする、つまり1文字1/10インチにする必要があります。ここでFM-PR201は180DPIなので、1ドット1/180インチで、1文字が18ドット分のピッチなら18/180インチ、つまり1文字1/10インチとなります。
<1B>[;18 G
この例では右側に空白を補っています。同様に、12CPIにするなら、1文字15ドットに設定します。
<1B>[;15 G
文字のサイズよりも少ない量を指定しても、少なくともFMPR-201では文字が欠けたり重なったりはしませんで、0とみなされました。ただしレーザープリンターでFMエミュレーションモードがある場合ではまた挙動も変わってくるかもしれません。

全角文字ピッチ指定
10CPIにする
<1C>$#v
12CPIにする
<1C>$#p

全角の文字ピッチ指定で、他のFMプリンターでは細かく量を指定できる機種もあるようですが、FMPR-201では10CPIと12CPIぐらいしか指定できなかった記憶があります。

行間ピッチの指定

改行幅はデフォルトでは1/6インチですが、イメージ印刷や縦罫線などで行間をくっつけたい場合は1/8インチ改行に変更する必要があります。

書式
<1B>Q分子;分母 G

改行を分子/分母インチに指定します。<1B>Q1;8 Gなら1/8インチ、<1B>Q1;6 Gなら1/6インチになります。

イメージ印字

プリンタにイメージを送信します。

書式
<1B>Q列数 Wデーター ・・・ 倍密度等幅
<1B>Q列数 Vデーター ・・・ 単密度倍幅
<1B>Q列数 Xデーター ・・・ 倍密度倍幅

列数はキャラクターコードで指定しますので、バイナリデーターはWやVやXの後に来ます。データーは1列3バイトですので、バイナリデーターは列数×3のデーター量になります。

データーの作成方法
1列分のデーターを作成する際に、上位ビットが上なのでドットを上から下へキャリーフラグを含んで左シフトしながら3バイト分ローテーションさせて作成します。

例)
ドットの検査、ドットがあればSTC、なければCLC
RCL BYTE PTR [LDAT3],1
RCL BYTE PTR [LDAT2],1
RCL BYTE PTR [LDAT1],1
を、ドットを縦に検査しながら24ドット分繰り返します。

できあがった1列分データーを必要な列分作成して、プリンターに送信します。プリンタードライバー(FMPRT.SYS)ではこのバイナリバイト数分だけ透過モードとなり、シフトJIS→JISコードへの変換を行わなくなります。

ハードコピードライバー(GRAPHFM.COM)では、<1B>Q1280 Wに続いて、1280列分のデーターを送信しています。

外字印字

プリンターに内蔵されていないフォントを、外字として登録する事ができます。FMPRT.SYSでは、/UFOオプションを指定することでJFGAIJ.UFOファイルを読み込んで外字エリアに転送を行う事ができます。

書式
<1C>20文字コード外字データー

文字コード
外字として登録するコードを2バイトのJISコードで指定します。FM-PR201では外字エリアは2821〜287E、2921〜297Eです。8086アセンブラで作る場合注意しなければならないのは、8086アセンブラでは2バイトコードをリトルエンディアンで扱いますが、このプリンタでは2バイトコードをビッグエンディアンで扱うので、

MOV AX,[ADDR2]
XCHG AH,AL
MOV [ADDR],AX

のように計算用メモリーからプリンター送信用メモリーに転送する際に、XCHGコマンドを使って上位/下位バイトを逆転させる必要があります。FMのパソコンは当初モトローラー系のCPUを使っていたので、プリンターのコマンドもビッグエンディアンなのでしょう。

外字データー
FMはNECやESC/Pと違い画面用と同じように1バイトが横1スライスを表します。また、FMは外字登録でバイナリデーターが送信されないため、シフトJISコードの2バイトコードと重なるデーターが送信される可能性がありません。したがって、外字登録コマンドではプリンタードライバーの方で透過処理をする必要がありません。

データーの上位4ビットは0011で固定となるため、16進数で3xとなります。このxの部分4ビットで外字データーを送信します。
;==============================================================================
;           画面用フォント  →  プリント用フォント
;==============================================================================
P_HENKAN	=	$

;---------16進数→富士通形式
		MOV	SI,OFFSET KANPAT
		MOV	DI,OFFSET PRPAT
		MOV	CX,72

FUJIHEN1	=	$
		MOV	AL,[SI]
		AND	AL,11110000B
		SHR	AL,1
		SHR	AL,1
		SHR	AL,1
		SHR	AL,1
		OR	AL,00110000B
		MOV	[DI],AL

		MOV	AL,[SI]
		AND	AL,00001111B
		OR	AL,00110000B
		MOV	[DI+1],AL

		ADD	SI,1
		ADD	DI,2
		LOOP	FUJIHEN1

		RET

その他のコマンド

以下のコマンドは当プリンタードライバーでは使ってませんが参考資料として掲載します。

書体指定
<1C>(00 ・・・ ドラフト
<1C>(01 ・・・ レギュラー
<1C>(10 ・・・ 明朝
<1C>(11 ・・・ ゴシック
ドラフト/レギュラーは半角フォント、明朝/ゴシックは全角フォントの指定です。デフォルトでは、半角はドラフト、全角は明朝です。

<1C>T ・・・ プロポーショナルピッチ指定
<1C>U ・・・ プロポーショナルピッチ解除
<1C>N ・・・ 上つき文字指定
<1C>O ・・・ 上つき文字解除
<1C>P ・・・ 下つき文字指定
<1C>Q ・・・ 下つき文字解除

拡大/縮小
<1C>'倍率 ・・・ 全角文字倍率指定
<1B>[縦倍率;横倍率 B
倍率はパーセンテージで指定しますが、FMPR-201では全角文字の倍率は50/100/200、半角文字は縦は100のみ、横は100/200しか指定できなかったと思います。

アンダーライン
<1C>*値 ・・・ 全角アンダーライン指定/解除
<1B>[値m ・・・ 半角アンダーライン指定/解除

ここで、値の部分に0を指定するとアンダーライン解除、0以上を指定するとアンダーラインを引く事ができます。カラーリボンがついている場合はアンダーラインではなく色指定となります。カラーコードは・・・・忘れてしまいました。多分FM7のカラーコードと同じだったんじゃないかと。

縦書き
<1C>J ・・・全角の縦書き指定
<1C>K ・・・全角の横書き指定
<1B>Q0 p ・・・ 半角2文字ペア
<1B>Q1 p ・・・ 1文字だけ
漢字を縦書きする場合に、半角文字を2文字ずつペアにして横に並べて印刷する事ができます。

罫線
<1B>Q0 t ・・・罫線接続しない(デフォルト)
<1B>Q1 t ・・・罫線接続する
罫線接続指定をすると、グラフィックキャラクターの−を続けて印刷した時に横が繋がって印刷されます。ただし、改行幅を1/8にしておかないと縦は切れてしまいます。

未定義文字
<1B>0 x ・・・ 未定義文字を豆腐にする。(デフォルト)
<1B>1 x ・・・未定義文字をスペースにする。
文字の定義されていない文字コードを指定した場合に、豆腐を印刷するか空白を印刷するかを指定します。

参考文献
FMPR-201取扱説明書

スポンサーリンク