* ぐいぐい01に関するメモ-22 -(by [[K]], 2009.01.09) -メモのうち重要な部分をそのうちまとめてまともなページを作る *** (37) 2009.01.09以降の近況 -以前の近況ページ([[GUIGUI01/memo14]])がもう長くなってきたので、以降はこっちに書くことにします、気分も新たに。 -現在efg01の仕様変更は予定していません。検討しているのは、仕様拡張だけです。ただし.g01アプリのほうは、仕様変更したいことがいくつかあります。 --仕様変更=従来のものが動かなくなるような改造 --仕様拡張=従来のものはそのまま動くような改造 -現在、golib00はコマンドラインの一部をファイルに書いておく機能を有しています。またobj2bimのルールファイルも本来はコマンドラインにも書けるようにしておくべきだと思っています。しかしこういうことを個別のアプリで不統一に実現するべきではないと僕は考えています。 -ということで、すべてのコマンドで incl:ファイル名 という記述を許すことにして、これが指定された場合は、コマンドラインのその部分をファイルの内容で置き換えさせることにしようかと思っています。こうすることで外部ファイルに置いた内容も「ぐいぐい01」の強力なコマンドライン取得APIだけで統一的に扱えるようになるわけです。またそこに記載されたファイルパスもアプリには見えなくなり、とても安全になります(ここでいう安全は、OSASK的な意味での安全であって、世間一般のセキュリティ感覚とは別)。 -これと前後して、コマンドライン中に /* */ の表記も許すことにしようと思っています。 //: は簡易コメントです。そしてこれをやると、たぶんobj2bimのルールファイルの書式はかなり変わります。 format { code { align:1 logic:0 file:0x20 } data { align:8 logic:stack_end file:code_end } /* stack_endなどはアプリの中でdefineする機能を付けて解決 */ /* fomrat.code.align:1 でも同じこと */ } file: { ../z_tools/guigui01/golibc.lib /* ../z_tools/guigui01/gg01libc.lib */ /* このセクションはin:の後に指定したものと見なされる */ } label: { startup } -ちなみに上記をわざわざ別ファイルにしてincl:しなければいけないということではないので、Makefile等を使っているのなら、 RULEFILE = incl:guigui01.rul -の代わりに、 RULEFILE = format.code { align:1 logic:0 file:0x20 } \ format.data { align:8 logic:stack_end file:code_end } \ file:../z_tools/guigui01/golibc.lib label:startup -と書くこともできるようになります(そういう意味ではもはやRULEFILEというMakefile変数名は適切ではないですが)。 -それと現在、obj2bimはfixobjという機能も有していますが、一つのアプリに複数の機能を持たせてもいい事はないので(usageが長くなって分かりにくい)、この機能をfixobj.g01で独立させて、obj2bimは本来のリンク処理専用にするつもりです。obj2bimはこれで2KBくらい小さくなるのではないかと思います。golib00も小さくなるでしょう。というか多分みんなnaskで.objを生成しているので、今ではfixobjなんてやっている人いないでしょうね・・・。 ---- -2009.01.10 -現在文字コードを(互換性を乱さない範囲で)改良したらどうなるか研究中。このアイデアの細部は僕の考案物ですが、大枠はneriさんのほうが何日も先です。・・・なおここに出ているabcdw012は仕様変更を伴わない単なる仕様拡張なので、急いでリリースしたりする予定はありません。だからもうすぐか?なんて期待しないでください(笑)。 -やっぱりこの表がないと楽しくないので(笑)書いておくことにします。 -以下にここまでの成果(多分これが限界でもあると思う)を書いておきます。[2009.01.14更新] | |hello |hello-c |chars |echo |echo-c |cpy |cpy-c |makefont-c |sjisconv-c| |abcdw006用 |RIGHT:27 |RIGHT:86 |RIGHT:33 |RIGHT:? |RIGHT:156 |RIGHT:? |RIGHT:612 |RIGHT:691 |RIGHT:912| |abcdw007用 |RIGHT:18 |RIGHT:69 |RIGHT:14 |RIGHT:13 |RIGHT:71 |RIGHT:? |RIGHT:342 |RIGHT:347 |RIGHT:507| |abcdw008用 |RIGHT:18 |RIGHT:69 |RIGHT:14 |RIGHT:''6''|RIGHT:51 |RIGHT:''45''|RIGHT:138 |RIGHT:207 |RIGHT:395| |abcdw009用 |RIGHT:17 |RIGHT:68 |RIGHT:''13''|RIGHT:''6''|RIGHT:''50''|RIGHT:''45''|RIGHT:134 |RIGHT:203 |RIGHT:389| |abcdw012用 |RIGHT:''16''|RIGHT:''67''|RIGHT:''13''|RIGHT:''6''|RIGHT:''50''|RIGHT:''45''|RIGHT:134 |RIGHT:203 |RIGHT:389| |abcdw014用 |RIGHT:''16''|RIGHT:''67''|RIGHT:''13''|RIGHT:''6''|RIGHT:''50''|RIGHT:''45''|RIGHT:''119''|RIGHT:''188''|RIGHT:''376''| |COM64plus用|RIGHT:18? |検討中? |RIGHT:14 |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:?| |DOS用 |RIGHT:22 |RIGHT:? |RIGHT:17 |RIGHT:19 |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:?| -100バイト未満のアプリ一覧 |echo|RIGHT:6バイト|コマンドライン引数のエコーバック| |chars|RIGHT:13バイト|キャラクターコード0x20から0x7eを出力| |hello|RIGHT:16バイト|コンソールに"hello, world\n"を出力| |cpy|RIGHT:45バイト|ファイルのコピーと連結とtek圧縮解除| |makefont|RIGHT:72バイト|テキストデータからフォントデータを作る| |calc1|RIGHT:86バイト|コマンドライン計算機(整数演算のみ)| -512バイト以下で有用なアプリ一覧 |hexdump|RIGHT:168バイト|ファイルの16進ダンプ表示| |calendar|RIGHT:358バイト|カレンダー表示| ---- -2009.01.11 -現在考えている一般公開プラン:半年おきの更新。夏至と冬至。 -毎月リリースは結局アプリの入れ替えレベルの(ほとんど無意味な)リリースに終わることも少なくなかったので、これは再開したくない。でも年に一度はあまりに間隔が長すぎる。それでこれくらいならいいかなと。 -ちょっとした思い付きで、カレンダーアプリを作りました(夏至とかを話題にしたせいで思いついた)。372バイトです。指定した月だけ表示するのと、1年分全部表示するのを選べます。「ぐいぐい01」アプリの中では、なかなかに実用的といえるアプリです。またフルアセンブラ化したアプリとしても最大記録です。1年分を出力させると2KBを超えるのですが、372バイトのプログラムから2KBも出てくると、なんだかお得感があります(笑)。このアプリのDOS版とかを作ってサイズ比較すると、helloやcharsやechoよりも現実的かもしれません。僕はあまりやる気がしませんが(というか負ける気がしない)。 http://osask.jp/files/ --こんなのが出ます。 >efg01 calendar.g01 2009 1 Jan 2009 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ---- -2009.01.14 -abcdw013を開発中。もちろん今回もバイナリレベルでの上位互換は確保。.g01限定の簡易圧縮形式を導入して、アプリを13~17バイトくらい小さくします。 --これはどういうことかというと、tek圧縮では基本的に一般のデータフォーマットとの誤認を避けるために、15バイトにも及ぶ非常に長いヘッダを採用しています。これは基本的にはいい設計思想だと今も思っているので変える気はないのですが、一方で、アプリを究極的に小さくしたいという目的のためには、少々じゃまになっています。 --またabcdw012までの方法で.g01アプリを圧縮すると当然2バイトのg01シグネチャも圧縮することになるのですが、これのせいで結果的にファイル全体の傾向の予測にノイズが入るようなことになって、圧縮率が(わずかですが)下がっています。そこで、ヘッダ部分は圧縮対象からはずして、ヘッダ以降のみを圧縮してやるという方式を導入します(もちろん従来の形式もそのまま使えます)。 --そうするとg01ヘッダがある時点でフォーマット誤認の心配はないので、15バイトのヘッダはただのゴミです。ということでカットします。こうしてこのカット分だけアプリが小さくなるというわけです。 ---- -2009.01.29 -.g01にもsprintf的なものを導入したほうがいいんじゃないかと仙台で思った。でも本当にそうなのか検討する時間がない・・・。 * こめんと欄 - 急いでリリースすることはないはずだったのに、結局abcdw012をアップロードしました。 http://osask.jp/files/ まあhelloの最小記録更新記念ってことで。 -- [[K]] &new{2009-01-10 (土) 20:05:36}; - abcdw013をアップロードしました。ドキュメントはhideyosiさんの苦労をしのんで改良しましたが、はたして役に立ってくれるでしょうか・・・。 -- ''K'' &new{2009-01-15 (木) 19:16:01}; - abcdw013にはバグがあったので、バグを直してabcdw014を作りました。 -- ''K'' &new{2009-01-15 (木) 22:19:16}; - abcdw015をアップロードしました。要望の多かったキー入力に対応しています。まあまだいたらないところはいろいろありますが、これでWin/Linuxで共通に使えるバイナリをコンパクトに作るという点では、コンソールアプリ限定なら、少しは使えるはずです。 -- ''K'' &new{2009-09-23 (水) 17:43:58}; #comment