ROMレスシステム

  • 投稿日:
  • 更新日:2015/03/09
  • by
  • カテゴリ: ,

西田さんからのコメントがあったので、ROMレスシステムについて考えてみました。

基本的な考えは、

  • SRAMをROM領域(0x4000-0x7fff)に確保しておく
    (実際には32kB分のSRAMを0x4000-0xbfffに配置してRAM拡張を兼ねる)
  • 起動時にSRAMにブートアップ用のプログラムを転送し、そこから起動する

以前、私もAVRのプログラム領域、またはSDカード内にブートアップ用の(Z80の)プログラムを入れておいて、そこから起動することも考えてはいたのですが、直接AVRからZ80に読むにはタイミングが間に合わないのでそれ以上考えていませんでした。

しかし、西田さんのアイデアのように、いったんSRAMに転送してしまえば問題はなさそうです。

ブートアッププログラムはAVRに焼きこんでもいいのですが、SDカードに入れておけば、カードの差し替えで起動方法を変えられるのでさらに便利そうです。

なんかSDカードからのブートアップなんて格好いいかも? :-)

課題は次のとおりです。

  • デコードおよび調停が複雑になる
    メモリ系のピン(MREQ, RAS, EXCAS等)のデコードが必要なほか、アドレスの上位も扱う必要があります。
    また、SRAMに書き込んでいるときには本体からの読み書きを停止する必要があります。 いよいよCPLDの出番ですかね。
  • PC-6001が起動してROMからブートアップするタイミングまでにSRAMへの書き込みが間に合わない可能性がある。 特にSDカードを使った場合。
    これは、電源を入れてブートアップを読み込んだ後、手動で本体をリセットすればいいのですが、格好悪いですね。
  • 28ピン系のAVRでは入出力が厳しい。
    仮に可能な限りI/Oを共用をしたとしても、28ピン系のAVRで使えるI/Oは23本です(リセット含む)。 データ線に8本、アドレス線(ROMの16kB分, 14本)、制御線(ブートアップ中であることを示す, 1本)を出したとすると23本。 う~んぎりぎり。 この場合SDカードからの読み込みはI/O不足でできません。 時間分割すれば不可能ではないでしょうが、なんか不毛かも。 SDカードから読み込みたければ、素直に40ピン系のAVRを使ったほうがいいでしょうね。

というわけで、けっこう変えなきゃいけません。 これまでの設計はなるべくシンプルにしてきましたが、実際BIOSが必要であることを考えると(BelugaやPC-6006のカートリッジと同時使用する場合を除き)、メモリの扱いも必要なんですね。

とりあえずシンプル版?とROMレス版、2本立てで考えを進めてみようかと思います。

こちらもよく読まれています