Adds a simple program which starts at 1 GB.
This commit is contained in:
parent
455a6db8b5
commit
cc61fbecb9
4 changed files with 102 additions and 0 deletions
61
prototypes/program0/Makefile
Normal file
61
prototypes/program0/Makefile
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
|
||||||
|
AS=gcc
|
||||||
|
CC=gcc
|
||||||
|
CXX=g++
|
||||||
|
LD=ld
|
||||||
|
|
||||||
|
FLAGS = -mno-sse -DIDT_DISPATCH=$(IDT_DISPATCH) -ffreestanding -m32 -Werror -Wall -iquote include -iquote lists -O3 -g
|
||||||
|
ASFLAGS = $(FLAGS)
|
||||||
|
CFLAGS = $(FLAGS)
|
||||||
|
CXXFLAGS = $(FLAGS) -std=c++14 -fno-rtti -fno-exceptions -fno-leading-underscore -fno-use-cxa-atexit -nostdlib -fno-builtin
|
||||||
|
|
||||||
|
ARTIFACT = program0.bin
|
||||||
|
|
||||||
|
SRCS = $(shell find -regextype egrep -regex '.*/.*\.(cpp|S|c)')
|
||||||
|
OBJS = $(addsuffix .o, $(notdir $(basename $(SRCS))))
|
||||||
|
|
||||||
|
LIBGCC = $(shell gcc -m32 -print-libgcc-file-name)
|
||||||
|
|
||||||
|
all: $(ARTIFACT)
|
||||||
|
|
||||||
|
$(ARTIFACT): $(OBJS)
|
||||||
|
$(LD) -melf_i386 -Tlinker.ld -o $(ARTIFACT) $(addprefix obj/, $^) $(LIBGCC)
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o obj/$@ $<
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(ASFLAGS) -c -o obj/$@ $<
|
||||||
|
|
||||||
|
%.o: %.S
|
||||||
|
$(AS) $(CFLAGS) -c -o obj/$@ $<
|
||||||
|
|
||||||
|
%.o: src/%.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o obj/$@ $<
|
||||||
|
|
||||||
|
%.o: src/%.c
|
||||||
|
$(CC) $(ASFLAGS) -c -o obj/$@ $<
|
||||||
|
|
||||||
|
%.o: src/%.S
|
||||||
|
$(AS) $(CFLAGS) -c -o obj/$@ $<
|
||||||
|
|
||||||
|
# Linux/Multiboot boot specific:
|
||||||
|
# -kernel bzImage use 'bzImage' as kernel image
|
||||||
|
# -append cmdline use 'cmdline' as kernel command line
|
||||||
|
# -initrd file use 'file' as initial ram disk
|
||||||
|
# -dtb file use 'file' as device tree image
|
||||||
|
|
||||||
|
|
||||||
|
run:
|
||||||
|
qemu-system-i386 \
|
||||||
|
-kernel kernel-base.ker \
|
||||||
|
-m 64 \
|
||||||
|
-d cpu_reset,int \
|
||||||
|
-no-reboot \
|
||||||
|
-no-shutdown \
|
||||||
|
-serial stdio
|
||||||
|
|
||||||
|
bnr: kernel-base.ker run
|
||||||
|
|
||||||
|
deploy: kernel-base.ker
|
||||||
|
cp $(ARTIFACT) /srv/tftp/$(ARTIFACT)
|
30
prototypes/program0/linker.ld
Normal file
30
prototypes/program0/linker.ld
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
ENTRY(_start)
|
||||||
|
OUTPUT_FORMAT(binary)
|
||||||
|
OUTPUT_ARCH(i386:i386)
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x40000000;
|
||||||
|
.text : {
|
||||||
|
*(.text)
|
||||||
|
}
|
||||||
|
.data ALIGN(4096) : {
|
||||||
|
start_ctors = .;
|
||||||
|
KEEP(*( .init_array ));
|
||||||
|
KEEP(*(SORT_BY_INIT_PRIORITY( .init_array.* )));
|
||||||
|
end_ctors = .;
|
||||||
|
|
||||||
|
start_dtors = .;
|
||||||
|
KEEP(*( .fini_array ));
|
||||||
|
end_dtors = .;
|
||||||
|
|
||||||
|
*(.data)
|
||||||
|
}
|
||||||
|
.rodata ALIGN(4096) : {
|
||||||
|
*(.rodata)
|
||||||
|
}
|
||||||
|
.bss ALIGN(4096) : {
|
||||||
|
*(.bss)
|
||||||
|
}
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
11
prototypes/program0/program.c
Normal file
11
prototypes/program0/program.c
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
uint16_t *video = (uint16_t*)0xB8000;
|
||||||
|
|
||||||
|
void _start()
|
||||||
|
{
|
||||||
|
for(int i = 0; i < 256; i++) {
|
||||||
|
video[i] = 0xF000 | i;
|
||||||
|
}
|
||||||
|
while(1);
|
||||||
|
}
|
BIN
prototypes/program0/program0.bin
Normal file
BIN
prototypes/program0/program0.bin
Normal file
Binary file not shown.
Loading…
Reference in a new issue