The usual (and some new modules).
diff --git a/Lib/dos-8x3/exceptio.py b/Lib/dos-8x3/exceptio.py
new file mode 100644
index 0000000..c7bbbf4
--- /dev/null
+++ b/Lib/dos-8x3/exceptio.py
@@ -0,0 +1,155 @@
+"""Class based built-in exception hierarchy.
+
+This is a new feature whereby all the standard built-in exceptions,
+traditionally string objects, are replaced with classes.  This gives
+Python's exception handling mechanism a more object-oriented feel.
+
+Most existing code should continue to work with class based
+exceptions.  Some tricky uses of IOError may break, but the most
+common uses should work.
+
+To disable this feature, start the Python executable with the -X option.
+
+Here is a rundown of the class hierarchy.  You can change this by
+editing this file, but it isn't recommended.  The classes with a `*'
+are new with this feature.  They are defined as tuples containing the
+derived exceptions when string-based exceptions are used.
+
+Exception(*)
+ |
+ +-- StandardError(*)
+      |
+      +-- SystemExit
+      +-- KeyboardInterrupt
+      +-- ImportError
+      +-- IOError
+      +-- EOFError
+      +-- RuntimeError
+      +-- NameError
+      +-- AttributeError
+      +-- SyntaxError
+      +-- TypeError
+      +-- AssertionError
+      +-- LookupError(*)
+      |    |
+      |    +-- IndexError
+      |    +-- KeyError
+      |
+      +-- ArithmeticError(*)
+      |    |
+      |    +-- OverflowError
+      |    +-- ZeroDivisionError
+      |    +-- FloatingPointError
+      |
+      +-- ValueError
+      +-- SystemError
+      +-- MemoryError
+"""
+
+class Exception:
+    def __init__(self, *args):
+	self.args = args
+
+    def __str__(self):
+        if not self.args:
+            return ''
+	elif len(self.args) == 1:
+	    return str(self.args[0])
+	else:
+	    return str(self.args)
+
+    def __getitem__(self, i):
+	return self.args[i]
+
+class StandardError(Exception):
+    pass
+
+class SyntaxError(StandardError):
+    filename = lineno = offset = text = None
+    msg = ""
+    def __init__(self, *args):
+	self.args = args
+	if len(self.args) >= 1:
+	    self.msg = self.args[0]
+	if len(self.args) == 2:
+	    info = self.args[1]
+	    try:
+		self.filename, self.lineno, self.offset, self.text = info
+	    except:
+		pass
+    def __str__(self):
+        return str(self.msg)
+
+class IOError(StandardError):
+    def __init__(self, *args):
+	self.args = args
+        self.errno = None
+        self.strerror = None
+        if len(args) == 2:
+            # common case: PyErr_SetFromErrno()
+            self.errno = args[0]
+            self.strerror = args[1]
+
+class RuntimeError(StandardError):
+    pass
+
+class SystemError(StandardError):
+    pass
+
+class EOFError(StandardError):
+    pass
+
+class ImportError(StandardError):
+    pass
+
+class TypeError(StandardError):
+    pass
+
+class ValueError(StandardError):
+    pass
+
+class KeyboardInterrupt(StandardError):
+    pass
+
+class AssertionError(StandardError):
+    pass
+
+class ArithmeticError(StandardError):
+    pass
+
+class OverflowError(ArithmeticError):
+    pass
+
+class FloatingPointError(ArithmeticError):
+    pass
+
+class ZeroDivisionError(ArithmeticError):
+    pass
+
+class LookupError(StandardError):
+    pass
+
+class IndexError(LookupError):
+    pass
+
+class KeyError(LookupError):
+    pass
+
+class AttributeError(StandardError):
+    pass
+
+class NameError(StandardError):
+    pass
+
+class MemoryError(StandardError):
+    pass
+
+class SystemExit(Exception):
+    def __init__(self, *args):
+	self.args = args
+        if len(args) == 0:
+            self.code = None
+        elif len(args) == 1:
+            self.code = args[0]
+        else:
+            self.code = args