Add tool for generating assembler offset definition file.

Replace __call16 hardcoded offsets with auto generated struct offsets.
Also, load/save %ds register in __call16().
diff --git a/src/gen-defs.h b/src/gen-defs.h
new file mode 100644
index 0000000..dabf64c
--- /dev/null
+++ b/src/gen-defs.h
@@ -0,0 +1,19 @@
+// Tool for building defintions accessible from assembler code.  This
+// is based on code from the Linux Kernel.
+#ifndef __GEN_DEFS_H
+#define __GEN_DEFS_H
+
+
+#define DEFINE(sym, val) \
+    asm volatile("\n->" #sym " %0 " #val : : "i" (val))
+
+#define BLANK() \
+    asm volatile("\n->" : : )
+
+#define OFFSET(sym, str, mem) \
+    DEFINE(sym, offsetof(struct str, mem))
+
+#define COMMENT(x) \
+    asm volatile("\n->#" x)
+
+#endif // gen-defs.h