OSDN Git Service

update libMiMic
[mimic/MiMicSDK.git] / lib / src / mimicvm / NyLPC_cMiMicVM.c
index e5bb4a9..dd6f2dd 100644 (file)
@@ -19,8 +19,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
  *\r
  * For further information please contact.\r
- *     http://nyatla.jp/\r
- *     <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
+ *  http://nyatla.jp/\r
+ *  <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
  *\r
  *********************************************************************************/\r
 #include <ctype.h>\r
@@ -33,13 +33,13 @@ static NyLPC_TUInt8 process_instruction(NyLPC_TcMiMicVM_t* i_inst,const union Ny
 \r
 void NyLPC_cMiMicVM_initialize(NyLPC_TcMiMicVM_t* i_inst,struct NyLPC_TcMiMicVM_TEvent* i_handler)\r
 {\r
-       NyLPC_Assert(i_inst!=NULL);\r
-       NyLPC_Assert(i_handler!=NULL);\r
-       NyLPC_Assert(i_handler->get_stream!=NULL);\r
-       NyLPC_Assert(i_handler->put_stream!=NULL);\r
-       NyLPC_Assert(i_handler->sleep!=NULL);\r
-       i_inst->_event_handler=i_handler;\r
-       return;\r
+    NyLPC_Assert(i_inst!=NULL);\r
+    NyLPC_Assert(i_handler!=NULL);\r
+    NyLPC_Assert(i_handler->get_stream!=NULL);\r
+    NyLPC_Assert(i_handler->put_stream!=NULL);\r
+    NyLPC_Assert(i_handler->sleep!=NULL);\r
+    i_inst->_event_handler=i_handler;\r
+    return;\r
 }\r
 \r
 \r
@@ -50,40 +50,40 @@ void NyLPC_cMiMicVM_initialize(NyLPC_TcMiMicVM_t* i_inst,struct NyLPC_TcMiMicVM_
  */\r
 NyLPC_TUInt32 NyLPC_cMiMicVM_run(NyLPC_TcMiMicVM_t* i_inst,const NyLPC_TUInt32* i_instruction,const NyLPC_TUInt16 i_size_of_instruction)\r
 {\r
-       //データ部をgetstreamと連動させること。\r
-       NyLPC_TUInt32 retcode=NyLPC_cMiMicVM_RESULT_OK;\r
-       NyLPC_TUInt16 pc=0;\r
-       NyLPC_TUInt8 proc_in_byte;\r
-       if(i_size_of_instruction>0){\r
-               proc_in_byte=process_instruction(i_inst,(const union NyLPC_TcMiMicVM_TInstruction*)(i_instruction+pc),&retcode);\r
-               pc+=proc_in_byte;\r
-               //プログラムの終端に到達するか、0バイト処理の場合にブレーク。\r
-               while(proc_in_byte>0 && pc<i_size_of_instruction){\r
-                       proc_in_byte=process_instruction(i_inst,(const union NyLPC_TcMiMicVM_TInstruction*)(i_instruction+pc),&retcode);\r
-                       pc+=proc_in_byte;\r
-               }\r
-       }\r
-       return retcode;\r
+    //データ部をgetstreamと連動させること。\r
+    NyLPC_TUInt32 retcode=NyLPC_cMiMicVM_RESULT_OK;\r
+    NyLPC_TUInt16 pc=0;\r
+    NyLPC_TUInt8 proc_in_byte;\r
+    if(i_size_of_instruction>0){\r
+        proc_in_byte=process_instruction(i_inst,(const union NyLPC_TcMiMicVM_TInstruction*)(i_instruction+pc),&retcode);\r
+        pc+=proc_in_byte;\r
+        //プログラムの終端に到達するか、0バイト処理の場合にブレーク。\r
+        while(proc_in_byte>0 && pc<i_size_of_instruction){\r
+            proc_in_byte=process_instruction(i_inst,(const union NyLPC_TcMiMicVM_TInstruction*)(i_instruction+pc),&retcode);\r
+            pc+=proc_in_byte;\r
+        }\r
+    }\r
+    return retcode;\r
 }\r
 /**\r
  * 出力ストリームへ32ビット値を書き出す。\r
  */\r
 NyLPC_TBool NyLPC_cMiMicVM_sput(NyLPC_TcMiMicVM_t* i_inst,NyLPC_TUInt32 i_val)\r
 {\r
-       if(!i_inst->_event_handler->put_stream(i_inst->_event_handler,i_val)){\r
-               return NyLPC_TBool_FALSE;\r
-       }\r
-       return NyLPC_TBool_TRUE;\r
+    if(!i_inst->_event_handler->put_stream(i_inst->_event_handler,i_val)){\r
+        return NyLPC_TBool_FALSE;\r
+    }\r
+    return NyLPC_TBool_TRUE;\r
 }\r
 /**\r
  * 入力ストリームから32ビット値を読み出す。\r
  */\r
 NyLPC_TBool NyLPC_cMiMicVM_sget(NyLPC_TcMiMicVM_t* i_inst,NyLPC_TUInt32* o_val)\r
 {\r
-       if(!i_inst->_event_handler->get_stream(i_inst->_event_handler,o_val)){\r
-               return NyLPC_TBool_FALSE;\r
-       }\r
-       return NyLPC_TBool_TRUE;\r
+    if(!i_inst->_event_handler->get_stream(i_inst->_event_handler,o_val)){\r
+        return NyLPC_TBool_FALSE;\r
+    }\r
+    return NyLPC_TBool_TRUE;\r
 }\r
 \r
 \r
@@ -97,234 +97,234 @@ NyLPC_TBool NyLPC_cMiMicVM_sget(NyLPC_TcMiMicVM_t* i_inst,NyLPC_TUInt32* o_val)
  */\r
 static NyLPC_TUInt8 process_instruction(NyLPC_TcMiMicVM_t* i_inst,const union NyLPC_TcMiMicVM_TInstruction* ist,NyLPC_TUInt32* o_code)\r
 {\r
-       NyLPC_TUInt32 tret;\r
-       switch(ist->op.opc){\r
-       case NyLPC_TcMiMicVM_OP_TYPE_AND:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]&=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]&=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_OR:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]|=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]|=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_XOR:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]^=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]^=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_NOT:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
-                       i_inst->wm[ist->wm_32.wm]=~i_inst->wm[ist->wm_32.wm];\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_SHL:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
-                       i_inst->wm[ist->wmh08_32.wm]=i_inst->wm[ist->wmh08_32.wm]<<ist->wmh08_32.h8;\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]=i_inst->wm[ist->wmwm_32.wm1]<<i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_SHR:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
-                       i_inst->wm[ist->wmh08_32.wm]=i_inst->wm[ist->wmh08_32.wm]>>ist->wmh08_32.h8;\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]=i_inst->wm[ist->wmwm_32.wm1]>>i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_ADD:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]+=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]+=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_SUB:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]-=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]-=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_MUL:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]*=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]*=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_MGET:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]=*((NyLPC_TUInt32*)(ist->wmh32_64.h32));\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]=*((NyLPC_TUInt32*)(i_inst->wm[ist->wmwm_32.wm2]));\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_MPUT:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       *((NyLPC_TUInt32*)(ist->wmh32_64.h32))=i_inst->wm[ist->wmh32_64.wm];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       *((NyLPC_TUInt32*)(i_inst->wm[ist->wmwm_32.wm2]))=i_inst->wm[ist->wmwm_32.wm1];\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_SGET:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
-                       if(!i_inst->_event_handler->get_stream(i_inst->_event_handler,&(i_inst->wm[ist->wm_32.wm]))){\r
-                               NyLPC_OnErrorGoto(ERROR);\r
-                       }\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_SPUT:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
-                       if(!i_inst->_event_handler->put_stream(i_inst->_event_handler,i_inst->wm[ist->wm_32.wm])){\r
-                               NyLPC_OnErrorGoto(ERROR);\r
-                       }\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
-                       if(!i_inst->_event_handler->put_stream(i_inst->_event_handler,ist->h32_64.h32)){\r
-                               NyLPC_OnErrorGoto(ERROR);\r
-                       }\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_LD:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                       i_inst->wm[ist->wmwm_32.wm1]=i_inst->wm[ist->wmwm_32.wm2];\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                       i_inst->wm[ist->wmh32_64.wm]=ist->wmh32_64.h32;\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_NOP:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_NONE:\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_H08:\r
-                       i_inst->_event_handler->sleep(i_inst->_event_handler,ist->h8_32.h8);\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       //native call\r
-       case NyLPC_TcMiMicVM_OP_TYPE_CALL:\r
-               switch(ist->op.oprtype){\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
-                       tret=i_inst->_event_handler->native_call(i_inst->_event_handler,i_inst->wm[ist->wm_32.wm],i_inst);\r
-                       if(!NyLPC_cMiMicVM_RESULT_isOK(tret)){\r
-                               *o_code=tret;\r
-                               NyLPC_OnErrorGoto(ERROR_INHERIT);//エラー継承\r
-                       }\r
-                       break;\r
-               case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
-                       tret=i_inst->_event_handler->native_call(i_inst->_event_handler,ist->h32_64.h32,i_inst);\r
-                       if(!NyLPC_cMiMicVM_RESULT_isOK(tret)){\r
-                               *o_code=tret;\r
-                               NyLPC_OnErrorGoto(ERROR_INHERIT);//エラー継承\r
-                       }\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-               break;\r
-       case NyLPC_TcMiMicVM_OP_TYPE_EXIT:\r
-               *o_code=NyLPC_cMiMicVM_RESULT_OK;//OKに上書き\r
-               return 0;\r
-       default:\r
-               NyLPC_OnErrorGoto(ERROR);\r
-       }\r
-       //実行したコードのワード長を返す。\r
-       switch(ist->op.oprtype){\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_NONE:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_H08:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_H16:\r
-               *o_code=NyLPC_cMiMicVM_RESULT_OK;//OKに上書き\r
-               return 1;\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_WM_H16:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-       case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
-               *o_code=NyLPC_cMiMicVM_RESULT_OK;//OKに上書き\r
-               return 2;\r
-       }\r
+    NyLPC_TUInt32 tret;\r
+    switch(ist->op.opc){\r
+    case NyLPC_TcMiMicVM_OP_TYPE_AND:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]&=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]&=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_OR:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]|=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]|=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_XOR:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]^=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]^=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_NOT:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
+            i_inst->wm[ist->wm_32.wm]=~i_inst->wm[ist->wm_32.wm];\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_SHL:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
+            i_inst->wm[ist->wmh08_32.wm]=i_inst->wm[ist->wmh08_32.wm]<<ist->wmh08_32.h8;\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]=i_inst->wm[ist->wmwm_32.wm1]<<i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_SHR:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
+            i_inst->wm[ist->wmh08_32.wm]=i_inst->wm[ist->wmh08_32.wm]>>ist->wmh08_32.h8;\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]=i_inst->wm[ist->wmwm_32.wm1]>>i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_ADD:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]+=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]+=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_SUB:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]-=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]-=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_MUL:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]*=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]*=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_MGET:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]=*((NyLPC_TUInt32*)(ist->wmh32_64.h32));\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]=*((NyLPC_TUInt32*)(i_inst->wm[ist->wmwm_32.wm2]));\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_MPUT:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            *((NyLPC_TUInt32*)(ist->wmh32_64.h32))=i_inst->wm[ist->wmh32_64.wm];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            *((NyLPC_TUInt32*)(i_inst->wm[ist->wmwm_32.wm2]))=i_inst->wm[ist->wmwm_32.wm1];\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_SGET:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
+            if(!i_inst->_event_handler->get_stream(i_inst->_event_handler,&(i_inst->wm[ist->wm_32.wm]))){\r
+                NyLPC_OnErrorGoto(ERROR);\r
+            }\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_SPUT:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
+            if(!i_inst->_event_handler->put_stream(i_inst->_event_handler,i_inst->wm[ist->wm_32.wm])){\r
+                NyLPC_OnErrorGoto(ERROR);\r
+            }\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
+            if(!i_inst->_event_handler->put_stream(i_inst->_event_handler,ist->h32_64.h32)){\r
+                NyLPC_OnErrorGoto(ERROR);\r
+            }\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_LD:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+            i_inst->wm[ist->wmwm_32.wm1]=i_inst->wm[ist->wmwm_32.wm2];\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+            i_inst->wm[ist->wmh32_64.wm]=ist->wmh32_64.h32;\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_NOP:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_NONE:\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_H08:\r
+            i_inst->_event_handler->sleep(i_inst->_event_handler,ist->h8_32.h8);\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    //native call\r
+    case NyLPC_TcMiMicVM_OP_TYPE_CALL:\r
+        switch(ist->op.oprtype){\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
+            tret=i_inst->_event_handler->native_call(i_inst->_event_handler,i_inst->wm[ist->wm_32.wm],i_inst);\r
+            if(!NyLPC_cMiMicVM_RESULT_isOK(tret)){\r
+                *o_code=tret;\r
+                NyLPC_OnErrorGoto(ERROR_INHERIT);//エラー継承\r
+            }\r
+            break;\r
+        case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
+            tret=i_inst->_event_handler->native_call(i_inst->_event_handler,ist->h32_64.h32,i_inst);\r
+            if(!NyLPC_cMiMicVM_RESULT_isOK(tret)){\r
+                *o_code=tret;\r
+                NyLPC_OnErrorGoto(ERROR_INHERIT);//エラー継承\r
+            }\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+        break;\r
+    case NyLPC_TcMiMicVM_OP_TYPE_EXIT:\r
+        *o_code=NyLPC_cMiMicVM_RESULT_OK;//OKに上書き\r
+        return 0;\r
+    default:\r
+        NyLPC_OnErrorGoto(ERROR);\r
+    }\r
+    //実行したコードのワード長を返す。\r
+    switch(ist->op.oprtype){\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_NONE:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_H08:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_H16:\r
+        *o_code=NyLPC_cMiMicVM_RESULT_OK;//OKに上書き\r
+        return 1;\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_WM_H16:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+    case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
+        *o_code=NyLPC_cMiMicVM_RESULT_OK;//OKに上書き\r
+        return 2;\r
+    }\r
 ERROR:\r
