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

[OSASK 1359] Re: s_world.bin.



  こんばんは、川合です。


Koyanagi Masaaki さんは 2001/01/14 14:19:28 の「[OSASK 1358] s_w
orld.bin(Re: music.asm のプログラミング)」で書きました:

>ASKAによる自作音楽アプリケーションがやっとできました。
>http://homepage1.nifty.com/dreaming/osask/index.html
>からダウンロードできます。
>一工夫しているのでぜひ実行してみて下さい。

  どうもありがとうございます。

  早速実行してみました。・・・僕が作ったmusic1〜4よりもはるかに
いい出来です。

>現在のASKAのソースが読みにくいのはやはり、この静的変数の初期化部分が
>大きいですね。宣言と初期値のテーブルが不整合で、OSごとハングアップ
>させたことが結構ありました。

  これについては、すみません、です。本来は、OSASKはアプリの暴走
くらいでハングアップしてはいけないのですが、防御コードを書く暇を
惜しんで機能を追加しているために、非常に「もろい」です。

  年度内に、この「もろさ」をかなり減少させたいとは思っているので
すが・・・。

>等ができるようになれば、ASKA はかなり強力な開発ツールになると思います。
>今回はいろいろ手こずったのですが、それでも ASKA の力の片鱗が見えた気がし
>ました。

  ASKAは最初の仕様すら満たせていないベータ版ですが、それでも、AS
KAの最大の特徴である、「生成した.BINファイルのコンパクトさ」は生
きています。実際、小柳さんのs_world.binはcolorc.binと大差ない大
きさですが、colorcなんかよりもはるかに高機能です。

  本当は、C言語で書くよりも速いということも示したいのですが、今
は速度が重要なアプリケーションを誰も作っていないので、これについ
てはまだコメントしないでおきます。

>・Windowタイトル文字列が左端から半角2文字分空いて表示されるのが、
>なんとなくアンバランスな気がしていたのですが、多分アイコン用ですね。

  するどい推察です。その通りで、実は将来のアイコン表示用の余白で
す。・・・いつになったら表示できるようになることやら・・・(笑)
。

>・エイリアスは C++ の int &a = 1; の表現でもいいかもしれません。

  なるほど。これは悪くない案です。こっちの方がわかりやすいという
人が多ければ、こっちの方がいいかもしれません。うーん、でも、

    int *a == DS:EBX;
    int *&a = DS:EBX;

の2つを比べると、今までの方法の方が僕は読みやすいような気がしま
す。

>・ASKAでポインタ変数のエイリアス宣言で同じ alias 名を別のレジスタに
>使用しようとして失敗したのですが、途中でエイリアスを無効に
>できないでしょうか?

  エイリアスのみならず、任意の名前(変数名、エイリアス名、gotoラ
ベル、構造体名など)を無効にできる文法を取り入れようという案は、
僕の頭の中にはありますが、今までこれを発言したことはありません。
というのは、この機能をどんな文法で取り入れたらいいのかについて、
いい案がなかなか思い付かないからです。

  そんなわけで僕と同じ感想を持っている小柳さんに質問です。無効に
するための文法として、どんなのが良いと思われますか?

  一応、僕の案の中で一番ましなものを挙げておきます。

    int *a~; // つまり、宣言の直後に「チルダ」を付ける。
             // 直前の方がいいかもしれない。

  すみません、この発言を撤回し、逆宣言(宣言を無効にするための宣
言)を取り入れたいという意向には賛意を表しないという立場にします
。これよりも強く取り入れたいと思っている機能と相容れないというこ
とに気がつきましたので。

>・ASKAで表示文字列に '#' を使用しようとして、masmcnv2 ではまりました(笑)
>原因は.3asファイルを見て分かりました。

  おお、こんなところで、masmconv2の設計の甘さのつけがきましたか
・・・どなたか、直してくれるとうれしいんですが・・・。

>・ テーブルからの読込で異常な値を指定したせいで INT10 を出しましたが、
>このレジスタ情報をデバッグの助けにすることが私にはできませんでした。
>問題部分をコメントアウトで見つけだして解決しました。

  INT10ですか?番号が違うんじゃないかと思うんですが、本当に10で
したか?

  まあなんにしても、この辺も近いうちに僕が整備すべき個所ですね。

  僕以外の方でアプリケーションを作る方が増えてくれば、この辺もわ
かりやすくまとめたいと思っていたんです。小柳さんがs_worldを書い
て下さったので、そろそろやるべき時がきたのかもしれません。

---

  ソースについて、少しコメントしておきます。

  まず、僕のプログラム評価の全般について、少し説明します。

  僕は、ソースの美しさはもちろん重要だと思いますが、それよりも「
動く」ことを重視します。どんなに美しいプログラムであっても動かな
ければ、ソースの汚い動くプログラムにはまさりません。異論はあると
は思いますが、僕はそう考えているんです。

  それで、そういう僕の観点では、少ない情報だけで試行錯誤して作り
上げた小柳さんのプログラムを高く評価しています。このプログラムは
ちゃんと動きますし、バグも無いようにみえます。・・・ASKAでプログ
ラムを書くのは、ASKA作者のODPさんですらやったことがなかったよう
な気がします。ですから、おそらく、僕以外でASKAのプログラムを書い
た最初の人です(もちろん、公開していないプログラムを書かれた方は
すでにおられたことでしょうけど)。

  ソースは全体的にシンプルで素直な印象を持ちました。まあ、アセン
ブラをやるとこうなるのが普通で、だから誰にでもコンパクトで速いプ
ログラムが書けるのですが。

  そうですねえ、誉めてばかりいるとよくないかもしれないので(笑)
、無理に欠点を挙げるとしましょう。少し気になったのは、

    unsigned int *srcp == EBX;
    LEA(srcp, (int) work->notename);// srcp = (offset) work->notename
    EBX += EAX;

のところでしょうか。この最後の一文は、

    (offset) srcp += EAX;

と書いた方が読みやすかったのではないでしょうか。エイリアス宣言で
EBXを隠して可読性が上がったのに、そこでレジスタ表記に戻ってしま
うと少し読みにくいように思います。

  僕には芸術的なセンスが無いので、この小柳さん作曲の曲そのものに
ついてのコメントはできません。長く聞いていてもしつこい感じがしな
いいい曲だとは思いました。僕は、この曲のタイトルが気に入っていま
す。「広がる小さな世界」って、なんとなくOSASKのイメージに近い気
がして・・・。

---

  これは小柳さんへの私信ですが、

    http://homepage1.nifty.com/dreaming/osask/index.html

のページをうちの「OSASKアプリケーションのダウンロードページ」か
らリンクしてもよろしいでしょうか?


  それでは。

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