Index: hatari/c/work/rom.lnk
===================================================================
--- hatari/c/work/rom.lnk	(revision a838f5bb780b13752bf21547dd7accced904d6e4)
+++ hatari/c/work/rom.lnk	(revision 698a58ad9c96f02db4ed4305ab72cb88c9ff6297)
@@ -1,1 +1,1 @@
-bios.o,prolog.a,romp.o,booter.o,timeint.o,libcio.a,vlib.a,iolib.a,libsm.a,lib700.a
+-a,100000,x,400,bios.o,prolog.a,romp.o,booter.o,timeint.o,libcio.a,vlib.a,iolib.a,libsm.a,lib700.a
Index: hatari/rem.py
===================================================================
--- hatari/rem.py	(revision a838f5bb780b13752bf21547dd7accced904d6e4)
+++ hatari/rem.py	(revision 698a58ad9c96f02db4ed4305ab72cb88c9ff6297)
@@ -295,21 +295,83 @@
     send_line("")
 
-def archive_one(arch, base):
-    print("Adding {}.o to {}".format(base, arch))
-    run_command("cp d:\\out\\{}.o {}.o".format(base, base))
-    run_command("ar68 r {} {}.o".format(arch, base))
-    run_command("rm {}.o".format(base))
-    send_line("")
-
-def archive(arch, mod):
-    print("Creating {}".format(arch))
+def store_file(file):
+    run_command("cp {} d:\\out\\{}".format(file, file))
+
+def fetch_file(file):
+    run_command("cp d:\\out\\{} {}".format(file, file))
+
+def remove_file(file):
+    run_command("rm {}".format(file))
+
+def store_archive(a_base):
+    store_file("{}.a".format(a_base))
+    store_file("{}.ndx".format(a_base))
+    send_line("")
+
+def fetch_archive(a_base):
+    fetch_file("{}.a".format(a_base))
+    fetch_file("{}.ndx".format(a_base))
+    send_line("")
+
+def remove_archive(a_base):
+    remove_file("{}.a".format(a_base))
+    remove_file("{}.ndx".format(a_base))
+    send_line("")
+
+def archive_one(a_base, base):
+    print("Adding {}.o to {}.a".format(base, a_base))
+    fetch_file("{}.o".format(base))
+    run_command("ar68 r {}.a {}.o".format(a_base, base))
+    remove_file("{}.o".format(base))
+    send_line("")
+
+def archive(a_base, mod):
+    print("Creating {}.a".format(a_base))
 
     for path in mod:
         (dir, file) = path.split("/")
         (base, ext) = file.split(".")
-        archive_one(arch, base)
-
-    run_command("cp {} d:\\out\\{}".format(arch, arch))
-    run_command("rm {}".format(arch))
+        archive_one(a_base, base)
+
+    run_command("doindex -w {}.a".format(a_base))
+    send_line("")
+
+    store_archive(a_base)
+    remove_archive(a_base)
+
+def link_rom():
+    print("Linking ROM")
+
+    fetch_archive("prolog")
+    fetch_archive("libcio")
+    fetch_archive("vlib")
+    fetch_archive("iolib")
+    fetch_archive("libsm")
+    fetch_archive("lib700")
+
+    fetch_file("bios.o")
+    fetch_file("romp.o")
+    fetch_file("booter.o")
+    fetch_file("timeint.o")
+    send_line("")
+
+    run_command("aln -w -l -c rom.lnk")
+    send_line("")
+
+    remove_archive("prolog")
+    remove_archive("libcio")
+    remove_archive("vlib")
+    remove_archive("iolib")
+    remove_archive("libsm")
+    remove_archive("lib700")
+
+    remove_file("bios.o")
+    remove_file("romp.o")
+    remove_file("booter.o")
+    remove_file("timeint.o")
+    send_line("")
+
+    store_file("bios.abs")
+    remove_file("bios.abs")
     send_line("")
 
@@ -343,8 +405,10 @@
             raise Exception("file {} with invalid extension {}".format(file, ext))
 
-archive("prolog.a", mod_prolog)
-archive("iolib.a", mod_iolib)
-archive("libcio.a", mod_libcio)
-archive("libsm.a", mod_libsm)
-archive("lib700.a", mod_lib700)
-archive("vlib.a", mod_vlib)
+archive("prolog", mod_prolog)
+archive("iolib", mod_iolib)
+archive("libcio", mod_libcio)
+archive("libsm", mod_libsm)
+archive("lib700", mod_lib700)
+archive("vlib", mod_vlib)
+
+link_rom()
