basic os stuff

This commit is contained in:
CScatgirl
2026-03-02 17:37:33 -05:00
commit e6231d46f2
7 changed files with 342 additions and 0 deletions

95
Makefile Normal file
View 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