CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

アドレスデコーダ

DSPソケットに電源、リセット、クロックが来ていることが確認できればもうADSP2101を挿入してしまってバスの挙動が見れるはずです。ただ表面実装のペリフェラルをすでに半田付けしてしまったのでこれが変に影響しないよう、コントロール信号を生成するGALのロジックを決めてしまいます。

やっていることは単純で1個のSRAMの中にプログラム空間とデータ空間を共存させるため/DMS/PMSをORすることとデータ空間にマッピングされたI/Oのチップセレクト生成です。

f:id:O3I:20210609190405j:plain

外部メモリセレクト/MEMCSは内蔵RAMや内蔵レジスタを避けるようにアドレスデコードしましたが、これは不要かもしれません。

いつも気になっていたのですがCPU内にメモリやI/Oが内蔵されている場合、外部バスにそれとオーバーライドするようにメモリを拡張したとき、どちらがアクセスされるのでしょう。内部をアクセスしているときは外部の/WRや/RDがアクティブにならなければいいのですが・・・これは実回路かマニュアルで調べればすぐに判るはず。

 

さてI/Oのアドレスを決めたのでメモリマップに追記してみました(オレンジ部分)

f:id:O3I:20210612102820j:plain
 

・・・とここまできて重大な問題に気付きました。これって完全にやらかしちゃったみたいです。

I/Oはデータメモリ空間にマッピングしてアクセスしようと思っていたのですがADSP2101のデータメモリ幅は16ビットでD23-D8に左詰めでアライメントされるのでした。一方ペリフェラルはいつもの癖でD7-D0に接続してしまったのでここにはデータが乗ってこないことになります。正しくはD15-D8につながなければいけないはずです。