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

●[6]INR/DCR命令回路の動作テストです(操作説明書から)

☆☆☆前回も書きましたが、説明書の作成作業にはほんとに時間がかかります。途中で投げ出したくなるのをじっとこらえてひたすらパソコンに向かっています。そんななかで、実際の組立作業とテスト作業はぶつかり、つかえながらも、操作説明書よりは先行して、完成に近づいています。あと一歩です(説明書はまだまだ出来あがりません)。☆☆☆

●8.INR命令のテスト

MYCPU80組立説明書 V組立 [6]INR/DCR命令回路 の組立作業後に行う動作テストの説明です。

●8−1. 最初に電源を一度OFFにする

今回のテストはレジスタを強制的にクリアしてから始めたいので、最初にこういうことをします。
メモリ書き込みモードの状態で(DS3−4をONにしたままで)、一旦電源をOFFにします。
そうすることによって、レジスタの値をFFにするためです。

電源を一度切って、数秒待ってから再投入します。
すると、プログラムは電池によってバックアップされていますから消えませんが、レジスタの値は消えてしまいます。
電源がONになったとき、レジスタの値はたいていはFFになります(必ずFFになるとは限りません)。
レジスタの状態をクリアしておいてから、メモリにテストプログラムを書きます。

[注記]ここでは先に電源がONになっていて、何かのプログラムがすでに実行されていて、レジスタの値がレジスタごとにばらばらになっていることを想定して、この作業をするように書きましたが、現在電源がOFFの状態で、これからプログラムの書き込みテスト作業をするために電源をONにする場合には、あらためて電源のOFF/ONを繰り返す必要はありません。

●8−2. INR命令のテストプログラムをメモリに書く

メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。

0000 04    INR B
0001 0C    INR C
0002 14    INR D
0003 1C    INR E
0004 24    INR H
0005 2C    INR L
0006 3C    INR A
0007 76    HLT
(リスト4) INR r テストプログラム

●8−3. テストプログラムを実行する

テストプログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。

プログラムが実行されると、B、C、D、E、H、L、Aの各レジスタが+1されます。
プログラム実行前のレジスタの値がFFだったとすると、FF+1=00なので、プログラムの実行後は00が表示されます。その状態でプログラムは停止して、HLT命令を実行し続けます。

☆☆☆操作説明書には図はありますが画像(基板の写真)はありません。でもせっかくのホームページですから、写真もUPいたします。☆☆☆

プログラム実行前の写真です。

レジスタD、E、B、C、A、H、Lは全部FFになっています。でもレジスタ名までは読めませんから、どれがどのレジスタなのかわかりません。

レジスタ部分の拡大写真です。

これならレジスタ名がよく見えます。

●8−4.RESETSWを押す

RESETSWを押す(押してから離す)と、再びプログラムが実行され、レジスタの値が+1されて表示されます。
RESETSWを押すたびに(押してから離すごとに)、プログラムが実行されて、レジスタが+1されます。

プログラムの先頭で、レジスタにMVI命令で初期値を与えるようにはしないで、電源OFFによってレジスタをクリアしたのは、こういう動作をさせたかったからです。

RESETSWを押したあとの写真です。

レジスタD、E、B、C、A、H、Lが全て00になりました(FFが+1された結果です)。
画面上方で点灯しているLEDはフラグレジスタです。
左からS、Z、H、P、Cフラグです。
結果が00なのでSフラグはOFF、ZフラグはONです。FF+1=00の計算が行われたことになるので、HフラグもONになります。
PとCは変化しません。

もう一度RESETSWを押しました。

全レジスタがさらに+1されて01になりました。
フラグレジスタは、Z=0、H=0になりました。
画面左上にあるのはINR/DCR用のUP/DOWNカウンタです。INR/DCR用のワークレジスタとして使用されます。
各レジスタの値00をインクリメントして01にするのにも、このワークレジスタが使われました(ここも01になっています)。

さらにRESETSWを押しました。


もう一度RESETSWを押しました。


●9.DCR命令のテスト

MYCPU80組立説明書 V組立 [6]INR/DCR命令回路 の組立作業後に行う動作テストの説明です。

●9−1. DCR命令のテストプログラムをメモリに書く

メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。

0000 05    DCR B
0001 0D    DCR C
0002 15    DCR D
0003 1D    DCR E
0004 25    DCR H
0005 2D    DCR L
0006 3D    DCR A
0007 76    HLT
(リスト5) DCR r テストプログラム

●9−2. テストプログラムを実行する

テストプログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。

