質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

Q&A

3回答

4813閲覧

「Z80CPU」及び「PIO」における、「M1ピン」の役割及びマシンサイクルについて

mr0237

総合スコア164

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

0グッド

0クリップ

投稿2018/09/01 11:09

編集2018/09/02 22:41

「Z80CPU」及び「Z80PIO」に関する質問なんですが、

Z80CPU及びZ80PIOに付いている「M1ピン」についてですが、この「M1ピン」は何の役割があるのでしょうか?

「コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識」書籍内の
「第2章:コンピュータを作ってみよう。」内の「他の制御ピンをつなぐ」(P42)には

M1ピンは、タイミングを合わせるためのピンで、INTピンは、Z80 PIOからZ80 CPUに割り込みを要求するためのピンです。

と記載されていますが、これはCPU内において

1. CPU側:マシンサイクル内において最初の工程(フェッチサイクル=命令取出し)処理が終了

フェッチサイクル=命令取出し)処理が終了

2. CPU側:M1ピンを通じてI/Oに処理終了を出力する(いわばフェッチサイクル終了を知らせる)

3. I/O側:CPUからデータを送信する。

4.CPU側:「RETI命令」で処理の優先順位を変更する

MIピンにて終了及びRETI命令の実行

という工程だと思いますが、M1ピンの役割は「フェッチサイクル終了を知らせる(タイミングを合わせる)」役割であると、解釈してよろしいのでしょうか?

又、**Z80CPUには「ディージーチェインの優先度を変更する」**ということなんですが」、これはどういうことなんでしょうか?

つまり、「CPU」以外に繋がっている「メモリ」&「PIO」の接続を電子回路上にて、「直接接続」or「直接切断」するということ何でしょうか?

回路上にて接続・切断?


さらに、この「マシンサイクル」についても質問がこざいますが、

①**「マシンサイクル」「命令サイクル」とも呼ばれるらしいのですが、これは基本的には同じもの**を指すのでしょうか?

②**「マシンサイクル」日本語に直訳すると「機械繰り返し(?)」と訳されると思いますが、この「マシンサイクル」という名前の由来**は何なんでしょうか?

③マシンサイクルにて基本的に構成されている要素は

1. 命令取出し(フェッチ)
2. 読み込み(メモリリード)
3. 書き込み(メモリライト)

基本的にこの3つで構成されているのでしょうか?

回答のほうお願いします


(9月3日 追記)
すいません。M1ピンの役割日常的に例えたもののほうがわかりやすいです。

お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

M1ピンは、メモリアクセスが命令の1バイト目であることを示す信号です。
例えばLD A,(0100H)は3バイト命令ですが、1バイト目のアクセス時だけM1がアクティブになって、2-3バイト目のアクセス時にはアクティブになりません。また、この命令によって行われる0100H番地からの読み込みの時もアクティブになりません。
なので、質問文中に書かれていることは全部間違いです。

なお、Z80だとプリフィックス付きの命令があり得ますが、この際のM1については、プリフィックスと本来の命令の1バイト目両方でオンになったのかどうかは、覚えていません。

Z80CPUには「ディージーチェインの優先度を変更する」ということなんですが」

これについては、そもそものZ80の割り込み処理についての理解が要ります。

①「マシンサイクル」は「命令サイクル」とも呼ばれるらしいのですが、これは基本的には同じものを指すのでしょうか?

マシンサイクルは、普通は、マシンクロック(2MHzとか)の1回の繰り返しのことです。命令サイクルという言葉は一般的では無いと思いますので、意味はわかりません。『「マシンサイクル」は「命令サイクル」とも呼ばれる』と書かれていたのであれば、書いた人は同じ意味で使っているのでしょう。他人には分かりません。

②「マシンサイクル」は日本語に直訳すると「機械繰り返し(?)」と訳されると思いますが、この「マシンサイクル」という名前の由来は何なんでしょうか?

マシン動作の繰り返しの基本単位だからでしょう。

③マシンサイクルにて基本的に構成されている要素は

基本的にこの3つで構成されているのでしょうか?

これは日本語の問題ですね。厳密な意味がちょっと読み取れないので、なんとも。
「CPUのある瞬間の動作は基本的にこの3種類だけでしょうか?」
という質問であれば、命令取り出しもメモリリードの一種なので、そのあたりどういうつもりで書いたのかに依ります。あと、Z80だとDRAMリフレッシュというのもありますね。

投稿2018/09/01 12:03

otn

総合スコア84503

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mr0237

2018/09/02 03:16

