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

[OSASK 3016] Re: ASKA(ASM)での呼び出し方について



  こんにちは、川合です。


rakkyo さんは 2002/01/22 01:11:16 の「[OSASK 3015] ASKA(ASM)での
呼び出し方について」で書きました:

>今、どれくらい縮むのかなと、BMPVをASKAで書き直しているのですが、

  なんとすばらしい向上心!

  ・・・なんというか、あれだけの資料でここまで作ったというのは、
それだけで賞賛に値します。

>lib_initmodulehandle1がうまく呼び出せません。
>構造体の書き方がおかしいのかなと、gg00lib7のinitmdh1.asm(.なんたらやendは
>削除)をIncludeして、呼び出したりもしてみたのですが、ファイルの選択ダイア
>ログが出てこず、うまくいきません。
>(シグナルも帰ってきていないみたいです)

  これの解決とどのくらい関係あるのか分かっていませんが、一つすぐ
に分かったことがあるのでアドバイスします。以下は引用です。

---

// stack:2k malloc:176k file:92k

segment CODE(USE32, PARA);
default(code == CODE);

void near header()
// タグの代わり(32byte)
{
    segment CODE == CS; // 386asmのためのおまけ
    ORG(0x0000);
    asmout("JMP main");
    ALIGN(8);
    asmout("DB 'GUIGUI00'");
    DD(0x5000 /* 20KB */); // stack & work size
    asmout("DD 0,0,0");
}

---

  ええと、まず、スタックは4KBにしましょう。僕の過去のサンプルで
はばかみたいにけちって2KBにしているものがありますが、あれは悪い
例です(すみません)。

  ASKAでプログラムを書く場合、stackやmallocやfileの値はソース中
に記述します。仮に、

    stack:4k malloc:176k file:92k

ということにするとしたら、headerの最後の2行はこうなります。

    DD(4096 + 180224);
    DD(94208 + 1, 0, 0);

そしてmain()の最初のところも、

    WORK *work == DS:0x1000; /* 4KB */
    ESP = 0x1000;

にします。malloc()の最初のworkの値もこれにそろえてください。

  それとTempDataをちゃんと作ってあるみたいなので、_lib_initmodul
ehandle1()を持ってくる必要はありません。元に戻しましょう。

>lib_init等、前のコマンドといっしょに、 lib_waitsignal(シグナルが来るまで
>スリープ)を呼び出すと、INT 0x03が発生するのですが、どうしてでしょうか??

  これは、"struct LIB_InitModuleHandle1"の宣言で、最後にeocを誤
って含めてしまったせいではないでしょうか?いや、良く分からないん
ですが・・・。そのおかしくなるという状態のソースに戻していただけ
れば、アドバイスできると思います。

  また、"struct LIB_MapModule"の宣言で"word sel;"という部分があ
りますがこれはいけません。"int sel;"にしてください(もしくは、以
下のようにする)。

    word sel, [2];

  さらに、"struct LIB_FlushGraphBox"の部分の"word hoge;"も"int s
el;"にしてください。ここには、0x000cを入れます。

  static_datas()内の/* lib_puttitle */のところに、DWを使っている
部分がありますが、これはDDに直すべきでしょう。

  また、"struct WORK"の宣言のところで、

    LIB_PutString lib_puttitle;

という部分がありますが、これは、

    LIB_PutString lib_puttitle, [24];

の間違いだと思います。

---

  他にも問題が残っているかもしれませんが、ちょっと今は分かりませ
ん。駄目なら駄目で、以上の修正を加えた状態で再度質問してください
。


  それでは。

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