Skip to content

Commit f940de5

Browse files
authored
Add files via upload
1 parent 8eb8917 commit f940de5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+4744
-0
lines changed

Makefile

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
include build_scripts/config.mk
2+
3+
.PHONY: all floppy_image kernel bootloader clean always tools_fat
4+
5+
all: floppy_image tools_fat
6+
7+
include build_scripts/toolchain.mk
8+
9+
10+
# Floppy image
11+
12+
floppy_image: $(BUILD_DIR)/main_floppy.img
13+
14+
$(BUILD_DIR)/main_floppy.img: bootloader kernel
15+
@dd if=/dev/zero of=$@ bs=512 count=2880 >/dev/null
16+
@mkfs.fat -F 12 -n "NBOS" $@ >/dev/null
17+
@dd if=$(BUILD_DIR)/stage1.bin of=$@ conv=notrunc >/dev/null
18+
@mcopy -i $@ $(BUILD_DIR)/stage2.bin "::stage2.bin"
19+
@mcopy -i $@ $(BUILD_DIR)/kernel.bin "::kernel.bin"
20+
@mmd -i $@ "::mydir"
21+
@echo "--> Created: " $@
22+
23+
24+
# Bootloader
25+
26+
bootloader: stage1 stage2
27+
28+
stage1: $(BUILD_DIR)/stage1.bin
29+
30+
$(BUILD_DIR)/stage1.bin: always
31+
@$(MAKE) -C src/bootloader/stage1 BUILD_DIR=$(abspath $(BUILD_DIR))
32+
33+
stage2: $(BUILD_DIR)/stage2.bin
34+
35+
$(BUILD_DIR)/stage2.bin: always
36+
@$(MAKE) -C src/bootloader/stage2 BUILD_DIR=$(abspath $(BUILD_DIR))
37+
38+
39+
# Kernel
40+
41+
kernel: $(BUILD_DIR)/kernel.bin
42+
43+
$(BUILD_DIR)/kernel.bin: always
44+
@$(MAKE) -C src/kernel BUILD_DIR=$(abspath $(BUILD_DIR))
45+
46+
47+
# Tools
48+
49+
tools_fat: $(BUILD_DIR)/tools/fat
50+
$(BUILD_DIR)/tools/fat: always tools/fat/fat.c
51+
@mkdir -p $(BUILD_DIR)/tools
52+
@$(MAKE) -C tools/fat BUILD_DIR=$(abspath $(BUILD_DIR))
53+
54+
55+
# Always
56+
57+
always:
58+
@mkdir -p $(BUILD_DIR)
59+
60+
61+
# Clean
62+
63+
clean:
64+
@$(MAKE) -C src/bootloader/stage1 BUILD_DIR=$(abspath $(BUILD_DIR)) clean
65+
@$(MAKE) -C src/bootloader/stage2 BUILD_DIR=$(abspath $(BUILD_DIR)) clean
66+
@$(MAKE) -C src/kernel BUILD_DIR=$(abspath $(BUILD_DIR)) clean
67+
@rm -rf $(BUILD_DIR)/*

bochs_config

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
megs: 128
2+
romimage: file=/home/tibi/Downloads/bochs-2.7.pre1/bios/BIOS-bochs-latest
3+
vgaromimage: file=/home/tibi/Downloads/bochs-2.7.pre1/bios/VGABIOS-elpin-2.40
4+
floppya: 1_44=build/main_floppy.img, status=inserted
5+
boot: floppy
6+
mouse: enabled=0
7+
display_library: wx, options="gui_debug"

build_scripts/config.mk

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
export CFLAGS = -std=c99 -g
2+
export ASMFLAGS =
3+
export CC = gcc
4+
export CXX = g++
5+
export LD = gcc
6+
export ASM = nasm
7+
export LINKFLAGS =
8+
export LIBS =
9+
10+
export TARGET = i686-elf
11+
export TARGET_ASM = nasm
12+
export TARGET_ASMFLAGS =
13+
export TARGET_CFLAGS = -std=c99 -g #-O2
14+
export TARGET_CC = $(TARGET)-gcc
15+
export TARGET_CXX = $(TARGET)-g++
16+
export TARGET_LD = $(TARGET)-gcc
17+
export TARGET_LINKFLAGS =
18+
export TARGET_LIBS =
19+
20+
export BUILD_DIR = $(abspath build)
21+
22+
BINUTILS_VERSION = 2.39
23+
BINUTILS_URL = https://ftp.gnu.org/gnu/binutils/binutils-$(BINUTILS_VERSION).tar.xz
24+
25+
GCC_VERSION = 11.2.0
26+
GCC_URL = https://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.xz

build_scripts/generate_isrs.sh

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/bash
2+
3+
# exit on error
4+
set -e
5+
6+
# print usage
7+
if [ $# -le 1 ]; then
8+
echo "Usage: generate_isrs.sh <isrs_gen.c> <isrs_gen.inc>"
9+
exit 1
10+
fi
11+
12+
# vars
13+
ISRS_GEN_C=$1
14+
ISRS_GEN_ASM=$2
15+
16+
ISRS_WITH_ERROR_CODE="8 10 11 12 13 14 17 21"
17+
18+
19+
#
20+
# Generate C file
21+
#
22+
echo "// !!! THIS FILE IS AUTOGENERATED !!!" > $ISRS_GEN_C
23+
echo "#include \"idt.h\"" >> $ISRS_GEN_C
24+
echo "#include \"gdt.h\"" >> $ISRS_GEN_C
25+
echo "" >> $ISRS_GEN_C
26+
27+
for i in $(seq 0 255); do
28+
echo "void __attribute((cdecl)) i686_ISR${i}();" >> $ISRS_GEN_C
29+
done
30+
31+
echo "" >> $ISRS_GEN_C
32+
echo "void i686_ISR_InitializeGates()" >> $ISRS_GEN_C
33+
echo "{" >> $ISRS_GEN_C
34+
35+
for i in $(seq 0 255); do
36+
echo " i686_IDT_SetGate(${i}, i686_ISR${i}, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT);" >> $ISRS_GEN_C
37+
done
38+
39+
40+
echo "}" >> $ISRS_GEN_C
41+
42+
#
43+
# Generate assembly file
44+
#
45+
echo "; !!! THIS FILE IS AUTOGENERATED !!!" > $ISRS_GEN_ASM
46+
47+
for i in $(seq 0 255); do
48+
if echo "$ISRS_WITH_ERROR_CODE" | grep -q "\b${i}\b"; then
49+
echo "ISR_ERRORCODE ${i}" >> $ISRS_GEN_ASM
50+
else
51+
echo "ISR_NOERRORCODE ${i}" >> $ISRS_GEN_ASM
52+
fi
53+
done

build_scripts/toolchain.mk

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
2+
TOOLCHAIN_PREFIX = $(abspath toolchain/$(TARGET))
3+
export PATH := $(TOOLCHAIN_PREFIX)/bin:$(PATH)
4+
5+
toolchain: toolchain_binutils toolchain_gcc
6+
7+
BINUTILS_SRC = toolchain/binutils-$(BINUTILS_VERSION)
8+
BINUTILS_BUILD = toolchain/binutils-build-$(BINUTILS_VERSION)
9+
10+
toolchain_binutils: $(TOOLCHAIN_PREFIX)/bin/i686-elf-ld
11+
12+
$(TOOLCHAIN_PREFIX)/bin/i686-elf-ld: $(BINUTILS_SRC).tar.xz
13+
cd toolchain && tar -xf binutils-$(BINUTILS_VERSION).tar.xz
14+
mkdir $(BINUTILS_BUILD)
15+
cd $(BINUTILS_BUILD) && CFLAGS= ASMFLAGS= CC= CXX= LD= ASM= LINKFLAGS= LIBS= ../binutils-$(BINUTILS_VERSION)/configure \
16+
--prefix="$(TOOLCHAIN_PREFIX)" \
17+
--target=$(TARGET) \
18+
--with-sysroot \
19+
--disable-nls \
20+
--disable-werror
21+
$(MAKE) -j8 -C $(BINUTILS_BUILD)
22+
$(MAKE) -C $(BINUTILS_BUILD) install
23+
24+
$(BINUTILS_SRC).tar.xz:
25+
mkdir -p toolchain
26+
cd toolchain && wget $(BINUTILS_URL)
27+
28+
29+
GCC_SRC = toolchain/gcc-$(GCC_VERSION)
30+
GCC_BUILD = toolchain/gcc-build-$(GCC_VERSION)
31+
32+
toolchain_gcc: $(TOOLCHAIN_PREFIX)/bin/i686-elf-gcc
33+
34+
$(TOOLCHAIN_PREFIX)/bin/i686-elf-gcc: $(TOOLCHAIN_PREFIX)/bin/i686-elf-ld $(GCC_SRC).tar.xz
35+
cd toolchain && tar -xf gcc-$(GCC_VERSION).tar.xz
36+
mkdir $(GCC_BUILD)
37+
cd $(GCC_BUILD) && CFLAGS= ASMFLAGS= CC= CXX= LD= ASM= LINKFLAGS= LIBS= ../gcc-$(GCC_VERSION)/configure \
38+
--prefix="$(TOOLCHAIN_PREFIX)" \
39+
--target=$(TARGET) \
40+
--disable-nls \
41+
--enable-languages=c,c++ \
42+
--without-headers
43+
$(MAKE) -j8 -C $(GCC_BUILD) all-gcc all-target-libgcc
44+
$(MAKE) -C $(GCC_BUILD) install-gcc install-target-libgcc
45+
46+
$(GCC_SRC).tar.xz:
47+
mkdir -p toolchain
48+
cd toolchain && wget $(GCC_URL)
49+
50+
#
51+
# Clean
52+
#
53+
clean-toolchain:
54+
rm -rf $(GCC_BUILD) $(GCC_SRC) $(BINUTILS_BUILD) $(BINUTILS_SRC)
55+
56+
clean-toolchain-all:
57+
rm -rf toolchain/*
58+
59+
.PHONY: toolchain toolchain_binutils toolchain_gcc clean-toolchain clean-toolchain-all

run.sh

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qemu-system-i386 -fda build/main_floppy.img

src/bootloader/stage1/Makefile

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
BUILD_DIR?=build/
2+
ASM?=nasm
3+
4+
.PHONY: all clean
5+
6+
all: stage1
7+
8+
stage1: $(BUILD_DIR)/stage1.bin
9+
10+
$(BUILD_DIR)/stage1.bin: boot.asm
11+
@$(ASM) $< -f bin -o $@
12+
@echo "--> Created stage1.bin"
13+
14+
clean:
15+
@rm -f $(BUILD_DIR)/stage1.bin

0 commit comments

Comments
 (0)