[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3186] Re: BMPV05 Release



  こんにちは、川合です。


rakkyo さんは 2002/02/10 23:49:25 の「[OSASK 3184] BMPV05 Releas
e」で書きました:

>川合さんご指摘ありがとうございました(^^

  どういたしまして。こちらこそ、よいアプリケーションを作って公開
していただいてとても助かっています。

>BMPV04で指摘された所を修正した、BMPV05を公開しました。
>http://homepage2.nifty.com/rakkyo-taro/
>の小物よりダウンロード出来ます。
>
>修正点ですが、ファイルサイズ0問題に今度こそ対応したのと、mallocを使わな
>いようにしたので、906バイトまで縮みました。

  非常に良くなりましたね。mallocの部分は無駄に感じていたので、こ
れがなくなってすっきりしたのはとても嬉しいです。

>何か不都合を見つけた方はご一報下さいm(_ _)m

  たいしたことではないのですが、Macバイナリーの部分にちょっと不
安を感じました。285行目の「EDI+=128;」を以下の文と差し替えた方が
いいのではないでしょうか?

    EAX -= 128; /* skip Mac binary header */
    EDI += 128;
    if (EAX < 0x07)
        goto error;

ちなみにこれも128の代わりに-128という定数を使うとコンパクトにな
るというテクニックを使うと6バイトほど節約できるので、どうせなら
こちらがお勧めです。

    EAX += 0 - 128; /* skip Mac binary header */
    EDI -= 0 - 128;
    if (EAX < 0x07)
        goto error;

---

  ついでなので、いくつか「せこい」ことを伝授します。気に入ったら
使ってみてください。

  301〜302行目の

>    if(EAX < 136)work->lib_openwindow.x_size = 136;
>    else work->lib_openwindow.x_size = EAX;

ですが、このように-128〜+127でない定数が何度も出てくるなら、適当
なレジスタに入れておくとサイズが稼げます。

    EDX = 136;
    if (EAX < EDX)
        work->lib_openwindow.x_size = EDX;
    else
        work->lib_openwindow.x_size = EAX;

また、elseを使わずに済むなら、使わない方が速くてコンパクトです。
・・・ということで、お勧めは以下の通りです。

    EDX = 136;
    if (EDX <= EAX)
        EDX = EAX;
    work->lib_openwindow.x_size = EDX;

  次に433〜436行目の

>            SHR(AL, 1);
>            asmout("JC w_skip_2");
>            [DS:ESI] = CH;
>asmout("w_skip_2:");

ですが、ASKAでは普通こう書きます(書き直してもコンパクトにはなり
ません。ソースが読みやすくなるだけです)。

            SHR(AL, 1);
            if (CF == 0)
                [DS:ESI] = CH;

  それと、337行目の

>    EDI = work->fp;

はいらないと思います。だって、誰もEDIの値をいじっていませんから
。API呼び出しの際にtek0の展開コマンドを使わない限り、EDIの値は変
化しません。安心してください。変わるのはEBXだけです。

  ・・・そうなると、288行目の

>    work->fp = EDI;

もいらなくなりますし、そもそもfpという変数が不要ということになり
ます。・・・そういえば、malloc_addr0もいりませんね。freeも。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/