LoginSignup
2
0

More than 5 years have passed since last update.

mrubyがIchigoJamで動くらしい 第3回戦

Posted at

あらすじ

mrubyがIchigoJamで動くらしい 第2回の続き
ここまで来たので動かないのは悔しいので何とかしたい。
環境は第2回の通り。

アジェンダ

結果

result.png

現状の確認

no action succeed
1 make write all success
2 mrbc compile success
3 mruby-l1vm failure
4 TransCoder failure
5 make
6 make write

mruby-l1vmの結果

#mruby-l1vm code.mrb
fopen code.mrb
**********************************************************************
locals: 1, rergs: 4, ireps: 0
  0: 33 jmp 0
 37: 17 r[1] = true
 39: 34 jmp 3 if r[1] == 1
  3: 16 r[1] = self 1
  5:  7 r[2] = 1
  7: 46 r[1] = r[1].sym[0:led](r[2]:1-r[2])
emb_method 1.led
no methods err!!
2
#

no methods err!!とか出てるあたり、環境しくじってる感が半端ない。

TransCoderの結果

#.\tool\TransCoder.exe code.mrb
file size = 125
** load header [0]**

###### Trans mrb to C code ######

** Open ../src/code.h **
analyze_irep_r irep=0
      0 [main] TransCoder 804 cygwin_exception::open_stackdumpfile: Dumping stack trace to TransCoder.exe.stackdump
#

よし、謎。

取り合えず、mruby2.0の環境回りでしくじっている -> mruby-l1vmがこけるって方向で考える

2.0対応の謎を追いかける

2.0対応の環境回りに関して、実は気になっている点が一つある。
それはfor2.0ディレクトリだ。

image.png
この子

中を覗いてみると、何とシェルスクリプトを発見。もしかしてこのスクリプトを使ってmruby2.0に対応するのじゃなかろうか。
とりあえずc.shを叩く仕様になっているっぽい。ではこの子たちをWindows用に変えてあげれば良いはず。

for2.0のwindows対応

やる事は単純。各スクリプトを元にwindowsライクな奴を作る。

各スクリプトのやっている事をざっと見てみると

name description
c.sh setruby2.sh,c-mrbreader.sh,mrbreader呼び出し
setruby2.sh rubyファイルのコンパイル(オプション指定付き)
c-mrbreader.sh mrbreaderのコンパイル
mrbreader オペコード変換?

なので、それぞれに対応するbatファイルさえ作ればOKなハズ。

c.bat
echo "start c.bat"
call setruby2.bat %1.rb
echo "finish setruby2"
call c-mrbreader.bat
echo "finish c-mrbreader"
mrbreader.exe %1.mrb
echo "finish mrbreader"
setruby2.bat
mrbc -e --remove-lv %1
c-mrbreader.bat
gcc -DUSE_STDIO -DNO_VA -I ..\\src\\ mrbreader.c -o mrbreader

まぁ、こんな感じでいいだろう。

for2.0対応手順をまとめる

for2.0がWindowsに対応したことで、手順を一つ追加する。

no action description
1 make write all IchigoJamへ環境書き込み(今回は実施しない)
2 mrbc compile rubyスクリプトをmrbファイルへコンパイル
3 for2.0/c.bat 2.0対応バイナリへ変換
3 mruby-l1vm l1vm用のコンバート?(よく分かってない)
4 TransCoder mrbファイルをcode.h,symbol_ids.hへ変換
5 make IchigoJam用にコンパイル
6 make write 書き込み

実際にやってみる

mrbc compile

image.png
まぁ、これはね

for2.0/c.bat

image.png
とりあえずFinishは確認できた。

ログはこんな感じで出る。

# cd for2.0
# .\c.bat ..\\code
#echo "start c.bat"
"start c.bat"
#call setruby2.bat ..\\code.rb
#mrbc -e --remove-lv ..\\code.rb
#echo "finish setruby2"
"finish setruby2"
#call c-mrbreader.bat
#gcc -DUSE_STDIO -DNO_VA -I ..\\src\\ mrbreader.c -o mrbreader
mrbreader.c: 関数 parseIREP :
mrbreader.c:294:14: 警告: ポインタから異なるサイズの整数へのキャストです [-Wpointer-to-int-cast]
  int align = (int)p & 3;
#echo "finish c-mrbreader"
"finish c-mrbreader"
#mrbreader.exe ..\\code.mrb
55b9
125
50455249 0
irep record len: 231
1 4 0
codelen: 48
  0: 33 jmp 37
  3: 16 r[1] = self
  5:  7 r[2] = 1
  7: 46 r[1] = r[1].sym[0](r[2]-r[2])
 11: 16 r[1] = self
 13:  3 r[2] = 10
 16: 46 r[1] = r[1].sym[1](r[2]-r[2])
 20: 16 r[1] = self
 22:  6 r[2] = 0
 24: 46 r[1] = r[1].sym[0](r[2]-r[2])
 28: 16 r[1] = self
 30:  3 r[2] = 10
 33: 46 r[1] = r[1].sym[1](r[2]-r[2])
 37: 17 r[1] = true
 39: 34 jmp 3 if r[1]
 43: 15 r[1] = nil
 45: 55 ret r[1]
 47:103 stop
n literals: 0
n symbols: 2
sym[0] led
sym[1] wait
n ireps: 0
sec 454e4400 8
#echo "finish mrbreader"
"finish mrbreader"
#

mruby-l1vm

さて、前回通らなかったmruby-l1vm。

image.png
あの頃のままだ。

一応出力は以下の通り。

# .\tool\TransCoder.exe code.mrb
file size = 125
** load header [0]**

###### Trans mrb to C code ######

** Open ../src/code.h **
analyze_irep_r irep=0
      0 [main] TransCoder 1180 cygwin_exception::open_stackdumpfile: Dumping stack trace to TransCoder.exe.stackdump
#

以降の手順は省略

ふりかえり

今回もまた動かなかった。1言語の導入にここまで時間がかかるのは久しぶりだ。
環境構築にこれほどてこずるとは思わなかった。
手を出した以上、動くまでやってはみる。

次回はmruby-1.4.0 + mruby-l1vmの組み合わせでやってみる。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0