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

☆☆☆[第347回]にUPしました、緊急のご連絡はお読みいただきましたでしょうか?
[第346回]に書きましたように、突然の災難で、メールに使っていたパソコンのハードディスクがダウンしてしまって、ご購入者様のメールアドレスも消えてしまいました。
メールでお知らせできませんので、とりあえずホームページ上でお知らせしております。

●組立作業がさらにさらに進んでいます

何回か紹介させていただいているYT様のブログです。
FIAT500と洗車の日々・・・(http://plaza.rakuten.co.jp/flyback/)

[4]レジスタ回路 まで実装完了です。
じつは[5]のMOV回路まで完成してしまっている、んだそうです。

うう。なんだか追いかけられているみたいで、あせってしまいます。

☆☆☆私の方はあせりながら、やっと「TK80回路の操作説明書」を書き上げたところです。
あともう少しです。
はやく皆様のお手元にお届けして、肩の荷をおろしたいものです。☆☆☆

●[12]ADD、SUB、CMP、DAD、DAA、RST、INT命令回路の実装です

[第317回]で説明した作業です。
今回はADD、SUB、CMP、DAD、DAA、RST、INT命令の回路を実装します。
実装する部分は、こちらのシルク図で、濃い緑色で着色したところです

いつものように、組み立てが終わったところの写真をUPしようとしたのですが…。
ありません。
うっかりしていて、スキャナで取り込むのを忘れてしまったようです。
この次はTK80回路を実装して、それで完成ですから、つまりは全部実装した完成写真しかないことになります。
いまさらどうにもなりませんので、今回の写真については、無しということになってしまいました。

●28.ADD、ADC、SUB、SBB、CMP命令のテスト(操作説明書から)

MYCPU80組立説明書 V組立 [12]ADD、SUB、CMP、DAD、DAA、RST、INT命令回路 の組立作業後に行う動作テストの説明です。

●28−1. ADD、ADC、SUB、SBB、CMP命令のテストプログラムをメモリに書く

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

0000 21AB56  LXI H,$56AB
0003 118934  LXI D,$3489
0006 7D      MOV A,L
0007 83      ADD E
0008 4F      MOV C,A
0009 7C      MOV A,H
000A 8A      ADC D
000B 47      MOV B,A
000C 11CD12  LXI D,$12CD
000F 3E89    MVI A,89
0011 93      SUB E
0012 6F      MOV L,A
0013 3E34    MVI A,34
0015 9A      SBB D
0016 67      MOV H,A
0017 BC      CMP H
0018 C21D00  JNZ $001D
001B BD      CMP L
001C 76      HLT
001D 76      HLT
(リスト26)ADD、ADC、SUB、SBB、CMP テストプログラム

リスト26はADD、ADC、SUB、SBB、CMP命令のテストプログラムです。
ADI、ACI、SUI、SBI、CPIについてはテストしませんが、ここでテストするADD〜CMPと基本的な部分はすべて同じ回路を共有していますから、ここでのテストは省略します。

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

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

プログラムは一瞬で実行され、最後のHLT命令が繰り返し実行されます。
最初にAレジスタの値ABとEレジスタの値89が加算(ADD)され、結果の値34がCレジスタに入れられます。
このときキャリーが発生します。
そのキャリーとAレジスタの値56とDレジスタの値34とが加算(ADC)され、結果の値8BがBレジスタに入れられます。
次にAレジスタの値89からEレジスタの値CDが減算(SUB)され、結果の値BCがLレジスタに入れられます。
このときボローが発生します。
次にAレジスタの値34からDレジスタの値12とボローとが減算(SBB)され、結果の値21がHレジスタに入れられます。
そのあとAレジスタとHレジスタが比較(CMP)されます。
Aレジスタの値21がHレジスタに入れられた直後ですから、A=HでZフラグが1になります。
したがってその次のJNZはパスされて、その次のCMP命令が実行されます。
Aレジスタの値21とLレジスタの値BCが比較されます。CMP命令の比較はSUBと同じ計算をしますから、21−BCの計算になります。その結果キャリーフラグが立ちます。
最後にHLT命令が繰り返し実行されます。
プログラムが正しく実行されれば、B=8B、C=34、A=21、H=21、L=BCになりC(キャリー)フラグがセットされたあと、アドレス001CのHLT命令で停止(繰り返し実行)されます。

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

●テストプログラムを最後のHLT命令まで実行し終わった写真です



なおADD、ADC、SUB、SBB、CMP命令については、当社ホームページの
「つくるCPU[第190回]」(http://www.alles.or.jp/~thisida/mycpu190.html)
「つくるCPU[第205回]」(http://www.alles.or.jp/~thisida/mycpu205.html)
でも説明をしています。

●29.DAD命令のテスト

MYCPU80組立説明書 V組立 [12]ADD、SUB、CMP、DAD、DAA、RST、INT命令回路 の組立作業後に行う動作テストの説明です。

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

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

0000 012301  LXI B,$0123
0003 116745  LXI D,$4567
0006 21AB89  LXI H,$89AB
0009 31EFCD  LXI SP,$CDEF
000C 09      DAD B
000D 44      MOV B,H
000E 4D      MOV C,L
000F 19      DAD D
0010 54      MOV D,H
0011 5D      MOV E,L
0012 39      DAD SP
0013 F9      SPHL
0014 29      DAD H
0015 76      HLT
(リスト27)DAD テストプログラム
 
DAD命令はHLレジスタとBC、DE、HL、SPとを加算して結果をHLレジスタに入れる命令です。
リスト27ではHLレジスタとBCレジスタを加算し、その結果とDEレジスタを加算し、その結果とSPを加算し、最後にHL+HLを実行します。途中の結果はそれぞれBC、DE、SPに保存されます。

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

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

プログラムは一瞬で実行され、最後のHLT命令が繰り返し実行されます。
最初にBCレジスタの値0123とHLレジスタの値89ABが加算(DAD B)され、結果の値8ACEはHLレジスタに入れられますが、BCレジスタにもMOV命令で転送されます。
次にHLレジスタの値8ACEとDEレジスタの値4567とが加算(DAD D)され、結果の値D035はHLレジスタに入れられますが、DEレジスタにもMOV命令で転送されます。
次にHLレジスタの値D035とSP(スタックポインタ)の値CDEFとが加算(DAD SP)され、結果の値9E24はHLレジスタに入れられますが、SPにもSPHL命令で転送されます。
次にHLレジスタの値9E24が2倍(DAD H)され、結果の値3C48はHLレジスタに入れられます。
最後にHLT命令が繰り返し実行されます。
プログラムが正しく実行されれば、BC=8ACE、DE=D035、SP=9E24、HL=3C48、になったあと、アドレス0015のHLT命令で停止(繰り返し実行)されます。

●テストプログラムを最後のHLT命令まで実行し終わった写真です



なおDAD命令については、当社ホームページの
「つくるCPU[第212回]」(http://www.alles.or.jp/~thisida/mycpu212.html)
「つくるCPU[第216回]」(http://www.alles.or.jp/~thisida/mycpu216.html)
でも説明をしています。

●30.DAA命令のテスト

MYCPU80組立説明書 V組立 [12]ADD、SUB、CMP、DAD、DAA、RST、INT命令回路 の組立作業後に行う動作テストの説明です。

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

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

0000 3E87    MVI A,87
0002 C636    ADI 36
0004 4F      MOV C,A
0005 27      DAA
0006 76      HLT
(リスト28)DAA テストプログラム
 
簡単なプログラムです。
87+36の計算を行い、その結果に対してDAAを実行します。
結果を見ればDAAが正しく機能しているかどうかはすぐにわかるのですが、参考までに加算後の(DAA補正前の)値をCレジスタに保存します。

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

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

プログラムは一瞬で実行され、最後のHLT命令が繰り返し実行されます。
87+36の加算が行われた結果の値BDがCレジスタに入れられます。
DAAの結果、Aレジスタには87+36を十進数で計算したときの答え、123の下位2桁23が入れられ、上位桁への桁上がりを示すキャリーフラグがセットされます。

●テストプログラムを最後のHLT命令まで実行し終わった写真です


CレジスタにはBDが、Aレジスタには23が入れられ、そしてC(キャリー)フラグが点灯しています。

なおDAA命令については、当社ホームページの
「つくるCPU[第223回]」(http://www.alles.or.jp/~thisida/mycpu223.html)
「つくるCPU[第228回]」(http://www.alles.or.jp/~thisida/mycpu228.html)
でも説明をしています。

2009.10.2upload

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