4: 2004-02-09 (月) 10:28:19 [6] | 現: 2024-01-08 (月) 12:59:01 ゲスト [7] | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | -みなさんでどんどん直していきましょう。 | ||
+ | -一度に広範囲を編集するとサーバーが止まります(汗) | ||
+ | -ちょっとずつ編集して更新するのがポイントです。 | ||
+ | |||
CENTER:Pioneer0 Command Reference | CENTER:Pioneer0 Command Reference | ||
CENTER:pioneer0 ライブラリ コマンドリファレンス | CENTER:pioneer0 ライブラリ コマンドリファレンス | ||
Line 8: | Line 12: | ||
*目次 | *目次 | ||
- | -目次 | + | #contents |
- | -概要 | + | |
- | -予備知識 | + | |
- | + | ||
- | --i.ライブラリコールの使い方 | + | |
- | --ii.slot | + | |
- | --iii.セグメントセレクタ | + | |
- | --iv.用語の違い (「ボックス」と「キャラクタセット, フォント」) | + | |
- | --v.アプリ起動時のレジスタ | + | |
- | --vi.参照した資料 | + | |
- | --vii.セグメントオフセット | + | |
- | + | ||
- | -リファレンス | + | |
- | + | ||
- | --[[0x0000:コマンド列終了]] | + | |
- | --[[0x0004:ライブラリ初期化]] | + | |
- | --[[0x0004.-1:特別モード終了]] | + | |
- | --[[0x0004.-0x7e:tek0伸長]] | + | |
- | --[[0x0004.-0x7f:l2d3伸長]] | + | |
- | --[[0x0008.0:ライブラリ終了]] | + | |
- | --[[0x000c.0:コマンドジャンプ相対]] | + | |
- | --[[0x000c.1:コマンドジャンプ位置]] | + | |
- | --[[0x0010:シグナルハンドラ定義]] | + | |
- | --[[0x0014.0x10:ウィンドウ推奨最大サイズ取得]] | + | |
- | --[[0x0018.0x0f:シグナル・時間待ち]] | + | |
- | --[[0x0018.0x80:シグナルハンドラ終了]] | + | |
- | --[[0x001c:ノーオペレーション]] | + | |
- | --[[0x0020.0:ウィンドウオープン]] | + | |
- | --[[0x0020.1:拡張ウィンドウオープン]] | + | |
- | --[[0x0024.0:ウィンドウクローズ]] | + | |
- | --[[0x0028.0x1011.テキストボックスオープン]] | + | |
- | --[[0x002c.テキストボックスクローズ]] | + | |
- | --[[0x0030.グラフィックボックスオープン・スクロールなし]] | + | |
- | --[[0x0030.0x27.16bpp,32bppグラフィックボックスオープン]] | + | |
- | --[[0x0030.2.グラフィックボックスオープン・スクロールあり]] | + | |
- | --[[0x0030.0.既存グラフィックボックスオープン]] | + | |
- | --[[0x0038.なし]] | + | |
- | --[[0x003c.0x33.ウィンドウ制御 (ソース上でかけ離れている)]] | + | |
- | --[[0x0040.0x051.テキストボックス文字列書き込み]] | + | |
- | --[[0x0044.0xf0.線・長方形描画]] | + | |
- | --[[0x0048.1.文字列描画]] | + | |
- | --[[0x004c.0x27.画像描画]] | + | |
- | --[[0x004c.0x8027.画像描画やや安全 (グラフィックボックスフラッシュ)]] | + | |
- | --[[0x0050.0x80c0.点描複数]] | + | |
- | --[[0x0054.0x80c0.グラフィックボックス線描]] | + | |
- | --[[0x0058.0x2001.グラフィックボックススクロール]] | + | |
- | --[[0x0058.0x3001.グラフィックボックス差分スクロール]] | + | |
- | --[[0x0058.0x4027.グラフィックボックスフラッシュ]] | + | |
- | --[[0x005c.0x80c0.グラフィックボックス点描複数]] | + | |
- | --[[0x0060.シグナルボックスオープン]] | + | |
- | --[[0x0064.なし]] | + | |
- | --[[0x0068.シグナル定義]] | + | |
- | --[[0x0068.0x10.タイマーシグナル定義]] | + | |
- | --[[0x0068.0x100.文字入力シグナル定義]] | + | |
- | --[[0x0068.0x200.低レベルマウスシグナル]] | + | |
- | --[[0x0068.0.シグナル定義終端]] | + | |
- | --[[0x006c.シグナルを自分に送る]] | + | |
- | --[[0x0070.タイマーオープン]] | + | |
- | --[[0x0074.タイマークローズ]] | + | |
- | --[[0x0078.1.タイマー停止]] | + | |
- | --[[0x0078.0x32.タイマー設定]] | + | |
- | --[[0x0078.0x81.タイマー時間差設定]] | + | |
- | --[[0x0078.0x82.タイマー時間差取得]] | + | |
- | --[[0x007c.圧縮データ伸長]] | + | |
- | --[[0x007c.0.サブコマンド終了]] | + | |
- | --[[0x007c.-7.書き込み先指定]] | + | |
- | --[[0x007c.-0x7f.l2d3データ伸長]] | + | |
- | --[[0x007c.-0x7e.tek0データ伸長]] | + | |
- | --[[0x0080.0.サウンドトラックオープン]] | + | |
- | --[[0x0084.サウンドトラッククローズ]] | + | |
- | --[[0x0088.なし]] | + | |
- | --[[0x008c.サウンドトラック制御]] | + | |
- | --[[0x0090.なし]] | + | |
- | --[[0x0094.なし]] | + | |
- | --[[0x0098.なし]] | + | |
- | --[[0x009c.なし]] | + | |
- | --[[0x00a0.0x1c.モジュールハンドル初期化アプリ]] | + | |
- | --[[0x00a0.0xe0.モジュールハンドル初期化シェル]] | + | |
- | --[[0x00a0.-0xff.モジュールハンドル初期化シェルのサブコマンド]] | + | |
- | --[[0x00a4.なし]] | + | |
- | --[[0x00a8.モジュールハンドル複写 (未詳)]] | + | |
- | --[[0x00ac.モジュールハンドル移動8.3]] | + | |
- | --[[0x00ac.-0xfd.モジュールハンドル移動8.3のサブコマンド]] | + | |
- | --[[0x00b0.モジュール作成 (未詳)]] | + | |
- | --[[0x00b4.なし]] | + | |
- | --[[0x00b8.なし]] | + | |
- | --[[0x00bc.なし]] | + | |
- | --[[0x00c0.0.モジュールマッピング]] | + | |
- | --[[0x00c4.モジュールマッピング解除 (未詳)]] | + | |
- | --[[0x00c8.-0xfe.モジュール種別取得 (未詳)]] | + | |
- | --[[0x00c8.-0xfd.モジュールサイズ取得 (未詳)]] | + | |
- | --[[0x00cc.なし]] | + | |
- | --[[0x00d0.-0x100.モジュールタグリスト (未詳)]] | + | |
- | --[[0x00d4.なし]] | + | |
- | --[[0x00d8.なし]] | + | |
- | --[[0x00dc.なし]] | + | |
- | --[[0x00e0.1.フォント定義]] | + | |
- | --[[0x00e0.2.半高フォント定義]] | + | |
- | --[[0x00e0.4.半高カラーフォント定義]] | + | |
- | --[[0x00e0.0x80000001.システムANKフォント読み込み]] | + | |
- | --[[0x00e0.0x80000002.システム半高ANKフォント読み込み]] | + | |
- | --[[0x00e0.0xc0000011.システムJIS+MSフォント読み込み]] | + | |
- | --[[0x00e0.0xc0ffffff.OSASK自動拡張フォント読み込み]] | + | |
- | --[[0x00e4.0.フォント開放 (未詳)]] | + | |
- | --[[0x00e8.フォントセット定義]] | + | |
- | --[[0x00e8.0.フォントセット終端]] | + | |
- | --[[0x00ec.1.シフトJISデコード]] | + | |
- | --[[0x00ec.2.EUCデコード文字集合2]] | + | |
- | --[[0x00ec.3.EUCデコード文字集合4]] | + | |
- | --[[0x00f0.セグメント作成 (未詳)]] | + | |
- | --[[0x00f4.なし]] | + | |
- | --[[0x00f8.なし]] | + | |
- | --[[0x00fc.なし]] | + | |
- | --[[0x0100.なし]] | + | |
- | --[[0x0104.なし]] | + | |
- | --[[0x0108.0x80c0.グラフィックボックス線描複数]] | + | |
- | --[[0x010c.0.線データ変換]] | + | |
- | --[[0x0110.0x80c0.線描複数]] | + | |
- | --[[0x0114.0.グラフィックボックス文字列描画]] | + | |
- | --[[0x0114.0xff.メモリ文字列描画]] | + | |
- | --[[0x0118.0.乱数取得]] | + | |
- | --[[0x011c.なし]] | + | |
- | --[[0x0120.0.モジュールサイズ変更]] | + | |
- | + | ||
- | -付録 | + | |
- | + | ||
- | --[[APIの実行を追い掛けてみよう]] | + | |
- | + | ||
---- | ---- | ||
*概要 | *概要 | ||
Line 158: | Line 34: | ||
***i.i.NASMで | ***i.i.NASMで | ||
以下のようにします。 | 以下のようにします。 | ||
- | mov ebx, work.lib_init | + | mov ebx, work.lib_init |
- | call 0xc7:0 | + | call 0xc7:0 |
***i.ii.Cで | ***i.ii.Cで | ||
説明不要かも知れませんが。 | 説明不要かも知れませんが。 | ||
- | static void* cmd[]={hoge,rage, ..., 0 /* eoc */}; | + | static void* cmd[]={hoge,rage, ..., 0 /* eoc */}; |
- | lib_execcmd(&cmd); | + | lib_execcmd(&cmd); |
- | lib_execcmd0(hoge, rage, ..., 0 /* eoc */); | + | lib_execcmd0(hoge, rage, ..., 0 /* eoc */); |
- | lib_execcmd1(12+4*2, hoge, rage, buf, ..., 0 /* eoc */); | + | lib_execcmd1(12+4*2, hoge, rage, buf, ..., 0 /* eoc */); |
と書きます。配列を使う場合, 川合さんの例のように void*[] | と書きます。配列を使う場合, 川合さんの例のように void*[] | ||
としてコマンドを定義するのが楽です。execcmd1の一つ目の引数は 12+4*n | としてコマンドを定義するのが楽です。execcmd1の一つ目の引数は 12+4*n | ||
Line 198: | Line 74: | ||
**v.アプリ起動時のレジスタ | **v.アプリ起動時のレジスタ | ||
- | eax=ecx=edx=ebx=esp=ebp=esi=edi=0 | + | eax=ecx=edx=ebx=esp=ebp=esi=edi=0 |
- | cs=7 | + | cs=7 |
- | ds=ss=es=fs=0xf | + | ds=ss=es=fs=0xf |
- | gs=未定 | + | gs=未定 |
- | eip=0 | + | eip=0 |
- | CF=PF=AF=ZF=SF=DF=OF=0 | + | CF=PF=AF=ZF=SF=DF=OF=0 |
この値は保証されていて, 決め打ち可能です。 | この値は保証されていて, 決め打ち可能です。 | ||
参考: [[[OSASK 2743] Re: ぐいぐいプログラミング質問]] | 参考: [[[OSASK 2743] Re: ぐいぐいプログラミング質問]] | ||
Line 223: | Line 99: | ||
-vgadrv0.ask (initも取り次ぎのときもあった) | -vgadrv0.ask (initも取り次ぎのときもあった) | ||
-go9s (gcc for OSASK のソース) | -go9s (gcc for OSASK のソース) | ||
+ | |||
最近はtestシリーズのドキュメントを読みつつ, | 最近はtestシリーズのドキュメントを読みつつ, | ||
pioneer0のソースを読んでこっそり変更されているところを探すという感じです。 | pioneer0のソースを読んでこっそり変更されているところを探すという感じです。 | ||
Line 240: | Line 117: | ||
*リファレンス | *リファレンス | ||
---- | ---- | ||
- | **[[0x0000:コマンド列終了]] | + | **0x0000:コマンド列終了 |
- | コマンドdd 0 | + | :コマンド|dd 0 |
- | 機能ライブラリはこのコマンドを実行すると, | + | :機能|ライブラリはこのコマンドを実行すると, |
ユーザプログラムへ復帰します。その際, | ユーザプログラムへ復帰します。その際, | ||
ebxとeflagsは保存されません。ebxは終了コマンドを指します。ほかのレジスタは保存されます。 | ebxとeflagsは保存されません。ebxは終了コマンドを指します。ほかのレジスタは保存されます。 | ||
Line 251: | Line 128: | ||
---- | ---- | ||
- | **[[0x0004:ライブラリ初期化]] | + | **0x0004:ライブラリ初期化 |
- | コマンドdd 4, work | + | :コマンド|dd 4, work |
- | guigui00.hLIB_WORK* lib_init(work); | + | :guigui00.h| |
- | void lib_init_nm(work); | + | LIB_WORK* lib_init(work);&br; |
+ | void lib_init_nm(work);&br; | ||
LIB_WORK* libb_init_am(work); | LIB_WORK* libb_init_am(work); | ||
- | 機能 | + | :機能|ライブラリを初期化し, その時の時刻をシステムタイマの時間基点に設定し, |
- | ライブラリを初期化し, その時の時刻をシステムタイマの時間基点に設定し, | + | |
シグナルハンドラマスク値を-1にします。ライブラリの他のコマンド | シグナルハンドラマスク値を-1にします。ライブラリの他のコマンド | ||
(コマンド列終了を含む) を利用する前にこのコマンドを実行しなければなりません。 | (コマンド列終了を含む) を利用する前にこのコマンドを実行しなければなりません。 | ||
- | 引数 | + | :引数|workは256バイトの空き領域を指すセグメントオフセットです。4 |
- | workは256バイトの空き領域を指すセグメントオフセットです。4 | + | |
の倍数でなければなりません。ここが4の倍数でない場合, | の倍数でなければなりません。ここが4の倍数でない場合, | ||
それは[[特別コマンド]]だと見なされます。 | それは[[特別コマンド]]だと見なされます。 | ||
Line 267: | Line 143: | ||
---- | ---- | ||
- | **[[0x0004.-1:特別モード終了]] | + | **0x0004.-1:特別モード終了 |
- | コマンドdd -1 | + | :コマンド|dd -1 |
- | 機能特別コマンドを終了させ, ユーザプログラムに復帰します。 | + | :機能|特別コマンドを終了させ, ユーザプログラムに復帰します。 |
- | 解説 | + | :解説|初期化コマンドには特別モードがあり, ライブラリ初期化コマンドのシグネチャ |
- | 初期化コマンドには特別モードがあり, ライブラリ初期化コマンドのシグネチャ | + | |
dd 4 に続けて独自のコマンド列を埋め込むようになっています。初期化はされません。 | dd 4 に続けて独自のコマンド列を埋め込むようになっています。初期化はされません。 | ||
ライブラリ初期化前に使用でき, | ライブラリ初期化前に使用でき, | ||
Line 282: | Line 157: | ||
---- | ---- | ||
- | **[[0x0004.-0x7e:tek0伸長]] | + | **0x0004.-0x7e:tek0伸長 |
- | コマンドdd -0x7e, size, src_ofs, src_sel | + | :コマンド|dd -0x7e, size, src_ofs, src_sel&br; |
es:edi = 展開先ポインタ | es:edi = 展開先ポインタ | ||
- | guigui00.h | + | :guigui00.h| |
const int lib_decodetek0(int size, int src_ofs, int src_sel, int dest_ofs, int dest_sel); | const int lib_decodetek0(int size, int src_ofs, int src_sel, int dest_ofs, int dest_sel); | ||
- | 機能tek0データを伸長します。その後, ediは次の展開先を指します。 | + | :機能|tek0データを伸長します。その後, ediは次の展開先を指します。 |
- | 引数 | + | :引数| |
- | size伸長後のデータの長さで, 単位はバイトです。 | + | ::size|伸長後のデータの長さで, 単位はバイトです。 |
- | src_sel:src_ofs圧縮データのポインタです。 | + | ::src_sel:src_ofs|圧縮データのポインタです。 |
---- | ---- | ||
- | **[[0x0004.-0x7f:l2d3伸長]] | + | **0x0004.-0x7f:l2d3伸長 |
- | コマンドdd -0x7f, size, src_ofs, src_sel | + | :コマンド|dd -0x7f, size, src_ofs, src_sel&br; |
es:edi = 展開先ポインタ | es:edi = 展開先ポインタ | ||
- | guigui00.h | + | :guigui00.h| |
const int lib_decodel2d3(int size, int src_ofs, int src_sel, int dest_ofs, int dest_sel); | const int lib_decodel2d3(int size, int src_ofs, int src_sel, int dest_ofs, int dest_sel); | ||
- | 機能l2d3データを伸長します。その後, ediは次の展開先を指します。 | + | :機能|l2d3データを伸長します。その後, ediは次の展開先を指します。 |
- | 引数 | + | :引数| |
- | size伸長後のデータの長さで, 単位はバイトです。 | + | ::size|伸長後のデータの長さで, 単位はバイトです。 |
- | src_sel:src_ofs圧縮データのポインタです。 | + | ::src_sel:src_ofs|圧縮データのポインタです。 |
---- | ---- | ||
- | **[[0x0008.0:ライブラリ終了]] | + | **0x0008.0:ライブラリ終了 |
- | コマンドdd 8, 0 | + | :コマンド|dd 8, 0 |
- | guigui00.hvoid lib_close(0); | + | :guigui00.h|void lib_close(0); |
- | 機能ライブラリを終了します。現在はアプリもろともに終了します。 | + | :機能|ライブラリを終了します。現在はアプリもろともに終了します。 |
- | 解説すぐには終了しないため, | + | :解説|すぐには終了しないため, |
このコマンドを実行した後もシグナルを受信する処理が必要です。 | このコマンドを実行した後もシグナルを受信する処理が必要です。 | ||
---- | ---- | ||
- | **[[0x000c.0:コマンドジャンプ相対]] | + | **0x000c.0:コマンドジャンプ相対 |
- | コマンドdd 0xc, 0, offset | + | :コマンド|dd 0xc, 0, offset |
- | 機能ライブラリのコマンドポインタに値を加えます。 | + | :機能|ライブラリのコマンドポインタに値を加えます。 |
- | 引数 | + | :引数| |
- | offsetバイト単位で, 基点はジャンプコマンドの先頭です。 | + | ::offset|バイト単位で, 基点はジャンプコマンドの先頭です。 |
例えば, dd 0xc,0,0 というコマンドは無限ループになります。 | 例えば, dd 0xc,0,0 というコマンドは無限ループになります。 | ||
---- | ---- | ||
- | **[[0x000c.1:コマンドジャンプ位置]] | + | **0x000c.1:コマンドジャンプ位置 |
- | コマンドdd 0xc, 1, offset | + | :コマンド|dd 0xc, 1, offset |
- | 機能ライブラリのコマンドポインタに値を代入します。 | + | :機能|ライブラリのコマンドポインタに値を代入します。 |
- | 引数 | + | :引数| |
- | offsetセグメントオフセット値です。 | + | ::offset|セグメントオフセット値です。 |
これをライブラリのコマンドポインタのセグメントオフセットに代入します。 | これをライブラリのコマンドポインタのセグメントオフセットに代入します。 | ||
---- | ---- | ||
- | **[[0x0010:シグナルハンドラ定義]] | + | **0x0010:シグナルハンドラ定義 |
- | コマンドdd 0x10, offset, selector | + | :コマンド|dd 0x10, offset, selector |
- | guigui00.hvoid lib_definesignalhandler(void (*lib_signalhandler)(struct LIB_SIGHNDLREG *)); | + | :guigui00.h|void lib_definesignalhandler(void (*lib_signalhandler)(struct LIB_SIGHNDLREG *)); |
- | 機能シグナルハンドラを定義します。 | + | :機能|シグナルハンドラを定義します。 |
- | 解説シグナルが溜まると, | + | :解説|シグナルが溜まると, |
ユーザプログラムの中でやっていることを中断してハンドラに分岐します。 | ユーザプログラムの中でやっていることを中断してハンドラに分岐します。 | ||
分岐時のスタックは以下のとおりです。セグメントレジスタの上位16bitが | 分岐時のスタックは以下のとおりです。セグメントレジスタの上位16bitが | ||
0 になることは保証されません。 | 0 になることは保証されません。 | ||
- | + | ESP+0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 | |
- | ESP+048121620242832364044485256 | + | ES DS FS GS EDI ESI EBP 未定義 EBX EDX ECX EAX EIP CS EFLAGS |
- | ESDSFSGSEDIESIEBP未定義EBXEDXECXEAXEIPCSEFLAGS | + | |
ここで積まれる値はハンドラから復帰する時の値 (ほぼそのまま分岐前の値) | ここで積まれる値はハンドラから復帰する時の値 (ほぼそのまま分岐前の値) | ||
です。ハンドラに進入したときのレジスタの値はスタックにつまれている値とは等しくありません。 | です。ハンドラに進入したときのレジスタの値はスタックにつまれている値とは等しくありません。 | ||
Line 348: | Line 222: | ||
かつ[[シグナル待ち]]をしているときは, | かつ[[シグナル待ち]]をしているときは, | ||
シグナルハンドラから復帰すると同時に待ちコマンドが終わります。 | シグナルハンドラから復帰すると同時に待ちコマンドが終わります。 | ||
- | 引数 | + | :引数| |
- | selector:offsetシグナルハンドラのポインタです | + | ::selector:offset|シグナルハンドラのポインタです |
(普通はselector=7です)。 | (普通はselector=7です)。 | ||
---- | ---- | ||
- | **[[0x0014.0x10:ウィンドウ推奨最大サイズ取得]] | + | **0x0014.0x10:ウィンドウ推奨最大サイズ取得 |
- | コマンドdd 0x14,0x10,offset,selector | + | :コマンド|dd 0x14,0x10,offset,selector |
- | 機能シェル推奨 (実際はユーザ指定可能にするらしい) | + | :機能|シェル推奨 (実際はユーザ指定可能にするらしい) |
のウィンドウ最大サイズを取得します。別に無視しても構いませんが, | のウィンドウ最大サイズを取得します。別に無視しても構いませんが, | ||
従ったほうがユーザフレンドリです。 | 従ったほうがユーザフレンドリです。 | ||
- | 引数 | + | :引数|selector:offsetバッファのポインタです。そのバッファに |
- | selector:offsetバッファのポインタです。そのバッファに | + | |
dd x_max, y_max | dd x_max, y_max | ||
という形で書き込まれます。 | という形で書き込まれます。 | ||
- | 余談このコマンドにウィンドウデザインの取得が入るのだろうか。 | + | :余談|このコマンドにウィンドウデザインの取得が入るのだろうか。 |
---- | ---- | ||
- | **[[0x0018.0x0f:シグナル・時間待ち]] | + | **0x0018.0x0f:シグナル・時間待ち |
- | コマンドdd 0x18, opt, signaldw, nest | + | :コマンド|dd 0x18, opt, signaldw, nest |
または | または | ||
dd 0x18, opt, signaldw, nest, t0,t1,t2 | dd 0x18, opt, signaldw, nest, t0,t1,t2 | ||
- | guigui00.hvoid lib_waitsignal(int opt, int signaldw, int nest); | + | :guigui00.h| |
+ | void lib_waitsignal(int opt, int signaldw, int nest);&br; | ||
void lib_waitsignaltime(int opt, int signaldw, int nest, int t0, int t1, int t2); | void lib_waitsignaltime(int opt, int signaldw, int nest, int t0, int t1, int t2); | ||
- | 機能シグナルや時間基点を待ちます。シグナルが来ない状況では, | + | :機能|シグナルや時間基点を待ちます。シグナルが来ない状況では, |
時間待ち・永眠コマンドとして使われます。 | 時間待ち・永眠コマンドとして使われます。 | ||
- | 引数 | + | :引数| |
- | optbit0~bit3 に意味があり, | + | ::opt|bit0~bit3 に意味があり, |
bit4~bit31は予約されています。予約のビットは必ず0にしておいてください。 | bit4~bit31は予約されています。予約のビットは必ず0にしておいてください。 | ||
ビットは上位から順に解釈されます。 | ビットは上位から順に解釈されます。 | ||
- | + | bit3 0 設定済みの時間基点をそのまま使う。 | |
- | bit3 0設定済みの時間基点をそのまま使う。 | + | 1 現在の時刻を時間起点にする。 |
- | 1現在の時刻を時間起点にする。 | + | bit2 0 timeフィールドはない。 |
- | bit2 0timeフィールドはない。 | + | 1 timeフィールドが存在し, 時間基点にこれを加算する。 |
- | 1timeフィールドが存在し, 時間基点にこれを加算する。 | + | bit1-0 0 待たない。 |
- | bit1-00待たない。 | + | 1 シグナルが来るまで待つ。 |
- | 1シグナルが来るまで待つ。 | + | 2 この値は許されない。 |
- | 2この値は許されない。 | + | 3 シグナルか時間基点が来るまで待つ。 |
- | 3シグナルか時間基点が来るまで待つ。 | + | ::signaldw|受信したシグナルの量 (ダブルワード=32ビット単位) |
- | + | ||
- | signaldw受信したシグナルの量 (ダブルワード=32ビット単位) | + | |
です。ライブラリはこの値を頼りにアプリケーションが処理したシグナルの量を判定します。 | です。ライブラリはこの値を頼りにアプリケーションが処理したシグナルの量を判定します。 | ||
- | nestハンドラマスク値に加える値です。これでシグナルハンドラへの分岐の許可/不許可を制御します。 | + | ::nest|ハンドラマスク値に加える値です。これでシグナルハンドラへの分岐の許可/不許可を制御します。 |
最初にライブラリが初期化されたとき, | 最初にライブラリが初期化されたとき, | ||
システム内部の「ハンドラマスク値」は-1に初期化されます。これが0の時にのみ, | システム内部の「ハンドラマスク値」は-1に初期化されます。これが0の時にのみ, | ||
Line 406: | Line 278: | ||
初期のガイドの範囲でのライブラリを使用する場合においては, | 初期のガイドの範囲でのライブラリを使用する場合においては, | ||
ライブラリのバージョンに関わりなく, 0でも1でも支障はありません。 | ライブラリのバージョンに関わりなく, 0でも1でも支障はありません。 | ||
- | timeこのフィールドはコマンドの最後の96bit符号無し整数で, | + | ::time|このフィールドはコマンドの最後の96bit符号無し整数で, |
単位は0x100000000分の1秒です。先に書く数値が下位であることに注意してください。 | 単位は0x100000000分の1秒です。先に書く数値が下位であることに注意してください。 | ||
例えば1.5秒を指定する場合は, t0 = 0x80000000; t1= 1; t2= 0; です。 | 例えば1.5秒を指定する場合は, t0 = 0x80000000; t1= 1; t2= 0; です。 | ||
Line 413: | Line 285: | ||
---- | ---- | ||
- | **[[0x0018.0x80:シグナルハンドラ終了]] | + | **0x0018.0x80:シグナルハンドラ終了 |
- | コマンドdd 0x18, 0x80, signaldw, nest | + | :コマンド|dd 0x18, 0x80, signaldw, nest |
guigui00.hvoid lib_waitsignal(0x80, signaldw, nest); | guigui00.hvoid lib_waitsignal(0x80, signaldw, nest); | ||
- | 機能シグナルハンドラから復帰します。 | + | :機能|シグナルハンドラから復帰します。 |
- | 解説復帰時の値はスタックから読まれます。 | + | :解説|復帰時の値はスタックから読まれます。 |
スタック上にふさわしいレジスタイメージがあれば, | スタック上にふさわしいレジスタイメージがあれば, | ||
ハンドラの中でなくとも使ってかまいません。 | ハンドラの中でなくとも使ってかまいません。 | ||
Line 428: | Line 300: | ||
---- | ---- | ||
- | **[[0x001c:ノーオペレーション]] | + | **0x001c:ノーオペレーション |
- | コマンドdd 0x1c | + | :コマンド|dd 0x1c |
- | 機能なにもしません。単に飛ばされます。 | + | :機能|なにもしません。単に飛ばされます。 |
---- | ---- | ||
- | **[[0x0020.0:ウィンドウオープン]] | + | **0x0020.0:ウィンドウオープン |
- | コマンドdd 0x20, window, slot, width, height | + | :コマンド|dd 0x20, window, slot, width, height |
- | guigui00.hstruct LIB_WINDOW *lib_openwindow(struct LIB_WINDOW *window, int slot, int width, int height); | + | :guigui00.h| |
- | void lib_openwindow_nm(struct LIB_WINDOW *window, int slot, int width, int height); | + | struct LIB_WINDOW *lib_openwindow(struct LIB_WINDOW *window, int slot, int width, int height);&br; |
+ | void lib_openwindow_nm(struct LIB_WINDOW *window, int slot, int width, int height);&br; | ||
struct LIB_WINDOW *lib_openwindow_am(struct LIB_WINDOW *window, int slot, int width, int height); | struct LIB_WINDOW *lib_openwindow_am(struct LIB_WINDOW *window, int slot, int width, int height); | ||
- | 機能ウィンドウを開きます。 | + | :機能|ウィンドウを開きます。 |
- | 解説ウィンドウはスロットのある限り幾つでも開けます。 | + | :解説|ウィンドウはスロットのある限り幾つでも開けます。 |
ウィンドウが一つでも閉じられるとプロセスも終了するのがデフォルトなので, | ウィンドウが一つでも閉じられるとプロセスも終了するのがデフォルトなので, | ||
それは困るなら[[拡張ウィンドウオープン]]を使います。 | それは困るなら[[拡張ウィンドウオープン]]を使います。 | ||
- | 引数 | + | :引数| |
- | window128バイトのバッファのセグメントオフセットです。 | + | ::window|128バイトのバッファのセグメントオフセットです。 |
ライブラリはこの値とスロットでウィンドウを識別します。 | ライブラリはこの値とスロットでウィンドウを識別します。 | ||
- | slotスロット番号です。ウィンドウ一つにつきスロット一つ消費します。 | + | ::slot|スロット番号です。ウィンドウ一つにつきスロット一つ消費します。 |
- | width, heightピクセル単位でのウィンドウの大きさです。 | + | ::width, height|ピクセル単位でのウィンドウの大きさです。 |
周りに枠やウィンドウタイトルが追加されます。ウィンドウの幅は | 周りに枠やウィンドウタイトルが追加されます。ウィンドウの幅は | ||
(タイトルの長さ)*8+80 以上でなければなりません。枠の幅は, | (タイトルの長さ)*8+80 以上でなければなりません。枠の幅は, | ||
Line 455: | Line 328: | ||
---- | ---- | ||
- | **[[0x0020.1:拡張ウィンドウオープン]]@pokon0.c,pioneer0.ask | + | **0x0020.1:拡張ウィンドウオープン@pokon0.c,pioneer0.ask |
- | コマンドdd 0x20, window, slot|1|flag, width, height | + | :コマンド|dd 0x20, window, slot|1|flag, width, height&br; |
- | dd 1 | signal_flags | + | dd 1 | signal_flags&br; |
dd x_ofs, y_ofs ;オプショナル | dd x_ofs, y_ofs ;オプショナル | ||
- | guigui00.h | + | :guigui00.h| |
- | struct LIB_WINDOW *lib_openwindow1(struct LIB_WINDOW *window, int slot, int width, int height, int signal_flags, int signal_base); | + | struct LIB_WINDOW *lib_openwindow1(struct LIB_WINDOW *window, int slot, int width, int height, int signal_flags, int signal_base);&br; |
- | void lib_openwindow1_nm(struct LIB_WINDOW *window, int slot, int width, int height, int signal_flags, int signal_base); | + | void lib_openwindow1_nm(struct LIB_WINDOW *window, int slot, int width, int height, int signal_flags, int signal_base);&br; |
struct LIB_WINDOW *lib_openwindow1_am(struct LIB_WINDOW *window, int slot, int width, int height, int signal_flags, int signal_base); | struct LIB_WINDOW *lib_openwindow1_am(struct LIB_WINDOW *window, int slot, int width, int height, int signal_flags, int signal_base); | ||
- | 機能ウィンドウを開き, | + | :機能|ウィンドウを開き, |
描画を自分で制御したり状態を取得するためにシグナルを要求します。 | 描画を自分で制御したり状態を取得するためにシグナルを要求します。 | ||
ウィンドウの状態はAPIも把握しているので, | ウィンドウの状態はAPIも把握しているので, | ||
拡張オープンしたウィンドウにも便利なグラフィックボックスなどは使えます。 | 拡張オープンしたウィンドウにも便利なグラフィックボックスなどは使えます。 | ||
- | 引数 | + | :引数| |
- | heightまで[[ウィンドウオープン]]と | + | ::heightまで|[[ウィンドウオープン]]と |
全く同じ意味のフィールドです。slot | flagを忘れないように。 | 全く同じ意味のフィールドです。slot | flagを忘れないように。 | ||
- | flagbit1を立てるとx_ofs,y_ofsが存在することになります。guigui00.hにはありません。 | + | ::flag|bit1を立てるとx_ofs,y_ofsが存在することになります。guigui00.hにはありません。 |
- | signal_flags要求するシグナルの種類です。設定はそれぞれ1にすると有効で, | + | ::signal_flags|要求するシグナルの種類です。設定はそれぞれ1にすると有効で, |
0にするとデフォルト通り自動処理になります。全ビットを0にすれば, | 0にするとデフォルト通り自動処理になります。全ビットを0にすれば, | ||
通常のウィンドウオープンと全く同じになります。 | 通常のウィンドウオープンと全く同じになります。 | ||
実際のシグナルの値は, signal_baseの値に増分値を加えたものです。 | 実際のシグナルの値は, signal_baseの値に増分値を加えたものです。 | ||
- | ビット増分値意味 | + | ビット 増分値 意味 |
- | bit0+0VRAMアクセス許可 | + | bit0 +0 VRAMアクセス許可 |
- | +1VRAMアクセス禁止 | + | +1 VRAMアクセス禁止 |
- | +2ウィンドウ全体の描画 | + | +2 ウィンドウ全体の描画 |
- | +3ウィンドウ全体の差分描画 | + | +3 ウィンドウ全体の差分描画 |
- | bit1+4ウィンドウ位置変更 | + | bit1 +4 ウィンドウ位置変更 |
- | bit2+5タイトルバーカラー変更 | + | bit2 +5 タイトルバーカラー変更 |
- | bit3+6ウィンドウクローズ要求 | + | bit3 +6 ウィンドウクローズ要求 |
- | bit4VRAMアクセスシグナル要/不要反転 (後載せサクサクじゃあ!) | + | bit4 VRAMアクセスシグナル要/不要反転 (後載せサクサクじゃあ!) |
- | bit5+7クローズ完了通知 | + | bit5 +7 クローズ完了通知 |
- | bit6+8リサイズ(予約?) | + | bit6 +8 リサイズ(予約?) |
- | bit7増分値スケールビット。増分値が全て四倍になる。 | + | bit7 増分値スケールビット。増分値が全て四倍になる。 |
ほとんどのシグナルの長さは4バイトですが, | ほとんどのシグナルの長さは4バイトですが, | ||
ウィンドウ位置変更シグナルはx座標の値とy座標の値が続いて12バイトのシグナルになります。 | ウィンドウ位置変更シグナルはx座標の値とy座標の値が続いて12バイトのシグナルになります。 | ||
タイトルバーカラー変更シグナルもステータス値が後続し8バイトのシグナルになります。 | タイトルバーカラー変更シグナルもステータス値が後続し8バイトのシグナルになります。 | ||
カラー変更のステータス値は以下の通りです (これがあればVRAMシグナルは要らないという訳ではない)。 | カラー変更のステータス値は以下の通りです (これがあればVRAMシグナルは要らないという訳ではない)。 | ||
- | 0VRAMアクセス禁止色 | + | 0 VRAMアクセス禁止色 |
- | 1非アクティブ色 | + | 1 非アクティブ色 |
- | 2アクティブ色 | + | 2 アクティブ色 |
シグナルに対する応答方法は以下の表の通りです。 | シグナルに対する応答方法は以下の表の通りです。 | ||
具体的な処理は[[ウィンドウ制御]]を参照してください。 | 具体的な処理は[[ウィンドウ制御]]を参照してください。 | ||
- | + | シグナル名 通知義務 備考 | |
- | シグナル名通知義務備考 | + | ウィンドウ描画許可 なし 必ず再描画シグナルも来る |
- | ウィンドウ描画許可なし必ず再描画シグナルも来る | + | ウィンドウ描画禁止 受信完了 |
- | ウィンドウ描画禁止受信完了 | + | ウィンドウ全体の再描画 描画完了 描画禁止でも無視して描画 |
- | ウィンドウ全体の再描画描画完了描画禁止でも無視して描画 | + | ウィンドウ全体の再描画(差分) 描画完了 とりあえず再描画と同じ |
- | ウィンドウ全体の再描画(差分)描画完了とりあえず再描画と同じ | + | ウィンドウ位置変更 なし |
- | ウィンドウ位置変更なし | + | タイトルバーカラー変更 なし 再描画も来ると思われる |
- | タイトルバーカラー変更なし再描画も来ると思われる | + | ウィンドウクローズ要求 なし ウィンドウを閉じましょう |
- | ウィンドウクローズ要求なしウィンドウを閉じましょう | + | クローズ完了 なし 以降スロットの再利用可 |
- | クローズ完了なし以降スロットの再利用可 | + | ::x_ofs,y_ofs|ウィンドウ内の原点の位置をウィンドウ枠の左上からのオフセットで指定します。 |
- | x_ofs,y_ofsウィンドウ内の原点の位置をウィンドウ枠の左上からのオフセットで指定します。 | + | |
テキストボックスなどのコンポーネントはここを基準にして配置されますし, | テキストボックスなどのコンポーネントはここを基準にして配置されますし, | ||
描画の際もここが原点になります。 | 描画の際もここが原点になります。 | ||
- | デバッグ | + | :デバッグ| |
- | ウィンドウが表示される前にwinman0が止まってしまう | + | ::ウィンドウが表示される前にwinman0が止まってしまう| |
VRAMシグナルだけ欲しい場合のオプションは 0x10 です。0x11 | VRAMシグナルだけ欲しい場合のオプションは 0x10 です。0x11 | ||
はウィンドウ描画シグナルのみ欲しい場合です。 | はウィンドウ描画シグナルのみ欲しい場合です。 | ||
ウィンドウ描画完了シグナルが来るまで, winman0は待ち続けます。 | ウィンドウ描画完了シグナルが来るまで, winman0は待ち続けます。 | ||
- | モジュールハンドル初期化などと干渉 | + | ::モジュールハンドル初期化などと干渉| |
ハンドル初期化完了などを待っている間も, | ハンドル初期化完了などを待っている間も, | ||
ウィンドウの制御シグナルは容赦なくやって来ます。返事の必要なシグナルを無視すると, | ウィンドウの制御シグナルは容赦なくやって来ます。返事の必要なシグナルを無視すると, | ||
またwinman0が止まります。 | またwinman0が止まります。 | ||
- | ライブラリ終了する前にウィンドウを閉じておかないとまずいようです。 | + | ::ライブラリ終了する前に|ウィンドウを閉じておかないとまずいようです。 |
- | 反応速度重く遅い処理をする必要がある場合, | + | ::反応速度|重く遅い処理をする必要がある場合, |
シグナルハンドラを使わないと, 体感速度が大幅に低下することがあります | シグナルハンドラを使わないと, 体感速度が大幅に低下することがあります | ||
(winman0がウィンドウ描画完了をひたすら待つようになっているため)。 | (winman0がウィンドウ描画完了をひたすら待つようになっているため)。 | ||
---- | ---- | ||
- | **[[0x0024.0:ウィンドウクローズ]] | + | **0x0024.0:ウィンドウクローズ |
- | コマンドdd 0x24,0, window | + | :コマンド|dd 0x24,0, window |
guigui00.hvoid lib_closewindow(0, window); | guigui00.hvoid lib_closewindow(0, window); | ||
- | 機能ウィンドウを閉じます。 | + | :機能|ウィンドウを閉じます。 |
- | 解説ウィンドウはすぐ閉じるわけではないため, | + | :解説|ウィンドウはすぐ閉じるわけではないため, |
スロットを再利用するには[[拡張ウィンドウオープン]]を使って, | スロットを再利用するには[[拡張ウィンドウオープン]]を使って, | ||
完了シグナルをもらう必要があります。 | 完了シグナルをもらう必要があります。 | ||
- | 引数 | + | :引数|window[[ウィンドウオープン]]で指定したものと同じです。 |
- | window[[ウィンドウオープン]]で指定したものと同じです。 | + | |
---- | ---- | ||
- | **[[0x0028.0x1011.テキストボックスオープン]] | + | **0x0028.0x1011.テキストボックスオープン |
- | コマンドdd 0x28, opt, textbox, backcolor, width,height, x,y, window, fontset, filler | + | :コマンド|dd 0x28, opt, textbox, backcolor, width,height, x,y, window, fontset, filler |
guigui00.h | guigui00.h | ||
(LIB_TEXTBOX*) lib_opentextbox(opt, textbox, backcolor, width, height, x, y, window, charset, filler); | (LIB_TEXTBOX*) lib_opentextbox(opt, textbox, backcolor, width, height, x, y, window, charset, filler); | ||
void lib_opentextbox_nm(opt, textbox, backcolor, width, height, x, y, window, charset, filler); | void lib_opentextbox_nm(opt, textbox, backcolor, width, height, x, y, window, charset, filler); | ||
(LIB_TEXTBOX*) lib_opentextbox_am(opt, textbox, backcolor, width, height, x, y, window, charset, filler); | (LIB_TEXTBOX*) lib_opentextbox_am(opt, textbox, backcolor, width, height, x, y, window, charset, filler); | ||
- | 機能ウィンドウにテキストを表示するためのテキストボックスを貼り付けます。 | + | :機能|ウィンドウにテキストを表示するためのテキストボックスを貼り付けます。 |
- | 引数 | + | :引数|opt各ビットに意味があります。 |
- | opt各ビットに意味があります。 | + | |
bit 00デフォルト背景色はシステム指定の色。backcolorは0。 | bit 00デフォルト背景色はシステム指定の色。backcolorは0。 | ||
Line 568: | Line 438: | ||
---- | ---- | ||
- | **[[0x002c.テキストボックスクローズ]] | + | **0x002c.テキストボックスクローズ |
- | コマンドdd 0x2c,0,textbox | + | :コマンド|dd 0x2c,0,textbox |
guigui00.hvoid lib_closetextbox(0, textbox); | guigui00.hvoid lib_closetextbox(0, textbox); | ||
- | 機能テキストボックスをクローズするようです。 | + | :機能|テキストボックスをクローズするようです。 |
---- | ---- | ||
- | **[[0x0030.グラフィックボックスオープン・スクロールなし]] @test012.c | + | **0x0030.グラフィックボックスオープン・スクロールなし]] @test012.c |
- | コマンドdd 0x30, opt, gbox,1,filler,width,height,x,y,window | + | :コマンド|dd 0x30, opt, gbox,1,filler,width,height,x,y,window |
guigui00.h | guigui00.h | ||
(LIB_GRAPHBOX*) lib_opengraphbox(opt, gbox, 1, filler, width, height, x, y, window) | (LIB_GRAPHBOX*) lib_opengraphbox(opt, gbox, 1, filler, width, height, x, y, window) | ||
Line 582: | Line 452: | ||
(LIB_GRAPHBOX*) lib_opengraphbox_am(opt, gbox, 1, filler, width, height, x, y, window) | (LIB_GRAPHBOX*) lib_opengraphbox_am(opt, gbox, 1, filler, width, height, x, y, window) | ||
- | 機能ウィンドウに画像を表示するグラフィックボックスをウィンドウに貼り付け, fillerの値で初期化します。 | + | :機能|ウィンドウに画像を表示するグラフィックボックスをウィンドウに貼り付け, fillerの値で初期化します。 |
グラフィックボックスのバッファにデータを書き込み, フラッシュするとバッファの内容が画面に反映されます。フラッシュは要求した時の他にシステムの都合によって自動的に実行されます。 | グラフィックボックスのバッファにデータを書き込み, フラッシュするとバッファの内容が画面に反映されます。フラッシュは要求した時の他にシステムの都合によって自動的に実行されます。 | ||
グラフィックボックスのデータは下位のバイトが左のピクセルに対応します。フォントに使うパターンとは逆です。 | グラフィックボックスのデータは下位のバイトが左のピクセルに対応します。フォントに使うパターンとは逆です。 | ||
- | 引数 | + | :引数|opt各ビットに意味があります。 |
- | opt各ビットに意味があります。 | + | |
bit0-11 0x001予約(?) | bit0-11 0x001予約(?) | ||
Line 605: | Line 474: | ||
---- | ---- | ||
- | **[[0x0030.0x27.16bpp,32bppグラフィックボックスオープン]] @test043 | + | **0x0030.0x27.16bpp,32bppグラフィックボックスオープン]] @test043 |
- | コマンドdd 0x30, opt, gbox,mode,filler,width,height,x,y,window | + | :コマンド|dd 0x30, opt, gbox,mode,filler,width,height,x,y,window |
guigui00.h | guigui00.h | ||
(LIB_GRAPHBOX*) lib_opengraphbox(opt, gbox, mode, filler, width, height, x, y, window) | (LIB_GRAPHBOX*) lib_opengraphbox(opt, gbox, mode, filler, width, height, x, y, window) | ||
void lib_opengraphbox_nm(opt, gbox, mode, filler, width, height, x, y, window) | void lib_opengraphbox_nm(opt, gbox, mode, filler, width, height, x, y, window) | ||
(LIB_GRAPHBOX*) lib_opengraphbox_am(opt, gbox, mode, filler, width, height, x, y, window) | (LIB_GRAPHBOX*) lib_opengraphbox_am(opt, gbox, mode, filler, width, height, x, y, window) | ||
- | 機能上とほぼ同じです。あれは4bppでしたがこちらは16, 32bppになります。このグラフィックボックスは線描やらの機能が (まだ) なく, フラッシュしかできません。 | + | :機能|上とほぼ同じです。あれは4bppでしたがこちらは16, 32bppになります。このグラフィックボックスは線描やらの機能が (まだ) なく, フラッシュしかできません。 |
- | 引数 | + | :引数|mode色深度と減色設定です。 |
- | mode色深度と減色設定です。 | + | |
bit0-2色深度です。2で16bpp, 4で32bpp(実質24bpp) になります。 | bit0-2色深度です。2で16bpp, 4で32bpp(実質24bpp) になります。 | ||
Line 627: | Line 495: | ||
---- | ---- | ||
- | **[[0x0030.2.グラフィックボックスオープン・スクロールあり]]@test017.c | + | **0x0030.2.グラフィックボックスオープン・スクロールあり]]@test017.c |
- | コマンドdd 0x30, opt,gbox,1,0,bwidth,bheight,width,height,x,y,window | + | :コマンド|dd 0x30, opt,gbox,1,0,bwidth,bheight,width,height,x,y,window |
guigui00.h | guigui00.h | ||
(LIB_GRAPHBOX*) lib_opengraphbox2(opt, gbox, 1, filler, bwidth, bheight, width, height, x,y, window); | (LIB_GRAPHBOX*) lib_opengraphbox2(opt, gbox, 1, filler, bwidth, bheight, width, height, x,y, window); | ||
void lib_opengraphbox2_nm(opt, gbox, 1, filler, bwidth, bheight, width, height, x,y, window); | void lib_opengraphbox2_nm(opt, gbox, 1, filler, bwidth, bheight, width, height, x,y, window); | ||
(LIB_GRAPHBOX*) lib_opengraphbox2_am(opt, gbox, 1, filler, bwidth, bheight, width,height, x,y, window); | (LIB_GRAPHBOX*) lib_opengraphbox2_am(opt, gbox, 1, filler, bwidth, bheight, width,height, x,y, window); | ||
- | 機能バッファの一部が表示されるグラフィックボックスをウィンドウに貼りつけ, スクロール位置を(0,0)に初期化します。 | + | :機能|バッファの一部が表示されるグラフィックボックスをウィンドウに貼りつけ, スクロール位置を(0,0)に初期化します。 |
- | 引数 | + | :引数|opt各ビットに意味があります。 |
- | opt各ビットに意味があります。 | + | |
bit0-11 0x002 | bit0-11 0x002 | ||
Line 654: | Line 521: | ||
---- | ---- | ||
- | **[[0x0030.0.既存グラフィックボックスオープン]] | + | **0x0030.0.既存グラフィックボックスオープン |
- | コマンドdd 0x30, opt, gbox | + | :コマンド|dd 0x30, opt, gbox |
- | 機能グラフィックボックスをウィンドウに貼りつけます。 | + | :機能|グラフィックボックスをウィンドウに貼りつけます。 |
何に使うんだろう。ウィンドウをいったんクローズして, | 何に使うんだろう。ウィンドウをいったんクローズして, | ||
もう一度同じのをオープンした時に復元するためなんだろうか。 | もう一度同じのをオープンした時に復元するためなんだろうか。 | ||
Line 664: | Line 531: | ||
---- | ---- | ||
- | **[[0x0034.グラフィックボックスクローズ]] | + | **0x0034.グラフィックボックスクローズ |
- | コマンドdd 0x34, opt, gbox | + | :コマンド|dd 0x34, opt, gbox |
- | 機能OSASK V2.8からV4.0ではライブラリがハングアップします。 | + | :機能|OSASK V2.8からV4.0ではライブラリがハングアップします。 |
---- | ---- | ||
- | **[[0x0038.なし]] | + | **0x0038.なし |
---- | ---- | ||
- | **[[0x003c.0x33.ウィンドウ制御 (ソース上でかけ離れている)]] | + | **0x003c.0x33.ウィンドウ制御 (ソース上でかけ離れている) |
- | コマンドdd 0x3c, opt, window | + | :コマンド|dd 0x3c, opt, window |
guigui00.hvoid lib_controlwindow(opt, window); | guigui00.hvoid lib_controlwindow(opt, window); | ||
- | 機能拡張オープンしたウィンドウを自前で制御するためのコマンドです。拡張オープンでないものはpioneerライブラリが同じように制御しています。 | + | :機能|拡張オープンしたウィンドウを自前で制御するためのコマンドです。拡張オープンでないものはpioneerライブラリが同じように制御しています。 |
- | 引数 | + | :引数|optビットごとに意味があり, 複数のビットを同時に1にできます。下位から順に解釈されます。 |
- | optビットごとに意味があり, 複数のビットを同時に1にできます。下位から順に解釈されます。 | + | |
bit0ウィンドウの枠を描画しウィンドウを塗りつぶす。付加したコンポーネント | bit0ウィンドウの枠を描画しウィンドウを塗りつぶす。付加したコンポーネント | ||
Line 693: | Line 559: | ||
---- | ---- | ||
- | **[[0x0040.0x051.テキストボックス文字列書き込み]] | + | **0x0040.0x051.テキストボックス文字列書き込み |
- | コマンドdd 0x40, opt, x,y, textbox, color, backcolor, STRING | + | :コマンド|dd 0x40, opt, x,y, textbox, color, backcolor, STRING |
gugui00.h | gugui00.h | ||
void lib_putstring0(opt|0x4000, x,y, textbox, color, backcolor, length, &str); | void lib_putstring0(opt|0x4000, x,y, textbox, color, backcolor, length, &str); | ||
Line 704: | Line 570: | ||
int color, int backcolor, const char *str); | int color, int backcolor, const char *str); | ||
/* EUCがない! */ | /* EUCがない! */ | ||
- | 機能テキストボックスとそのバッファに文字を書き込みます。 | + | :機能|テキストボックスとそのバッファに文字を書き込みます。 |
表示結果がテキストボックスをはみ出してはいけません。自動折り返しはしませんし, 改行コードは使えません。複数行に書き込むには, このコマンドを行数分だけ実行することになります。 | 表示結果がテキストボックスをはみ出してはいけません。自動折り返しはしませんし, 改行コードは使えません。複数行に書き込むには, このコマンドを行数分だけ実行することになります。 | ||
- | 引数 | + | :引数|opt各ビットに意味があります。 |
- | opt各ビットに意味があります。 | + | |
bit 00背景色はテキストボックスのデフォルト。backcolorは0。 | bit 00背景色はテキストボックスのデフォルト。backcolorは0。 | ||
Line 742: | Line 607: | ||
---- | ---- | ||
- | **[[0x0044.0xf0.線・長方形描画]] | + | **0x0044.0xf0.線・長方形描画 |
- | コマンドdd 0x44, opt, window, color, x0,y0, x1,y1 | + | :コマンド|dd 0x44, opt, window, color, x0,y0, x1,y1 |
guigui00.hvoid lib_drawline(opt, window, color, x0, y0, x1, y1); | guigui00.hvoid lib_drawline(opt, window, color, x0, y0, x1, y1); | ||
- | 機能線・長方形を描く低レベルコマンドです。再描画を自分で指示してください。 | + | :機能|線・長方形を描く低レベルコマンドです。再描画を自分で指示してください。 |
- | 引数 | + | :引数|optビットごとに以下の意味を持ちます。 |
- | optビットごとに以下の意味を持ちます。 | + | |
bit4,500線 | bit4,500線 | ||
Line 766: | Line 630: | ||
---- | ---- | ||
- | **[[0x0048.1.文字列描画]] | + | **0x0048.1.文字列描画 |
- | コマンドdd 0x48,1, window, fontset, x, y, color, back_color, length, c0,c1,... | + | :コマンド|dd 0x48,1, window, fontset, x, y, color, back_color, length, c0,c1,... |
- | 機能文字を描画する低レベルコマンドです。再描画は自分で指示してください。 | + | :機能|文字を描画する低レベルコマンドです。再描画は自分で指示してください。 |
- | 引数 | + | :引数|(x,y)描画する文字列の左上の点のウィンドウ内での座標です。 |
- | (x,y)描画する文字列の左上の点のウィンドウ内での座標です。 | + | |
現在, 描画ルーチンの不備のためにxは8の倍数である必要があります。 | 現在, 描画ルーチンの不備のためにxは8の倍数である必要があります。 | ||
c0, c1, ...32bit半角コードです。他の形式は使えません。 | c0, c1, ...32bit半角コードです。他の形式は使えません。 | ||
Line 778: | Line 641: | ||
---- | ---- | ||
- | **[[0x004c.0x27.画像描画]] | + | **0x004c.0x27.画像描画 |
- | コマンドdd 0x4c,mode, window, x,y, width,height, skip, offset,selector | + | :コマンド|dd 0x4c,mode, window, x,y, width,height, skip, offset,selector |
guigui00.hvoid lib_putblock1(window, x,y, width,height, skip, offset); | guigui00.hvoid lib_putblock1(window, x,y, width,height, skip, offset); | ||
/* mode=1固定 */ | /* mode=1固定 */ | ||
- | 機能画像を描画する低級コマンドです。再描画を自分で指示してください。 | + | :機能|画像を描画する低級コマンドです。再描画を自分で指示してください。 |
- | 引数 | + | :引数|mode画像の色深度です。1,2,4がそれぞれ8bpp(実質は4bpp),16bpp,32bpp(実質は24bpp)に対応します。16bppと32bppでは, 代わりに 0x22, 0x24 を使うと高速モードになります |
- | mode画像の色深度です。1,2,4がそれぞれ8bpp(実質は4bpp),16bpp,32bpp(実質は24bpp)に対応します。16bppと32bppでは, 代わりに 0x22, 0x24 を使うと高速モードになります | + | |
(減色品質を落してでも速く処理されます。なお現在の実装では1割程度速くなりますが, | (減色品質を落してでも速く処理されます。なお現在の実装では1割程度速くなりますが, | ||
品質は段違いに悪くなるように見うけられます)。8bppに高速モードはありません。 | 品質は段違いに悪くなるように見うけられます)。8bppに高速モードはありません。 | ||
Line 795: | Line 657: | ||
---- | ---- | ||
- | **[[0x004c.0x8027.画像描画やや安全 (グラフィックボックスフラッシュ)]] | + | **0x004c.0x8027.画像描画やや安全 (グラフィックボックスフラッシュ) |
- | コマンドdd 0x4c,0x8000|mode, window, x,y, width,height, skip, offset,selector | + | :コマンド|dd 0x4c,0x8000|mode, window, x,y, width,height, skip, offset,selector |
guigui00.hvoid lib_flushgraphbox(opt, window, x,y, width,height, skip, offset); | guigui00.hvoid lib_flushgraphbox(opt, window, x,y, width,height, skip, offset); | ||
- | 機能画像を描画する低級コマンドです。ウィンドウ描画禁止中は描画しないのでグラフィックボックスのフラッシュに使われました。パラメータの意味は上と同じです。 | + | :機能|画像を描画する低級コマンドです。ウィンドウ描画禁止中は描画しないのでグラフィックボックスのフラッシュに使われました。パラメータの意味は上と同じです。 |
専用のコマンド[[グラフィックボックスフラッシュ]]が用意されたので, | 専用のコマンド[[グラフィックボックスフラッシュ]]が用意されたので, | ||
できればそっちを使うべきでしょう。このコマンドを使うと, | できればそっちを使うべきでしょう。このコマンドを使うと, | ||
Line 807: | Line 669: | ||
---- | ---- | ||
- | **[[0x0050.0x80c0.点描複数]] | + | **0x0050.0x80c0.点描複数 |
- | コマンドdd 0x50,opt,window, x,y, width,height, num, offset,selector | + | :コマンド|dd 0x50,opt,window, x,y, width,height, num, offset,selector |
guigui00.hvoid lib_drawpoints1(opt, window, x,y, width,height, num, offset); | guigui00.hvoid lib_drawpoints1(opt, window, x,y, width,height, num, offset); | ||
- | 機能点を複数描画する低レベルコマンドです。再描画の指示は自分でしてください。 | + | :機能|点を複数描画する低レベルコマンドです。再描画の指示は自分でしてください。 |
- | 引数 | + | :引数|opt描画属性を指定します。 |
- | opt描画属性を指定します。 | + | |
bit6,700pset | bit6,700pset | ||
Line 836: | Line 697: | ||
---- | ---- | ||
- | **[[0x0054.0x80c0.グラフィックボックス線描]] @test014.c | + | **0x0054.0x80c0.グラフィックボックス線描]] @test014.c |
- | コマンドdd 0x54, opt, gbox, color, x0,y0, x1,y1 | + | :コマンド|dd 0x54, opt, gbox, color, x0,y0, x1,y1 |
guigui00.hvoid lib_drawline0(opt, gbox, color, x0,y0, x1,y1); | guigui00.hvoid lib_drawline0(opt, gbox, color, x0,y0, x1,y1); | ||
void lib_drawpoint0(opt, gbox, color, x,y); /* x0=x1=x, y0=y1=y */ | void lib_drawpoint0(opt, gbox, color, x,y); /* x0=x1=x, y0=y1=y */ | ||
- | 機能グラフィックボックスとそのバッファの両方に線を描画します。 | + | :機能|グラフィックボックスとそのバッファの両方に線を描画します。 |
長方形機能はまだありませんが予定されています。水平線や垂直線を書く場合は長方形塗りつぶしを使う方が速いはずです。 | 長方形機能はまだありませんが予定されています。水平線や垂直線を書く場合は長方形塗りつぶしを使う方が速いはずです。 | ||
- | 引数 | + | :引数|optビットごとに意味があります。 |
- | optビットごとに意味があります。 | + | |
bit6,700pset (他は遅くなる可能性がある) | bit6,700pset (他は遅くなる可能性がある) | ||
Line 861: | Line 721: | ||
---- | ---- | ||
- | **[[0x0058.0x2001.グラフィックボックススクロール]] @test018.c | + | **0x0058.0x2001.グラフィックボックススクロール]] @test018.c |
- | コマンドdd 0x58,0x2001,gbox,bufofs,vx,vy | + | :コマンド|dd 0x58,0x2001,gbox,bufofs,vx,vy |
guigui00.hvoid lib_putblock02001(gbox, bufofs, vx,vy); | guigui00.hvoid lib_putblock02001(gbox, bufofs, vx,vy); | ||
- | 機能グラフィックボックスの表示位置を変更 (スクロール) 及びフラッシュします。 | + | :機能|グラフィックボックスの表示位置を変更 (スクロール) 及びフラッシュします。 |
- | 引数 | + | :引数|gboxグラフィックボックスオープンで指定したものと同じです。 |
- | gboxグラフィックボックスオープンで指定したものと同じです。 | + | |
bufofs表示する時に左上の原点となるデータのセグメントオフセットです。フラッシュするときに指定するものと同じです。普通はグラフィックボックスオープンで使ったbwidthを使って bufofs = gbox +64 +bwidth *vy +vx と計算されます。 | bufofs表示する時に左上の原点となるデータのセグメントオフセットです。フラッシュするときに指定するものと同じです。普通はグラフィックボックスオープンで使ったbwidthを使って bufofs = gbox +64 +bwidth *vy +vx と計算されます。 | ||
(vx,vy)左上の原点として表示される点のデータ内での座標です。 | (vx,vy)左上の原点として表示される点のデータ内での座標です。 | ||
Line 873: | Line 732: | ||
---- | ---- | ||
- | **[[0x0058.0x3001.グラフィックボックス差分スクロール]] @test017.c | + | **0x0058.0x3001.グラフィックボックス差分スクロール]] @test017.c |
- | コマンドdd 0x58,0x3001,gbox,buf,vx,vy, tmpofs, tmpskip, 16 | + | :コマンド|dd 0x58,0x3001,gbox,buf,vx,vy, tmpofs, tmpskip, 16 |
guigui00.hvoid lib_putblock03001(gbox, buf, vx,vy, tmpofs, tmpskip, tcol0); | guigui00.hvoid lib_putblock03001(gbox, buf, vx,vy, tmpofs, tmpskip, tcol0); | ||
- | 機能グラフィックボックス内の表示位置変更 (スクロール) をし, バッファ内で使用前使用後の差分を計算して差分フラッシュします。現在の表示内容とそこに対応する画像データが一致していなければ正しく差分ができません (多分。しかしそれを逆に利用することもできるはず)。 | + | :機能|グラフィックボックス内の表示位置変更 (スクロール) をし, バッファ内で使用前使用後の差分を計算して差分フラッシュします。現在の表示内容とそこに対応する画像データが一致していなければ正しく差分ができません (多分。しかしそれを逆に利用することもできるはず)。 |
引数前半のパラメータは上と同じです。 | 引数前半のパラメータは上と同じです。 | ||
tmpofs差分を作るためのバッファのセグメントオフセットです。((width +tmpskip) * height)バイトの大きさが必要です。 | tmpofs差分を作るためのバッファのセグメントオフセットです。((width +tmpskip) * height)バイトの大きさが必要です。 | ||
Line 884: | Line 743: | ||
---- | ---- | ||
- | **[[0x0058.0x4027.グラフィックボックスフラッシュ]] | + | **0x0058.0x4027.グラフィックボックスフラッシュ |
- | コマンドdd 0x58,0x4000|mode,gbox,x,y,width,height | + | :コマンド|dd 0x58,0x4000|mode,gbox,x,y,width,height |
- | 機能グラフィックボックスの一部の領域をフラッシュします。8, 16, 32bppに対応しています。スクロールには対応していません。 | + | :機能|グラフィックボックスの一部の領域をフラッシュします。8, 16, 32bppに対応しています。スクロールには対応していません。 |
引数mode画像の色深度と描画モードです。1,2,4がそれぞれ8bpp (実質は4bpp), | 引数mode画像の色深度と描画モードです。1,2,4がそれぞれ8bpp (実質は4bpp), | ||
16bpp,32bpp (実質は24bpp) に対応します。16bppと32bppでは, 代わりに 0x22, 0x24 | 16bpp,32bpp (実質は24bpp) に対応します。16bppと32bppでは, 代わりに 0x22, 0x24 | ||
Line 899: | Line 758: | ||
---- | ---- | ||
- | **[[0x005c.0x80c0.グラフィックボックス点描複数]] @test025.c | + | **0x005c.0x80c0.グラフィックボックス点描複数]] @test025.c |
- | コマンドdd 0x5c, opt,gbox, x,y, width,height, num,offset,selector | + | :コマンド|dd 0x5c, opt,gbox, x,y, width,height, num,offset,selector |
guigui00.hvoid lib_drawpoints0(opt, gbox, x,y, width,height, num, offset); | guigui00.hvoid lib_drawpoints0(opt, gbox, x,y, width,height, num, offset); | ||
- | 機能グラフィックボックスとそのバッファに点を打ちます。 | + | :機能|グラフィックボックスとそのバッファに点を打ちます。 |
- | 引数 | + | :引数|opt各ビットに意味があります。線描と同じですが。 |
- | opt各ビットに意味があります。線描と同じですが。 | + | |
bit6,700pset | bit6,700pset | ||
Line 920: | Line 778: | ||
---- | ---- | ||
- | **[[0x0060.シグナルボックスオープン]] | + | **0x0060.シグナルボックスオープン |
- | コマンドdd 0x60, length, sigbox, eos, rewind | + | :コマンド|dd 0x60, length, sigbox, eos, rewind |
guigui00.hint* lib_opensignalbox(bytes, signalbox, eos, rewind); | guigui00.hint* lib_opensignalbox(bytes, signalbox, eos, rewind); | ||
void lib_opensignalbox_nm(bytes, signalbox, eos, rewind); | void lib_opensignalbox_nm(bytes, signalbox, eos, rewind); | ||
int* void lib_opensignalbox_am(bytes, signalbox, eos, rewind); | int* void lib_opensignalbox_am(bytes, signalbox, eos, rewind); | ||
- | 機能シグナルを受信するシグナルボックスを定義します。 | + | :機能|シグナルを受信するシグナルボックスを定義します。 |
- | 引数 | + | :引数|lengthバイト単位でのシグナルボックスの大きさです。下位二ビットは予約されており, |
- | lengthバイト単位でのシグナルボックスの大きさです。下位二ビットは予約されており, | + | |
0でなければなりません。最低でも16はないと処理できないと思われます。 | 0でなければなりません。最低でも16はないと処理できないと思われます。 | ||
効率を考えると256以上は必要でしょう。 | 効率を考えると256以上は必要でしょう。 | ||
Line 940: | Line 797: | ||
---- | ---- | ||
- | **[[0x0064.なし]] | + | **0x0064.なし |
---- | ---- | ||
- | **[[0x0068.シグナル定義]] | + | **0x0068.シグナル定義 |
- | 機能キー入力などのイベントとアプリが受け取るシグナルとの対応を定義します。 | + | :機能|キー入力などのイベントとアプリが受け取るシグナルとの対応を定義します。 |
将来は先取りされてコマンド実行前からシグナルが定義されていることになるようです。 | 将来は先取りされてコマンド実行前からシグナルが定義されていることになるようです。 | ||
したがって, 定義前からシグナルが来る可能性を考えてプログラムしてください。 | したがって, 定義前からシグナルが来る可能性を考えてプログラムしてください。 | ||
Line 952: | Line 809: | ||
---- | ---- | ||
- | **[[0x0068.0x10.タイマーシグナル定義]] | + | **0x0068.0x10.タイマーシグナル定義 |
- | コマンドdd 0x68, 0, 0x0010, slot, 0, 1, signal, 0 | + | :コマンド|dd 0x68, 0, 0x0010, slot, 0, 1, signal, 0 |
guigui00.hvoid lib_definesignal1p0(0, 0x0010, slot, 0, signal); | guigui00.hvoid lib_definesignal1p0(0, 0x0010, slot, 0, signal); | ||
- | 機能タイマーイベントが起きたときのシグナルを定義します。 | + | :機能|タイマーイベントが起きたときのシグナルを定義します。 |
このシグナルはウィンドウではなくタスクに送られます。 | このシグナルはウィンドウではなくタスクに送られます。 | ||
- | 引数 | + | :引数|slotタイマーのスロット番号です。 |
- | slotタイマーのスロット番号です。 | + | |
signal要求するシグナルです。 | signal要求するシグナルです。 | ||
---- | ---- | ||
- | **[[0x0068.0x100.文字入力シグナル定義]] | + | **0x0068.0x100.文字入力シグナル定義 |
- | コマンドdd 0x68, num, 0x0100, letter, window, 1, signal, 0 | + | :コマンド|dd 0x68, num, 0x0100, letter, window, 1, signal, 0 |
guigui00.hvoid lib_definesignal1p0(num, 0x0100, letter, window, signal); | guigui00.hvoid lib_definesignal1p0(num, 0x0100, letter, window, signal); | ||
- | 機能キーボードからの文字入力に対してシグナルを定義します。 | + | :機能|キーボードからの文字入力に対してシグナルを定義します。 |
- | 引数 | + | :引数|num定義するシグナル数-1 です。numが1以上の時, |
- | num定義するシグナル数-1 です。numが1以上の時, | + | |
signalおよびletterは1づつ増える連続した値が割り当てられます。4096以上は指定できません。 | signalおよびletterは1づつ増える連続した値が割り当てられます。4096以上は指定できません。 | ||
letterシグナルを定義する文字です。指定可能な値は, | letterシグナルを定義する文字です。指定可能な値は, | ||
Line 1028: | Line 883: | ||
---- | ---- | ||
- | **[[0x0068.0x200.低レベルマウスシグナル]] | + | **0x0068.0x200.低レベルマウスシグナル |
- | コマンドdd 0x68, 0, 0x0200, code, window, 1, signal, 0 | + | :コマンド|dd 0x68, 0, 0x0200, code, window, 1, signal, 0 |
guigui00.hvoid lib_definesignal1p0(0, 0x0200, code, window, signal); | guigui00.hvoid lib_definesignal1p0(0, 0x0200, code, window, signal); | ||
- | 機能マウスの低レベルな (GUIボタンとかではない) シグナルを定義します。 | + | :機能|マウスの低レベルな (GUIボタンとかではない) シグナルを定義します。 |
- | 解説呼び出し順序が重要で, 座標とボタンのシグナルを定義する場合, | + | :解説|呼び出し順序が重要で, 座標とボタンのシグナルを定義する場合, |
必ず座標シグナルを先に定義しなければなりません。そうしないと, | 必ず座標シグナルを先に定義しなければなりません。そうしないと, | ||
多分シグナルの順番が狂うのでしょう。 | 多分シグナルの順番が狂うのでしょう。 | ||
signalの前の1はシグナルの長さだろう。マウス座標のシグナルにはこれを3にするんじゃないのか? | signalの前の1はシグナルの長さだろう。マウス座標のシグナルにはこれを3にするんじゃないのか? | ||
と思う人もいるかもしれませんが, そこは常に1です。 | と思う人もいるかもしれませんが, そこは常に1です。 | ||
- | 引数 | + | :引数|codeシグナルの種類です。 |
- | codeシグナルの種類です。 | + | |
bit 0-30x0左ボタン /ウィンドウ内での座標(感度0,1,2) | bit 0-30x0左ボタン /ウィンドウ内での座標(感度0,1,2) | ||
Line 1061: | Line 915: | ||
---- | ---- | ||
- | **[[0x0068.0.シグナル定義終端]] | + | **0x0068.0.シグナル定義終端 |
- | コマンドdd 0x68, 0,0,0,0,0,0 | + | :コマンド|dd 0x68, 0,0,0,0,0,0 |
guigui00.hvoid lib_definesignal0p0(0, 0, 0, 0); | guigui00.hvoid lib_definesignal0p0(0, 0, 0, 0); | ||
- | 解説シェルとの約束として, | + | :解説|シェルとの約束として, |
シグナルの通知が一通り済んだらこのダミーコマンドを実行します。 | シグナルの通知が一通り済んだらこのダミーコマンドを実行します。 | ||
---- | ---- | ||
- | **[[0x006c.シグナルを自分に送る]] | + | **0x006c.シグナルを自分に送る |
- | コマンドdd 0x006c, num | + | :コマンド|dd 0x006c, num |
または | または | ||
dd 0x006c, (num機能シグナルを自分に送ります。疑似マルチスレッドライブラリで使われています。 | dd 0x006c, (num機能シグナルを自分に送ります。疑似マルチスレッドライブラリで使われています。 | ||
- | 引数 | + | :引数|num送るシグナルの数です。 |
- | num送るシグナルの数です。 | + | |
sig0,sig1,...シグナルの列です。 | sig0,sig1,...シグナルの列です。 | ||
selector:offsetシグナル列のポインタです。 | selector:offsetシグナル列のポインタです。 | ||
Line 1082: | Line 935: | ||
---- | ---- | ||
- | **[[0x0070.タイマーオープン]] | + | **0x0070.タイマーオープン |
- | コマンドdd 0x70, slot | + | :コマンド|dd 0x70, slot |
guigui00.hvoid lib_opentimer(slot); | guigui00.hvoid lib_opentimer(slot); | ||
- | 機能タイマーをユーザーで設定できるようにします。 | + | :機能|タイマーをユーザーで設定できるようにします。 |
このコマンドを実行しないとタイマー設定はできません。 | このコマンドを実行しないとタイマー設定はできません。 | ||
- | 解説標準タイマーを指定した場合, | + | :解説|標準タイマーを指定した場合, |
時間基点に関する設定はそのまま引き継がれます。 | 時間基点に関する設定はそのまま引き継がれます。 | ||
オープン直後のタイマーは停止しています。 | オープン直後のタイマーは停止しています。 | ||
- | 引数 | + | :引数|slotタイマーに使うスロットです。標準タイマーのslotである0x01c0を指定する場合, |
- | slotタイマーに使うスロットです。標準タイマーのslotである0x01c0を指定する場合, | + | タイマークローズを実行するまで[[シグナル待機コマンド |
- | タイマークローズを実行するまで[[シグナル待機コマンド]] | + | |
の時間に関する指定は全て使えません。 | の時間に関する指定は全て使えません。 | ||
タイマーは指定されたslotだけではなく, 続く二つを合わせて計三つのslotを使います。 | タイマーは指定されたslotだけではなく, 続く二つを合わせて計三つのslotを使います。 | ||
Line 1098: | Line 950: | ||
---- | ---- | ||
- | **[[0x0074.タイマークローズ]] | + | **0x0074.タイマークローズ |
- | コマンドdd 0x74, slot | + | :コマンド|dd 0x74, slot |
guigui00.hvoid lib_closetimer(slot); | guigui00.hvoid lib_closetimer(slot); | ||
- | 機能オープンしていたタイマーをシステムに返しスロットを開放します。 | + | :機能|オープンしていたタイマーをシステムに返しスロットを開放します。 |
- | 解説クローズ後は, そのタイマーに対する設定はできません。また, | + | :解説|クローズ後は, そのタイマーに対する設定はできません。また, |
再度オープンすることもできますが, 古い設定は保存されません。 | 再度オープンすることもできますが, 古い設定は保存されません。 | ||
タイマーをクローズする前にタイマーを停止しておいてください。 | タイマーをクローズする前にタイマーを停止しておいてください。 | ||
- | 引数 | + | :引数|slotタイマーとして使っていたスロットの番号です。 |
- | slotタイマーとして使っていたスロットの番号です。 | + | |
三つのうちの最初の一つを指定します。 | 三つのうちの最初の一つを指定します。 | ||
---- | ---- | ||
- | **[[0x0078.1.タイマー停止]] | + | **0x0078.1.タイマー停止 |
- | コマンドdd 0x78,1,slot | + | :コマンド|dd 0x78,1,slot |
guigui00.hvoid lib_settimer(1, slot); | guigui00.hvoid lib_settimer(1, slot); | ||
- | 機能タイマーを止めます。 | + | :機能|タイマーを止めます。 |
- | 解説下のタイマー設定と同じコマンドですが, | + | :解説|下のタイマー設定と同じコマンドですが, |
bit0とbit1が排他的なため敢えて分けています。 | bit0とbit1が排他的なため敢えて分けています。 | ||
タイマーは停止状態にあるときは指定した時刻になってもシグナルを発しません。また各種の設定のためには停止状態にする必要があります。 | タイマーは停止状態にあるときは指定した時刻になってもシグナルを発しません。また各種の設定のためには停止状態にする必要があります。 | ||
Line 1128: | Line 979: | ||
---- | ---- | ||
- | **[[0x0078.0x32.タイマー設定]] | + | **0x0078.0x32.タイマー設定 |
- | コマンドdd 0x78, opt, slot | + | :コマンド|dd 0x78, opt, slot |
または | または | ||
dd 0x78, opt, slot, t0,t1,t2 | dd 0x78, opt, slot, t0,t1,t2 | ||
guigui00.hvoid lib_settimer(opt, slot); | guigui00.hvoid lib_settimer(opt, slot); | ||
void lib_settimertime(opt, slot, t0, t1, t2); | void lib_settimertime(opt, slot, t0, t1, t2); | ||
- | 機能タイマー設定を行ないます。タイマーは時間基点を過ぎるとタイマーシグナルを発します (時間基点が過去の場合, | + | :機能|タイマー設定を行ないます。タイマーは時間基点を過ぎるとタイマーシグナルを発します (時間基点が過去の場合, |
すぐにシグナルを発するようです)。 | すぐにシグナルを発するようです)。 | ||
タイマーが活動中のときは設定できません。タイマーを止めてからにしてください。 | タイマーが活動中のときは設定できません。タイマーを止めてからにしてください。 | ||
- | 引数 | + | :引数|optbit1,4,5に意味があり, bit0,2,3,6~31は予約されています。 |
- | optbit1,4,5に意味があり, bit0,2,3,6~31は予約されています。 | + | |
必ず0にしておいてください。 | 必ず0にしておいてください。 | ||
上位のbitから解釈されます。複数のbitを1にすることで, 複数の設定が一度に可能です。 | 上位のbitから解釈されます。複数のbitを1にすることで, 複数の設定が一度に可能です。 | ||
Line 1156: | Line 1006: | ||
---- | ---- | ||
- | **[[0x0078.0x81.タイマー時間差設定]] | + | **0x0078.0x81.タイマー時間差設定 |
- | コマンドdd 0x78,0x81, slot0, slot1, t0,t1,t2 | + | :コマンド|dd 0x78,0x81, slot0, slot1, t0,t1,t2 |
- | 機能タイマー間の設定を行ないます。 | + | :機能|タイマー間の設定を行ないます。 |
- | 解説slot1のタイマーの時間基点が (slot0の時間基点)+(t2:t1:t0) になります。時間の形式について詳しくは[[シグナル待機コマンド]]を見てください。 | + | :解説|slot1のタイマーの時間基点が (slot0の時間基点)+(t2:t1:t0) になります。時間の形式について詳しくは[[シグナル待機コマンド]]を見てください。 |
---- | ---- | ||
- | **[[0x0078.0x82.タイマー時間差取得]] @test030.c | + | **0x0078.0x82.タイマー時間差取得]] @test030.c |
- | コマンドdd 0x78, 0x82, slot0, slot1, 0,0,0 | + | :コマンド|dd 0x78, 0x82, slot0, slot1, 0,0,0 |
- | 機能(slot1の時間基点)-(slot0の時間基点) の値を取得します。 | + | :機能|(slot1の時間基点)-(slot0の時間基点) の値を取得します。 |
- | 解説最後の12バイトはパラメータではなくバッファです。ここに | + | :解説|最後の12バイトはパラメータではなくバッファです。ここに |
dd t0,t1,t2 | dd t0,t1,t2 | ||
といういつもの形式で差が書き込まれます。形式について詳しくは[[シグナル待機コマンド]]を見てください。 | といういつもの形式で差が書き込まれます。形式について詳しくは[[シグナル待機コマンド]]を見てください。 | ||
Line 1172: | Line 1022: | ||
---- | ---- | ||
- | **[[0x007c.圧縮データ伸長]] | + | **0x007c.圧縮データ伸長 |
- | コマンドdd 0x7c | + | :コマンド|dd 0x7c |
- | 解説伸長コマンドのヘッダです。後にサブコマンドを続けて書くようになっています。 | + | :解説|伸長コマンドのヘッダです。後にサブコマンドを続けて書くようになっています。 |
---- | ---- | ||
- | **[[0x007c.0.サブコマンド終了]] | + | **0x007c.0.サブコマンド終了 |
- | コマンドdd 0 | + | :コマンド|dd 0 |
- | 解説サブコマンドの終端です。何もしないでユーザプログラムに復帰させる場合は | + | :解説|サブコマンドの終端です。何もしないでユーザプログラムに復帰させる場合は |
dd 0x7c /* 伸長コマンド開始 */ | dd 0x7c /* 伸長コマンド開始 */ | ||
dd 0x00 /* サブコマンド終了 */ | dd 0x00 /* サブコマンド終了 */ | ||
Line 1197: | Line 1047: | ||
---- | ---- | ||
- | **[[0x007c.-7.書き込み先指定]] | + | **0x007c.-7.書き込み先指定 |
- | コマンドdd -7, offset | + | :コマンド|dd -7, offset |
- | 機能書き込み先のセグメントオフセットを指定します | + | :機能|書き込み先のセグメントオフセットを指定します |
(セレクタはES固定です)。デフォルトはAPIコール時のEDIです。 | (セレクタはES固定です)。デフォルトはAPIコール時のEDIです。 | ||
---- | ---- | ||
- | **[[0x007c.-0x7f.l2d3データ伸長]] | + | **0x007c.-0x7f.l2d3データ伸長 |
- | コマンドdd -0x7f, length, offset, selector | + | :コマンド|dd -0x7f, length, offset, selector |
- | 機能selector:offsetにあるl2d3データを伸長し, | + | :機能|selector:offsetにあるl2d3データを伸長し, |
lengthバイト書き込みます。終了後, 伸長データの終端が次の書き込み先になります。 | lengthバイト書き込みます。終了後, 伸長データの終端が次の書き込み先になります。 | ||
---- | ---- | ||
- | **[[0x007c.-0x7e.l2d3データ伸長]] | + | **0x007c.-0x7e.l2d3データ伸長 |
- | コマンドdd -0x7e, length, offset, selector | + | :コマンド|dd -0x7e, length, offset, selector |
- | 機能selector:offsetにあるtek0データを伸長し, | + | :機能|selector:offsetにあるtek0データを伸長し, |
lengthバイト書き込みます。終了後, 伸長データの終端が次の書き込み先になります。 | lengthバイト書き込みます。終了後, 伸長データの終端が次の書き込み先になります。 | ||
---- | ---- | ||
- | **[[0x0080.0.サウンドトラックオープン]] | + | **0x0080.0.サウンドトラックオープン |
- | コマンドdd 0x80, slot, 0 | + | :コマンド|dd 0x80, slot, 0 |
guigui00.hvoid lib_opensoundtrack(slot); | guigui00.hvoid lib_opensoundtrack(slot); | ||
- | 機能サウンドトラック (ブザー) をオープンします。 | + | :機能|サウンドトラック (ブザー) をオープンします。 |
- | 引数 | + | :引数|slotサウンドトラックを割り当てるスロット番号です。 |
- | slotサウンドトラックを割り当てるスロット番号です。 | + | |
サウンドトラックはスロットを一つ使います。 | サウンドトラックはスロットを一つ使います。 | ||
---- | ---- | ||
- | **[[0x0084.サウンドトラッククローズ]] | + | **0x0084.サウンドトラッククローズ |
- | コマンドdd 0x84, slot | + | :コマンド|dd 0x84, slot |
- | 機能サウンドトラックを閉じ, スロットを開放します。 | + | :機能|サウンドトラックを閉じ, スロットを開放します。 |
- | 引数 | + | :引数|slotサウンドトラックのスロット番号です。 |
- | slotサウンドトラックのスロット番号です。 | + | |
---- | ---- | ||
- | **[[0x0088.なし]] | + | **0x0088.なし |
---- | ---- | ||
- | **[[0x008c.サウンドトラック制御]] | + | **0x008c.サウンドトラック制御 |
- | コマンドdd 0x8c, slot, cycle | + | :コマンド|dd 0x8c, slot, cycle |
guigui00.hvoid lib_controlfreq(slot, cycle); | guigui00.hvoid lib_controlfreq(slot, cycle); | ||
- | 機能ブザーを制御します。 | + | :機能|ブザーを制御します。 |
- | 引数 | + | :引数|slotサウンドトラックのスロット番号です。 |
- | slotサウンドトラックのスロット番号です。 | + | |
周期が cycle/0x100000000 の音が出ます。 | 周期が cycle/0x100000000 の音が出ます。 | ||
cycleを0にすると消音されます。周期は周波数の逆数です。 | cycleを0にすると消音されます。周期は周波数の逆数です。 | ||
---- | ---- | ||
- | **[[0x0090.なし]] | + | **0x0090.なし |
---- | ---- | ||
- | **[[0x0094.なし]] | + | **0x0094.なし |
---- | ---- | ||
- | **[[0x0098.なし]] | + | **0x0098.なし |
---- | ---- | ||
- | **[[0x009c.なし]] | + | **0x009c.なし |
---- | ---- | ||
- | **[[0x00a0.0x1c.モジュールハンドル初期化アプリ]] @music01d.ask | + | **0x00a0.0x1c.モジュールハンドル初期化アプリ]] @music01d.ask |
- | コマンドdd 0xa0, opt, slot | + | :コマンド|dd 0xa0, opt, slot |
guigui00.hvoid lib_initmodulehandle(opt, slot); | guigui00.hvoid lib_initmodulehandle(opt, slot); | ||
void lib_initmodulehandle0(opt, slot); | void lib_initmodulehandle0(opt, slot); | ||
- | 機能スロットをモジュールハンドルとして初期化し, | + | :機能|スロットをモジュールハンドルとして初期化し, |
アプリ専用ディレクトリの一つに移動させます。 | アプリ専用ディレクトリの一つに移動させます。 | ||
- | 解説アプリは起動時に一連の専用ディレクトリを与えられます。 | + | :解説|アプリは起動時に一連の専用ディレクトリを与えられます。 |
分類に沿ってディレクトリを使い分けてください。 | 分類に沿ってディレクトリを使い分けてください。 | ||
- | 引数 | + | :引数|opt |
- | opt | + | |
専用度 用途 備考 | 専用度 用途 備考 | ||
4タスク固有一時データ, スタック 非公式 | 4タスク固有一時データ, スタック 非公式 | ||
Line 1279: | Line 1125: | ||
---- | ---- | ||
- | **[[0x00a0.0xe0.モジュールハンドル初期化シェル]] @introc/tviewc00.c | + | **0x00a0.0xe0.モジュールハンドル初期化シェル]] @introc/tviewc00.c |
- | コマンドdd 0xa0,0xe0,slot,28,offset,selector | + | :コマンド|dd 0xa0,0xe0,slot,28,offset,selector |
guigui00.hvoid lib_initmodulehandle1(int slot, int num, int sig); /* サブコマンドを含む */ | guigui00.hvoid lib_initmodulehandle1(int slot, int num, int sig); /* サブコマンドを含む */ | ||
- | 機能スロットをモジュールハンドルとして初期化し, | + | :機能|スロットをモジュールハンドルとして初期化し, |
どこに移動させるかはシェルに任せます。大抵の場合, シェルは人間の指示を仰ぎます。 | どこに移動させるかはシェルに任せます。大抵の場合, シェルは人間の指示を仰ぎます。 | ||
アプリ専用ではないファイルにアクセスするにはこのコマンドでシェルに (人間に) | アプリ専用ではないファイルにアクセスするにはこのコマンドでシェルに (人間に) | ||
Line 1288: | Line 1134: | ||
複数の外部モジュールにアクセスしたければ, | 複数の外部モジュールにアクセスしたければ, | ||
それらのモジュールを収めたディレクトリを渡すよう説明書で指示することになります。 | それらのモジュールを収めたディレクトリを渡すよう説明書で指示することになります。 | ||
- | 引数 | + | :引数|selector:offsetサブコマンドのポインタです。 |
- | selector:offsetサブコマンドのポインタです。 | + | |
このコマンドは手抜きにより完了するまで再実行できません。 | このコマンドは手抜きにより完了するまで再実行できません。 | ||
---- | ---- | ||
- | **[[0x00a0.-0xff.モジュールハンドル初期化シェルのサブコマンド]] | + | **0x00a0.-0xff.モジュールハンドル初期化シェルのサブコマンド |
- | コマンドdd -0xff, num, -0xfe,2,0x7f000001, signal, 0 | + | :コマンド|dd -0xff, num, -0xfe,2,0x7f000001, signal, 0 |
- | 引数 | + | :引数|num番号です。コマンドラインからの操作等を可能にするため, |
- | num番号です。コマンドラインからの操作等を可能にするため, | + | |
ファイルごとに別々の番号を振ってください。 | ファイルごとに別々の番号を振ってください。 | ||
signal完了通知用シグナルの番号です。これがそのまま返ってきたら成功で, | signal完了通知用シグナルの番号です。これがそのまま返ってきたら成功で, | ||
Line 1305: | Line 1149: | ||
---- | ---- | ||
- | **[[0x00a4.なし]] | + | **0x00a4.なし |
---- | ---- | ||
- | **[[0x00a8.モジュールハンドル複写 (未詳)]] | + | **0x00a8.モジュールハンドル複写 (未詳) |
- | コマンドdd 0xa8,opt,destslot,srcslot | + | :コマンド|dd 0xa8,opt,destslot,srcslot |
- | 機能スロットsrcslotのモジュールハンドルをスロットdestslotに複写します。 | + | :機能|スロットsrcslotのモジュールハンドルをスロットdestslotに複写します。 |
一つのモジュールの複数の部分を別々にマッピングしたい場合はこのコマンドを使えということのようです。 | 一つのモジュールの複数の部分を別々にマッピングしたい場合はこのコマンドを使えということのようです。 | ||
適当なサンプルがありませんし, たぶん機能そのものがまだありません (あるのか?)。 | 適当なサンプルがありませんし, たぶん機能そのものがまだありません (あるのか?)。 | ||
Line 1317: | Line 1161: | ||
---- | ---- | ||
- | **[[0x00ac.モジュールハンドル移動8.3]] @go9/drv_osa/osamain.c | + | **0x00ac.モジュールハンドル移動8.3]] @go9/drv_osa/osamain.c |
- | コマンドdd 0xac,opt,slot,40,offset,selector | + | :コマンド|dd 0xac,opt,slot,40,offset,selector |
guigui00.hvoid lib_steppath0(int opt, int slot, const char *name, int sig); /* サブコマンドとセット */ | guigui00.hvoid lib_steppath0(int opt, int slot, const char *name, int sig); /* サブコマンドとセット */ | ||
- | 機能モジュールハンドルを指定のファイルまたはディレクトリに移動させます。 | + | :機能|モジュールハンドルを指定のファイルまたはディレクトリに移動させます。 |
この操作の前にハンドルがディレクトリに移動していなければなりません。 | この操作の前にハンドルがディレクトリに移動していなければなりません。 | ||
そのディレクトリの中を検索します。 | そのディレクトリの中を検索します。 | ||
使用回数に制限がありましたがdanielでは解消されたそうです。 | 使用回数に制限がありましたがdanielでは解消されたそうです。 | ||
- | 引数 | + | :引数|optビット1が強制ビットで, |
- | optビット1が強制ビットで, | + | |
これを1にしておくとモジュールが存在しない場合新しく作られます。 | これを1にしておくとモジュールが存在しない場合新しく作られます。 | ||
slotモジュールハンドルとして初期化したスロットです。 | slotモジュールハンドルとして初期化したスロットです。 | ||
Line 1332: | Line 1175: | ||
---- | ---- | ||
- | **[[0x00ac.-0xfd.モジュールハンドル移動8.3のサブコマンド]] @test016.c | + | **0x00ac.-0xfd.モジュールハンドル移動8.3のサブコマンド]] @test016.c |
- | コマンドdd -0xfd,12 | + | :コマンド|dd -0xfd,12 |
db name | db name | ||
dd -0xfe,2,0x7f000001,signal,0 | dd -0xfe,2,0x7f000001,signal,0 | ||
- | 引数 | + | :引数|nameファイルまたはディレクトリの名前です。隙間を0x20の空白で埋め, |
- | nameファイルまたはディレクトリの名前です。隙間を0x20の空白で埋め, | + | |
`.'も書いてascii大文字12文字でなければなりません。 | `.'も書いてascii大文字12文字でなければなりません。 | ||
例:"MYSRC01 .CC " 日本語や韓国語は使えません (未詳。test016.c>必ず大文字で, 12文字)。 | 例:"MYSRC01 .CC " 日本語や韓国語は使えません (未詳。test016.c>必ず大文字で, 12文字)。 | ||
Line 1345: | Line 1187: | ||
---- | ---- | ||
- | **[[0x00b0.モジュール作成 (未詳)]] | + | **0x00b0.モジュール作成 (未詳) |
- | コマンドdd 0xb0,opt,dirslot,mdlslot,tagdir,alocsize, tag,...,-1 | + | :コマンド|dd 0xb0,opt,dirslot,mdlslot,tagdir,alocsize, tag,...,-1 |
- | 機能適当なサンプルがありません。そもそも使えるのか不明。 | + | :機能|適当なサンプルがありません。そもそも使えるのか不明。 |
多分モジュールを作るのでしょうが, どんなタグが必要か, | 多分モジュールを作るのでしょうが, どんなタグが必要か, | ||
すでにモジュールがある場合はどうなるのか, などは不明です。 | すでにモジュールがある場合はどうなるのか, などは不明です。 | ||
Line 1354: | Line 1196: | ||
---- | ---- | ||
- | **[[0x00b4.なし]] | + | **0x00b4.なし |
---- | ---- | ||
- | **[[0x00b8.なし]] | + | **0x00b8.なし |
---- | ---- | ||
- | **[[0x00bc.なし]] | + | **0x00bc.なし |
---- | ---- | ||
- | **[[0x00c0.0.モジュールマッピング]] @introc/tviewc00.c | + | **0x00c0.0.モジュールマッピング]] @introc/tviewc00.c |
- | コマンドdd 0xc0,0,slot,len,offset,selector,(moffset)|(attr) | + | :コマンド|dd 0xc0,0,slot,len,offset,selector,(moffset)|(attr) |
guigui00.hvoid lib_mapmodule(0, slot, attr, len, offset, moffset); | guigui00.hvoid lib_mapmodule(0, slot, attr, len, offset, moffset); | ||
- | 機能モジュールの一部をメモリ空間のモジュールマッピング領域にマッピングします。 | + | :機能|モジュールの一部をメモリ空間のモジュールマッピング領域にマッピングします。 |
- | 引数 | + | :引数|slotモジュールハンドルのスロットです。 |
- | slotモジュールハンドルのスロットです。 | + | |
一つのハンドルで複数箇所にマッピングしてはいけません。 | 一つのハンドルで複数箇所にマッピングしてはいけません。 | ||
lenマッピングする最大の長さです。0は許されません | lenマッピングする最大の長さです。0は許されません | ||
Line 1386: | Line 1227: | ||
---- | ---- | ||
- | **[[0x00c4.モジュールマッピング解除 (未詳)]] @beditc00.c | + | **0x00c4.モジュールマッピング解除 (未詳)]] @beditc00.c |
- | コマンドdd 0xc4,0,len,offset,selector | + | :コマンド|dd 0xc4,0,len,offset,selector |
guigui00.hvoid lib_unmapmodule(0, size, addr); | guigui00.hvoid lib_unmapmodule(0, size, addr); | ||
- | 機能マッピングを解除し, 再マッピングやリサイズできるようにします。 | + | :機能|マッピングを解除し, 再マッピングやリサイズできるようにします。 |
- | 引数 | + | :引数|selector:offset解除する領域の先頭ポインタです。 |
- | selector:offset解除する領域の先頭ポインタです。 | + | |
len解除する範囲の長さです。 | len解除する範囲の長さです。 | ||
Line 1397: | Line 1237: | ||
---- | ---- | ||
- | **[[0x00c8.-0xfe.モジュール種別取得 (未詳)]] | + | **0x00c8.-0xfe.モジュール種別取得 (未詳) |
- | コマンドdd 0xc8,-0xfe,slot,8,offset,selector | + | :コマンド|dd 0xc8,-0xfe,slot,8,offset,selector |
- | 機能適当なサンプルがありません。 | + | :機能|適当なサンプルがありません。 |
- | 引数 | + | :引数|slotモジュールハンドルとして初期化したスロットでしょう。 |
- | slotモジュールハンドルとして初期化したスロットでしょう。 | + | |
selector:offset8バイトのバッファのポインタでしょう。 | selector:offset8バイトのバッファのポインタでしょう。 | ||
---- | ---- | ||
- | **[[0x00c8.-0xfd.モジュールサイズ取得 (未詳)]] @introc/tviewc00.c | + | **0x00c8.-0xfd.モジュールサイズ取得 (未詳)]] @introc/tviewc00.c |
- | コマンドdd 0xc8,-0xfd,slot,16,offset,selector | + | :コマンド|dd 0xc8,-0xfd,slot,16,offset,selector |
guigui00.hconst int lib_readmodulesize(int slot); | guigui00.hconst int lib_readmodulesize(int slot); | ||
- | 機能モジュールの大きさを取得します。 | + | :機能|モジュールの大きさを取得します。 |
- | 引数 | + | :引数|slotモジュールハンドルとして初期化したスロットです。 |
- | slotモジュールハンドルとして初期化したスロットです。 | + | |
selector:offsetバッファのポインタです。16バイト使います。 | selector:offsetバッファのポインタです。16バイト使います。 | ||
実際には先頭4バイトがモジュールの大きさで, | 実際には先頭4バイトがモジュールの大きさで, | ||
Line 1418: | Line 1256: | ||
---- | ---- | ||
- | **[[0x00cc.なし]] | + | **0x00cc.なし |
---- | ---- | ||
- | **[[0x00d0.-0x100.モジュールタグリスト (未詳)]] | + | **0x00d0.-0x100.モジュールタグリスト (未詳) |
- | コマンドdd 0xd0,-0x100,slot,buflen,ofs | + | :コマンド|dd 0xd0,-0x100,slot,buflen,ofs |
- | 機能適当なサンプルがありません。 | + | :機能|適当なサンプルがありません。 |
モジュールの名前が取得できるらしい。だまされることもあるのだろう。 | モジュールの名前が取得できるらしい。だまされることもあるのだろう。 | ||
---- | ---- | ||
- | **[[0x00d4.なし]] | + | **0x00d4.なし |
---- | ---- | ||
- | **[[0x00d8.なし]] | + | **0x00d8.なし |
---- | ---- | ||
- | **[[0x00dc.なし]] | + | **0x00dc.なし |
---- | ---- | ||
- | **[[0x00e0.1.フォント定義]] @introc/fnttstc0.c | + | **0x00e0.1.フォント定義]] @introc/fnttstc0.c |
- | コマンドdd 0xe0,1,slot,num,offset,selector | + | :コマンド|dd 0xe0,1,slot,num,offset,selector |
guigui00.hvoid lib_loadfont(1, slot, num, offset); | guigui00.hvoid lib_loadfont(1, slot, num, offset); | ||
- | 機能ユーザ定義フォントをスロットに割り当てます。 | + | :機能|ユーザ定義フォントをスロットに割り当てます。 |
- | 解説フォントというのは字形 (gryph) の集合です | + | :解説|フォントというのは字形 (gryph) の集合です |
(個々の字形はフォントの一部であってフォントそのものではない。 | (個々の字形はフォントの一部であってフォントそのものではない。 | ||
等幅フォント可変幅フォントという言葉の意味を考えれば当然でしょう)。 | 等幅フォント可変幅フォントという言葉の意味を考えれば当然でしょう)。 | ||
OSASKにおいては, フォントを定義するのにスロットを一つ, | OSASKにおいては, フォントを定義するのにスロットを一つ, | ||
フォントの一部をフォントセットにマッピングするのにまた一つ使います。 | フォントの一部をフォントセットにマッピングするのにまた一つ使います。 | ||
- | 引数 | + | :引数|slotフォントを割り当てるスロットです。 |
- | slotフォントを割り当てるスロットです。 | + | |
num割り当てる半角フォントの数です。 | num割り当てる半角フォントの数です。 | ||
selector:offset実際のパターンのポインタです。 | selector:offset実際のパターンのポインタです。 | ||
Line 1450: | Line 1287: | ||
ビット配列は 0x43 が □■□□□□■■ と画面に映るようになっています。 | ビット配列は 0x43 が □■□□□□■■ と画面に映るようになっています。 | ||
上位ビットが左になり, カラーフォントやグラフィックボックスとは逆です。 | 上位ビットが左になり, カラーフォントやグラフィックボックスとは逆です。 | ||
- | コマンド終了後はその領域をどうしようと構いません。 | + | :コマンド|終了後はその領域をどうしようと構いません。 |
---- | ---- | ||
- | **[[0x00e0.2.半高フォント定義]] @introc/hlftstc0.c | + | **0x00e0.2.半高フォント定義]] @introc/hlftstc0.c |
- | コマンドdd 0xe0,2,slot,num,offset,selector | + | :コマンド|dd 0xe0,2,slot,num,offset,selector |
guigui00.hvoid lib_loadfont(2, slot, num, offset); | guigui00.hvoid lib_loadfont(2, slot, num, offset); | ||
- | 機能高さが半分, すなわち8x8のフォントを定義します。 | + | :機能|高さが半分, すなわち8x8のフォントを定義します。 |
一つのパターンが8x8=8バイトで構成されるほかは上と同じです。 | 一つのパターンが8x8=8バイトで構成されるほかは上と同じです。 | ||
---- | ---- | ||
- | **[[0x00e0.4.半高カラーフォント定義]] @introc/hlfcolc0.c | + | **0x00e0.4.半高カラーフォント定義]] @introc/hlfcolc0.c |
- | コマンドdd 0xe0,4,slot,num,offset,selector | + | :コマンド|dd 0xe0,4,slot,num,offset,selector |
guigui00.hvoid lib_loadfont(4, slot, num, offset); | guigui00.hvoid lib_loadfont(4, slot, num, offset); | ||
- | 機能高さが半分, すなわち8x8のカラーフォントを定義します。 | + | :機能|高さが半分, すなわち8x8のカラーフォントを定義します。 |
一つのパターンは8x8 x16色=32バイトで構成されます。その他は上と同じです。 | 一つのパターンは8x8 x16色=32バイトで構成されます。その他は上と同じです。 | ||
Line 1473: | Line 1310: | ||
---- | ---- | ||
- | **[[0x00e0.0x80000001.システムANKフォント読み込み]] @introc/fnttstc0.c | + | **0x00e0.0x80000001.システムANKフォント読み込み]] @introc/fnttstc0.c |
- | コマンドdd 0xe0,0x80000001,slot | + | :コマンド|dd 0xe0,0x80000001,slot |
guigui00.hvoid lib_loadfont0(0x80000001, slot); | guigui00.hvoid lib_loadfont0(0x80000001, slot); | ||
- | 機能slotにシステム定義のANKフォントを割り当てます。 | + | :機能|slotにシステム定義のANKフォントを割り当てます。 |
現在, IBMターミナルフォントに似たフォントが入っており, | 現在, IBMターミナルフォントに似たフォントが入っており, | ||
ANKのK (カナ) は影も形もありません。 | ANKのK (カナ) は影も形もありません。 | ||
Line 1482: | Line 1319: | ||
---- | ---- | ||
- | **[[0x00e0.0x80000002.システム半高ANKフォント読み込み]] @introc/fnttstc0.c | + | **0x00e0.0x80000002.システム半高ANKフォント読み込み]] @introc/fnttstc0.c |
- | コマンドdd 0xe0,0x80000002,slot | + | :コマンド|dd 0xe0,0x80000002,slot |
guigui00.hvoid lib_loadfont0(0x80000002, slot); | guigui00.hvoid lib_loadfont0(0x80000002, slot); | ||
- | 機能slotにシステム定義の半高ANKフォントを割り当てます。 | + | :機能|slotにシステム定義の半高ANKフォントを割り当てます。 |
これは高さが半分の縮小フォントではありません。各字形が上下に半分づつ定義されており, | これは高さが半分の縮小フォントではありません。各字形が上下に半分づつ定義されており, | ||
例えば, 0x64は'2'の上半分で0x65は'2'の下半分です | 例えば, 0x64は'2'の上半分で0x65は'2'の下半分です | ||
Line 1492: | Line 1329: | ||
---- | ---- | ||
- | **[[0x00e0.0xc0000011.システムJIS+MSフォント読み込み]] | + | **0x00e0.0xc0000011.システムJIS+MSフォント読み込み |
- | コマンドdd 0xe0,0xc0000011,slot,1,sig | + | :コマンド|dd 0xe0,0xc0000011,slot,1,sig |
- | 解説廃止されました。init.ask@OSASK V2.1,V2.2にて死亡確認。 | + | :解説|廃止されました。init.ask@OSASK V2.1,V2.2にて死亡確認。 |
---- | ---- | ||
- | **[[0x00e0.0xc0ffffff.OSASK自動拡張フォント読み込み]] @tviewc05.c | + | **0x00e0.0xc0ffffff.OSASK自動拡張フォント読み込み]] @tviewc05.c |
- | コマンドdd 0xe0,0xc0ffffff,0,1,signal | + | :コマンド|dd 0xe0,0xc0ffffff,0,1,signal |
guigui00.hvoid lib_loadfont1(0xc0ffffff, 0, sig); /* マクロはslotと書いてあるが予約 */ | guigui00.hvoid lib_loadfont1(0xc0ffffff, 0, sig); /* マクロはslotと書いてあるが予約 */ | ||
- | 機能OSASK自動拡張フォントをシステムスロット0x21に割り当てます。 | + | :機能|OSASK自動拡張フォントをシステムスロット0x21に割り当てます。 |
割り当てが成功するとsignalに指定したシグナルが返ってきます。 | 割り当てが成功するとsignalに指定したシグナルが返ってきます。 | ||
Line 1537: | Line 1374: | ||
---- | ---- | ||
- | **[[0x00e4.0.フォント開放 (未詳)]] | + | **0x00e4.0.フォント開放 (未詳) |
- | コマンドdd 0xe4,0,slot | + | :コマンド|dd 0xe4,0,slot |
- | 解説適当なサンプルがありません。 | + | :解説|適当なサンプルがありません。 |
フォントを割り当てたslotを開放? | フォントを割り当てたslotを開放? | ||
そのフォントを使ったフォントセットは多分使えなくなるのでしょう。 | そのフォントを使ったフォントセットは多分使えなくなるのでしょう。 | ||
Line 1545: | Line 1382: | ||
---- | ---- | ||
- | **[[0x00e8.フォントセット定義]] | + | **0x00e8.フォントセット定義 |
- | コマンドdd 0xe8,0,slotd,slots,num,src,dest | + | :コマンド|dd 0xe8,0,slotd,slots,num,src,dest |
guigui00.hvoid lib_makecharset(0, slotd, slots, num, src, dest); | guigui00.hvoid lib_makecharset(0, slotd, slots, num, src, dest); | ||
- | 機能フォントが持つ字形を32ビットの半角コード空間にマッピングし, | + | :機能|フォントが持つ字形を32ビットの半角コード空間にマッピングし, |
フォントセットとして実際に使える状態にします。 | フォントセットとして実際に使える状態にします。 | ||
雰囲気としては, フォント=モジュール, フォントセット定義=マッピング, というところでしょうか。 | 雰囲気としては, フォント=モジュール, フォントセット定義=マッピング, というところでしょうか。 | ||
- | 引数 | + | :引数|slotdフォントセットとなるスロットです。一度割り当てるごとにスロットを一つ使います。 |
- | slotdフォントセットとなるスロットです。一度割り当てるごとにスロットを一つ使います。 | + | |
例外として, OSASK自動拡張フォントを割り当てると勝手にスロットを四つ使います。 | 例外として, OSASK自動拡張フォントを割り当てると勝手にスロットを四つ使います。 | ||
またOSASK自動拡張フォントを使うときは, num,src,dest に 0x1000000,0,0 | またOSASK自動拡張フォントを使うときは, num,src,dest に 0x1000000,0,0 | ||
Line 1564: | Line 1400: | ||
---- | ---- | ||
- | **[[0x00e8.0.フォントセット終端]] | + | **0x00e8.0.フォントセット終端 |
- | コマンドdd 0xe8,0,slot,0,0,0,0 | + | :コマンド|dd 0xe8,0,slot,0,0,0,0 |
guigui00.hvoid lib_makecharset(0, slot, 0, 0, 0, 0); | guigui00.hvoid lib_makecharset(0, slot, 0, 0, 0, 0); | ||
- | 機能フォントセットの終端を定義します。これを定義するとフォントセットが確定します。 | + | :機能|フォントセットの終端を定義します。これを定義するとフォントセットが確定します。 |
slotにはフォントセットとして使う最後のスロットの次のスロットを指定します。 | slotにはフォントセットとして使う最後のスロットの次のスロットを指定します。 | ||
Line 1573: | Line 1409: | ||
---- | ---- | ||
- | **[[0x00ec.1.シフトJISデコード]] @test024.c | + | **0x00ec.1.シフトJISデコード]] @test024.c |
- | コマンドdd 0xec,1,dlen,srcofs,srcsel,destofs,destsel, 0x400,0x4e00 | + | :コマンド|dd 0xec,1,dlen,srcofs,srcsel,destofs,destsel, 0x400,0x4e00 |
guigui00.hlib_wsjis2gg00jpn0(dlen, srcofs, destofs, 0x400, 0x4e00); | guigui00.hlib_wsjis2gg00jpn0(dlen, srcofs, destofs, 0x400, 0x4e00); | ||
- | 機能シフトJISで書かれた文字列をOSASK自動拡張フォント向けにデコードします。 | + | :機能|シフトJISで書かれた文字列をOSASK自動拡張フォント向けにデコードします。 |
- | 引数 | + | :引数|dlen変換結果の長さで, 単位はダブルワードです。 |
- | dlen変換結果の長さで, 単位はダブルワードです。 | + | |
srcsel:srcofsシフトJISの文字列のポインタです。 | srcsel:srcofsシフトJISの文字列のポインタです。 | ||
destsel:destofs変換結果を入れるバッファのポインタです。 | destsel:destofs変換結果を入れるバッファのポインタです。 | ||
Line 1588: | Line 1423: | ||
---- | ---- | ||
- | **[[0x00ec.2.EUCデコード文字集合2]] | + | **0x00ec.2.EUCデコード文字集合2 |
- | コマンドdd 0xec,2,dlen,srcofs,srcsel,destofs,destsel,b0,b1 | + | :コマンド|dd 0xec,2,dlen,srcofs,srcsel,destofs,destsel,b0,b1 |
guigui00.hvoid lib_seuc2gg00(dlen, srcofs, destofs, b0, b1); | guigui00.hvoid lib_seuc2gg00(dlen, srcofs, destofs, b0, b1); | ||
- | 機能シングルシフトを使わない (日本語で言えば, いわゆる半角カナや | + | :機能|シングルシフトを使わない (日本語で言えば, いわゆる半角カナや |
JIS補助漢字あるいは2000JIS第二面を使わない) EUC文字列を, | JIS補助漢字あるいは2000JIS第二面を使わない) EUC文字列を, | ||
OSASK自動拡張フォント向けにデコードします。 | OSASK自動拡張フォント向けにデコードします。 | ||
- | 引数 | + | :引数|b0C0:0x20:G0:0x7f:C1:0xa0 (要するに0x00から0xa0) |
- | b0C0:0x20:G0:0x7f:C1:0xa0 (要するに0x00から0xa0) | + | |
の範囲の一バイト文字用半角フォントの位置です。0x9700がasciiのフォントで, 0x4e00が JIS X 0201 | の範囲の一バイト文字用半角フォントの位置です。0x9700がasciiのフォントで, 0x4e00が JIS X 0201 | ||
のフォントです。SJISと同じく, 94文字集合ではなく一バイト集合として扱われます。 | のフォントです。SJISと同じく, 94文字集合ではなく一バイト集合として扱われます。 | ||
Line 1603: | Line 1437: | ||
---- | ---- | ||
- | **[[0x00ec.3.EUCデコード文字集合4]] | + | **0x00ec.3.EUCデコード文字集合4 |
- | コマンドdd 0xec,opt,dlen,srcofs,srcsel,destofs,destsel,b0,b1,b2,b3 | + | :コマンド|dd 0xec,opt,dlen,srcofs,srcsel,destofs,destsel,b0,b1,b2,b3 |
- | 機能シングルシフトもデコードできるEUCデコーダです。 | + | :機能|シングルシフトもデコードできるEUCデコーダです。 |
- | 引数 | + | :引数|optG0からG3が何文字集合であるか指定します。 |
- | optG0からG3が何文字集合であるか指定します。 | + | |
bit0-15 3 | bit0-15 3 | ||
Line 1628: | Line 1461: | ||
---- | ---- | ||
- | **[[0x00f0.セグメント作成 (未詳)]] @music01d.ask | + | **0x00f0.セグメント作成 (未詳)]] @music01d.ask |
- | コマンドdd 0xf0,opt,sel,ar,limit,ofs,bsel | + | :コマンド|dd 0xf0,opt,sel,ar,limit,ofs,bsel |
- | 機能適当な解説がありません。ソースを斜めに読んで推測しますが, LDTにエントリを追加するだけです。マッピングしたDLLに実行可能属性を付けるために使われます。 | + | :機能|適当な解説がありません。ソースを斜めに読んで推測しますが, LDTにエントリを追加するだけです。マッピングしたDLLに実行可能属性を付けるために使われます。 |
- | 引数 | + | :引数|sel作るセグメントのセレクタです。bit0-2が予約されていて, |
- | sel作るセグメントのセレクタです。bit0-2が予約されていて, | + | |
0にしないといけません。例にならって0x200以降を使うべきでしょう。 | 0にしないといけません。例にならって0x200以降を使うべきでしょう。 | ||
実際に実行/アクセスするときには7を足してセレクタとします (LDTかつリング3なので)。 | 実際に実行/アクセスするときには7を足してセレクタとします (LDTかつリング3なので)。 | ||
Line 1645: | Line 1477: | ||
---- | ---- | ||
- | **[[0x00f4.なし]] | + | **0x00f4.なし |
---- | ---- | ||
- | **[[0x00f8.なし]] | + | **0x00f8.なし |
---- | ---- | ||
- | **[[0x00fc.なし]] | + | **0x00fc.なし |
---- | ---- | ||
- | **[[0x0100.なし]] | + | **0x0100.なし |
---- | ---- | ||
- | **[[0x0104.なし]] | + | **0x0104.なし |
---- | ---- | ||
- | **[[0x0108.0x80c0.グラフィックボックス線描複数]] @test015.c | + | **0x0108.0x80c0.グラフィックボックス線描複数]] @test015.c |
- | コマンドdd 0x108,opt,gbox,x,y,width,height,num,offset,selector | + | :コマンド|dd 0x108,opt,gbox,x,y,width,height,num,offset,selector |
guigui00.hvoid lib_drawlines0(opt, gbox, x,y, width,height, num, offset); | guigui00.hvoid lib_drawlines0(opt, gbox, x,y, width,height, num, offset); | ||
- | 機能グラフィックボックスとそのバッファに線を引きます。 | + | :機能|グラフィックボックスとそのバッファに線を引きます。 |
長方形機能は予定されていません。 | 長方形機能は予定されていません。 | ||
- | 引数 | + | :引数|optビットごとに以下の機能を持ちます。 |
- | optビットごとに以下の機能を持ちます。 | + | |
bit6,700pset (他は遅くなる可能性がある) | bit6,700pset (他は遅くなる可能性がある) | ||
Line 1683: | Line 1514: | ||
---- | ---- | ||
- | **[[0x010c.0.線データ変換]] @test015.c | + | **0x010c.0.線データ変換]] @test015.c |
- | コマンドdd 0x10c,0,num,srcofs,srcsel,destofs,destsel | + | :コマンド|dd 0x10c,0,num,srcofs,srcsel,destofs,destsel |
guigui00.hvoid lib_convlines(0, num, srcofs, destofs); | guigui00.hvoid lib_convlines(0, num, srcofs, destofs); | ||
- | 機能一般的な (と思われる) 形式の線データを複数線描が要求する内部形式 | + | :機能|一般的な (と思われる) 形式の線データを複数線描が要求する内部形式 |
(点々形式) に変換します。 | (点々形式) に変換します。 | ||
- | 引数 | + | :引数|num線の数です。 |
- | num線の数です。 | + | |
srcsel:srcofs元のデータのポインタです。 | srcsel:srcofs元のデータのポインタです。 | ||
destsel:destofs変換後のデータのポインタです。 | destsel:destofs変換後のデータのポインタです。 | ||
Line 1710: | Line 1540: | ||
---- | ---- | ||
- | **[[0x0110.0x80c0.線描複数]] | + | **0x0110.0x80c0.線描複数 |
- | コマンドdd 0x110,opt,window,x,y,width,height,num,offset,selector | + | :コマンド|dd 0x110,opt,window,x,y,width,height,num,offset,selector |
guigui00.hvoid lib_drawlines1(opt, window, x,y, width,height, num, offset); | guigui00.hvoid lib_drawlines1(opt, window, x,y, width,height, num, offset); | ||
- | 機能線を複数描画する低級コマンドです。再描画は自分でする必要があります。 | + | :機能|線を複数描画する低級コマンドです。再描画は自分でする必要があります。 |
- | 引数 | + | :引数|opt描画属性を指定します。 |
- | opt描画属性を指定します。 | + | |
bit6,700pset | bit6,700pset | ||
Line 1732: | Line 1561: | ||
---- | ---- | ||
- | **[[0x0114.0.グラフィックボックス文字列描画]] | + | **0x0114.0.グラフィックボックス文字列描画 |
- | コマンドdd 0x114, opt, x, y, gbox, col, bcol, fontset, STRING | + | :コマンド|dd 0x114, opt, x, y, gbox, col, bcol, fontset, STRING |
- | 機能グラフィックボックスに文字列を描画します。 | + | :機能|グラフィックボックスに文字列を描画します。 |
フォントパターンの取得にも使えます。 | フォントパターンの取得にも使えます。 | ||
- | 引数 | + | :引数|optビット毎に意味がありますが, 未実装が多いようです。 |
- | optビット毎に意味がありますが, 未実装が多いようです。 | + | |
bit0-7 0x00高さ16ピクセルのモノクロフォントで,psetです。 | bit0-7 0x00高さ16ピクセルのモノクロフォントで,psetです。 | ||
Line 1768: | Line 1596: | ||
---- | ---- | ||
- | **[[0x0114.0xff.メモリ文字列描画]] | + | **0x0114.0xff.メモリ文字列描画 |
- | コマンドdd 0x114, opt, offset,selector, (width機能上のコマンドとほぼ同じですが, | + | :コマンド|dd 0x114, opt, offset,selector, (width機能上のコマンドとほぼ同じですが, |
グラフィックボックスとは関係ないバッファに書き込めます。 | グラフィックボックスとは関係ないバッファに書き込めます。 | ||
- | 引数 | + | :引数|opt上とほぼ同じですが, 当然bit15は無効になるようです。 |
- | opt上とほぼ同じですが, 当然bit15は無効になるようです。 | + | |
selector:offset書き込むバッファのポインタです。 | selector:offset書き込むバッファのポインタです。 | ||
widthバッファの幅です。負の値も許されます。 | widthバッファの幅です。負の値も許されます。 | ||
Line 1778: | Line 1605: | ||
---- | ---- | ||
- | **[[0x0118.0.乱数取得]] @test029.c | + | **0x0118.0.乱数取得]] @test029.c |
- | コマンドdd 0x118,0, 0 | + | :コマンド|dd 0x118,0, 0 |
guigui00.hint lib_getrandseed(); | guigui00.hint lib_getrandseed(); | ||
- | 機能乱数を取得する。これを種として自分で乱数列を作るとよい。 | + | :機能|乱数を取得する。これを種として自分で乱数列を作るとよい。 |
第三パラメータはパラメータではなく, バッファです。ここに32ビット乱数が書き込まれます。 | 第三パラメータはパラメータではなく, バッファです。ここに32ビット乱数が書き込まれます。 | ||
---- | ---- | ||
- | **[[0x011c.なし]] | + | **0x011c.なし |
---- | ---- | ||
- | **[[0x0120.0.モジュールサイズ変更]] @resizer0.c | + | **0x0120.0.モジュールサイズ変更]] @resizer0.c |
- | コマンドdd 0x120,0, slot, size, 1, signal | + | :コマンド|dd 0x120,0, slot, size, 1, signal |
guigui00.hvoid lib_resizemodule(0, slot, size, sig); | guigui00.hvoid lib_resizemodule(0, slot, size, sig); | ||
- | 機能モジュールの大きさを変えます。 | + | :機能|モジュールの大きさを変えます。 |
対象のモジュールを事前にアンマッピングしておかなければなりません。 | 対象のモジュールを事前にアンマッピングしておかなければなりません。 | ||
- | 引数 | + | :引数|slotモジュールハンドルのスロットです。 |
- | slotモジュールハンドルのスロットです。 | + | |
size変更後の大きさです。 | size変更後の大きさです。 | ||
モジュールの最後の部分に追加・削除することによって大きさが変わります。 | モジュールの最後の部分に追加・削除することによって大きさが変わります。 | ||
Line 1806: | Line 1632: | ||
*付録 | *付録 | ||
- | **[[APIの実行を追い掛けてみよう]] | + | **APIの実行を追い掛けてみよう |
アプリを作っていて, 「絶対OSASKのバグだ! 俺のせいじゃない!」と思ったら, | アプリを作っていて, 「絶対OSASKのバグだ! 俺のせいじゃない!」と思ったら, | ||
Line 1824: | Line 1650: | ||
0x7f000000 + N 以降の N 個のdwordが winman0 が実際に受けとるシグナルになります。 | 0x7f000000 + N 以降の N 個のdwordが winman0 が実際に受けとるシグナルになります。 | ||
一例として | 一例として | ||
- | + | 0x0128, 0x3240 /* winman0 */ + 6, 0x7f000005, 0x0048, EAX, [DS:0x000c], cmd[0], cmd[4] | |
- | 0x0128, 0x3240 /* winman0 */ + 6, 0x7f000005, 0x0048, EAX, [DS:0x000c], cmd[0], cmd[4] | + | |
というのを取り上げると, 左から順に, tapiのコマンド, tapi用送信先+長さ, | というのを取り上げると, 左から順に, tapiのコマンド, tapi用送信先+長さ, | ||
pioneer用送信先 (ユーザアプリ) +長さ, winman0 が受け取るシグナル……, と読みます。 | pioneer用送信先 (ユーザアプリ) +長さ, winman0 が受け取るシグナル……, と読みます。 |
(This host) = http://osask.net