SCSI機器を使わずにX68とPCをつなぐ方法を考える(その3)

プリンタポートについて調べてみた。

  • PC側
    • データ8本(I/O) - PC起動時は出力!!
    • 制御線5本(I) - 5本
    • 制御線4本(O) - オープンドレイン出力に4.7Kで5Vにプルアップ

電気的特性は、基本的にLS244等LSバッファと同等のTTLレベルだが、大雑把でマザーボードによって違うのでアテにならないらしい。

  • X68側
    • データ8本(O) - LS07によるオープンコレクタ出力
    • 制御線1本(I) - 入力(~STROBE) LS244の入力前で逆流防止ダイオードと4.7Kで5Vにプルアップ。
    • 制御線1本(O) - 出力(BUSY) 出力後にLS07のオープンコレクタ出力に、逆流防止ダイオードと4.7Kで5Vにプルアップ。

電気的特性は、LS07/LS244そのもの。


ということで、これらの電気的仕様の違いからケーブル結線のみで直結*1は無理ということがわかった。


X68側の8bit出力がプルアップなしのオープンコレクタなので、途中でなんらかの回路を挟んでプルアップしないとHighをPC側に知らせることができない。
さらにPC側のデータ8本は、基本的に出力となっている。ということは転送ソフトを起動して、パラレルポートを入力にする設定をレジスタに書きこむまでは、データ線をハイインピーダンスにして電気的に切り離す必要がでてくる。
ということで、バス線を4.7KでプルアップしLS244など3ステートバッファで受ける回路を作り、転送ソフト起動後にイネーブルにするという、回路/ソフト両方での対応が必要になってくる。
また、マザーボードにはそもそもパラレルポートがついていなかったり、付いていても入力に対応していないものもある。さらにWin98系ではレジスタを自由に触れたが、2K/XPではバイパスドライバを経由しての操作になるため、OS側のレスポンスの問題もある。さらにWin64では基本的に使えない。問題は山積みである。


わざわざ、出力8+1本/入力1本のI/Fにそこまでする回路を作るのであるならば、ジョイスティックポートに入力を入れるところまで頑張るのもたいした手間ではないですが、プログラムが複雑になります。
他の方法として、プリンタポートを利用した三線式接続〜クロック同期の半二重シリアル通信〜が簡単で、それなりに高速*2だそうなので、そっちに方向転換してみます。


ちなみに、なぜX68側はわざわざLS07のオープンコレクタを使っているかというと、プリンタの電源が入ったままX68の電源を消したり、プリンタ側の電圧が5Vよりも高い場合、プリンタ側からX68側に電流が流れてしまいプリンタポートが壊れてしまう*3のを防ぐためらしい。
ガチョンガチョンいうような、タイプライター時代を彷彿とさせる古いプリンタは、12Vやそれ以上で動いていたりしたのかもしれません。

*1:ちなみにPC同士をつなぐパラレルインターリンクケーブルは、パラレルポートが双方向に対応していないものでも動くように、データ線5本を出力、制御線5本を入力としてクロス接続をおこない、4bitで転送しているようだ

*2:78K/8Mhzマイコンのソフトウェア三線式で150Kbpsでるそうな。最初は桁まちがってるんじゃないかと思いました

*3:LSIの入力は、入力保護のないものは、電源電圧より入力電圧が高くなれば壊れます。出力も、トレラント出力でなければ、相手方の電源電圧の方が高ければ、電源に逆流を起こして壊れます