2011.12.21
前へ
次へ
目次へ戻る
ホームページトップへ戻る

パソコンをつくろう!(パソコン自作のすすめ)
組み立てキットを使って自作に挑戦!

[第275回]


●前回の内容を書き改めました

昨日は仕事の都合で、割りと早い時間に書き上げてUPしてしまったのですが、本日になってから読み直してみましたら、後半部分がまるでなってないことに気が付きました。
そこで大幅に書き換えるとともにかなり追記いたしました。
本日(12/21)AM9時頃以前にお読みいただいた方は、再読いただきますようお願いいたします。

●パラレルポートのパルス出力

パラレルポートから最短のパルスを出力しようとした場合、どのくらい(周期、周波数)のパルスを出力することができるでしょうか?
このことについては、テーマ別に再編集する前の[第399回]で書いています。

そこでは8086アセンブラを使って、つまり8086の機械語で、パラレルポートにパルスを出力しました。
Z80などとは違って、CPUクロックは桁外れのGHzですから、非常に高速のパルスが出力されるかと思いきや、最短でも1μ秒程度のパルスしか出力されませんでした(下の写真)。



このところ説明しておりますパソコンのパラレルポートの実体はプリンタポートです。
もともとプリンタ接続用として用意されたため、その信号の規格はプリンタに接続することを前提にしたものになっています。
一般に「セントロニクス準拠」と呼ばれている規格です。
そのうちのストローブパルスの幅を見ますと、負論理のパルスでLの期間の信号幅が最低0.5μ秒で、その前後にそれぞれ0.5μ秒のH期間が必要ということになっています。

ところでそのようなパルスをプログラムでソフトウェア的に作り出そうとすると、一番簡単なのは一定回数同じ命令を繰り返す「タイマールーチン」による方法です。
しかしこの方法はCPUクロックに依存するため、CPUの性能ごとにプログラムを書き換えなければなりません。
Z80を使った初期の8ビットマシンならばともかくとして、16ビットのIBM−PCマシンがそのようなことを行なっていたとはいくら昔のこととはいえちょっと考えにくいと思います。

そこで[第399回]での実験の結果を受けての推測なのですが、上記セントロニクス規格に合ったパルスを出力する簡易な方法として、データ信号も含めてすべての出力の立下り、立ち上がりをハード的にコントロールして、最低でも1μ秒の幅を維持するような回路にしてあるのではないかと思います。

実はそのこととは別にわかったこととして、Windowsの場合には、パルス出力中におそらくシステムからの割り込み処理が行なわれるらしく、出力が途中でかなりの時間(数十μ秒)中断することが観測されました([第400回])。
下の写真は、その様子をオシロで観察したときのものです。


●リナックスでのパラレルポートからのパルス出力

上のところでは、ハード回路によってパルス出力に何らかの制限が加えられているのではないか、という「推測」について書きました。
実際[第400回]ではWindows上のDOSプロンプトだけではなくて、FreeDOSでも同じプログラムを走らせてみて、やはり同じ結果になることを確認していますから、その推測はほぼ間違いはないと思います。

そういうことだとは思いますけれど。
せっかくリナックス(Ubuntu)でパラレルポートから出力するプログラムを書いたことでもありますから、そのプログラムを使ってWindowsでやったのと同じように、パルスを出力させてみることにしました。
Windows(DOSプロンプト)では8086アセンブラを使って機械語のプログラムを作って実行しましたが、今回はUbuntu11.10上でCで書いたプログラムを実行します。

下がそのプログラム(outtest7.c)です。

(後で気が付きました。int i;は不要でした。下のリストでは削除してあります)

/* outtest7.c */

#include <sys/io.h>
#define OUT_PORT 0x378
 
int main(void){
  ioperm(OUT_PORT, 4, 1);
  while(1){
    outb(0xff, OUT_PORT);
    outb(0x00, OUT_PORT);
  }
  return 0;
}

下の写真はouttest7を実行した結果、パラレルポートからパルスが出力されている様子です。

Ubuntu11.10でも、Windowsとほぼ同じ出力結果になりました。

本日は時間がなくなってしまいました。
この続きは次回にいたします。

パソコンをつくろう![第275回]
2011.12.21upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る