MI-ZaurusでVRAMに直接アクセスする方法
注意
このページの内容は、私が豆腐の角に頭をぶつけたときに閃いたものであり、
内容について一切保証しません。ザウルス本体が壊れたり、
データ内容が消えたりする可能性も少なからずあります。
また、仮に正しく動いたとしても、この手法はザウルス間の互換性を大きく低下させます。
そのリスクを十分に勘案した上で実験してみてください。
使用する関数
- int EnableAccessVRAM(void);
-
VRAM直接アクセスを有効にします。
返り値の詳細は不明です。
- short *GetVramTop(void);
-
VRAMの先頭アドレスを返します。
EnableAccessVRAM()を呼び出した後に呼び出す必要があります。
このアドレスはDisableAccessVRAM()を呼び出すまで有効です。
- int DisableAccessVRAM(void);
-
VRAM直接アクセスを無効にします。
返り値の詳細は不明です。
VRAM直接アクセスを有効にしたままAPIによる描画が行われると
動作が不安定になるので、アクセスが終了したら速やかに無効にするべきです。
VRAMの構造
VRAMはワード単位でデータが入っています。
- v:GetVRAMAddr()の返り値
- x:アクセスしたいピクセルのX座標
- y:アクセスしたいピクセルのY座標
とすると、アクセスしたいピクセルのアドレスは以下の式で求められます。
- VGAカラー機種: (short *)(v + y * 2048 + x)
- QVGAカラー機種: (short *)(v + y * 1024 + x)
- QVGAモノクロ機種: (short *)(v + y * 160 + x / 4)
注:QVGAモノクロ機種は1ワードに4ピクセル入っています。詳細は後述。
データワードの詳細
カラー機種
1ピクセル1ワードです。
ビット | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
|
色要素
| Red
| Green
| Blue
|
モノクロ機種
1ワードに4ピクセル分のデータが入っています。
構成は以下の通りです。
ビット | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
|
X座標オフセット | +0
| +1
| +2
| +3
|
1ピクセルは4ビットで、濃度を表します。(0:白〜15:黒)
このページにリンクを張るのは自由です。
argrath@ub32.org