[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 2684] Re: missing
こんばんは、川合です。
I.Tak. さんは 2001/12/11 15:58:04 の「[OSASK 2678] Re: missing」
で書きました:
> いや、名前は大切ですよ(なら最初から正しく書かんかい(^^;)。
>さっそくMS-IMEを教化しておきました。
わざわざすみません。引用の書き出しも直してもらえて嬉しいです。
>> 無圧縮で、color0よりもコンパクトになってしまったんですか!それ
>>はすごいです。・・・でも確かにmallocでかなりロスしてますね。今の
>>ASKAを使えばmallocなしでもきれいにかけそうです(構造体のアドレス
>>をDDのパラメーターとして自然に指定できるので)。
> そういえば、そのサンプルは出すはずでしたねえ。
よ、良く覚えていらっしゃいますね・・・参ったなあ(笑)。
ということで、急いで一つ作りました。color1です。ベータリリース
しておきます。281バイトです。
>> なおcolor0はソースも含めて、pack005aに入っています(ベータリリ
>>ース、2001.07.15)。
> ふむ、圧縮したり矩形を描いたりできそうです。
圧縮を適用したバージョンをNASMで作る場合は、bim2bin1の都合で、
頭に512バイトのダミーが必要です。内容はどうでもいいので、512バイ
トのダミーを付けておいてください。
(guide06)
> ええ。リファレンスですね。サンプルと同じくらいの進度ですね(;_;
そうです。・・・ううう・・・(泣)。
>> guigui00.hとpioneer0.askとtestシリーズを組み合わせて何とか乗り
>>切れないでしょうか・・・乗り切れるかもしれませんが、大変すぎます
>>ねえ。はああ、これじゃあ、しばらく開発は停止かなあ・・・。
> コマンド番号はpioneer0.askで、使い方はtestシリーズですか(Cだが)。
>うーん、まあ出来るかも知れません。
そういうことなら、もうちょっと詳しいアドバイスを書いておきます
。
たとえば、test014.cを見てください(testシリーズはtset001として
まとめられていますから、それをダウンロードするといいでしょう)。
ここにはguigui00.hのフォローなどとよく分からないことが書いてあ
りますが、これはただのごみ(過去の残骸)なので、全部削除してくだ
さい。
それで、たとえばlib_drawline0()をASKAから利用したいとします。
そのためにはまず、C言語のソースからlib_drawline0()の各引数の意味
を把握します。そして、次にguigui00.hからlib_drawline0()を#define
しているところを探します。この場合ですと(以下はgg00lib7.lzhから
引用)、
#define lib_drawline0(opt, gbox, color, x0, y0, x1, y1) \
lib_execcmd0(0x0054, (int) (opt), (void *) (gbox), (int) (color), \
(int) (x0), (int) (y0), (int) (x1), (int) (y1), 0x0000)
と書かれています。ですから、コマンド番号は0x0054と分かりますし、
引数の順序も分かります。lib_execcmd0()という関数は、スタック上に
積まれた引数でpioneer0を呼び出すだけの関数です。gg00lib7の中のex
eccmd0.asmを見ればすぐに分かります。
関数によっては、lib_execcmd1()を使っているものもあります。これ
は最初の引数は返り値のためのポインタで、2番目以降の引数がコマン
ド列です。lib_openwindow()を例に取りましょう。
#define lib_openwindow(window, slot, x_size, y_size) \
(struct LIB_WINDOW *) lib_execcmd1(1 * 4 + 12, 0x0020, \
(window) ? (void *) (window) : malloc(sizeof (struct LIB_WINDOW)), \
(int) (slot), (int) (x_size), (int) (y_size), 0x0000)
これは、コマンド列としては、
0x0020, window, slot, x_size, y_size, 0x0000
となっています。そして最初の1 * 4 + 12の意味は、windowの部分が、
返り値として指定されていることを意味します。一般に、n * 4 + 12と
いう形式になっていて、nが0なら最初の部分(この場合なら0x0020)、
nが1ならその次の部分、という風になっています。
また、ごく一部は#defineではなく、アセンブラで書かれた関数を呼
び出しているものがあります。その場合、アセンブラのソースはgg00l
ib7に入っていますから、I.Tak.さんならきっと読みこなせることでし
ょう。
この方法で読んでいけば、pioneer0.askを読まなければいけないの
は滅多にないはずです。確認程度に使ってください。
> だんだん、pioneerを読んで使うという冒険も楽しそうな気がしてきました。
>この順番で構いません(その時には資料が要らないかも、と希望的観測)。
もし可能なら、僕の代わりに資料を作ってください。形式はもちろん
自由です。これをやっていただけると、I.Tak.さんは単なるドキュメン
トライターだけでなく、テクニカルドキュメントライターも兼ねること
になります。
資料の形にまとめていただければ、僕が確認して誤解なさっていると
ころを指摘して修正しましょう。僕は大幅にドキュメント書きの時間を
短縮できます。
いかがでしょうか?
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/