Initial commit
diff --git a/src/mem.c b/src/mem.c
new file mode 100644
index 0000000..21afb34
--- /dev/null
+++ b/src/mem.c
@@ -0,0 +1,37 @@
+#include "mem.h"
+
+
+void outb(ushort port, uchar val)
+{
+	asm volatile("outb %1, %0" : : "dN" (port), "a" (val));
+}
+
+uchar inb(ushort port)
+{
+	uchar ret;
+	asm volatile("inb %1, %0" : "=a" (ret) : "dN" (port));
+	return ret;
+}
+
+ushort inw(ushort port)
+{
+	ushort ret;
+	asm volatile("inw %1, %0" : "=a" (ret) : "dN" (port));
+	return ret;
+}
+
+void *memset(void *s, int c, size_t n)
+{
+	for (size_t i = 0; i < n; i++)
+	{
+		((uchar *)s)[i] = c;
+	}
+}
+
+void *memcpy(void *dest, const void *src, size_t n)
+{
+	for (size_t i = 0; i < n; i++)
+	{
+		((uchar *)dest)[i] = ((uchar *)src)[i];
+	}
+}