2018年06月29日

動作速度算出(2)

  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クロック

  という感じで計算できます。


  まだ続きます。


posted by えすび at 21:00| Comment(0) | P6解析:CPU周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。