カシオのプチコレでデジカメごっこ?

はじめに

皆さんは、カシオ計算機のシールカメラ:「プチコレ」(Petit Colle:ZR-1)ってご存知でしょうか?

これは何かと言いますと、簡易型のデジカメとテープライターを合体させたようなもので、てっとり早く言えば携帯型のプリクラです。定価が \12,800 と安いだけに、イメージセンサはモノクロ8万画素(笑)、プリント出力も感熱式のシールへのモノクロ印刷とスペック的にはお粗末ですが、機能ではフレームの追加や2画面合成、メッセージ書き込み等、なかなかあなどれません。

最初('98年秋)はご覧のパールホワイト、シャンパンゴールドのほか、ブルーメタリックの計3色で発売され、後('99年秋)にスケルトンブルー、スケルトンピンクが追加されました。

プチコレ:表面

プチコレ:裏面

また、'2000年春には今回紹介する通信機能と外付けフラッシュを省略して、

かわりに占いシール機能と、暗いところでもまぶしくない赤外線フラッシュを搭載したZR-10という後継機が出ています。(右参照)

残念ながら、これの現物にはお目にかかったことがありません。

裏側がどうなっているのか知りたいのですが。

話をZR-1に戻します。極め付けは通信端子で、2台のプチコレ同士をつないで画像データの相互転送ができます。この端子がカシオのデジカメと同じだったので、何とか工夫してパソコンにデータを取り込めるのではないかと思い、この通信部の仕様を調べてみました。

プチコレ本体のほうに付いては結構色々なホームページ(例えば こちら のnullさんのホームページとか。)で紹介されていますのでJ's Garageではちょっと切り口を買えて紹介しようと思います。(ひねくれ者ですから。)


通信機能

まず使うケーブルがこちら。もともとカシオの初期のQVシリーズ用のオプション(いやひょっとしたら「ネームランド」用のオプションかもしれません。)として用意されていた、SB-62というものです。

2台の同社製QV-10A液晶デジタルカメラ同士で画像を転送したり、専用フロッピードライブユニットに画像を保存したり、専用シールプリンタで印刷をしたり、する際に必要なオプションで、2.5mm径のステレオミニミニプラグのクロスケーブル(片方の送信端子ともう片方の受信端子が接続されて交差しているからこう呼びます。リバースケーブルともいいます。)です。私の場合はQV-10とプリンタ:QG-100を接続するのに使っていたものがたまたま手元にあって、難なくプチコレに使えました。

通信ケーブル:SB-62

こうやって繋ぎます。

プチコレ自体は、撮影用のワークメモリ1コマと保存用メモリ1コマの計2コマ分しかメモリがありませんので、通信機能を何に使うのか、私のようなオジサンにはいまいちピンときませんが(ぢょしこーせーがカワイイ男の子やカッコイイ先輩の撮影に成功した時に、友達のプチコレにデータを転送するとか?−うーん苦しい。)、とりあえずAからB、BからAとカメラ同士で相互に通信できました。まぁ、当サイトでおなじみのIrTran-Pを有線でやっているようなものです。


で、通信仕様

以下に、私ことJunZめが2年掛かりで突き止めたプチコレの仕様を報告します。(ほとんどほっぽってあっただけですが。)

1.ハードウェア仕様

通信I/Fの仕様は下記の通りです。ボーレートが固定な点を除いては、QVデジタルシリーズと同じなので、QV用のインタフェースケーブルが使えそうです。

形式:調歩同期式シリアルI/F
Baud Rate:19.2kbps
Length:8 bit
Stop bit:1
Parity:No
端子:2.5mmステレオジャック。Tip:TXD、Ring:RXD
信号レベル:CMOSロジックレベル

2.通信プロトコルとデータフォーマット

通信は、待機状態の受信側端末に対して送信側から画像データをいくつかのパケットに分けて送る形になっています。

興味深いことに、データはすべてテキスト形式で送信され、テキスト2bytesで1byteの16進数データが表現されています。
(例:16進数の0xf8hのデータが、0x46h,0x38h すなわち"F8"として送られる。)

したがって、ターミナルソフトを立ち上げたPCにつないで、1パケット分のデータをダンプして見ることができます。(下記参照)

<送信パケットのサンプル>

S2FF00001C0000
9178781F1D1F1F1F1F1D1F1F201F1E1E1F21201F2021202021
20222321212222232222222223252625252726282726262425
26252728292B2C2B2A2B2B2C2C2B2D292D292B2B302B2C2C2D
2E2F2D2F557FDEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F8F91E1F20211F1F1F1F1D1E1F22
1F1F1F201F2221222221222321232423232323232525242526
2728272526252427262727272928282A282B2D2A292A2B2A2B
2C2B2B2D2C2A2B2B2C2C2B2E2E2D587FE2F9F9F9F9F9F9F92F

