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

シャープCZ-8PC5制御コード

CZ-8PC5とは

シャープのX1シリーズおよびX68000シリーズ用の熱転写プリンターです。

制御コードはESC/Pのようにパラメーターをバイナリで送信するものが多いですが、似たようなコマンドでも場合によってはテキストだったりします。また、同じバイナリでもコマンドによってビッグエンディアンだったり、リトルエンディアンだったりします。

どうも、後から別の人が拡張していったよううな感じがします。

デュップスイッチ

デュップスイッチは、リボンカバーの中の真ん中あたりにあります。切り替えるためには、まずリボンカバーを外した後、リボンを外し、ヘッドを右端まで手で動かす必要があります。工場出荷時は全てがOFFになっています。

 スイッチ 意味 ON OFF デフォルト
1 ゼロの書体 斜線なし 斜線あり OFF
2 印字速度 高速 標準 OFF
3 はがきモード オン オフ OFF
4 ページ長 12インチ 11インチ OFF
5 OFFに固定 OFF
6 給紙位置 8.5mm 22mm OFF
7 OFFに固定 OFF
8 書体 ゴシック(サンセリフ) 明朝(ローマン) OFF

・デュップスイッチは電源がオフの時に切り替えてください。電源オンの時に切り替えても、次に電源を入れ直すまでは有効になりません。
・「OFFに固定」のスイッチは絶対にオンにしないでください。

ESC、FSシーケンス

改行幅1/6インチ
ESC 6 (1B 36)
改行幅を1/6インチに設定します。通常はこのモードにします。電源投入時はデュップスイッチの設定に従います。

改行幅1/8インチ
ESC 8 (1B 38)
改行幅を1/8インチに設定します。縦の罫線がくっつくようになります。当サイト掲載のハードコピードライバーでも、一旦このモードにしています。(終了時は1/6に戻しています。)

改行幅n/120インチ
ESC %9(1B 25 39)
改行幅をn/120インチに設定します。 ESC %9に続いてバイナリ1バイトで指定します。という事は、シフトJISコードの第一バイトとかぶる場合があるので、 当サイト掲載のドライバーでは透過処理を行っています。

;-------- ESC % 9(n/120インチ紙送り設定)
CHK1		=	$
		CMP	CS:[KAKO4],BYTE PTR 1BH
		JNE	CHK2
		CMP	CS:[KAKO3],BYTE PTR "%"
		JNE	CHK2
		CMP	CS:[KAKO2],BYTE PTR "9"
		JNE	CHK2
		MOV	CS:[TOUKA_P],WORD PTR 1
		JMP	TOUKA_MODE_IN

n行改行
ESC VT(1B 0B)
指定された行数改行します。ESC VTに続いて改行する量を2バイトのテキストで指定します。しかし、シャープのシーケンスは場合によってバイナリだったりテキストだったりと統一性がないです。

ページ長設定
ESC F(1B 46)
1ページの長さを1/2インチ単位で設定します。ESC Fに続いて2バイトのテキストで指定します。

ページの先頭設定
ESC 5(1B 35)
この時の用紙の位置がページの先頭とみなされ、それより前の部分が上マージンと認識されます。

垂直タブの設定
DC4(14H)
垂直タブを設定します。DC4に続いて、通常行なら0、タブ行なら1〜の値を指定します。10以上は: ; < = >という記号で指定します。つまり、キャラクターコードから30Hを引いた値がタブ番号になります。最後に?を送信します。

送信する文字 意味
0 通常行
1 タブ1
2 タブ2
3 タブ3
4 タブ4
5 タブ5
6 タブ6
7 タブ7
8 タブ8
9 タブ9
: タブ10
; タブ11
< タブ12
= タブ13
> タブ14
? 設定終了

例)
DC4 0 0 0 0 1 0 0 0 2 0 0 0 0 3?
通常行4行の後にタブ1
通常行3行の後にタブ2
通常行4行の後にタブ3
設定終了
ここで、タブ番号は行数にカウントしません。

垂直タブへ移動
VT(0B)
垂直タブへ用紙送りします。VTに続いてタブ番号を送信します。タブ番号は、先の1〜>をテキストで指定します。

どうでもいいけど、説明書のサンプル、垂直タブを設定してからじゃないと意味ないですが、それは・・・。(印字結果がVTVTVTじゃ意味ないの!)

下マージン設定
ESC C(1B 43)
下マージンを設定します。ESC Cに続いて下マージンの行数を2バイトのテキストで指定します。

左マージン設定
ESC L(1B 4C)
左マージンを設定します。ESC Lに続いてキャラクター単位で3桁のテキストで指定します。

右マージン設定
ESC /(1B 2F)
右マージンを設定します。ESC /に続いてキャラクター単位で3桁のテキストで指定します。

