FM-77シリーズのメモリ管理
- 公開日: 2015/08/28(金) 07:12[JST]
FM-7シリーズで使用されているCPU(モトローラ的にはMPUか)・モトローラMC68B09[1]はアドレスバスが16ビットで、メモリ空間は64kBになるんだけど、FM-77(+400ラインセット)とAVシリーズはMMR[2]を用いることでそれ以上のメモリを使うことができるようになっている。
MMRの構成については、6809用MMU(Memory Management Unit)考察(by はせりん)に詳説されているが、電子工作に疎い自分では理解が追いつかなかった。ということで色々調べてなんとか自分的に納得できる所まで来たので以下メモ。
FMシリーズのMMRに使われているのは富士通のMB8149というもので、これはナショナルセミコンダクタのMM2114と互換性のあるSRAM。アドレスバスは10ビットでデータバスは4ビット。MMRではこれを2つ使って8ビット×2^10→1024バイトのメモリとしている。
CPUのアドレスバスのうち下位12ビットは、18又は20ビット(AV40シリーズ)のアドレス空間を持つメモリコントローラの下位12ビットにつながっている。で、CPUのアドレスバス上位4ビットは、MB8149のアドレスバスにつながっている。で、MB8149のデータバスは、メモリコントローラの下位13ビット目以降につながっている。
そうすると、CPUがメモリにアクセスしようとすると、実際にメモリコントローラに渡されるアドレスは、CPUのアドレスバス下位12ビットと、MB8149のデータバスから出力される8ビットとを組み合わせた最大20ビットのものとなる。12ビットのアドレスは4kBなので、CPUがアクセスできる64キロバイトの空間を4kB毎に16分割して[3]、そのそれぞれに20ビットのアドレスを4kB毎に分割したものを割り当てることが出来る、ということ。メモリの割当の変更(つまりMB8149に記憶されている内容の書き換え)はI/O経由で行う。
つまり、SRAMを一種のアドレス変換テーブルとして使っているということ。
もひとつ。「タスク」という考え。MB8149のアドレスバスの下位5,6ビット目(AV40系と20EXは7ビット目も)には、I/Oで設定された「セグメントレジスタ」の値が入力されるようになっている。つまり、MB8149は上記の64kB分のメモリ割当のセットをAV40系と20EXは8セット、それ以外の機種は4セット保持することができる。64kB分のメモリの割当にはI/Oに16回アクセスする必要があるけど、タスク毎にあらかじめメモリを割り当てておけば、1回のI/Oアクセスでメモリ割当を切り替えることができる。OS-9みたいなマルチタスクOSでは重要な機能らしい。
しかし上記リンク先でも言及されているけど、MB8149(×2)の1kBの記憶領域のうち使用されるのはAV40系+20EXでも128バイト、それ以外の機種に至ってはわずか64バイト。非常にもったいない。
厳密にいうと(I/OやサブCPUとの共有メモリがマッピングされている)0xFC00以降のアドレスはメモリ割当の対象とはならないのでMMRで切り替えられるのは63kB。