Rename memcpy() to memcpy_far() and add regular memcpy() code.
diff --git a/src/boot.c b/src/boot.c
index 1b5c3d8..5beca25 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -38,7 +38,7 @@
     if (type == 4 && far_description != 0) {
         char description[33];
         /* first 32 bytes are significant */
-        memcpy(MAKE_FARPTR(GET_SEG(SS), &description), far_description, 32);
+        memcpy_far(MAKE_FARPTR(GET_SEG(SS), &description), far_description, 32);
         /* terminate string */
         description[32] = 0;
         printf(" [%.s]", description);
diff --git a/src/pcibios.c b/src/pcibios.c
index 3823c2e..4e29a43 100644
--- a/src/pcibios.c
+++ b/src/pcibios.c
@@ -132,7 +132,7 @@
     u16 destseg = GET_FARVAR(regs->es, *(u16*)(regs->di+4));
 
     // Memcpy pir table slots to dest buffer.
-    memcpy(MAKE_FARPTR(destseg, d), pirtable_far, pirsize);
+    memcpy_far(MAKE_FARPTR(destseg, d), pirtable_far, pirsize);
 
     // XXX - bochs bios sets bx to (1 << 9) | (1 << 11)
     regs->bx = GET_FARPTR(pirtable_far->exclusive_irqs);
diff --git a/src/system.c b/src/system.c
index 2e19efa..04cd6ac 100644
--- a/src/system.c
+++ b/src/system.c
@@ -276,7 +276,7 @@
     }
 
     struct e820entry *e = &((struct e820entry *)GET_EBDA(e820_loc))[regs->bx];
-    memcpy(MAKE_FARPTR(regs->es, regs->di), e, sizeof(*e));
+    memcpy_far(MAKE_FARPTR(regs->es, regs->di), e, sizeof(*e));
     if (regs->bx == count-1)
         regs->ebx = 0;
     else
diff --git a/src/util.c b/src/util.c
index 60d9d09..b85a1a5 100644
--- a/src/util.c
+++ b/src/util.c
@@ -53,7 +53,7 @@
 }
 
 void *
-memcpy(void *far_d1, const void *far_s1, size_t len)
+memcpy_far(void *far_d1, const void *far_s1, size_t len)
 {
     u8 *d = far_d1;
     u8 *s = (u8*)far_s1;
@@ -68,6 +68,15 @@
 }
 
 void *
+memcpy(void *d1, const void *s1, size_t len)
+{
+    u8 *d = (u8*)d1, *s = (u8*)s1;
+    while (len--)
+        *d++ = *s++;
+    return d1;
+}
+
+void *
 memmove(void *d, const void *s, size_t len)
 {
     if (s >= d)
diff --git a/src/util.h b/src/util.h
index a9642b9..bff1fc2 100644
--- a/src/util.h
+++ b/src/util.h
@@ -60,6 +60,7 @@
 
 void *memset(void *s, int c, size_t n);
 void *memcpy(void *d1, const void *s1, size_t len);
+void *memcpy_far(void *far_d1, const void *far_s1, size_t len);
 void *memmove(void *d, const void *s, size_t len);
 
 struct bregs;