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

●割込みを使わないブレークの方法

前回のお話の続きです。

TK80ではブレーク動作を、割込みを使って行っています。
しかし、前回お見せした当社のZBKボードでのブレーク動作は、割込みを使わないで行っています、ということを書きました。
どうやっているのでしょう?

じつは、RST7命令を利用しているのです。

えー。じゃあ、やっぱり、割込みを使ってるじゃないのー。

あー。そうではないのです。
割込みイコールRST7、というように誤解される方もみえるかもしれませんが、確かに8080での割込みはほとんどがRST7を使っていると思いますけれど、しかし、割込みを使わないRST7だってあるのです。

RST7を利用することまでは、TK80と同じです。
ですから、ブレーク処理ルーチンは0038にエントリ部分を書きます。
でも、割込みは使いません。

どうするのかといいますと。
前回の例で説明しましょう。

下のプログラム部分の、アドレス4201の命令を実行する直前にブレークさせたいということで、
BP 4201
というコマンドを使いました。


              ;RET
41E6 110000     LXI D,$0000
41E9 CD2742     CALL RC
41EC CD3142     CALL RNC
41EF CD3B42     CALL RZ
41F2 CD4542     CALL RNZ
41F5 CD4F42     CALL RP
41F8 CD5942     CALL RM
41FB CD6342     CALL RPE
41FE CD6D42     CALL RPO
              ;
              ; CHECK
4201 310060     LXI SP,ERBF
4204 210050     LXI H,STCK
4207 2B         DCX H
4208 11F642     LXI D,TBL1END
420B 0680       MVI B,80
420D 1A       LOOP0:LDAX D

では、そのコマンド処理では、何をするのでしょう?
じつは、4201番地の内容をFFで置き換えるだけなのです。


4201 FF0060

そうです。たったそれだけで準備は完了です。
実際には、ワークエリアに、書き換え前の値(上の例では31)を保存しておきます。
ブレーク後にFFをもとの31に戻すためです。

これで準備完了ですから、プログラムを実行します。
TK80でしたら、スタートアドレスをセットしておいてRUNキーを押します。
当社のZBKボードなら、JP 4100と入力します。

すると、どうなりますでしょうか?

CPUが先頭からプログラムを実行していって(もちろん通常の実行速度で、普通のように実行していきます)、そして4201まで来ると、そこにはFFが書かれていますから、そこでRST7命令が実行されるのです(RST7命令については[第217回][第222回]で説明をしています)。

0038には、ブレーク処理ルーチンへのエントリ部分が書いてありますから、そこでブレークすることになるのです。
ブレーク処理ルーチンは、その直前のCPUレジスタの値を、レジスタ保存用のメモリアドレスに保存した上で、各レジスタの値の表示を行います。
そして、このあとプログラムの続きを実行する場合のために、保存しておいた、もとの命令コード(今回の例では31)をアドレス4201に戻します。

このあと必要ならば、次のブレークポイントを設定した上で、RTコマンドを実行します。
TK80ならRETキーを押します。

リターン処理ルーチンは、メモリに保存しておいたブレーク直前のレジスタの値をもとのレジスタにそれぞれ戻した上で、ブレークしたアドレスに戻って、そこから実行を再開する、というプログラムになっています。
そのところはTK80のRETキーのプログラムと同じです。

誰が考え出したのかは知りませんが、たった1バイト、目的のアドレスのコードをFFに置き換えるだけで、ブレーク動作が実現できてしまいます。
しかも特別のハードを必要とせずに、ソフトウエアだけでできてしまうのですから、なかなかに立派なものです。
勿論、この仕組みは私が考案したものではありません。
8080の草分け時代の誰かが考え出した方法です。

なお、この方法はRST7(FF)ではなくても、RST6とかRST5でも全く構いません。でも普通はRST7(FF)を使います。

●作業の進捗状況です

