東芝デュアルモードプリンター制御コード
東芝デュアルモードプリンタとは
東芝から発売されたJ-3100シリーズ用に作られたプリンタのうち、日本語モード/英語モードの双方に対応しているプリンタの事です。
もともとJ-3100シリーズにはDCGA(640x400)を使った日本語モードと、EGA、CGAを使った英語モードがあり、Ver3.xxの頃はそれぞれ別々のOS(日本語MS-DOS、英語MS-DOS)として発売されていました。(ただし日本語MS-DOSは、ほとんどの機種で標準で付属)
これが日英DOS5.0ではchevコマンドによって日本語/英語モードが切り替えられるようになりました。
ところが、プリンタはそうはいかず、プリンタではデュップスイッチによって日本語モード/英語モードを切り替えるようになっています。おそらくモードを頻繁に切り替える使い方は想定してなかったのでしょう。
デュップスイッチ
ここでは「PWS5271A」のデュップスイッチについて説明します。したがって、「J31DMPxx」シリーズとは異なる場合があります。マニュアルがPWS5271Aしか手に入らなかったもので、申し訳ありません。
SW8
オン・・・日本語
オフ・・・英語
8つあるスイッチのうちSW8が一番重要なスイッチといっても過言ではないでしょう。スイッチ1~7は、このスイッチ8の状態によって意味が異なるので注意が必要です。デフォルトはオンです。
日本語モード時
SW1
オン・・・未定後の1バイトコードをスペースとして処理
オフ・・・未定義の1バイトコードを無視
00H~1FHの間でコマンドとして定義されてないコードを受信した場合、スペース(20H)とみなすか、無視するかを選択します。デフォルトはオフです。
SW2
オフに固定
SW3
オン・・・自動給紙装置を使う
オフ・・・自動給紙装置を使わない
オンにすると自動給紙装置用のスプロケットが動作します。デフォルトはオフです。
SW4
オン・・・ラインオーバーした時に紙送りする
オフ・・・ラインオーバーしても紙送りしない
例えば、1行が80カラムまでしか印刷できないプリンタの場合は80カラム、136カラムまでしか印刷できない場合は136カラムまで印刷して、なお改行コード(0DH)を受信しない場合、自動的に紙送りをするかどうか。これをオフにすると同じ行に重ね打ちします。デフォルトはオンです。
SW5
オン・・・紙送りコマンド受信時に復帰する
オフ・・・紙送りコマンド受信時に復帰しない
紙送りコマンド(0AH)を受信した際に、紙送りとともにキャリッジリターン(0DHと同じ動作)をするかどうか。デフォルトはオンです。MS-DOSやWindowsでは、改行コードが0DH
0AHなので、どっちにしても影響はないと思いますが、Linuxなど改行コードが0AHのみのOSで使う場合はオンにしておいた方が良いでしょう。
SW6
オン・・・復帰コマンド受信時に紙送りする
オフ・・・復帰コマンド受信時に紙送りしない
キャリッジリターン(0DH)コマンド受信時に同時に紙送りをするかどうか。デフォルトはオフです。MS-DOSやWindowsでは改行コードが0DH
0AHなので、ここをオンにしてしまうと1行につき2回紙送りしてしまうので、オフにしておきましょう。Macintoshみたいに改行コードが0DHのみのOSで使う場合のみオンにします。
SW7
オン・・・リボンエンドを検出する
オフ・・・リボンエンドを検出しない
オフにすると、インクリボンがなくなっても無視して動き続けます。リボンを外して感熱紙にプリントをする場合、オフにしておかないと元々リボンがないのにリボンエンドだと誤検知してエラーになってしまう場合があります。リボンを使う場合はオンにします。デフォルトはオンです。
英語モード時
SW1
SW2
国際文字セットを選択します。
オフ オフ・・・アメリカ
オン オフ・・・日本
オフ オン・・・フランス
オン オン・・・ドイツ
SW3
オフに固定
SW4
オンに固定
SW5
オンに固定
英語モードではスイッチ3~5は使いませんが、デフォルトのポジションに固定しておかないと誤動作の原因になるそうです。(なんでだろう??)
SW6
SW7
日本語モードと同じ意味になります。なので、詳しくは日本語モード時のスイッチの意味を見てください。
制御コード(日本語モード時)
日本語モード時は、東芝独自のシーケンスが有効です。
ちなみに、公式には東芝J-3100上で動作する日本語MS-DOS2.xx、日本語MS-DOS3.xx、日英DOS5.0ぐらいしか対応しておりません。ただし、当サイトで公開しているプリンタードライバーをCONFIG.SYSに組み込む事によって、PC/AT互換機+DOS/Vでも使う事ができます。
しかしながら、日本語モードのシーケンスは、Windowsには対応しておりません。なぜなら、英語モードがESC/Pに準じているだけでなく、Windowsでは文字をコードではなくイメージとして受信するため、プリンタ側のフォントに依存しなくなったため、日本語モードそのものが不要になってしまったためです。東芝でも「Windowsで使う時は英語モードにしてください」と言っていました。
というような歴史的経緯があるため、東芝独自のシーケンスが使えるプリンタは、東芝から発売されたプリンタの中でもごくわずかでした。
初期化
ESC = (1B 3D)
バッファにたまった文字を全て印刷した後、電源投入時の状態に戻ります。
全角ドラフトモードオン
ESC X (1B 58)
2バイト文字およびイメージ印刷の際に、間引きで印刷されます。ドットプリンターではインクの節約になるし、音も静かになり、印字も早くなります。熱転写では特に意味がないと思われます。
全角ドラフトモードオフ
ESC Y (1B 59)
ドラフトモードが解除されます。
半角ドラフトモードオン
ESC %1 (1B 25 31)
半角文字をドラフトモードで印刷します。全角モード時は無視されます。
半角高品位モード
ESC %2 (1B 25 32)
半角文字を高品位モードで印刷します。全角モード時は無視されます。
パイカピッチ
ESC N (1B 4E)
半角文字を1インチあたり10文字(10CPI)で印刷します。
エリートピッチ
ESC E (1B 45)
半角文字を1インチあたり12文字(12CPI)で印刷します。
半角ピッチ指定
ESC ; (1B 3B)
半角文字を指定のピッチで印刷します。1B 3Bに続いて、3桁のアスキーコードで指定します。
例)半角文字を18ドットピッチにする場合
ESC ; 018 (1B 3B 30 31 38)
ESC/Pではパラメーターをバイナリで指定する場合が多かったのですが、東芝シーケンスはパラメーターをアスキーコード指定する場合がほとんどなので、誤って漢字変換されるケースが少ないので、プリンタードライバーを作るのが楽でした。
標準では18ドットピッチですので、それ未満にして文字間を詰める事はできません。19以上のドットピッチを指定すると、右側にドットが付加されます。
漢字オン
ESC $@(1B 24 40)
全角モードになります。この後受信するコードはJISコードとなります。第1、第2バイト(ビッグエンディアン)で指定します。
漢字オフ
ESC ( J (1B 28 4A)
全角モードを終了し、半角モードに戻します。
サンプル
;----------------------------------------------------------- ; 漢字ON + JISコード + 漢字オフ をセットする ;----------------------------------------------------------- SEND_KANJION = $ PUSH ES PUSH DI PUSH CS POP ES CLD MOV DI,OFFSET INJI_DAT MOV AL,01BH STOSB MOV AL,"$" STOSB MOV AL,"@" STOSB MOV AL,CS:[KANJI_1] STOSB MOV AL,CS:[KANJI_2] STOSB MOV AL,1BH STOSB MOV AL,"(" STOSB MOV AL,"J" STOSB POP DI POP ES RET
半角漢字モードオン
ESC ^ (1B 5E)
半角漢字モードになります。といっても、漢字なんか出ません。出るのはANK(英文字、数字、カナ)だけです。しかし、このモードで出力された文字は、全角漢字の半分のピッチで印刷されるため、表などを作る時に便利です。
昔はプロポーショナルピッチで表の縦を揃える技術がなかったので、全角:半角のピッチは2:1にしないと表示の縦位置が崩れたりしました。
半角漢字モードオフ
ESC ] (1B 5D)
半角漢字コードをオフにします。
縦書き
ESC 7 (1B 37)
縦書きモードになります。
横書き
ESC 8 (1B 38)
横書きモードになります。
組み込み文字オン
ESC %7 (1B 25 37)
縦書きモード時に、半角文字2文字をセットにして1つの文字として出力します。横書きモード時に指定しても意味はありませんが、プリンター内で組み込み文字オンのフラグは立ちますので、次に縦書きモードにすると組み込み文字になります。
例)
組み込み文字オフ
ESC %8(1B 25 38)
組み込み文字モードをオフにします。
漢字文字間ピッチ指定
1B : (1B 3A)
漢字の文字間ピッチを指定します。1B :につづいて、3桁の数字(アスキーコード)で指定します。バイナリではありません。アスキーコードです。したがって、例えば027と指定するのであれば、16進数では
30 32 37となります。
初期値は27なので、27未満にしても文字間は詰まりません。ANK文字が通常18ドットピッチなので、漢字を36ドットピッチにすると漢字:ANKが2:1になって、表を作る時に縦位置が合います。
漢字とANKを1:2にする方法は半角漢字モードを使うという手もありますが、その方法だと半角文字が小さくなりすぎるのと、BASICやCOBOL等の高レベル言語ではで制御しづらいという弱点があります。
ただ、漢字のドットピッチが36ドットピッチでは、いささか漢字の文字間が広すぎてしまいます。とはいえ、昔はそれでも文句を言われることはほとんどありませんでした。昔は良かった、昔は・・・。
例)いずれも漢字を36ドットピッチに指定しています。
・BASIC
LPRINT CHR$(&H1B);":036"
・COBOL
01 MEI1. 03 FILLER PIC X(01) VALUE X"1B". 03 FILLER PIC X(04) VALUE ":036". : : (省略) WRITE PRREC FROM MEI1 BEFORE 1.
・アセンブラ
MOV AH,0 MOV AL,1BH MOV DX,0 INT 17H MOV AH,0 MOV AL,3AH MOV DX,0 INT 17H MOV AH,0 MOV AL,30H MOV DX,0 INT 17H MOV AH,0 MOV AL,33H MOV DX,0 INT 17H MOV AH,0 MOV AL,36H MOV DX,0 INT 17H
外字登録
ESC 9 (1B 39)
外字を登録します。ESC 9に続いて、削除するコード、登録するコード、データーというふうに続けます。削除するコード、登録するコードがない時はFFFFを指定します。
登録できるコードは、
2B21~2B7E
2C21~2C7E
2D21~2D7E
までです。
既に登録済みのコードを指定した時は、そのコードに上書きされます。また、プリンターのメモリーを越えて登録すると、古い順に削除されます。通常、東芝デュアルモードプリンターでは100個まで登録できます。
データーは、1バイトにつき後半4ビットしか使う事ができず、上位4ビットは3(0011)に固定されています。したがって、キャラクターコードでいうところの、0~9(30H~39H)で指定することになります。
NEC PR201や、ESC/Pと違って、スライスを縦にする必要がないのと、バイナリデーターではないため他の制御コードやシフトJISコードの1バイト目とバッティングする可能性がなく、プリンタードライバーを作る側にとってはとても楽なのですが、1バイトにつき4ビットずつしかデーターを送れないため、外字登録はとっても低速になります。
データーは、24x24ドットなら、横は6バイト、縦は24バイト必要ですので、144バイト送信する事になります。
半角外字登録
ESC + (1B 2B)
書式は外字登録と同じで、 ESC+に続いて削除するコード、登録するコード、データーの順で指定します。削除するコードや登録するコードがない場合はFFFFを指定します。登録済みのコードが指定されると上書きされます。
登録できるコードの範囲や、データーの上位4ビットは3で固定で、下位4ビットでデーターを指定するのも外字登録と同じです。ただ、半角なので横1列が3バイト、縦24バイトの72バイトになります。
単密度イメージ印刷
ESC I (1B 49)
ESC I に続いて、2バイトのバイナリでドット列数を指定します。ドット列数はビッグエンディアンです。
ドット列数に続いてデーターを送信しいます。1列につき3バイト必要です。したがって、24列印刷するのであれば、72バイト必要です。バイナリで送信するため、外字登録よりもデーター列は半分で済みます。(その分、ドライバーを作るのが面倒ですが・・・)
イメージデーターは、上位ビットが上、下位ビットが下になります。
倍密度イメージ印刷
ESC * (1B 2A)
書式は単密度イメージ印刷と同じですが、こちらは1ドット列に2バイトを必要とします。イメージデーターの順番は、
12
34
56
ではなく、
14
25
36
なので注意してください。
このように、イメージデーターは1ドット列につき6バイト必要です。
PWS5271Aのような倍密度印刷機能がない機種では、倍密度で送信されたデーターをORで重ねて単密度で印刷します。したがって、印字が潰れるので注意してください。
アンダーライン
ESC %5 (1B 25 35)
この後の文字は全てアンダーライン付きになります。
アンダーライン解除
ESC %6(1B 25 36)
横2倍角
ESC ! (1B 21)
この後の文字は全て横2倍に拡大されて印刷されます。
横2倍角解除
ESC " (1B 22)
横1/2倍角
ESC Q (1B 51)
この後の文字は全て横1/2に縮小されて印刷されます。
横1/2倍角解除
ESC [ (1B 5B)
倍率指定
ESC % A (1B 25 41)
倍率を指定して印刷します。倍率はバイナリではなく、テキスト(つまり、30H~39H)で指定します。
ESC %A 縦倍率, 横倍率, 開始, 終了, 開始ピン.
縦倍率 横倍率 開始 終了 開始ピンはそれぞれ2桁のテキストで指定します。途中はカンマで区切り、最後の開始ピンの後はピリオドを指定します。
倍率は任意の倍率が指定できれば良いのですが、残念ながらそうもいかず、06、12、24しか指定できません。
06 ・・・ 1/2倍
12 ・・・ 1倍
24 ・・・ 2倍
開始、終了は垂直方向の何ドット目から何ドット目までを印刷するか指定します。例えば縦2倍角で、01から24と指定すると上半分が印刷され、24から48と指定すると下半分が印刷されます。
開始ピン番号は、垂直方向の何ドット目から印刷するかを指定します。例えば縦1/2倍角で13と指定すると、下半分に印刷されます。
文字合成指定
ESC %9 (1B 25 39)
この後に続く2文字が重ねて印刷されます。
水平位置指定
ESC Z(1B 5A)
水平位置をドット単位で指定します。なので、手書きの納品書みたいな、印刷位置が1/10インチ単位ではない伝票に印刷する時に、位置合わせをする時に便利です。
ただし、位置は現在のヘッドの位置から右に何ドット移動するかという指定です。したがって、現在位置よりも左に移動させる事はできません。
ESC Zに続いて、移動させるドット数を2バイトのバイナリで指定します。ビッグエンディアンです。
水平タブ指定
ESC 1 (1B 31)
現在のヘッドの位置を水平タブとして記憶させます。水平タブは256個まで記憶できます。以後は、TABコードを受信すると記憶された水平タブ位置に移動します。
水平タブ削除
ESC 2(1B 32)
水平タブを全て削除します。
改行幅指定
ESC U (1B 55)
改行幅を指定します。しかし、任意の幅が指定できるわけではなく、以下の中から選択式です。ESC Uに続いて、2桁のテキストで指定します。
01 ・・・ 1インチ
02 ・・・ 1/2インチ
03 ・・・ 1/3インチ
04 ・・・ 1/4インチ
06 ・・・ 1/6インチ
08 ・・・ 1/8インチ
10 ・・・ 1/10インチ
12 ・・・ 1/12インチ
24 ・・・ 1/24インチ
垂直タブ設定
ESC 5 (1B 35)
垂直タブを記録させます。ESC 5 に続いて3桁のテキストで指定します。16個まで記憶できます。16個以上記録させようとすると、17個目以降が無視されます。VT(0B)を受信すると記録された垂直タブまで用紙が送られます。
垂直タブ解除
ESC 6 (1B 36)
垂直タブを全て解除します。
用紙長指定
ESC H (1B 48)
用紙長を行数で指定します。行数は3桁のテキストで指定します。用紙長はこの時に設定された改行幅に基づいて設定されます。したがって、この後に改行幅を変更しても、この時設定した用紙長は変わりません。
用紙送り
ESC W (1B 57)
用紙を1/120インチ単位で送ります。手書きの伝票のような、改行幅が1/6インチでピッタリ合わない用紙に印刷する場合に便利です。
用紙送りの量は、ESC W に続いて4桁のテキストで指定します。例えば、ESC W0123とすると、123/120インチ用紙送りされます。
逆方向送り
ESC V(1B 56)
用紙を、1/120インチ単位で逆送りします。書式は用紙送り(ESC W)と同じです。
注意:スプロケットにセットされた連続用紙を逆送りさせると、かなり高い確率でジャムります。連続帳票はむやみに逆送りさせない方が良いかと思われます。
カットシードフィーダー指定
ESC D (1B 44)
用紙をカットシードフィーダーから給紙されるように指定します・・・が、プリンターによってはデュップスイッチで指定するものや、物理的なレバーで切り替えるものがあり、その場合はこの指定は無視されます。
給紙
ESC K(1B 4B)
カットシードフィーダーから用紙を給紙します。しかし、カットシードフィーダーが搭載されていない機種で指定しても無視されます。
英語モード
東芝デュアルモードプリンターには、その名の通り2つのモードが搭載されています。1つが東芝モード、もう1つが英語モードです。
東芝モードは、東芝が独自に設定した制御コードを使う事ができます。J-3100やPASOPIA用のMS-DOSに搭載されたプリンタードライバーを使う場合は、このモードにします。また、当サイトで掲載している東芝プリンター用のプリンタードライバーを組み込む事で、DOS/V上でも使用する事ができます。
英語モードは、ESC/Pと同じです。基本的にIBM PC/AT互換機ではESC/Pを使う場合がほとんどで、J-3100でも東芝日英DOS5.0より後のMS-DOS6.2/Vでは特に当サイトで掲載しているような特殊なドライバーを組み込まない限りはESC/Pを使う事になります。
しかし、個人的にはESC/Pはパラメーターをバイナリで指定しなければならないものが多く、プリンタードライバーを作る側にとってはけっこう辛いものがあったりします。(バイナリデーターがシフトJISコードのマルチバイト文字の1バイト目とバッティングしてしまうため。)