[以上250バイト分のパケットが81回繰り返される。]

S2EB1A4F1C005F
FFEFF7FFFFFFF6FDE6EFFF3CFFF9FFFFFF7BFA5FDFFCFF9FFB
F9E9F3FEDFFF3DDFDFFFF7FFA3FB6FEDF7FF3FF7FFFEFFFFBB
FFCBEFE7FFFEFFFEFFFFFF9F5FFBFF7EFFBFFF7BBFFDFFFFFF
DDFFFFFF7FFE7FEFFFDFFFFFFBFBEDF67FFFCBFB27FFDFFFFE
FBB5FFB7FFEFFFFFFFEFFFF7FFBFFFE2FF9BFBFFBFFFFEEFFF
BDFFDFFFFBF77D7FCDFFFEEDF7BFC7FFD7FF9FFDFFFF7FFFFF
FFDFFFEDFFFFFFFFFDB9F7FFEFCFFFDF7FAF76DBFF7BFFFEF7
FBFBFDFF3BF7FFBEBFF7D6A5F7DFFBF5FFFFBFFFF9FFAFFBDF
7FFFFDFDFEFFFFFFFFFFDF7FFFDFFF6FFFB7FFCFFFF7BEBFFF
FAEFDBEF45

[82回目は230バイト分のパケットが送信される。]

S80500000000FB

[最後は通信終了を知らせるパケットを送って終了]

データパケットは下記の構成になっている様です。

COM + LEN + ADR + DATA + SUM

COM

コマンド。テキスト形式で2bytes。"S2"、"S8"の2つが確認されている。"S2"はデータ転送コマンド、"S8"はデータ転送モードから抜けるコマンドであるもよう。

LEN

パケット長。テキスト形式で2bytes。LENからSUMの直前までのバイト数*1/2をテキスト表現の16進数で示す。"FF"であることが多い。

ADR

アドレス。テキスト形式で8bytes。"00 00 1C 00"(スペースは入らない)から始まり、前のパケットのDATAのバイト数*1/2分だけインクリメントするもよう。(例:最初のパケット=00 00 1C 00、二つ目=FA 00 1C 00)

DATA

画像データ。2bytesのテキストで(例:"F8")表現した16進数で構成される。トータルで 250bytes分相当のデータ(実データは500bytes)の場合が多い。

SUM

チェックサム。テキスト形式で2bytes。上記のLENからDATAまでの各2bytesのテキストで表現された16進数、計255bytes相当のチェックサムを表わす。

実際には、一画面につき、上記形式のパケットが
"S2"コマンドで始まるデータ長250bytesのパケット*81回 +
"S2"コマンドで始まるデータ長230bytesのパケット*1 回 +
"S8 05 00 00 00 00 FB"
だけ送信されます。

受信側は、パケットを受信すると以下の1byteのアクノリッジを返信します。

正常受信時: 0x06h

データ異常、チェックサムエラー時:0x22h (テキストの"?")

タイムアウト時:0x21h (テキストの"!")

もっとも、"?"や"!"が返って来てもリトライは行なわず、その場でエラーになります。

以前@ニフティのフォーラムでいろいろ伺ったところ、上記のようなフォーマットは「モトローラSフォーマットと呼ばれる、かなり汎用的なものだそうで、例えば色んな機器組み込み型のマイクロコンピュータなどの開発に携わっている方にはおなじみのROMライターなどにパソコンから書き込み用データを転送する際などに利用されることが多いそうです。

全然話が変わりますが、以前販売されていた、日本IBMのチップカードという、PCカード型のコンピュータのアプリケーションプログラムも、このフォーマットでPCカードスロット経由で書き込まれていたとか。

3.画像データフォーマット

上記の手順で、トータル20,480bytesのデータが転送される訳です。

シールプリンタで印刷される画像のサイズが、横160X 縦120と推定され、また液晶モニタ上に表示される画像サイズが、横40 X 縦32(うち下端の2ドットは非表示)なので、これらを加算するとちょうど20、480画素になるのでピッタリと思ったのですが、生データを見るとどうも頭の4bytesがヘッダになっている様だし、そう単純でも無い様子。

いずれにしてもデータの並びとしては、シール印刷時が短辺を主走査、長辺を副走査方向とするのに対し、長辺を主走査方向としており、画面の左上−右上−左下−右下の順で並んでいます。

とりあえず、20,480 Bytesを、ひとつあたり160 Bytesのブロック128個から成り立っているものとして区切って考えてみました。

プチコレ同士の通信をターミナルソフトで、「盗み聞き」して得られたログファイル(テキストファイル)を上記の仮定の下にこそこそっと加工してMSエクセルで読みこみ、16進−10進変換した後に「等高線」グラフを描かせてみましたところ、こんな感じになりました。(うーん、怪しさ大爆発!)

