標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第162回]

●XTHLのテストプログラムを実行中の写真です



上の列のLEDは、左から、D、E、B、C、Aレジスタで、下の列のLEDは、左から、H、L、SPH、SPLレジスタです。

DE、BC、HLはどれも同じ3Fを表示しているように見えますが、前回説明しましたように、かなり高速でインクリメントしているため、上位レジスタのD、B、Hでも、その8ビットのうちの上位4ビット程度しか点滅の状態を目視することはできません。
ですから、Dレジスタについては、はっきりした値で示すことができません。
はっきりしているのは、上2ビットは点灯していません、というくらいのことです。
下6ビットが全点灯で3Fですから、その半分の20ぐらいにしておきましょう。十進に直すと32です。
Dレジスタが+1されるのには、15.882msかかりますから、Dレジスタが32カウントするまでには、
15.882×32=508.224ms、経過している、ということになります。

その上位のAレジスタはFEを表示しています。
十進に直すと、254です。
Aレジスタが1カウント進むには、4.0658秒かかりますから、254まで表示が進むには、
4.0658×254=1032.7132秒、経過したことになります。
これに、ちょいと不確実な値ですが、Dレジスタの約0.5秒を加えると、1033.2秒になります。

ストップウォッチは17’13”です。
秒に直すと、
17×60+13=1033秒です。
ちゃんと計算通り動いているようです。

●もう一枚、写真を撮りました

さきほどより、もう少し後で、もう一枚写真を撮りました



ストップウォッチは17’41”になっています。
さきほどの写真の、28秒後の写真です。

Aレジスタは一回りしてしまって05を表示しています。
前回、Aレジスタが一回りするのに、17分20秒かかる、ということを、最後のところで書きました。
ストップウォッチの表示は17分41秒ですから、確かに一回りしています。

念のために計算してみましょう。
Aレジスタの現在の表示は05ですが、一回りしていますから、5+256=261カウントしたということになります。
経過時間は、
4.0658×261=1061.1738秒
これに、さきほどと同じように、Dレジスタの約0.5秒を加えると、1061.7秒です。

ストップウォッチの17’41”を秒に直すと
17×60+41=1061秒です。
これも、よろしいのでは、ないでしょうか。

●じつは、もう一枚写真を撮りました



今度は、ストップウォッチはありません。
掛時計を見ながら、12時19分にスタートして、18時40分にシャッターを切りました。
スタートしてから、6時間21分が経過しています。

どうやって、計算しましょうか?

AレジスタはF6、DレジスタはBFを表示しています。
まずは、Aレジスタが何回転したかを計算することから取りかかりましょう。

6時間21分を秒に直します。
6×3600+21×60=22860秒です。これはあとで計算結果と比較するために、覚えておきましょう。

Aレジスタが1回転するのに1040.8448秒かかることは、前回説明しました。
22860/1040.8448=21.962
ですから、Aレジスタは21回まわっていることになります。もうあと少しで22回になるところです。
AレジスタのLED表示はF6ですから、間違いはなさそうです。

F6は十進数では246です。
これに21回分を加算します。
246+256×21=5622になります。Aレジスタは5622カウントしたことになります。
Aレジスタが1カウントするのにかかる時間は、4.0658秒でしたから、
4.0658×5622=22857.9276秒

今回のDレジスタの表示は、10111111ですが、さきほどと同じように、上3ビットぐらいが確実と考えて、10100000とします。A0ですから、十進数に直すと、160です。
Dレジスタが1カウントするには、 15.882msかかりますから、Dレジスタが160カウントするまでには、
15.882×160=2541.12ms、かかるということになります。

そこで、これを加算すると
22857.9+2.5=22860.4秒になります。
おおお。なんと、ぴったりになりました。
いやあ。なんだか、うれしいですねえ。
2009.2.14upload

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