復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第275回]
●CPUを巧妙に利用したアドレスセット回路
はじめに前回の訂正です。
回路図にミスがあるのに気が付きました。
回路そのものは直していたのですが、回路図が未修正でした。
現在は修正済みのものと差し替えてあります。
1番目の回路図の左下部分でMREQとM1を74HC02で受けていますが、その出力信号をインバートするところが抜けておりました。
ここは本来ならば74HC32を使うところです。
それをそのようにしているのは配線上の都合で、そのほかの意味はありません。
さて前回からの続きです。
IMSAI8080ではメモリの読み出しのためにパネルスイッチを使ってアドレスを設定するのに実に巧妙なテクニックを使っています。
Y様の要望により、E−80(仮称)ミニコンでもその仕組みをそのまま使っています。
といいましても8080とZ8S180(Z80)とではハードが異なりますから、まったくそのままの回路というわけにはいきません。
Z80の信号にあわせて、かつIMSAI8080と同じ動作になるような回路にしてあります。
前回も書きましたようにメモリアドレスを指定してメモリからデータを読み出すためにはアドレススイッチとして16個のパネルスイッチが必要になります。
メモリのそのアドレスにデータを書き込むには、別に8個のスイッチが必要です。
ところがIMSAI8080には16個の入力スイッチしかありません。
アドレススイッチの下位8ビットをデータスイッチと兼用しているのです。
そのためには一旦アドレススイッチの設定値をラッチしておかなければならないはずです。
しかしIMSAI8080の回路にはどこにもそのような回路は見当たりません。
いったいどうやっているのでしょう。
というところまでが前回のお話でした。
実はCPUを使っていたのです。
メモリにアクセスするためにWAIT信号を出してCPUをWAIT状態にします。
ここが考えのポイントです。
普通メモリにアクセスするにはDMA(Direct Memory Access)の考え方をしますから、CPUにBUSRQ信号を送ってBUSを開放させて、それからアドレスを設定したりデータを書き込んだりします。
しかしIMSAI8080ではそのようにする代わりに、ただCPUを待たせておきます。
そのときひとつ大切なポイントがあります。
必ずCPUが命令のOPコードを読み込むタイミングでウェイトさせるということです。
CPUがOPコードを読み込むタイミングではM1信号が出力されますから、それをトリガにしてWAIT信号を出力してCPUをウェイトさせます。
すると、CPUは命令コードの読み込み中にウェイトさせられた状態で待っていることになります。
当然データバスには、そのときCPUが読み込み中のメモリアドレスからのデータ(命令コード)が乗っています。
それを横から強制的にメモリアクセスを禁止してしまってデータバスを乗っ取ってしまいます。
ハッカーの発想です。
そしてそこに”C3H”を強制的に乗せてしまいます。
コードC3HはJP命令です。
ビット表現では11000011です。
回路では、D2〜D5をダイオードでプロダウンすることでC3Hコードをバスに乗せています([第274回]3番目の回路図)。
もうお分かりのことと思います。
そのようにしてから、WAITを解除し、それに続く2回のメモリ読み出しタイミングでも同様にしてメモリアクセスを禁止しておいて、アドレススイッチの下位8ビットと、続いて上位8ビットをデータバスに乗せてしまいます。
その結果、CPUはまんまとだまされてしまって、スイッチで設定したアドレスへのジャンプ命令を実行して、そこでまたWAIT信号によって停止します。
パネルスイッチで指定したアドレスにジャンプした直後に停止するために、そのときアドレスバスにはパネルスイッチで設定したアドレスが出力され、データバスにはそのアドレスのメモリからのデータが出力されるのです。
結果的にADDRESS SET & READが実行されたことになります。
まさに想定外の奇抜な着想です。
ほんとうに感心してしまいますね。
本日も時間がありません。
ここまで大急ぎで説明をいたしました。
この続きはまた次回にいたします。
ワンボードマイコンでCP/Mを![第275回]
2012.12.26upload
前へ
次へ
ホームページトップへ戻る