basic os stuff
This commit is contained in:
95
Makefile
Normal file
95
Makefile
Normal file
@@ -0,0 +1,95 @@
|
||||
# -------------------------------------------------------
|
||||
# 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
|
||||
Reference in New Issue
Block a user