第7回カーネル/VM探検隊で仮想マシン作った発表してきました
題名のとおりです、カーネル/VM探検隊でLTしてきました!
カーネル/VM探検隊に関しては↓
http://atnd.org/event/kernelvmseven
https://sites.google.com/site/kernelvm/
えーと、数日間でMIPS R3000アーキテクチャの仮想マシンをErlang(!)で途中まで書きました。
recrioって名前を付けました。一応動いてはいますが、割り込みあたりがまだちゃんと実装できてなかったり、
ELFロードできてなかったり、なんかもういろいろダメですね...
スライドはこちら。
http://www.slideshare.net/siritori/ss-12638392
リポジトリはこちら。
https://github.com/siritori/recrio
recrio_debugモジュールでなんかいろいろテストして遊べます。
3> recrio_debug:test(). true addi reg(2) := reg(0) + <<255,0>> reg2 : 00000000000000001111111100000000 0 : 00100000000000101111111100000000 4 : 00100000000000011111011110001111 8 : 00100100001000011111000011111111 C : 00000000000000010000100001000010 10 : 00010000001000000000000000000100 14 : 10101100010000010000000000000000 18 : 00100000010000100000000000000100 1C : 00001000000000000000000000000011 20 : 00000000000000000011111111001101 addi reg(1) := reg(0) + <<247,143>> reg1 : 00000000000000001111011110001111 reg2 : 00000000000000001111111100000000 0 : 00100000000000101111111100000000 4 : 00100000000000011111011110001111 8 : 00100100001000011111000011111111 C : 00000000000000010000100001000010 10 : 00010000001000000000000000000100 14 : 10101100010000010000000000000000 18 : 00100000010000100000000000000100 1C : 00001000000000000000000000000011 20 : 00000000000000000011111111001101 4>
MIPSアーキテクチャのいいお勉強になりますね。実際、だんだんオペコードを覚えてきました...
バイナリパターンマッチのお陰でデコード部分がすんごい簡単に書けるのがステキだなって思いました。
ErlangなくせにOTPも使ってませんごめんなさい
詳しいことはスライドを見て下さいね!゜+.(・ω・)゜+.゜