(旧バージョン)パラレルポートで別のパソコンにファイルを転送する方法

 超小型パソコン、東芝Libretto。
 両手に収まるか収まらないかの大きさで、Pentium133MHzとメモリ16メガバイトが入っていて、一年以上前にジャンクコーナーで買ったときも、結構いい値段だったのを覚えている。
 その取り回しの良さの威力は凄まじく、2007年のパソコンとしては年代物と呼ぶべき性能であるにもかかわらず、俺の入っている大学の心理学実験実習のデータ取りの時などにものすごい大活躍。
 しかし、無理して小さくしたせいで、フロッピードライブとかはケーブルを伸ばしてユニットと繋げて使う代物らしい。
 そして、あくまでもジャンク品で購入したため、OSとかフロッピードライブとかはない。
 もちろんUSBもない。
 で、このパソコンに頑張ってOSだの何だのといったソフトウェアを入れるわけだが…。
 でも、ないのよね、そのままだと入れる方法が。
 だけど確かにWindows95が稼動しているのは、何とか頑張って入れたからだ。
 どうするのかって言うと、

 ネジを外す
 ↓
 カバーを外す
 ↓
 ハードディスクを取り出す
 ↓
 ハードディスクを別のパソコンに繋ぐ
 ↓
 繋いだパソコンからデータをハードディスクに転送する
 ↓
 繋いだパソコンからハードディスクを抜く
 ↓
 ハードディスクを戻す
 ↓
 カバーを閉じる
 ↓
 ネジを締める

 っていうとってもとっても大変な方法で入れていたんだっ。
 でも、いつまでもこうやっていると、実験機のロボットに搭載するコンピュータとして使った場合、頻繁にソフトウェアの書き換えが必要になってくると思うんだよね。
 そして、試行錯誤の上、ようやくファイル転送ができる段階になったので、方法をまとめるよ。

ケーブルについて

 
 まず、多分使い方は分かると思うんだけれど、パソコン同士を繋いでファイルを転送するんだ。
 
 「普通、シリアルポートを使うものじゃないの?」と聞かれた場合、俺は遠距離通信技術が思い切り立ち遅れている事を説明しなければならない…。
 要はシリアルポートとか良く分からなくて、たまたまプリンタポートの規格が書いてある資料をめっけて、実際に適当に繋いでみたら発光ダイオードが光って感動したりして、そのうちここまでやるようになったという算段だ。
 
 ケーブルについては、一部自作する必要がある。
 
 長い方のケーブルは、市販のやつ。
 短い方が今回自作した部分なのだが、とりあえず材料は、

 だ!
 
 とりあえず回路図を堅苦しく描くと、こんなかな。
 下の方でもう少し詳しく説明するぞ。
 次に、分解してみよう。
 画像をクリックすると拡大画像が出るかもしれないぞ!
 
 アンフェノール36ピンのメス端子の正面。
 
 ぐるっと回って36ピンの裏面。
 
 ひっくり返して36ピンのGND線が伸びている側。
 
 今度はD-Sub25ピンのメス端子の正面。
 
 ぐるっと回って裏!
 
 ひっくり返してGND!
 そうして、この写真の配線がどのようになっているかを示したのが下のでかい絵だ!
 くらえ!!!
 

ソフトウェアの方の使い方

 上のやつを作ったら、ソフトウェアでデータを送受信するのだ。
 一応、そのためのEXEファイルを作ったけれど、コードも載せておくよ。
 上記のコードを使って作成したEXEファイルのダウンロード
 ppio.exeを使用して被ったいかなる損害も負わない事だけは書いておくよ。
 で、「NT系OS」では使えない。
 どういうことかと言うと、現在主流のOSであるWindows2000とかWindowsXPとかでは使えませんという致命的な事態なのだ。
 えらいこっちゃ。
 でも、ジャンクのパソコンのOSならば未だにWindows95とかがザラだから、ロボット用コンピュータならばこれで十分に実用可能だろう。
 そんな事より、できるだけ早くXPで動かせるようになりたいものだ…。
 それから、パラレルポートって、標準のBIOSの設定だと受信できない設定になっていたりする可能性が大きいから、BIOSの設定で「双方向」とか「By-Directional」とか書いてある方を選んで設定しておいてね。
 で、2008年1月30日に追記するけれど…実はWindows2000とかXPでも、16ビットアプリケーションが動くようになっているみたいで、このタイプのアプリケーションで動かすと平気な顔してIOポートがいじれるらしい事…。 それから、パラレルポートって、標準のBIOSの設定だと受信できない設定になっていたりする可能性が大きいから、BIOSの設定で「双方向」とか「By-Directional」とか書いてある方を選んで設定しておいてね。
 保障はしないけれど、上のプログラムでうまく行くかもしれない…。

文法

 そう言うわけだから、ひとまず「DOS窓」の使い方が分かる人にだけ教えるよ。
 これ、MS-DOSアプリケーションなのだ。

 まず、出力から。

PPIO O ファイル名

 上記のように書くと、ファイルを送ってくれるわけだけれど、ケーブルがつながっていなかったり5秒くらい経っても隣のパソコンで受信操作がされないと「失敗したよ〜」見たいな文字が出て終了してしまう。
 その時はケーブルの接続とかを確かめて、もう一回チャレンジだ!

 次に入力の方だ!

PPIO I ファイル名

 これをやると、やっぱり上の出力の説明と同じように、ケーブルがつながっていなかったり5秒ぐらい何もできずにいると「失敗したよ〜」てな文字が出る。
 それから、5秒くらいの間、向こうからのデータが送られてこなくなったら「ああ、もう隣のパソコンのファイルの送信は終わったんだな」と判断して終了する。
 送信側が送ったバイト数とこちらのパソコンのバイト数を見比べて、送った方と受けた方の数字に間違いがないか確認してね。

ソースコードの説明

 これから上のEXEファイルについてのソースコードについての説明をするけれど、そのコードが入ったCPPファイルをダウンロードできるようにしておいたよ。
ソースコードのダウンロード
 別に専用のエディタがなくてもメモ帳で開く事ができるし、俺の説明なんぞ要らないやい!て言う人は自分で考えてみるといいよ。

コードの解説

 まず、大雑把に書くと、「BolandC++4.5J」で書かれたコードはこんな風になっている。
 他の言語で書くときはそれなりに改造が必要なので注意だ。
 あと、Windows2000とかWindowsXPとかはかなり面倒くさい事をやらなければセキュリティがどうとかで動かないようだ。

前準備をここでする。

int PPGet(){
一バイト、パラレルポートからデータを取り出して「データを取り出したよ」と向こう側のパソコンに伝える処理をする
}

void PPPut(){
1バイト、パラレルポートにデータを出力して、「データを持って入ってね」と向こう側のパソコンに伝える処理をする
}

void main(){
プログラムの本体。
 最初にこの部分が呼び出されて、上の「PPGet」と「PPPut」の二つのサブルーチンみたいなやつを使って、指定された動作をする。}

 まず覚えておかなきゃいけないのは、上記のプログラム言語っていうのは必ず「main()」って書いてあるところから始まって、「{}」で囲まれた場所を処理して終了すると言うのが決まりなのだ。  と言うわけで、上のプログラムは「main()」から始まって、「PPGet」「PPPut」と言う名前をつけた処理を必要に応じて使用して、動作を終了するのだ。
 …。
 あのね、こういうのを書いているうちにやっぱり説明が面倒くさくなったので、暇が開いたら書き足していくかもしれないと思ったりするよ。
 じゃっ!


戻る