diff --git a/.gitignore b/.gitignore
index a6295928d3ad0e577a3cb462ecad149d7f2e1984..280db388f5c91dca6f0cb7afae59525cafedc486 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,7 @@ __pycache__/
 ######################
 GNUmakefile
 user.props
+
+# Generated rst files
+######################
+genrst/
diff --git a/docs/Makefile b/docs/Makefile
index d81d11eeb25045f273c0dfc34d1faf0cdd1aeb84..b4e338ad55a2717e970bfa112c06dd0be03ed335 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -6,6 +6,9 @@ SPHINXOPTS    =
 SPHINXBUILD   = sphinx-build
 PAPER         =
 BUILDDIR      = build/$(MICROPY_PORT)
+CPYDIFFDIR    = ../tools
+CPYDIFF       = gen-cpydiff.py
+GENRSTDIR     = genrst
 # Run "make FORCE= ..." to avoid rebuilding from scratch (and risk
 # producing incorrect docs).
 FORCE         = -E
@@ -48,11 +51,18 @@ help:
 	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
 	@echo "  linkcheck  to check all external links for integrity"
 	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+	@echo "  cpydiff    to generate the MicroPython differences from CPython"
 
 clean:
 	rm -rf $(BUILDDIR)/*
+	rm -f $(GENRSTDIR)/*
 
-html:
+cpydiff:
+	@echo "Generating MicroPython Differences."
+	rm -f $(GENRSTDIR)/*
+	cd $(CPYDIFFDIR) && python $(CPYDIFF)
+
+html: cpydiff
 	$(SPHINXBUILD) $(FORCE) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
 	@echo
 	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
@@ -106,20 +116,20 @@ epub:
 	@echo
 	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
 
-latex:
+latex: cpydiff
 	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 	@echo
 	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
 	@echo "Run \`make' in that directory to run these through (pdf)latex" \
 	      "(use \`make latexpdf' here to do that automatically)."
 
-latexpdf:
+latexpdf: cpydiff
 	$(SPHINXBUILD) $(FORCE) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 	@echo "Running LaTeX files through pdflatex..."
 	$(MAKE) -C $(BUILDDIR)/latex all-pdf
 	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
 
-latexpdfja:
+latexpdfja: cpydiff
 	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 	@echo "Running LaTeX files through platex and dvipdfmx..."
 	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
diff --git a/docs/esp8266_contents.rst b/docs/esp8266_contents.rst
index 30def3df2b6b2d5494b677a516834d735e7f8d6f..7c35460bd955225c685c0444610501ba9fc0ea2f 100644
--- a/docs/esp8266_contents.rst
+++ b/docs/esp8266_contents.rst
@@ -8,4 +8,5 @@ MicroPython documentation contents
     esp8266/tutorial/index.rst
     library/index.rst
     reference/index.rst
+    genrst/index.rst
     license.rst
diff --git a/docs/esp8266_index.rst b/docs/esp8266_index.rst
index 82de9d6dfd404495036f8c28b7077422a68fa063..8654c43aa072257ea88530c06c7a35ac4a2f4972 100644
--- a/docs/esp8266_index.rst
+++ b/docs/esp8266_index.rst
@@ -5,6 +5,7 @@ MicroPython documentation and references
 
     esp8266/quickref.rst
     library/index.rst
+    genrst/index.rst
     license.rst
     esp8266_contents.rst
 
diff --git a/docs/pyboard_contents.rst b/docs/pyboard_contents.rst
index 5ced479efcea62f62ba2d140c6d2d7c80f44bbd6..658dd366f2028d9565481cca88e29fa23bc3ecf9 100644
--- a/docs/pyboard_contents.rst
+++ b/docs/pyboard_contents.rst
@@ -9,5 +9,6 @@ MicroPython documentation contents
     library/index.rst
     reference/index.rst
     pyboard/hardware/index.rst
+    genrst/index.rst
     license.rst
 
diff --git a/docs/pyboard_index.rst b/docs/pyboard_index.rst
index 38ccb1ac99142c894534cf26dc32be01e8d6ba67..4caa4cc88339dccaa57820a00f6fa05efd60b15a 100644
--- a/docs/pyboard_index.rst
+++ b/docs/pyboard_index.rst
@@ -8,6 +8,7 @@ MicroPython documentation and references
     pyboard/tutorial/index.rst
     library/index.rst
     pyboard/hardware/index.rst
+    genrst/index.rst
     license.rst
     pyboard_contents.rst
 
diff --git a/docs/topindex.html b/docs/topindex.html
index 75039233ee6ba7ff33d00b42b1908c30579caf12..3cbf216155f35bcaeb8bd89ebc458142d212027b 100644
--- a/docs/topindex.html
+++ b/docs/topindex.html
@@ -47,6 +47,10 @@
           <span class="linkdescr">MicroPython libraries, including the <a href="{{ pathto("library/machine") }}">machine module</a></span>
         {% endif %}
       </p>
+      <p class="biglink">
+        <a class="biglink" href="{{ pathto("genrst/index") }}">Micropython Differences</a><br/>
+        <span class="linkdescr">MicroPython operations which differ from CPython</span>
+      </p>
     </td>
     <td width="40%" style="padding-left:2em;">
       <p class="biglink">
diff --git a/docs/unix_contents.rst b/docs/unix_contents.rst
index ec0a6f0e860497242108e036b76d36a0e3f605dd..8c5a586b298d54d62740edbb6a258b15429126c8 100644
--- a/docs/unix_contents.rst
+++ b/docs/unix_contents.rst
@@ -5,4 +5,5 @@ MicroPython documentation contents
 
     library/index.rst
     reference/index.rst
+    genrst/index.rst
     license.rst
diff --git a/docs/unix_index.rst b/docs/unix_index.rst
index 027f24c2e354c2407178d4107b250cee77753509..7fa1753c2375650e1a32ecf1cdd3bb301bfa1b88 100644
--- a/docs/unix_index.rst
+++ b/docs/unix_index.rst
@@ -4,6 +4,7 @@ MicroPython documentation and references
 .. toctree::
 
     library/index.rst
+    genrst/index.rst
     license.rst
     unix_contents.rst
 
diff --git a/docs/wipy_contents.rst b/docs/wipy_contents.rst
index 2beffa236e81c9630300637213b4bf3e472b3ce2..0e50a7c6ee6585b079514b12d07c71ccc3fc9d69 100644
--- a/docs/wipy_contents.rst
+++ b/docs/wipy_contents.rst
@@ -8,4 +8,5 @@ MicroPython documentation contents
     wipy/tutorial/index.rst
     library/index.rst
     reference/index.rst
+    genrst/index.rst
     license.rst
diff --git a/docs/wipy_index.rst b/docs/wipy_index.rst
index 9fe3dce896bd6a8e3b5133850e029a9ad98e9cff..a390aecb1eafac51fda042955bc691f4db1d5102 100644
--- a/docs/wipy_index.rst
+++ b/docs/wipy_index.rst
@@ -7,6 +7,7 @@ MicroPython documentation and references
     wipy/general.rst
     wipy/tutorial/index.rst
     library/index.rst
+    genrst/index.rst
     license.rst
     wipy_contents.rst