"SCREEN"
1 つに固定。
nowait
モードは意味を持たず、無視される。
システム立ち上げ時に以下の指定により起動される。
kerext screen [!優先度] (優先度省略時は 50)
以下の属性データをサポートする。
R | 読み込みのみ可 |
W | 書き込みのみ可 |
RW | 読み込み / 書き込み可 |
/* SCREEN データ番号 */ typedef enum { /* 共通属性 */ DN_SCRSPEC = DN_DISPSPEC, /* 個別属性 : -100〜-199 は汎用 */ DN_SCRLIST = -100, DN_SCRNO = -101, DN_SCRCOLOR = -102, DN_SCRBMP = -103, DN_SCRBRIGHT = -200, DN_SCRUPDFN = -300, DN_SCRVFREQ = -301, DN_SCRADJUST = -302, DN_SCRDEVINFO = -303 } ScrDataNo;
DN_SCRSPEC :
data: DEV_SPEC devspec; typedef struct { H attr; /* デバイス属性 */ H planes; /* プレーン数 */ H pixbits; /* ピクセルビット数 */ H hpixels; /* 横のピクセル数 */ H vpixels; /* 縦のピクセル数 */ H hres; /* 横の解像度 */ H vres; /* 縦の解像度 */ H color[4]; /* カラー情報 */ H resv[6]; /* 予約 */ } DEV_SPEC;現在設定されている表示モードにおけるデバイス仕様を取り出す (
DEV_SPEC
に関しては DP の仕様
gget_spc()
を参照のこと)。
DN_SCRLIST :
data: TC list[];
サポートしている表示モード一覧を以下の形式で取り出す。
<区切り><表示モード><区切り><表示モード>.....<0><区切り> は、表示モード番号(1 〜 N < 256) で上位バイト = 0 ということで、表示モードを区切る。
DN_SCRNO :
data: W scrno;現在の表示モード番号を設定、または取り出す。
DN_SCRLIST
で取り出される表示モードに
付けられている番号である。DN_SCRCOLOR :
data: COLOR map[*]現在の表示モードにおけるカラーマップを設定、または取り出す。
DEV_SPEC.attr.P = 0
のときは、カラーマップは適用されない。COLOR
に関しては
BTRON3 仕様書「第2編 OS 仕様 2.2.3 カラー表現」を参照のこと)。
エントリの最大数は、DEV_SPEC
のプレーン数×ピクセルビット数
で決まるが、実際にはそれより少ない場合もある。
DN_SCRBMP :
data: BMP devbmp;現在の表示モードにおける、デバイス固有イメージ領域 ( ビットマップ ) に関する情報を取り出す。
devbmp.baseaddr[*]
がイメージ領域のメモリを指し、この領域に
DP が直接アクセスすることができる(ただし、一般の
アプリケーションから直接アクセスしてはいけない)。
デバイス固有イメージ領域は、DEV_SPEC.attr.M = 1 のときのみ存在する。
DN_SCRBRIGHT :
data: W brightness;現在の表示モードにおける、スクリーンの明るさを設定、 または取り出す。
DN_SCRUPDFN :
data FP updfn(W x, W y, W dx, W dy) x: X 座標値, y: Y 座標値, dx: X 幅, dy: Y 幅デバイス固有イメージ領域の内容を更新した場合に、 どの領域を更新したかを通知する関数ポインタを取り出す。
NULL
でないときは、デバイス固有イメージ領域の内容を更新した時点で、
この関数を直接呼び出す。
したがって、この関数は、DP から直接呼び出せなくてはいけない。devbmp.bounds
をはみ出す場合は、
はみ出した部分は無視される。DN_SCRVFREQ :
data: W vfreq;現在の表示モードにおけるモニタの垂直周波数(リフレッシュレート)を設定、 または取り出す。
vfreq <= 0
は不明を意味する。vfreq <= 0
は無視される。DN_SCRADJUST :
data: ScrAdjust adj; typedef struct { UH left; /* 左ブランクドット数(8 の倍数) */ UH hsync; /* 水平シンクドット数(8 の倍数) */ UH right; /* 右ブランクドット数(8 の倍数) */ UH top; /* 上ブランクドット数 */ UH vsync; /* 垂直シンクドット数 */ UH bottom; /* 下ブランクドット数 */ } ScrAdjust;現在設定されている表示モードにおける、モニタのタイミング 調整パラメータを設定、または取り出す。
left + right + hsync を大きくすると表示領域の幅は小 left + right + hsync を小さくすると表示領域の幅は大 top + bottom + vsync を大きくすると表示領域の高さは小 top + bottom + vsync を小さくすると表示領域の高さは大 left, right の値の調整で表示領域は左右に移動 top, bottom の値の調整で表示領域は上下に移動
left, hsync, right
は 8 ドット単位。
DN_SCRDEVINFO :
data: ScrDevInfo info; typedef struct { UB name1[32]; /* 名称-1 (ASCII) */ UB name2[32]; /* 名称-2 (ASCII) */ UB name3[32]; /* 名称-3 (ASCII) */ VP framebuf_addr; /* フレームバッファアドレス */ W framebuf_size; /* フレームバッファサイズ */ W mainmem_size; /* 主メモリサイズ */ UB reserved[28]; /* 予約 */ } ScrDevInfo;ディスプレイのハードウェアに関する情報を取り出す。
name1, name2, name3
はハードウェアに関する情報を
ASCII コードで示したもので、32 文字に満たない部分は 0 パッドされる。framebuf_addr
は ( リニア ) フレームバッファの物理アドレスを示し、
( リニア ) フレームバッファが使用されていないときは NULL
となる。
表示モードによりアドレスは異なる場合がある。framebuf_size
はハードウェアで実装されているフレームバッファのバイトサイズを示す。
実際に使用されるフレームバッファのサイズではなく、全体のサイズである。mainmem_size
は、フレームバッファとして使用されている主メモリサイズを示す。
なし
OPEN | 特に何もしない。 ハードウェアの初期化はドライバ起動時に行われる。 |
CLOSE, CLOSEALL | 特に何もしない。 |
ABORT | 特に何もしない(待ちに入ることはないため) |
READ / WRITE | (上記参照) |
SUSPEND / RESUME | 特に何もしない。 または、ハードウェアに依存した処理。 |
なし
デバイスドライバ共通仕様を参照のこと。
ハードウェアや表示モードによってサポートされていない属性データに関しては、ER_NOSPT
を戻す。
以下の機能はサポートしていない。
DN_SCRNO
(表示モード) の設定
DN_SCRBRIGHT
(スクリーンの明るさ)
DN_SCRADJUST
(モニタのタイミング調整)
以下の機能は、ディスプレイのハードウェアや表示モードによってはサポートしていない。( VESA BIOS 3.0 の場合は基本的にサポートされる。)
DN_SCRVFREQ
(モニタの垂直周波数)
Hsize | 640 | 800 | 1024 | 1152 | 1280 | 1600 | 800 | 1024 |
---|---|---|---|---|---|---|---|---|
Vsize | 480 | 600 | 768 | 864 | 1024 | 1200 | 480 | 480 |
16 | 33 | 36(*1) | - | - | - | - | - | - |
256 | 1 | 4 | 7 | 10 | 13 | 16 | 19 | 22 |
65536[5-6-5] | 2 | 5 | 8 | 11 | 14 | 17 | 20 | 23 |
16777K[8-8-8] | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 |
100 | : VGA 6A モード |
164 | : VGA 58 モード |
228 | : VGA 29 モード |
表示モードの設定は (VESA) BIOS を利用しており、 システム起動時にのみ可能なため、属性データとして動的に設定する機能はサポートしていない。
表示モードは、DEVCONF
ファイルに設定され、
システム起動時のブート処理とスクリーンドライバが協調して、
(VESA) BIOS を使用して行っている。
ブート時に取り出した表示モードに関連する情報は、 システムの BIOS データ 領域に保存され、 スクリーンドライバではそれを参照している。
ディスプレイのハードウェアで用意しているフレームバッファ ( VRAM ) を
直接利用することができない場合、主メモリ上に仮想的にフレームバッファ
領域を獲得して、そこに描画を行い、描画が行われた部分を実際にハード
ウェアのフレームバッファ ( 実 VRAM ) に転送する方式。
この転送を行うために DN_SCRUPDFN
の機能が使用される。
以下のケースのときは自動的に仮想 VRAM 方式が取られ、DN_SCRDEVINFO
の framebuf_addr
は NULL
となり、mainmem_size
に使用される主メモリのサイズが設定される。なお、以下のケース以外でも仮想 VRAM 方式とすることができ、VRAM のアクセスが遅い場合などでは、画面のスクロール速度を向上することができる。
DEVCONF
ファイル
DEVCONF
ファイルには、以下の情報が設定され、システム起動時に有効となる。
VIDEOMODE mode [pmode] [w] [h] [pw] [ph]
mode により使用する表示モード番号を指定する。
w と h はそれぞれ有効な横と縦の画面サイズを指定する。
pmode, pw, ph は変更前の設定を示すが、スクリーンドライバでは使用しない。
VIDEOVFREQ vfreq [p_vfreq]
vfreq により使用するモニタ垂直同期周波数(リフレッシュレート)を指定する。
p_vfreq は変更前の設定を示すが、スクリーンドライバでは使用しない。
DN_SCRVFREQ
( モニタの垂直周波数 ) がサポートされている条件下
でのみ有効となる。
VIDEOATTR attr
attr
のビットにより以下の属性を指定する。
0x1 仮想 VRAM 方式を強制的に使用する。 0x8 VESA BIOS のみを強制的に使用する。