summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Maiolino <[email protected]>2025-07-17 19:20:28 +0200
committerCarlos Maiolino <[email protected]>2025-07-17 19:20:28 +0200
commitd8392002629bc97c05ca82961c7ab3439ed7248e (patch)
treedfd3f7dafd4e9efe10fe87b383c78430379580b9 /src
parent7bcc28cb58e99927e14636fe199c5345f6c63a6f (diff)
Start writing the kernel and add a linker script
Move the code unders [BITS 32] label to its own file to be loaded as a kernel by the boot loader. Add a linker script to link the bootloader and the kernel in a single binary file. Add a build script to make it easier to use the cross compiler Update the Makefile to build everything and pack it into the os.bin Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/boot/bootloader.asm29
-rw-r--r--src/kernel.asm27
-rw-r--r--src/linker.ld27
3 files changed, 58 insertions, 25 deletions
diff --git a/src/boot/bootloader.asm b/src/boot/bootloader.asm
index fc17af8..eb226a6 100644
--- a/src/boot/bootloader.asm
+++ b/src/boot/bootloader.asm
@@ -3,6 +3,7 @@ BITS 16
CODE_SEG equ gdt_code - gdt_start ; 0x8
DATA_SEG equ gdt_data - gdt_start ; 0x10
+
_start:
jmp short start
nop
@@ -34,7 +35,9 @@ step2:
mov eax, cr0
or eax, 0x1
mov cr0, eax
- jmp CODE_SEG:start_32
+
+ jmp $
+; jmp CODE_SEG:start_32
; GDT table description
gdt_start:
@@ -71,30 +74,6 @@ gdt_table:
dw gdt_end - gdt_start - 1
dd gdt_start
-
-[BITS 32]
-
-; No access to BIOS from now on....
-start_32:
- ; Set all segments to the same as the DATA_SEG
- mov ax, DATA_SEG
- mov ds, ax
- mov es, ax
- mov fs, ax
- mov gs, ax
- mov ss, ax
-
- ; Set the stack pointer and base pointer further in mem
- mov ebp, 0x00200000
- mov esp, ebp
-
- ; Enable A20 line
- in al, 0x92
- or al, 2
- out 0x92, al
-
- jmp $
-
; Fill in to the end and add bootloader signature
times 510 - ($ - $$) db 0
dw 0xAA55
diff --git a/src/kernel.asm b/src/kernel.asm
new file mode 100644
index 0000000..93afff7
--- /dev/null
+++ b/src/kernel.asm
@@ -0,0 +1,27 @@
+[BITS 32]
+global _start
+
+CODE_SEG equ 0x08
+DATA_SEG equ 0x10
+
+; No access to BIOS from now on....
+_start:
+ ; Set all segments to the same as the DATA_SEG
+ mov ax, DATA_SEG
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+ mov ss, ax
+
+ ; Set the stack pointer and base pointer further in mem
+ mov ebp, 0x00200000
+ mov esp, ebp
+
+ ; Enable A20 line
+ in al, 0x92
+ or al, 2
+ out 0x92, al
+
+ jmp $
+
diff --git a/src/linker.ld b/src/linker.ld
new file mode 100644
index 0000000..9ea0171
--- /dev/null
+++ b/src/linker.ld
@@ -0,0 +1,27 @@
+ENTRY(_start)
+OUTPUT_FORMAT(binary)
+
+SECTIONS {
+ . = 1M;
+
+ .text :
+ {
+ *(.text)
+ }
+
+ .rodata :
+ {
+ *(.rodata)
+ }
+
+ .data :
+ {
+ *(.data)
+ }
+
+ .bss :
+ {
+ *(COMMON)
+ *(.bss)
+ }
+}