1: 2004-02-04 (水) 15:28:47 |
2: 2004-02-04 (水) 18:43:39 |
- | <html><head><title>Pioneer0 Command Reference</title></head><body><div> | + | '''作り始めたがかなり大変そう・・&br;html->wikiしてくれるプログラムはないかのぉ。''' |
- | <h1 align=center>pioneer0 ライブラリ コマンドリファレンス</h1> | + | |
- | <div align=center>Jenny5(OSASK v4.3)版<br>2004.01.30</div> | + | CENTER:''pioneer0 ライブラリ コマンドリファレンス'' |
- | <div align=center>編: I.Tak. <g240845@mail.ecc.u-tokyo.ac.jp><br>Under | + | CENTER:''Jenny5(OSASK v4.3)版'' |
- | terms of Kawaido License-01</div> | + | CENTER:''2004.01.30'' |
| + | CENTER:''編: I.Tak. <g240845@mail.ecc.u-tokyo.ac.jp>'' |
| + | CENTER:''Under terms of Kawaido License-01'' |
| | | |
| ---- | | ---- |
| *目次 | | *目次 |
| + | #contents |
| + | //-目次 |
| + | //-概要 |
| + | //-予備知識 |
| | | |
- | -目次 | + | //--i.ライブラリコールの使い方 |
- | -概要 | + | //--ii.slot |
- | -予備知識 | + | //--iii.セグメントセレクタ |
- | | + | //--iv.用語の違い (「ボックス」と「キャラクタセット, フォント」) |
- | --i.ライブラリコールの使い方 | + | //--v.アプリ起動時のレジスタ |
- | --ii.slot | + | //--vi.参照した資料 |
- | --iii.セグメントセレクタ | + | //--vii.セグメントオフセット |
- | --iv.用語の違い (「ボックス」と「キャラクタセット, フォント」) | + | |
- | --v.アプリ起動時のレジスタ | + | |
- | --vi.参照した資料 | + | |
- | --vii.セグメントオフセット | + | |
| | | |
| -リファレンス | | -リファレンス |
| -付録 | | -付録 |
| | | |
- | --<a href="#a0">APIの実行を追い掛けてみよう</a> | + | --[[APIの実行を追い掛けてみよう>#a0]] |
| | | |
| | | |
| ユーザはEBXに代入するだけです。コマンド列の終端はコマンド列終了コマンドで指示します。 | | ユーザはEBXに代入するだけです。コマンド列の終端はコマンド列終了コマンドで指示します。 |
| | | |
- | guigui00.hを使う場合, <code>lib_execcmd0</code> や <code>lib_execcmd1</code> | + | guigui00.hを使う場合, '''lib_execcmd0''' や '''lib_execcmd1''' |
| がこの処理を肩代りします。 | | がこの処理を肩代りします。 |
| | | |
| ***i.ii.Cで | | ***i.ii.Cで |
| 説明不要かも知れませんが。 | | 説明不要かも知れませんが。 |
- | static void* cmd[]={hoge,rage, ..., 0 /* eoc */};<br> | + | static void* cmd[]={hoge,rage, ..., 0 /* eoc */}; |
- | lib_execcmd(&cmd);<br> | + | lib_execcmd(&cmd); |
- | lib_execcmd0(hoge, rage, ..., 0 /* eoc */);<br> | + | 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 */); |
- | と書きます。配列を使う場合, 川合さんの例のように <code>void*[]</code> | + | と書きます。配列を使う場合, 川合さんの例のように '''void*[]''' |
- | としてコマンドを定義するのが楽です。<code>execcmd1</code>の一つ目の引数は <code>12+4*n</code> | + | としてコマンドを定義するのが楽です。'''execcmd1'''の一つ目の引数は '''12+4*n''' |
| となっており, コマンド列のn番目の数値を返り値にします (この場合, hogeがn=0の位置)。 | | となっており, コマンド列のn番目の数値を返り値にします (この場合, hogeがn=0の位置)。 |
| | | |
| | | |
| **iv.用語の違い (「ボックス」と「キャラクタセット, フォント」) | | **iv.用語の違い (「ボックス」と「キャラクタセット, フォント」) |
- | -テキストボックス, グラフィックボックスなどの<q>ボックス</q><br> | + | -テキストボックス, グラフィックボックスなどの''ボックス''&br; |
| 画面に表示される四角い領域のことであるとします。また, | | 画面に表示される四角い領域のことであるとします。また, |
| その情報を保持するメモリ領域はバッファと呼んでおきます。川合さんは区別していないようですが, | | その情報を保持するメモリ領域はバッファと呼んでおきます。川合さんは区別していないようですが, |
| 区別しないと書きにくいので区別します | | 区別しないと書きにくいので区別します |
| (しかし「シグナルボックス」はただのメモリ領域です。ああややこしい)。 | | (しかし「シグナルボックス」はただのメモリ領域です。ああややこしい)。 |
- | -キャラクタセット (文字集合) とフォント<br> | + | -キャラクタセット (文字集合) とフォント&br; |
| 川合さんは「フォントはグリフ一つ, フォントセットはグリフの集合, | | 川合さんは「フォントはグリフ一つ, フォントセットはグリフの集合, |
- | フォントセットの集合が文字集合」という<strong>ような</strong>使い方をしていますが, | + | フォントセットの集合が文字集合」という''ような''使い方をしていますが, |
| ここでは一般的な (と思われる) 用語にしています。なお, | | ここでは一般的な (と思われる) 用語にしています。なお, |
| 一般に, 文字集合は「扱う文字を規定し通し番号を振ったもの」とされています。 | | 一般に, 文字集合は「扱う文字を規定し通し番号を振ったもの」とされています。 |
| | | |
| **v.アプリ起動時のレジスタ | | **v.アプリ起動時のレジスタ |
- | eax=ecx=edx=ebx=esp=ebp=esi=edi=0<br> | + | eax=ecx=edx=ebx=esp=ebp=esi=edi=0 |
- | cs=7<br> | + | cs=7 |
- | ds=ss=es=fs=0xf<br> | + | ds=ss=es=fs=0xf |
- | gs=未定<br> | + | gs=未定 |
- | eip=0<br> | + | eip=0 |
| CF=PF=AF=ZF=SF=DF=OF=0 | | CF=PF=AF=ZF=SF=DF=OF=0 |
- | この値は保証されていて, 決め打ち可能です。<br> | + | この値は保証されていて, 決め打ち可能です。 |
- | 参考: <a href="http://www.afis.to/~mone/osask/osask_ml/200112/msg00166.html">[OSASK 2743] Re: ぐいぐいプログラミング質問</a><br> | + | 参考: [[Re: ぐいぐいプログラミング質問>ML:2743]] |
- | <a href="http://www.afis.to/~mone/osask/osask_ml/200201/msg00192.html">[OSASK 3035] エラー情報解説(1).</a> | + | //http://www.afis.to/~mone/osask/osask_ml/200112/msg00166.html |
| + | [[エラー情報解説(1).>ML:3035]] |
| + | //http://www.afis.to/~mone/osask/osask_ml/200201/msg00192.html |
| | | |
| **vi.参照した資料 | | **vi.参照した資料 |
| | | |
| *付録 | | *付録 |
- | **<a name=a0>APIの実行を追い掛けてみよう</a> | + | **&aname(a0){APIの実行を追い掛けてみよう}; |
| | | |
| アプリを作っていて, 「絶対OSASKのバグだ! 俺のせいじゃない!」と思ったら, | | アプリを作っていて, 「絶対OSASKのバグだ! 俺のせいじゃない!」と思ったら, |
| ソースを読んでみましょう。 | | ソースを読んでみましょう。 |
| | | |
- | <ol> | + | +まずユーザプログラムから far call されると, pioneer0.ask は初期化を始めます。 |
- | -まずユーザプログラムから far call されると, pioneer0.ask は初期化を始めます。 | + | |
| ソフト割り込みを禁止し, スロット 0x01f0 を使ってワークエリアのポインタを読みこみます。 | | ソフト割り込みを禁止し, スロット 0x01f0 を使ってワークエリアのポインタを読みこみます。 |
| 最初のコマンドが初期化コマンドだと, 読み込みは初期化コマンドの中でされます。 | | 最初のコマンドが初期化コマンドだと, 読み込みは初期化コマンドの中でされます。 |
- | -[ds:ebx] からコマンドを読みこみ, 適当に GUGUI統合 shell call をします。 | + | +[ds:ebx] からコマンドを読みこみ, 適当に GUGUI統合 shell call をします。 |
| 0x0017:0x00000000 への far call は init.ask に繋がります | | 0x0017:0x00000000 への far call は init.ask に繋がります |
| (コールゲートというやつですかね)。 | | (コールゲートというやつですかね)。 |
- | -init.ask の GUIGUI_shellcall に飛びこみます。ここでも [gs:ebp] | + | +init.ask の GUIGUI_shellcall に飛びこみます。ここでも [gs:ebp] |
| からコマンドを読みながら実行していきます。 | | からコマンドを読みながら実行していきます。 |
- | -tapi_sel への far call がよく出てきます。これは /* コマンドシグナル云々 */ | + | +tapi_sel への far call がよく出てきます。これは /* コマンドシグナル云々 */ |
| と書いてあったらまず間違いなく winman0 へのシグナル送信です。 | | と書いてあったらまず間違いなく winman0 へのシグナル送信です。 |
| そのコマンドの中に 0x7f000000 + N, hoge, rage, ... というくだりがあり, | | そのコマンドの中に 0x7f000000 + N, hoge, rage, ... というくだりがあり, |
| 0x7f000000 + N 以降の N 個のdwordが winman0 が実際に受けとるシグナルになります。 | | 0x7f000000 + N 以降の N 個のdwordが winman0 が実際に受けとるシグナルになります。 |
| 一例として | | 一例として |
- | <blockquote> | + | >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] | + | |
- | </blockquote> | + | |
| というのを取り上げると, 左から順に, tapiのコマンド, tapi用送信先+長さ, | | というのを取り上げると, 左から順に, tapiのコマンド, tapi用送信先+長さ, |
| pioneer用送信先 (ユーザアプリ) +長さ, winman0 が受け取るシグナル……, と読みます。 | | pioneer用送信先 (ユーザアプリ) +長さ, winman0 が受け取るシグナル……, と読みます。 |
- | -シグナルを送信したりしてコマンドが終わったらreturnします。以下マルチタスク。 | + | +シグナルを送信したりしてコマンドが終わったらreturnします。以下マルチタスク。 |
- | -winman0 の中では, シグナルを受信するループでほとんどの処理がされます。 | + | +winman0 の中では, シグナルを受信するループでほとんどの処理がされます。 |
| しかし別なシグナルを待たないといけない処理はジョブとしてキューに入れられ, | | しかし別なシグナルを待たないといけない処理はジョブとしてキューに入れられ, |
| 後回しになります。 | | 後回しになります。 |
- | -pokon にシグナルを送りつけたり描画したりウィンドウを管理したり色々な処理がされます。 | + | +pokon にシグナルを送りつけたり描画したりウィンドウを管理したり色々な処理がされます。 |
- | </ol> | + | |