水平タブ設定
ESC ( (1B 28)
水平タブを設定します。ESC (に続いて水平タブをキャラクター単位で3桁のテキストで指定します。水平タブを複数設定する時はカンマで区切り、一番最後にピリオドを送信します。

例)
ESC ( 005,010,015,020,025.

水平タブクリア
ESC ) (1B 29)
水平タブをクリアします。書式は「水平タブ設定」と同じです。

例)
ESC ) 010,020.

水平タブオールクリア
ESC 2(1B 32)
水平タブを全てクリアします。

水平印字位置キャラクター単位指定
POS (10)
印字位置をキャラクター単位で指定します。POSに続いて3桁のテキストで指定します。

水平位置ドット単位指定
ESC POS(1B 10)
印字位置をドット単位(1/180インチ単位)で指定します。ESC POS に続いて4桁のテキストで指定します。

水平位置相対指定
ESC \(1B 5C)
印字位置をドット単位(1/180インチ単位)で現在のヘッドの位置からの移動量で指定します。ESC \に続いて2バイトのバイナリで指定します。・・・つか、なぜここだけ急にバイナリ!?

バイナリなので、当然当サイトのプリンタードライバーでは透過処理を行っています。

;-------- ESC ¥ ドット単位印字位置相対指定
CHK2		=	$
		CMP	CS:[KAKO3],BYTE PTR 1BH
		JNE	CHK3
		CMP	CS:[KAKO2],BYTE PTR "\"
		JNE	CHK3
		MOV	CS:[TOUKA_P],WORD PTR 2
		JMP	TOUKA_MODE_IN

なお、移動量はシャープはX68000というモトローラー系のCPUを使っていながら、リトルエンディアンで指定します。多分、X1が主流だった頃に作られた規格だからではないかと思われます。X68000のアセンブラで制御するのであれば、リトルエンディアンに変換する必要があるでしょう。(多分)

指定できる範囲は、-1440〜1440までです。マイナスを指定した時は左へ移動します。

パイカピッチ
ESC R(1B 52)
半角が10CPIになります。

エリートピッチ
ESC E(1B 45)
半角が12CPIになります。

コンデンスピッチ
ESC Q(1B 51)
半角が17CPIになります。

横2倍印字
ESC U(1B 55)
SO(0E)
イメージ印字や全角文字も拡大されます。

横2倍解除
SI(0F)

縦2倍印字
SUB V(1A 56)
縦に2倍拡大されて印字されます。横2倍がオンになった状態で縦2倍にすると4倍になります。

縦2倍解除
SUB W(1A 57)

強調文字
ESC !(1B 21)
1ドット横にずらして二重印字します。

強調文字解除
ESC "(1B 22)

スーパースクリプト文字
ESC s1(1B 73 31)
1/4縮小、上付き文字になります。

サブスクリプト印字
ESC s2(1B 73 32)
1/4縮小、下付き文字になります。

スーパースクリプト/サブスクリプト解除
ESC s0(1B 73 30)

アンダーライン
ESC X(1B 58)

アンダーライン解除
ESC Y(1B 59)

文字スタイル変更
ESC q(1B 71)
文字のスタイルを変更します。ESC qに続いて1バイトのバイナリで指定します。

00H ・・・ 標準
01H ・・・ 袋
02H ・・・ 影付き
03H ・・・ 袋+影付き

漢字オン
ESC K(1B 4B)
漢字(全角)モードになります。以後は2バイトずつのJISコードとみなされます。パイカ、エリート、コンデンスが指定されると解除されます。

漢字モード時に、上位バイトに00H、下位バイトに半角文字コード(20H〜7FH、A0H〜DFH)を指定すると、半角漢字が印字されます。半角漢字とは、全角の1/2のピッチで印字されるANK文字です。全角のピッチに合わせて全角:半角を2:1にするのに便利です。

漢字オフ
ESC H(1B 48)
ESC P(1B 50)
半角モードになります。

ドットスペース
ESC(1B)
ESCに続いて、バイナリで00H〜06Hまでの値を送信すると、指定された分だけスペースが空きます。

漢字文字間ピッチ
FS S(1C 53)
漢字の左右にドットスペースを空けます。FS Sに続いて、左側スペース、右側スペースをバイナリで指定します。という事は、スペースにA0H(160)以上を指定するとシフトJISの第一バイトとかぶるのですが、ドライバーの方で1Bと1Cを間違えており、誤って漢字変換してしまいます。すいませんが、160ドット以上は空けないようにしてください。

これまで誰からも指摘されなかった所を見ると、シャープのX1(X68000)用のプリンターをDOS/Vで使う人がいなかったのか、あるいは文字間スペースに160ドットも空ける人がいなかったのでしょう。

半角文字間ピッチ
FS T(1C 54)
半角の左右にドットスペースを空けます。FS Tに続いて左側スペース、右側スペースをバイナリで指定します。例によってドライバーの方で1B Tと誤って設定しているため、A0H以上のスペースを指定すると漢字変換してしまいます。

