* OSECPUのfloatサポートとマウスサポートについて -(by [[K]], 2013.07.02) ** (1) 方針転換 -[[memo0002]]の2013.04.02のところに、はっきりと「FPUをサポートしない」と書きました。 -しかしOSECPUの成果は当初の予想を大きく上回っていて、本当にいろんなものがびっくりするくらいに小さく書けてしまうので、float演算できないことがとても惜しくなってきました。 -ということで当初は全く考えていなかった、float演算やマウスのサポートを遠くない将来に入れようと検討しています。 ~ -OSECPUにこれらの機能のサポートをためらっていた理由とは、そもそもなんだったのかを明らかにしたいと思います。 -OSECPUはPCだけのためのOSではなくて、組み込み機器やマイコンも視野に入れたOSです。たとえばゲームボーイアドバンスくらいの環境でも十分に動作するだろうかとか、80286とかi386SX程度の旧型PCでも動作するだろうかとか、そういうことを考えながら設計してきました。というのは、本質的には要求ハードウェアのハードルを上げる必要がないからです。これらのハードウェアを切り捨てる必然性がないのなら、切り捨てないようにするというのが私の基本的な考えです。 -そのせいで、これらで共通に使えそうだと思われる機能しかAPIに付けてきませんでした。将来的にはいろいろやるにしても、まずはこの簡単なAPIでできることを一通りやりつくそうと考えていました。 -しかし上記のとおり、もはやOSECPUの可能性はかなりあるように思われて、それをいたずらに制限するのは得策ではないと考えて、floatやマウスのサポートを検討することにします。 ~ -以下の仕様についての実装時期は正確には未定です。 ** (2) マウス関係のAPIの仕様 -マウスイベントはinkeyバッファに入れたい。そうしないとキー入力が混ざった時に、どちらが先なのかわからなくなる。 -混乱を避けるため、各アプリがマウス拡張をenableにしなければ、inkeyバッファにマウスイベントが入ることはない。 -マウスイベントはドラッグなどをサポートするとすぐに増えるため、クリック状態の変更を伴わない状態変化(座標変化のみ)は、inkeyバッファにたまるたびに以降の追加がマスクされる。だからアプリはこれを毎回解除することになる。 ** (3) floatの仕様 -データ型にT_FLT32とT_FLT64を追加。Fxxレジスタを64個追加。 -レジスタは基本的にはdoubleで保持・演算される。しかし実際の精度については機種依存を許容する。 データ転送命令(6命令) 40: FLIMM 41: FCP 42: CNVFI Fxx,Rxx 43: CNVIF Rxx,Fxx 44: FLMEM (PAFLMEM) 45: FSMEM (PAFSMEM) 二項演算子(2命令) 46: FABS 47: FSQRT 三項演算子(4命令) 50: FADD 51: FSUB 52: FMUL 53: FDIV 比較命令(6命令?) 48-: FCMPcc -他の演算命令はライブラリでいいかなあ・・・。 -NaNとかのサポートを入れたら比較命令はもう少し増えるかも。 ** (4) 符号なし演算 -ついでに整数の符号なし演算を入れようかなと考え中。 --符号なし比較(4命令) --符号なしの連結シフト命令(2命令) --ゼロ拡張、符号拡張命令(計2命令) --32bit * 32bit = 32bit : 32bit な符号なし乗算(1命令) --32bit : 32bit / 32bit = 32bit ... 32bit な符号なし除算(1命令) --符号なしの連結シフト命令(2命令) --合計8命令 --合計10命令 //--SHR。符号なし除算。 //-符号なしで乗算した後、指定されたビット数だけ右シフトして、さらに結果が32bit以下になるように指定した値でANDするやつがほしい。これはよく使うはず。 * こめんと欄 #comment