Refactoring assembly entry point

This commit is contained in:
Marco Cetica 2021-02-03 15:59:42 +01:00
parent dc3803491e
commit 1b207add8c
61 changed files with 4782 additions and 4779 deletions

View File

@ -1,5 +1,6 @@
OBJS = kernel_loader.asm.o ports.asm.o \ OBJS = main.asm.o ports.asm.o \
gdt.asm.o idt.asm.o interrupts.asm.o gdt.asm.o idt.asm.o \
interrupts.asm.o header.asm.o
ASM = nasm ASM = nasm
ASMFLAGS = -f elf32 ASMFLAGS = -f elf32

View File

@ -1,10 +1,10 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ; ; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ; ; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ; ; (c) 2019-2021 ;
; Released under GPLv3 ; ; Released under GPLv3 ;
; https://github.com/ice-bit/iceOS ; ; https://github.com/ice-bit/vulcanos ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
global gdt_flush ; for drivers/gdt.c global gdt_flush ; for drivers/gdt.c
section .text section .text

19
kernel/cpu/header.asm Normal file
View File

@ -0,0 +1,19 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ;
; Released under GPLv3 ;
; https://github.com/ice-bit/vulcanos ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section .multiboot_header
header_s:
dd 0xE85250D6 ; Magic number for multiboot
dd 0 ; Protected mode flag
dd header_e - header_s ; Header length
dd 0x100000000 - (0xE85250D6 + 0 + (header_e - header_s)) ; Checksum
; Other flags
dw 0 ; Type
dw 0 ; Flags
dw 0 ; Size
header_e:

View File

@ -1,10 +1,10 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ; ; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ; ; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ; ; (c) 2019-2021 ;
; Released under GPLv3 ; ; Released under GPLv3 ;
; https://github.com/ice-bit/iceOS ; ; https://github.com/ice-bit/vulcanos ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
global idt_flush ; for drivers/idt.c global idt_flush ; for drivers/idt.c
section .text section .text

View File

@ -1,10 +1,10 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ; ; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ; ; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ; ; (c) 2019-2021 ;
; Released under GPLv3 ; ; Released under GPLv3 ;
; https://github.com/ice-bit/iceOS ; ; https://github.com/ice-bit/vulcanos ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
extern isr_handler ; Defined in drivers/isr.h extern isr_handler ; Defined in drivers/isr.h
extern irq_handler ; Defined in drivers/isr.h extern irq_handler ; Defined in drivers/isr.h

View File

@ -1,43 +0,0 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ;
; Released under GPLv3 ;
; https://github.com/ice-bit/iceOS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[BITS 32] ; We should be in protected mode
section .multiboot
head_s:
dd 0xE85250D6 ; Multiboot header magic number
dd 0 ; Protected mode flag
dd head_e - head_s ; Header length
dd 0x100000000 - (0xE85250D6 + 0 + (head_e - head_s)) ; Checksum of above
; Other flags
dw 0 ; type
dw 0 ; flags
dd 0 ; size
head_e:
GLOBAL kernel_loader
EXTERN kernel_main
section .text
kernel_loader:
mov esp, kernel_stack + KERNEL_STACK_SZ ; Define stack pointer
push eax ; Set multiboot header
call kernel_main ; Jump into kernel's main function
.loop:
jmp .loop ; If the kernel returns, go into an infinite loop.
; This will prevent the CPU to run non-kernel instructions
; from the memory
KERNEL_STACK_SZ equ 4096 ; Stack size(4KiB)
section .bss
align 4
kernel_stack:
resb KERNEL_STACK_SZ ; Reserve 4 KiB

27
kernel/cpu/main.asm Normal file
View File

@ -0,0 +1,27 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ;
; Released under GPLv3 ;
; https://github.com/ice-bit/vulcanos ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GLOBAL kernel_loader
EXTERN kernel_main
[BITS 32] ; Ensure we are in protected mode
section .text
kernel_loader:
mov esp, kernel_stack + KERNEL_STACK_SZ ; Define stack pointer
push eax ; Set multiboot header register
call kernel_main ; Call kernel's main function
.loop:
jmp .loop ; If the kernel returns, go into an endless loop
; This will prevent the CPU to execure any non-kernel
; instructions.
KERNEL_STACK_SZ equ 4096 ; Stack size(4KiB)
section .bss
align 4
kernel_stack:
resb KERNEL_STACK_SZ ; Reserver 4KiB for kernel's stack

