diff --git a/Makefile b/Makefile
index 7bf3f7a..184a633 100644
--- a/Makefile
+++ b/Makefile
@@ -12,10 +12,6 @@ QEMUOPTS = -drive file=bin/disk.img,index=0,media=disk,format=raw \
 		   -m 4G \
 		   -name kern
 
-ifeq ($(UNAME), Linux)
-QEMUOPTS += -enable-kvm -display sdl
-endif
-
 qemu: bin/disk.img
 	$(QEMU) $(QEMUOPTS)
 
@@ -40,12 +36,16 @@ bin/boot.bin: build
 	cd bin && \
 		objcopy -S -O binary -j .text boot boot.bin
 
+bin/kernel.bin: build
+	cd bin && \
+		objcopy -S -O binary kernel kernel.bin
+
 bin/user.img: build
 	cd bin && \
 		./mkblob init idle prog* shell
 
-bin/disk.img: build bin/boot.bin bin/user.img
+bin/disk.img: bin/kernel.bin bin/boot.bin bin/user.img
 	cd bin && \
 		./BuildImage -d usb -o disk.img -b boot.bin \
-		kernel 0x10000 user.img 0x30000
+		kernel.bin 0x10000 user.img 0x30000
 
diff --git a/build.zig b/build.zig
index 269c992..a1b4369 100644
--- a/build.zig
+++ b/build.zig
@@ -29,6 +29,7 @@ const ld_flags = &[_][]const u8{
 const boot_src = &[_][]const u8{"boot/boot.S"};
 
 const kernel_src = &[_][]const u8{
+    "kernel/startup.S", // must be first
     "kernel/cio.c",
     "kernel/clock.c",
     "kernel/isrs.S",
@@ -37,7 +38,6 @@ const kernel_src = &[_][]const u8{
     "kernel/list.c",
     "kernel/procs.c",
     "kernel/sio.c",
-    "kernel/startup.S",
     "kernel/support.c",
     "kernel/syscalls.c",
     "kernel/user.c",