memo0004
の編集
http://osecpu.osask.jp/wiki/?memo0004
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
BracketName
FormattingRules
FrontPage
Fulyn
Fulyn-v2
Fulyn_Samples
Help
InterWiki
InterWikiName
InterWikiSandBox
K
KOR_PIT8254
KWVM.NET
Liva
MANA
MenuBar
OSECPU_FPGA
PG_MANA
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
hikalium
hikarupsp
hikarupsp_ELCHNOS
hikarupsp_ELCHNOS_IDE
hikarupsp_FrontEndCode
hikarupsp_WebCPU-VM
hikarupsp_WebCPU-VM_internal
hikarupsp_study_hh4
impressions
impressions0000
jpag0000
jpag0001
jpag0002
jpag0003
jpag0004
jpag0005
lambdalice
mandel59
members
memo0000
memo0001
memo0002
memo0003
memo0004
memo0005
memo0006
memo0007
memo0008
memo0009
memo0010
osask
osecpu4android
page0000
page0001
page0002
page0003
page0004
page0005
page0006
page0007
page0008
page0009
page0010
page0011
page0012
page0013
page0014
page0015
page0016
page0017
page0018
page0019
page0020
page0021
page0022
page0023
page0024
page0025
page0026
page0027
page0028
page0029
page0030
page0031
page0032
page0033
page0034
page0035
page0036
page0037
page0038
page0039
page0040
page0041
page0042
page0043
page0044
page0045
page0046
page0047
page0048
page0049
page0050
page0051
page0052
page0053
page0054
page0055
page0056
page0057
page0058
page0059
page0060
page0061
page0062
page0063
page0064
page0065
page0066
page0067
page0068
page0069
page0070
page0071
page0072
page0073
page0074
page0075
page0076
page0077
page0078
page0079
page0080
page0081
page0082
page0083
page0084
page0085
page0086
page0087
page0088
page0089
page0090
page0091
page0092
page0093
page0094
page0095
page0096
page0097
page0098
page0099
page0100
page0101
page0102
page0103
page0104
page0105
page0106
page0107
page0108
page0109
pagenames
populars
seccamp2013
seccamp2014
seccamp2017
ttwilb
ttwilb-asmi
yao
* Kの開発メモ #0004 -(by [[K]], 2013.04.23) -ここは川合の開発の進捗などをレポートするところです。 ** 2013.04.23 Tue -今日は定数同士ではない演算の最適化パターンをいくつか登録しました。 --!(R10 < 100) が R10 >= 100 に変換されるとか(→これはif文のサポートのためにほしかった)。 --R00 = R01 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; は R00 = R01 + 55; になるとか。 --R01 = R02 * 0; が R01 = 0; になるとか。 --パターン方式なので、複雑な書き方をするとあきらめてしまいます。まあアセンブラなのでその程度で十分かなーと。 -現在のサイズ: --osecpu.exe : 10.0KB --osectols.exe : 14.0KB -osectolsが大きくなっていますが、osecpu.exeのデバッグ用のツールまで内包したので、大きくなるのは気にしないことにしました。どうせこれはバイトコードに移植してしまうので、大きくなってもOSECPUの移植性に影響しません。 -今日の成果: --http://osecpu.osask.jp/download/osecpu031a.zip ** 2013.04.24 Wed -時間がなくてなかなかif文に取り掛かれません・・・。 -今日の成果: --(少しバグ取りした程度です。) --http://osecpu.osask.jp/download/osecpu032a.zip ** 2013.04.25 Thu -よしif文ができた! --「&&とか||がなくて、&と|で代用しなければいけない」ってあたりは正直微妙だけど、x86用のASKAは&とか|すら全部できなかったわけで、あの頃と比べればこれでも格段に便利だ! -そろそろアプリを作って、このサイトをもうちょっととっつきやすくしないとなあ・・・。 -今日の成果: --http://osecpu.osask.jp/download/osecpu033a.zip ** 2013.04.26 Fri -アプリを少し整理しました。 -今日の成果: --http://osecpu.osask.jp/download/osecpu034a.zip //-app0016.askですが、これをまじめにフロントエンドエンコードしたら30バイトになることを確認しました。もちろんシグネチャ4バイトは削っていません。 //--ちなみに現状は106バイトというとんでもないことになっています(笑)。 // OSECPU_HEADER(); // // for (R02 = 1000000; R02 != 0; R02--) { // j:R02 // R01 = 0; // for (R00 = 10000; R00 != 0; R00--) { // sum:R01, i:R00; // R01 += R00; // } // } //--これで30バイトってことは、シグネチャ以外の正味の部分は26バイトというわけで、x86の32bitモードと比較すれば、6バイトしか多くない。 ** 2013.04.30 Tue -昨日作ってしまったosectolsのバグをやっつけた。 -現在はosecpu.exeの一部をOSECPU-ASKAで書くという、おもしろいことをやっているところ。 --機種依存しない部分は、osecpu.exeから追い出したいと思っているので。 --というか昨日はこれをやろうとしてosectolsにバグを作ってしまったのだ。 -やっとapp0000だけならフロントエンドコードでも実行できるようになった。これからサポートできるフロントエンドコードを増やしていく予定。 --実際にosecpu.exeの下請けとして実用コードを書いてみると、OSECPU-ASKAの微妙なバグとか、osecpu.exeのJITコンパイラのバグとかがぽろぽろと見つかる。今はバグを取らずに回避して書いているけど、そのうち直したい。 ** 2013.05.01 Wed -とりあえずapp0002まではフロントエンドコード対応した。もう少しいじって、いったんリリースするつもり。不安定リリースだけど。 -さっきふと気づいたこと。OSECPUでは機械語が三項形式になっているけど、これだと単純な代入命令(CP命令)はあまり使わないということが判明。まあ自分の体験談でしかないけど。 --http://www.mztn.org/lxasm64/freq64_32.html これとは大違いだなあ。 --レジスタがたくさんあることも関係しているかもしれない。 ** 2013.05.02 Thu -テストアプリは全部フロントエンドコード対応した。 -APIのレジスタの使い方を元に戻したので、コードリビジョンをさらに増やした。 -今日の成果: --http://osecpu.osask.jp/download/osecpu035a.zip --アプリのサイズがまともになっています。まあ今までがひどかっただけではありますが。 --osecpu.exeから機種依存しない部分を切り離す改造を入れています。 ** 2013.05.03 Fri -関数呼び出しの仕様を整理していたら、不満が爆発。OSECPUがいろいろと気に入らない。 --Pxxはどうして32本しかないんだ。やっぱり64本必要だ。 --プログラムカウンタはP00じゃなくてP3Fであるべきだ。 --R00~R0Fがテンポラリレジスタなのは使いにくい。R30~R3Eがテンポラリになるべきだ。 -今ならいくらでも修正できるのだから、何度でも修正して考察して、納得いく仕様を探すべきだ。 ** 2013.05.07 Tue -現在ちまちまと上記改良を適応中。 -やっとバグが取れて動くようになった。 -このレジスタの使い方には満足しているので、当分変えない予定。 ** 2013.05.08 Wed -ちょっと時間ができたので、いろいろ書いておく。 -まず、OSECPUはJavaよりもセキュアかどうかという点に関しては、現状では明らかに負けているし、将来についても追い越せる保証はない。 --まあほぼ同程度には追いつけるかもしれない。 -Javaと違うところといえば、レジスタマシンであることと、ガーベージコレクションを使わないことだろうと思う。あとポインタもある。 --これが機能的な特徴かな。 --だからOSECPUは、Javaもどきを作ったというよりは、C言語もどきを目指しているといった方が近い。 --C言語のプログラミングスタイルの延長で、相応のセキュアさを実現しよう、と。 -性能面での特徴としては、Javaよりも実行開始までが高速で、実行速度もそんなに負けないんじゃないかと思う。 --これはベンチマークしないと比較できないなあ。 -あとはosecpu.exeもアプリも極端に小さい。 -移植は容易だと思う。 ** 2013.05.10 Fri -昨日はループのフロントエンドバイトコードを改良した。 -あとは関数呼び出しのフロントエンドバイトコードを改良したい。 -そこまでできたら一区切り。 -OSECPUを機能密度の高さでアピールするとしたら、何で示すのが分かりやすいかな。 --hello対決:予定18バイト(シグネチャが4バイトなので) --chars対決:予定13バイト(シグネチャが4バイトなので) --カラーグラデーション対決(app0006のこと): --bball対決: --invader対決: ** 2013.05.14 Tue -カラーグラデーションは、28バイトで書けそうなことが分かった。APIの仕様をつめれば27バイトまでいくかもしれない。 --と思ったら24バイトになってしまった。われながらすごい。APIの仕様をつめれば23バイトも可能じゃないかと思う。 -いろいろできた。でもまだテストが終わってないのでリリースできない。アプリの小ささが我ながら驚異的。 ** 2013.05.15 Wed -さらにもう少し改良して、リリースできるところまで来た。 -今回のバージョンアップポイントは、機能密度を追求したこと。 --カラーグラデーションは22バイトになった。APIの仕様を詰めれば21バイトも可能だと思う。シグネチャが4バイトもあるのにこのサイズにできたことはかなりがんばっていると僕は思う。 -今日の成果: --(今夜アップロード予定) --http://osecpu.osask.jp/download/osecpu036a.zip ** 2013.05.16 Thu -長い間サポートしてこなかった(整数)除算命令をついにサポート。 -OSECPUにラインを引くAPIを追加して、bball対決をしました。bball対決というのは、以下のような画像を描くのにどのくらいの大きさのアプリを書かなければいけないのかというものです。 ~ http://osecpu.osask.jp/download/bball.png 第一世代OSASK 199バイト TownsOS 185バイト MS-DOS/NEC PC-9801 114バイト Human68k+IOCS 116バイト MSX-DOS/MSX2 140バイト 「はりぼてOS」 350バイト(改良の余地あり、参考記録) OSECPU 92バイト --OSECPUは2位と1.24倍もの差をつけて圧勝しています! -他にもアプリを書いたのですが、とにかく何を書いても小さくなってくれる感じなので、楽しくてたまりません。 ~ http://osecpu.osask.jp/download/app0022.png --これを表示するためのプログラムは27バイトです。 -今日の成果: --http://osecpu.osask.jp/download/osecpu037a.zip ** 2013.05.17 Fri -あれこれ言い訳をして、中途半端になるのはきっとよくない。だからこうしたい。 --シグネチャを2バイトにする。 --API番号をまともにする。 -まともにしたらこうなった。 --グラデーション(app0006): 28→23 --グラデーション(枠なし、app0020): 22→19 --XORのlines(app0022): 27→22 --bball(app0023): 92→86 --app0019: 2254→334 -今日の成果: --http://osecpu.osask.jp/download/osecpu038a.zip -おっと、app0019は簡単に313バイトに減らせることが分かった。・・・もっとがんばればもっとできるかもしれない。 ** 2013.05.19 Sun -改良方法を複数思いついた。これをやればいずれのアプリもさらに小さくなる予定。 --グラデーション(app0006): 23→18? --グラデーション(枠なし、app0020): 19→13? --XORのlines(app0022): 22→21? --bball(app0023): 86→71?? --app0019: 313→??? -時間ができたらこの改良を適用したい。 ** 2013.05.20 Mon -上記の数字はほぼ達成。でもフロントエンドからバックエンドに変換するプログラムがまだできてない。 --グラデーション(app0006): 18 --グラデーション(枠なし、app0020): 13 --XORのlines(app0022): 20 --bball(app0023): 71 --app0019: 313→??? -自分で言うのもなんだけど、これ以上の改善は不可能なんじゃないかと思う。基本エンコードをhh4からレンジコーダに変えたらあるいはもう少し減るかもしれないとちょっと思うけど、でもそれも容易ではなさそうな・・・。 --そしてレンジコーダを入れたら、メモリダンプから中身を読むのはほぼ不可能になりそう。まあtek5圧縮したら同じくらい読めなくなっているけど。 --ちなみにapp0019以外は、tek5するとかえって増えてしまう。つまりそれくらい既に高密度になっている。 ** 2013.05.21 Tue -app0019はtek5しなくても702バイトで書けるようになり、tek5すると297バイトになる模様。300を切れたのはうれしい。 --というか無圧縮でも702バイトって、それは結構すごいんじゃないか? -僕は学生の時に雑誌に載っているバイナリダンプをせっせと入力していたのだけれども、あの時代にこの機能密度が発明されていたらなあ。僕は入力量を大幅に減らせたんじゃないかと思う。 -今日の成果: --http://osecpu.osask.jp/download/osecpu039a.zip ** 2013.05.22 Wed -(1) そうかー、03/19から作ってきたわけだから、約2ヶ月でここまでできたのかー。僕にしてはすごくハイペースだなあ。 -2ヶ月の間に、CPUの仕様の設計と改良、JITコンパイラの開発、アセンブラ(コンパイラ?)の開発、サンプルアプリの開発、機能密度の追及までやってしまった。言語処理系に関して言えば、今利用しているもののうち、プリプロセッサ以外は全部作ったことになる。 -しかもOSECPUは僕の今までの集大成みたいなところもある。第一世代OSASK、第二世代OSASK、第三世代OSASKの設計、ASKAの設計、nask、GO、SGOの設計、tek、blike、エミュレータ的要素(JITコンパイラ)のすべての要素が入っている。そして間違いなく今までで最高の機能密度だ。最高傑作であることは言うまでもない。 -(2) app0024(旧app0019)は、273までは減らせそう。無圧縮では681。もちろんOSECPU側のさらなる改良も必要。 --256に行けたらすごいと思ったけど、さすがにそれは無理っぽい(笑)。 ** 2013.05.24 Fri -ver.0.40へのtodoをまとめて、詳細を設計した。 --PADDLMEM, PADDSMEMという複合命令のサポート --関数記述支援 --文字列表示APIをまともにする(9バイトでcharsが書けるようになる?!) ** 2013.05.27 Mon -関数記述支援のためにENTER/LEAVE命令を作ってみたものの、なんか動作がおかしい。どうなっているんだ・・・。 ** 2013.05.28 Tue -昨日のバグ: JITコンパイラが生成するx86コードでスタック操作がおかしくなっていた。そりゃ死ぬよな・・・。 -app0024が273まで減らせそうとか書いたけどそれは無理っぽい。280くらいが限界かと思われる。無圧縮では680。 --なんかくやしくて小さくする方法を探したけど、そう簡単には改良できそうにないので保留に。 -charsの9バイトと、helloの16バイト版を実装。まあいろいろと問題はあるんだけど、とりあえずということで。 --helloは末尾に!を付けています(efg01版では付けていなかった)。それで16バイトです。付けなければ15バイトにできます。ASCIZ文字列に対して、ファイル終端なら0x00を省略できるという仕様を追加したためです。 --charsの世界一記録をついに奪還。 -システムライブラリが大きくなりすぎだよな・・・。どうしたものかなあ。まずは重複部分をまとめて小さくする努力をするべきかな。 -今日の成果: --http://osecpu.osask.jp/download/osecpu040a.zip ** 2013.05.29 Wed -1週間くらい前から、Livaさんという人に開発を手伝ってもらっています(今はここ以外のところで連絡を取り合っています)。まだダウンロードしてちょっと遊んでもらっている程度ですが、「ここをこうしたらどうか」みたいな提案ももらっていて、とても助かっています。 -charsとhelloをさらに小さくしたので、今夜リリース予定です。 -LivaさんがMacOSへの移植を開始した模様。とりあえずコンソールアプリはすでに動くらしいです。 -MacOSのgccで、Cの関数をアセンブラ(というか機械語)から呼ぼうと思ったら苦戦。結局、本来の引数以外にも引数が必要らしく、末尾にEBXの値を積んだらおとなしくなりました。 --末尾=最初にPUSH。 --https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html#//apple_ref/doc/uid/TP40002492-SW4 --ここにはEBXを勝手に使うなみたいなことは書いているけど(Table 3)、引数リストにも追加しろなんて書いてないよう。それで失敗の連続。 --しかしLivaさんが偶然EBXを積んでみたら通ったと教えてくれて、無事に解決したのでした。 --今上記ドキュメントを読み直したら、スタックのアラインがどうのこうのって書いてあるから、そっちが原因だったのかも。 --結局アラインだけの問題でした。めでたしめでたし。・・・それならSegmentationFaultじゃなくて、AlignmentErrorとかのエラーメッセージにしてくれればいいのに・・・。 -今日の成果: --http://osecpu.osask.jp/download/osecpu041a.zip --http://osecpu.osask.jp/download/osecpu042a.zip --http://osecpu.osask.jp/download/osecpu043a.zip ** こめんと欄 -CLEではC言語ルーチンを呼び出す直前にスタックアラインしてiます。 -- ''neri'' SIZE(10){2013-05-30 (木) 10:01:37} -途中でエンター押してしまった。。ちなみにCLEはOSX版が最初のターゲットで当時はブログ書いてなかったのでその辺りの記事は存在しません。 -- ''neri'' SIZE(10){2013-05-30 (木) 10:03:49} -おお!さすが!!・・・やっぱり先人は違うなあ。 -- ''K'' SIZE(10){2013-05-30 (木) 10:40:37} #comment
タイムスタンプを変更しない
* Kの開発メモ #0004 -(by [[K]], 2013.04.23) -ここは川合の開発の進捗などをレポートするところです。 ** 2013.04.23 Tue -今日は定数同士ではない演算の最適化パターンをいくつか登録しました。 --!(R10 < 100) が R10 >= 100 に変換されるとか(→これはif文のサポートのためにほしかった)。 --R00 = R01 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; は R00 = R01 + 55; になるとか。 --R01 = R02 * 0; が R01 = 0; になるとか。 --パターン方式なので、複雑な書き方をするとあきらめてしまいます。まあアセンブラなのでその程度で十分かなーと。 -現在のサイズ: --osecpu.exe : 10.0KB --osectols.exe : 14.0KB -osectolsが大きくなっていますが、osecpu.exeのデバッグ用のツールまで内包したので、大きくなるのは気にしないことにしました。どうせこれはバイトコードに移植してしまうので、大きくなってもOSECPUの移植性に影響しません。 -今日の成果: --http://osecpu.osask.jp/download/osecpu031a.zip ** 2013.04.24 Wed -時間がなくてなかなかif文に取り掛かれません・・・。 -今日の成果: --(少しバグ取りした程度です。) --http://osecpu.osask.jp/download/osecpu032a.zip ** 2013.04.25 Thu -よしif文ができた! --「&&とか||がなくて、&と|で代用しなければいけない」ってあたりは正直微妙だけど、x86用のASKAは&とか|すら全部できなかったわけで、あの頃と比べればこれでも格段に便利だ! -そろそろアプリを作って、このサイトをもうちょっととっつきやすくしないとなあ・・・。 -今日の成果: --http://osecpu.osask.jp/download/osecpu033a.zip ** 2013.04.26 Fri -アプリを少し整理しました。 -今日の成果: --http://osecpu.osask.jp/download/osecpu034a.zip //-app0016.askですが、これをまじめにフロントエンドエンコードしたら30バイトになることを確認しました。もちろんシグネチャ4バイトは削っていません。 //--ちなみに現状は106バイトというとんでもないことになっています(笑)。 // OSECPU_HEADER(); // // for (R02 = 1000000; R02 != 0; R02--) { // j:R02 // R01 = 0; // for (R00 = 10000; R00 != 0; R00--) { // sum:R01, i:R00; // R01 += R00; // } // } //--これで30バイトってことは、シグネチャ以外の正味の部分は26バイトというわけで、x86の32bitモードと比較すれば、6バイトしか多くない。 ** 2013.04.30 Tue -昨日作ってしまったosectolsのバグをやっつけた。 -現在はosecpu.exeの一部をOSECPU-ASKAで書くという、おもしろいことをやっているところ。 --機種依存しない部分は、osecpu.exeから追い出したいと思っているので。 --というか昨日はこれをやろうとしてosectolsにバグを作ってしまったのだ。 -やっとapp0000だけならフロントエンドコードでも実行できるようになった。これからサポートできるフロントエンドコードを増やしていく予定。 --実際にosecpu.exeの下請けとして実用コードを書いてみると、OSECPU-ASKAの微妙なバグとか、osecpu.exeのJITコンパイラのバグとかがぽろぽろと見つかる。今はバグを取らずに回避して書いているけど、そのうち直したい。 ** 2013.05.01 Wed -とりあえずapp0002まではフロントエンドコード対応した。もう少しいじって、いったんリリースするつもり。不安定リリースだけど。 -さっきふと気づいたこと。OSECPUでは機械語が三項形式になっているけど、これだと単純な代入命令(CP命令)はあまり使わないということが判明。まあ自分の体験談でしかないけど。 --http://www.mztn.org/lxasm64/freq64_32.html これとは大違いだなあ。 --レジスタがたくさんあることも関係しているかもしれない。 ** 2013.05.02 Thu -テストアプリは全部フロントエンドコード対応した。 -APIのレジスタの使い方を元に戻したので、コードリビジョンをさらに増やした。 -今日の成果: --http://osecpu.osask.jp/download/osecpu035a.zip --アプリのサイズがまともになっています。まあ今までがひどかっただけではありますが。 --osecpu.exeから機種依存しない部分を切り離す改造を入れています。 ** 2013.05.03 Fri -関数呼び出しの仕様を整理していたら、不満が爆発。OSECPUがいろいろと気に入らない。 --Pxxはどうして32本しかないんだ。やっぱり64本必要だ。 --プログラムカウンタはP00じゃなくてP3Fであるべきだ。 --R00~R0Fがテンポラリレジスタなのは使いにくい。R30~R3Eがテンポラリになるべきだ。 -今ならいくらでも修正できるのだから、何度でも修正して考察して、納得いく仕様を探すべきだ。 ** 2013.05.07 Tue -現在ちまちまと上記改良を適応中。 -やっとバグが取れて動くようになった。 -このレジスタの使い方には満足しているので、当分変えない予定。 ** 2013.05.08 Wed -ちょっと時間ができたので、いろいろ書いておく。 -まず、OSECPUはJavaよりもセキュアかどうかという点に関しては、現状では明らかに負けているし、将来についても追い越せる保証はない。 --まあほぼ同程度には追いつけるかもしれない。 -Javaと違うところといえば、レジスタマシンであることと、ガーベージコレクションを使わないことだろうと思う。あとポインタもある。 --これが機能的な特徴かな。 --だからOSECPUは、Javaもどきを作ったというよりは、C言語もどきを目指しているといった方が近い。 --C言語のプログラミングスタイルの延長で、相応のセキュアさを実現しよう、と。 -性能面での特徴としては、Javaよりも実行開始までが高速で、実行速度もそんなに負けないんじゃないかと思う。 --これはベンチマークしないと比較できないなあ。 -あとはosecpu.exeもアプリも極端に小さい。 -移植は容易だと思う。 ** 2013.05.10 Fri -昨日はループのフロントエンドバイトコードを改良した。 -あとは関数呼び出しのフロントエンドバイトコードを改良したい。 -そこまでできたら一区切り。 -OSECPUを機能密度の高さでアピールするとしたら、何で示すのが分かりやすいかな。 --hello対決:予定18バイト(シグネチャが4バイトなので) --chars対決:予定13バイト(シグネチャが4バイトなので) --カラーグラデーション対決(app0006のこと): --bball対決: --invader対決: ** 2013.05.14 Tue -カラーグラデーションは、28バイトで書けそうなことが分かった。APIの仕様をつめれば27バイトまでいくかもしれない。 --と思ったら24バイトになってしまった。われながらすごい。APIの仕様をつめれば23バイトも可能じゃないかと思う。 -いろいろできた。でもまだテストが終わってないのでリリースできない。アプリの小ささが我ながら驚異的。 ** 2013.05.15 Wed -さらにもう少し改良して、リリースできるところまで来た。 -今回のバージョンアップポイントは、機能密度を追求したこと。 --カラーグラデーションは22バイトになった。APIの仕様を詰めれば21バイトも可能だと思う。シグネチャが4バイトもあるのにこのサイズにできたことはかなりがんばっていると僕は思う。 -今日の成果: --(今夜アップロード予定) --http://osecpu.osask.jp/download/osecpu036a.zip ** 2013.05.16 Thu -長い間サポートしてこなかった(整数)除算命令をついにサポート。 -OSECPUにラインを引くAPIを追加して、bball対決をしました。bball対決というのは、以下のような画像を描くのにどのくらいの大きさのアプリを書かなければいけないのかというものです。 ~ http://osecpu.osask.jp/download/bball.png 第一世代OSASK 199バイト TownsOS 185バイト MS-DOS/NEC PC-9801 114バイト Human68k+IOCS 116バイト MSX-DOS/MSX2 140バイト 「はりぼてOS」 350バイト(改良の余地あり、参考記録) OSECPU 92バイト --OSECPUは2位と1.24倍もの差をつけて圧勝しています! -他にもアプリを書いたのですが、とにかく何を書いても小さくなってくれる感じなので、楽しくてたまりません。 ~ http://osecpu.osask.jp/download/app0022.png --これを表示するためのプログラムは27バイトです。 -今日の成果: --http://osecpu.osask.jp/download/osecpu037a.zip ** 2013.05.17 Fri -あれこれ言い訳をして、中途半端になるのはきっとよくない。だからこうしたい。 --シグネチャを2バイトにする。 --API番号をまともにする。 -まともにしたらこうなった。 --グラデーション(app0006): 28→23 --グラデーション(枠なし、app0020): 22→19 --XORのlines(app0022): 27→22 --bball(app0023): 92→86 --app0019: 2254→334 -今日の成果: --http://osecpu.osask.jp/download/osecpu038a.zip -おっと、app0019は簡単に313バイトに減らせることが分かった。・・・もっとがんばればもっとできるかもしれない。 ** 2013.05.19 Sun -改良方法を複数思いついた。これをやればいずれのアプリもさらに小さくなる予定。 --グラデーション(app0006): 23→18? --グラデーション(枠なし、app0020): 19→13? --XORのlines(app0022): 22→21? --bball(app0023): 86→71?? --app0019: 313→??? -時間ができたらこの改良を適用したい。 ** 2013.05.20 Mon -上記の数字はほぼ達成。でもフロントエンドからバックエンドに変換するプログラムがまだできてない。 --グラデーション(app0006): 18 --グラデーション(枠なし、app0020): 13 --XORのlines(app0022): 20 --bball(app0023): 71 --app0019: 313→??? -自分で言うのもなんだけど、これ以上の改善は不可能なんじゃないかと思う。基本エンコードをhh4からレンジコーダに変えたらあるいはもう少し減るかもしれないとちょっと思うけど、でもそれも容易ではなさそうな・・・。 --そしてレンジコーダを入れたら、メモリダンプから中身を読むのはほぼ不可能になりそう。まあtek5圧縮したら同じくらい読めなくなっているけど。 --ちなみにapp0019以外は、tek5するとかえって増えてしまう。つまりそれくらい既に高密度になっている。 ** 2013.05.21 Tue -app0019はtek5しなくても702バイトで書けるようになり、tek5すると297バイトになる模様。300を切れたのはうれしい。 --というか無圧縮でも702バイトって、それは結構すごいんじゃないか? -僕は学生の時に雑誌に載っているバイナリダンプをせっせと入力していたのだけれども、あの時代にこの機能密度が発明されていたらなあ。僕は入力量を大幅に減らせたんじゃないかと思う。 -今日の成果: --http://osecpu.osask.jp/download/osecpu039a.zip ** 2013.05.22 Wed -(1) そうかー、03/19から作ってきたわけだから、約2ヶ月でここまでできたのかー。僕にしてはすごくハイペースだなあ。 -2ヶ月の間に、CPUの仕様の設計と改良、JITコンパイラの開発、アセンブラ(コンパイラ?)の開発、サンプルアプリの開発、機能密度の追及までやってしまった。言語処理系に関して言えば、今利用しているもののうち、プリプロセッサ以外は全部作ったことになる。 -しかもOSECPUは僕の今までの集大成みたいなところもある。第一世代OSASK、第二世代OSASK、第三世代OSASKの設計、ASKAの設計、nask、GO、SGOの設計、tek、blike、エミュレータ的要素(JITコンパイラ)のすべての要素が入っている。そして間違いなく今までで最高の機能密度だ。最高傑作であることは言うまでもない。 -(2) app0024(旧app0019)は、273までは減らせそう。無圧縮では681。もちろんOSECPU側のさらなる改良も必要。 --256に行けたらすごいと思ったけど、さすがにそれは無理っぽい(笑)。 ** 2013.05.24 Fri -ver.0.40へのtodoをまとめて、詳細を設計した。 --PADDLMEM, PADDSMEMという複合命令のサポート --関数記述支援 --文字列表示APIをまともにする(9バイトでcharsが書けるようになる?!) ** 2013.05.27 Mon -関数記述支援のためにENTER/LEAVE命令を作ってみたものの、なんか動作がおかしい。どうなっているんだ・・・。 ** 2013.05.28 Tue -昨日のバグ: JITコンパイラが生成するx86コードでスタック操作がおかしくなっていた。そりゃ死ぬよな・・・。 -app0024が273まで減らせそうとか書いたけどそれは無理っぽい。280くらいが限界かと思われる。無圧縮では680。 --なんかくやしくて小さくする方法を探したけど、そう簡単には改良できそうにないので保留に。 -charsの9バイトと、helloの16バイト版を実装。まあいろいろと問題はあるんだけど、とりあえずということで。 --helloは末尾に!を付けています(efg01版では付けていなかった)。それで16バイトです。付けなければ15バイトにできます。ASCIZ文字列に対して、ファイル終端なら0x00を省略できるという仕様を追加したためです。 --charsの世界一記録をついに奪還。 -システムライブラリが大きくなりすぎだよな・・・。どうしたものかなあ。まずは重複部分をまとめて小さくする努力をするべきかな。 -今日の成果: --http://osecpu.osask.jp/download/osecpu040a.zip ** 2013.05.29 Wed -1週間くらい前から、Livaさんという人に開発を手伝ってもらっています(今はここ以外のところで連絡を取り合っています)。まだダウンロードしてちょっと遊んでもらっている程度ですが、「ここをこうしたらどうか」みたいな提案ももらっていて、とても助かっています。 -charsとhelloをさらに小さくしたので、今夜リリース予定です。 -LivaさんがMacOSへの移植を開始した模様。とりあえずコンソールアプリはすでに動くらしいです。 -MacOSのgccで、Cの関数をアセンブラ(というか機械語)から呼ぼうと思ったら苦戦。結局、本来の引数以外にも引数が必要らしく、末尾にEBXの値を積んだらおとなしくなりました。 --末尾=最初にPUSH。 --https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html#//apple_ref/doc/uid/TP40002492-SW4 --ここにはEBXを勝手に使うなみたいなことは書いているけど(Table 3)、引数リストにも追加しろなんて書いてないよう。それで失敗の連続。 --しかしLivaさんが偶然EBXを積んでみたら通ったと教えてくれて、無事に解決したのでした。 --今上記ドキュメントを読み直したら、スタックのアラインがどうのこうのって書いてあるから、そっちが原因だったのかも。 --結局アラインだけの問題でした。めでたしめでたし。・・・それならSegmentationFaultじゃなくて、AlignmentErrorとかのエラーメッセージにしてくれればいいのに・・・。 -今日の成果: --http://osecpu.osask.jp/download/osecpu041a.zip --http://osecpu.osask.jp/download/osecpu042a.zip --http://osecpu.osask.jp/download/osecpu043a.zip ** こめんと欄 -CLEではC言語ルーチンを呼び出す直前にスタックアラインしてiます。 -- ''neri'' SIZE(10){2013-05-30 (木) 10:01:37} -途中でエンター押してしまった。。ちなみにCLEはOSX版が最初のターゲットで当時はブログ書いてなかったのでその辺りの記事は存在しません。 -- ''neri'' SIZE(10){2013-05-30 (木) 10:03:49} -おお!さすが!!・・・やっぱり先人は違うなあ。 -- ''K'' SIZE(10){2013-05-30 (木) 10:40:37} #comment
テキスト整形のルールを表示する