場所 | × | ○ |
---|---|---|
p.8 1.4 | APIインターフェース | API |
p.11 2.3 | 動画画像 | 動画 |
pp.21-22 表 | Not Apply | Not Applicable |
pp.22-23 | Sample program of C Language | A sample code in C |
p.32 | 用件 | 要件 |
3.3 SM501デバイスドライバ
SM501のレジスタへのアクセスはioctlシステムコールを, VRAMへのアクセスはLinuxのフレームバッファアーキテクチャの一部を用います。
Linuxフレームバッファアーキテクチャは, Geert Uytterhoeven <geert@linux-m68k.org> によって維持されているアーキテクチャで,最新バージョンは2001年5月10日です。 詳細については,「Appendix-A: Frame Buffer Devices」を参照願います。 (正確を期すため,原文のまま掲示しています。)
3.3.1 SM501レジスタへのアクセス
SM501レジスタへのアクセスにはioctlを用います。 ioctlの使用にはターゲットアーキテクチャのヘッダファイルが必要です。
# cp -R linux/include/asm-sh /usr/local/sh4-linux/include/asm
レジスタ値を読み込み,変更し,書き込むサンプルコードを以下に示します。
int reg32; int value = 0xab; int mask = 0x0000ff00; // open device node int fd = open("/dev/fb0", O_RDWR); // set MMIO address ioctl(fd, 0, address); // read register value ioctl(fd, 1, ®32); // change register value reg32 &= ~mask; reg32 |= value << 8; // write register value ioctl(fd, 2, reg32);
レジスタ値変更の際,予約されているビットを変更しないように注意してください。
3.3.2 SM501 画面解像度設定
画面解像度,ビデオタイミング信号,ドットクロック等は SM501レジスタによって完全に制御されます。 レジスタ値を変更することによって画面解像度を動的に変更することが可能です。 画面解像度設定の際には以下の点に留意願います。
3.3.3 SM501 VRAMへのアクセス
SM501は7つのビデオプレーンを持っています。 本製品で使用するのは,以下の4つのプレーンです。
詳細は添付のデータシートの1-12,1-23章を参照して下さい。
各プレーンにはフレームバッファのデバイスノードを通じてアクセスします。 フレームバッファの詳細はAppendix-Aを参照して下さい。 RGB565モードのグラフィックプレーン(fb0)にカラー画像data[3][w][h]を 描画するサンプルコードを以下に示します。
int xres, yres, size, i, j, idx, r, g, b; unsigned char *ptr; int fd = open("/dev/fb0", O_RDWR); size = xres * yres * 2; ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); for (j = 0; j < yres; ++j) for (i = 0; i < xres; ++i) { idx = (x + i) * 2 + (y + j) * xres * 2; r = data[0][j][i] >> 3; g = data[1][j][i] >> 2; b = data[2][j][i] >> 3; *((unsigned short int *)(ptr + idx)) = (r << 11) | (g << 5) | b; } munmap(ptr, size);
以下に,メモリマップとレジスタの設定例を挙げます。 詳細についてはデータシートの1-26から1-28章を参照願います。
違うとこだけ
共通
80040 | 00016203 | Video Display Control |
80080 | 00010001 | Video Alpha Display Control |
80100 | 00010001 | Alpha Display Control |
80200 | 00010001 | CRT Display Control |
90000 | 000022d1 | Capture Control |
80000 | 07013101 | Panel Display Control |
VGA
80208 | 05000500 | CRT FB Offset/Window Width |
SVGA
80208 | 06400640 | CRT FB Offset/Window Width |
XGA
80208 | 08000800 | CRT FB Offset/Window Width |
SXGA