Index: EcnlProtoTool/trunk/webapp/webmrbc/App.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/App.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/App.cs	(revision 273)
@@ -15,4 +15,5 @@
 		public static Terminal Term;
 		public static AceEditor CodeEditor;
+		public static TargetBoard TargetBoard;
 		public static bool changedAfterTranslating;
 		public static bool translating;
@@ -29,4 +30,5 @@
 			Script.Write("Number.isNaN = Number.isNaN || function(any) { return typeof any === 'number' && isNaN(any); }");
 
+			App.TargetBoard = new GrPeach();
 			Collections.ClassWorkspaces = new Collection<IClassWorkspace>();
 			Views.ClassSelectorView = new ClassSelectorView();
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/GrPeach.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/GrPeach.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/GrPeach.cs	(revision 273)
@@ -5,7 +5,7 @@
 namespace WebMrbc
 {
-	public static class GrPeach
+	public class GrPeach : TargetBoard
 	{
-		public static FieldDropdown Pins()
+		public override FieldDropdown Pins()
 		{
 			return new FieldDropdown(new[] {
@@ -33,5 +33,5 @@
 			});
 		}
-		public static FieldDropdown AnalogPins()
+		public override FieldDropdown AnalogPins()
 		{
 			return new FieldDropdown(new[] {
@@ -45,5 +45,5 @@
 		}
 
-		public static FieldDropdown PwmPins()
+		public override FieldDropdown PwmPins()
 		{
 			return new FieldDropdown(new[] {
@@ -65,5 +65,5 @@
 		}
 
-		public static int PinNameToNum(string name)
+		public override int PinNameToNum(string name)
 		{
 			switch (name) {
@@ -264,5 +264,5 @@
 		}
 
-		public static int PinModeNameToNum(string name)
+		public override int PinModeNameToNum(string name)
 		{
 			switch (name) {
@@ -273,5 +273,5 @@
 		}
 
-		public static int PinValueNameToNum(string name)
+		public override int PinValueNameToNum(string name)
 		{
 			switch (name) {
@@ -282,5 +282,5 @@
 		}
 
-		public static int AnalogRefModeNameToNum(string name)
+		public override int AnalogRefModeNameToNum(string name)
 		{
 			switch (name) {
@@ -293,5 +293,5 @@
 		}
 
-		public static FieldDropdown I2CPorts()
+		public override FieldDropdown I2CPorts()
 		{
 			return new FieldDropdown(new[] {
@@ -300,5 +300,5 @@
 		}
 
-		public static string I2CPortNameToVariable(string name)
+		public override string I2CPortNameToVariable(string name)
 		{
 			switch (name) {
@@ -311,5 +311,5 @@
 		}
 
-		public static int I2CPortNameToNum(string name)
+		public override int I2CPortNameToNum(string name)
 		{
 			switch (name) {
@@ -322,5 +322,5 @@
 		}
 
-		public static FieldDropdown MemFileHandles()
+		public override FieldDropdown MemFileHandles()
 		{
 			return new FieldDropdown(new[] {
@@ -330,5 +330,5 @@
 		}
 
-		public static int MemFileHandlerNameToNum(string name)
+		public override int MemFileHandlerNameToNum(string name)
 		{
 			switch (name) {
@@ -339,5 +339,5 @@
 		}
 
-		internal static int MemOpenModeNameToNum(string name)
+		public override int MemOpenModeNameToNum(string name)
 		{
 			switch (name) {
@@ -349,5 +349,5 @@
 		}
 
-		public static int MemCpModeNameToNum(string name)
+		public override int MemCpModeNameToNum(string name)
 		{
 			switch (name) {
@@ -358,5 +358,5 @@
 		}
 
-		public static FieldDropdown SdFileHandles()
+		public override FieldDropdown SdFileHandles()
 		{
 			return new FieldDropdown(new[] {
@@ -366,5 +366,5 @@
 		}
 
-		public static int SdFileHandlerNameToNum(string name)
+		public override int SdFileHandlerNameToNum(string name)
 		{
 			switch (name) {
@@ -375,5 +375,5 @@
 		}
 
-		public static int SdOpenModeNameToNum(string name)
+		public override int SdOpenModeNameToNum(string name)
 		{
 			switch (name) {
@@ -385,5 +385,5 @@
 		}
 
-		public static FieldDropdown SerialPorts()
+		public override FieldDropdown SerialPorts()
 		{
 			return new FieldDropdown(new[] {
@@ -397,5 +397,5 @@
 		}
 
-		public static int SerialPortNameToNum(string name)
+		public override int SerialPortNameToNum(string name)
 		{
 			switch (name) {
@@ -410,5 +410,5 @@
 		}
 
-		public static string SerialPortNameToVariable(string name)
+		public override string SerialPortNameToVariable(string name)
 		{
 			switch (name) {
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/GrSakura.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/GrSakura.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/GrSakura.cs	(revision 273)
@@ -5,7 +5,7 @@
 namespace WebMrbc
 {
-	public static class GrSakura
+	public class GrSakura : TargetBoard
 	{
-		public static FieldDropdown Pins()
+		public override FieldDropdown Pins()
 		{
 			return new FieldDropdown(new[] {
@@ -96,5 +96,5 @@
 			});
 		}
-		public static FieldDropdown AnalogPins()
+		public override FieldDropdown AnalogPins()
 		{
 			return new FieldDropdown(new[] {
@@ -125,5 +125,5 @@
 		}
 
-		public static FieldDropdown PwmPins()
+		public override FieldDropdown PwmPins()
 		{
 			return new FieldDropdown(new[] {
@@ -141,5 +141,5 @@
 		}
 
-		public static int PinNameToNum(string name)
+		public override int PinNameToNum(string name)
 		{
 			switch (name) {
@@ -230,5 +230,5 @@
 		}
 
-		public static int PinModeNameToNum(string name)
+		public override int PinModeNameToNum(string name)
 		{
 			switch (name) {
@@ -239,5 +239,5 @@
 		}
 
-		public static int PinValueNameToNum(string name)
+		public override int PinValueNameToNum(string name)
 		{
 			switch (name) {
@@ -248,5 +248,5 @@
 		}
 
-		public static int AnalogRefModeNameToNum(string name)
+		public override int AnalogRefModeNameToNum(string name)
 		{
 			switch (name) {
@@ -259,5 +259,5 @@
 		}
 
-		public static FieldDropdown I2CPorts()
+		public override FieldDropdown I2CPorts()
 		{
 			return new FieldDropdown(new[] {
@@ -269,5 +269,5 @@
 		}
 
-		public static string I2CPortNameToVariable(string name)
+		public override string I2CPortNameToVariable(string name)
 		{
 			switch (name) {
@@ -280,5 +280,5 @@
 		}
 
-		public static int I2CPortNameToNum(string name)
+		public override int I2CPortNameToNum(string name)
 		{
 			switch (name) {
@@ -291,5 +291,5 @@
 		}
 
-		public static FieldDropdown MemFileHandles()
+		public override FieldDropdown MemFileHandles()
 		{
 			return new FieldDropdown(new[] {
@@ -299,5 +299,5 @@
 		}
 
-		public static int MemFileHandlerNameToNum(string name)
+		public override int MemFileHandlerNameToNum(string name)
 		{
 			switch (name) {
@@ -308,5 +308,5 @@
 		}
 
-		internal static int MemOpenModeNameToNum(string name)
+		public override int MemOpenModeNameToNum(string name)
 		{
 			switch (name) {
@@ -318,5 +318,5 @@
 		}
 
-		public static int MemCpModeNameToNum(string name)
+		public override int MemCpModeNameToNum(string name)
 		{
 			switch (name) {
@@ -327,5 +327,5 @@
 		}
 
-		public static FieldDropdown SdFileHandles()
+		public override FieldDropdown SdFileHandles()
 		{
 			return new FieldDropdown(new[] {
@@ -335,5 +335,5 @@
 		}
 
-		public static int SdFileHandlerNameToNum(string name)
+		public override int SdFileHandlerNameToNum(string name)
 		{
 			switch (name) {
@@ -344,5 +344,5 @@
 		}
 
-		public static int SdOpenModeNameToNum(string name)
+		public override int SdOpenModeNameToNum(string name)
 		{
 			switch (name) {
@@ -354,5 +354,5 @@
 		}
 
-		public static FieldDropdown SerialPorts()
+		public override FieldDropdown SerialPorts()
 		{
 			return new FieldDropdown(new[] {
@@ -366,5 +366,5 @@
 		}
 
-		public static int SerialPortNameToNum(string name)
+		public override int SerialPortNameToNum(string name)
 		{
 			switch (name) {
@@ -379,5 +379,5 @@
 		}
 
-		public static string SerialPortNameToVariable(string name)
+		public override string SerialPortNameToVariable(string name)
 		{
 			switch (name) {
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/I2cBlock.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/I2cBlock.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/I2cBlock.cs	(revision 273)
@@ -18,5 +18,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cの初期化")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.setInputsInline(true);
 			this.setPreviousStatement(true, null);
@@ -40,5 +40,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cへの書き込み")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendValueInput("DEVICEID")
 				.setCheck("Number")
@@ -72,5 +72,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cからの読み込み")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendValueInput("DEVICEID")
 				.setCheck("Number")
@@ -103,5 +103,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cの送信開始準備")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendValueInput("DEVICEID")
 				.setCheck("Number")
@@ -129,5 +129,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cの送信バッファの末尾に数値を追加する")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendValueInput("DATA")
 				.setCheck("Number")
@@ -154,5 +154,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cの送信シーケンスを発行する")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendDummyInput()
 				.appendField("ストップコンディション発生")
@@ -179,5 +179,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cへ受信シーケンスを発行する")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendValueInput("ADDRESS")
 				.setCheck("Number")
@@ -206,5 +206,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cへ受信シーケンスを発行しデータを読み出す")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Number");
@@ -228,5 +228,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cの受信バッファ内にあるデータ数を調べる")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Number");
@@ -250,5 +250,5 @@
 			this.appendDummyInput()
 				.appendField("I2Cの周波数を変更する")
-				.appendField(GrPeach.I2CPorts(), "I2C_PORT_NO");
+				.appendField(App.TargetBoard.I2CPorts(), "I2C_PORT_NO");
 			this.appendValueInput("FREQUENCY")
 				.setCheck("Number")
@@ -269,8 +269,8 @@
 			var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO");
 			// $i2c0 = I2c.new(0)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var c = new const_node(this, intern("I2c"));
 			var p = new node[] {
-				new int_node(this, GrPeach.I2CPortNameToNum(dropdown_i2c_port_no))
+				new int_node(this, App.TargetBoard.I2CPortNameToNum(dropdown_i2c_port_no))
 			};
 			return new asgn_node(this, a, new call_node(this, c, intern("new"), p, null));
@@ -284,5 +284,5 @@
 			var value_data = valueToCode(block, "DATA");
 			// $i2c0.write(0, 0x00, 0x00)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[] {
 				value_deviceid,
@@ -300,5 +300,5 @@
 			var value_address_h = valueToCode(block, "ADDRESS_H");
 			// $i2c0.read(0, 0x00, 0x00)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[] {
 				value_deviceid,
@@ -316,5 +316,5 @@
 			var value_deviceid = valueToCode(block, "DEVICEID");
 			// $i2c0.begin(0)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[] {
 				value_deviceid,
@@ -328,5 +328,5 @@
 			var value_data = valueToCode(block, "DATA");
 			// $i2c0.lwrite(0x00)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[0];
 			if (value_data != null)
@@ -340,5 +340,5 @@
 			var checkbox_stop = block.getFieldValue("STOP");
 			// $i2c0.lwrite(0x00)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[0];
 			if (checkbox_stop != null)
@@ -353,5 +353,5 @@
 			var value_count = valueToCode(block, "COUNT");
 			// $i2c0.request(0x00, 1)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[] {
 				value_address,
@@ -365,5 +365,5 @@
 			var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO");
 			// $i2c0.lread()
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[0];
 			return new call_node(this, a, intern("lread"), p, null);
@@ -374,5 +374,5 @@
 			var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO");
 			// $i2c0.available()
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[0];
 			return new call_node(this, a, intern("available"), p, null);
@@ -384,5 +384,5 @@
 			var value_frequency = valueToCode(block, "FREQUENCY");
 			// $i2c0.frequency(0)
-			var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.I2CPortNameToVariable(dropdown_i2c_port_no)));
 			var p = new node[] {
 				value_frequency
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/KernelBlock.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/KernelBlock.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/KernelBlock.cs	(revision 273)
@@ -42,5 +42,5 @@
 			this.appendDummyInput()
 				.appendField("PINのモード設定")
-				.appendField(GrPeach.Pins(), "PIN_NO");
+				.appendField(App.TargetBoard.Pins(), "PIN_NO");
 			this.appendDummyInput()
 				.appendField("モード")
@@ -71,5 +71,5 @@
 			this.appendDummyInput()
 				.appendField("デジタルライト")
-				.appendField(GrPeach.Pins(), "PIN_NO");
+				.appendField(App.TargetBoard.Pins(), "PIN_NO");
 			this.appendDummyInput()
 				.appendField("値")
@@ -100,5 +100,5 @@
 			this.appendDummyInput()
 				.appendField("デジタルリード")
-				.appendField(GrPeach.Pins(), "PIN_NO");
+				.appendField(App.TargetBoard.Pins(), "PIN_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Boolean");
@@ -122,5 +122,5 @@
 			this.appendDummyInput()
 				.appendField("アナログリード")
-				.appendField(GrPeach.AnalogPins(), "PIN_NO");
+				.appendField(App.TargetBoard.AnalogPins(), "PIN_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Number");
@@ -144,5 +144,5 @@
 			this.appendDummyInput()
 				.appendField("PWM出力")
-				.appendField(GrPeach.PwmPins(), "PIN_NO");
+				.appendField(App.TargetBoard.PwmPins(), "PIN_NO");
 			this.appendValueInput("PWM_OUT")
 				.setCheck("Number")
@@ -432,5 +432,5 @@
 			this.appendDummyInput()
 				.appendField("トーン出力")
-				.appendField(GrPeach.PwmPins(), "PIN_NO");
+				.appendField(App.TargetBoard.PwmPins(), "PIN_NO");
 			this.appendValueInput("FREQUENCY")
 				.setCheck("Number")
@@ -481,5 +481,5 @@
 			this.appendDummyInput()
 				.appendField("トーン出力停止")
-				.appendField(GrPeach.PwmPins(), "PIN_NO");
+				.appendField(App.TargetBoard.PwmPins(), "PIN_NO");
 			this.setInputsInline(true);
 			this.setPreviousStatement(true, null);
@@ -555,6 +555,6 @@
 			var dropdown_pin_mode = block.getFieldValue("PIN_MODE");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
-				new int_node(this, GrPeach.PinModeNameToNum(dropdown_pin_mode))
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinModeNameToNum(dropdown_pin_mode))
 			};
 			return new fcall_node(this, intern("pinMode"), p, null);
@@ -566,6 +566,6 @@
 			var dropdown_pin_value = block.getFieldValue("PIN_VALUE");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
-				new int_node(this, GrPeach.PinValueNameToNum(dropdown_pin_value ))
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinValueNameToNum(dropdown_pin_value ))
 			};
 			return new fcall_node(this, intern("digitalWrite"), p, null);
@@ -576,5 +576,5 @@
 			var dropdown_pin_no = block.getFieldValue("PIN_NO");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
 			};
 			return new fcall_node(this, intern("digitalRead"), p, null);
@@ -585,5 +585,5 @@
 			var dropdown_pin_no = block.getFieldValue("PIN_NO");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
 			};
 			return new fcall_node(this, intern("analogRead"), p, null);
@@ -595,5 +595,5 @@
 			var value_pwm_out = valueToCode(block, "PWM_OUT");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
 				value_pwm_out
 			};
@@ -611,5 +611,5 @@
 			var dropdown_analog_reference_mode = block.getFieldValue("ANALOG_REFERENCE_MODE");
 			var p = new node[] {
-				new int_node(this, GrPeach.AnalogRefModeNameToNum(dropdown_analog_reference_mode))
+				new int_node(this, App.TargetBoard.AnalogRefModeNameToNum(dropdown_analog_reference_mode))
 			};
 			return new fcall_node(this, intern("analogReference"), p, null);
@@ -693,5 +693,5 @@
 			var value_duration = valueToCode(block, "DURATION");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
 				value_frequency,
 				value_duration
@@ -710,5 +710,5 @@
 			var dropdown_pin_no = block.getFieldValue("PIN_NO");
 			var p = new node[] {
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
 			};
 			return new fcall_node(this, intern("noTone"), p, null);
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/MemFileBlock.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/MemFileBlock.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/MemFileBlock.cs	(revision 273)
@@ -18,5 +18,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルをオープンします")
-				.appendField(GrPeach.MemFileHandles(), "MEM_FILE_NO");
+				.appendField(App.TargetBoard.MemFileHandles(), "MEM_FILE_NO");
 			this.appendValueInput("FILENAME")
 				.setCheck("String")
@@ -51,5 +51,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルをクローズします")
-				.appendField(GrPeach.MemFileHandles(), "MEM_FILE_NO");
+				.appendField(App.TargetBoard.MemFileHandles(), "MEM_FILE_NO");
 			this.setInputsInline(true);
 			this.setPreviousStatement(true, null);
@@ -73,5 +73,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルから1バイト読み込みます")
-				.appendField(GrPeach.MemFileHandles(), "MEM_FILE_NO");
+				.appendField(App.TargetBoard.MemFileHandles(), "MEM_FILE_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Number");
@@ -94,5 +94,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルにバイナリデータを書き込みます")
-				.appendField(GrPeach.MemFileHandles(), "MEM_FILE_NO");
+				.appendField(App.TargetBoard.MemFileHandles(), "MEM_FILE_NO");
 			this.appendValueInput("DATA")
 				.setCheck("String")
@@ -121,5 +121,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルの読み出し位置を移動する")
-				.appendField(GrPeach.MemFileHandles(), "MEM_FILE_NO");
+				.appendField(App.TargetBoard.MemFileHandles(), "MEM_FILE_NO");
 			this.appendValueInput("POSITION")
 				.setCheck("Number")
@@ -198,7 +198,7 @@
 			var c = new const_node(this, intern("MemFile"));
 			var p = new node[] {
-				new int_node(this, GrPeach.MemFileHandlerNameToNum(dropdown_mem_file_no)),
+				new int_node(this, App.TargetBoard.MemFileHandlerNameToNum(dropdown_mem_file_no)),
 				value_filename,
-				new int_node(this, GrPeach.MemOpenModeNameToNum(dropdown_eep_open_mode))
+				new int_node(this, App.TargetBoard.MemOpenModeNameToNum(dropdown_eep_open_mode))
 			};
 			return new call_node(this, c, intern("open"), p, null);
@@ -210,5 +210,5 @@
 			var c = new const_node(this, intern("MemFile"));
 			var p = new node[] {
-				new int_node(this, GrPeach.MemFileHandlerNameToNum(dropdown_mem_file_no)),
+				new int_node(this, App.TargetBoard.MemFileHandlerNameToNum(dropdown_mem_file_no)),
 			};
 			return new call_node(this, c, intern("close"), p, null);
@@ -220,5 +220,5 @@
 			var c = new const_node(this, intern("MemFile"));
 			var p = new node[] {
-				new int_node(this, GrPeach.MemFileHandlerNameToNum(dropdown_mem_file_no)),
+				new int_node(this, App.TargetBoard.MemFileHandlerNameToNum(dropdown_mem_file_no)),
 			};
 			return new call_node(this, c, intern("read"), p, null);
@@ -232,5 +232,5 @@
 			var c = new const_node(this, intern("MemFile"));
 			var p = new node[] {
-				new int_node(this, GrPeach.MemFileHandlerNameToNum(dropdown_mem_file_no)),
+				new int_node(this, App.TargetBoard.MemFileHandlerNameToNum(dropdown_mem_file_no)),
 				value_data,
 				value_length,
@@ -245,5 +245,5 @@
 			var c = new const_node(this, intern("MemFile"));
 			var p = new node[] {
-				new int_node(this, GrPeach.MemFileHandlerNameToNum(dropdown_mem_file_no)),
+				new int_node(this, App.TargetBoard.MemFileHandlerNameToNum(dropdown_mem_file_no)),
 				value_position,
 			};
@@ -260,5 +260,5 @@
 				value_dst_filename,
 				value_dst_filename,
-				new int_node(this, GrPeach.MemCpModeNameToNum(dropdown_eep_cp_mode))
+				new int_node(this, App.TargetBoard.MemCpModeNameToNum(dropdown_eep_cp_mode))
 			};
 			return new call_node(this, c, intern("cp"), p, null);
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/SdBlock.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/SdBlock.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/SdBlock.cs	(revision 273)
@@ -137,5 +137,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルをオープンします")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.appendValueInput("FILENAME")
 				.setCheck("String")
@@ -169,5 +169,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルをクローズします")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Boolean");
@@ -191,5 +191,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルから1バイト読み込みます")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Number");
@@ -213,5 +213,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルの読み出し位置を移動する")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.appendValueInput("POSITION")
 				.setCheck("Number")
@@ -238,5 +238,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルにバイナリデータを書き込む")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.appendValueInput("DATA")
 				.setCheck("String")
@@ -266,5 +266,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルの書き込みをフラッシュします")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.setPreviousStatement(true, null);
 			this.setNextStatement(true, null);
@@ -288,5 +288,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルのサイズを取得します")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.setOutput(true, "Number");
 			this.setColour(160);
@@ -308,5 +308,5 @@
 			this.appendDummyInput()
 				.appendField("ファイルのseek位置を取得します")
-				.appendField(GrPeach.SdFileHandles(), "SD_FILE_NO");
+				.appendField(App.TargetBoard.SdFileHandles(), "SD_FILE_NO");
 			this.setOutput(true, "Number");
 			this.setColour(160);
@@ -377,7 +377,7 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 				value_filename,
-				new int_node(this, GrPeach.SdOpenModeNameToNum(dropdown_sd_open_mode)),
+				new int_node(this, App.TargetBoard.SdOpenModeNameToNum(dropdown_sd_open_mode)),
 			};
 			return new call_node(this, c, intern("open"), p, null);
@@ -389,5 +389,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 			};
 			return new call_node(this, c, intern("close"), p, null);
@@ -399,5 +399,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 			};
 			return new call_node(this, c, intern("read"), p, null);
@@ -410,5 +410,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 				value_position,
 			};
@@ -423,5 +423,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 				value_data,
 				value_length,
@@ -435,5 +435,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 			};
 			return new call_node(this, c, intern("flush"), p, null);
@@ -445,5 +445,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 			};
 			return new call_node(this, c, intern("size"), p, null);
@@ -455,5 +455,5 @@
 			var c = new const_node(this, intern("SD"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SdFileHandlerNameToNum(dropdown_sd_file_no)),
+				new int_node(this, App.TargetBoard.SdFileHandlerNameToNum(dropdown_sd_file_no)),
 			};
 			return new call_node(this, c, intern("position"), p, null);
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/SerialBlock.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/SerialBlock.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/SerialBlock.cs	(revision 273)
@@ -53,5 +53,5 @@
 			this.appendDummyInput()
 				.appendField("シリアル通信を初期化します")
-				.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+				.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.appendValueInput("BPS")
 				.setCheck("Number")
@@ -78,5 +78,5 @@
 			this.appendDummyInput()
 				.appendField("ボーレートを設定します")
-				.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+				.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.appendValueInput("BPS")
 				.setCheck("Number")
@@ -104,5 +104,5 @@
 			this.appendDummyInput()
 				.appendField("シリアルに出力します")
-				.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+				.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.appendValueInput("STR")
 				.setCheck("String")
@@ -130,5 +130,5 @@
 			this.appendDummyInput()
 				.appendField("シリアルに\\r\\n付きで出力します")
-				.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+				.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.appendValueInput("STR")
 				.setCheck("String")
@@ -156,5 +156,5 @@
 			this.appendDummyInput()
 				.appendField("シリアルデータがあるかどうか調べます")
-				.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+				.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Number");
@@ -178,5 +178,5 @@
 			this.appendDummyInput()
 			.appendField("シリアルからデータを取得します")
-			.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+			.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.setInputsInline(true);
 			this.setOutput(true, "Array");
@@ -199,5 +199,5 @@
 			this.appendDummyInput()
 			.appendField("シリアルにデータを出力します")
-			.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+			.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.appendValueInput("DATA")
 				.setCheck("String")
@@ -227,5 +227,5 @@
 			this.appendDummyInput()
 				.appendField("シリアルデータをフラッシュします")
-				.appendField(GrPeach.SerialPorts(), "SERIAL_PORT_NO");
+				.appendField(App.TargetBoard.SerialPorts(), "SERIAL_PORT_NO");
 			this.setInputsInline(true);
 			this.setPreviousStatement(true, null);
@@ -249,8 +249,8 @@
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
 			var value_bps = valueToCode(block, "BPS");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var c = new const_node(this, intern("Serial"));
 			var p = new node[] {
-				new int_node(this, GrPeach.SerialPortNameToNum(dropdown_serial_port_no)),
+				new int_node(this, App.TargetBoard.SerialPortNameToNum(dropdown_serial_port_no)),
 				value_bps
 			};
@@ -262,5 +262,5 @@
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
 			var value_bps = valueToCode(block, "BPS");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[] {
 				value_bps
@@ -273,5 +273,5 @@
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
 			var value_str = valueToCode(block, "STR");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[] {
 				value_str
@@ -284,5 +284,5 @@
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
 			var value_str = valueToCode(block, "STR");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[] {
 				value_str
@@ -294,5 +294,5 @@
 		{
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[0];
 			return new call_node(this, a, intern("available"), p, null);
@@ -302,5 +302,5 @@
 		{
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[0];
 			return new call_node(this, a, intern("read"), p, null);
@@ -312,5 +312,5 @@
 			var value_data = valueToCode(block, "DATA");
 			var value_length = valueToCode(block, "LENGTH");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[] {
 				value_data,
@@ -323,5 +323,5 @@
 		{
 			var dropdown_serial_port_no = block.getFieldValue("SERIAL_PORT_NO");
-			var a = new gvar_node(this, intern(GrPeach.SerialPortNameToVariable(dropdown_serial_port_no)));
+			var a = new gvar_node(this, intern(App.TargetBoard.SerialPortNameToVariable(dropdown_serial_port_no)));
 			var p = new node[0];
 			return new call_node(this, a, intern("flash"), p, null);
Index: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/ServoBlock.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/Arduino/ServoBlock.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/Arduino/ServoBlock.cs	(revision 273)
@@ -21,5 +21,5 @@
 			this.appendDummyInput()
 				.appendField("割り当てるピン番号")
-				.appendField(GrPeach.PwmPins(), "PIN_NO")
+				.appendField(App.TargetBoard.PwmPins(), "PIN_NO")
 				.appendField("Min")
 				.appendField(new FieldTextInput("default"), "MIN")
@@ -224,5 +224,5 @@
 			var p = new node[] {
 				new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
-				new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
+				new int_node(this, App.TargetBoard.PinNameToNum(dropdown_pin_no)),
 				new int_node(this, text_min == null ? 0 : Script.ParseInt(text_min, 10)),
 				new int_node(this, text_max == null ? 0 : Script.ParseInt(text_max, 10)),
Index: EcnlProtoTool/trunk/webapp/webmrbc/MainMenuView.cs
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/MainMenuView.cs	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/MainMenuView.cs	(revision 273)
@@ -321,4 +321,50 @@
 		}
 
+		public void onInformationOpen()
+		{
+			jQuery.Ajax(new AjaxOptions() {
+				Url = "/information.json",
+				DataType = "json",
+				Success = (data, textStatus, request) => {
+					var items = (dynamic[])data;
+
+					var listview = jQuery.Select("#software-list");
+					listview.Html("");
+
+					foreach (var item in items) {
+						string title = item.title;
+						string version = item.version;
+						string link = item.link;
+						string note = item.note;
+
+						var a = new jQuery("<a>").Attr("class", "list-group-item");
+						a.Append(new jQuery("<h4>").Attr("class", "list-group-item-heading").Text(title));
+						if (String.IsNullOrEmpty(link)) {
+							a.Attr("href", "#");
+						}
+						else {
+							a.Attr("href", link);
+							a.Attr("target", "_blank");
+						}
+						a.Append(new jQuery("<p>").Attr("class", "list-group-item-text").Text("Version " + version));
+						if (!String.IsNullOrEmpty(note))
+							a.Append(new jQuery("<p>").Attr("class", "list-group-item-text").Text(note));
+						listview.Append(a);
+					}
+
+					var el = jQuery.Select("#information-modal");
+					el.Modal(ModalOperation.Show);
+				},
+				Error = (request, textStatus, error) => {
+				},
+			});
+		}
+
+		public void onInformationClose()
+		{
+			var el = jQuery.Select("#information-modal");
+			el.Modal(ModalOperation.Hide);
+		}
+
 		private static void SelectBlockTab()
 		{
Index: EcnlProtoTool/trunk/webapp/webmrbc/copy.bat
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/copy.bat	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/copy.bat	(revision 273)
@@ -42,6 +42,8 @@
 copy /Y favicon.ico ..\..\httpd-fs\favicon.ico
 copy /Y img\banner.svg ..\..\httpd-fs\img\banner.svg
+copy /Y img\core-s.svg ..\..\httpd-fs\img\core-s.svg
 copy /Y img\no_image.png ..\..\httpd-fs\img\no_image.png
 copy /Y index.min.html ..\..\httpd-fs\index.html
+copy /Y information.json ..\..\httpd-fs\information.json
 copy /Y js\FileSaver.min.js ..\..\httpd-fs\js\FileSaver.min.js
 copy /Y js\blockly_compressed.js ..\..\httpd-fs\js\blockly_compressed.js
Index: EcnlProtoTool/trunk/webapp/webmrbc/css/webmrbc.css
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/css/webmrbc.css	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/css/webmrbc.css	(revision 273)
@@ -26,4 +26,9 @@
 	#main-menu .container {
 		width: 100%;
+		padding-right: 0px;
+	}
+
+	#main-menu #file-from {
+		padding-right: 0px;
 	}
 
Index: EcnlProtoTool/trunk/webapp/webmrbc/img/core-s.svg
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/img/core-s.svg	(revision 273)
+++ EcnlProtoTool/trunk/webapp/webmrbc/img/core-s.svg	(revision 273)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Microsoft Visio 11.0ãSVG Export v1.0 ã«ããçæ core-s_.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="0.678893in" height="0.19685in"
+		viewBox="0 0 48.8803 14.1732" xml:space="preserve" color-interpolation-filters="sRGB" class="st2">
+	<v:documentProperties v:langID="1041" v:metric="true" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#000000;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st2 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<g id="group2-1" v:mID="2" v:groupContext="group">
+			<title>ã·ã¼ã.2</title>
+			<g id="shape9-2" v:mID="9" v:groupContext="shape" transform="translate(-2.9976E-015,-0.475439)">
+				<title>ã·ã¼ã.9</title>
+				<path d="M11.65 1.94 L10.74 6.54 L10.01 6.53 C10.02 6.3 10.01 6.01 10.01 5.65 C10.01 3.38 8.52 2.29 7.2 2.29 C4.07
+							 2.29 2.69 7 2.69 9.89 C2.69 10.29 2.75 13.21 5.81 13.21 C7.93 13.21 8.93 11.56 9.53 10.04 L10.27 10.41
+							 C9.44 12.59 7.81 14.17 5.1 14.17 C2.38 14.17 -0 12.67 0 9.39 C0 4.15 3.62 1.43 6.55 1.43 C8.72 1.43
+							 9.56 2.34 10.18 2.89 C10.54 2.63 10.76 2.33 10.95 1.94 L11.65 1.94 Z" class="st1"/>
+			</g>
+			<g id="shape10-4" v:mID="10" v:groupContext="shape" transform="translate(11.6161,-0.616786)">
+				<title>ã·ã¼ã.10</title>
+				<path d="M4.82 5.8 C6.17 5.8 8.44 6.82 8.44 9.33 C8.44 11.58 6.84 14.17 3.6 14.17 C0.77 14.17 0 12.12 0 10.74 C-0
+							 6.44 3.92 5.8 4.82 5.8 ZM4.82 6.53 C3.03 6.53 2.18 11 2.18 11.8 C2.18 13.07 2.89 13.59 3.53 13.59 C4.95
+							 13.59 6.23 10.74 6.23 8.26 C6.23 6.57 5.27 6.53 4.82 6.53 Z" class="st1"/>
+			</g>
+			<g id="shape11-6" v:mID="11" v:groupContext="shape" transform="translate(21.7674,-0.770983)">
+				<title>ã·ã¼ã.11</title>
+				<path d="M0.55 6.44 L3.66 6.28 L2.96 9.69 C3.5 8.49 4.39 6.12 6.33 6.12 C7.68 6.12 8.03 7.03 8.03 7.52 C8.03 8.26
+							 7.62 8.84 6.87 8.84 C6.63 8.84 5.85 8.62 5.85 7.98 C5.85 7.65 5.99 7.66 5.99 7.26 C5.99 7.12 5.72 7.12
+							 5.69 7.12 C3.94 7.12 2.54 12.54 2.21 14.17 L0 14.17 C0 14.17 1.57 8.71 1.57 8.03 C1.57 7.21 0.66 7.08
+							 0.33 7.08 L0.55 6.44 Z" class="st1"/>
+			</g>
+			<g id="shape12-8" v:mID="12" v:groupContext="shape" transform="translate(30.184,-0.668185)">
+				<title>ã·ã¼ã.12</title>
+				<path d="M2.42 10.96 C2.42 11.56 2.2 13.3 3.94 13.3 C5.11 13.3 5.94 12.5 6.49 11.92 L7.04 12.28 C5.91 13.45 4.92
+							 14.17 3.35 14.17 C2.08 14.17 -0 13.61 0 11.18 C-0 7.84 2.69 5.81 5.29 5.81 C7.07 5.81 7.54 6.9 7.54
+							 7.8 C7.54 9.95 3.39 10.79 2.42 10.96 ZM2.45 10.29 C5.05 9.71 5.4 8.13 5.4 7.74 C5.4 7.31 5.38 6.51 4.65
+							 6.51 C3.43 6.51 2.92 8.38 2.45 10.29 Z" class="st1"/>
+			</g>
+			<g id="shape13-10" v:mID="13" v:groupContext="shape" transform="translate(37.1485,2.84217E-014)">
+				<title>ã·ã¼ã.13</title>
+				<path d="M1.26 11.38 C1.26 13.42 4.12 13.51 4.38 13.51 C7.5 13.48 8.28 11.68 8.28 10.61 C8.28 9.53 7.79 8.98 6.24
+							 8.46 C5.5 8.2 4.25 7.94 4.25 7.12 C4.25 6.18 5.67 5.76 6.08 5.76 C6.72 5.76 7.08 5.9 7.08 6.22 C7.08
+							 6.46 6.78 6.5 6.78 7.23 C6.78 7.81 7.38 8.01 7.75 8.01 C8.11 8.01 8.79 7.75 8.79 6.98 C8.79 5.82 7.57
+							 5.11 6.12 5.11 C4.24 5.11 2.29 5.83 2.29 7.95 C2.29 9.39 3.33 9.68 4.61 10.14 C5.15 10.33 6.24 10.59
+							 6.24 11.47 C6.24 12.35 5.23 12.76 4.32 12.77 C3.47 12.79 2.75 12.31 3.01 11.99 C3.25 11.68 3.35 11.49
+							 3.37 11.19 C3.38 10.72 3.16 10.16 2.42 10.16 C1.53 10.16 1.26 10.77 1.26 11.38 ZM7.9 14.17 L0 14.17
+							 L3.83 -0 L11.73 -0 L7.9 14.17 Z" class="st1"/>
+			</g>
+		</g>
+	</g>
+</svg>
Index: EcnlProtoTool/trunk/webapp/webmrbc/index.html
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/index.html	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/index.html	(revision 273)
@@ -5,5 +5,5 @@
 	<meta http-equiv="X-UA-Compatible" content="IE=edge">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
-	<title>TOPPERS/ECNL for mruby Prototype Generator</title>
+	<title>TOPPERS/ECNL for mruby Prototyping Tool</title>
 	<link rel="stylesheet" href="bootstrap/css/bootstrap.css" />
 	<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.css" />
@@ -136,4 +136,7 @@
 					<i class="glyphicon glyphicon-send"></i>
 					実行
+				</a>
+				<a class="btn btn-link" id="information-button" onclick="WebMrbc.Views.MainMenuView.onInformationOpen()">
+					<i class="glyphicon glyphicon-info-sign"></i>
 				</a>
 			</form>
@@ -311,7 +314,31 @@
 				<div class="modal-body">
 					<div id="message-text">実行ファイルを転送しています。</div>
+				</div>
+				<div class="modal-footer" style="text-align: right;">
+					<button id="message-button" class="btn btn-default" hidden onclick="WebMrbc.Views.MainMenuView.onMessageClose()">OK</button>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div id="information-modal" class="modal fade">
+		<div class="modal-dialog">
+			<div class="modal-content">
+				<div class="modal-body">
+					<div class="panel panel-default">
+						<div class="panel-heading">
+							ソフトウェア情報
+						</div>
+						<div id="software-list" class="list-group">
+						</div>
+					</div>
 					<div style="text-align: right;">
-						<button id="message-button" class="btn btn-default" hidden onclick="WebMrbc.Views.MainMenuView.onMessageClose()">OK</button>
+						<button id="information-button" class="btn btn-default" hidden onclick="WebMrbc.Views.MainMenuView.onInformationClose()">OK</button>
 					</div>
+				</div>
+				<div class="modal-footer" style="text-align: right;">
+					<a href="http://www.core-s.co.jp" target="_blank" style="text-align: center">
+						<p class="list-group-item-text"><img src="img/core-s.svg">コアーズ株式会社</p>
+					</a>
 				</div>
 			</div>
Index: EcnlProtoTool/trunk/webapp/webmrbc/index.min.html
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/index.min.html	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/index.min.html	(revision 273)
@@ -5,5 +5,5 @@
 	<meta http-equiv="X-UA-Compatible" content="IE=edge">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
-	<title>TOPPERS/ECNL for mruby Prototype Generator</title>
+	<title>TOPPERS/ECNL for mruby Prototyping Tool</title>
 	<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
 	<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css" />
@@ -134,4 +134,7 @@
 					<i class="glyphicon glyphicon-send"></i>
 					実行
+				</a>
+				<a class="btn btn-link" id="information-button" onclick="WebMrbc.Views.MainMenuView.onInformationOpen()">
+					<i class="glyphicon glyphicon-info-sign"></i>
 				</a>
 			</form>
@@ -309,7 +312,31 @@
 				<div class="modal-body">
 					<div id="message-text">実行ファイルを転送しています。</div>
+				</div>
+				<div class="modal-footer" style="text-align: right;">
+					<button id="message-button" class="btn btn-default" hidden onclick="WebMrbc.Views.MainMenuView.onMessageClose()">OK</button>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div id="information-modal" class="modal fade">
+		<div class="modal-dialog">
+			<div class="modal-content">
+				<div class="modal-body">
+					<div class="panel panel-default">
+						<div class="panel-heading">
+							ソフトウェア情報
+						</div>
+						<div id="software-list" class="list-group">
+						</div>
+					</div>
 					<div style="text-align: right;">
-						<button id="message-button" class="btn btn-default" hidden onclick="WebMrbc.Views.MainMenuView.onMessageClose()">OK</button>
+						<button id="information-button" class="btn btn-default" hidden onclick="WebMrbc.Views.MainMenuView.onInformationClose()">OK</button>
 					</div>
+				</div>
+				<div class="modal-footer" style="text-align: right;">
+					<a href="http://www.core-s.co.jp" target="_blank" style="text-align: center">
+						<p class="list-group-item-text"><img src="img/core-s.svg">コアーズ株式会社</p>
+					</a>
 				</div>
 			</div>
Index: EcnlProtoTool/trunk/webapp/webmrbc/information.json
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/information.json	(revision 273)
+++ EcnlProtoTool/trunk/webapp/webmrbc/information.json	(revision 273)
@@ -0,0 +1,104 @@
+[
+	{
+		"title": "TOPPERS/ECNL for mruby Prototyping Tool",
+		"version": "1.A.0 Î±ç",
+		"note": "APPENDIX ECHONETæ©å¨ãªãã¸ã§ã¯ãè©³ç´°è¦å® Release C"
+	},
+	{
+		"title": "TOPPERS/ASP3",
+		"version": "3.1.0",
+		"link": "https://www.toppers.jp/asp3-kernel.html",
+		"note": "åççæç GR-PEACHåãã¿ã¼ã²ããä¾å­é¨"
+	},
+	{
+		"title": "mbed",
+		"version": "3.10",
+		"link": "https://developer.mbed.org/platforms/Renesas-GR-PEACH/",
+		"note": "GR-PEACHåãã¿ã¼ã²ããä¾å­é¨"
+	},
+	{
+		"title": "TINET",
+		"version": "1.5.4",
+		"link": "https://www.toppers.jp/tinet.html"
+	},
+	{
+		"title": "mruby",
+		"version": "1.2.0",
+		"link": "http://mruby.org/"
+	},
+	{
+		"title": "FAT File System Module",
+		"version": "R0.10b",
+		"link": "http://elm-chan.org/fsw/ff/00index_j.html"
+	},
+	{
+		"title": "Wakayama.rb Ruby Board V2 library",
+		"version": "(2016/10/12 master)",
+		"link": "https://github.com/wakayamarb/wrbb-v2lib-firm",
+		"note": "RubyçArduino APIãä½¿ç¨"
+	},
+	{
+		"title": "http-parser",
+		"version": "(2015/1/14 master)",
+		"link": "https://github.com/joyent/http-parser"
+	},
+	{
+		"title": "mod_websocket",
+		"version": "(2013/1/13 master)",
+		"link": "https://github.com/nori0428/mod_websocket",
+		"note": "base64,sha1ãä½¿ç¨"
+	},
+	{
+		"title": "uIP",
+		"version": "1.0",
+		"link": "https://github.com/adamdunkels/uip",
+		"note": "httpdããã¼ã¹ã«ä½¿ç¨"
+	},
+	{
+		"title": "Bridge.NET",
+		"version": "15.7.0",
+		"link": "http://bridge.net/"
+	},
+	{
+		"title": "jQuery",
+		"version": "3.10.0",
+		"link": "http://jquery.com"
+	},
+	{
+		"title": "Bootstrap",
+		"version": "v3.3.7",
+		"link": "http://getbootstrap.com"
+	},
+	{
+		"title": "Blockly",
+		"version": "2016/12/6 master",
+		"link": "https://developers.google.com/blockly/"
+	},
+	{
+		"title": "blockly2ruby",
+		"version": "2014/6/18 master",
+		"link": "https://github.com/jeanlazarou/blockly2ruby"
+	},
+	{
+		"title": "Ace (Ajax.org Cloud9 Editor)",
+		"version": "(2016/6/9 master)",
+		"link": "https://ace.c9.io/#nav=about"
+	},
+	{
+		"title": "xterm.js",
+		"version": "(2016/7/28 master)",
+		"link": "http://xtermjs.org/"
+	},
+	{
+		"title": "jay",
+		"version": "1.1.0",
+		"link": "https://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html",
+		"note": "mrubyã®parser.yã®C#ç§»æ¤çã§ä½¿ç¨"
+	},
+	{
+		"title": "Smalruby",
+		"version": "0.4.3",
+		"link": "https://github.com/smalruby/smalruby-editor",
+		"note": "UIããã¼ã¹ã«ä½¿ç¨"
+	}
+]
Index: EcnlProtoTool/trunk/webapp/webmrbc/webmrbc.csproj
===================================================================
--- EcnlProtoTool/trunk/webapp/webmrbc/webmrbc.csproj	(revision 272)
+++ EcnlProtoTool/trunk/webapp/webmrbc/webmrbc.csproj	(revision 273)
@@ -77,4 +77,5 @@
     <Content Include="ecnl_toolbox.xml" />
     <Content Include="img\banner.svg" />
+    <Content Include="img\core-s.svg" />
     <Content Include="img\no_image.png" />
     <Content Include="js\blockly.js" />
@@ -95,4 +96,5 @@
     <Content Include="bootstrap\fonts\glyphicons-halflings-regular.woff2" />
     <Content Include="echonet_objects.json" />
+    <Content Include="information.json" />
     <None Include="Web.Debug.config">
       <DependentUpon>Web.config</DependentUpon>
@@ -114,4 +116,5 @@
     <Compile Include="App.cs" />
     <Compile Include="Arduino\GrPeach.cs" />
+    <Compile Include="Arduino\GrSakura.cs" />
     <Compile Include="Arduino\I2cBlock.cs" />
     <Compile Include="Arduino\KernelBlock.cs" />
@@ -122,4 +125,5 @@
     <Compile Include="Arduino\ServoBlock.cs" />
     <Compile Include="Arduino\SystemBlock.cs" />
+    <Compile Include="Arduino\TargetBoard.cs" />
     <Compile Include="Block.cs" />
     <Compile Include="Blockly.cs" />
