diff --git a/include/bioloid_registers.h b/include/bioloid_registers.h
index 25129989e673341bed07e64f46a2dedf63e94680..54f7994babffa26bd1b10409f811af1846fbc203 100644
--- a/include/bioloid_registers.h
+++ b/include/bioloid_registers.h
@@ -16,10 +16,42 @@ extern "C" {
 #define MM_BAL_ANKLE_PITCH_GAIN_OFFSET  ((unsigned short int)0x000C)
 #define MM_BAL_HIP_ROLL_GAIN_OFFSET     ((unsigned short int)0x000E)
 #define RETURN_LEVEL_OFFSET             ((unsigned short int)0x0010)
-#define GYRO_FB_ADC_CH_OFFSET           ((unsigned short int)0x0011)
-#define GYRO_LR_ADC_CH_OFFSET           ((unsigned short int)0x0012)
+#define MM_SERVO0_OFFSET                ((unsigned short int)0x0011)
+#define MM_SERVO1_OFFSET                ((unsigned short int)0x0012)
+#define MM_SERVO2_OFFSET                ((unsigned short int)0x0013)
+#define MM_SERVO3_OFFSET                ((unsigned short int)0x0014)
+#define MM_SERVO4_OFFSET                ((unsigned short int)0x0015)
+#define MM_SERVO5_OFFSET                ((unsigned short int)0x0016)
+#define MM_SERVO6_OFFSET                ((unsigned short int)0x0017)
+#define MM_SERVO7_OFFSET                ((unsigned short int)0x0018)
+#define MM_SERVO8_OFFSET                ((unsigned short int)0x0019)
+#define MM_SERVO9_OFFSET                ((unsigned short int)0x001A)
+#define MM_SERVO10_OFFSET               ((unsigned short int)0x001B)
+#define MM_SERVO11_OFFSET               ((unsigned short int)0x001C)
+#define MM_SERVO12_OFFSET               ((unsigned short int)0x001D)
+#define MM_SERVO13_OFFSET               ((unsigned short int)0x001E)
+#define MM_SERVO14_OFFSET               ((unsigned short int)0x001F)
+#define MM_SERVO15_OFFSET               ((unsigned short int)0x0020)
+#define MM_SERVO16_OFFSET               ((unsigned short int)0x0021)
+#define MM_SERVO17_OFFSET               ((unsigned short int)0x0022)
+#define MM_SERVO18_OFFSET               ((unsigned short int)0x0023)
+#define MM_SERVO19_OFFSET               ((unsigned short int)0x0024)
+#define MM_SERVO20_OFFSET               ((unsigned short int)0x0025)
+#define MM_SERVO21_OFFSET               ((unsigned short int)0x0026)
+#define MM_SERVO22_OFFSET               ((unsigned short int)0x0027)
+#define MM_SERVO23_OFFSET               ((unsigned short int)0x0028)
+#define MM_SERVO24_OFFSET               ((unsigned short int)0x0029)
+#define MM_SERVO25_OFFSET               ((unsigned short int)0x002A)
+#define MM_SERVO26_OFFSET               ((unsigned short int)0x002B)
+#define MM_SERVO27_OFFSET               ((unsigned short int)0x002C)
+#define MM_SERVO28_OFFSET               ((unsigned short int)0x002D)
+#define MM_SERVO29_OFFSET               ((unsigned short int)0x002E)
+#define MM_SERVO30_OFFSET               ((unsigned short int)0x002F)
+#define MM_SERVO31_OFFSET               ((unsigned short int)0x0030)
+#define GYRO_FB_ADC_CH_OFFSET           ((unsigned short int)0x0031)
+#define GYRO_LR_ADC_CH_OFFSET           ((unsigned short int)0x0032)
 
-#define LAST_EEPROM_OFFSET              ((unsigned short int)0x0020)
+#define LAST_EEPROM_OFFSET              ((unsigned short int)0x00FF)
 
 typedef enum {
   BIOLOID_MODEL_NUMBER_L            = DEVICE_MODEL_OFFSET,
@@ -39,175 +71,207 @@ typedef enum {
   BIOLOID_MM_BAL_HIP_ROLL_GAIN_L    = MM_BAL_HIP_ROLL_GAIN_OFFSET,// fixed point format 0|16
   BIOLOID_MM_BAL_HIP_ROLL_GAIN_H    = MM_BAL_HIP_ROLL_GAIN_OFFSET+1,
   BIOLOID_RETURN_LEVEL              = RETURN_LEVEL_OFFSET,
+  BIOLOID_MM_SERVO0_OFFSET          = MM_SERVO0_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO1_OFFSET          = MM_SERVO1_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO2_OFFSET          = MM_SERVO2_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO3_OFFSET          = MM_SERVO3_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO4_OFFSET          = MM_SERVO4_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO5_OFFSET          = MM_SERVO5_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO6_OFFSET          = MM_SERVO6_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO7_OFFSET          = MM_SERVO7_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO8_OFFSET          = MM_SERVO8_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO9_OFFSET          = MM_SERVO9_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO10_OFFSET         = MM_SERVO10_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO11_OFFSET         = MM_SERVO11_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO12_OFFSET         = MM_SERVO12_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO13_OFFSET         = MM_SERVO13_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO14_OFFSET         = MM_SERVO14_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO15_OFFSET         = MM_SERVO15_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO16_OFFSET         = MM_SERVO16_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO17_OFFSET         = MM_SERVO17_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO18_OFFSET         = MM_SERVO18_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO19_OFFSET         = MM_SERVO19_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO20_OFFSET         = MM_SERVO20_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO21_OFFSET         = MM_SERVO21_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO22_OFFSET         = MM_SERVO22_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO23_OFFSET         = MM_SERVO23_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO24_OFFSET         = MM_SERVO24_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO25_OFFSET         = MM_SERVO25_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO26_OFFSET         = MM_SERVO26_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO27_OFFSET         = MM_SERVO27_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO28_OFFSET         = MM_SERVO28_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO29_OFFSET         = MM_SERVO29_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO30_OFFSET         = MM_SERVO30_OFFSET, // angle offset in fixed point format 1-3|4
+  BIOLOID_MM_SERVO31_OFFSET         = MM_SERVO31_OFFSET, // angle offset in fixed point format 1-3|4
   BIOLIOD_GYRO_FB_ADC_CH            = GYRO_FB_ADC_CH_OFFSET,
   BIOLIOD_GYRO_LR_ADC_CH            = GYRO_LR_ADC_CH_OFFSET,
-  BIOLOID_USER1_LED_CNTRL           = 0x20, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
-                                            //       |       |       |       | blink | toggle | value | internally used
-  BIOLOID_USER1_LED_PERIOD_L        = 0x21,
-  BIOLOID_USER1_LED_PERIOD_H        = 0x22,     
-  BIOLOID_USER2_LED_CNTRL           = 0x23, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
-                                            //       |       |       |       | blink | toggle | value | internally used
-  BIOLOID_USER2_LED_PERIOD_L        = 0x24,
-  BIOLOID_USER2_LED_PERIOD_H        = 0x25,     
-  BIOLOID_RXD_LED_CNTRL             = 0x26, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
-                                            //       |       |       |       | blink | toggle | value | internally used
-  BIOLOID_RXD_LED_PERIOD_L          = 0x27,
-  BIOLOID_RXD_LED_PERIOD_H          = 0x28,     
-  BIOLOID_TXD_LED_CNTRL             = 0x29, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
-                                            //       |       |       |       | blink | toggle | value | internally used
-  BIOLOID_TXD_LED_PERIOD_L          = 0x2A,
-  BIOLOID_TXD_LED_PERIOD_H          = 0x2B,     
-  BIOLOID_USER_PB_CNTRL             = 0x2C, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
-                                            //       |       |       |       | interrupt flag | enable interrupt | value | internally used
-  BIOLOID_RESET_PB_CNTRL            = 0x2D, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
-                                            //       |       |       |       | interrupt flag | enable interrupt | value | internally used
-  BIOLOID_START_PB_CNTRL            = 0x2E, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
-                                            //       |       |       |       | interrupt flag | enable interrupt | value | internally used
-  BIOLOID_MODE_PB_CNTRL             = 0x2F, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
-                                            //       |       |       |       | interrupt flag | enable interrupt | value | internally used
-  BIOLOID_ADC_CNTRL                 = 0x30, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
-                                            //       |       |       |       |       |       |       | Enable
-  BIOLOID_ADC_PERIOD                = 0x31,
-  BIOLOID_ADC_CH1_L                 = 0x32,
-  BIOLOID_ADC_CH1_H                 = 0x33,
-  BIOLOID_ADC_CH2_L                 = 0x34,
-  BIOLOID_ADC_CH2_H                 = 0x35,
-  BIOLOID_ADC_CH3_L                 = 0x36,
-  BIOLOID_ADC_CH3_H                 = 0x37,
-  BIOLOID_ADC_CH4_L                 = 0x38,
-  BIOLOID_ADC_CH4_H                 = 0x39,
-  BIOLOID_ADC_TEMP_L                = 0x3A,
-  BIOLOID_ADC_TEMP_H                = 0x3B,
-  BIOLOID_ADC_CH6_L                 = 0x3C,
-  BIOLOID_ADC_CH6_H                 = 0x3D,
-  BIOLOID_ADC_VREF_L                = 0x3E,
-  BIOLOID_ADC_VREF_H                = 0x3F,
-  BIOLOID_ADC_CH8_L                 = 0x40,
-  BIOLOID_ADC_CH8_H                 = 0x41,
-  BIOLOID_ZIGBEE_CNTRL              = 0x42, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 |  bit 1  |    bit 0
-                                            //       |       |       |       |       |       | Enable  | Enable power
-  BIOLOID_ZIGBEE_BAUDRATE           = 0x43,
-  BIOLOID_ZIGBEE_OWN_ID_L           = 0x44,
-  BIOLOID_ZIGBEE_OWN_ID_H           = 0x45,
-  BIOLOID_ZIGBEE_REM_ID_L           = 0x46,
-  BIOLOID_ZIGBEE_REM_ID_H           = 0x47,
-  BIOLOID_MM_NUM_SERVOS             = 0x48,
-  BIOLOID_MM_CNTRL                  = 0x49, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 |     bit 2    |      bit 1      |    bit 0
-                                            //       |       |       |       |       | Enable power | Enable balance  | Enable manager
-  BIOLOID_MM_MODULE_EN0             = 0x4A, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0i
-                                            // Enable servo 0  |   assigned module     | Enable servo 1  |   assigned module
-                                            //                 |     000 -> none       |
-                                            //                 |     001 -> action     |
-                                            //                 |     010 -> walk       |
-                                            //                 |     011 -> joints     |
-  BIOLOID_MM_MODULE_EN1             = 0x4B, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 2  |   assigned module     | Enable servo 3  |   assigned module
-  BIOLOID_MM_MODULE_EN2             = 0x4C, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 4  |   assigned module     | Enable servo 5  |   assigned module
-  BIOLOID_MM_MODULE_EN3             = 0x4D, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 6  |   assigned module     | Enable servo 7  |   assigned module
-  BIOLOID_MM_MODULE_EN4             = 0x4E, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 8  |   assigned module     | Enable servo 9  |   assigned module
-  BIOLOID_MM_MODULE_EN5             = 0x4F, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 10 |   assigned module     | Enable servo 11 |   assigned module
-  BIOLOID_MM_MODULE_EN6             = 0x50, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 12 |   assigned module     | Enable servo 13 |   assigned module
-  BIOLOID_MM_MODULE_EN7             = 0x51, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 14 |   assigned module     | Enable servo 15 |   assigned module
-  BIOLOID_MM_MODULE_EN8             = 0x52, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 16 |   assigned module     | Enable servo 17 |   assigned module
-  BIOLOID_MM_MODULE_EN9             = 0x53, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 18 |   assigned module     | Enable servo 19 |   assigned module
-  BIOLOID_MM_MODULE_EN10            = 0x54, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 20 |   assigned module     | Enable servo 21 |   assigned module
-  BIOLOID_MM_MODULE_EN11            = 0x55, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 22 |   assigned module     | Enable servo 23 |   assigned module
-  BIOLOID_MM_MODULE_EN12            = 0x56, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 24 |   assigned module     | Enable servo 25 |   assigned module
-  BIOLOID_MM_MODULE_EN13            = 0x57, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 26 |   assigned module     | Enable servo 27 |   assigned module
-  BIOLOID_MM_MODULE_EN14            = 0x58, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 28 |   assigned module     | Enable servo 29 |   assigned module
-  BIOLOID_MM_MODULE_EN15            = 0x59, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
-                                            // Enable servo 30 |   assigned module     | Enable servo 31 |   assigned module
-  BIOLOID_MM_SERVO0_CUR_POS_L       = 0x5A, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO0_CUR_POS_H       = 0x5B,
-  BIOLOID_MM_SERVO1_CUR_POS_L       = 0x5C, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO1_CUR_POS_H       = 0x5D,
-  BIOLOID_MM_SERVO2_CUR_POS_L       = 0x5E, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO2_CUR_POS_H       = 0x5F,
-  BIOLOID_MM_SERVO3_CUR_POS_L       = 0x60, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO3_CUR_POS_H       = 0x61,
-  BIOLOID_MM_SERVO4_CUR_POS_L       = 0x62, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO4_CUR_POS_H       = 0x63,
-  BIOLOID_MM_SERVO5_CUR_POS_L       = 0x64, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO5_CUR_POS_H       = 0x65,
-  BIOLOID_MM_SERVO6_CUR_POS_L       = 0x66, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO6_CUR_POS_H       = 0x67,
-  BIOLOID_MM_SERVO7_CUR_POS_L       = 0x68, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO7_CUR_POS_H       = 0x69,
-  BIOLOID_MM_SERVO8_CUR_POS_L       = 0x6A, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO8_CUR_POS_H       = 0x6B,
-  BIOLOID_MM_SERVO9_CUR_POS_L       = 0x6C, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO9_CUR_POS_H       = 0x6D,
-  BIOLOID_MM_SERVO10_CUR_POS_L      = 0x6E, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO10_CUR_POS_H      = 0x6F,
-  BIOLOID_MM_SERVO11_CUR_POS_L      = 0x70, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO11_CUR_POS_H      = 0x71,
-  BIOLOID_MM_SERVO12_CUR_POS_L      = 0x72, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO12_CUR_POS_H      = 0x73,
-  BIOLOID_MM_SERVO13_CUR_POS_L      = 0x74, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO13_CUR_POS_H      = 0x75,
-  BIOLOID_MM_SERVO14_CUR_POS_L      = 0x76, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO14_CUR_POS_H      = 0x77,
-  BIOLOID_MM_SERVO15_CUR_POS_L      = 0x78, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO15_CUR_POS_H      = 0x79,
-  BIOLOID_MM_SERVO16_CUR_POS_L      = 0x7A, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO16_CUR_POS_H      = 0x7B,
-  BIOLOID_MM_SERVO17_CUR_POS_L      = 0x7C, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO17_CUR_POS_H      = 0x7D,
-  BIOLOID_MM_SERVO18_CUR_POS_L      = 0x7E, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO18_CUR_POS_H      = 0x7F,
-  BIOLOID_MM_SERVO19_CUR_POS_L      = 0x80, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO19_CUR_POS_H      = 0x81,
-  BIOLOID_MM_SERVO20_CUR_POS_L      = 0x82, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO20_CUR_POS_H      = 0x83,
-  BIOLOID_MM_SERVO21_CUR_POS_L      = 0x84, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO21_CUR_POS_H      = 0x85,
-  BIOLOID_MM_SERVO22_CUR_POS_L      = 0x86, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO22_CUR_POS_H      = 0x87,
-  BIOLOID_MM_SERVO23_CUR_POS_L      = 0x88, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO23_CUR_POS_H      = 0x89,
-  BIOLOID_MM_SERVO24_CUR_POS_L      = 0x8A, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO24_CUR_POS_H      = 0x8B,
-  BIOLOID_MM_SERVO25_CUR_POS_L      = 0x8C, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO25_CUR_POS_H      = 0x8D,
-  BIOLOID_MM_SERVO26_CUR_POS_L      = 0x8E, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO26_CUR_POS_H      = 0x8F,
-  BIOLOID_MM_SERVO27_CUR_POS_L      = 0x90, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO27_CUR_POS_H      = 0x91,
-  BIOLOID_MM_SERVO28_CUR_POS_L      = 0x92, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO28_CUR_POS_H      = 0x93,
-  BIOLOID_MM_SERVO29_CUR_POS_L      = 0x94, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO29_CUR_POS_H      = 0x95,
-  BIOLOID_MM_SERVO30_CUR_POS_L      = 0x96, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO30_CUR_POS_H      = 0x97,
-  BIOLOID_MM_SERVO31_CUR_POS_L      = 0x98, // angle in fixed point format 9|7
-  BIOLOID_MM_SERVO31_CUR_POS_H      = 0x99,
-  BIOLOID_ACTION_PAGE               = 0x9A,
-  BIOLOID_ACTION_CNTRL              = 0x9B, // bit 7 | bit 6 | bit 5 |     bit 4    |     bit 3      |       bit 2      |   bit 1   |   bit 0
-                                            //       |       |       | page running | interrupt flag | enable interrupt | stop page | start page
-  BIOLOID_GYRO_CNTRL                = 0x9C, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3       |       bit 2     |         bit 1        |   bit 0
-                                            //       |       |       |       | enable fall int | enable fall det | enable calibrate int | calibrate
-  BIOLOID_GYRO_STATUS               = 0x9D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
-                                            // 
-  BIOLOID_GYRO_FWD_FALL_THD         = 0x9E,
-  BIOLOID_GYRO_BWD_FALL_THD         = 0x9F,
-  BIOLOID_GYRO_LEFT_FALL_THD        = 0xA0,
-  BOILOID_GYRO_RIGHT_FALL_THD       = 0xA1
+  BIOLOID_USER1_LED_CNTRL           = 0x0100, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
+                                              //       |       |       |       | blink | toggle | value | internally used
+  BIOLOID_USER1_LED_PERIOD_L        = 0x0101,
+  BIOLOID_USER1_LED_PERIOD_H        = 0x0102,     
+  BIOLOID_USER2_LED_CNTRL           = 0x0103, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
+                                              //       |       |       |       | blink | toggle | value | internally used
+  BIOLOID_USER2_LED_PERIOD_L        = 0x0104,
+  BIOLOID_USER2_LED_PERIOD_H        = 0x0105,     
+  BIOLOID_RXD_LED_CNTRL             = 0x0106, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
+                                              //       |       |       |       | blink | toggle | value | internally used
+  BIOLOID_RXD_LED_PERIOD_L          = 0x0107,
+  BIOLOID_RXD_LED_PERIOD_H          = 0x0108,     
+  BIOLOID_TXD_LED_CNTRL             = 0x0109, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
+                                              //       |       |       |       | blink | toggle | value | internally used
+  BIOLOID_TXD_LED_PERIOD_L          = 0x010A,
+  BIOLOID_TXD_LED_PERIOD_H          = 0x010B,     
+  BIOLOID_USER_PB_CNTRL             = 0x010C, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
+                                              //       |       |       |       | interrupt flag | enable interrupt | value | internally used
+  BIOLOID_RESET_PB_CNTRL            = 0x010D, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
+                                              //       |       |       |       | interrupt flag | enable interrupt | value | internally used
+  BIOLOID_START_PB_CNTRL            = 0x010E, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
+                                              //       |       |       |       | interrupt flag | enable interrupt | value | internally used
+  BIOLOID_MODE_PB_CNTRL             = 0x010F, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3      |       bit 2      | bit 1 |      bit 0
+                                              //       |       |       |       | interrupt flag | enable interrupt | value | internally used
+  BIOLOID_ADC_CNTRL                 = 0x0110, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
+                                              //       |       |       |       |       |       |       | Enable
+  BIOLOID_ADC_PERIOD                = 0x0111,
+  BIOLOID_ADC_CH1_L                 = 0x0112,
+  BIOLOID_ADC_CH1_H                 = 0x0113,
+  BIOLOID_ADC_CH2_L                 = 0x0114,
+  BIOLOID_ADC_CH2_H                 = 0x0115,
+  BIOLOID_ADC_CH3_L                 = 0x0116,
+  BIOLOID_ADC_CH3_H                 = 0x0117,
+  BIOLOID_ADC_CH4_L                 = 0x0118,
+  BIOLOID_ADC_CH4_H                 = 0x0119,
+  BIOLOID_ADC_TEMP_L                = 0x011A,
+  BIOLOID_ADC_TEMP_H                = 0x011B,
+  BIOLOID_ADC_CH6_L                 = 0x011C,
+  BIOLOID_ADC_CH6_H                 = 0x011D,
+  BIOLOID_ADC_VREF_L                = 0x011E,
+  BIOLOID_ADC_VREF_H                = 0x011F,
+  BIOLOID_ADC_CH8_L                 = 0x0120,
+  BIOLOID_ADC_CH8_H                 = 0x0121,
+  BIOLOID_ZIGBEE_CNTRL              = 0x0122, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 |  bit 1  |    bit 0
+                                              //       |       |       |       |       |       | Enable  | Enable power
+  BIOLOID_ZIGBEE_BAUDRATE           = 0x0123,
+  BIOLOID_ZIGBEE_OWN_ID_L           = 0x0124,
+  BIOLOID_ZIGBEE_OWN_ID_H           = 0x0125,
+  BIOLOID_ZIGBEE_REM_ID_L           = 0x0126,
+  BIOLOID_ZIGBEE_REM_ID_H           = 0x0127,
+  BIOLOID_MM_NUM_SERVOS             = 0x0128,
+  BIOLOID_MM_CNTRL                  = 0x0129, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 |     bit 2    |      bit 1      |    bit 0
+                                              //       |       |       |       |       | Enable power | Enable balance  | Enable manager
+  BIOLOID_MM_MODULE_EN0             = 0x012A, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0i
+                                              // Enable servo 0  |   assigned module     | Enable servo 1  |   assigned module
+                                              //                 |     000 -> none       |
+                                              //                 |     001 -> action     |
+                                              //                 |     010 -> walk       |
+                                              //                 |     011 -> joints     |
+  BIOLOID_MM_MODULE_EN1             = 0x012B, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 2  |   assigned module     | Enable servo 3  |   assigned module
+  BIOLOID_MM_MODULE_EN2             = 0x012C, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 4  |   assigned module     | Enable servo 5  |   assigned module
+  BIOLOID_MM_MODULE_EN3             = 0x012D, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 6  |   assigned module     | Enable servo 7  |   assigned module
+  BIOLOID_MM_MODULE_EN4             = 0x012E, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 8  |   assigned module     | Enable servo 9  |   assigned module
+  BIOLOID_MM_MODULE_EN5             = 0x012F, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 10 |   assigned module     | Enable servo 11 |   assigned module
+  BIOLOID_MM_MODULE_EN6             = 0x0130, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 12 |   assigned module     | Enable servo 13 |   assigned module
+  BIOLOID_MM_MODULE_EN7             = 0x0131, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 14 |   assigned module     | Enable servo 15 |   assigned module
+  BIOLOID_MM_MODULE_EN8             = 0x0132, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 16 |   assigned module     | Enable servo 17 |   assigned module
+  BIOLOID_MM_MODULE_EN9             = 0x0133, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 18 |   assigned module     | Enable servo 19 |   assigned module
+  BIOLOID_MM_MODULE_EN10            = 0x0134, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 20 |   assigned module     | Enable servo 21 |   assigned module
+  BIOLOID_MM_MODULE_EN11            = 0x0135, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 22 |   assigned module     | Enable servo 23 |   assigned module
+  BIOLOID_MM_MODULE_EN12            = 0x0136, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 24 |   assigned module     | Enable servo 25 |   assigned module
+  BIOLOID_MM_MODULE_EN13            = 0x0137, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 26 |   assigned module     | Enable servo 27 |   assigned module
+  BIOLOID_MM_MODULE_EN14            = 0x0138, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 28 |   assigned module     | Enable servo 29 |   assigned module
+  BIOLOID_MM_MODULE_EN15            = 0x0139, //      bit 7      | bit 6 | bit 5 | bit 4 |      bit 3      | bit 2 | bit 1 | bit 0
+                                              // Enable servo 30 |   assigned module     | Enable servo 31 |   assigned module
+  BIOLOID_MM_SERVO0_CUR_POS_L       = 0x013A, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO0_CUR_POS_H       = 0x013B,
+  BIOLOID_MM_SERVO1_CUR_POS_L       = 0x013C, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO1_CUR_POS_H       = 0x013D,
+  BIOLOID_MM_SERVO2_CUR_POS_L       = 0x013E, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO2_CUR_POS_H       = 0x013F,
+  BIOLOID_MM_SERVO3_CUR_POS_L       = 0x0140, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO3_CUR_POS_H       = 0x0141,
+  BIOLOID_MM_SERVO4_CUR_POS_L       = 0x0142, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO4_CUR_POS_H       = 0x0143,
+  BIOLOID_MM_SERVO5_CUR_POS_L       = 0x0144, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO5_CUR_POS_H       = 0x0145,
+  BIOLOID_MM_SERVO6_CUR_POS_L       = 0x0146, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO6_CUR_POS_H       = 0x0147,
+  BIOLOID_MM_SERVO7_CUR_POS_L       = 0x0148, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO7_CUR_POS_H       = 0x0149,
+  BIOLOID_MM_SERVO8_CUR_POS_L       = 0x014A, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO8_CUR_POS_H       = 0x014B,
+  BIOLOID_MM_SERVO9_CUR_POS_L       = 0x014C, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO9_CUR_POS_H       = 0x014D,
+  BIOLOID_MM_SERVO10_CUR_POS_L      = 0x014E, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO10_CUR_POS_H      = 0x014F,
+  BIOLOID_MM_SERVO11_CUR_POS_L      = 0x0150, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO11_CUR_POS_H      = 0x0151,
+  BIOLOID_MM_SERVO12_CUR_POS_L      = 0x0152, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO12_CUR_POS_H      = 0x0153,
+  BIOLOID_MM_SERVO13_CUR_POS_L      = 0x0154, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO13_CUR_POS_H      = 0x0155,
+  BIOLOID_MM_SERVO14_CUR_POS_L      = 0x0156, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO14_CUR_POS_H      = 0x0157,
+  BIOLOID_MM_SERVO15_CUR_POS_L      = 0x0158, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO15_CUR_POS_H      = 0x0159,
+  BIOLOID_MM_SERVO16_CUR_POS_L      = 0x015A, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO16_CUR_POS_H      = 0x015B,
+  BIOLOID_MM_SERVO17_CUR_POS_L      = 0x015C, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO17_CUR_POS_H      = 0x015D,
+  BIOLOID_MM_SERVO18_CUR_POS_L      = 0x015E, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO18_CUR_POS_H      = 0x015F,
+  BIOLOID_MM_SERVO19_CUR_POS_L      = 0x0160, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO19_CUR_POS_H      = 0x0161,
+  BIOLOID_MM_SERVO20_CUR_POS_L      = 0x0162, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO20_CUR_POS_H      = 0x0163,
+  BIOLOID_MM_SERVO21_CUR_POS_L      = 0x0164, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO21_CUR_POS_H      = 0x0165,
+  BIOLOID_MM_SERVO22_CUR_POS_L      = 0x0166, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO22_CUR_POS_H      = 0x0167,
+  BIOLOID_MM_SERVO23_CUR_POS_L      = 0x0168, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO23_CUR_POS_H      = 0x0169,
+  BIOLOID_MM_SERVO24_CUR_POS_L      = 0x016A, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO24_CUR_POS_H      = 0x016B,
+  BIOLOID_MM_SERVO25_CUR_POS_L      = 0x016C, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO25_CUR_POS_H      = 0x016D,
+  BIOLOID_MM_SERVO26_CUR_POS_L      = 0x016E, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO26_CUR_POS_H      = 0x016F,
+  BIOLOID_MM_SERVO27_CUR_POS_L      = 0x0170, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO27_CUR_POS_H      = 0x0171,
+  BIOLOID_MM_SERVO28_CUR_POS_L      = 0x0172, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO28_CUR_POS_H      = 0x0173,
+  BIOLOID_MM_SERVO29_CUR_POS_L      = 0x0174, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO29_CUR_POS_H      = 0x0175,
+  BIOLOID_MM_SERVO30_CUR_POS_L      = 0x0176, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO30_CUR_POS_H      = 0x0177,
+  BIOLOID_MM_SERVO31_CUR_POS_L      = 0x0178, // angle in fixed point format 9|7
+  BIOLOID_MM_SERVO31_CUR_POS_H      = 0x0179,
+  BIOLOID_ACTION_PAGE               = 0x017A,
+  BIOLOID_ACTION_CNTRL              = 0x017B, // bit 7 | bit 6 | bit 5 |     bit 4    |     bit 3      |       bit 2      |   bit 1   |   bit 0
+                                              //       |       |       | page running | interrupt flag | enable interrupt | stop page | start page
+  BIOLOID_GYRO_CNTRL                = 0x017C, // bit 7 | bit 6 | bit 5 | bit 4 |     bit 3       |       bit 2     |         bit 1        |   bit 0
+                                              //       |       |       |       | enable fall int | enable fall det | enable calibrate int | calibrate
+  BIOLOID_GYRO_STATUS               = 0x017D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
+                                              // 
+  BIOLOID_GYRO_FWD_FALL_THD         = 0x017E,
+  BIOLOID_GYRO_BWD_FALL_THD         = 0x017F,
+  BIOLOID_GYRO_LEFT_FALL_THD        = 0x0180,
+  BOILOID_GYRO_RIGHT_FALL_THD       = 0x0181
 } bioloid_registers;
 
-#define      GPIO_BASE_ADDRESS       0x20
+#define      GPIO_BASE_ADDRESS       0x0100
 #define      GPIO_MEM_LENGTH         16
 #define      GPIO_INT_USED           0x01
 #define      GPIO_VALUE              0x02
@@ -216,17 +280,17 @@ typedef enum {
 #define      GPIO_INT_EN             0x02
 #define      GPIO_INT_FLAG           0x04
 
-#define      ADC_BASE_ADDRESS        0x30
+#define      ADC_BASE_ADDRESS        0x0110
 #define      ADC_MEM_LENGTH          18
 #define      ADC_ENABLE              0x01
 
-#define      ZIGBEE_BASE_ADDRESS     0x42
+#define      ZIGBEE_BASE_ADDRESS     0x0122
 #define      ZIGBEE_MEM_LENGTH       6
 #define      ZIGBEE_EN_PWR           0x01
 #define      ZIGBEE_ENABLE           0x02
 
-#define      MANAGER_BASE_ADDRESS    0x48
-#define      MANAGER_MEM_LENGTH      50
+#define      MANAGER_BASE_ADDRESS    0x0128
+#define      MANAGER_MEM_LENGTH      82
 #define      MANAGER_EEPROM_LENGTH   10
 #define      MANAGER_ENABLE          0x01
 #define      MANAGER_EN_BAL          0x02
@@ -236,7 +300,7 @@ typedef enum {
 #define      MANAGER_ODD_SER_EN      0x08
 #define      MANAGER_ODD_SER_MOD     0x07
 
-#define      ACTION_BASE_ADDRESS     0x9A
+#define      ACTION_BASE_ADDRESS     0x017A
 #define      ACTION_MEM_LENGTH       2
 #define      ACTION_START            0x01
 #define      ACTION_STOP             0x02
@@ -244,7 +308,7 @@ typedef enum {
 #define      ACTION_INT_FLAG         0x08
 #define      ACTION_STATUS           0x10
 
-#define      GYRO_BASE_ADDRESS       0x9C
+#define      GYRO_BASE_ADDRESS       0x017C
 #define      GYRO_MEM_LENGTH         6
 #define      GYRO_CALIBRATE          0x01
 #define      GYRO_EN_CAL_INT         0x02
diff --git a/include/dyn_servos.h b/include/dyn_servos.h
index 0ed9a2b2db3adcfbda4037b51d568da12086228e..ffe5416ea1ddee5716363fcbd523ccfe49be08d2 100644
--- a/include/dyn_servos.h
+++ b/include/dyn_servos.h
@@ -8,6 +8,7 @@ extern "C" {
 // servo models
 #define       SERVO_AX12A     0x000C
 #define       SERVO_AX12W     0x012C
+#define       SERVO_AX12N     0xF00C
 #define       SERVO_AX18A     0x0012
 #define       SERVO_MX28      0x001D
 #define       SERVO_RX24F     0x0018
@@ -45,14 +46,14 @@ typedef enum{
   P_HIGH_CALIBRATION_H        = 23,
   P_TORQUE_ENABLE             = 24,
   P_LED                       = 25,
-  P_CW_COMPLIANCE_MARGIN      = 26,
-  P_CCW_COMPLIANCE_MARGIN     = 27,
-  P_CW_COMPLIANCE_SLOPE       = 28,
-  P_CCW_COMPLIANCE_SLOPE      = 29,
-  P_D_GAIN                    = 26,
-  P_I_GAIN                    = 27,
-  P_P_GAIN                    = 28,
-  P_RESERVED                  = 29,
+  P_CW_COMPLIANCE_MARGIN      = 26,// servos with compliance
+  P_CCW_COMPLIANCE_MARGIN     = 27,// servos with compliance
+  P_CW_COMPLIANCE_SLOPE       = 28,// servos with compliance
+  P_CCW_COMPLIANCE_SLOPE      = 29,// servos with compliance
+  P_D_GAIN                    = 26,// servos with PID
+  P_I_GAIN                    = 27,// servos with PID
+  P_P_GAIN                    = 28,// servos with PID
+  P_RESERVED                  = 29,// servos with PID
   P_GOAL_POSITION_L           = 30,
   P_GOAL_POSITION_H           = 31,
   P_MOVING_SPEED_L            = 32,
@@ -71,8 +72,8 @@ typedef enum{
   P_PAUSE_TIME                = 45,
   P_MOVING                    = 46,
   P_LOCK                      = 47,
-  P_PUNCH_L                   = 48,
-  P_PUNCH_H                   = 49,
+  P_PUNCH_L                   = 48,// servos with compliance
+  P_PUNCH_H                   = 49,// servos with compliance
   P_RESERVED4                 = 50,
   P_RESERVED5                 = 51,
   P_POT_L                     = 52,
diff --git a/include/eeprom.h b/include/eeprom.h
index d1edf80f83f8aea550f16274e909670a5c7111e5..bb184e86d8847e8f63129b9896b9163d7d99f8e0 100755
--- a/include/eeprom.h
+++ b/include/eeprom.h
@@ -83,7 +83,7 @@ extern "C" {
 #define PAGE_FULL             ((uint8_t)0x80)
 
 /* Variables' number */
-#define NB_OF_VAR             ((uint8_t)0x03)
+#define NB_OF_VAR             ((uint8_t)0x33)
 
 /* Exported types ------------------------------------------------------------*/
 /* Exported macro ------------------------------------------------------------*/
diff --git a/include/ram.h b/include/ram.h
index 4d53763ff5c159e053f216b0bb98de6373098626..c69e8c5a7d22aa6729154e357c1b1d123b969a32 100644
--- a/include/ram.h
+++ b/include/ram.h
@@ -14,21 +14,21 @@ extern "C" {
 #define      RAM_BAD_BIT      -3
 #define      RAM_BAD_ACCESS   -4
 
-#define      RAM_SIZE          256
+#define      RAM_SIZE          512
 
 extern uint8_t ram_data[RAM_SIZE];
 
 void ram_init(void);
-inline void ram_read_byte(uint8_t address, uint8_t *data);
-inline void ram_read_word(uint8_t address, uint16_t *data);
-uint8_t ram_read_table(uint8_t address, uint8_t length,uint8_t *data);
-uint8_t ram_set_bit(uint8_t address, uint8_t bit);
-uint8_t ram_clear_bit(uint8_t address, uint8_t bit);
-uint8_t ram_write_byte(uint8_t address, uint8_t data);
-uint8_t ram_write_word(uint8_t address, uint16_t data);
-uint8_t ram_write_table(uint8_t address, uint8_t length,uint8_t *data);
-inline uint8_t ram_in_range(uint8_t reg,uint8_t address,uint8_t length);
-uint8_t ram_in_window(uint8_t start_reg,uint8_t reg_length,uint8_t start_address,uint8_t address_length);
+inline void ram_read_byte(uint16_t address, uint8_t *data);
+inline void ram_read_word(uint16_t address, uint16_t *data);
+uint8_t ram_read_table(uint16_t address, uint16_t length,uint8_t *data);
+uint8_t ram_set_bit(uint16_t address, uint8_t bit);
+uint8_t ram_clear_bit(uint16_t address, uint8_t bit);
+uint8_t ram_write_byte(uint16_t address, uint8_t data);
+uint8_t ram_write_word(uint16_t address, uint16_t data);
+uint8_t ram_write_table(uint16_t address, uint16_t length,uint8_t *data);
+inline uint8_t ram_in_range(uint16_t reg,uint16_t address,uint16_t length);
+uint8_t ram_in_window(uint16_t start_reg,uint16_t reg_length,uint16_t start_address,uint16_t address_length);
 
 #ifdef __cplusplus
 }
diff --git a/src/bioloid_dyn_slave.c b/src/bioloid_dyn_slave.c
index 86d6f8ffff9525794a0ebe5b975c3538e701c5d3..b2a0edfd9a9a3adb67f6326be462ce8eff90c42b 100644
--- a/src/bioloid_dyn_slave.c
+++ b/src/bioloid_dyn_slave.c
@@ -47,7 +47,7 @@ unsigned char bioloid_on_read(unsigned short int address,unsigned short int leng
 
 unsigned char bioloid_on_write(unsigned short int address,unsigned short int length,unsigned char *data)
 {
-  unsigned char i,j;
+  unsigned short int i,j;
 
   /* dynamixel slave internal operation registers */
   if(ram_in_range(BIOLOID_ID,address,length))
@@ -96,6 +96,11 @@ unsigned char bioloid_on_write(unsigned short int address,unsigned short int len
   return 0x00;
 }
 
+void bioloid_on_ping(void)
+{
+  gpio_toggle_led(RXD_LED);
+}
+
 /* interrupt service routines */
 void DYN_SLAVE_TIMER_IRQHandler(void)
 {
@@ -139,9 +144,10 @@ void bioloid_dyn_slave_init(void)
   priorities.dma_tx_subpriority=0;
 
   usart3_init(&bioloid_dyn_slave_comm,&bioloid_comm_init,&priorities);
-  dyn_slave_init(&bioloid_dyn_slave,&bioloid_dyn_slave_comm,ram_data[BIOLOID_ID],DYN_VER1);
+  dyn_slave_init(&bioloid_dyn_slave,&bioloid_dyn_slave_comm,ram_data[BIOLOID_ID],DYN_VER2);
   bioloid_dyn_slave.on_read=bioloid_on_read;
   bioloid_dyn_slave.on_write=bioloid_on_write;
+  bioloid_dyn_slave.on_ping=bioloid_on_ping;
   dyn_slave_set_return_delay(&bioloid_dyn_slave,ram_data[BIOLOID_RETURN_DELAY_TIME]);
   dyn_slave_set_return_level(&bioloid_dyn_slave,ram_data[BIOLOID_RETURN_LEVEL]);
 
diff --git a/src/eeprom.c b/src/eeprom.c
index 2f1c990eeff5762b655c1ba6b313c11e9e4d2e41..5d965d6f0befaadad4f5aee206c194d73f8e8aa4 100755
--- a/src/eeprom.c
+++ b/src/eeprom.c
@@ -60,6 +60,38 @@
 #define    DEFAULT_GYRO_FB_ADC_CH           (uint16_t)ADC_CH1
 #define    DEFAULT_GYRO_LR_ADC_CH           (uint16_t)ADC_CH2
 #define    DEFAULT_RETURN_LEVEL             0x0002
+#define    DEFAULT_SERVO0_OFFSET            0x0000
+#define    DEFAULT_SERVO1_OFFSET            0x0000
+#define    DEFAULT_SERVO2_OFFSET            0x0000
+#define    DEFAULT_SERVO3_OFFSET            0x0000
+#define    DEFAULT_SERVO4_OFFSET            0x0000
+#define    DEFAULT_SERVO5_OFFSET            0x0000
+#define    DEFAULT_SERVO6_OFFSET            0x0000
+#define    DEFAULT_SERVO7_OFFSET            0x0000
+#define    DEFAULT_SERVO8_OFFSET            0x0000
+#define    DEFAULT_SERVO9_OFFSET            0x0000
+#define    DEFAULT_SERVO10_OFFSET           0x0000
+#define    DEFAULT_SERVO11_OFFSET           0x0000
+#define    DEFAULT_SERVO12_OFFSET           0x0000
+#define    DEFAULT_SERVO13_OFFSET           0x0000
+#define    DEFAULT_SERVO14_OFFSET           0x0000
+#define    DEFAULT_SERVO15_OFFSET           0x0000
+#define    DEFAULT_SERVO16_OFFSET           0x0000
+#define    DEFAULT_SERVO17_OFFSET           0x0000
+#define    DEFAULT_SERVO18_OFFSET           0x0000
+#define    DEFAULT_SERVO19_OFFSET           0x0000
+#define    DEFAULT_SERVO20_OFFSET           0x0000
+#define    DEFAULT_SERVO21_OFFSET           0x0000
+#define    DEFAULT_SERVO22_OFFSET           0x0000
+#define    DEFAULT_SERVO23_OFFSET           0x0000
+#define    DEFAULT_SERVO24_OFFSET           0x0000
+#define    DEFAULT_SERVO25_OFFSET           0x0000
+#define    DEFAULT_SERVO26_OFFSET           0x0000
+#define    DEFAULT_SERVO27_OFFSET           0x0000
+#define    DEFAULT_SERVO28_OFFSET           0x0000
+#define    DEFAULT_SERVO29_OFFSET           0x0000
+#define    DEFAULT_SERVO30_OFFSET           0x0000
+#define    DEFAULT_SERVO31_OFFSET           0x0000
 /* Private macro -------------------------------------------------------------*/
 /* Private variables ---------------------------------------------------------*/
 
@@ -67,46 +99,58 @@
 uint16_t DataVar = 0;
 
 /* Virtual address defined by the user: 0xFFFF value is prohibited */
-uint16_t eeprom_data[] __attribute__ ((section (".eeprom")))={VALID_PAGE,
-                                                              0xFFFF,
-                                                              DEFAULT_DEVICE_MODEL&0xFF,// model number LSB
-                                                              DEVICE_MODEL_OFFSET,
-                                                              DEFAULT_DEVICE_MODEL>>8,// model number MSB
-                                                              DEVICE_MODEL_OFFSET+1,
-                                                              DEFAULT_FIRMWARE_VERSION,// firmware version
-                                                              FIRMWARE_VERSION_OFFSET,
-                                                              DEFAULT_DEVICE_ID,// default device id
-                                                              DEVICE_ID_OFFSET,
-                                                              DEFAULT_BAUDRATE,// default baudrate 
-                                                              BAUDRATE_OFFSET,
-                                                              DEFAULT_RETURN_DELAY,// return delay time
-                                                              RETURN_DELAY_OFFSET,
-                                                              DEFAULT_MM_PERIOD&0xFF,
-                                                              MM_PERIOD_OFFSET,
-                                                              DEFAULT_MM_PERIOD>>8,
-                                                              MM_PERIOD_OFFSET+1,
-                                                              DEFAULT_BAL_KNEE_GAIN&0xFF,
-                                                              MM_BAL_KNEE_GAIN_OFFSET,
-                                                              DEFAULT_BAL_KNEE_GAIN>>8,
-                                                              MM_BAL_KNEE_GAIN_OFFSET+1,
-                                                              DEFAULT_BAL_ANKLE_ROLL_GAIN&0xFF,
-                                                              MM_BAL_ANKLE_ROLL_GAIN_OFFSET,
-                                                              DEFAULT_BAL_ANKLE_ROLL_GAIN>>8,
-                                                              MM_BAL_ANKLE_ROLL_GAIN_OFFSET+1,
-                                                              DEFAULT_BAL_ANKLE_PITCH_GAIN&0xFF,
-                                                              MM_BAL_ANKLE_PITCH_GAIN_OFFSET,
-                                                              DEFAULT_BAL_ANKLE_PITCH_GAIN>>8,
-                                                              MM_BAL_ANKLE_PITCH_GAIN_OFFSET+1,
-                                                              DEFAULT_BAL_HIP_ROLL_GAIN&0xFF,
-                                                              MM_BAL_HIP_ROLL_GAIN_OFFSET,
-                                                              DEFAULT_BAL_HIP_ROLL_GAIN>>8,
-                                                              MM_BAL_HIP_ROLL_GAIN_OFFSET+1,
-                                                              DEFAULT_RETURN_LEVEL,
-                                                              RETURN_LEVEL_OFFSET,
-                                                              DEFAULT_GYRO_FB_ADC_CH,
-                                                              GYRO_FB_ADC_CH_OFFSET,
-                                                              DEFAULT_GYRO_LR_ADC_CH,
-                                                              GYRO_LR_ADC_CH_OFFSET};// return level
+uint16_t eeprom_data[] __attribute__ ((section (".eeprom")))={VALID_PAGE,                        0xFFFF,
+                                                              DEFAULT_DEVICE_MODEL&0xFF,         DEVICE_MODEL_OFFSET,// model number LSB
+                                                              DEFAULT_DEVICE_MODEL>>8,           DEVICE_MODEL_OFFSET+1,// model number MSB
+                                                              DEFAULT_FIRMWARE_VERSION,          FIRMWARE_VERSION_OFFSET,// firmware version
+                                                              DEFAULT_DEVICE_ID,                 DEVICE_ID_OFFSET,// default device id
+                                                              DEFAULT_BAUDRATE,                  BAUDRATE_OFFSET,// default baudrate 
+                                                              DEFAULT_RETURN_DELAY,              RETURN_DELAY_OFFSET,// return delay time
+                                                              DEFAULT_MM_PERIOD&0xFF,            MM_PERIOD_OFFSET,
+                                                              DEFAULT_MM_PERIOD>>8,              MM_PERIOD_OFFSET+1,
+                                                              DEFAULT_BAL_KNEE_GAIN&0xFF,        MM_BAL_KNEE_GAIN_OFFSET,
+                                                              DEFAULT_BAL_KNEE_GAIN>>8,          MM_BAL_KNEE_GAIN_OFFSET+1,
+                                                              DEFAULT_BAL_ANKLE_ROLL_GAIN&0xFF,  MM_BAL_ANKLE_ROLL_GAIN_OFFSET,
+                                                              DEFAULT_BAL_ANKLE_ROLL_GAIN>>8,    MM_BAL_ANKLE_ROLL_GAIN_OFFSET+1,
+                                                              DEFAULT_BAL_ANKLE_PITCH_GAIN&0xFF, MM_BAL_ANKLE_PITCH_GAIN_OFFSET,
+                                                              DEFAULT_BAL_ANKLE_PITCH_GAIN>>8,   MM_BAL_ANKLE_PITCH_GAIN_OFFSET+1,
+                                                              DEFAULT_BAL_HIP_ROLL_GAIN&0xFF,    MM_BAL_HIP_ROLL_GAIN_OFFSET,
+                                                              DEFAULT_BAL_HIP_ROLL_GAIN>>8,      MM_BAL_HIP_ROLL_GAIN_OFFSET+1,
+                                                              DEFAULT_RETURN_LEVEL,              RETURN_LEVEL_OFFSET,// return level
+                                                              DEFAULT_SERVO0_OFFSET,             MM_SERVO0_OFFSET,
+                                                              DEFAULT_SERVO1_OFFSET,             MM_SERVO1_OFFSET,
+                                                              DEFAULT_SERVO2_OFFSET,             MM_SERVO2_OFFSET,
+                                                              DEFAULT_SERVO3_OFFSET,             MM_SERVO3_OFFSET,
+                                                              DEFAULT_SERVO4_OFFSET,             MM_SERVO4_OFFSET,
+                                                              DEFAULT_SERVO5_OFFSET,             MM_SERVO5_OFFSET,
+                                                              DEFAULT_SERVO6_OFFSET,             MM_SERVO6_OFFSET,
+                                                              DEFAULT_SERVO7_OFFSET,             MM_SERVO7_OFFSET,
+                                                              DEFAULT_SERVO8_OFFSET,             MM_SERVO8_OFFSET,
+                                                              DEFAULT_SERVO9_OFFSET,             MM_SERVO9_OFFSET,
+                                                              DEFAULT_SERVO10_OFFSET,            MM_SERVO10_OFFSET,
+                                                              DEFAULT_SERVO11_OFFSET,            MM_SERVO11_OFFSET,
+                                                              DEFAULT_SERVO12_OFFSET,            MM_SERVO12_OFFSET,
+                                                              DEFAULT_SERVO13_OFFSET,            MM_SERVO13_OFFSET,
+                                                              DEFAULT_SERVO14_OFFSET,            MM_SERVO14_OFFSET,
+                                                              DEFAULT_SERVO15_OFFSET,            MM_SERVO15_OFFSET,
+                                                              DEFAULT_SERVO16_OFFSET,            MM_SERVO16_OFFSET,
+                                                              DEFAULT_SERVO17_OFFSET,            MM_SERVO17_OFFSET,
+                                                              DEFAULT_SERVO18_OFFSET,            MM_SERVO18_OFFSET,
+                                                              DEFAULT_SERVO19_OFFSET,            MM_SERVO19_OFFSET,
+                                                              DEFAULT_SERVO20_OFFSET,            MM_SERVO20_OFFSET,
+                                                              DEFAULT_SERVO21_OFFSET,            MM_SERVO21_OFFSET,
+                                                              DEFAULT_SERVO22_OFFSET,            MM_SERVO22_OFFSET,
+                                                              DEFAULT_SERVO23_OFFSET,            MM_SERVO23_OFFSET,
+                                                              DEFAULT_SERVO24_OFFSET,            MM_SERVO24_OFFSET,
+                                                              DEFAULT_SERVO25_OFFSET,            MM_SERVO25_OFFSET,
+                                                              DEFAULT_SERVO26_OFFSET,            MM_SERVO26_OFFSET,
+                                                              DEFAULT_SERVO27_OFFSET,            MM_SERVO27_OFFSET,
+                                                              DEFAULT_SERVO28_OFFSET,            MM_SERVO28_OFFSET,
+                                                              DEFAULT_SERVO29_OFFSET,            MM_SERVO29_OFFSET,
+                                                              DEFAULT_SERVO30_OFFSET,            MM_SERVO30_OFFSET,
+                                                              DEFAULT_SERVO31_OFFSET,            MM_SERVO31_OFFSET,
+                                                              DEFAULT_GYRO_FB_ADC_CH,            GYRO_FB_ADC_CH_OFFSET,
+                                                              DEFAULT_GYRO_LR_ADC_CH,            GYRO_LR_ADC_CH_OFFSET};
 
 /* Private function prototypes -----------------------------------------------*/
 /* Private functions ---------------------------------------------------------*/
diff --git a/src/motion_manager.c b/src/motion_manager.c
index 3b5a18de1a8d52dcb93542eb0392f8deb00a44ba..86b5b751cb7b1a5bbfd42ca5b5357bdbbdd3bec9 100644
--- a/src/motion_manager.c
+++ b/src/motion_manager.c
@@ -5,6 +5,7 @@
 #include "action.h"
 #include "adc_dma.h"
 #include "bioloid_gyro.h"
+#include "gpio.h"
 
 #define MANAGER_TIMER                   TIM3
 #define ENABLE_MANAGER_TIMER_CLK        __HAL_RCC_TIM3_CLK_ENABLE()
@@ -34,13 +35,16 @@ void manager_send_motion_command(void)
 
   for(i=0;i<MANAGER_MAX_NUM_SERVOS;i++)
   {
-    if(manager_servos[i].enabled && manager_servos[i].model!=0x0000)
-    {
-      servo_ids[num]=manager_servos[i].id;
-      manager_servos[i].cw_comp=(1<<(manager_current_slopes[i]&0x0F));
-      manager_servos[i].ccw_comp=(1<<((manager_current_slopes[i]&0xF0)>>4));
-      write_data[num].data_addr=(uint8_t *)&(manager_servos[i].cw_comp);
-      num++;
+    if(manager_servos[i].enabled)
+    { 
+      if(manager_servos[i].model==SERVO_AX12A)
+      {
+        servo_ids[num]=manager_servos[i].id;
+        manager_servos[i].cw_comp=(1<<(manager_current_slopes[i]&0x0F));
+        manager_servos[i].ccw_comp=(1<<((manager_current_slopes[i]&0xF0)>>4));
+        write_data[num].data_addr=(uint8_t *)&(manager_servos[i].cw_comp);
+        num++;
+      }
     }
   }
   if(num>0)
@@ -183,7 +187,6 @@ void manager_init(uint16_t period_us)
   // enable power to the servos
   bioloid_dyn_master_servos_enable_power();
   HAL_Delay(1000);
-
   // detect the servos connected 
   dyn_master_scan(&bioloid_dyn_master_servos,&num,servo_ids); 
   ram_data[BIOLOID_MM_NUM_SERVOS]=num;
@@ -320,6 +323,7 @@ void manager_init(uint16_t period_us)
   for(i=0;i<MANAGER_MAX_NUM_SERVOS;i++)
     manager_balance_offset[i]=0;
   manager_balance_enabled=0x00;
+  gpio_set_led(TXD_LED);
 
   /* initialize action module */
   action_init(period_us);
@@ -464,7 +468,8 @@ inline int16_t manager_get_ccw_angle_limit(uint8_t servo_id)
 uint8_t manager_in_range(unsigned short int address, unsigned short int length)
 {
   if(ram_in_window(MANAGER_BASE_ADDRESS,MANAGER_MEM_LENGTH,address,length) ||
-     ram_in_window(BIOLOID_MM_PERIOD_L,MANAGER_EEPROM_LENGTH,address,length))
+     ram_in_window(BIOLOID_MM_PERIOD_L,BIOLOID_MM_BAL_HIP_ROLL_GAIN_H,address,length) ||
+     ram_in_window(BIOLOID_MM_SERVO0_OFFSET,BIOLOID_MM_SERVO31_OFFSET,address,length))
     return 0x01;
   else
     return 0x00;
@@ -472,8 +477,8 @@ uint8_t manager_in_range(unsigned short int address, unsigned short int length)
 
 void manager_process_write_cmd(unsigned short int address,unsigned short int length,unsigned char *data)
 {
-  uint16_t word_value;
-  uint8_t byte_value,module,i,j;
+  uint16_t word_value,i,j;
+  uint8_t byte_value,module;
 
   if(ram_in_range(BIOLOID_MM_PERIOD_L,address,length) && ram_in_range(BIOLOID_MM_PERIOD_H,address,length))
   {
diff --git a/src/ram.c b/src/ram.c
index 046ecab0f6a13b1c3644b929e768cb68a7fde03e..45069ef7f06a94cc647195685d5b76ea480a55bf 100644
--- a/src/ram.c
+++ b/src/ram.c
@@ -15,13 +15,13 @@ void ram_init(void)
   if(EE_ReadVariable(DEVICE_MODEL_OFFSET+1,&eeprom_data)==0)
     ram_data[DEVICE_MODEL_OFFSET+1]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(FIRMWARE_VERSION_OFFSET,&eeprom_data)==0)
-    ram_data[FIRMWARE_VERSION_OFFSET]=(uint8_t)eeprom_data;
+    ram_data[FIRMWARE_VERSION_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(DEVICE_ID_OFFSET,&eeprom_data)==0)
-    ram_data[DEVICE_ID_OFFSET]=(uint8_t)eeprom_data;
+    ram_data[DEVICE_ID_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(BAUDRATE_OFFSET,&eeprom_data)==0)
-    ram_data[BAUDRATE_OFFSET]=(uint8_t)eeprom_data;
+    ram_data[BAUDRATE_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(RETURN_DELAY_OFFSET,&eeprom_data)==0)
-    ram_data[RETURN_DELAY_OFFSET]=(uint8_t)eeprom_data;
+    ram_data[RETURN_DELAY_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(MM_PERIOD_OFFSET,&eeprom_data)==0)
     ram_data[MM_PERIOD_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(MM_PERIOD_OFFSET+1,&eeprom_data)==0)
@@ -43,27 +43,32 @@ void ram_init(void)
   if(EE_ReadVariable(MM_BAL_HIP_ROLL_GAIN_OFFSET+1,&eeprom_data)==0)
     ram_data[MM_BAL_HIP_ROLL_GAIN_OFFSET+1]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(RETURN_LEVEL_OFFSET,&eeprom_data)==0)
-    ram_data[RETURN_LEVEL_OFFSET]=(uint8_t)eeprom_data;
+    ram_data[RETURN_LEVEL_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
+  for(i=0;i<32;i++)
+  {
+    if(EE_ReadVariable(MM_SERVO0_OFFSET+i,&eeprom_data)==0)
+      ram_data[BIOLOID_MM_SERVO0_OFFSET+i]=(uint8_t)(eeprom_data&0x00FF);
+  }
   if(EE_ReadVariable(GYRO_FB_ADC_CH_OFFSET,&eeprom_data)==0)
     ram_data[GYRO_FB_ADC_CH_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
   if(EE_ReadVariable(GYRO_LR_ADC_CH_OFFSET,&eeprom_data)==0)
     ram_data[GYRO_LR_ADC_CH_OFFSET]=(uint8_t)(eeprom_data&0x00FF);
 }
 
-inline void ram_read_byte(uint8_t address,uint8_t *data)
+inline void ram_read_byte(uint16_t address,uint8_t *data)
 {
   (*data)=ram_data[address];
 }
 
-inline void ram_read_word(uint8_t address, uint16_t *data)
+inline void ram_read_word(uint16_t address, uint16_t *data)
 {
   (*data)=ram_data[address];
   (*data)+=ram_data[address+1]*256;
 }
 
-uint8_t ram_read_table(uint8_t address, uint8_t length,uint8_t *data)
+uint8_t ram_read_table(uint16_t address, uint16_t length,uint8_t *data)
 {
-  uint8_t i;
+  uint16_t i;
 
   if((address+length)<=(RAM_SIZE-1))
   {
@@ -75,7 +80,7 @@ uint8_t ram_read_table(uint8_t address, uint8_t length,uint8_t *data)
     return RAM_BAD_ADDRESS;
 }
 
-uint8_t ram_set_bit(uint8_t address, uint8_t bit)
+uint8_t ram_set_bit(uint16_t address, uint8_t bit)
 {
   if(bit>=0 && bit<8)
   {
@@ -86,7 +91,7 @@ uint8_t ram_set_bit(uint8_t address, uint8_t bit)
     return RAM_BAD_BIT;
 }
 
-uint8_t ram_clear_bit(uint8_t address, uint8_t bit)
+uint8_t ram_clear_bit(uint16_t address, uint8_t bit)
 {
   if(bit>=0 && bit<8)
   {
@@ -97,14 +102,14 @@ uint8_t ram_clear_bit(uint8_t address, uint8_t bit)
     return RAM_BAD_BIT;
 }
 
-uint8_t ram_write_byte(uint8_t address, uint8_t data)
+uint8_t ram_write_byte(uint16_t address, uint8_t data)
 {
   ram_data[address]=data;
 
   return RAM_SUCCESS;
 }
 
-uint8_t ram_write_word(uint8_t address, uint16_t data)
+uint8_t ram_write_word(uint16_t address, uint16_t data)
 {
   if(address < (RAM_SIZE-1))
   {
@@ -117,9 +122,9 @@ uint8_t ram_write_word(uint8_t address, uint16_t data)
     return RAM_BAD_ADDRESS;  
 }
 
-uint8_t ram_write_table(uint8_t address, uint8_t length,uint8_t *data)
+uint8_t ram_write_table(uint16_t address, uint16_t length,uint8_t *data)
 {
-  uint8_t i;
+  uint16_t i;
 
   if((address+length)<RAM_SIZE)
   {
@@ -131,7 +136,7 @@ uint8_t ram_write_table(uint8_t address, uint8_t length,uint8_t *data)
     return RAM_BAD_ADDRESS;
 }
 
-inline uint8_t ram_in_range(uint8_t reg,uint8_t address,uint8_t length)
+inline uint8_t ram_in_range(uint16_t reg,uint16_t address,uint16_t length)
 {
   if(reg>=address && reg<(address+length))
     return 0x01;
@@ -139,10 +144,10 @@ inline uint8_t ram_in_range(uint8_t reg,uint8_t address,uint8_t length)
     return 0x00;
 }
 
-uint8_t ram_in_window(uint8_t start_reg,uint8_t reg_length,uint8_t start_address,uint8_t address_length)
+uint8_t ram_in_window(uint16_t start_reg,uint16_t reg_length,uint16_t start_address,uint16_t address_length)
 {
-  uint8_t end_reg=start_reg+reg_length;
-  uint8_t end_address=start_address+address_length;
+  uint16_t end_reg=start_reg+reg_length;
+  uint16_t end_address=start_address+address_length;
 
   if((start_reg>=start_address && start_reg<end_address) || (end_reg>=start_address && end_reg<end_address) ||
      (start_address>=start_reg && start_address<end_reg) || (end_address>=start_reg && end_address<end_reg))