さきほどのプログラム(リスト4)はINR命令のプログラムでしたが、今度はDCR命令のプログラムです。
プログラムが実行されると、B、C、D、E、H、L、Aの各レジスタが−1されたあと、その状態で停止します(HLT命令を実行し続けます)。

8−4. と同じように、RESETSWを押すと、今度は押すたびに(押して離すたびに)、レジスタが−1されます。
プログラム実行前のレジスタの値が03だったとすると、プログラムの実行後は02が表示されます。

RESETSWを押しました。

レジスタの表示が03から02になりました。さきほどテストしたINRプログラムの実行によって03になっていたところから−1された結果です。

もう一度RESETSWを押しました。

さらに−1されて、レジスタの値は全て01になりました。

●10.INR M命令のテスト

 MYCPU80組立説明書 V組立 [6]INR/DCR命令回路 の組立作業後に行う動作テストの説明です。

●10−1. INR M命令のテストプログラムをメモリに書く

メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。

0000 2601  MVI H,01
0002 2E23  MVI L,23
0004 34    INR M
0005 46    MOV B,M
0006 76    HLT
(リスト6) INR M テストプログラム

●10−2.メモリアドレス0123の値を確認する

今度のプログラムはメモリの値をインクリメント(+1)します。
プログラムの実行前と実行後でメモリアドレス0123の内容が書き換わることを確認するために、プログラムを実行する前に、メモリの値を見ておきます。

ディップスイッチDS1、DS2とアドレス設定用のトグルスイッチを下のようにセットします。



データ入力用のトグルスイッチは全部上側にします(そのようにしないと、メモリから出力されたデータを正しく確認することができません)。



このようにすると、DATA BUS(外部データバス)LEDには、メモリアドレス0123の値が表示されます。
このときに表示される値は現在アドレス0123に入っている値ですが、どのような値が入っているかはわかりません。
テストを行う上では、どのような値になっていても構いません。

テストプログラム実行前の写真です。

メモリアドレス0123の値はECになっています

アドレス入力スイッチ、データ入力スイッチの部分を拡大した写真です。


●10−3. テストプログラムを実行する

メモリアドレス0123の値を確認したあと、10−1.でメモリに書き込んだプログラムを実行します。
プログラムを実行したあとで、またメモリの値を確認しますから、アドレス設定用のディップスイッチやトグルスイッチは0123をセットしたままにしておいてください(データ設定用のトグルスイッチはFFにしておきます)。

プログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。
RESETSWを押しながら、ディップスイッチDS3−4をOFFにします。その後RESETSWを離すとプログラムが実行されます。
DS3−4がOFFのときはアドレス設定用のDS1、DS2、トグルスイッチやデータ設定用のトグルスイッチはONになっていても、プログラムの実行には影響を与えません。

テストプログラム(リスト6)は、HLで示されるメモリアドレス0123の値を+1したあと、その値をレジスタBに入れます。プログラムは瞬時に実行され、停止します(最後のHLT命令が繰り返し実行されます)。
この状態のままではメモリアドレス0123の値を直接見ることはできませんが、レジスタBのLED表示を見ることでメモリの値がインクリメントされたことを確認することができます。

テストプログラムを実行した直後の写真です。

0006のHLT命令が繰り返し実行されています。アドレスバスは0006、外部データバス、内部データバス、OPコードレジスタはともにHLT命令のコード76になっています。
BレジスタはEDになっています。
メモリアドレス0123の値ECがプログラムを実行した結果インクリメントされてEDになったあと、Bレジスタにコピーされたことを示しています。

●10−4.RESETSWを押す

RESETSWを押す(押してから離す)と、再びプログラムが実行され、レジスタBの値が+1されて表示されます。
RESETSWを押すたびに(押してから離すごとに)、プログラムが実行されて、レジスタBが+1されます。
このことでメモリアドレス0123の値がプログラムの実行によって+1されていく様子を知ることができます。

もう一度RESETSWを押しました。

BレジスタはEEになりました。

●10−5. メモリアドレス0123の値を確認する

レジスタBのLED表示によって、メモリアドレス0123の値がプログラムの実行のたびにインクリメントされることを間接的に知ることはできるのですが、念の為にメモリアドレス0123の値を直接確認してみることにします。
DS3−4をONにします(RESETSWを押しながら、DS3をセットしてください)。

アドレス設定用のディップスイッチ、トグルスイッチが0123になっていて、データ設定用のトグルスイッチがFFになっていれば、メモリアドレス0123の値がDATA BUS(外部データバス)LEDに表示されます。

メモリアドレス0123の値を確認しているところの写真です。

メモリアドレス0123の値もBレジスタに表示されているのと同じEEになっています。

