memo0002
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Kの開発メモ #0002
-(by [[K]], 2013.03.26)
-ここは川合の開発の進捗などをレポートするところです。
--当初はその予定だったが、今ではむしろ主たる目的は[[K]]の...
** 2013.03.26 Tue
-DIFFPTRやCOMPPEなどを追加。ついでに裏APIの仕様も少し変更...
--これらの命令のおかげでcas2nas00a.oseは293バイトになりま...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu007a.zip
-2013.03.19(Tue)から実装を開始したので、これで1週間経った...
-よくよく考えた末、軽量の関数呼び出しと重量の関数呼び出し...
-もう少し見栄えがするものが作れるようになったら、ソースと...
** 2013.03.27 Wed
-裏APIに余興でほんの少しだけグラフィック機能をつけてみた...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu008a.zip
~
http://osecpu.osask.jp/download/app0006a.png
-軽量callがほしくなったので実装中。・・・よしできた!
-アセンブラを必死に書いていると、結構疲れる。うーん、若い...
-でもここでがんばっておけば、将来にわたって使えるわけなの...
--まだcas2binが出来上がってないけど、軽量callとシフト演算...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu009a.zip
** 2013.03.28 Thu
-裏APIの呼び出し方法が、うさんくさい隠し命令ではなくて、...
-ラベル番号の管理でやってられなくなったので、ローカルなラ...
--150行ほどのC言語プログラムです。
--これもいつかOSECPUで書き直したいです。
-そのほかいろいろ調整して、OSECPUのアセンブラが第三世代OS...
-本日の成果:
--http://osecpu.osask.jp/download/osecpu010a.zip
** 2013.03.29 Fri
-(1) lbstk01にバージョンアップしました。→[[page0017]]
--http://osecpu.osask.jp/download/osecpu011a.zip
-(2) 多少の癖はあるものの、とにかくかなり書きやすくなった...
--思い起こせば、最初はDBしか使えなかった。
--これに対してプリプロセッサを使うことで、基本的な命令は...
--さらに#defineを増やして、CMPJNEなどの便利な複合命令も作...
--そしてlbstk01みたいな超簡易なプログラムを組み合わせるこ...
--このように徐々にステップアップできるのはとても有効だと...
-今後、プリプロセッサをOSECPUアプリとして書きなおす日が来...
--lbstk01もOSECPUアプリに移植できるだろう。そうなれば、今...
-(3) ここまで来るのに10日しかたってない。・・・そしてここ...
--今まで僕は何をやっていたんだと強く思う。これがあればCPU...
--今まで少ないレジスタで必死にやりくりしていたのが情けな...
-OSECPUにはやがて正規のAPIをつけ始めると思うけど、そのAPI...
--そうすれば、osecpu.exeはシンプルなままだ。移植は簡単だ...
--このスタイルになっていれば、WindowsでもLinuxでも「はり...
--しかもそれはJavaなどとは違って非常に軽量で、osecpu.exe...
-しかも第三世代OSASKの仕様も盛り込めば、仮想CPUはついに32...
--つまり64bitマシンで16bitアプリを動かすことができるし、1...
--これは必要に応じて多倍長演算を利用することで実現する。
-OSECPUでは、どんなCPUにでも対応できるように用心深く設計...
--たとえばページングを持たないCPUがある。そんなCPUに対し...
--同様に、キャッシュメモリがなくて、単に一部のRAMだけが高...
--レジスタが少ないCPUに対してはメモリで代用させればいい(...
--CPUにハードウェア割り込みの機能がなくても、数命令おきに...
-こうして考えていくと、実際のCPUに必要な機能は本当に少な...
--CPUはきっととてもシンプルにできるだろう。そうなれば速く...
-(4) OSECPUは第三世代OSASKの仕様を簡略化したもので、その...
--それは結局、ポインタに細工をして、今はこのポインタ上の...
--これを実現するために、ポインタレジスタは2つのポインタを...
--こうなるとポインタレジスタは整数レジスタとはビット数が...
--メモリアクセスの際にはいくつかのチェックが入る(スワッ...
--こういう背景が既にあり、その後セキュアなOSについて考え...
-つまり何が言いたいのかといえば、セキュアにしようと思って...
--それでセキュア機能を少し追加して、そして簡略化のために...
--こんなふうに本来の意図とは違う応用が可能な場合、僕は自...
** 2013.04.01 Mon
-ADDやCMPcc命令で、即値が指定できたら便利だし速くなるかな...
--いやちがった、僕のバグだった。・・・直した。よし、ちゃ...
--app0002aは18%くらい高速化されました。
--(明日の午前中にアップロード予定)
--http://osecpu.osask.jp/download/osecpu012a.zip
-今日はセキュリティ関係のコードを書こうと思っていたのに、...
** 2013.04.02 Tue
-OSECPUは当面の予定として、FPUをサポートしないし、MMXなど...
-これは以下の理由による。
--この程度しかなくても相当に有用なものはいろいろ作れる。
--FPUやMMXやマルチスレッドが使える環境はそんなに多くはな...
--やりつくしたら先へ進む、といった感じで。
-そもそもOSECPUのメインテーマはセキュリティなのであって、...
--はじめはグラフィックもばっさり切り捨てようかとも思った...
** 2013.04.03 Wed
-ついに3週目に突入。そろそろきりのいいところでペースを下...
-今日は体調があまりよくない。そろそろ限界か・・・。
-現在、プログラムの中にデータを入れる方法について考え中。...
-会社の業務が忙しかったので、今日もリリースなし。
-データのうまい入れ方はすぐには思いつけそうにないので、と...
** 2013.04.04 Thu
-とりあえずデータは入った。現在サンプルアプリを作ってテス...
** 2013.04.05 Fri
-(1) サンプルアプリも動いた。サンプルアプリとしては一番大...
--じゃあ手抜きしない方法も考えるかな・・・。
--(app0010a.ose:手抜き版)
~
http://osecpu.osask.jp/download/app0010a.png
-とりあえず改良→app0011a.ose。osecpu.exeがまだまだバカな...
--バイナリ全体で2765バイト、このうちデータ部は2064バイト...
--CLEだとコード部が半分以下になるんだろうなあ。
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu013a.zip
-メモリアクセスをマシにした。現在サンプルアプリでテスト中。
--app0011a.oseは2623バイトに減った。
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu014a.zip
-(2) バイトコードリビジョンアップの基準。旧アプリが新osec...
-(3) サンプルアプリを何度も作って感じたこと。フロントエン...
--3項演算は確かに便利だけど、使用頻度は高くない。3項演算...
--ポインタレジスタのアクセス後のインクリメントがあれば重...
--比較してJMPのパターンはすごく多い。短縮形があってもいい...
---というかむしろ比較命令の前にプリフィクスをおかなければ...
--ループカウントを増やして比較してJMPのパターンもすごく多...
--即値は1バイト形式、2バイト形式がぜひともほしいところ。
--3項目は即値率が高い。だからむしろ即値ではないときにはプ...
-(4) プリフィクス候補を整理する。
p1:
CMPcc形の命令についた場合、「比較してJMP」のパターンで...
つかないときは CMPcc(R3F, ?, ?); CND(R3F); JMP(?); ...
メモリ系の命令に付いたときは、ポインタレジスタのアクセ...
それ以外の命令についた場合、3項型であることを示す。こ...
p2:
最終項がレジスタであることを示す。これがなければ、LIMM...
p3:
即値フィールドは2バイトである。これがないときは即値フ...
p4:
即値フィールドは4バイトである。これがないときは即値フ...
この方法ではなく、p3を2度指定したら4バイトにするとい...
--これはプリフィクスではないけど、インクリメント+比較+...
---INCCMPJNE(reg0, reg1, label);
---INCCMPJNEI(reg0, imm, label);
--ループ開始用に初期値セット&ラベル宣言のセットもほしい。
--ラベル番号も直近の宣言値からの相対値で指定できるように...
---ラベル番号については、lbstk的な指定も可能にしておきた...
-JITコンパイラ前提っていいなー。実CPUではこんなのデコード...
** 2013.04.10 Wed
-(1) うーん、neriさんのCLEの記事で、分岐命令の長さをちゃ...
--http://nerry.hatenablog.com/entry/2013/04/10/032018
-(2) OSECPUでは、不正なポインタを一瞬でも生成するだけでエ...
-しかし一方で、文字列処理などを考えると、*s++みたいな方法...
-よし決めた。ポインタを加算、減算しているときにもチェック...
-(3) (2)でポインタチェックのことを書いたけど、これってチ...
--[1] 一番チェックがたくさんつくレベル。どこでミスしたの...
--[2] 安全を保証するものの、ミスした個所を特定しやすくは...
--[3] 何もチェックしないでとにかく高速に実行するレベル。
--[4] チェックしないだけではなく、チェックに必要な情報す...
---これはリンクするすべてのコードが[3]か[4]でないと、うま...
-(4) ポインタのチェックに際して。たとえば文字列の開始アド...
-こういうチェックは、[3]ではやらなくてもいいのだろうか。...
--[1] 一番チェックがたくさんつくレベル。どこでミスしたの...
--[2] 安全を保証するものの、ミスした個所を特定しやすくは...
--[3] OSECPUによる過剰なチェックは抑制されるが、プログラ...
--[4] 何もチェックしないでとにかく高速に実行するレベル。
--[5] チェックしないだけではなく、チェックに必要な情報す...
-つまりこういうことだ。リリースされたプログラムはOSECPUが...
--うーん、OFFにしてもいいのか本当に?なんだか迷う・・・。...
--他人が作ったモジュールは信用しないとしよう。だからそれ...
-(5) 僕もJITコンパイルするときに、短い命令を出せるときに...
--ラベルのアラインまで対応してみた(笑)。
--たとえばapp0001aでは、JITコンパイルの結果で78バイトだっ...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu015a.zip
--http://osecpu.osask.jp/download/osecpu016a.zip
--http://osecpu.osask.jp/download/osecpu017a.zip
--http://osecpu.osask.jp/download/osecpu018a.zip
-(6) 明日の予定。スタックっぽいものを作る。これがないと再...
** こめんと欄
#comment
終了行:
* Kの開発メモ #0002
-(by [[K]], 2013.03.26)
-ここは川合の開発の進捗などをレポートするところです。
--当初はその予定だったが、今ではむしろ主たる目的は[[K]]の...
** 2013.03.26 Tue
-DIFFPTRやCOMPPEなどを追加。ついでに裏APIの仕様も少し変更...
--これらの命令のおかげでcas2nas00a.oseは293バイトになりま...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu007a.zip
-2013.03.19(Tue)から実装を開始したので、これで1週間経った...
-よくよく考えた末、軽量の関数呼び出しと重量の関数呼び出し...
-もう少し見栄えがするものが作れるようになったら、ソースと...
** 2013.03.27 Wed
-裏APIに余興でほんの少しだけグラフィック機能をつけてみた...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu008a.zip
~
http://osecpu.osask.jp/download/app0006a.png
-軽量callがほしくなったので実装中。・・・よしできた!
-アセンブラを必死に書いていると、結構疲れる。うーん、若い...
-でもここでがんばっておけば、将来にわたって使えるわけなの...
--まだcas2binが出来上がってないけど、軽量callとシフト演算...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu009a.zip
** 2013.03.28 Thu
-裏APIの呼び出し方法が、うさんくさい隠し命令ではなくて、...
-ラベル番号の管理でやってられなくなったので、ローカルなラ...
--150行ほどのC言語プログラムです。
--これもいつかOSECPUで書き直したいです。
-そのほかいろいろ調整して、OSECPUのアセンブラが第三世代OS...
-本日の成果:
--http://osecpu.osask.jp/download/osecpu010a.zip
** 2013.03.29 Fri
-(1) lbstk01にバージョンアップしました。→[[page0017]]
--http://osecpu.osask.jp/download/osecpu011a.zip
-(2) 多少の癖はあるものの、とにかくかなり書きやすくなった...
--思い起こせば、最初はDBしか使えなかった。
--これに対してプリプロセッサを使うことで、基本的な命令は...
--さらに#defineを増やして、CMPJNEなどの便利な複合命令も作...
--そしてlbstk01みたいな超簡易なプログラムを組み合わせるこ...
--このように徐々にステップアップできるのはとても有効だと...
-今後、プリプロセッサをOSECPUアプリとして書きなおす日が来...
--lbstk01もOSECPUアプリに移植できるだろう。そうなれば、今...
-(3) ここまで来るのに10日しかたってない。・・・そしてここ...
--今まで僕は何をやっていたんだと強く思う。これがあればCPU...
--今まで少ないレジスタで必死にやりくりしていたのが情けな...
-OSECPUにはやがて正規のAPIをつけ始めると思うけど、そのAPI...
--そうすれば、osecpu.exeはシンプルなままだ。移植は簡単だ...
--このスタイルになっていれば、WindowsでもLinuxでも「はり...
--しかもそれはJavaなどとは違って非常に軽量で、osecpu.exe...
-しかも第三世代OSASKの仕様も盛り込めば、仮想CPUはついに32...
--つまり64bitマシンで16bitアプリを動かすことができるし、1...
--これは必要に応じて多倍長演算を利用することで実現する。
-OSECPUでは、どんなCPUにでも対応できるように用心深く設計...
--たとえばページングを持たないCPUがある。そんなCPUに対し...
--同様に、キャッシュメモリがなくて、単に一部のRAMだけが高...
--レジスタが少ないCPUに対してはメモリで代用させればいい(...
--CPUにハードウェア割り込みの機能がなくても、数命令おきに...
-こうして考えていくと、実際のCPUに必要な機能は本当に少な...
--CPUはきっととてもシンプルにできるだろう。そうなれば速く...
-(4) OSECPUは第三世代OSASKの仕様を簡略化したもので、その...
--それは結局、ポインタに細工をして、今はこのポインタ上の...
--これを実現するために、ポインタレジスタは2つのポインタを...
--こうなるとポインタレジスタは整数レジスタとはビット数が...
--メモリアクセスの際にはいくつかのチェックが入る(スワッ...
--こういう背景が既にあり、その後セキュアなOSについて考え...
-つまり何が言いたいのかといえば、セキュアにしようと思って...
--それでセキュア機能を少し追加して、そして簡略化のために...
--こんなふうに本来の意図とは違う応用が可能な場合、僕は自...
** 2013.04.01 Mon
-ADDやCMPcc命令で、即値が指定できたら便利だし速くなるかな...
--いやちがった、僕のバグだった。・・・直した。よし、ちゃ...
--app0002aは18%くらい高速化されました。
--(明日の午前中にアップロード予定)
--http://osecpu.osask.jp/download/osecpu012a.zip
-今日はセキュリティ関係のコードを書こうと思っていたのに、...
** 2013.04.02 Tue
-OSECPUは当面の予定として、FPUをサポートしないし、MMXなど...
-これは以下の理由による。
--この程度しかなくても相当に有用なものはいろいろ作れる。
--FPUやMMXやマルチスレッドが使える環境はそんなに多くはな...
--やりつくしたら先へ進む、といった感じで。
-そもそもOSECPUのメインテーマはセキュリティなのであって、...
--はじめはグラフィックもばっさり切り捨てようかとも思った...
** 2013.04.03 Wed
-ついに3週目に突入。そろそろきりのいいところでペースを下...
-今日は体調があまりよくない。そろそろ限界か・・・。
-現在、プログラムの中にデータを入れる方法について考え中。...
-会社の業務が忙しかったので、今日もリリースなし。
-データのうまい入れ方はすぐには思いつけそうにないので、と...
** 2013.04.04 Thu
-とりあえずデータは入った。現在サンプルアプリを作ってテス...
** 2013.04.05 Fri
-(1) サンプルアプリも動いた。サンプルアプリとしては一番大...
--じゃあ手抜きしない方法も考えるかな・・・。
--(app0010a.ose:手抜き版)
~
http://osecpu.osask.jp/download/app0010a.png
-とりあえず改良→app0011a.ose。osecpu.exeがまだまだバカな...
--バイナリ全体で2765バイト、このうちデータ部は2064バイト...
--CLEだとコード部が半分以下になるんだろうなあ。
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu013a.zip
-メモリアクセスをマシにした。現在サンプルアプリでテスト中。
--app0011a.oseは2623バイトに減った。
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu014a.zip
-(2) バイトコードリビジョンアップの基準。旧アプリが新osec...
-(3) サンプルアプリを何度も作って感じたこと。フロントエン...
--3項演算は確かに便利だけど、使用頻度は高くない。3項演算...
--ポインタレジスタのアクセス後のインクリメントがあれば重...
--比較してJMPのパターンはすごく多い。短縮形があってもいい...
---というかむしろ比較命令の前にプリフィクスをおかなければ...
--ループカウントを増やして比較してJMPのパターンもすごく多...
--即値は1バイト形式、2バイト形式がぜひともほしいところ。
--3項目は即値率が高い。だからむしろ即値ではないときにはプ...
-(4) プリフィクス候補を整理する。
p1:
CMPcc形の命令についた場合、「比較してJMP」のパターンで...
つかないときは CMPcc(R3F, ?, ?); CND(R3F); JMP(?); ...
メモリ系の命令に付いたときは、ポインタレジスタのアクセ...
それ以外の命令についた場合、3項型であることを示す。こ...
p2:
最終項がレジスタであることを示す。これがなければ、LIMM...
p3:
即値フィールドは2バイトである。これがないときは即値フ...
p4:
即値フィールドは4バイトである。これがないときは即値フ...
この方法ではなく、p3を2度指定したら4バイトにするとい...
--これはプリフィクスではないけど、インクリメント+比較+...
---INCCMPJNE(reg0, reg1, label);
---INCCMPJNEI(reg0, imm, label);
--ループ開始用に初期値セット&ラベル宣言のセットもほしい。
--ラベル番号も直近の宣言値からの相対値で指定できるように...
---ラベル番号については、lbstk的な指定も可能にしておきた...
-JITコンパイラ前提っていいなー。実CPUではこんなのデコード...
** 2013.04.10 Wed
-(1) うーん、neriさんのCLEの記事で、分岐命令の長さをちゃ...
--http://nerry.hatenablog.com/entry/2013/04/10/032018
-(2) OSECPUでは、不正なポインタを一瞬でも生成するだけでエ...
-しかし一方で、文字列処理などを考えると、*s++みたいな方法...
-よし決めた。ポインタを加算、減算しているときにもチェック...
-(3) (2)でポインタチェックのことを書いたけど、これってチ...
--[1] 一番チェックがたくさんつくレベル。どこでミスしたの...
--[2] 安全を保証するものの、ミスした個所を特定しやすくは...
--[3] 何もチェックしないでとにかく高速に実行するレベル。
--[4] チェックしないだけではなく、チェックに必要な情報す...
---これはリンクするすべてのコードが[3]か[4]でないと、うま...
-(4) ポインタのチェックに際して。たとえば文字列の開始アド...
-こういうチェックは、[3]ではやらなくてもいいのだろうか。...
--[1] 一番チェックがたくさんつくレベル。どこでミスしたの...
--[2] 安全を保証するものの、ミスした個所を特定しやすくは...
--[3] OSECPUによる過剰なチェックは抑制されるが、プログラ...
--[4] 何もチェックしないでとにかく高速に実行するレベル。
--[5] チェックしないだけではなく、チェックに必要な情報す...
-つまりこういうことだ。リリースされたプログラムはOSECPUが...
--うーん、OFFにしてもいいのか本当に?なんだか迷う・・・。...
--他人が作ったモジュールは信用しないとしよう。だからそれ...
-(5) 僕もJITコンパイルするときに、短い命令を出せるときに...
--ラベルのアラインまで対応してみた(笑)。
--たとえばapp0001aでは、JITコンパイルの結果で78バイトだっ...
--(今夜アップロード予定)
--http://osecpu.osask.jp/download/osecpu015a.zip
--http://osecpu.osask.jp/download/osecpu016a.zip
--http://osecpu.osask.jp/download/osecpu017a.zip
--http://osecpu.osask.jp/download/osecpu018a.zip
-(6) 明日の予定。スタックっぽいものを作る。これがないと再...
** こめんと欄
#comment
ページ名: