3: 2004-02-22 (日) 00:07:13 [5] | 現: 2024-01-08 (月) 12:58:55 ゲスト [6] | ||
---|---|---|---|
Line 29: | Line 29: | ||
***lib_readCSd | ***lib_readCSd | ||
int lib_readCSd(int offset) : | int lib_readCSd(int offset) : | ||
+ | |||
機能:コードセグメントの任意のダブルワードを読み込んでその値を返す。 | 機能:コードセグメントの任意のダブルワードを読み込んでその値を返す。 | ||
+ | |||
コードセグメントには主にプログラムのバイナリーコードが書かれていますが、一部 | コードセグメントには主にプログラムのバイナリーコードが書かれていますが、一部 | ||
の領域は特別な値が書かれており、主にそれを参照するために使います。なお、offset | の領域は特別な値が書かれており、主にそれを参照するために使います。なお、offset | ||
はコードセグメントの範囲をはみ出すような指定をしてはいけません。 | はコードセグメントの範囲をはみ出すような指定をしてはいけません。 | ||
+ | |||
offset = 0x0010 : stack + スタティックデーター + mallocの合計サイズをページ | offset = 0x0010 : stack + スタティックデーター + mallocの合計サイズをページ | ||
単位(4KB単位)に切り上げた値。ここからmmarea領域が始まっている。fpの初期化で | 単位(4KB単位)に切り上げた値。ここからmmarea領域が始まっている。fpの初期化で | ||
ここをよく使う。 | ここをよく使う。 | ||
+ | |||
offset = 0x0014 : この値の上位20bitは、mmarea:で指定した値が書き込まれている | offset = 0x0014 : この値の上位20bitは、mmarea:で指定した値が書き込まれている | ||
。下位12bitはリザーブなので、その値に依存しないようにすること。mmarea:は4KB | 。下位12bitはリザーブなので、その値に依存しないようにすること。mmarea:は4KB | ||
単位で指定するので、上位20bitだけで指定できる。 | 単位で指定するので、上位20bitだけで指定できる。 | ||
+ | |||
参考になるサンプル:tviewc00(introc), test016 | 参考になるサンプル:tviewc00(introc), test016 | ||
***lib_initmodulehandle0 | ***lib_initmodulehandle0 | ||
void lib_initmodulehandle0(int opt, int slot) : | void lib_initmodulehandle0(int opt, int slot) : | ||
+ | |||
機能: スロットをモジュールハンドルとして初期化し,アプリ専用ディレクトリに移動。 | 機能: スロットをモジュールハンドルとして初期化し,アプリ専用ディレクトリに移動。 | ||
+ | |||
opt == 8 だとユーザディレクトリ、opt == 12 だとマシンディレクトリに移動する。 | opt == 8 だとユーザディレクトリ、opt == 12 だとマシンディレクトリに移動する。 | ||
現状ではどちらも同じに見えるが、マシンディレクトリだと全ユーザ共通となる。 | 現状ではどちらも同じに見えるが、マシンディレクトリだと全ユーザ共通となる。 | ||
モジュールハンドルはスロットを一つ使う。 | モジュールハンドルはスロットを一つ使う。 | ||
たいていの場合、lib_steppath0()と組み合わせて使われる。 | たいていの場合、lib_steppath0()と組み合わせて使われる。 | ||
+ | |||
参考になるサンプル:test016 | 参考になるサンプル:test016 | ||
***lib_initmodulehandle1 | ***lib_initmodulehandle1 | ||
void lib_initmodulehandle1(int slot, int num, int sig) : | void lib_initmodulehandle1(int slot, int num, int sig) : | ||
+ | |||
機能: スロットをモジュールハンドルとして初期化し、どこのディレクトリに移動 | 機能: スロットをモジュールハンドルとして初期化し、どこのディレクトリに移動 | ||
するかはシェル (人間) に任せる。 | するかはシェル (人間) に任せる。 | ||
+ | |||
モジュールハンドルはスロットを一つ使う。 | モジュールハンドルはスロットを一つ使う。 | ||
numは番号で、コマンドラインから制御するために機能別に通し番号をふる。 | numは番号で、コマンドラインから制御するために機能別に通し番号をふる。 | ||
Line 69: | Line 69: | ||
シグナルが来る。どれがどんなエラーを示すかは未定。 | シグナルが来る。どれがどんなエラーを示すかは未定。 | ||
成功か失敗のシグナルが返ってくるまで、このコマンドを再実行してはいけない。 | 成功か失敗のシグナルが返ってくるまで、このコマンドを再実行してはいけない。 | ||
+ | |||
ネタ元: introc/tviewc00.c | ネタ元: introc/tviewc00.c | ||
***lib_steppath0 | ***lib_steppath0 | ||
void lib_steppath0(int opt, int slot, const char *name, int sig) : | void lib_steppath0(int opt, int slot, const char *name, int sig) : | ||
+ | |||
機能:パスをたどることで、モジュールハンドルを移動。 | 機能:パスをたどることで、モジュールハンドルを移動。 | ||
+ | |||
このコマンドを使う前にスロットをモジュールハンドルに初期化して適当な | このコマンドを使う前にスロットをモジュールハンドルに初期化して適当な | ||
ディレクトリに移動させておくこと。そのディレクトリの中を検索する。 | ディレクトリに移動させておくこと。そのディレクトリの中を検索する。 | ||
+ | |||
(1) opt == 0 | (1) opt == 0 | ||
name : モジュールネーム。 | name : モジュールネーム。 | ||
Line 87: | Line 87: | ||
成功の場合はこの値が返ってくる。失敗の場合は+1~+15された値が返ってく | 成功の場合はこの値が返ってくる。失敗の場合は+1~+15された値が返ってく | ||
る。値と失敗の原因についての関係は今のところ未定。 | る。値と失敗の原因についての関係は今のところ未定。 | ||
+ | |||
参考になるサンプル:test016 | 参考になるサンプル:test016 | ||
***lib_mapmodule | ***lib_mapmodule | ||
void lib_mapmodule(0, int slot, int attr, int len, int offset, int moffset) : | void lib_mapmodule(0, int slot, int attr, int len, int offset, int moffset) : | ||
+ | |||
機能: モジュールをメモリ空間にマッピングする。 | 機能: モジュールをメモリ空間にマッピングする。 | ||
+ | |||
slotはモジュールに移動させたモジュールハンドル。一つのハンドルで複数 | slotはモジュールに移動させたモジュールハンドル。一つのハンドルで複数 | ||
マッピングしてはいけない。 | マッピングしてはいけない。 | ||
Line 103: | Line 103: | ||
複数のファイルを同時にマッピングするときは重ならないようにずらす。 | 複数のファイルを同時にマッピングするときは重ならないようにずらす。 | ||
moffsetはモジュール内のオフセット。これも4096の倍数にすること。 | moffsetはモジュール内のオフセット。これも4096の倍数にすること。 | ||
+ | |||
参考になるサンプル:tviewc00(introc) | 参考になるサンプル:tviewc00(introc) | ||
***lib_unmapmodule | ***lib_unmapmodule | ||
void lib_unmapmodule(0, int size, int addr) : | void lib_unmapmodule(0, int size, int addr) : | ||
+ | |||
機能: モジュールマッピング解除。 | 機能: モジュールマッピング解除。 | ||
+ | |||
addrで始まる長さsizeバイトの領域のモジュールをはがす。 | addrで始まる長さsizeバイトの領域のモジュールをはがす。 | ||
モジュールをリサイズしたり、ハンドルにしたスロットを再利用したりするまえに | モジュールをリサイズしたり、ハンドルにしたスロットを再利用したりするまえに | ||
Line 116: | Line 116: | ||
***lib_readmodulesize | ***lib_readmodulesize | ||
- | int ilb_readmodulesize(int slot) : | + | int lib_readmodulesize(int slot) : |
+ | |||
機能: モジュールの大きさを返す。 | 機能: モジュールの大きさを返す。 | ||
+ | |||
slotはモジュールハンドル。 | slotはモジュールハンドル。 | ||
+ | |||
参考になるサンプル:tviewc00(introc) | 参考になるサンプル:tviewc00(introc) | ||
* こめんと欄 | * こめんと欄 | ||
#comment | #comment |
(This host) = http://osask.net