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

[OSASK 1819] Re: sworld.bin.



  こんにちは、川合です。


Koyanagi Masaaki さんは 2001/07/11 09:39:10 の「[OSASK 1817] swo
rld.bin(Re: example0).」で書きました:

>私が作った sworld.bin に使ってみました。

  さっそく試していただいてありがとうございます。

>ソースの変更はほんの少しで済み、簡単にできました。

  そう言っていただけるとうれしいです。

>その結果は
>1461 バイト -> 869 バイト と 59.4% になりました。

  おお、かなり小さくなったようですね。

  これで、「OSASKのアプリケーションは普通にプログラミングするだ
けで、かなりコンパクトになる」という定説(笑)をさらに強化できる
でしょう。ASKAではこのコンパクトになる傾向がさらに強いと思われま
す。なぜなら、ASKAで書かれたアプリケーションのサイズの大半はスタ
ティックデーターであり、そしてexe2bin2はスタティックデーターのみ
を圧縮するからです。

---

  ようやく、僕の「ぐいぐい00仕様」の特徴が生かされるようになりま
した。

  ぐいぐい00仕様では、スタティックデーターイメージは必ずコード内
に記述され、そしてアプリケーションの責任でデーターセグメントに転
送しなければいけません。この仕様にはODPさんが難色を示していまし
た(暫定ならいいけど、最後までこの仕様にするのはどうか・・・とい
ったような意見でした)。ODPさんが望んでいたのは、実行ファイル内
をコードとデーターに分け、データー部分に書かれたスタティックデー
ターイメージをシェルが責任を持って転送するというものです。

  僕の仕様では、スタティックデーターの転送はアプリの責任なので、
アプリは自分の好きな転送方法で転送できます。今回のように圧縮を解
きながらでもいいですし、以前のようにそのままでもいいわけです。も
しシェルが転送するという仕様にすると、圧縮をサポートするのが難し
くなります。圧縮をサポートするためにはシェルのローダー部分をバー
ジョンアップしなければいけません。それゆえに、古いバージョンでの
利用を想定している場合は新しい圧縮形式を利用できず、結果として、
圧縮はあまり利用されないかもしれません。

  pioneer0ライブラリーのパラメーターの指定の方法が、レジスタ渡し
でもスタック渡しでもなくポインタ渡しになっているのも、ぐいぐい00
仕様の特徴の一つです。これは、パラメーターをメモリの任意の場所に
並べておき、そのメモリのアドレスをEBXに入れてライブラリを呼び出
すという仕様の事を言っています。ASKAでアプリケーションを作った事
のある方にとってはおなじみのことです。

  C言語ではスタック渡しが普通で、これはパラメーターをスタックにP
USHしてデーターを渡します。この方法はC言語との親和性が良い反面、
コードはPUSH命令ばかりになり、僕の好みではありませんでした(速く
ないし、コードが大きくなる)。レジスタ渡しはBIOS呼び出しなどでよ
く使われる方法ですが、これもMOV命令だらけになるから好きではあり
ませんでした。ポインタ渡しは一般には可変長データーや大量のパラメ
ーターを渡すときにしか使われていませんが、僕はこれを大変好んでい
て、ライブラリコールはこれで行くことをだいぶ前から決めていました
。

  このポインタ渡しという性質のせいで、スタティックデーターが大き
くなるという傾向がありました。僕はこれを前もって予想していたため
、スタティックデーターの圧縮は是非ともやらなければと思っていたの
です。

  なお、lzexpのようにコードも圧縮すればもっとコンパクトになりま
すが、OSASKはコードがリエントラントであることを前提にしてシステ
ムを設計しているので、コードを圧縮する事はできません(全くできな
いわけではありませんが、やたらと手順が増えます)。コードは圧縮し
てもそんなには縮みませんし、そもそもそんなに大きくもならないでし
ょう。ですから、コードが圧縮できなくてもそんなに損ではないと思い
ます。

  ぐいぐい00仕様にしたがってプログラミングすれば、必然的にコード
が小さくなる代わりにスタティックデーターが大きくなるのです。そし
て、exe2bin2の-cオプションを使う事でそのスタティックデーターが小
さくなるわけです(こんなに都合の良い機能を使わない理由はありませ
ん)。結局、普通にアプリケーションを書いていけば、自然にコンパク
トなプログラムになるわけです。

  こんなわけで、exe2bin2の-cオプションを使って.BINファイルを生成
する事こそが、本当のOSASKアプリプログラミングです。みなさんも、
もし機会がありましたら利用してください。


  それでは。

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