Zilog のタイミング図に、あなたの質問に対する答えがあります。
リフレッシュは、すべての M1 (オペコード フェッチ) サイクルの T3 と T4 の間に発生します。
単一オペコード命令の場合、これは命令ごとに 1 回のリフレッシュです。シングルプレフィックス命令 (プレフィックスは M1 サイクルを使用して読み取られる) の場合、命令ごとに 2 回のリフレッシュになります。
これらの奇妙な DD-CB-disp-opcode および FD-CB-disp-opcode タイプの命令 (変位バイトが最終オペコードの後ではなく前に来るので奇妙です) の場合、リフレッシュの数は少なくとも 3 です (2 つのプレフィックスの場合)。および最終オペコード)、しかし、変位バイトが M1 サイクル (別のリフレッシュをトリガーする) の一部として読み取られるのか、通常のメモリ読み取りサイクル (リフレッシュなし) として読み取られるのかはわかりません。これらの命令では、変位バイトは M1 サイクルで読み取られると思いがちですが、よくわかりません。私はこれについてショーン・ヤングに尋ねました。彼も確信が持てませんでした。誰か確実に知っていますか?
アップデート:
私は、これらの奇妙な DD-CB-disp-opcode および FD-CB-disp-opcode 命令に関する自分の質問に答えました。RLC (IX+d) などのこれらのタイプの命令に関する Zilog のドキュメントを確認すると、命令には 6 つの M サイクルと 23 の T サイクルが必要であることがわかります。 、3)。
最初の 2 つの M サイクルは、DD および CB プレフィックスを取得するための M1 サイクルであることがわかっています (それぞれ 4 つの T サイクル)。次の M サイクルは、変位バイト d を読み取ります。しかし、その M サイクルは 4 ではなく 3 つの T サイクルのみを使用するため、M1 サイクルになることはできません。代わりに、通常のメモリ読み取りサイクルです。
RLC (IX+d) 命令の 6 つの M サイクルの内訳は次のとおりです。
- 0xDD プレフィックスを読み取るための M1 サイクル (4 T サイクル)
- 0xCB プレフィックスを読み取るための M1 サイクル (4 T サイクル)
- 変位バイトを読み取るためのメモリ読み取りサイクル (3 T サイクル)
- 0x06 オペコードをフェッチし、IX を ALU にロードするための M1 サイクル (5 T サイクル)
- アドレス IX+d から計算して読み取るためのメモリ読み取りサイクル (4 T サイクル)
- RLC を計算し、結果をアドレス IX+d に書き込むメモリ書き込みサイクル (3 T サイクル)
(RLC 計算は、M サイクル 5 と 6 をオーバーラップします。)
これらのタイプの命令は、連続していない M1 サイクル (上記の M サイクル 1、2、および 4) を持つ唯一の Z80 命令であるという点で独特です。彼らはまた、最も遅いです!
ポール