Initial commit

This commit is contained in:
mintsuki 2019-05-15 06:08:56 +02:00
parent cd38e24806
commit 276928841a
5 changed files with 120 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
/**/*.o
/**/*.bin
/**/*.img
/bochsout.txt
/bx_enh_dbg.ini

40
Makefile Normal file
View File

@ -0,0 +1,40 @@
CC = gcc
LD = ld
CFLAGS = -O2 -pipe -Wall -Wextra
INTERNAL_CFLAGS = \
-m16 \
-ffreestanding \
-nostdlib \
-masm=intel \
-fno-pic \
-mno-sse \
-mno-sse2 \
-ffreestanding \
-fno-stack-protector \
-I.
LDFLAGS =
INTERNAL_LDFLAGS = \
-m elf_i386 \
-nostdlib \
-Tlinker.ld
.PHONY: all clean
C_FILES := $(shell find ./ -type f -name '*.c')
OBJ := $(C_FILES:.c=.o)
all: qloader2.bin
qloader2.bin: $(OBJ)
$(LD) $(LDFLAGS) $(INTERNAL_LDFLAGS) $(OBJ) -o $@
%.o: %.c
$(CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@
clean:
rm -f $(OBJ)

17
bochsrc Normal file
View File

@ -0,0 +1,17 @@
cpu: count=2, reset_on_triple_fault=0
display_library: x, options="gui_debug"
megs: 512
clock: sync=realtime, time0=local
ata0-master: type=disk, path="qloader2.img", mode=flat
boot: c
log: ./bochsout.txt
mouse: enabled=0
magic_break: enabled=1

21
linker.ld Normal file
View File

@ -0,0 +1,21 @@
OUTPUT_FORMAT(binary)
ENTRY(main)
SECTIONS
{
. = 0x7c00;
.text : {
bootsect_begin = .;
KEEP(*(.early_boot*))
KEEP(*(.text*))
}
.data : {
KEEP(*(.data*))
KEEP(*(.bss*))
. += 510 - (. - bootsect_begin);
SHORT(0xaa55)
}
}

37
main.c Normal file
View File

@ -0,0 +1,37 @@
asm (
".section .early_boot\n\t"
"cli\n\t"
"jmp 0x0:1f\n\t"
"1:\n\t"
"xor ax, ax\n\t"
"mov ds, ax\n\t"
"mov es, ax\n\t"
"mov fs, ax\n\t"
"mov gs, ax\n\t"
"mov ss, ax\n\t"
"mov sp, 0x7c00\n\t"
"xor dh, dh\n\t"
"push edx\n\t"
"call main\n\t"
);
void bios_print(const char *str) {
asm (
"1:\n\t"
"lodsb\n\t"
"test al, al\n\t"
"jz 2f\n\t"
"int 0x10\n\t"
"jmp 1b\n\t"
"2:\n\t"
:
: "a"(0x0e00), "S"(str)
: "cc", "memory"
);
}
void main(int boot_drive) {
// TODO
bios_print("hello world from qloader2");
for (;;);
}