やっとのことで、最後の最後の図面チェック作業もようやく終わりに近づいてきました。
やっと、あとはTK80の部分のチェックを残すだけ、というところまで来ました。
この調子なら、週明けには、いよいよ基板を発注できそうです。

最後のチェック作業の内容です。
シルク図も作りましたから、やっと部品番号が確定しました。
その部品番号を回路図に書き込んで、それを最終的に確認するために、シルク図と回路図とを照合する、というのが第一の作業です。

それから、これは前にも確か書いたことですが、今回の基板は「組み立てキット」を前提としています。
こんなにすごい基板を組み立てるのに、いきなり全部の部品を取りつけてしまってから、最後に電源を入れる、というのはあまりに無謀です。
第一、それでは作っていく途中の楽しみが全くありません。
そこで、いきなり全部を組み立ててしまうのではなくて、機能する部分ごとに分けて、少しずつ組み立てながら、途中で電源を入れて、そこまでの部分の動作確認をして、少しずつ楽しみながら、じっくり時間をかけて組み立てていけるように考えました。

そのためには、どの部品をいつ組み立てるのかを整理した部品表、組み立て説明が必須になります。
そこで、今回の最終段階での第二の作業は、組立工程に従った部品リストを、シルク図にマークされた部品番号、回路図と照合しながら作り上げるという、大変な作業です。

これも以前に書いたことですが、そのように作業を進めると、今回使ったゲートICは1個のパッケージに複数のゲートが入っていて、回路の都合で、同じパッケージのゲートが異なる作業工程の回路にまたがって存在する、という場合がかなり多く出てきてしまいます。
すると、先の工程で組み付けたICが、部分的に後の方の工程の回路でも使われているために、後の方の工程の回路では、ICが回路の途中に虫食い状態で実装されてしまうことになります。

回路の途中に実装されたICは、入力にはなにもつながっていない、という状態になってしまいます。
CMOSICは、入力端子をオープンにしておくと、誤動作したり、最悪の場合、熱暴走して破損してしまったりして危険です。
そのようなことを避けるために、組立作業の工程の途中では、一時的に入力がオープンになってしまう回路には、高抵抗(100KΩ)を入れて、VccにプルアップするかまたはGNDにプルダウンするように設計をすすめました。

ところが、試作基板でテストを進めるうちに、どんどん変更部分がでてきてしまって、当初のICの配線からはずいぶん変わってしまいました。
そうすると、試作基板の上で、当初考えた組立順序にしたがって、そのときに必要なプルアップ、プルダウン抵抗の取りつけ部分が、その後の回路の変更作業によって、有効な部分にその抵抗がつけられているかどうか、かなり怪しくなってきてしまいました。

今回の最終チェック作業では、もう一度、組立工程を順をおって進みながら、途中で端子オープンになる入力にちゃんと高抵抗がつけられているかどうかをぜひとも確認したい、というのが、第三の作業です。
なお、この第三の作業の実際については、[第137回]で詳しく説明をしています。

結局はいずれも共通の作業ですから、その第一から第三の作業は、回路図と配線パターン図、シルク図とを全部広げて見比べながら、部品リストも作り上げていくという、なかなかに骨の折れる作業だったのです。

その悪戦苦闘の跡の一部を見ていただくことにいたしましょう。
まずは、これがシルク図の確認図面です。

倍寸でA3用紙9枚にプリントアウトしたものを貼り合わせた巨大図面です。
そこに組立工程ごとに色分けして、蛍光マーカーで着色しています。
最終的に、この図をもとにして組立説明書を作成することになります。

回路図と照合しながら、一点残らず着色してあります。
図の左部分はTK80の回路です。
ここはまだ手がついていません。

部品リスト(IC)の一部分(左側)と、回路図の一部分(右側)です。


ちょいとすさまじい作業だったことが、ご理解いただけますでしょうか?
明日は週末です。
これはもう、スーパー銭湯にどっぷりつかって、そのあとせめて発泡酒などでも飲まなければ、神経がたまりません。
2009.7.2upload

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