全角縦書き印字
FS J(1C 4A)
全角文字が縦書きで印字されます。

全角横書き印字
FS K(1C 4B)
全角文字が横書きで印字されます。

漢字横2倍印字
FS p(1B 70)
全角文字が横2倍で印字されます。

漢字横2倍解除
FS q(1B 71)

16x16外字登録
ESC * (1B 2A)
ESC *に続いて登録するアドレスを2バイトのバイナリで指定し、その後32バイトが外字データーになります。外字データーは16x16ドット分ですが、印字される時は48x48xドットに拡大されて印字されます。登録できるコードは、7621H〜767EH、7721H〜7726Hです。ビッグエンディアンで指定します。

データーのフォーマットは、富士通のMB27407に似てますが、LSBとMSBが逆なので注意してください。

24x24外字登録
ESC + (1B 2B)
ESC Bに続いて登録するアドレスを2バイトのバイナリで指定し、その後72バイトが外字データーになります。外字データーは24x24ドット分ですが、印字される時は48x48xドットに拡大されて印字されます。登録できるコードは、7621H〜767EH、7721H〜7726Hです。ビッグエンディアンで指定します。

データーのフォーマットは、ESC/Pと同じくMSBが上です。


ドライバーでは、16x16、24x24いずれも外字データー+2(登録アドレスの分)だけ漢字変換せずに透過になります。

;-------- ESC * 16ドット単密度外字登録
CHK5		=	$
		CMP	CS:[KAKO3],BYTE PTR 1BH
		JNE	CHK6
		CMP	CS:[KAKO2],BYTE PTR "*"
		JNE	CHK6
		MOV	CS:[TOUKA_P],WORD PTR 34
		JMP	TOUKA_MODE_IN

;-------- ESC + 24ドット外字登録
CHK6		=	$
		CMP	CS:[KAKO3],BYTE PTR 1BH
		JNE	CHK7
		CMP	CS:[KAKO2],BYTE PTR "+"
		JNE	CHK7
		MOV	CS:[TOUKA_P],WORD PTR 74
		JMP	TOUKA_MODE_IN

8ビットイメージ印字
ESC %2(1B 25 32)
1列1バイト(8ビット)でイメージ印字を行います。実際には48ドットに拡大されて印字されます。ESC %2に続いて列数、データー・・・を送信します。データーは列数と同じバイト分です。イメージデーターは上がMSBになります。

列数はこのコマンドでは2バイトのバイナリ、ビッグエンディアンです。

16ビットイメージ印字
ESC l (1B 49)
1列2バイト(16ビット)でイメージ印字を行います。実際には48ドットに拡大されて印字されます。ESC lに続いて列数、データー・・・を送信します。データーは列数x2バイト分です。イメージデーターは上がMSBになります。

列数は、このコマンドではなぜか列数は4バイトのテキストで指定します。つまり、10列ならテキストで0010と指定します。

24ビットイメージ印字
ESC J (1B 4A)
1列3バイト(24ビット)でイメージ印字を行います。実際には48ドットに拡大されて印字されます。ESC Jに続いて列数、データー・・・を送信します。データーは列数x3バイト分です。イメージデーターは上がMSBになります。

列数はこのコマンドでは2バイトのバイナリ、ビッグエンディアンです。

48ビットイメージ印字
ESC M (1B 4D)
1列6バイト(48ビット)でイメージ印字を行います。ESC Mに続いて列数、データー・・・を送信します。データーは列数x6バイト分です。イメージデーターは上がMSBになります。

列数はこのコマンドでは2バイトのバイナリ、ビッグエンディアンです。

というように、列数がコマンドによってバイナリだったりテキストだったりとイマイチ統一性がありません。おまけに、同じバイナリでも水平位置指定だとリトルエンディアンなのに、イメージ印字だとビッグエンディアンだったりします。

どうも、シャープのプリンターのシーケンスは、それぞれ別々の人がどんどん後付で足していった感じがします。共同作業ではよくある事ですが、同じプリンター内では仕様は統一して欲しかった気もします。ドライバーの方でも、ESC lのコマンドだけ、テキストをバイナリに変換してから透過処理するバイトを求めています。

;-------- ESC %2 8ビットイメージ転送
CHK7		=	$
		CMP	CS:[KAKO4],BYTE PTR 1BH
		JNE	CHK7_1
		CMP	CS:[KAKO3],BYTE PTR "%"
		JNE	CHK7_1
		CMP	CS:[KAKO2],BYTE PTR "2"
		JNE	CHK7_1
		JMP	HORYU
