XScale and Wireless MMX(WMMX)

Windows Mobile のグラフィックス描画は、結構イイ感じで遅い。アクセラレータが入っていないのが主たる原因だが、根本的な問題として…

LCDユニットとCPUとの接続が、スキャン方式であること
 CPUのメモリマップ上にVRAMが存在するが、LCDユニットの入力インタフェースはピクセル単位で、LCDユニットがVRAMをスキャンしながらLCDユニット上にグラフィックスデータを転送しており、LCDユニットへの転送速度が、デバイスの最大転送速度ということになること。
・DirectDrawの実装が中途半端で使い物にならない
 W-ZERO3では、(LCDユニットの制限により)VSYNCが実装されていないし、横画面にした時はDirectDrawの初期化が失敗する、
 EM・ONEでは、DirectDrawの初期化時に画面の幅と高さが逆に入ってくる。
・不必要に画面を大きくしすぎ
 SoftbankX01HTのように、QVGAスクリーンでは描画速度の問題はほとんど発生しない。しかし、W-ZERO3のようなVGA端末だと、描画速度が非常に低下する。EM・ONEのようなWVGA画面であればなおさら。ワンセグだってQVGAなんだから、いくらブラウザで大きな画面が必要とはいえ、ヤドカリにマンション背負わせるようなハードウェア設計はいかがなものかと…

などがある。

描画と時空間管理を別スレッドにして処理単位を完全に分離するとかの基本設計的な対処は当然行うにしろ、もっと低次元での一日一善的な努力の積み重ねも必要ではないかと。んなわけで

Wireless MMX(WMMX) on XScale

かなぁ…との結論に。しかし実際に始めようとすると、それなりに障害があるもんで。

1.VisualStudio2005のWindowsMobile開発環境では、_asmキーワードが不可。
2.ARMASM.EXEを使わないとならないが、MMXインストラクションの説明があまりない。
3.C言語間インタフェースが(今のところ)よくわからん
 push bp
 mov bp.sp
 〜
 〜
 mov ax, 0
 pop bp
 みたいなヤツね。これはx86-16bitインタフェースだけど
 6502みたいだって話もあるので、なんとかなりそうではあるが。
 LDA $10
 TXA
 LDA Y, $20
 とか、そんな感じだったな確か。


そんなこんなで、取りあえずは調査からかな。


・Wireless MMX(WMMX)ドキュメントハケーン
http://int.xscale-freak.com/XSDoc/WMMX/251669_devguide.pdf
・ARMASM.EXE のヘルプもハケーン
"-cpu XSCALE" でイイのかな?
http://msdn.microsoft.com/ja-jp/library/ms253568.aspx


EM・ONE

VRAM(800x480)に、memsetすると、約40msかかります。つか、かかりすぎです。36ms〜44msと幅があるので、CRTC止めたり、VRAMロックしたりすれば変わるのか知らん?
ちなみに、普通のRAMへのWriteは、同サイズで2ms。RAMからVRAMの転送(BitBlt)は、約60ms。
さてどうしたものやら。