This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.

Dependencies:   mbed

For details, refer to the following.

http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/436

Note:There is a change in rtt0.h from the original source in the mruby/c. It was necessary for inclusion in C ++ source.

Committer:
tk_takateku
Date:
Wed Feb 15 01:03:35 2017 +0000
Revision:
0:33feccbba3ff
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tk_takateku 0:33feccbba3ff 1 /*! @file
tk_takateku 0:33feccbba3ff 2 @brief
tk_takateku 0:33feccbba3ff 3
tk_takateku 0:33feccbba3ff 4
tk_takateku 0:33feccbba3ff 5 <pre>
tk_takateku 0:33feccbba3ff 6 Copyright (C) 2015 Kyushu Institute of Technology.
tk_takateku 0:33feccbba3ff 7 Copyright (C) 2015 Shimane IT Open-Innovation Center.
tk_takateku 0:33feccbba3ff 8
tk_takateku 0:33feccbba3ff 9 This file is distributed under BSD 3-Clause License.
tk_takateku 0:33feccbba3ff 10
tk_takateku 0:33feccbba3ff 11
tk_takateku 0:33feccbba3ff 12 </pre>
tk_takateku 0:33feccbba3ff 13 */
tk_takateku 0:33feccbba3ff 14
tk_takateku 0:33feccbba3ff 15 #ifndef MRBC_SRC_OPCODE_H_
tk_takateku 0:33feccbba3ff 16 #define MRBC_SRC_OPCODE_H_
tk_takateku 0:33feccbba3ff 17
tk_takateku 0:33feccbba3ff 18 #ifdef __cplusplus
tk_takateku 0:33feccbba3ff 19 extern "C" {
tk_takateku 0:33feccbba3ff 20 #endif
tk_takateku 0:33feccbba3ff 21
tk_takateku 0:33feccbba3ff 22
tk_takateku 0:33feccbba3ff 23 #define GET_OPCODE(code) ((code) & 0x7f)
tk_takateku 0:33feccbba3ff 24 #define GETARG_A(code) (((code) >> 23) & 0x1ff)
tk_takateku 0:33feccbba3ff 25 #define GETARG_B(code) (((code) >> 14) & 0x1ff)
tk_takateku 0:33feccbba3ff 26 #define GETARG_C(code) (((code) >> 7) & 0x7f)
tk_takateku 0:33feccbba3ff 27 #define GETARG_Ax(code) (((code) >> 7) & 0x1ffffff)
tk_takateku 0:33feccbba3ff 28
tk_takateku 0:33feccbba3ff 29 #define GETARG_b(code) GETARG_UNPACK_b(code,14,2)
tk_takateku 0:33feccbba3ff 30
tk_takateku 0:33feccbba3ff 31 #define GETARG_UNPACK_b(i,n1,n2) ((((code)) >> (7+(n2))) & (((1<<(n1))-1)))
tk_takateku 0:33feccbba3ff 32
tk_takateku 0:33feccbba3ff 33
tk_takateku 0:33feccbba3ff 34 #define MAXARG_Bx (0xffff)
tk_takateku 0:33feccbba3ff 35 #define MAXARG_sBx (MAXARG_Bx>>1)
tk_takateku 0:33feccbba3ff 36 #define GETARG_Bx(code) (((code) >> 7) & 0xffff)
tk_takateku 0:33feccbba3ff 37 #define GETARG_sBx(code) (GETARG_Bx(code)-MAXARG_sBx)
tk_takateku 0:33feccbba3ff 38 #define GETARG_C(code) (((code) >> 7) & 0x7f)
tk_takateku 0:33feccbba3ff 39
tk_takateku 0:33feccbba3ff 40
tk_takateku 0:33feccbba3ff 41 //================================================================
tk_takateku 0:33feccbba3ff 42 /*!@brief
tk_takateku 0:33feccbba3ff 43
tk_takateku 0:33feccbba3ff 44 */
tk_takateku 0:33feccbba3ff 45 enum OPCODE {
tk_takateku 0:33feccbba3ff 46 OP_NOP = 0x00,
tk_takateku 0:33feccbba3ff 47 OP_MOVE = 0x01,
tk_takateku 0:33feccbba3ff 48 OP_LOADL = 0x02,
tk_takateku 0:33feccbba3ff 49 OP_LOADI = 0x03,
tk_takateku 0:33feccbba3ff 50 OP_LOADSYM = 0x04,
tk_takateku 0:33feccbba3ff 51 OP_LOADNIL = 0x05,
tk_takateku 0:33feccbba3ff 52 OP_LOADSELF = 0x06,
tk_takateku 0:33feccbba3ff 53 OP_LOADT = 0x07,
tk_takateku 0:33feccbba3ff 54 OP_LOADF = 0x08,
tk_takateku 0:33feccbba3ff 55 OP_GETGLOBAL = 0x09,
tk_takateku 0:33feccbba3ff 56 OP_SETGLOBAL = 0x0a,
tk_takateku 0:33feccbba3ff 57
tk_takateku 0:33feccbba3ff 58 OP_GETCONST = 0x11,
tk_takateku 0:33feccbba3ff 59 OP_SETCONST = 0x12,
tk_takateku 0:33feccbba3ff 60
tk_takateku 0:33feccbba3ff 61 OP_JMP = 0x17,
tk_takateku 0:33feccbba3ff 62 OP_JMPIF = 0x18,
tk_takateku 0:33feccbba3ff 63 OP_JMPNOT = 0x19,
tk_takateku 0:33feccbba3ff 64 OP_SEND = 0x20,
tk_takateku 0:33feccbba3ff 65
tk_takateku 0:33feccbba3ff 66 OP_ENTER = 0x26,
tk_takateku 0:33feccbba3ff 67
tk_takateku 0:33feccbba3ff 68 OP_RETURN = 0x29,
tk_takateku 0:33feccbba3ff 69
tk_takateku 0:33feccbba3ff 70 OP_ADD = 0x2c,
tk_takateku 0:33feccbba3ff 71 OP_ADDI = 0x2d,
tk_takateku 0:33feccbba3ff 72 OP_SUB = 0x2e,
tk_takateku 0:33feccbba3ff 73 OP_SUBI = 0x2f,
tk_takateku 0:33feccbba3ff 74 OP_MUL = 0x30,
tk_takateku 0:33feccbba3ff 75 OP_DIV = 0x31,
tk_takateku 0:33feccbba3ff 76 OP_EQ = 0x32,
tk_takateku 0:33feccbba3ff 77 OP_LT = 0x33,
tk_takateku 0:33feccbba3ff 78 OP_LE = 0x34,
tk_takateku 0:33feccbba3ff 79 OP_GT = 0x35,
tk_takateku 0:33feccbba3ff 80 OP_GE = 0x36,
tk_takateku 0:33feccbba3ff 81 OP_ARRAY = 0x37,
tk_takateku 0:33feccbba3ff 82
tk_takateku 0:33feccbba3ff 83 OP_STRING = 0x3d,
tk_takateku 0:33feccbba3ff 84
tk_takateku 0:33feccbba3ff 85 OP_HASH = 0x3f,
tk_takateku 0:33feccbba3ff 86 OP_LAMBDA = 0x40,
tk_takateku 0:33feccbba3ff 87 OP_RANGE = 0x41,
tk_takateku 0:33feccbba3ff 88
tk_takateku 0:33feccbba3ff 89 OP_CLASS = 0x43,
tk_takateku 0:33feccbba3ff 90
tk_takateku 0:33feccbba3ff 91 OP_METHOD = 0x46,
tk_takateku 0:33feccbba3ff 92
tk_takateku 0:33feccbba3ff 93 OP_TCLASS = 0x48,
tk_takateku 0:33feccbba3ff 94
tk_takateku 0:33feccbba3ff 95 OP_STOP = 0x4a,
tk_takateku 0:33feccbba3ff 96 };
tk_takateku 0:33feccbba3ff 97
tk_takateku 0:33feccbba3ff 98 #ifdef __cplusplus
tk_takateku 0:33feccbba3ff 99 }
tk_takateku 0:33feccbba3ff 100 #endif
tk_takateku 0:33feccbba3ff 101 #endif
tk_takateku 0:33feccbba3ff 102