Hatena::ブログ(Diary)

Mafice’s Blog

2011 12/26

はてなブログに移行しました

今更ながらご招待させていただいたので、

はてなブログに移行しました。


多分ここは放置することになるかと。

2011 12/15

Resea 0.01の仕様とか機能とか

誰得OSフレームワークのReseaの途中経過に「いいね!」と言ってくれる方がいたり、

はてなスターをつけてくれる方がいて、とても嬉しい今日この頃です。


今週の土日で大体完成させるResea 0.01の仕様とか機能とかを記録に残しておきたいのでここに書いておきます。



  • OS部分(ハイレイヤカーネル)とReseaの部分(ローレイヤカーネル)の2つの層に分ける。
  • ローレイヤカーネルでは、アセンブリ&アーキテクチャ依存部分だけでなく、FS, デバイスドライバ等も実装。
  • Reseaの機能は全てハンドラとして登録してあり、自由に変更(フックしたりすること)が可能。
  • ハイレイヤカーネルが独自にファイルシステムの管理をしたいときなど、ローレイヤカーネルの機能を置き換えたいときは、その機能のハンドラをハイレイヤカーネルのに変更する。
  • OSに対してのRBACのような何か。

2011 12/12

途中経過

f:id:Mafice:20111212185220p:image:w640


実験体として開発しているものです。

急ピッチで開発して、ATAドライバ, FATの解析, キーボード入力, ユーザモードへの移行&マルチタスクまで辿り着きました。

APIの周辺がとてつもなくバギーなので、APIの部分を除くところのコードを参考に、手抜きなところを直しながら、

年内には誰得OSフレームワークをリリースしたいと思っています。

2011 11/08

鬼軍曹.nano.patchを作ってみた

f:id:Mafice:20111108231616p:image:w640


Emacsには鬼軍曹.elとかいうカーソルキーなどを無効化するものがあるらしいです。

「Ctrl+ほにゃらら」で出来るので、普通のEmacs使いはカーソルキーなんてものは使ってないらしい(?)。


話は変わりますが、nanoへの無知を@MatsumuraKSに晒しながらTwitterで会話をしてると、

と言われたので、nanoへの無知の反省と謝罪の意を込めて、

nanoのソースコードを読み、改変することにしました。



何をやったか

キーバインドのでやってみようと思ったら、CtrlキーかAltキーを組み合わせるか、

ファンクションキーしかできないっぽいので、ソースコードをいじって実現しました。


さらっと読んでいくと、get_shortcut関数内でなにかキー入力をstderrに出力している部分が見つかったので、

これをログファイルに出力させてtailコマンドで観察して、鬼軍曹.el的なものを作りました。


ダウンロードとかビルドとか

パッチファイルはここです。

https://gist.github.com/1347806


ダウンロードしたら、nanoのリポジトリからソースコードをとってきて、srcにコピーして、

$ patch < パッチのファイル名

を実行してmakeしてください。


機能

カーソルキーやenter,tab,backspace,delキーを押すと、無効でなく、ヘルプを表示してくれます。

「あ、やべえしくった。どうだったっけ?」とヘルプを見るまでの時間を減少し、作業の効率化を図ります。


それと最後に

誰得ですかこれは。

2011 11/05

インラインアセンブリでIntel記法を使う

あの忌まわしいAT&T記法を使わせられるインラインアセンブリIntel記法使う方法です。

動作確認はi686-apple-darwin11-llvm-gcc-4.2でしました。


コード

#define inline_asm(code) __asm__ __volatile__(".intel_syntax noprefix;"code";.att_syntax")

int main (void){

  inline_asm("mov eax, 17");
  inline_asm("pop rbp");
  inline_asm("ret");
}

実行結果

f:id:Mafice:20111105231300p:image:w640


説明とか注意点とか

inline_asmはマクロで定義しています。

マクロは

.intel_syntax noprefix
アセンブリコード
.att_syntax

という風に展開して、__asm____volatile__を呼ぶようになっています。内容は、

「.intel_syntax noprefix」で以下はIntel記法であると宣言して、その後Intel記法でのアセンブリコードがあり、

「.att_syntax」で後のコードはAT&T記法であると宣言しています。


ただ、拡張インラインアセンブリ構文がうまく使えません...構文エラーが出てしまうようです。




追記

コメントで教えてもらったのですが、masmオプションでわざわざこんな事しなくても

Intel記法が使えるようです。

下のサンプルコードは


int main (void){

  __asm__ __volatile__("mov eax, 17");
  __asm__ __volatile__("pop rbp");
  __asm__ __volatile__("ret");
}

となり、masmオプションをつけてコンパイルします。

$ gcc -masm=intel test.c

ただ、Mac OS(Xcode付属?)のgccはmasmオプションは存在しますが、manに書いているとおり、

       -masm=dialect
           Output asm instructions using selected dialect.  Supported choices are
           intel or att (the default one).  Darwin does not support intel.

intelが指定できません。

Opera WidgetなTwitterクライアントづくりは無理かもしれない

数日間没頭してわかったこと

  • OAuth難しい
  • User Streams対応は無理っぽい
  • Operaが$.getや$.postを使わせてくれない(設定ファイルに不備?)
  • twicliみたいにブラウザベースのほうが楽なんじゃ...