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

[OSASK 1901] Re: tviewc00のビルド.



  こんばんは、川合です。


Koyanagi Masaaki さんは 2001/08/16 12:58:25 の「[OSASK 1898] tvi
ewc00 のビルド(Re: linkset0).」で書きました:

>linkset0b
>gglib05b
>stdlib4a
>
>を使って tviewc00 をビルドしました。
    (引用中略)
>ビルドした tviewc00.bin で tviewc00.c
>を表示しようとしたところ、
>CS:EIP = 90:7E9 で INT 0x03 が発生しました。
>詳しくは
>http://homepage1.nifty.com/dreaming/osask/break.png
>を見て下さい。
>
>何が問題として考えられるでしょうか?

  ご報告ありがとうございます。

  とりあえず、小柳さんのご報告を読む限り、落ち度は全く見付かりま
せん。それなのに、うまく行かないなんて・・・。これは、どこかにバ
グがありますね。

  break.pngを見てみたのですが、なんと、ファイルの一部は表示され
ているようですね。ということは、途中まではうまく行っていたわけで
す。

  問題の例外は、PAPI0内のページ例外ドライバからのものです。どう
も、理解できないページ例外を検出してしまったらしいのですが・・・
。

  とにかく原因を突き止めるために、今から当方でも追試してみます。

---

  まず、当環境でも再現しました。それで、いろいろ調べてみました。

  原因は、どうやら、guigui00.lib内のputstr.asmのバグのようです。
特定の条件がそろうと、暴走するようです。暴走条件は、

    lib_putstring_ASCII(0x0000, 0, line++, textbox, 0, 0, s);

の部分で、*s == '\0'のとき、すなわち、ヌルストリングを表示しよう
とした場合です。

  この条件は、break.pngに示されるように、tviewc00がなぜあそこま
で表示できたのに止まってしまったのかをちゃんと説明しています。多
分、この解析結果は正しいでしょう。

  さて、原因が分かればバグを取るまでです。

  そんなわけで、gglib05cをベータリリースします。これは、putstr.a
smのバグを取っただけです。とりあえず、当環境ではこれで再ビルドす
ることでtviewc00が走るようになりました。

---

  まあ、何はともあれ、

>2001/08/16  12:10                1,267 tviewc00.bin

のように、ファイルサイズが劇的に小さくなったのが何よりもうれしい
です(笑)。OSASK ver.1.5におまけで付いてきたやつは、2507バイト
もあったんですから。なお、putstr.asmの修正により再ビルド後のファ
イルサイズは数バイト減ります。これは、修正ついでに気合いを入れて
最適化したせいです(笑)。

  introaのhelloc4なんてたったの692バイトですよ!それでも、ASKA版
の172バイトには到底及ばないのですが・・・。まあ、アセンブラは面
倒だけど、それなりの価値はあるってことです(笑)。


  それでは。

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