P6月間特別企画(その29)
処理時間を求める、の続きです。
3.各命令の実行時間とM1サイクル
それぞれの命令に掛かる時間は、命令ごとによって違います。Z80 のドキュメントを参考にします。
Z80 USER MANUAL で検索すると、Zilog社のpdfファイルが見つかると思います。
http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&dn=UM0080&ft=User%20Manual&f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2T0RBdlZVMHdNRGd3TG5Ca1pnPT0=
それぞれの命令の説明の、T states(ステート数)というのが、その命令を実行するのに掛かるクロック数です。
一番短いクロックは、4クロック(LD A,B や NOP など)です。
T states(ステート数)は、それぞれの命令について全部明記されているので、それを合計していけば全体の処理クロック数になる...といいのですが、P6の場合、さらに M1サイクルを考慮する必要があります。なぜ M1サイクルを考慮する必要があるかというと、P6では M1サイクルに 1WAIT 挿入されるからです。
Z80が命令を処理する際、
オペコードを読み込む(M1サイクル)
メモリから読み出す (M2サイクル)
メモリに書き込む (M3サイクル)
の順序で処理が行われます。
M2、M3サイクルは、命令によっては存在しないのですが、M1サイクルは全ての命令に存在します。
ややこしい事に、命令によってはM1サイクルが1命令内で2つあるものがあります。
オペコードで表した時に、0xCB、0xED、0xDD、0xFD で始まる命令は、M1サイクルが2つあります。
0xCB:ビット演算系
0xED:Z80で拡張された命令
0xDD:IX系
0xFD:IX系
『M1サイクルに 1WAIT 挿入』というのは、M1サイクル時にメモリから読み出す際に、1クロック分の待ち時間を挿入するという意味です。WAIT(待ち時間)の挿入というのは、CPUに対してメモリ動作が遅いために取られている処置です。
WAITが挿入されるのは以下の通りです。
○初代機:
M1サイクルで、1WAIT
ROM領域(0x0000〜0x7FFF)へのメモリリード/ライトで、1WAIT
○mk2/66:
ポート0xF3:bit7-5の設定に従う。
ポート0xF3:bit7:M1 サイクルでのWAIT (0:OFF 1:ON)
ポート0xF3:bit6:ROMブロックでのWAIT (0:OFF 1:ON)
ポート0xF3:bit5:RAMブロックでのWAIT (0:OFF 1:ON)
(bit4-0は割り込み関連の設定)
デフォルトは 0xC2 で、M1サイクルとROM領域のみ、1WAIT挿入されます(初代機と同じ)。
WAIT挿入を無くせればCPUの動作が速くなるのですが、やっかいな事に普通ではこのWAIT挿入を無くす事が出来ません。
詳しくはこちらを参照して下さい→http://sbeach.seesaa.net/article/387861448.html
結局、通常はM1サイクルが1or2あるものとして計算する事になります。
例えば、
LD A,B :ステート数が4なので、4+1クロック
ADC HL,HL:ステート数が15で 0xED から始まるので、15+2クロック
という感じで計算できます。
まだ続きます。
2018年06月29日
この記事へのコメント
コメントを書く