-       *o_code=NyLPC_cMiMicVM_RESULT_RUNTIME_NG;//ランタイムNG\r
+    *o_code=NyLPC_cMiMicVM_RESULT_RUNTIME_NG;//ランタイムNG\r
 ERROR_INHERIT:\r
-       return 0;\r
+    return 0;\r
 }\r
 \r
 #define TEST\r
@@ -333,52 +333,52 @@ ERROR_INHERIT:
 #include "NyLPC_cMiMicTxtCompiler.h"\r
 void main(void)\r
 {\r
-       struct NyLPC_TcMiMicVM_TEvent eh;\r
-       NyLPC_TUInt32 ap;\r
-       NyLPC_TcMiMicVM_t vm;\r
-       struct NyLPC_TCharArrayPtr bc;\r
-       NyLPC_TcMiMicTxtCompiler_t inst;\r
-       struct NyLPC_TUInt32ArrayPtr bin;\r
-       char BC[1024];\r
-       int ist_len;\r
+    struct NyLPC_TcMiMicVM_TEvent eh;\r
+    NyLPC_TUInt32 ap;\r
+    NyLPC_TcMiMicVM_t vm;\r
+    struct NyLPC_TCharArrayPtr bc;\r
+    NyLPC_TcMiMicTxtCompiler_t inst;\r
+    struct NyLPC_TUInt32ArrayPtr bin;\r
+    char BC[1024];\r
+    int ist_len;\r
 \r
-       NyLPC_TUInt16 l,bl;\r
-       NyLPC_TUInt32 obuf[1024];\r
-       NyLPC_cMiMicBcCompiler_initialize(&inst);\r
-       sprintf(BC,"AA0102AB0100000001AE0203AF0200000003AI0304AJ0300000004AM07BA0505BE0607CA0304CB0300000005CE0304CF0300000005CI0304CJ0300000005ZA.E",&ap,&ap);\r
-       bc.ptr=(char* )BC;\r
-       bc.len=strlen(BC);\r
-       bin.ptr=obuf;\r
-       bin.len=100;\r
-       ist_len=0;\r
+    NyLPC_TUInt16 l,bl;\r
+    NyLPC_TUInt32 obuf[1024];\r
+    NyLPC_cMiMicBcCompiler_initialize(&inst);\r
+    sprintf(BC,"AA0102AB0100000001AE0203AF0200000003AI0304AJ0300000004AM07BA0505BE0607CA0304CB0300000005CE0304CF0300000005CI0304CJ0300000005ZA.E",&ap,&ap);\r
+    bc.ptr=(char* )BC;\r
+    bc.len=strlen(BC);\r
+    bin.ptr=obuf;\r
+    bin.len=100;\r
+    ist_len=0;\r
 \r
-       for(;;){\r
+    for(;;){\r
 \r
-               switch(NyLPC_cMiMicBcCompiler_compileFragment(&inst,&bc,&bin,&bl,&l))\r
-               {\r
-               case NyLPC_TcMiMicTxtCompiler_RET_OK:\r
-                       //命令確定。\r
-                       NyLPC_TCharArrayPtr_seek(&bc,l);\r
-                       ist_len+=bl;\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_RET_OK_END:\r
-                       //命令終端\r
-                       NyLPC_cMiMicVM_initialize(&vm,&eh);\r
-                       if(!NyLPC_cMiMicVM_run(&vm,obuf,ist_len)){\r
-                               printf("エンダァ");\r
-                       }\r
-                       printf("OK");\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_RET_CONTINUE:\r
-                       //蓄積中。\r
-                       NyLPC_TCharArrayPtr_seek(&bc,l);\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_RET_NG:\r
-                       printf("エラー");\r
-                       return;\r
-               default:\r
-                       break;\r
-               }\r
-       }\r
+        switch(NyLPC_cMiMicBcCompiler_compileFragment(&inst,&bc,&bin,&bl,&l))\r
+        {\r
+        case NyLPC_TcMiMicTxtCompiler_RET_OK:\r
+            //命令確定。\r
+            NyLPC_TCharArrayPtr_seek(&bc,l);\r
+            ist_len+=bl;\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_RET_OK_END:\r
+            //命令終端\r
+            NyLPC_cMiMicVM_initialize(&vm,&eh);\r
+            if(!NyLPC_cMiMicVM_run(&vm,obuf,ist_len)){\r
+                printf("エンダァ");\r
+            }\r
+            printf("OK");\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_RET_CONTINUE:\r
+            //蓄積中。\r
+            NyLPC_TCharArrayPtr_seek(&bc,l);\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_RET_NG:\r
+            printf("エラー");\r
+            return;\r
+        default:\r
+            break;\r
+        }\r
+    }\r
 }\r
 #endif\r