diff --git a/py/modbuiltins.c b/py/modbuiltins.c
index 455e1cc1b6e740ac7d14c3b94e8e08e24a7e1922..9b5bd4c5ed0891787743de54362965725ba98fdd 100644
--- a/py/modbuiltins.c
+++ b/py/modbuiltins.c
@@ -634,6 +634,9 @@ STATIC const mp_map_elem_t mp_module_builtins_globals_table[] = {
 
     // built-in objects
     { MP_OBJ_NEW_QSTR(MP_QSTR_Ellipsis), (mp_obj_t)&mp_const_ellipsis_obj },
+    #if MICROPY_PY_BUILTINS_NOTIMPLEMENTED
+    { MP_OBJ_NEW_QSTR(MP_QSTR_NotImplemented), MP_OBJ_SENTINEL },
+    #endif
 
     // built-in user functions
     { MP_OBJ_NEW_QSTR(MP_QSTR_abs), (mp_obj_t)&mp_builtin_abs_obj },
diff --git a/py/mpconfig.h b/py/mpconfig.h
index a5aacc8b0ee467892c73df035627368fdae6ddd7..560fdce9ce5aaa92764e8cf26049b81aee4de4c3 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -479,6 +479,11 @@ typedef double mp_float_t;
 #define MICROPY_PY_BUILTINS_REVERSED (1)
 #endif
 
+// Whether to define "NotImplemented" special constant
+#ifndef MICROPY_PY_BUILTINS_NOTIMPLEMENTED
+#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0)
+#endif
+
 // Whether to set __file__ for imported modules
 #ifndef MICROPY_PY___FILE__
 #define MICROPY_PY___FILE__ (1)
diff --git a/py/obj.c b/py/obj.c
index 81adbe3933861c65386c5c9ed89026a5cb49bca7..1928fad98f0a393eafe31a3aeb13d97e5b0af8a2 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -62,6 +62,14 @@ void mp_obj_print_helper(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t
         return;
     }
 #endif
+
+    #if MICROPY_PY_BUILTINS_NOTIMPLEMENTED
+    if (o_in == MP_OBJ_SENTINEL) {
+        mp_printf(print, "%q", MP_QSTR_NotImplemented);
+        return;
+    }
+    #endif
+
     mp_obj_type_t *type = mp_obj_get_type(o_in);
     if (type->print != NULL) {
         type->print((mp_print_t*)print, o_in, kind);
diff --git a/py/qstrdefs.h b/py/qstrdefs.h
index 77277c095fcb5d4b44ad14a3c27b71cebac88e58..5d0dc9d2749aa092136f31344e9dd1dd705273ca 100644
--- a/py/qstrdefs.h
+++ b/py/qstrdefs.h
@@ -115,6 +115,9 @@ Q(builtins)
 
 Q(Ellipsis)
 Q(StopIteration)
+#if MICROPY_PY_BUILTINS_NOTIMPLEMENTED
+Q(NotImplemented)
+#endif
 
 Q(BaseException)
 Q(ArithmeticError)
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 5e9b854bda5ebeec23ef5713e52199fd36ca0d28..31f3afed16c7fb5f4e5143bd1de6aa776d5dde13 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -64,6 +64,7 @@
 #define MICROPY_PY_BUILTINS_MEMORYVIEW (1)
 #define MICROPY_PY_BUILTINS_FROZENSET (1)
 #define MICROPY_PY_BUILTINS_COMPILE (1)
+#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
 #define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
 #define MICROPY_PY_ALL_SPECIAL_METHODS (1)
 #define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)