ページへ戻る
+ Links
印刷
blike/drv
::
OSASK計画
osaskwiki
:
blike
/drv
ドライバ関数群
(by
K
, 2011.03.09)
このページはC言語の文法が分からないという人を対象にはしていません。そういう人は
blike/intro
へ。
ドライバ作成ではなく、blikeを使ってアプリを書きたい人のマニュアルは
blike/man
へ。
ドライバ関数群
[01f以降] 各OSのmain関数
この関数では、ドライバに必要な初期化を行って、 bl_main(); を呼び出す。
もし bl_main(); から帰ってきた場合は、アプリの終了が期待されているので、速やかにドライバの終了処理をして、アプリそのものをそのOSのやり方で終了する。現状では bl_main() からは常に0が返るので、常に正常終了でかまわない。
[01f以降] void *bld_malloc(unsigned int bytes)
この関数は、そのOSにおけるメモリ確保を期待している。確保に失敗した場合は NULL を返してほしい。
[01f以降] void bld_free(void *p, unsigned int bytes)
この関数は、そのOSにおけるメモリ開放を期待している。bytesは確保時と同じ値を渡すので、必要であれば利用してよい(「はりぼてOS」では利用している)。
[01f以降] void bld_openWin(int sx, int sy)
この関数は、そのOSにおけるウィンドウオープンを期待している。sxは160以上、syは1以上を blike 側で保障する。
ウィンドウに表示してほしいグラフィックのイメージバッファは、 bl_work.win[BL_SYSWIN].buf で参照できる(これは int * 型)。したがって、 int の配列で不都合がないのなら、ドライバ側でウィンドウのイメージを確保する必要はないだろう。
sxやsyについても、 bl_work.win[BL_SYSWIN].xsiz, bl_work.win[BL_SYSWIN].ysiz を参照すればいつでも得られるので、ドライバ側で保存する必要はないだろう。
[01f以降] void bld_flshWin(int sx, int sy, int x0, int y0)
この関数は、イメージバッファ内の指定された範囲のフラッシュを期待している。ウィンドウをオープンしてないのにフラッシュが呼ばれるとか、sxやsyが0以下になるとか、ウィンドウ外のピクセルが含まれてしまうなど、そういうやっかいな挙動はないので、その辺はドライバ関数が心配する必要はない。
setMode(BL_DBGFLSH); では、不正なカラーコード(0x000000未満とか0xffffffより大きいとか)を渡さないようになっている。リリースモードの場合は、チェックを省略しているので、もしかしたら渡してしまうかもしれないが、しかしとりあえず常に不正なカラーコードが来ることはないと仮定していいと思われる。
デバッグが完了しないうちにリリースモードを指定するほうがおかしいので。
[01f以降] int bld_getSeed()
この関数は、デフォルトの乱数の種を計算するためのものである。できれば起動するごとに異なる値が返されることが望ましい(「はりぼてOS」ではいい方法がなかったので常に1を返している)。
[01f以降] void bld_initFont()
この関数は、デフォルトのフォントをセットするためのものである。これはOSによっては8x16ドットのフォントを提供してくれるかもしれないと思って、サイズ節約のためにつけられている。もしそのようなAPIを持たないOSであったり、もしくはフォントが違うとか、APIはあるが仕様がよく分からないといった場合は、以下のような実装でかまわない。
void bld_initFont() { bl_initFont(); bl_work.mod |= BL_READYFONTS; return; }
むしろ、現状ではフォントのロード方法がきちんと決まっていないので、上記以外の実装は危険である。
[01f以降] void bld_flshSys()
この関数は、ドライバが状態変化などを検出し、それに応対することを期待している。もし何もすることがないのなら(状態変化がないとか、もしくは割り込み駆動型のドライバであるとか)、もちろん何もしないですぐに return; してほしい。
[01f以降] void bld_waitNF()
この関数は、CPUの負荷が下がる程度に、少しの間休んでくれることを期待している。あまり長く休まれてしまうと、 wait() の時間分解能が落ちる。かといって休む時間が短いと仕事がないのにもかかわらず負荷が下げられない。
[01f以降] int bld_vsnprintf(char *b, int n, const char *f, va_list ap)
この関数は vsnprintf() を実行するためのものである。これはOSによってはこの関数をAPIやDLLで提供してくれるかもしれないと思って、サイズ節約のためにつけられている。もしそのようなAPIを持たないOSであれば、そのうちblike側で簡易代用関数を用意するのでそれを使ってほしい。
Last-modified: 2011-03-09 (水) 00:00:00 (JST) (319d) by lina