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/asm-offsets.c b/src/asm-offsets.c
new file mode 100644
index 0000000..8f17c04
--- /dev/null
+++ b/src/asm-offsets.c
@@ -0,0 +1,21 @@
+// Generate assembler offsets.
+
+#include "gen-defs.h"
+#include "bregs.h"
+
+/* workaround for a warning with -Wmissing-prototypes */
+void foo(void) VISIBLE16;
+
+void foo(void)
+{
+    OFFSET(BREGS_es, bregs, es);
+    OFFSET(BREGS_ds, bregs, ds);
+    OFFSET(BREGS_eax, bregs, eax);
+    OFFSET(BREGS_ebx, bregs, ebx);
+    OFFSET(BREGS_ecx, bregs, ecx);
+    OFFSET(BREGS_edx, bregs, edx);
+    OFFSET(BREGS_esi, bregs, esi);
+    OFFSET(BREGS_edi, bregs, edi);
+    OFFSET(BREGS_flags, bregs, flags);
+    OFFSET(BREGS_ip, bregs, ip);
+}