* Kの開発メモ #0006 -(by [[K]], 2013.07.30) -ここは川合の開発の進捗などをレポートするところです。 ** 2013.07.30 Tue -[[seccamp2013]]にて、OSECPUに関するドキュメント(PDF)を作ったので、公開します。 -http://herba.fragile-graciousness.net/ というサイトを見つけました。OSECPUでたくさん遊んでくれています。バグの指摘もあるので、ちょっと精査してみます。 --junkApi_inkeyのmode: おっと、確かにWikiが間違っている・・・今から直します! --このページの著者はなんとお呼びすればいいのだろうか・・・。 --JIT-VMで動かすより最終的にはネイティブコードにプリコンパイルした方が早そうな気がしますが何故JITなのでしょうか?: これは[[page0034]]の[Q0009]で回答しました。 --PALMEM0やPASMEM0の第三引数に間違えてRレジスタを渡すとコンパイラが落ちる: これは[[page0034]]の[Q0010]で回答しました。 --括弧の後の引き算がエラーになる: えー、まさかー、そんなことはないだろう・・・と思ったら本当にコンパイル失敗しました!・・・すみません、急いで直します。 --P30の扱い: これは[[page0034]]の[Q0011]で回答しました。 --junkApi_drawLineで水平、垂直線を引くとずれる: 確認中・・・ --ブロック崩しゲームはなかなかよくできています。重力っぽい落ち方をするのが新鮮です。ちなみにソースにはまだデバッグマクロが残っていて、それを削除した上で[[page0045]]の(2)のリリースモードで作り直すと、block.oseは1035バイトになります。うーん、これだけ凝ったゲームを作っても1KB程度なのか・・・。 ---ちなみに214行目の jnukApi_exit(0); を削除すれば、1023バイトになってついに1KBを切ります!(もちろん動作は変わりません) 参考:[[page0046]]の(1)の(5)。 -上記のdrawLineの問題について --試しました。確認用コードが非常によくできています。これはひどい!直さなくては。 --いや実は前からちょっとおかしいなと思う現象はあったのですが、いまいちよくわからなかったのです。確認用コードがあって助かりました。 --とりあえずosecpu.cのdxやdyの計算を素直にしたら直りました。 -上記の「括弧の後の引き算がエラーになる」について --osectolsの、減算の演算子を符号に解釈するルールを改良して修正しました。 -今日の成果: --http://osecpu.osask.jp/download/osecpu065d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --主にバグフィクスです。上記の修正も反映されています。 ** 2013.07.31 Wed -herbaさんが、またいっぱい不具合を発見! (勝手に呼び方を決めてしまってすみません) --fopenReadで読み込んだメモリからLMEMで読み込む際T_UINT8以外だとsecurity errorが発生する ---これは現状の仕様ということでお願いします。 --junkApi_openWinでxsizが160未満だとWindowが開かない ---これはご提案の通り、とりあえず160にする方向で検討します。 ---結局160化とかはやめて、Windowsまかせでうまくやって、openWin(1,1)もできるようになりました。 --junkApi_openWinでosecpuが開いたWindowがサイズ変更できる ---これはとりあえず、現状のままとさせてください。 --junkApi_fopenReadで開いたファイルが途中までしか読み込めない ---サイズ制限は実用上の問題がなければ、当面このままとさせてください。ただ、テキストモードでのオープンは非常にまずいですね。申し訳ありません。これは直します。 -herbaさんが不具合を見つけてくれるのはとても助かります! OSECPUがどんどんまともになっている気がします。 -ファイル周りは現状は暫定仕様なので、いろいろおんぼろですが、致命的なもの(テキストモードでしか開けないとか)は修正いたします! -今日の成果: --http://osecpu.osask.jp/download/osecpu066d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --主にバグフィクスです。上記の修正も反映されています。 ** 2013.08.02 Fri -今日はPLMEMやPSMEMのテストをする予定です。 --そういえばT_VPTRでもPADDは正しく動くのだろうか?ちょっと心配になってきた・・・。 -テストしました。 --PADDはうまくできていなかったので直しました。 --PLMEMやPSMEMもバグっていたので直しました。これで、PAPLMEMやPAPSMEMも含めて、うまく動くはずです。 -今日の成果: --http://osecpu.osask.jp/download/osecpu067d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --主にバグフィクスです。上記の修正も反映されています。 ** 2013.08.05 Mon -drawLineとdrawOvalを実装しました。 -今日の成果: --http://osecpu.osask.jp/download/osecpu068d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --drawLineとdrawOvalを実装しました。 ** 2013.08.07 Wed -今日の成果: --http://osecpu.osask.jp/download/osecpu069d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --osectolsにfcodeを追加しました。 --文字列のモード5の処理にバグがあったのを修正しました。 --osectolsのappackにバグがあったのを修正しました。 --OPSWP命令をサポートしました。 ** 2013.08.09 Fri -僕は今までがんばってOSECPUを作ってきた。そしてできたものはたった24KBのプログラムだった。でもこれは間違いなく僕の今までの作品の中では最高傑作だ。僕はこの24KBがほしかったんだ。たったそれだけのために、今まで何年苦労してきただろう。 -そしてこのOSECPUを見ていると、つくづく思うのは、「今までのOSASKとは一体なんだったのか」ということだ。今までのOSASKはできそこないだった。 ** 2013.08.14 Wed -現在の名称は「~CPU」となっていて新しいCPUブランドに見えてしまうので、末尾がVMになるように工夫したらどうかと言われました。確かにそうです。 -じゃあOSECPU-VMに名称を変更しよう。そうしよう。 ** 2013.08.15 Thu -近況: --takeutch-kemecoさんの「osecpu-basic」が毎日更新されてすごいことになっています。なんとベクトルや行列までサポート! ---https://github.com/takeutch-kemeco/osecpu-basic --IrisさんはOSECPU-VM上で動作するテキストエディタを作ってくれています。しかもこれが1KBを切りそうな勢いです! 第一世代OSASKのtviewc01ですらtek5圧縮を適用しても1KBを超えてしまったというのに・・・。 --[[lambdalice]]さんの関数型言語[[Fulyn]]が、ついにサンプルをコンパイルできるところまでできました! ---https://github.com/lambdalice/OSETools --lambdaliceさんとIrisさんがOSECPU-VMをたくさん使ってくれているので、昨日は1日で不具合が3つも見つかりました。最近はVMのバグは見つけにくくなってきたので、短期間でこんなにたくさん見つけてもらえたのはとても助かります。 ---セキュリティキャンプが終わったら、まとめて公開する予定です。 --「JITコンパイルでもステップ実行みたいなことができないか」といわれました。むうう。まあできるような気もするけど、いつやるかな・・・。 ** 2013.08.17 Sat -近況: --Irisさんのサイズ改善技術が神がかってきていて、テキストエディタは900バイトよりも小さくなる見込みです。 --なんでそんなに小さくなってしまうのか、正直なところもはや私にもよく分かりません。OSECPUが魔法みたいに思えることがあります。 ** 2013.08.19 Mon -x86はCPUのフロントエンドコードはCISC型で、内部のバックエンドコードはRISC型であるとよく言われます。 -じゃあOSECPUはどうでしょうか。OSECPUのバックエンドコードはRISC型だと思います。命令長が可変ではありますが。・・・それで、フロントエンドコードですが、CISC型という一言ではとても片付かないほど、1命令だけでできることは盛りだくさんです。VLS-CISCといった感じです(Very-Large-Scale: 大規模)。 -本日よりOSECPUは「第2.8世代OSASK」とも併称することにしました。もうOSASKブランドを冠するに恥じない品質です。 -http://www.ospn.jp/osc2013-fall/ に出展予定です。セミナーやLTは体力の自信がないので今回は見送ろうと思います。 -今日の成果: --http://osecpu.osask.jp/download/osecpu072d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --皆さん待望のIrisさん作のテキストエディタを同梱しています! ~ http://osecpu.osask.jp/download/editor130819a.PNG http://osecpu.osask.jp/download/othello130819a.PNG -テキストエディタ:881バイト、 オセロ:658バイト ** 2013.08.20 Tue -osecpu-basicの、このcommitメッセージが熱い! --https://github.com/takeutch-kemeco/osecpu-basic/commit/0329eaf9cc0b451eebe7e1ef604b22e0cc38b4c1 osecpuの潜在能力を考えれば、もっとコンパクトな .ask にできるはず。 (テキストエディターが1キロ以下で可能なのだから) --こういうことを言ってもらえるのは本当にうれしいです。 実を言うとこの osecpu-basic は kcube 書くのが目的で作り始めたので、 --なんですと!・・・確かに僕もosecpu版のkcube欲しいです・・・。 osecpuの処理速度は、(予想よりも遥に)十分すぎる程に高速なので --そうなのです。JITコンパイラって速くていいです。 ** 2013.08.21 Wed -OSECPU-VMにおけるオープンソース効果のメモ: --2013.03.19: OSECPU-VMのリリース開始(Windows版) --2013.05.29: MacOS版の開発が始まった --2013.07.25: Linux版のためのパッチが公開された --2013.08.15: JavaScrpit版の公開が始まった -やはり規模が小さいから移植しやすい?資料もまあまああるから?・・・この移植ペースは和製OS界では前例のない異例の速度です。 -作者としては、大助かりでとてもありがたいです! ** 2013.08.22 Thu -WebCPU_VMってどういう仕組みで動いているのかなーと見てみました。 --http://ko.sourceforge.jp/users/hikarupsp/pf/WebCPU_VM/scm/blobs/master/webcpu.js -フロントエンドコードの処理と冒頭のコメントを消してみたら、テキストは30KB程度になりました。これは思ったよりも小さい!osecpu.cなんて100KB以上ありますからね・・・。 -内部はJITコンパイラではなくインタプリタになっているようでした。面白いです。 ** 2013.08.23 Fri -オセロはさらに小さくなって569バイトになったものを見せてもらいました・・・Irisさんすごすぎです! -http://ja.wikipedia.org/wiki/OSASK が更新されて、第二世代、第三世代の内容が書き足されるのはいつだろうか・・・。 -みなさん ASKA が何年も前に擬人化されていたのを知っていますか? --http://osask.hideyosi.com/ のお絵かきコーナーより ~ http://osask.hideyosi.com/e/aska.jpg ~ -osecpu073dを開発中: --kemecoさんの改訂版Linuxパッチを導入。 --ラベル属性をpublicにするとおかしくなるバグを修正。 -今日の成果: --http://osecpu.osask.jp/download/osecpu073d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --Livaさんが見つけたデバッガの型情報テーブルのバグを修正しました。 --takeutch-kemecoさんの改訂版Linuxパッチを導入しました。 --ラベル属性をpublicにするとおかしくなるバグを修正しました(thanks: takeutch-kemecoさん)。 ** 2013.08.26 Mon -osecpu074dを開発中: --[[page0065]]の改造案を組み込んだだけ。とりあえず、機能密度は向上しています。 --app0024は258バイトになりました(今までは284バイトでした)。 -今日の成果: --http://osecpu.osask.jp/download/osecpu074d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --アプリの機能密度向上 ** 2013.08.27 Tue -オセロ、テキストエディタ、インベーダのサイズを見て思うのだけど、なんか僕は人間が作ってはいけないものを作ってしまったような気がしてならない。 -第二世代OSASKや第一世代OSASKはもはや完全に過去のものになっているわけだけど、しかしこれらだってかつては「ありえない」「奇跡」「頭おかしい」と言われるほどのものだった。これらよりも1割とか2割くらい小さくなるのなら、僕だって何とか受け入れられる。しかし半分以下ってどういうことだろう(インベーダ:[[page0066]])。 -一体何がよかったのか? --やっぱりレジスタが多いから? --C言語ではなくASKAで書けるようになったから?(確かにOSECPU-ASKAはx86-ASKAよりも書きやすい) --バイトコードに無駄が少ないから?(hh4エンコードがいいってこと?) --ラベル命令のおかげ? -正直、どれがどのくらい効いているのか、もはやさっぱりわからない。 ** 2013.09.02 Mon -rev2([[page0068]], [[page0067]])に向けて少しずつ作業中(キャンプが終わったので開発ペースはかなり下がっています、すみません)。 ** 2013.09.06 Fri -OSECPUの何がすごいって、以下の3つを僕が一人でそろえたことだと思う。別に僕じゃなくてもいいんだけど、とにかく一人でやったので、方針が一貫している。 --VM(osecpu.c):シンプルだけど必要な機能が一通りそろっている、しかもセキュア --専用アセンブラ:アセンブラだけどC言語風に書けるので、普通のアセンブラよりは大規模な開発に向いている --フロントエンドコード体系:世界最高の機能密度を達成 -これを半年でやったのも僕としてはすごい。しかしこれは半年でできたことがすごいというよりは、半年という枠が最初にあって、その中でできることをやっただけという感じだけど。 -ASKAの存在を軽く見ることはできるけれど、もしこれが無かったらオセロやテキストエディタをアセンブラで(=レジスタや命令長を意識して)作る気になれただろうか。だからASKAは機能密度の向上に大きく貢献していると思う。 ** 2013.09.14 Sat -今日の成果: --http://osecpu.osask.jp/download/osecpu076d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --アプリの機能密度向上 --syslib.oseの型推論に関するバグを修正しました(thanks: yaoさん) -kemecoさんからの指摘: #include "osecpu_ask.h" junkApi_malloc(P01, T_SINT32, 4096); LIMM(R01, 128); PADD(P02, T_SINT32, P01, R01); PADD(P02, T_SINT32, P01, R01); --こう書くとうまく行かないそうなんだけど、とりあえずver.0.76で試したら問題なさそうでした。ということでこの件は保留。 ** 2013.09.18 Wed -今日の成果: --http://osecpu.osask.jp/download/osecpu077d.zip --このアーカイブにはext_tols/がないので、osecpu064a.zipからコピーしてください。 --osecpu.exeのPLMEMに関するバグを修正しました(thanks: yaoさん)。 --osectols.exeの関数ラベルに関するバグを修正しました(thanks: yaoさん)。 -近況: --osecpu-basicはBASICな文法からC言語風の文法に徐々に変わって、ついに300コミットを超えました。すごい! --kemecoさんもテトリスを作り始めているようです。 ---https://gist.github.com/takeutch-kemeco/6607046 ---kemecoさんも、というのは、実は僕もIrisさんも作っていたからです。Irisさんのものはそのうちまたアーカイブに同梱しようと思います。 ---僕の分は実はosecpu076dに既に入っていて、app0089.tk5です。 ---みんなで作って遊ぶのは面白い! ** 2013.09.19 Thu -kemecoさんのテトリスでは、関数呼び出しの際のリターンアドレスがP30以外になっていて、「さすがはコンパイラ作者だなあ」と思いました。おもしろい。 ** 2013.09.20 Fri -Brainfuckのインタプリタは、107バイトまでしか行かない!98バイトはDOSの.COMファイルっぽいのですが、これは手ごわい! --と思ったら98バイト版はソースをファイルから読まないのかー。僕のはもちろん指定したファイルを読み込みます。 --ファイルから読むバージョンを探したら138バイトでした。余裕の勝利! --でもこのDOS版のプログラム、ファイルのクローズを省略すれば134バイトにはできそうだな・・・。それでもOSECPU版の勝ちだけど。 * こめんと欄 -osecpuベースで動くエディターを使って、osecpuアプリのソースを書くという行為にロマンを感じるので、俺もそのエディターを使ってみたいです。公開されるのを期待してます。 -- 名無しさん SIZE(10){2013-08-17 (土) 19:34:48} -ななしさんありがとうございます。きっとIrisさんはこのコメントに喜ぶと思います。IrisさんとLivaさんと僕の3人の共通の夢は、言語もシェルも.oseで書くことです。そうすれば完全にセルフ開発できちゃいます! -- ''K'' SIZE(10){2013-08-17 (土) 21:30:47} -ちなみに16進ダンプのテキストファイルから任意のバイナリファイルを作る.oseアプリは既にあるので(app0031)、実はテキストエディタがあればOSECPU上でアプリは作れますね!!・・・うわー、たのしくなってきた! -- ''K'' SIZE(10){2013-08-18 (日) 11:24:15} -[速報] テキストエディタは3日以内に公開できそうです。最終調整中です。 -- ''K'' SIZE(10){2013-08-18 (日) 23:24:01} -とりあえずオセロはまだ改良の余地があることが分かりました(とりあえず625バイトまで減らせる)。また後日発表したいと思います。 -- ''K'' SIZE(10){2013-08-19 (月) 23:46:06} #comment