ページへ戻る

− Links

 印刷 

GUIGUI01​/memo00 のバックアップの現在との差分(No.4) :: OSASK計画

osaskwiki:GUIGUI01/memo00 のバックアップの現在との差分(No.4)

« Prev[4]  Next »[5]
4: 2008-04-28 (月) 08:31:02 ソース[6] 現: 2024-01-08 (月) 12:58:41 ゲスト ソース[7]
Line 1: Line 1:
-* ぐいぐい01に関するメモ-00+TITLE:x 
 +* ぐいぐい01に関するメモ-00 [#pabe6ede]
-(by [[K]], 2008.04.07) -(by [[K]], 2008.04.07)
-メモのうち重要な部分をそのうちまとめてまともなページを作る -メモのうち重要な部分をそのうちまとめてまともなページを作る
-*** (0) はじめに+*** (0) はじめに [#j78e4d51]
-ぐいぐい01は、OSASK-HBから導入される新しいAPI規格。将来的にOSASK上でも実行できるようになるのはもちろんだが、Windows上やLinux上、MonaOSやはりぼてOSファミリーなどでも実行できるように工夫してある。 -ぐいぐい01は、OSASK-HBから導入される新しいAPI規格。将来的にOSASK上でも実行できるようになるのはもちろんだが、Windows上やLinux上、MonaOSやはりぼてOSファミリーなどでも実行できるように工夫してある。
--ただし正規に対応していないOS上で動かす場合は専用のエグゼキュータアプリを使うことになる。これは"Executer For Guigui01"(通称efg01)と呼ばれる。 --ただし正規に対応していないOS上で動かす場合は専用のエグゼキュータアプリを使うことになる。これは"Executer For Guigui01"(通称efg01)と呼ばれる。
-*** (1) 特徴+*** (1) 特徴 [#tf9c6bd7]
-API呼び出しはnear-call。ぐいぐい00のときのようにfar-callではないし、「はりぼてOS」のようにINTでもない。これはさまざまなOS上でエミュレータなしで動作させるためにそうなった。 -API呼び出しはnear-call。ぐいぐい00のときのようにfar-callではないし、「はりぼてOS」のようにINTでもない。これはさまざまなOS上でエミュレータなしで動作させるためにそうなった。
-ロードアドレスが不定。ぐいぐい00のときのように、0番地からコードがロードされるとか、スタック域が0番地から確保されてその後に.dataが継続するなどの保証ができない。これもさまざまなOS上でエミュレータなしで動作させるためにそうなった。 -ロードアドレスが不定。ぐいぐい00のときのように、0番地からコードがロードされるとか、スタック域が0番地から確保されてその後に.dataが継続するなどの保証ができない。これもさまざまなOS上でエミュレータなしで動作させるためにそうなった。
Line 13: Line 14:
-コンソールがある。 -コンソールがある。
-ぐいぐい00で必須だったAPIの初期化はぐいぐい01では必須ではない。なぜなら起動直前にシステムが初期化処理を代行してくれているからである。適当なメモリを確保してそのポインタを起動時にアプリに伝えてくる。これが気に入らなければ、アプリが再度正式に初期化処理をすることも可能。 -ぐいぐい00で必須だったAPIの初期化はぐいぐい01では必須ではない。なぜなら起動直前にシステムが初期化処理を代行してくれているからである。適当なメモリを確保してそのポインタを起動時にアプリに伝えてくる。これが気に入らなければ、アプリが再度正式に初期化処理をすることも可能。
-*** (2) ぐいぐい00との違いなど(1)+*** (2) ぐいぐい00との違いなど(1) [#hbb28c84]
-APIの呼び出しの基本は、ぐいぐい00と同じくEBXにコマンドパケットの先頭アドレスを入れてAPIを呼び出すだけである。しかし今回はコマンドパケットの各パラメータをメモリに置くことが必須ではなく、パラメータの一部にレジスタ値を使うように指定することができる。別のメモリ域を指すことも可能。またぐいぐい00ではintの配列構造を基本としていたが、ぐいぐい01では可変長である。 -APIの呼び出しの基本は、ぐいぐい00と同じくEBXにコマンドパケットの先頭アドレスを入れてAPIを呼び出すだけである。しかし今回はコマンドパケットの各パラメータをメモリに置くことが必須ではなく、パラメータの一部にレジスタ値を使うように指定することができる。別のメモリ域を指すことも可能。またぐいぐい00ではintの配列構造を基本としていたが、ぐいぐい01では可変長である。
-slot番号は16倍しなくてよくなった。 -slot番号は16倍しなくてよくなった。
-アプリが起動した直後はEBXには適当なポインタが代入されており、そのメモリには「後続のコマンドパケットはEIP以降に書いてある」という内容のパケットが書いてある。したがってEBXを変更しなければ、CALL命令に後続してコマンドパケットを書いておけばAPIが利用できる。さらに起動時のEBPはAPIの呼び出しアドレスが代入されているので、EBPを変更しなければCALL(EBP);でAPIが呼べる。この辺はごく小規模のアプリのためのささやかな仕組みである。 -アプリが起動した直後はEBXには適当なポインタが代入されており、そのメモリには「後続のコマンドパケットはEIP以降に書いてある」という内容のパケットが書いてある。したがってEBXを変更しなければ、CALL命令に後続してコマンドパケットを書いておけばAPIが利用できる。さらに起動時のEBPはAPIの呼び出しアドレスが代入されているので、EBPを変更しなければCALL(EBP);でAPIが呼べる。この辺はごく小規模のアプリのためのささやかな仕組みである。
-*** (3) ぐいぐい00との違いなど(2)+*** (3) ぐいぐい00との違いなど(2) [#c34e1139]
-どうやらコンソールに"Hello, world\n"と表示するだけのアプリであれば、27バイトで書けそう。このうちの13バイトは表示するためのメッセージ部分で、x86のコードはAPIを呼び出すためのCALL命令(2バイト)だけである。APIパケット列からメッセージ分を差し引くと6バイト。そして実行ファイルのヘッダなどが残りの6バイトである。ぐいぐい00時代には考えられなかったサイズである。もちろん小さすぎで圧縮は効かない(笑)。 -どうやらコンソールに"Hello, world\n"と表示するだけのアプリであれば、27バイトで書けそう。このうちの13バイトは表示するためのメッセージ部分で、x86のコードはAPIを呼び出すためのCALL命令(2バイト)だけである。APIパケット列からメッセージ分を差し引くと6バイト。そして実行ファイルのヘッダなどが残りの6バイトである。ぐいぐい00時代には考えられなかったサイズである。もちろん小さすぎで圧縮は効かない(笑)。
--6(ヘッダなど)+2(CALL EBP)+4(APIパケット)+13(メッセージ)+2(APIパケット)=27 --6(ヘッダなど)+2(CALL EBP)+4(APIパケット)+13(メッセージ)+2(APIパケット)=27
Line 27: Line 28:
-27バイトでリリースできた: hellok0.g01 ([OSASK 00101]) -27バイトでリリースできた: hellok0.g01 ([OSASK 00101])
-*** (4) 自作自演のQ&Aによる解説+*** (4) 自作自演のQ&Aによる解説 [#be58ad11]
-Q:アプリが小さくなることをことさらに強調しているように見えるが、それはそれほどすごいことなのか? -Q:アプリが小さくなることをことさらに強調しているように見えるが、それはそれほどすごいことなのか?
-A:OSASKの目指している方向性を極限まで進めたものと考えてほしい。小さいことがすべてに優先するほど重要であるかどうかは[[K]]にも分からない。しかしアプリが小さく書けるということは間違いなくOSASKの特徴の一つであって、そしてどうせやるなら限界まで小さくしてみたい、そういう極限を一度見てみたい、と考えた。・・・小さくすることで*もしも*何かを失ったのなら(たとえば拡張性が損なわれたとか、以前よりも開発しにくくなったとか、動作が遅くなったなど)、それを克服するための方法を考えてさらに発展を目指すのみである。OSASK-HB的な発想としては何でもやってみるしかない。実験しないうちからあれこれ言っていては進歩はない。 -A:OSASKの目指している方向性を極限まで進めたものと考えてほしい。小さいことがすべてに優先するほど重要であるかどうかは[[K]]にも分からない。しかしアプリが小さく書けるということは間違いなくOSASKの特徴の一つであって、そしてどうせやるなら限界まで小さくしてみたい、そういう極限を一度見てみたい、と考えた。・・・小さくすることで*もしも*何かを失ったのなら(たとえば拡張性が損なわれたとか、以前よりも開発しにくくなったとか、動作が遅くなったなど)、それを克服するための方法を考えてさらに発展を目指すのみである。OSASK-HB的な発想としては何でもやってみるしかない。実験しないうちからあれこれ言っていては進歩はない。
-Q:なんだかトリッキーな感じを受ける。これで小さくなるのはhelloくらいなのでは? -Q:なんだかトリッキーな感じを受ける。これで小さくなるのはhelloくらいなのでは?
-A:確かにトリッキーというか、せこい手法かもしれない(起動時に都合の良いレジスタ初期値になっているとか)。でもこの仕様にするための代償(レジスタ初期値を準備しておくこと)はわずかなものだし、512バイトアプリコンテストのようなちょっとしたアプリを作って楽しむ際には、こういうささやかなトリックが非常にありがたく感じられる。というかさしてデメリットがあるわけじゃないんだからこれでいいのでは? -A:確かにトリッキーというか、せこい手法かもしれない(起動時に都合の良いレジスタ初期値になっているとか)。でもこの仕様にするための代償(レジスタ初期値を準備しておくこと)はわずかなものだし、512バイトアプリコンテストのようなちょっとしたアプリを作って楽しむ際には、こういうささやかなトリックが非常にありがたく感じられる。というかさしてデメリットがあるわけじゃないんだからこれでいいのでは?
 +-Q:なんか細かいリリースが多くて何がなんだか分からないんだけど?
 +-A:分からないときは無視しているのが一番。何ができるようになったのか知りたければ、適当に.g01アプリを動かしてみればいい。そしてそのときに動かし方が分からないのならMLで質問すればいい。その程度で十分。ただし質問に答えてもらった場合は、同じ質問や自分が答えられるような質問が他の人から後日出た場合、自分が率先して回答するぞ、くらいの意気込みは必要(全く同じ質問であれば、MLの番号を示して誘導するだけでも立派な回答)。
-* こめんと欄+* こめんと欄 [#x0b156f5]
- あとで探すときに便利かもしれないので一応メモ:「ぐいぐい01」の実行環境やサンプルアプリは[OSASK 00101]以降でリリースされています。 http://osaskml.hideyosi.com/osaskml/200804/ -- [[K]] &new{2008-04-28 (月) 08:12:25}; - あとで探すときに便利かもしれないので一応メモ:「ぐいぐい01」の実行環境やサンプルアプリは[OSASK 00101]以降でリリースされています。 http://osaskml.hideyosi.com/osaskml/200804/ -- [[K]] &new{2008-04-28 (月) 08:12:25};
#comment #comment
« Prev[4]  Next »[5]