すいません。質問文中に書かれていることは全部間違いだということなんですが、上記の書籍に掲載されていた「タイミングを合わせる」とはどういうことなんでしょうか? そもそも「Z80CPU」及び「Z80PIO」にて、「タイミング」とは、なんのことを指しているのでしょうか?
otn

2018/09/02 11:46 編集

CPUの信号出力ピンは、アドレス・データ用を除いて、基本的に「タイミングを合わせる」ための物です。メモリやPIO/SIOに動作を指示します。 (つまり「M1ピンは、タイミングを合わせるためのピン」という表現は情報量ゼロです) 例えば、WRはその信号がアクティブになったタイミングで出力データが確定するので、WRをトリガにしてメモリやIOに書き込みます。 M1は、IOからの割り込みベクターの出力に使うんだったような気がします。IOREQかつRDかつM1で、PIO/SIOは割り込みベクターを送出する。単純なメモリ読み書きには、M1信号は多分不要。
mr0237

2018/09/02 10:50

すいません。じゃあM1ピンの役割とは、「空いてるタイミングを周辺チップに知らせる」と聞いたのですが全く違うということなんでしょうか?ここに掲載されていたのですがこれとは別物なんでしょうか? 「タイミングを合わせるとはどういうことなのか?」https://okwave.jp/qa/q9522297.html
mr0237

2018/09/02 10:52

すいません。さっきの件なんですが、これはつまり、「M1ピン」の役割とは「フェッチサイクル終了時にCPUに割り込んでも良いタイミングを知らせる(出力)するためのピンのこと」だということなんでしょうか?
otn

2018/09/02 11:55

> じゃあM1ピンの役割とは、「空いてるタイミングを周辺チップに知らせる」と聞いたのですが全く違うということなんでしょうか? 違います。M1がインアクティブでも、CPUはバスを使っています。命令の1バイト目以外のメモリアクセスは、M1がインアクティブです。と、回答の最初に書いたのですが? 周辺装置がバスを使いたいときは、CPUに対して、BUSRQを出して、CPUからBUSAKをもらって、ようやく使えるようになります。 BUSRQ自体は任意のタイミングで出せるはずです。
mr0237

2018/09/03 16:01

すいません。何か気がかりな点がありますが https://okwave.jp/qa/q9522297.html 上記の回答内容にて、(全体から見て)共通して書かれていることとして ・「CPUの「M1ピン」は、M1サイクル(フェッチサイクル)を実行中にのみアクティブになるピン」 ・「M1ピンは(CPUの処理が)空いてるタイミングを周辺チップに知らせる為の役割」 ・「CPUの状態の変化などがあり、それらを教えたい時に使っている」 等と書かれておりますが、なぜそのように書かれているのでしょうか? もし「M1ピンは、メモリアクセスが命令の1バイト目であることを示す信号」だとしたら、 リンク先である回答内容には「命令コードの1バイト目であることを示す信号である」等と共通してそのように書いてあるはずなのですが、なぜ「空いているタイミングを知らせる」等そんな風に書かれていたのでしょうか? あえて初心者に分かりやすいように、そのように書いたのでしょうか?
otn

2018/09/04 01:28

・「CPUの「M1ピン」は、M1サイクル(フェッチサイクル)を実行中にのみアクティブになるピン」 は、私が書いているのと同じですね。 ・「M1ピンは(CPUの処理が)空いてるタイミングを周辺チップに知らせる為の役割」 を書いているのは1名だけですね。 ・「CPUの状態の変化などがあり、それらを教えたい時に使っている」 は具体性がないので、何とも。私の書いた、 > CPUの信号出力ピンは、アドレス・データ用を除いて、基本的に「タイミングを合わせる」ための物です。 と同じとも取れる。
otn

2018/09/04 01:33

> もし「M1ピンは、メモリアクセスが命令の1バイト目であることを示す信号」だとしたら、 なお、回答に書いた通り、憶えてませんが、プリフィックス付きの命令( ED xx、CB xx、 DD xx、FD xx )については、2バイト目以降でもオペコードフェッチの間はM1がアクティブになったかも知れません。
mr0237

2018/09/05 10:39

何度も失礼します。そもそもここでいう「アクティブ」とはどういう意味なんでしょうか? 「アクティブ」について自分なりの考えで失礼しますが、「なんかの動作中に「入力等」を受け付ける」という解釈で正しいのでしょうか? 間違っていたら誠にすいませんが、(なるべくわかりやすく)教えてください。 本当にすいません。
y_waiwai

2018/09/05 10:46 編集

