diff --git a/stm/main.c b/stm/main.c
index a1b8e668f03b6edb62013043d0042f3cdfca9427..08d82980dfcc2492af6a95d6bc7f12c3d64dcb2f 100644
--- a/stm/main.c
+++ b/stm/main.c
@@ -24,10 +24,10 @@
 #include "timer.h"
 #include "audio.h"
 
-static FATFS fatfs0;
-
 extern uint32_t _heap_start;
 
+static FATFS fatfs0;
+
 void flash_error(int n) {
     for (int i = 0; i < n; i++) {
         led_state(PYB_LED_R1, 1);
@@ -376,9 +376,12 @@ void do_repl(void) {
                 py_obj_t module_fun = rt_make_function_from_id(1);
                 if (module_fun != py_const_none) {
                     nlr_buf_t nlr;
+                    uint32_t start = sys_tick_counter;
                     if (nlr_push(&nlr) == 0) {
                         rt_call_function_0(module_fun);
                         nlr_pop();
+                        uint32_t ticks = sys_tick_counter - start; // TODO implement a function that does this properly
+                        printf("(took %lu ms)\n", ticks);
                     } else {
                         // uncaught exception
                         py_obj_print((py_obj_t)nlr.ret_val);
@@ -468,7 +471,9 @@ void servo_init(void) {
     // TIM2 clock enable
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
 
-    // GPIOC Configuration: TIM2_CH3 (PB10)
+    // for PB10
+    /*
+    // GPIOB Configuration: TIM2_CH3 (PB10)
     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
@@ -479,6 +484,25 @@ void servo_init(void) {
 
     // Connect TIM2 pins to AF1
     GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_TIM2);
+    */
+
+    // for PA0, PA1, PA2, PA3
+    {
+        // GPIOA Configuration: TIM2_CH0, TIM2_CH1 (PA0, PA1)
+        GPIO_InitTypeDef GPIO_InitStructure;
+        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
+        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
+        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
+        GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+        // Connect TIM2 pins to AF1
+        GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2);
+        GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
+        GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM2);
+        GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_TIM2);
+    }
 
     // Compute the prescaler value so TIM2 runs at 100kHz
     uint16_t PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 100000) - 1;
@@ -491,16 +515,22 @@ void servo_init(void) {
     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
 
-    // PWM1 Mode configuration: Channel1
+    // PWM Mode configuration
     TIM_OCInitTypeDef TIM_OCInitStructure;
     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
     TIM_OCInitStructure.TIM_Pulse = 150; // units of 10us
     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
-    TIM_OC3Init(TIM2, &TIM_OCInitStructure);
+    TIM_OC1Init(TIM2, &TIM_OCInitStructure); // channel 1
+    TIM_OC2Init(TIM2, &TIM_OCInitStructure); // channel 2
+    TIM_OC3Init(TIM2, &TIM_OCInitStructure); // channel 3
+    TIM_OC4Init(TIM2, &TIM_OCInitStructure); // channel 4
 
     // ?
-    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
+    TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); // channel 1
+    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); // channel 2
+    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); // channel 3
+    TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); // channel 4
 
     // ?
     TIM_ARRPreloadConfig(TIM2, ENABLE);
@@ -509,11 +539,17 @@ void servo_init(void) {
     TIM_Cmd(TIM2, ENABLE);
 }
 
-py_obj_t pyb_servo_set(py_obj_t value) {
+py_obj_t pyb_servo_set(py_obj_t port, py_obj_t value) {
+    int p = py_obj_get_int(port);
     int v = py_obj_get_int(value);
     if (v < 100) { v = 100; }
     if (v > 200) { v = 200; }
-    TIM2->CCR3 = v;
+    switch (p) {
+        case 1: TIM2->CCR1 = v; break;
+        case 2: TIM2->CCR2 = v; break;
+        case 3: TIM2->CCR3 = v; break;
+        case 4: TIM2->CCR4 = v; break;
+    }
     return py_const_none;
 }
 
@@ -527,19 +563,33 @@ py_obj_t pyb_pwm_set(py_obj_t period, py_obj_t pulse) {
 
 #define MMA_ADDR (0x4c)
 
+int mma_buf[12];
+
 py_obj_t pyb_mma_read(void) {
+    for (int i = 0; i <= 6; i += 3) {
+        mma_buf[0 + i] = mma_buf[0 + i + 3];
+        mma_buf[1 + i] = mma_buf[1 + i + 3];
+        mma_buf[2 + i] = mma_buf[2 + i + 3];
+    }
+
     mma_start(MMA_ADDR, 1);
     mma_send_byte(0);
     mma_restart(MMA_ADDR, 0);
-    py_obj_t data[4];
-    for (int i = 3; i >= 1; i--) {
+    for (int i = 0; i <= 2; i++) {
         int v = mma_read_ack() & 0x3f;
         if (v & 0x20) {
             v |= ~0x1f;
         }
-        data[i] = py_obj_new_int(v);
+        mma_buf[9 + i] = v;
     }
-    data[0] = py_obj_new_int(mma_read_nack());
+    int jolt_info = mma_read_nack();
+
+    py_obj_t data[4];
+    data[0] = py_obj_new_int(jolt_info);
+    data[1] = py_obj_new_int(mma_buf[2] + mma_buf[5] + mma_buf[8] + mma_buf[11]);
+    data[2] = py_obj_new_int(mma_buf[1] + mma_buf[4] + mma_buf[7] + mma_buf[10]);
+    data[3] = py_obj_new_int(mma_buf[0] + mma_buf[3] + mma_buf[6] + mma_buf[9]);
+
     return rt_build_tuple(4, data); // items in reverse order in data
 }
 
@@ -742,7 +792,7 @@ soft_reset:
     rt_init();
 
     // LCD init
-    lcd_init();
+    //lcd_init(); disabled while servos on PA0 PA1
 
     // servo
     servo_init();
@@ -770,7 +820,7 @@ soft_reset:
         rt_store_attr(m, qstr_from_str_static("delay"), rt_make_function_1(pyb_delay));
         rt_store_attr(m, qstr_from_str_static("led"), rt_make_function_1(pyb_led));
         rt_store_attr(m, qstr_from_str_static("sw"), rt_make_function_0(pyb_sw));
-        rt_store_attr(m, qstr_from_str_static("servo"), rt_make_function_1(pyb_servo_set));
+        rt_store_attr(m, qstr_from_str_static("servo"), rt_make_function_2(pyb_servo_set));
         rt_store_attr(m, qstr_from_str_static("pwm"), rt_make_function_2(pyb_pwm_set));
         rt_store_attr(m, qstr_from_str_static("mma"), rt_make_function_0(pyb_mma_read));
         rt_store_attr(m, qstr_from_str_static("hid"), rt_make_function_1(pyb_hid_send_report));
@@ -1126,7 +1176,7 @@ soft_reset:
     // SD card testing
     if (1) {
         extern void sdio_init(void);
-        sdio_init();
+        //sdio_init();
     }
 
     printf("PYB: sync filesystems\n");