2020年7月30日木曜日

Z8002にMMUを その2

今回作るMMUは、高速SRAMをマッピングテーブに使った回路になり、下の図のような構成になります。


Z8002のアドレス下位12ビットは、そのまま物理アドレスの下位12bitとしてメモリに渡します。Z8002のアドレス上位4bitは高速SRAMのアドレスに入れ、読み出されるデータ8bitを物理アドレスの上位8bitとします。これで合計20bit( 1Mバイト分)のアドレスに変換します。

アドレス変換を行うには、高速SRAMにマッピングデータを書き込む必要があるので、マルチプレクサとバッファをつけます。高速SRAMは0xC000からのI/O空間に置きアクセスします。マルチプレクサは、変換する仮想アドレスの上位4ビットとI/Oアクセスするアドレスを切り替えるために使います。バッファは、高速SRAMをデータバスに接続するために必要です。

本当は、アドレスの上位4ビットをバイパスするために、高速SRAMとメモリの間にさらにマルチプレクサを追加したいのですが、部品と配線量が増えるので見送ります。これはCPUリセット後に高速SRAMを初期化するまでの間、MMUを無効にしておくために必要なのですが、単純に高速SRAMを非アクティブにしおいて データバスをプルダウンすることにします。このため上位8ビットが0に固定され、MMUが初期化されるまでの間はメモリの先頭の4kバイトしかアクセスできなくなってしまいます。

いま気づいている点は、
  • ページがマップされていない状態を設定できない
  • ページごとに書き込み禁止を設定できない
  • ページに書き込みがあったか記録できない
などですが、実現するには高速SRAMを追加する必要があります。これらの機能がどれくらい必要なのか判断がつかないので、MMUは最小限の構成にしておいて、とりあえず動かすことを優先します。


2 件のコメント:

  1. 通りすがりですが、
    目的がこれだけなら SN74LS612 でも買ってくれば足りるのでは。PC-AT で使われていたので、入手は困らない、、、というか値段のこと言わなければサトー電気あたりにもあるな。自力で組みたいと言うなら止めないけど、ディレイが大きくなるかも。

    返信削除
    返信
    1. あえてLS612は使いませんでした。MMUを自分で組んでみたかった、ただそれだけです。

      削除