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

[OSASK 3875] BOARD: Re: はじめまして



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい
http://www.imasy.org/~mone/osask/index.cgi?REFER=3d1ac787_83b3

2002/06/27 17:06
川合秀実

[OSASK 3874]へのレスです。

>FAT16であれば、論理パーテイションでも問題ないということでしょうか?

  はい、そうです。ご安心ください。・・・僕も用意している空きは論理パーテ
ィションにしか取れない状況なので、自分のためにも対応させると思います。

(マウス対応)
>「えせじゃないファイルシステム」がどう言う物なのか、
>私には分からないのですがそれまでの物(特に98版や8bitカラー)は、
>マウスより重要そうなのでファイルシステムの前辺りに
>マウスを使えるようにして頂けるとありがたいです。

  ご要望ありがとうございます。

  ちなみに「えせじゃないファイルシステム」というのは、階層ディレクトリが
自由に使えたり、HDDに対応したり、FDDも2HDだけではなく2DDなどにも対応する
ことなどです。他にもいろいろあると思いますが、卑近な例としてはこんなとこ
ろです。

>未だ理解できていないのはシグナル関係です。
>完成を急ぎたかったので、読み飛ばしたと言うのもありますが、未だに理解できずに、
>initsignalbox()と、getsignal()はそのままコピーして使わせて頂いています。

  とりあえず、そのレベルで十分です。

  LeaperさんはPC-9801のBASICの知識がおありのようですので、その辺を例にシ
グナルを説明してみます。

  getsignal()はINKEY$みたいなものです(なつかしい・・・)。何も押されてい
なければ0を返し、何か押されていれば押されていたキーに割り振られたシグナ
ル番号が返ります。この辺については、introaのmovec2.cをよく読めばわかって
もらえるでしょう。

>待ち時間中もキーを押すと先に進んでしまうと言うバグがありますし・・・。

  これはおそらく、タイマーシグナルを使わないでlib_waitsignal()で時間を計
ろうとしているからでしょう。キー入力を扱うプログラムでは、時間待ちにlib_
waitsignal()を使う方法ではあまりうまくいきません。タイマーシグナルを使い
ましょう。

  そしてタイマーシグナルについてはintrobのdblcntc0.cをよく読んでいただき
たいです。lib_settimertime()で設定した時刻になると設定したシグナルが送ら
れてくるのです。イメージとしては、どこかに見えない小人さんがいて、設定さ
れた時刻になったら特別なキーを入力してくれている、と考えるのが分かりやす
いかもしれません。だから時刻もINKEY$で取得するわけです。lib_waitsignal()
では、シグナルボックス(キーバッファみたいなもの?)に何らかのシグナルが溜
まると、指定した時刻にならなくても目覚めます。

  Turn0のようなゲームでの時間処理でしたら、introcのinvader2をよく読むと
いいと思います。特に関数wait()みたいなものを作れば簡単にゲームが書けるの
ではないかと思います。

>ポインタや構造体がいきなり出てくるとそれだけで、難しいと感じると思います。

  それはうーん、「勘弁してほしい」というのが本音です。標準的なC言語でも
「FILE *」という構造体へのポインタを使わなければファイルアクセスすらでき
ません。ポインタや構造体が難しいというのは、OSASKのAPIが問題なのではなく
C言語の文法が難しいと言うことなんだと思います。また見せかけだけでよけれ
ば、ポインタなどをソースならほぼ無くしてしまうことはできます。

---

/* ポインタや構造体が嫌いな人のためのおまじない */
typedef struct LIB_WINDOW *WinHandle;
typedef struct LIB_TEXTBOX *TBoxHandle;

void OsaskMain()
{
    WinHandle window;
    TBoxHandle wintitle, textbox;

    lib_init(AUTO_MALLOC);
    window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48);
    wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0,  7, 1,  0,  0, window, 0x00c0, 0);
    textbox  = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 12, 1, 16, 16, window, 0x00c0, 0);
    lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "helloc4");
    lib_putstring_ASCII(0x0000, 0, 0, textbox,  0, 0, "hello, world");
    lib_waitsignal(0x0001, 0, 0);
}

---

・・・本質的には何も変わっていませんが、この方がいいのでしょうか?

>早速リンク貼らせて頂きました。
>私のページもリンクしていただけるのであれば、嬉しい限りです。
>リンク先についてはOSASKTop.htmlでも別にいいのですが、
>フレームの名前の関係でサイト内の他へ飛ぶ時新しく窓が開いてしまうので、
>できれば、http://members.tripod.co.jp/leaper_ccave/OSASK/osaskforlink.html
>にしていただけないでしょうか?

  リンクしていただいてありがとうございます。またリンクを許してくださって
ありがとうございます。URLについては了解しました。そのリンク先でリンクさ
せていただきます。しばらくお待ちください。

(Turn0)
>三角関数は関数表を丸ごと入れているので、かなりきついです。
>あれでも、使っていないtanを削除して、5の倍数度だけにして減らしてあるのですが…。

  これについてですが、ゲームを遊んだ限りでは、点はせいぜい30個くらい打っ
ているようなので、その座標さえあればsin()やcos()は全くいらないのではない
かと思いました。introdのbballcを見ていただきたいのですが、もとはあのプロ
グラムもfloatで計算していました。しかし結局必要な座標は15個だけであり、
そのためにsin()、cos()を使うこともないだろうということで、必要な座標を配
列に持つだけにしました。汎用的なsin()、cos()などについては<math.h>を使え
ば得られるわけですし、またFPUが無い機種のために整数命令だけで三角関数が
使えるというのは意義あることですが、遠い将来にはFPUエミュレーションがOSA
SKに搭載される([OSASK 3356]参照)ので、結局は無くてもいいわけです。

>ご指摘の負荷についてですが、待ち時間のウエイトを10倍にしたところ、
>Playに支障なしで軽減できました。再開キーもSPACEキーに置き換えました。

  これについては、以下のようにすれば負荷はほとんどゼロにできる上に、もっ
とも速い反応が得られると思います(ソースを見ていないので見当はずれだった
らすみません)。

    do {
        lib_waitsignal(0x0001, 0, 0); /* シグナルが来るまでスリープ */
    } while (getsignal() != SPACEキーのシグナル番号);

結局待ち時間は設定しなくてもいいわけです。

>もう少し直したいところがあるので、アップロードはまだですが…。

  楽しみにしていますので、アップロードしたらまた教えてください。