diff --git a/Worksheet2/iso/boot/grub/makefile b/Worksheet2/iso/boot/grub/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6787354431b211312068b3439ece0e6d7704aa9a
--- /dev/null
+++ b/Worksheet2/iso/boot/grub/makefile
@@ -0,0 +1,54 @@
+NASM = nasm
+LD = ld
+MKISO = genisoimage
+QEMU = qemu-system-i386
+
+ISO_DIR = iso
+GRUB_DIR = $(ISO_DIR)/boot/grub
+SRC_DIR = source
+BUILD_DIR = build
+
+
+LOADER_SRC = $(SRC_DIR)/loader.asm
+LINKER_SCRIPT = $(SRC_DIR)/link.ld
+KERNEL = $(BUILD_DIR)/kernel.elf
+ISO = os.iso
+GRUB_CFG = $(GRUB_DIR)/menu.lst
+STAGE2_ELTORITO = /opt/os/stage2_eltorito
+
+NASM_FLAGS = -f elf
+LD_FLAGS = -T $(LINKER_SCRIPT) -melf_i386
+
+all: $(ISO)
+
+$(BUILD_DIR):
+	mkdir -p $(BUILD_DIR)
+
+$(KERNEL): $(LOADER_SRC) $(LINKER_SCRIPT) | $(BUILD_DIR)
+	$(NASM) $(NASM_FLAGS) -o $(BUILD_DIR)/loader.o $(LOADER_SRC)
+	$(LD) $(LD_FLAGS) $(BUILD_DIR)/loader.o -o $(KERNEL)
+
+$(GRUB_CFG): | $(GRUB_DIR)
+	cp $(STAGE2_ELTORITO) $(GRUB_DIR)/
+	echo "default=0\ntimeout=0\ntitle os\nkernel /boot/kernel.elf" > $(GRUB_CFG)
+
+$(GRUB_DIR):
+	mkdir -p $(GRUB_DIR)
+
+$(ISO): $(KERNEL) $(GRUB_CFG)
+	cp $(KERNEL) $(ISO_DIR)/boot/
+	$(MKISO) -R \
+		-b boot/grub/stage2_eltorito \
+		-no-emul-boot \
+		-boot-load-size 4 \
+		-A os \
+		-input-charset utf8 \
+		-quiet \
+		-boot-info-table \
+		-o $(ISO) $(ISO_DIR)
+
+run: $(ISO)
+	$(QEMU) -nographic -boot d -cdrom $(ISO) -m 32 -d cpu -D logQ.txt
+
+clean:
+	rm -rf $(BUILD_DIR) $(ISO) $(ISO_DIR)/boot/kernel.elf logQ.txt