diff --git a/Makefile b/Makefile
index 4149ef7..39a63bd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,4 @@
-obj16-y = e820.o int10.o int15.o
-obj-y = $(obj16-y) entry.o main.o string.o printf.o cstart.o fw_cfg.o
+obj-y = code16.o entry.o main.o string.o printf.o cstart.o fw_cfg.o
 obj-y += linuxboot.o
 
 all-y = bios.bin
@@ -14,7 +13,6 @@
 BIOS_CFLAGS += -fno-stack-protector -fno-delete-null-pointer-checks
 BIOS_CFLAGS += -ffreestanding
 BIOS_CFLAGS += -Iinclude
-$(obj16-y): BIOS_CFLAGS += -include code16gcc.h
 
 dummy := $(shell mkdir -p .deps)
 autodepend-flags = -MMD -MF .deps/cc-$(patsubst %/,%,$(dir $*))-$(notdir $*).d
diff --git a/code16.c b/code16.c
new file mode 100644
index 0000000..d8861de
--- /dev/null
+++ b/code16.c
@@ -0,0 +1,116 @@
+asm(".code16gcc");
+#include "bios.h"
+#include "segment.h"
+#include "ioport.h"
+#include "processor-flags.h"
+#include "e820.h"
+
+static inline void set_fs(uint16_t seg)
+{
+	asm volatile("movw %0,%%fs" : : "rm" (seg));
+}
+
+static inline uint8_t rdfs8(unsigned long addr)
+{
+	uint8_t v;
+
+	asm volatile("addr32 movb %%fs:%1,%0" : "=q" (v) : "m" (*(uint8_t *)addr));
+
+	return v;
+}
+
+static inline uint32_t rdfs32(unsigned long addr)
+{
+	uint32_t v;
+
+	asm volatile("addr32 movl %%fs:%1,%0" : "=q" (v) : "m" (*(uint32_t *)addr));
+
+	return v;
+}
+
+struct e820map e820;
+
+bioscall void e820_query_map(struct biosregs *regs)
+{
+	uint32_t map_size;
+	uint16_t fs_seg;
+	uint32_t ndx;
+
+	fs_seg		= flat_to_seg16((uintptr_t) &e820);
+	set_fs(fs_seg);
+
+	ndx		= regs->ebx;
+
+	map_size	= rdfs32(flat_to_off16((uintptr_t) &e820.nr_map));
+
+	if (ndx < map_size) {
+		uint32_t start;
+		unsigned int i;
+		uint8_t *p;
+
+		start	= flat_to_off16((uintptr_t)&e820.map[ndx]);
+
+		p	= (void *) regs->edi;
+
+		for (i = 0; i < sizeof(struct e820entry); i++)
+			*p++	= rdfs8(start + i);
+	}
+
+	regs->eax	= SMAP;
+	regs->ecx	= sizeof(struct e820entry);
+	regs->ebx	= ++ndx;
+
+	/* Clear CF to indicate success.  */
+	regs->eflags	&= ~X86_EFLAGS_CF;
+
+	if (ndx >= map_size)
+		regs->ebx	= 0;	/* end of map */
+}
+
+bioscall void int15_handler(struct biosregs *regs)
+{
+	switch (regs->eax) {
+	case 0xe820:
+		e820_query_map(regs);
+		break;
+	default:
+		/* Set CF to indicate failure.  */
+		regs->eflags	|= X86_EFLAGS_CF;
+		break;
+	}
+}
+/*
+ * It's probably much more useful to make this print to the serial
+ * line rather than print to a non-displayed VGA memory
+ */
+static inline void int10_putchar(struct biosregs *args)
+{
+	uint8_t al = args->eax & 0xFF;
+
+	outb(0x3f8, al);
+}
+
+#define VBE_STATUS_OK		0x004F
+#define VBE_STATUS_FAIL		0x014F
+
+static void int10_vesa(struct biosregs *args)
+{
+	args->eax = VBE_STATUS_FAIL;
+}
+
+bioscall void int10_handler(struct biosregs *args)
+{
+	uint8_t ah;
+
+	ah = (args->eax & 0xff00) >> 8;
+
+	switch (ah) {
+	case 0x0e:
+		int10_putchar(args);
+		break;
+	case 0x4f:
+		int10_vesa(args);
+		break;
+	}
+
+}
diff --git a/code16gcc.h b/code16gcc.h
deleted file mode 100644
index a4feb62..0000000
--- a/code16gcc.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * code16gcc.h
- *
- * This file is -include'd when compiling 16-bit C code.
- * Note: this asm() needs to be emitted before gcc emits any code.
- * Depending on gcc version, this requires -fno-unit-at-a-time or
- * -fno-toplevel-reorder.
- *
- * Hopefully gcc will eventually have a real -m16 option so we can
- * drop this hack long term.
- */
-
-
-asm(".code16gcc");
diff --git a/e820.c b/e820.c
deleted file mode 100644
index 6271353..0000000
--- a/e820.c
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "bios.h"
-#include "segment.h"
-
-#include "processor-flags.h"
-#include "e820.h"
-
-static inline void set_fs(uint16_t seg)
-{
-	asm volatile("movw %0,%%fs" : : "rm" (seg));
-}
-
-static inline uint8_t rdfs8(unsigned long addr)
-{
-	uint8_t v;
-
-	asm volatile("addr32 movb %%fs:%1,%0" : "=q" (v) : "m" (*(uint8_t *)addr));
-
-	return v;
-}
-
-static inline uint32_t rdfs32(unsigned long addr)
-{
-	uint32_t v;
-
-	asm volatile("addr32 movl %%fs:%1,%0" : "=q" (v) : "m" (*(uint32_t *)addr));
-
-	return v;
-}
-
-struct e820map e820;
-
-bioscall void e820_query_map(struct biosregs *regs)
-{
-	uint32_t map_size;
-	uint16_t fs_seg;
-	uint32_t ndx;
-
-	fs_seg		= flat_to_seg16((uintptr_t) &e820);
-	set_fs(fs_seg);
-
-	ndx		= regs->ebx;
-
-	map_size	= rdfs32(flat_to_off16((uintptr_t) &e820.nr_map));
-
-	if (ndx < map_size) {
-		uint32_t start;
-		unsigned int i;
-		uint8_t *p;
-
-		start	= flat_to_off16((uintptr_t)&e820.map[ndx]);
-
-		p	= (void *) regs->edi;
-
-		for (i = 0; i < sizeof(struct e820entry); i++)
-			*p++	= rdfs8(start + i);
-	}
-
-	regs->eax	= SMAP;
-	regs->ecx	= sizeof(struct e820entry);
-	regs->ebx	= ++ndx;
-
-	/* Clear CF to indicate success.  */
-	regs->eflags	&= ~X86_EFLAGS_CF;
-
-	if (ndx >= map_size)
-		regs->ebx	= 0;	/* end of map */
-}
diff --git a/int10.c b/int10.c
deleted file mode 100644
index 0e506cc..0000000
--- a/int10.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "bios.h"
-#include "segment.h"
-#include "ioport.h"
-
-/*
- * It's probably much more useful to make this print to the serial
- * line rather than print to a non-displayed VGA memory
- */
-static inline void int10_putchar(struct biosregs *args)
-{
-	uint8_t al = args->eax & 0xFF;
-
-	outb(0x3f8, al);
-}
-
-#define VBE_STATUS_OK		0x004F
-#define VBE_STATUS_FAIL		0x014F
-
-static void int10_vesa(struct biosregs *args)
-{
-	args->eax = VBE_STATUS_FAIL;
-}
-
-bioscall void int10_handler(struct biosregs *args)
-{
-	uint8_t ah;
-
-	ah = (args->eax & 0xff00) >> 8;
-
-	switch (ah) {
-	case 0x0e:
-		int10_putchar(args);
-		break;
-	case 0x4f:
-		int10_vesa(args);
-		break;
-	}
-
-}
diff --git a/int15.c b/int15.c
deleted file mode 100644
index d8ff820..0000000
--- a/int15.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "bios.h"
-
-#include "processor-flags.h"
-
-bioscall void int15_handler(struct biosregs *regs)
-{
-	switch (regs->eax) {
-	case 0xe820:
-		e820_query_map(regs);
-		break;
-	default:
-		/* Set CF to indicate failure.  */
-		regs->eflags	|= X86_EFLAGS_CF;
-		break;
-	}
-}
