[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/