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

●8080のDAA命令回路の情報をいただきました!

今回は、「割込み」について、説明をする予定だったのですが…。
予定変更です。

この連載記事を読まれた方からメールをいただきました。
8080、Z80の設計者、嶋 正利氏が書かれた解説記事が技術雑誌「インターフェース」(CQ出版社)の1975年当時の号に掲載されていたそうなのです。
私はもっぱら「トランジスタ技術」誌だけで精一杯で、「インターフェース」誌はごくたまにしか読みませんでしたので、それは全く知りませんでした。

う?1975年?
ひょっとすると、まだ私が8080に出会う前か、ちょうど出会った頃です。
そんな、昔のことなのですねぇ。

で。その記事の中で、嶋 正利氏が、DAA回路について、解説をされているところがある、というのです。
そこのところの図をコピーして添付していただきました。

なにしろ、神様のような、嶋 正利氏が書かれたものだということですから、本当はそのままここに掲載したいのですけれど、1975年当時の「インターフェース」誌の記事、というだけで、私自身が出典を確認したわけでもありませんし、勿論、嶋 正利氏からもCQ出版社からも、同意を得たわけではありませんから、いただいたもの(PDFファイル)をそのままここにUPするのは、やっぱりよくないなあと思います。残念ですけれど…。

なので、できるだけ、原意を損なわない程度に、その概略をご紹介することにいたします。

●嶋 正利氏の考えたDAA回路

嶋 正利氏は、DAA命令のシーケンスを次のように解説しています。
@キャリーをキャリー・テンポラリーに転送するとともに、アキュムレータの値をテンポラリレジスタに転送する
Aアキュムレータとキャリーによって、補正数をアキュムレータ・テンポラリにストアする
B加算結果をアキュムレータにストアする

そして補正の条件は下記の通り、としています。
下位 ハーフキャリーまたはA3〜A0≧10
上位 キャリーまたはA7〜A4≧10または、A7〜A4=9かつA3〜A0≧10

これは、[第224回]で説明した、「DAA命令の回路の考え方」と同じです。
もっとも私がたどり着いたDAAの回路の考え方でよいのだ、ということについては、[第224回]で書きましたように、8080User’s Manualの記載によって、確認済みのことです。
しかし、嶋 正利氏ご自身の著作によって、そのことが裏付けられる、というのは、また格別の嬉しさです。

下図は、メールに添付していただいた嶋 正利氏の十進補正(DAA)回路図をもとに、私が作図しました。

やたら、テンポラリレジスタなる語が出てきて面食らってしまいますが、早い話が、ワークレジスタのことです。
図の右下方にある、テンポラリ・レジスタというのは「つくるCPU」の回路では、ALUレジスタ”A”に相当します。
その上のアキュムレータ・テンポラリというのは、同じくALUレジスタ”B”に相当します。
ALUレジスタ”A”にアキュムレータ(Aレジスタ)の値を入れ、ALUのレジスタ”B”に”60”か”06”か”66”を入れて加算する、ということですから、「つくるCPU」の回路と同じです。

ところで、C(キャリーフラグ)、H(ハーフキャリーフラグ)とAレジスタの値の条件によって、加算値の”6”か”0”を選択する部分のゲート論理回路はどうなっているでしょうか。
ここはなんだかちょいと違っているようです。
理屈は同じなのですが…。

「つくるCPU」の、この部分に相当する回路図は[第224回]にありますが、比較のために、そのうちの、ゲート論理回路だけを切り取って下に示します。

ビット3〜ビット1を入力している部分は全く同じです。OR−AND−ORの組み合わせです。
ビット7〜ビット5の部分も、嶋 正利氏の回路が、前段のORが3入力になっていることを除けば、ここも同じです。
「つくるCPU」の、回路図の真中にある論理回路が両者で異なっています。
ここは、ビット7〜4が”9”で、ビット3〜0が”A”〜”F”の場合を選択している回路です。
私は馬鹿正直に、上位が”9”で、下位が”A”以上、という条件をそのまま回路にしましたが、嶋 正利氏は、ここのところを、3入力のORを使って、(bit7=1)and((bit6=1)or(bit5=1)or((bit4=1)and(bit3〜0≧”A”)))としてしまっているのです。
うーん。これは、気がつきませんでした。
その考えを、「つくるCPU」の回路に取り入れると、図の赤四角で囲った2個のゲートが不要になってしまいます。
そして、その後段のANDへは、赤太線のように、bit4を入れればよいのです。
これで、同じ考えの回路になりました。

え?まだ、違っています?
残念なことに、74HCシリーズには、3入力のORがないのです。
ですから、こうなります。
変更後の回路の該当部分を論理式で表すと、
((bit7=1)and((bit6=1)or(bit5=1)))or((bit7=1)and((bit4=1)and(bit3〜0≧”A”)))
になりますから、両者は同じです。

さっそく試作基板を、上の回路図のように変更して(またパターンカットとジャンパです)、DAAテストプログラム([第225回])を走らせて、結果を確認してみました。
こういうときに、メモリのバックアップは実に助かります。
まだ、先回テストしたプログラムがそのままメモリに残っていましたから、それを実行して、スタックを確認するだけです。
ちょい、ちょい、で終わってしまいました。
勿論、結果はOK、でした。

貴重な情報をメールでお知らせいただいた、岐阜県のK様、本当に有難うございました。
じつは、K様からは、もうひとつ、XCHGについての情報もいただきました。
そのXCHGについては、次回に書くことにいたします。
2009.5.25upload

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