アクティブ、とは、有効状態、ということです Lowアクティブの信号線では、アクティブでLowになります。 M1もLowアクティブの信号線ですね。 繰り返しますが、M1は命令のフェッチサイクルにアクティブとなる信号線です。 って、それより、Z80の割り込みシーケンスを理解したいなら、デイジーチェインをまず理解しないとだめです。IEI、IEOというのはどんな信号か調べてみてはどうでしょうか。
otn

2018/09/05 10:59

アクティブの意味を分かっていなかったとは。 アクティブとは、有効と言うことです。M1がアクティブな時は、M1サイクルであることを示し、RDがアクティブなときは、メモリやIOからのリード状態であることを示します。他も同様。 アクティブかどうかは、その信号線の出力電圧で判断します。 M1という信号名の上に上線が付いていると思いますが、M1(上に線)は、負論理(電圧が低いときにアクティブ、電圧が高いときにインアクティブ)です。上に線の無い信号名は、正論路(電圧が高いときにアクティブ、低いときにインアクティブ)です。 Z80のピンの制御信号は全部上に線が書いてあり、全部負論理です。 ピンの残り、アドレス信号・データ信号は、正論理(電圧が高いと1、低いと0)です。
mr0237

2018/09/09 14:17 編集

何度も失礼します。 >M1ピンは、メモリアクセスが命令の1バイト目であることを示す信号です。 >M1は、IOからの割り込みベクターの出力に使うんだったような気がします。IOREQかつRDかつM1で、PIO/SIOは割り込みベクターを送出する。単純なメモリ読み書きには、M1信号は多分不要。 ということですが、そもそも「M1ピン」は何の為にあるのでしょうか? M1ピンが「ある」のと「ない」のとでは、どんなメリットやデメリットがあるのか、どう役に立つのかよくわかりません。 M1ピンは何の為にあって、M1ピンが「ある」のと「ない」のとでは、どう違うのでしょうか? (なるべくわかりやすく)教えてください。 何度もすいません。
otn

2018/09/09 14:23

普通のメモリアクセス回路には不要だと思います。 IOからの割り込みについては上記の通り必要です。
pepperleaf

2018/09/09 22:29

昔、Z80系は使った事がありますが、記憶に無いという事は必ずしも使う必要が無いという事ではないでしょうか? まあ、ハード専門で無いので見落としていた可能性はありますが、、。(当然、端子の始末くらいはしてた筈)
mr0237

2018/09/10 16:22

すいません。何度も失礼します。この >IOからの割り込みについては上記の通り必要です。 とこのように書いてありますが、もし「IOからの割り込み」に「M1信号(M1ピン)」がないとどうなるのでしょうか? 分かりやすく言うと「処理の効率が落ちてしまう(=処理が遅くなる)」ということなのでしょうか? 何度もすいません。
otn

2018/09/10 16:27

割り込み命令や割り込みベクターをCPUにいつ送っていいのかわかりません。 前に書いたのですが。2018/09/02 15:54 のコメント。
guest

0

  1. CPU側:マシンサイクル内において最初の工程(フェッチサイクル=命令取出し)処理が終了

M1というのは、命令のフェッチサイクルである、ことを示す信号です

①「マシンサイクル」は「命令サイクル」とも呼ばれるらしいのですが、これは基本的には同じものを指すのでしょうか?

同じものでしょうね

で、RETIによる優先順位変更については、IEI、IEOの信号をまず理解することが必要です。
Z80のハードウエアマニュアルをよく読んで理解しましょう

投稿2018/09/01 11:14

編集2018/09/01 11:17
y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/09/09 14:22

M1というのは、命令フェッチサイクルであることを示す信号です。 そのメモリアクセスが命令フェッチサイクルか、オペランドアクセスかの区別のためにあります で、そのM1信号を使っているのが、まさに、Z80PIOや、Z80SIOなどの周辺デバイスです、 M1信号がないと、周辺デバイスが割り込みペンディング状態を取得できなくなって、正常な割り込み処理ができなくなります しかし、こんなところで駄々こねるより、ハードウエアマニュアルを読みましょうよ。その信号がどんな意味を持ってるか書いてあります
y_waiwai

2018/09/09 14:26

ああ、ハードウエアマニュアルというのは、Z80CPUはもちろんのこと、Z80PIOのものも読みましょうねっ
mr0237

2018/09/10 16:23

>しかし、こんなところで駄々こねるより、ハードウエアマニュアルを読みましょうよ。その信号がどんな意味を持ってるか書いてあります すいません。「Z80CPU」と「Z80PIO」のハードウエアマニュアルとかの技術書をよく読んでみたのですが、それでもわからなくて質問しているんですが。例えば >M1信号がないと、正常な割り込み処理ができなくなる このように書いてありますが、もしこの「正常な割込み処理」ができなくなるとどうなるのでしょうか? 分かりやすく言うと、「処理の効率が落ちてしまう(=処理が重くなる)」ということなのでしょうか?
y_waiwai