View File

@ -1,10 +1,10 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vulcanOS Kernel ; ; vulcanOS Kernel ;
; Developed by Marco 'icebit' Cetica ; ; Developed by Marco 'icebit' Cetica ;
; (c) 2019-2021 ; ; (c) 2019-2021 ;
; Released under GPLv3 ; ; Released under GPLv3 ;
; https://github.com/ice-bit/iceOS ; ; https://github.com/ice-bit/vulcanos ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
global outb ; Output from port global outb ; Output from port
global inb ; Input to port global inb ; Input to port

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef CPUID_H #ifndef CPUID_H
#define CPUID_H #define CPUID_H

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef FS_H #ifndef FS_H
#define FS_H #define FS_H

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _GDT_H_ #ifndef _GDT_H_
#define _GDT_H_ #define _GDT_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _IDT_H_ #ifndef _IDT_H_
#define _IDT_H_ #define _IDT_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef INITRD_H #ifndef INITRD_H
#define INITRD_H #define INITRD_H
/* Ramdisk is a file system that is loaded along with the kernel /* Ramdisk is a file system that is loaded along with the kernel

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _ISR_H_ #ifndef _ISR_H_
#define _ISR_H_ #define _ISR_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _KEYBOARD_H_ #ifndef _KEYBOARD_H_
#define _KEYBOARD_H_ #define _KEYBOARD_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _PORTS_H #ifndef _PORTS_H
#define _PORTS_H #define _PORTS_H

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _TIMER_H_ #ifndef _TIMER_H_
#define _TIMER_H_ #define _TIMER_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _TTY_H_ #ifndef _TTY_H_
#define _TTY_H_ #define _TTY_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#include "drivers/tty.h" #include "drivers/tty.h"
#include "drivers/gdt.h" #include "drivers/gdt.h"
#include "drivers/idt.h" #include "drivers/idt.h"

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef PANIC_H #ifndef PANIC_H
#define PANIC_H #define PANIC_H

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _STDIO_H_ #ifndef _STDIO_H_
#define _STDIO_H_ #define _STDIO_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef _STRING_H_ #ifndef _STRING_H_
#define _STRING_H_ #define _STRING_H_

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
/* Get time reading the RTC(real time clock) CMOS on the motherboard */ /* Get time reading the RTC(real time clock) CMOS on the motherboard */
#ifndef TIME_H #ifndef TIME_H
#define TIME_H #define TIME_H

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
/*** Heap implementation from James Molloy's tutorial: /*** Heap implementation from James Molloy's tutorial:
http://www.jamesmolloy.co.uk/tutorial_html/7.-The%20Heap.html ***/ http://www.jamesmolloy.co.uk/tutorial_html/7.-The%20Heap.html ***/

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef ORDERED_ARRAY_H #ifndef ORDERED_ARRAY_H
#define ORDERED_ARRAY_H #define ORDERED_ARRAY_H

View File

@ -1,10 +1,10 @@
/************************************** /*****************************************
* VulcanOS Kernel * * VulcanOS Kernel *
* Developed by Marco 'icebit' Cetica * * Developed by Marco 'icebit' Cetica *
* (c) 2019-2021 * * (c) 2019-2021 *
* Released under GPLv3 * * Released under GPLv3 *
* https://github.com/ice-bit/iceOS * * https://github.com/ice-bit/vulcanos *
***************************************/ *****************************************/
#ifndef PAGING_H #ifndef PAGING_H
#define PAGING_H #define PAGING_H

11
link.ld
View File

@ -1,17 +1,17 @@
ENTRY(kernel_loader) ENTRY(kernel_loader)
SECTIONS SECTIONS
{ {
. = 1M;
.text 0x100000 : .boot :
{ {
code = .; _code = .; __code = .; KEEP(*(.multiboot_header))
*(.text)
. = ALIGN(4096); . = ALIGN(4096);
} }
.data : .text :
{ {
data = .; _data = .; __data = .;
*(.data) *(.data)
*(.rodata) *(.rodata)
. = ALIGN(4096); . = ALIGN(4096);
@ -19,7 +19,6 @@ SECTIONS
.bss : .bss :
{ {
bss = .; _bss = .; __bss = .;
*(.bss) *(.bss)
. = ALIGN(4096); . = ALIGN(4096);
} }