96 lines
2.6 KiB
Makefile
96 lines
2.6 KiB
Makefile
# -------------------------------------------------------
|
|
# Real Mode OS Makefile
|
|
# Tools: NASM, OpenWatcom (wcc/wlink), QEMU
|
|
# -------------------------------------------------------
|
|
|
|
# Tools
|
|
NASM := nasm
|
|
WCC := wcc
|
|
WLINK := wlink
|
|
QEMU := qemu-system-i386
|
|
DD := dd
|
|
|
|
# Flags
|
|
NASM_BIN := -f bin
|
|
NASM_OBJ := -f obj
|
|
WCC_FLAGS := -ms -0 -wx -s -ecc # small model, 8086, warnings, no stack check, cdecl
|
|
QEMU_FLAGS = -fda $(IMG) -monitor stdio
|
|
|
|
# Output names
|
|
BOOT_SRC := boot.asm
|
|
ENTRY_SRC := entry.asm
|
|
KMAIN_SRC := kmain.c
|
|
LINK_FILE := kernel.lnk
|
|
|
|
BOOT_BIN := bootloader.bin
|
|
ENTRY_OBJ := entry.obj
|
|
KMAIN_OBJ := kmain.obj
|
|
KERNEL_BIN := kernel.bin
|
|
IMG := floppy.img
|
|
|
|
BIOS_SRC := bios.asm
|
|
BIOS_OBJ := bios.obj
|
|
|
|
|
|
|
|
# -------------------------------------------------------
|
|
# Default target
|
|
# -------------------------------------------------------
|
|
.PHONY: all clean run debug
|
|
|
|
all: $(IMG)
|
|
|
|
# -------------------------------------------------------
|
|
# Bootloader — flat binary
|
|
# -------------------------------------------------------
|
|
$(BOOT_BIN): $(BOOT_SRC)
|
|
$(NASM) $(NASM_BIN) $< -o $@
|
|
|
|
# -------------------------------------------------------
|
|
# Kernel entry point — OMF object
|
|
# -------------------------------------------------------
|
|
$(ENTRY_OBJ): $(ENTRY_SRC)
|
|
$(NASM) $(NASM_OBJ) $< -o $@
|
|
|
|
# -------------------------------------------------------
|
|
# C kernel — OMF object via OpenWatcom
|
|
# -------------------------------------------------------
|
|
$(KMAIN_OBJ): $(KMAIN_SRC)
|
|
$(WCC) $< $(WCC_FLAGS) -fo=$@
|
|
|
|
$(BIOS_OBJ): $(BIOS_SRC)
|
|
$(NASM) $(NASM_OBJ) $< -o $@
|
|
|
|
$(KERNEL_BIN): $(ENTRY_OBJ) $(BIOS_OBJ) $(KMAIN_OBJ) $(LINK_FILE)
|
|
$(WLINK) @$(LINK_FILE)
|
|
|
|
# -------------------------------------------------------
|
|
# Floppy image
|
|
# -------------------------------------------------------
|
|
$(IMG): $(BOOT_BIN) $(KERNEL_BIN)
|
|
$(DD) if=/dev/zero of=$@ bs=512 count=2880
|
|
$(DD) if=$(BOOT_BIN) of=$@ conv=notrunc
|
|
$(DD) if=$(KERNEL_BIN) of=$@ seek=1 conv=notrunc bs=512
|
|
|
|
# -------------------------------------------------------
|
|
# Run in QEMU
|
|
# -------------------------------------------------------
|
|
run: $(IMG)
|
|
$(QEMU) $(QEMU_FLAGS)
|
|
|
|
# -------------------------------------------------------
|
|
# Debug — QEMU with GDB stub and interrupt logging
|
|
# -------------------------------------------------------
|
|
debug: $(IMG)
|
|
$(QEMU) $(QEMU_FLAGS) \
|
|
-s -S \
|
|
-d int \
|
|
-D qemu.log
|
|
|
|
# -------------------------------------------------------
|
|
# Clean
|
|
# -------------------------------------------------------
|
|
clean:
|
|
rm -f $(BOOT_BIN) $(ENTRY_OBJ) $(KMAIN_OBJ) $(KERNEL_BIN) $(IMG) $(BIOS_OBJ)\
|
|
kernel.map qemu.log
|