「ものづくり:make」を楽しみながら学ぶ人へ向けた独習サポートサイト。

and more...

Lab.以外の情報を紹介しています。

データーの読み取り動作と書き込み動作

【Z80】メモリーへのアクセス

2024-01-052024-01-21

Z80のメモリーに対するアクセス(読み取り動作・書き込み動作)について解説します。

1.Z80とメモリーの関係

Z80とメモリーの関係

Z80は、プログラム(機械語)を含むデーターを格納するためのメモリーを内部に持たず、バスと呼ばれる信号線の束によって接続された外部のメモリーを使用します。(詳しい解説は「【Z80】Z80の外観とピンの役割」を参照のこと。)

メモリーに対する動作には2種類あり、メモリーからデーターを取り出すことを「読み取り(リード)動作」といい、メモリーへデーターを保存することを「書き込み(ライト)動作」と呼びます。また、読み書きすることを「アクセス」と表現します。

図1-1.Z80とメモリーの関係
図1-1.Z80とメモリーの関係

メモリーは、1回のアクセスで読み書きできるデーターの長さ(記憶単位)が決まっており、この記憶単位ごとの格納エリアに0からの連番がつけられています。この連番をメモリーの「アドレス(番地)」といい、それぞれの格納エリアを「メモリーロケーション」と呼びます。

1回のアクセスで読み書きできるデーターの長さとメモリーロケーションの個数は、それぞれデーターバス(Data bus)とアドレスバス(Address Bus)の幅(本数)に対応します。Z80の場合、データーバス([mathjax]~\rm{D0}~[/mathjax]~[mathjax]~\rm{D7}~[/mathjax])が8本、アドレスバス([mathjax]~\rm{A0}~[/mathjax]~[mathjax]~\rm{A15}~[/mathjax])が16本なので、1回のアクセスで読み書きできるデーターの長さは8ビット(1バイト)、メモリーロケーションの個数は16ビットで表現できる「0000 0000 0000 0000(16進表記で0000H)」~「1111 1111 1111 1111(FFFFH)」までの最大65,536個となります。

図1-2.Z80がメモリーのアクセスに使用するピン
図1-2.Z80がメモリーのアクセスに使用するピン