とりあえず、最後の1280 Bytes分が判然としませんが、少なくとも前半は160X120ドットの画データであることは間違いなさそうですね。

4.実際の取り込みにあたって

以上説明してきました様に、データがテキスト形式で出力されるため、要するに送信されるデータをターミナルプログラムで取り込んでやれば、PCをデータファイラーとすることができることになります。

ただ、上に紹介した私の解析作業のときには、2台のプチコレ同士で通信させて、パソコンからそれを横取りする形でデータ取り込みをしていました。一般的にはパソコンとプチコレとが1対1で通信できるようにしないと、データファイラにはなりません。

そのためには、アクノリッジが返ってこないことによるエラーの発生を防いでやらねばなりません。つまり、簡易的には"S2"コマンドを受信したらそれに続く所定バイト数だけデータを受信したところで0x06hの1byteのアクノリッジを返すようなマクロ動作のようなことをPC上のターミナルソフトに行なわせて受信側の動作をエミュレートすれば、送信エラーが発生せず通信動作が完了します。(本当だったら、チェックサムの計算とかちゃんとしなきゃいけませんけどね。)

その時のターナルソフトのログファイルがすなわちプチコレの画像
データになる、という訳です。

しかるに、私自身はもともとハードウェアのエンジニアで、パソコン側のアプリケーションを開発するなど、到底できません。(できたら楽しいだろうな、いつかはやってみたいな、という願望はずっと持っているのですが。)

とりあえずは、上で申したようなマクロ動作ができるターミナルソフトがあれば良いと思ったのですが、なかなかウィンドウズのアプリケーションで手頃なものがありません。

やむなく、昔使っていたDOSのフラッシュカードを引っ張り出してきて、IBMのPalmTopPC110で懐かしい「Wterm」を走らせてみましたところ、なんとかかんとかうまく読みこむことに成功しました。感動した!!

<下:そのときのマクロの例です。(恥ずかしい!)>

CLS
START: STIMEOUT(300,TERR)
SWITCH
CASE("S2FF")
CALL(W255)
CASE("S2EB")
CALL(W235)
CASE("S805")
CALL(W005)
END

GOTO(START)

TERR: SEND("!")

W005: GET(A$,10)

#(データ4byte + サム1byte)*2 = 10 文字取り込み
SEND("\006")
exit
RETURN

W235: GET(A$,99)

#(データ234byte + サム1byte)*2 = 470 文字取り込み
GET(A$,99)

GET(A$,99)
GET(A$,99)
GET(A$,74)
SEND("\006")
RETURN

W255: GET(A$,99)

#(データ254byte + サム1byte)*2 = 510 文字取り込み
GET(A$,99)
GET(A$,99)
GET(A$,99)
GET(A$,99)
GET(A$,15)
SEND("\006")
RETURN


新たなる問題

喜んだのもつかの間、どうも安定して読みこめません。いろいろ調べていくと、どうもQVリンクケーブルで信号波形が鈍ってしまってきちんと伝わっていない様子です。もともとQVリンクケーブルはパソコンのシリアルインタフェースからちょっと電気をもらってトランジスタで ロジックレベル−プラスマイナス12V 間のレベル変換しているだけの簡易的なモノなので、いまいち信頼性が低いというウワサは兼ねてよりありました。

そこで、間にこんなものをかませて見ました。

自作レベルコンバータ

中身はこんな感じ

まぁ、なんてことはない、パソコン工作人間御用達の「MAX232」互換のレベルコンバータICでアクティブにレベル変換させただけのことなのですが、効果は絶大。もともとは別の目的(ロジックレベルのシリアルI/F信号で、外付けMIDI音源モジュールを鳴らす)ために以前作ってあったものだったのですが、意外なところで役に立ちました。


最後に

今回は止むを得ず懐かしいDOSソフトまで引っ張り出してきたのですが、まぁ、このために毎回わざわざDOSを引っ張り出すのも何なので、当サイトのお客様で、手ごろなマクロ機能付きのWindows版ターミナルソフトの軽いやつをご存知の方がいらっしゃいましたらぜひそれをご紹介ください。

もっと勝手なことを申し上げれば、このプチコレ形式のデータの通信兼ビューワソフトだとか、あるいは汎用画像ファイルへのコンバータを作ってくださるような奇特な方はいらっしゃらないでしょうか...。

そういう方がいらっしゃいましたら、私のプチコレを1台進呈いたします。(いや、マジで。)

もっとも、プチコレを実用的に使うに当たっては、今となっては肝心の感熱シール紙が入手困難、という問題があるのですが...。カシオもホームページにも何にも情報が載っていないし、売る気があるんだかないんだか、良くわかりません。

カラー版のプチコレが出たら絶対当たると思うんですがねぇ。

デジタルカメラの部屋に戻る