アドレス入力スイッチ、データ入力スイッチの部分を拡大した写真です。


●11.DCR M命令のテスト

MYCPU80組立説明書 V組立 [6]INR/DCR命令回路 の組立作業後に行う動作テストの説明です。

●11−1. DCR M命令のテストプログラムをメモリに書く

メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。

0000 2601  MVI H,01
0002 2E23  MVI L,23
0004 35    DCR M
0005 46    MOV B,M
0006 76    HLT
(リスト7) DCR M テストプログラム

10.で書いたINR Mテストプログラム(リスト6)の0004が34から35に変わるだけですから、もし10.の作業をした直後ならば、メモリアドレス0004に35を書き込むだけで構いません。

●11−2. テストプログラムを実行する

プログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。
RESETSWを押しながら、ディップスイッチDS3−4をOFFにします。その後RESETSWを離すとプログラムが実行されます。

テストプログラム(リスト7)は、HLで示されるメモリアドレス0123の値を−1したあと、その値をレジスタBに入れます。プログラムは瞬時に実行され、停止します(最後のHLT命令が繰り返し実行されます)。
この状態のままではメモリアドレス0123の値を直接見ることはできませんが、レジスタBのLED表示を見ることでメモリの値がデクリメントされたことを確認することができます。

テストプログラムを実行した直後の写真です。

0006のHLT命令が繰り返し実行されています。アドレスバスは0006、外部データバス、内部データバス、OPコードレジスタはともにHLT命令のコード76になっています。
BレジスタはEDになっています。
メモリアドレス0123の値EEがプログラムを実行した結果デクリメントされてEDになったあと、Bレジスタにコピーされたことを示しています。

●11−3.RESETSWを押す

RESETSWを押す(押してから離す)と、再びプログラムが実行され、レジスタBの値が−1されて表示されます。
RESETSWを押すたびに(押してから離すごとに)、プログラムが実行されて、レジスタBが−1されます。
このことでメモリアドレス0123の値がプログラムの実行によって−1されていく様子を知ることができます。

RESETSWを押しました。

BレジスタはECになりました。

☆☆☆ここまでが操作説明書のコピーです。

●過去記事へのリンク

[第311回]でつけたリンクと同じですけれど、何かのお役に立てば、ということでここにも置くことにしました。

08/9/5   [第58回]●いよいよ2枚目の基板の説明にかかります●最初はINR、DCR回路の説明です●INR、DCR命令のデコード回路です●INR(DCR)レジスタの回路です●SフラグとZフラグ●H(ハーフキャリー)フラグ●あれ?C(キャリー)フラグがある?
08/9/6   [第59回]●フラグレジスタの回路図です●74HC74は74LS74ではなかった!●74LS74の内部論理図です●74HC74の内部論理図です●74HC74の出力にはバッファがついている!●INR、DCR命令の回路図です●INR/DCR命令のタイミングチャートです
08/9/24  [第77回]●ついに!8080の詳細な技術資料をいただいてしまいました●INR、DCR命令でもP(パリティフラグ)が変化することがはっきりしました●INR、DCR命令はすでに説明済みでした
08/9/25  [第78回]●INR B命令のクロック毎の動作の写真です●また回路にミスがみつかりました●INRレジスタの回路図を修正します●INR、DCRの回路図も変更します●またメールで教えていただきました
08/9/26  [第79回]●INR、DCR命令のクロック毎の動作確認の準備です●LXI H命令のクロック毎の動作の写真です●MOV M,H命令のクロック毎の動作の写真です
08/9/27  [第80回]●INR M命令のクロック毎の動作の写真です●MOV A,M命令のクロック毎の動作の写真です
08/9/28  [第81回]●INR L命令のクロック毎の動作の写真です●DCR H命令のクロック毎の動作の写真です
09/1/25  [第147回]●INR/DCRレジスタを実装しました●JMP命令の回路を実装しました●ワークレジスタがおかしい…
09/1/27  [第148回]●INR命令とJNZ命令を使ったプログラム●INR命令の実行時間●JNZ命令の実行時間●プログラムの実行時間
09/2/8   [第157回]●タイマールーチンをつくりました●2.5msのタイマールーチン●2.5msタイマールーチンの説明●0.5secのタイマールーチン●タイマールーチンでのNOP命令の働き
09/6/24  [第258回]●INR、DCRのテストプログラムです●INR M、DCR Mのテスト●8080のフラグ●INR rのテスト●DCR rのテスト
09/6/25  [第259回]●INR、DCRのフラグについて●8080のパリティフラグ●パリティフラグの回路です

2009.9.10upload

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