[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[OSASK 00113] abcdw004.


  こんばんは、川合です。

  efg01の新しい版であるabcdw004ができたので対応アプリといっしょに
リリースします。

    http://osask.jp/files/

  説明は例によってドキュメントの丸写しで。

-------------------------------------------------------------------------------

・abcdw004アーカイブについて                      2008.11.21 川合秀実

  このソフトウェアはバイナリもソースもドキュメントもすべて川合に著作権があり、
ライセンスはKL-01です。

  この中には10個のソフトウェアが入っています。

---

・abcdw004について

  abcdwというのは開発コードネームで、本当の名前はefg01といいます。これは「
Executer For Guigui01」の略で、要するに「ぐいぐい01」のアプリを実行するため
のソフトウェアです。「ぐいぐい01」はOSASK-HBおよびOSASK ver.4.9以降でサポ
ートされる予定の、OSASKの新アプリ形式です。

  abcdwはefg01のwin32版で、つまりWindows上でOSASKアプリを実行できるのです。
エミュレータなしで。abcdというコードネームはefg01という名前から連想して決めま
した。深い意味はありません。

  使い方は、 efg01 hellok1.g01 とするだけです。これでhellok1.g01というアプリが
実行されます。

  前バージョンのabcdw003からの変更点は次の通りです。4bitエンコードの仕様を変更し
ました。これによりabcdw003までで使えていたアプリとのバイナリレベルでの互換性は
ほぼなくなっています(Cのソースレベルではguigui01.hを入れ替えれば互換です)。
またAPIを大量に追加しました(ほとんどジャンクAPIですが)。

  これでやっと最初の正規リリースをしてもいいくらいにはAPIがそろったので、
OSASK-HBやLinux版やMona版などが整備できてバンドルアプリもある程度そろったら、
一般公開をしようと思っています。

  APIがジャンク仕様な上に実装がものすごく手抜きなので、アプリのサイズや実行速
度に満足しているわけではないのですが、しかしこれ以上のんびり開発するのもどうか
と思ったので、とにかくリリースです。性能(=速度&サイズ)が期待したほどではな
かったとしても、まあしょうがないかと許してください。それでもいちおう、アプリが
IA-32系のどのOS上でもefg01だけで動かせるという特徴はちゃんと守っています。

  abcdw003までは本当にAPIが少なくて、文字表示くらいしかできなかったのですが、
このバージョンからはファイルへの入出力やアプリがリンク時に申請したい以上の追加
のメモリ獲得などもできるようになり、これでいろいろ作れるようになりました。だけ
どefg01は1KBしか増えていません。

  個人的にはこのリリースでの最大の成果は最後のほうにあるcp0やbim2g01fです。
helloアプリみたいな実用性の乏しい比較対象ではなく、もう少しまともな比較対象で
「ぐいぐい00」と「ぐいぐい01」、win32と「ぐいぐい01」を比較できるようになり、
しかもかなりの差を付けて勝っています。

---

・bim2g01eについて

  そろそろC言語でアプリを書いてみたいと思い、そのためのリンカを即席で作りまし
た。本当に即席で作ったせいで、リロケーション情報の生成をサポートできていません
。obj2bimの出力した.bimファイルから.g01をでっち上げます。

  ただ本当にリロケーション情報なしだとあまりにみっともないので、.rlmというテキ
ストファイルにリロケーション情報を書いてbim2g01に読ませることで、リロケーショ
ン情報を付与できるようにしました(前バージョンではできませんでした)。.rlmファ
イルは既にリリース済みのobj2bi4eを使えば簡単に出力させられます。

  前バージョンのbim2g01dからの変更点は次の通りです。abcdw004での新しい4bitエン
コードに対応しました。

  なお手抜きのせいで、ソースの先頭の関数がG01Main()になっていないとうまくリン
クできないはずです(これはbim2g01dなどの以前のバージョンも同じ)。

---

・obj2bimについて

  既にリリース済みのobj2bi4eを持っていない人は結構いるんじゃないかと思ったので
とりあえずバイナリだけバンドルしておきました。中身は全く変わっていません。

---

・pi0について

  これはabcdw003に入っていたものをただ再makeしただけです。今回からバイナリ互換
がなくなったのでやっただけです。

  FPU計算ももちろんできるということをテストするために作りました。円周率を求め
ます。ソースは

    http://hrb.osask.jp/wiki/?advance/FPU

から持ってきました。api_putchar()→g01_putc()しています。そのページにあるよう
に、このプログラムでは3.1415926までしか一致しません。しかも計算時間は結構かか
ります。待ちきれなくなったらCtrl+Cで止めちゃってください。

  このプログラムは241バイトなのですが、実はオリジナルのpi.hrbは229バイトです。
どうやらこのプログラムでサイズ勝負すると「ぐいぐい01」の負けのようです(ちなみ
にabcdw003の仕様でmakeすると242バイトでした)。

  なお、「はりぼてOS」をqemu上で動かし、その中でpi.hrbを実行してみました。その
ときの実行時間と、efg01でpi0.g01を動かしたときの実行時間は(体感で)1.5〜2倍く
らい違っていました。つまり.g01だとOSASK-HB上でもWindows上でも動くわけですが、
efg01を使って動かした場合は、やっぱりエミュレータ上よりは速いということです。
これでefg01の存在意義があると自分でも安心しました(おそらく、Windows上とOSASK-
HBネイティブ上でpi0.g01の実行速度を比較した場合、シングルコアCPU上であれば、
OSASK-HB上のほうがわずかに高速だろうとは思います)。

---

・hellok1について

  これはabcdw000に入っていたhellok0を作り直したものです。今回もハンドアセンブ
ルで作っているのでソースはありません。まあ27バイトですからね。これくらいならバ
イナリエディタだけで作れます。

---

・helloc4について

  これはabcdw003に入っていたものをただ再makeしただけです。今回からバイナリ互換
がなくなったのでやっただけです。

  これは「ぐいぐい01」仕様のアプリです。efg01か将来のOSASK-HBなどで実行してく
ださい。

  文字列定数の表示のためにg01_puts_c255()というマクロを作ったのですが、そのテ
ストが主な目的です。可読性の高いソースでも、hello, worldが89バイトで書けるよう
になりました。

---

・helloc5について

  これはabcdw003に入っていたものをただ再makeしただけです。今回からバイナリ互換
がなくなったのでやっただけです。

  これは「ぐいぐい01」仕様のアプリです。efg01か将来のOSASK-HBなどで実行してく
ださい。

  helloc3に1バイトのムダがあったので改良しました。それだけです。86バイトです。
再makeしただけでabcdw003よりも1バイト減りました。

---

・echoc0について

  これはabcdw001に入っていたechonr0を作り直したものです。echonr0はefg01がリロ
ケーションテーブルをサポートできなかった頃のひどいソースなので、もっと素直に書
き直しました。

  機能としては、コマンドラインをエコーするだけのものです。jg01_getcmdlin()とい
うAPIがきちんと動いているかどうか確認するために作ったものです。ちなみにechonr0
は一部アセンブラまで動員して174バイトを達成していましたが、echoc0はもっと素直
に書いただけにもかかわらず156バイトでした。

---

・cp0について

  これは今回のバージョンアップでファイル関係のAPIが実装されたので、その動作テ
ストのために作ったものです。引数を2つとり、ただファイルをコピーします。引数不
足で起動すれば簡単なusageもでます。機能的には旧OSASKのmcopyc1に相当すると思う
のですが、mcopyc1.binが761バイトだったのに対して、このcp0.g01は529バイトです。
232バイトも違います。しかもこれでefg01さえあれば旧OSASK上以外でも動かせるので
す。いやあ、我ながらほれぼれします(笑)。

  mcopyc1と同様に、読み込みファイルがtek圧縮されていた場合は展開した結果を出力
しますので、簡易展開ツールとしても使えます(これはもちろんcp0に展開能力がある
わけではなく、efg01側の機能のおかげです)。旧OSASKと同じく、この自動展開機能を
OFFにすることできます。やり方は、

prompt>efg01 -noadc cp0.g01 in.tek out.tek

のように、-noadc(no-auto-decompの略のつもり)をefg01側に付けてやってください
。アプリであるcp0側につけてもファイル名だと誤解するだけです。というか、アプリ
は自力では自動展開機能に対して干渉できません(そもそも機能していることを感知す
らできない・・・もちろんこれもmcopyc1と同じ)。

  この結果を見て、なんかefg01さえあれば、WindowsやLinuxでプログラムを書くのも
悪くないなと本気で思うようになりました。

---

・bim2g01fについて

  下の次回予告を書いている最中に急に思い立って、上記のbim2g01eを「ぐいぐい01」
に移植してみました。ただ移植しただけで特に最適化などはしていません。というのは
win32版と比べてどのくらい違うのかに興味があったからです。

    win32版 (bim2g01eのbim2g01.exe)  4,608バイト  もちろん「UPX -9」で圧縮済み
    ぐいぐい01版       bim2g01.g01   2,138バイト  もちろんtek5で圧縮済み
    ぐいぐい01版       bim2g01.g01   3,991バイト  参考のために圧縮解除

  どうでしょう。僕はこの結果を見たとき我が目を疑いました。圧縮なしでもUPXの最
大圧縮にかなりの差をつけて勝てるとは!そしてtek圧縮をかけてみたらその差は2倍を
超えました。圧縮と非圧縮でなら2倍くらいの差なんて珍しくもなんともないですが、
圧縮同士の比較でこれほどの差になるとは・・・。こんなに小さくなるなんて、そのせ
いで何か機能を損なったのではないかと僕でさえ不安になり、実際にリンクに使ってみ
ましたが生成物には1bitの差もなく、やはり移植はできていてそれでもこのサイズのよ
うです。

---

  次回予告

  tolsetの中のツールをいくつかを「ぐいぐい01」仕様に書き直す予定です。それでさ
らに有意な実行ファイルのサイズ比較ができるようになりますし、最新ツールのLinux
版がないよーとかで頭を悩ませる必要はなくなる時代に近づけるわけです(全部共通な
ので)。まあ最新のefg01を求めて頭を悩ませることにはなるかもしれませんが、悩み
の種が1つだけに集約されるのはいいことだと思います(でもefg01に関しては僕ができ
るだけ積極的に各OS用のバージョンをそろえる予定)。

  でもまとまった時間を取れるかどうかが分からないので、次のリリースがいつごろに
なるかはまだ未定です。とりあえず今回もかなり無理して作っているので、まずは眠り
たいです・・・。

---

・リンク

    http://osask.jp/boyaki04.html
    http://wiki.osask.jp/?GUIGUI01/man0000
    http://wiki.osask.jp/?GUIGUI01/memo04
    http://wiki.osask.jp/?OSASK-HB
    http://wiki.osask.jp/?OSASK-HB/0001

-------------------------------------------------------------------------------

  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/


一覧(今月):     投稿順     スレッド順