メモリマップドI/Oの例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/09 03:13 UTC 版)
「メモリマップドI/O」の記事における「メモリマップドI/Oの例」の解説
8ビットマイクロプロセッサを使った単純なシステムを例として説明する。アドレス線が16ビット分あれば、64Kバイトまでのメモリをアドレス指定可能である。アドレス空間の先頭32KバイトにRAMを配置し、空間の最後尾16KバイトにROMを配置する。残った中間の16Kバイトの空間を各種入出力機器に割り当てる(タイマ、カウンタ、ビデオディスプレイチップ、サウンドジェネレータなど)。バスに接続されたそれらの機器は、マッピングされたアドレスがバス上に現われたときに応答し、それ以外のアドレスは無視する。これはアドレスデコーダの仕事であり、それによってシステムのメモリマップが確立される(通常のメモリでも同じ)。マイクロプロセッサによってはメモリマップ構成にアーキテクチャ上の制限がある場合もある。例えばモステクノロジーの6502はアドレス空間最後尾の16バイトにはリセットと割り込みのためのベクター(ジャンプテーブル)がなければならないため、その部分にはROMがマッピングされていなければならない。 アドレスのデコードは完全に行う場合もあるし、部分的に行う場合もある。完全なアドレスデコードではアドレスバスの全ての線をチェックし、CPUがメモリがマッピングされていない空間にアクセスしようとしている場合に入出力機器とデータバスの接続がなされる。部分的なデコードはより単純で安価である。その場合、ある機器がアドレス空間上の複数の位置にマッピングされているように見える場合もある。しかし、実際には1つの機器であり、それは単にデコーダを簡略化した副作用でしかない。デコーダはプログラム可能な場合もあり、メモリマップを必要に応じて変更できるものもある。これは特別な手法ではなく、バンク切り換えにも応用されている手法である。 以上から、メモリマップは次のようになる: デバイスアドレス範囲サイズRAM 000016 - 7FFF16 32 kB 汎用 I/O 800016 - 80FF16 256 B サウンドコントローラ 900016 - 90FF16 256 B ビデオコントローラ/テキストVRAM A00016 - A7FF16 2048 B ROM C00016 - FFFF16 16 kB このメモリマップには使われていない(何もマッピングされていない)隙間がある。これも特別なことではない。右下に「16」の添え字があるアドレスは16進数による表記である。 例えば、ビデオコントローラの4番目のレジスタで画面の背景色を設定するとしたとき、CPUはその色を A00316 という位置に(通常のメモリ書き込み命令で)書き込む。同様に文字を表示したければ、テキストVRAMの所定の位置にそれを書き込む。これはビットマップ画像として文字を表示することが一般化する前には普通に行われていた手法である(テキストユーザインタフェース参照)。
※この「メモリマップドI/Oの例」の解説は、「メモリマップドI/O」の解説の一部です。
「メモリマップドI/Oの例」を含む「メモリマップドI/O」の記事については、「メモリマップドI/O」の概要を参照ください。
- メモリマップドI/Oの例のページへのリンク