[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[OSASK 00114] abcdw005.
- From: Hidemi KAWAI <kawai !Atmark! osask.jp>
- Date: Sun, 23 Nov 2008 22:04:27 +0900
こんばんは、川合です。
efg01の新しい版であるabcdw005ができたので対応アプリといっしょに
リリースします。
http://osask.jp/files/
説明は定番のドキュメントの丸写しで。
ちなみにもう体力も限界だし、返事を書かないままになっているメー
ルもすごい量になってきたので、しばらく休みます・・・。
-------------------------------------------------------------------------------
・abcdw005アーカイブについて 2008.11.23 川合秀実
このソフトウェアはバイナリもソースもドキュメントもすべて川合に著作権があり、
ライセンスはKL-01です。
この中には14個のソフトウェアが入っています。
このリリースでは、win32版のefg01のバージョンアップと、「ぐいぐい01」仕様で作
った大量のtolsetアプリがメインです。これらは基本的に従来のtolsetの上位互換にな
っているので、簡単に差し替えられます。ということで、簡単なインストール方法を紹
介します。
以下のファイルやディレクトリをtolsetの中のz_toolsに全てコピーしてください。
・このアーカイブのルートにある.g01ファイル(計11ファイル)
・このアーカイブのルートにあるcom_make.txt
・このアーカイブのルートにあるefg01.exe
・このアーカイブのルートにあるguigui01ディレクトリ
これでおしまいです。きちょうめんな人は、obj2bim.exeなど.exe版のツールを削除し
てください(どうせ使わないので)。ディスクがすっきりします。ただし、全部消して
いいわけではありません。まだ.g01化できていないツールもあるのです。ですから、対
応する.g01があるのを確認しながら作業してください。
---
・abcdw005について
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というアプリが
実行されます。
前バージョンのabcdw004からの変更点は次の通りです。リロケーション情報の解釈が
一部間違っていたので修正しました。jg01_fread()にあったバグも直しました。
これでやっと最初の正規リリースをしてもいいくらいにはAPIがそろったので、
OSASK-HBやLinux版やMona版などが整備できてバンドルアプリもある程度そろったら、
一般公開をしようと思っています。一般公開までのロードマップは最後の「次回予告」
に書きます。
APIがジャンク仕様な上に実装がものすごく手抜きなので、アプリのサイズや実行速
度に満足しているわけではないのですが、しかしこれ以上のんびり開発するのもどうか
と思ったので、とにかくリリースです。性能(=速度&サイズ)が期待したほどではな
かったとしても、まあしょうがないかと許してください。それでもいちおう、アプリが
IA-32系のどのOS上でもefg01だけで動かせるという特徴はちゃんと守っています。
---
・cpy0aについて
これは前回のcp0をちょっと書き直しただけのものです。tek圧縮の簡易解除ツールと
して結構便利なので、tolsetのツール群に加えてやることにしました。その際にちょっ
と手直ししたので、前回の529バイトから更に小さくなり、503バイトになりました。
1セクタの容量である512バイトを切ったのはめでたい限りです(笑)。
引数を2つとり、ただファイルをコピーします。引数不足で起動すれば簡単なusageも
でます。機能的には旧OSASKのmcopyc1に相当すると思うのですが、mcopyc1.binが761バ
イトだったのに対して、このcp0.g01は503バイトです。258バイトも違います。しかも
これで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でプログラムを書くのも
悪くないなと本気で思うようになりました。そしてその思いはtolsetのツール群の移植
の結果を見てますます強くなりました(最後にまとめておきます)。
---
・bim2g01gについて
.bimファイルから.g01ファイルを生成するためのツールです。
abcde003のbim2g01eおよびbim2g01fの双方に.dataセクションのリロケーション情報
を正しく生成できないバグがありました。それでそれを直したのがこのbim2g01gです。
なおこれは「ぐいぐい01」アプリであり、つまりWindows上での実行にはefg01が必要
です。またこのバージョンから普通の.exe版は(僕からは)提供しません。ツールの統
合化へむけての方針ですのでご理解いただければと思います。
また旧ツールで作られたアプリ(abcdw003にバンドルされていたアプリ)は大丈夫な
のかという心配がありますが、それらは幸いにも.dataセクションのリロケーション情
報を持たないアプリだったので、いずれも問題ありません。このリンカで作り直しても
全く同じバイナリになります。
また前回のabcdw003のドキュメントで「ソースの先頭の関数がG01Main()になってい
ないとうまくリンクできないはず」などと書きましたが、これは誤解でした。先頭に書
いていなくてもちゃんと動きます。
なおこのバージョンからbim2g01はGO(じーおー)に含まれることとします。そして
このアーカイブに含まれるGOツールはgo_0024バージョンと称することとします。
---
・obj2bim4fについて
一つまたは複数の.objファイルをスタティックリンクし、.bimファイルを生成します
。
以前リリースしたobj2bim4eを「ぐいぐい01」に移植しました。
既にリリース済みのobj2bi4eを持っていない人は結構いるんじゃないかと思ったので
とりあえずバイナリだけバンドルしておきました。中身は全く変わっていません。
obj2bim4fは以前よりGO(じーおー)に含まれています。そしてこのアーカイブに含
まれるGOツールはgo_0024バージョンと称することとします。
---
・gas2naskについて
GOのCコンパイラであるcc1.exeが出力した.gasファイルを、naskでアセンブル可能な
.nas形式に変換します。
go_0023までのgas2naskを「ぐいぐい01」に移植したものですが、その作業中に
gcc-3.2のCコンパイラを移植して作ったgo_0023のcc1.exeには、.dataセクションのア
ラインがしばしば不適切になってしまうことがあるというバグが見つかりました。これ
はどうもおおもとのgcc-3.2に由来するバグらしく、cc1の修正で対応するのはどれだけ
時間がかかるか分かったものじゃないので、gas2naskにこのバグを自動修正する機能を
付けました。オプションスイッチ-Aです。先ほどの手順でcom_make.txtを入れ替えると
このオプションを自動的に利用するようになります。
ちなみにアラインがおかしくなってもIA-32では特に目立った障害もなく動きます(
そのために今までこのバグに気付かなかった)。しかしアラインがずれたデータを読み
書きすればその命令は通常の数倍のクロックを要します。つまり、少し遅くなるわけで
す。今のところ実感できるほど高速化したとは感じていませんが、(実行時間的な)ム
ダが減ったのはとても気持ちがいいです。
gas2naskは以前よりGO(じーおー)に含まれています。そしてこのアーカイブに含ま
れるGOツールはgo_0024バージョンと称することとします。
---
・naskcnv0について
ASKAが出力する.3asファイルをnaskでアセンブル可能な.nas形式に変換します。
go_0023までのnaskcnv0を「ぐいぐい01」に移植したものです。機能も使い方も
Windows上ではefg01が必要になることを除けば、違いはありません。まあしいて言えば
ソースにtek圧縮がかかっていたとしてもそのまま変換できます(しかしそんなことは
まずないだろうが)。これはもちろんnaskcnv0の機能というよりも、「ぐいぐい01」ア
プリ共通の利点です。
naskcnv0は以前よりGO(じーおー)に含まれています。そしてこのアーカイブに含ま
れるGOツールはgo_0024バージョンと称することとします。
---
・sjisconvについて
全角文字などの文字コードをGOのCコンパイラであるcc1.exeにそのまま渡すと誤動作
するので、それを回避するためにそれらの文字をエスケープ文字に変換します。
go_0023までのsjisconvを「ぐいぐい01」に移植したものです。機能も使い方も
Windows上ではefg01が必要になることを除けば、違いはありません。まあしいて言えば
ソースにtek圧縮がかかっていたとしてもそのまま変換できます(しかしそんなことは
まずないだろうが)。これはもちろんsjisconvの機能というよりも、「ぐいぐい01」ア
プリ共通の利点です。
sjisconvは以前よりGO(じーおー)に含まれています。そしてこのアーカイブに含ま
れるGOツールはgo_0024バージョンと称することとします。
---
・golib00について
一つまたは複数の.objファイルをまとめて.libファイルを作ります。もしくは逆に
.libから.objファイルを取り出します。COFFフォーマット用のライブラリアンです。
go_0023までのgolib00を「ぐいぐい01」に移植したものです。機能も使い方も
Windows上ではefg01が必要になることを除けば、違いはありません。まあしいて言えば
.objや.libにtek圧縮がかかっていたとしてもそのまま変換できます(これは結構あり
うる。巨大なライブラリなどを圧縮して保持できるのは大きなメリット)。これはもち
ろんgolib00の機能というよりも、「ぐいぐい01」アプリ共通の利点です。
golib00は以前よりGO(じーおー)に含まれています。そしてこのアーカイブに含ま
れるGOツールはgo_0024バージョンと称することとします。
---
・bim2hrb0bについて
「30日でできる!OS自作入門」の中で「はりぼてOS」を作るために使われているリン
カです。.bimファイルから.hrbファイルを生成します。同書にバンドルされていたもの
を.g01化しただけです。
---
・makefont0bについて
OSASKで半角フォントファイルをコンパイルするために使われていたコンパイラ(?
)です。テキストで書かれたフォントファイルをバイナリファイルに変換します。これ
も従来のものを.g01化しただけです。
---
・bin2obj0bについて
これはどういうきっかけで作ったのか正確には覚えていないのですが(たぶんあっき
ぃさんの自己解凍型sarアーカイブの支援ツールだったと思う)、とにかく任意のバイ
ナリファイルをCOFFの.objファイル化します。同じことはNASMでincbinなどを使ってソ
ースを書いてアセンブルすればもちろんできますが、そのためにわざわざ.nasソースを
書いてNASMを用意するのはあんまりです。「30日でできる!OS自作入門」の中でも、フ
ォントファイルをリンクするために使われています。これも従来のものを.g01化しただ
けです。
なおこのバージョンからbin2objはGO(じーおー)に含まれることとします。そして
このアーカイブに含まれるGOツールはgo_0024バージョンと称することとします。
---
・aksa1bについて
これは逆ASKAです。つまり逆アセンブラなのですが、出力されるソースの文法がnask
風のものではなく、ASKA風なのです。それだけのものです。これも従来のものを.g01化
しただけです。
---
・gg01libc0aについて
これは、guigui01ディレクトリの中にある、gg01libc.libとstartup.objのソースフ
ァイルです。
---
win32版と「ぐいぐい01」版の比較
今回はcpy0aとgg01libc0aを除いた全てがwin32版アプリからの移植で、機能は何一つ
損なっていないので、非常に公平にサイズの比較ができると思います。
win32版 「ぐいぐい01」版
bim2g01 4,608 2,138
obj2bim 12,800 7,212
gas2nask 11,155 5,114
naskcnv0 3,584 2,050
sjisconv 2,560 912
golib00 4,608 2,751
bim2hrb 4,096 987
makefont 3,072 691
bin2obj 4,096 983
aksa 8,192 5,311
efg01.exe 10,240
いずれもwin32版には当然UPXの最大圧縮をかけてあり、「ぐいぐい01」版にはtek5を
かけてあります。なお、bim2g01とgas2naskのサイズはアーカイブ内のものとは異なっ
ていますが、上記はバグフィクスする前の同じ状態のまま移植した場合のものです。
どうでしょうか。大きなツールがほぼ半減しているというのもすごいですが、小さい
ツールの多くが1KB未満になってしまったというのも注目に値すると思います。
これを「今までこんなに大きかったものをこんなに小さくできた」と思えれば文句な
くうれしいのですが、「今までこんなに上げ底されていたものを使わされていた、本来
はこの程度のバイト数で記述できる処理でしかなかった」という風に考えると、なにや
ら暗い気持ちになります。そしてこのサイズこそIA-32の本当の実力であって(そして
くやしいことにwin32の実力でもある・・・まあどのOSでもこの大きさだからwin32だけ
の実力ではないが)、それ以外の今までの大きなサイズはすべてムダによるものだった
のです。
そもそも上記のwin32版でさえ、非常に多くの人から「何でこんなに小さいのか?」
といわれるほどの優秀な(はずの)ツールでした。しかしそれでも半分近くがムダでし
かなかったわけです。自らの名誉のために言っておきますが、世間の人が普通に使って
いるツールの現状はもっとひどいです。100KBや200KBなんてザラです。しかもこれは
UPXしたときのサイズであって、実際は無圧縮で500KBとかのまま配布され使用されてい
ます。そしてそれがとんでもない上げ底だとは気付いていなくて、それがIA-32の実力
だと思っています。実に嘆かわしいです。
---
次回予告
これでtolsetのツール群のうち、まだ移植が終わってないのは、
nask cpp0 cc1 -- A群
edimg sartol wce bim2bin -- B群
aska make t5lzma -- C群
の合計10個です。これらを移植していくのが当面の目標になります。
naskには[OSASK 00055]で報告されたequ周りのバグもあるので、それもこれを機に修
正したいと思っています。さて自称世界最小のIA-32アセンブラであるnaskはどこまで
小さくなってくれるでしょうか。・・・またsartolのLinux版をI.Tak.さんがリリース
していてくれたのですが、そのページが現在では存在せず、そして確か僕はダウンロー
ドしたのですが、どこにしまったのか分からなくて、結局現在Linuxユーザの人はsarを
開けないという由々しき状態にあります。これを解決するには、sartolを.g01化し、
efg01のLinux版をバージョンアップすればいいわけです。
しかしB群、C群のアプリを移植するには現在のAPIだけでは不足で(例外でASKAは移
植可能と思われるが)、そうなるとefg01をもう一度バージョンアップする必要があり
ます。ただ、今回いろいろ移植して分かったのですが、いろんなアプリを移植すると
efg01のバグが洗い出されてくるので、まずはA群のアプリを移植して現状のバグをでき
るだけ多く洗い出し、その上でAPIを追加しようと思います。
そしてB群のアプリを移植し終わったら、efg01のLinux版やMonaOS版、そしてもちろ
んOSASK-HBなどを作り、最初の一般公開としたいと思っています。それぞれのOS上で
「ぐいぐい01」アプリだけで、「ぐいぐい01」アプリのソースをコンパイルしてアセン
ブルしてリンクできるわけですから、GUIのAPIがないままでも一般公開して恥ずかしく
はないでしょう。
C群のアプリは一般公開の後で移植します。というのは、これらは僕が直接作ったツ
ールではなく、tolsetでmakeできる状態にはなっていません。だから移植には結構時間
がかかるはずです。それを待っていては最初の一般公開がいつになるか分かったもので
はないので、C群のアプリは最初の一般公開には間に合わせないものとします。
そしてtolsetのツールが全て移植し終わったら、今度はGUI関係のAPIを付けていこう
と思っています。
---
・リンク
http://osask.jp/boyaki04.html
http://wiki.osask.jp/?GUIGUI01/man0000
http://wiki.osask.jp/?GUIGUI01/memo02
http://wiki.osask.jp/?GUIGUI01/memo04
http://wiki.osask.jp/?OSASK-HB
http://wiki.osask.jp/?OSASK-HB/0001
http://community.osdev.info/?GO
-------------------------------------------------------------------------------
それでは。
--
川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/