なお、メモリーに対するデーターの読み取り動作・書き込み動作は、コントロールバス(Control bus)のうち、[mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{RD}~[/mathjax]・[mathjax]~\rm\overline{WR}~[/mathjax]によって制御されます。それぞれの役割は次の通りです。

[mathjax]~\rm{\boldsymbol{A0}}~[/mathjax]~[mathjax]~\rm{\boldsymbol{A15}}~[/mathjax]:Address bus(出力・正論理・トライステート):アドレスバスは、16ビット幅のバスです。メモリー・I/Oインターフェースに対するアドレスを出力します。ただし、I/Oインターフェースに対して有効なアドレスは、下位8ビット([mathjax]~\rm{A0}~[/mathjax]~[mathjax]~\rm{A7}~[/mathjax])のみです。

[mathjax]~\rm{\boldsymbol{D0}}~[/mathjax]~[mathjax]~\rm{\boldsymbol{D7}}~[/mathjax]:Data bus(入出力・正論理・トライステート):データーバスは、8ビット幅のバスです。メモリー・I/Oインターフェースに対するデーターの読み書きに使用します。

[mathjax]~\rm\overline{\boldsymbol{MREQ}}~[/mathjax]:Memory REQuest(出力・負論理・トライステート):アドレスバスが、メモリーへの読み書きに対して有効なアドレスを保持していることを示します。

[mathjax]~\rm\overline{\boldsymbol{RD}}~[/mathjax]:ReaD(出力・負論理・トライステート):メモリー・I/Oインターフェースに対してデーターの読み込みを要求します。アドレスで指定されたメモリー・I/Oインターフェースは、直ちにデーターバスにデーターを出力する必要があります。

[mathjax]~\rm\overline{\boldsymbol{WR}}~[/mathjax]:WRite(出力・負論理・トライステート):データーバスが、アドレスで指定されたメモリー・I/Oインターフェースに対する有効なデーターを保持していることを示します。

2.メモリーのアドレス空間とメモリー空間

アドレス空間

アドレスバスで指定できるすべての範囲を「アドレス空間」といいます。Z80のアドレス空間は、16本(16ビット)のアドレスバスで指定できる範囲なので「0000 0000 0000 0000(16進表記で0000H)」~「1111 1111 1111 1111(FFFFH)」となります。

図2-1.メモリーのアドレス空間とメモリー空間
図2-1.メモリーのアドレス空間とメモリー空間

メモリー空間

このアドレス空間のすべてを使うと、最大64Kバイトのメモリーにアクセスできます。ここで「最大」と表現したのには理由があります。その理由とは「メモリーの実装はアドレス空間の一部でもよい」です。例えば、2Kバイトのメモリー2個を「0000H~07FFH」と「8000H~87FFH」に配置することもできます。このように、アドレス空間のうち、メモリーが実装された範囲を「メモリー空間」といいます。

3.データーの読み取り動作と書き込み動作

メモリーのモデル図

Z80のメモリーに対するデーターの読み取り動作と書き込み動作について、その動作の流れをみてみましょう。図3-1は、Z80に接続されたメモリーのモデル図です。メモリーの内部には「アドレスの選択部」「データーのリード・ライト部」「制御部」があり、それぞれZ80のアドレスバス([mathjax]~\rm{A0}~[/mathjax]~[mathjax]~\rm{A15}~[/mathjax])・データーバス([mathjax]~\rm{D0}~[/mathjax]~[mathjax]~\rm{D7}~[/mathjax])・コントロールバス([mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{RD}~[/mathjax]・[mathjax]~\rm\overline{WR}~[/mathjax])が接続されています。

図3-1.メモリーのモデル図
図3-1.メモリーのモデル図

つまり、このメモリーのモデル図では、64Kバイトのアドレス空間に、64Kバイトの単一メモリー(RAM)が実装されていることになります。

データーの読み取り動作

まず、データーの読み取り動作です。Z80が、アドレス「0000 1110 0011 0000(16進表記で0E30H)」のデーター「0100 1001(49H)」を読み取ると仮定します。

Z80は、アドレスバス([mathjax]~\rm{A0}~[/mathjax]~[mathjax]~\rm{A15}~[/mathjax])に「0000 1110 0011 0000」を出力した後、コントロールバスの[mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{RD}~[/mathjax]をLレベルにします。メモリーは、[mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{RD}~[/mathjax]がLレベルになったことで、有効なアドレスがアドレスバス上にあり、Z80がデーターの読み取りを要求していると判断して、直ちに該当するデーター「0100 1001」をデーターバス([mathjax]~\rm{D0}~[/mathjax]~[mathjax]~\rm{D7}~[/mathjax])へ出力します。Z80は、データーバス上のデーターを内部に読み取り、[mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{RD}~[/mathjax]をHレベルにします。以上が、読み取り動作の流れです。

図3-2.データーの読み取り動作
図3-2.データーの読み取り動作

データーの書き込み動作

次に、データーの書き込み動作です。Z80が、アドレス「0000 1110 0011 0000(16進表記で0E30H)」のデーター「0100 1001(49H)」を書き込むと仮定します。

Z80は、アドレスバス([mathjax]~\rm{A0}~[/mathjax]~[mathjax]~\rm{A15}~[/mathjax])に「0000 1110 0011 0000」を出力した後、コントロールバスの[mathjax]~\rm\overline{MREQ}~[/mathjax]をLレベルにします。続けて、データーバス([mathjax]~\rm{D0}~[/mathjax]~[mathjax]~\rm{D7}~[/mathjax])に「0100 1001」を出力した後、コントロールバスの[mathjax]~\rm\overline{WR}~[/mathjax]をLレベルにします。メモリーは、[mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{WR}~[/mathjax]がLレベルになったことで、有効なアドレスがアドレスバス上にあり、Z80がデーターの書き込みを要求していると判断して、直ちにデータバス上のデーターを該当アドレスのメモリーロケーションに保存します。その後、Z80は、[mathjax]~\rm\overline{MREQ}~[/mathjax]・[mathjax]~\rm\overline{WR}~[/mathjax]をHレベルにします。以上が、書き込み動作の流れです。

図3-3.データーの書き込み動作
図3-3.データーの書き込み動作

おすすめ

機械に知力をつける 制御用マイコン―初歩から応用まで[第2版]

出版社
日刊工業新聞社
著者
太平洋工業株式会社
発売日
1986/2/1

図解 Z80マイコン応用システム入門(ハード編)

出版社
東京電機大学出版局
著者
柏谷 英一
発売日
2000/5/20

図解 Z80マイコン応用システム入門(ソフト編)

出版社
東京電機大学出版局
著者
柏谷 英一
発売日
2000/3/20

図解 マイクロコンピュータ Z-80の使い方

出版社
オーム社
著者
横田 英一
発売日
1981/5/1

ザイログZ80伝説

出版社
ラトルズ
著者
鈴木 哲哉
発売日
2020/8/25
この記事を読んだ人は、こんな記事にも興味があります。
スポンサーリンク
TOPへ移動
目次へ移動