Implement slicing for tuples.
diff --git a/py/objtuple.c b/py/objtuple.c
index 5f1744e..da714e0 100644
--- a/py/objtuple.c
+++ b/py/objtuple.c
@@ -1,3 +1,4 @@
+#include <string.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <assert.h>
@@ -87,7 +88,15 @@
     switch (op) {
         case RT_BINARY_OP_SUBSCR:
         {
-            // tuple load
+#if MICROPY_ENABLE_SLICE
+            if (MP_OBJ_IS_TYPE(rhs, &slice_type)) {
+                machine_uint_t start, stop;
+                assert(m_seq_get_fast_slice_indexes(o->len, rhs, &start, &stop));
+                mp_obj_tuple_t *res = mp_obj_new_tuple(stop - start, NULL);
+                m_seq_copy(res->items, o->items + start, res->len, mp_obj_t);
+                return res;
+            }
+#endif
             uint index = mp_get_index(o->base.type, o->len, rhs);
             return o->items[index];
         }