X1turbo Agency

X1turbo Agency ブログ

8bitコンピュータ X1turboの探求サイト

X1turbo Agency

X1turbo DMA バイト転送/バースト転送の負荷計測

X1turbo用 DMA負荷計測について

X1turboには Z80 DMAが搭載されています。
Z80 DMAのバイトモードと比較のためバーストモードについて探求しました。

実機側の処理負荷は走査線位置を表示して計測します。
この画像では、赤い線がDMA処理負荷、青い線がCPU処理負荷を示しています。
それぞれが同じ処理負荷ですが、DMA実行中はCPU処理が遅くなるため、青い線が太くなります。

Z80DMA バイト転送

バイトモードは、CPUとDMAの両方がバスを使用して転送を行います。
X1turboでFDを読込ながらBGMを鳴らす場合もこれを使用しています。
DMAの転送中でもCPUの処理が行えます。

Z80DMA バースト転送

バースト転送は、DMA転送が終了するまでバスをDMAが占有します。
その間はCPUは他の事ができなくなります。

サンプルプログラム

DMAテスト用プログラムを作成して検証を行います。

毎フレーム CPUで処理を実行し、並列にDMAバイト転送を行います。
バイト転送の転送先/転送元の種類を変更して、CPUの処理終了時間を実測します。

  • 転送種類

    • メインメモリ, GRAM,EMM
  • 計測時の画面モード

    • 15KHz / 24KHz
  • 実行環境

実行結果

  • 転送量 06c0h
  • M: メモリ / G: GRAM / E: EMM / T: TEXT
バイト転送計測比較

CPUとDMAが並列に実行しているモードです。
比率はDMAが動作していない時との処理時間の比率です。

バースト転送計測比較

DMAが優先して実行しているモードです。
比率は最速のメモリ間転送時の処理時間の比率です。

実行結果から分かった事

バイト転送
  • DMA実行時、CPUの実行スピードは 1/3 ~ 1/4 まで低下する。
  • 実機ではエミュに比べると転送 30%程度遅い。
バースト転送
  • GRAMからの読出しはあまり影響がないが、GRAMへの書込みは30%程度遅くなる。
    • CPUのアクセス速度では表面化しにくい?
  • GRAM間コピーはそれ以上に遅く、15KHz,24KHz転送時に差があり、24KHz で 50%、15KHzで 70%程度遅くなる。
  • 例えば、GRAMに描画データを載せて、DMAでGRAMへ転送すると想定以上に遅くなる。

まとめ

DMA転送の処理計測を行って特性を調べることが出来ました。
この辺りが判ると更に高速化、効率化を行う事が出来ます。

処理負荷を下げるには、「対象を明確にして不明点を無くすこと」が有効です。
Z80のシステムでも、64bit のマルチコアの最適化でも、そこは変わらないです。