2018/09/10 22:00

割り込み処理ができなくなります Z80のシリーズでは、デイジーチェインという仕組みと、周辺デバイス自身が割り込み終了を示すRETI命令を解釈する、ということで割り込みの優先度シーケンスを構築しています そのためにM1信号が使用されてますねー まあ、これを理解するにはそもそも割り込み処理とは何か、これを実現するためにはなにをしなければならないか、などを理解する必要がありますね
mr0237

2018/09/13 09:53

すいません。 >割り込み処理ができない これをもっと詳細に(電気回路的に)いうと「誤動作に繋がってしまう」ということでしょうか? それとも本当に原理的にできないのでしょうか? 何度もすいません。
y_waiwai

2018/09/13 10:31 編集

Z80の周辺デバイス(Z80PIO)は独自に、いま実行する命令、をデコードしてます。 その命令フェッチサイクルを判定するのにM1を使ってます それができないと、そもそもZ80のデイジーチェーンシステムは成り立ちません。 #まあ、割り込みアクノリッジにもM1は使ってますが、これはべつのおはなし
mr0237

2018/09/14 23:43

何度もすいません。「コンピューターはなぜ動くのか?」の書籍内に >M1ピンはタイミングを合わせるためのピンで と記載されておりますが、 これは上記のコメント内容を参考に解釈すると 「M1ピンは命令フェッチサイクルを示す信号を出力することによって、割り込みのタイミングを合わせるためのピン」 という解釈でいいのでしょうか?
y_waiwai

2018/09/14 23:51

割り込みのタイミングを合わせるため、ではないです。 ぶっちゃけ、あなたの質問、言ってることはすべて的外れです あなたのやりたいことはなんですか? M1の信号の意味を知りたいと言うなら、すでに何度も言ってます Z80の割り込みのシーケンスを知りたいと言うなら、まずZ80のマニュアルを読んで理解しようとしてください。 そこらへんの基本的な知識がないままやり取りしても不毛なだけです いろんな信号でいろんなやり取りをして割り込みのシステムが成り立ってます。それをM1だけとってきてどーこーするのはするのは無意味です
mr0237

2018/09/17 22:40

じゃあ。すいません。「コンピューターはなぜ動くのか?」の書籍内に >M1ピンはタイミングを合わせるためのピンで と記載されておりますが、これはどう解釈したら良いのですか?教えてください。
y_waiwai

2018/09/17 23:13

その書籍を読んだことはないし、著者がなにを考えてそう書いてるのかも知りません。 その文章が果たして割り込みに関して書かれたものか、前後もないので判断できません。 それを書いた人に聞きましょう
mr0237

2018/09/19 01:18

じゃあすいません。 >ぶっちゃけ、あなたの質問、言ってることはすべて的外れです と書かれておりますが、 このサイトにある https://okwave.jp/qa/q9522297.html 上記の回答内容にて、(全体から見て)共通して書かれていることとして ・「M1ピンは(CPUの処理が)空いてるタイミングを周辺チップに知らせる為の役割」 ・「CPUの状態の変化などがあり、それらを教えたい時に使っている」 等と書かれておりますが、私自身の傾向から見て要約すると、 「M1ピンは命令フェッチサイクルを示す信号を出力する為のピン。」 「CPU等の割り込みのタイミングを合わせる為に「M1ピンの出力信号」を利用する。」 と(私自身)解釈されますが、私自身の解釈はどの部分が間違っているのでしょうか? 詳しく、わかりやすい例えで教えてください。 よろしくお願いいたします。
y_waiwai

2018/09/19 01:41

繰り返しになりますが、ハードウエアマニュアルを読みましょうよ。 この世の中で唯一、Z80に関して、本当のことしか書いてない文書です。 あなたが屁をこいたとしましょう あるひとは、臭いなー、とおもいます あるひとは、ああ、うんこの前触れなんだな、と思います あるひとは、こんな時間に屁とはなんだ!これは我々に対する侮辱である、とおもいます。 これらの人の解釈はどこが間違ってるでしょうか。 で、あなたの言う本当のこと、とはどういうことでしょうか。
mr0237

2018/09/19 22:46

>繰り返しになりますが、ハードウエアマニュアルを読みましょうよ。 上記のコメントにも書いてありますが、ハードウエアマニュアルとかの技術書をよく読んでみたのですが、それでもわからなくて質問しているんですが。 >あなたの言う本当のこと、とはどういうことでしょうか。 上記のコメント内容とこれと関係あるんですか? それで、念の為確認なんですが、私自身が書いたM1ピンの役割及びタイミングに関してコメントの内容は正しいのでしょうか?それとも間違っているのでしょうか? 間違っていたら、どこが間違っているんですか?詳しくわかりやすく教えてください。 よろしくお願いいたします。
y_waiwai