CHK7_1		=	$
		CMP	CS:[KAKO5],BYTE PTR 1BH
		JNE	CHK8
		CMP	CS:[KAKO4],BYTE PTR "%"
		JNE	CHK8
		CMP	CS:[KAKO3],BYTE PTR "2"
		JNE	CHK8
		PUSH 	AX
		MOV	AH,CS:[KAKO2]
		MOV	AL,CS:[KAKO1]
		ADD	AX,1
		MOV	CS:[TOUKA_P],AX
		POP	AX
		JMP	TOUKA_MODE_IN

;-------- ESC I 16ビットイメージ転送
CHK8		=	$
		CMP	CS:[KAKO6],BYTE PTR 1BH
		JNE	CHK9
		CMP	CS:[KAKO5],BYTE PTR "I"
		JNE	CHK9
		PUSH	AX
		MOV	AL,CS:[KAKO4]
		MOV 	CS:[HK1],AL
		MOV	AL,CS:[KAKO3]
		MOV 	CS:[HK2],AL
		MOV	AL,CS:[KAKO2]
		MOV 	CS:[HK3],AL
		MOV	AL,CS:[KAKO1]
		MOV 	CS:[HK4],AL
		CALL	HENKAN
		MOV	AX,CS:[HK5]
		MOV	BX,2
		MUL	BX
		ADD	AX,1
		MOV	CS:[TOUKA_P],AX
		POP	AX
		JMP	TOUKA_MODE_IN

;-------- ESC J 24ビットイメージ転送
CHK9		=	$
		CMP	CS:[KAKO3],BYTE PTR 1BH
		JNE	CHK9_1
		CMP	CS:[KAKO2],BYTE PTR "J"
		JNE	CHK9_1
		JMP	HORYU
CHK9_1		=	$
		CMP	CS:[KAKO4],BYTE PTR 1BH
		JNE	CHK10
		CMP	CS:[KAKO3],BYTE PTR "J"
		JNE	CHK10
		PUSH 	AX
		MOV	AH,CS:[KAKO2]
		MOV	AL,CS:[KAKO1]
		MOV	BX,3
		MUL	BX
		ADD	AX,1
		MOV	CS:[TOUKA_P],AX
		POP	AX
		JMP	TOUKA_MODE_IN

8ビットドット列繰り返し
ESC V(1B 56)
指定されたデーターを繰り返し印字します。つまり、横縞を印字します。ESC Vに続いて繰り返す列数を4バイトのテキストで指定します。その後、繰り返し印字するデーターを1バイトのバイナリで指定します。MSBが上です。

16ビットドット列繰り返し
ESC W(1B 57)
指定されたデーターを繰り返し印字します。つまり、横縞を印字します。ESC Wに続いて繰り返す列数を4バイトのテキストで指定します。その後、繰り返し印字するデーターを2バイトのバイナリで指定します。MSBが上です。

リセット
ESC c1(1B 63 31)
プリンターを電源投入時の状態に戻します。外字はクリアされません。

用紙切れ検知無効
ESC p0(1B 70 30)
用紙切れを検出しなくなります。黒っぽい紙に印字する場合等に便利です。

用紙切れ検知有効
ESC p1(1B 70 31)

キャラクターリピート
ESC N(1B 4E)
同じ文字を繰り返し印字します。ESC Nに続いて繰り返す回数を4バイトのテキストで指定します。その後、繰り返す文字を1バイトで送信します。繰り返す文字が1バイトだけなので、半角文字のみになります。

カタカナ印字
ESC $(1B 24)
キャラクターコード0AH〜DFHの部分がカタカナになります。電源投入時はこのモードです。

ひらがな印字
ESC &(1B 26)
キャラクターコード0AH〜DFHの部分がひらがなになります。まあ、おそらく漢字ROMがなかった頃(X1時代)の名残ですね。

カラーリボン頭出し
ESC EM(1B 19)
カラーリボンをイエローの先頭まで頭出しします。その後、復改コード(0DH)を受信する毎に、マゼンダ→シアンの先頭まで頭出しされます。

という事は、必ず黄色から印字を開始しないといけないみたいです。また、マゼンダやシアン等該当する色が必要ない時は、復改のみを送って飛ばすしかなさそうです。で、しかも飛ばしたリボンは再利用ができません。

というように、熱転写プリンターでカラー印字をするのはお金とリボンの無駄なのでやめておいた方が良さそうです。

半角書体選択
ESC k(1B 6B)
半角の書体を選択します。ESC kに続いて書体を送信します。

00H ・・・ ローマン
01H ・・・ サンセリフ

電源投入時はデュップスイッチの設定に従います。

全角書体選択
FS k(1C 6B)
全角の書体を選択します。FS kに続いて書体を送信します。

00H ・・・ 明朝
01H ・・・ ゴシック

電源投入時はデュップスイッチの設定に従います。


参考文献
48ドット熱転写カラー漢字プリンタCZ-8PC5 取扱説明書 シャープ
スポンサーリンク