2018/09/20 15:00

間違っています。 「CPU等の割り込みのタイミングを合わせる為に「M1ピンの出力信号」を利用する。」 周辺デバイスの割り込み出力は、M1信号に関わりなく出力されます。 それだけのはなしです。
mr0237

2018/10/03 22:43

何度も失礼します。 Z80のハードウエアマニュアル にて、「Z80 CPU」についている「M1ピン」は「出力専用」で、「Z80PIO」についている「M1ピン」は「入力専用」となっていますが、これはつまり、M1ピンは、「命令フェッチサイクルであることを示す」のみしかできないということなんでしょうか? 何度もすいません。
y_waiwai

2018/10/03 23:37

http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&dn=UM0080&ft=User%20Manual&f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2T0RBdlZVMHdNRGd3TG5Ca1pnPT0= Z80CPUのマニュアルです。 M1信号は、命令フェッチサイクル、のほかに、割り込みアクノリッジサイクルでもアクティブとなります # Figure 9. Interrupt Request/Acknowledge Cycle さて、この割り込みアクノリッジサイクルのM1信号のこのふるまいはなにを意味しているのか、ということを調べてみましょう。 これは、割り込みを生成する側、Z80PIOのハードウエアマニュアルを調べる必要があります。
mr0237

2018/10/05 02:52

何度も失礼します。 Z80PIOのハードウエアマニュアルはどこで入手できますか? ネットで調べても出てこないんですが、どこにあるんでしょうか?
mr0237

2018/10/07 15:15

何度も失礼します。 z80pio datasheetのマニュアルにて「M1信号の役割」はどこに載ってあるんですか? そもそも「割り込みアクノリッジサイクル」についてどこに記載しているんですか?
y_waiwai

2018/10/07 21:16 編集

上に示したマニュアルでは、 CHAPTER 6 INTERRUPT SERVICING にそこらへんの説明があります Figure 6-1. Interrupt Acknowledge Timing で、割り込みアクノリッジサイクルのタイミング図があります また、 Figure 6-2. Return From Interrupt Cycle で、RETI命令実行時のタイミング図ですね。 さて、ここに来てようやく、私の回答に追いついてきました > で、RETIによる優先順位変更については、IEI、IEOの信号をまず理解することが必要です。 > Z80のハードウエアマニュアルをよく読んで理解しましょう # M1信号の解説については、Z80CPUのマニュアルの6ページあたりに書いてますね
y_waiwai

2018/10/07 21:11

さて、Z80(とその周辺デバイス)がなんでこんなややこしいことをしているか、というと、 ・同時に複数のデバイスが割り込みを出したとき ・割り込み処理の実行中に、他のデバイスが割り込みを出したとき に、動作が破綻しないようにするためなのです
mr0237

2018/10/14 01:24

すいません >CHAPTER 6 INTERRUPT SERVICINGにそこらへんの説明があります 「CHAPTER 6 INTERRUPT SERVICING」のところを読んでみたのですが これはつまり、「M1ピン」の役割は、「命令フェッチサイクルであることを示す」だけしか(M1ピンは)できないということなんでしょうか?  言ってみれば、 「Z80 CPU」についている「M1ピン」→「出力専用」 「Z80 PIO」についている「M1ピン」→「入力専用」 マニュアルにはそのように書いてありますが、そのような解釈で良いのでしょうか?
y_waiwai

2018/10/14 12:40

それはそういうことですな Z80CPUのM1ピンは入力にはなりません #HiZにはなるけど
guest

0

何が質問の主旨かよく分からないですが、、、

まず、Z80 と Z80PIOは別物ですね。 Z80PIOは、パラレルI/F用チップ。
M1ピンは知らなかったですが、8ビット CPU Z80タイミング によると、オペコードフェッチ中を示すようですね。(この間は、リフレッシュするな? という意味か。
で、ここによると、Mサイクルは、マシンサイクル。M1は、命令フェッチで、その後に、M2, M3, ... と続くようです。(ま、当然?) 単純な命令は、メモリ読出し、メモリ書出しで終わるで、M1, M2, M3 で終わると。複雑な場合は、それ以降も必要になるということでしょう。 (演算もあるし、ループもあったと思う)

デージーチェーンの優先度変更は、割込み優先度変更という事でしょうか? これもZ80だと別チップだったか?

投稿2018/09/01 11:33

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問