diff options
author | Marvin Borner | 2020-07-22 18:26:56 +0200 |
---|---|---|
committer | Marvin Borner | 2020-07-22 18:26:56 +0200 |
commit | 40cc5e32663cd0350b791b8e54825f564489343f (patch) | |
tree | 3561c2f379b98ac3c3005f9048bb5535a0d3952d /src | |
parent | c0a2074864e668b005eea8f50c6719bceb66bf20 (diff) |
Imported some things from master
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/cpu.c | 40 | ||||
-rw-r--r-- | src/drivers/serial.c | 32 | ||||
-rw-r--r-- | src/inc/boot.h | 16 | ||||
-rw-r--r-- | src/inc/cpu.h | 16 | ||||
-rw-r--r-- | src/inc/serial.h | 9 | ||||
-rw-r--r-- | src/inc/vesa.h | 7 | ||||
-rw-r--r-- | src/lib/inc/def.h (renamed from src/lib/def.h) | 2 | ||||
-rw-r--r-- | src/lib/inc/string.h | 10 | ||||
-rw-r--r-- | src/lib/string.c | 11 | ||||
-rw-r--r-- | src/main.c | 11 |
10 files changed, 147 insertions, 7 deletions
diff --git a/src/drivers/cpu.c b/src/drivers/cpu.c new file mode 100644 index 0000000..eb96562 --- /dev/null +++ b/src/drivers/cpu.c @@ -0,0 +1,40 @@ +// MIT License, Copyright (c) 2020 Marvin Borner +// This file is a wrapper around some CPU asm calls + +#include <def.h> + +u8 inb(u16 port) +{ + u8 value; + __asm__ volatile("inb %1, %0" : "=a"(value) : "Nd"(port)); + return value; +} + +u16 inw(u16 port) +{ + u16 value; + __asm__ volatile("inw %1, %0" : "=a"(value) : "Nd"(port)); + return value; +} + +u32 inl(u16 port) +{ + u32 value; + __asm__ volatile("inl %1, %0" : "=a"(value) : "Nd"(port)); + return value; +} + +void outb(u16 port, u8 data) +{ + __asm__ volatile("outb %0, %1" ::"a"(data), "Nd"(port)); +} + +void outw(u16 port, u16 data) +{ + __asm__ volatile("outw %0, %1" ::"a"(data), "Nd"(port)); +} + +void outl(u16 port, u32 data) +{ + __asm__ volatile("outl %0, %1" ::"a"(data), "Nd"(port)); +} diff --git a/src/drivers/serial.c b/src/drivers/serial.c new file mode 100644 index 0000000..1ef424a --- /dev/null +++ b/src/drivers/serial.c @@ -0,0 +1,32 @@ +#include <cpu.h> +#include <def.h> +#include <string.h> + +void serial_install() +{ + outb(0x3f8 + 1, 0x00); + outb(0x3f8 + 3, 0x80); + outb(0x3f8 + 0, 0x03); + outb(0x3f8 + 1, 0x00); + outb(0x3f8 + 3, 0x03); + outb(0x3f8 + 2, 0xC7); + outb(0x3f8 + 4, 0x0B); +} + +int is_transmit_empty() +{ + return inb(0x3f8 + 5) & 0x20; +} + +void serial_put(char ch) +{ + while (is_transmit_empty() == 0) + ; + outb(0x3f8, (u8)ch); +} + +void serial_print(const char *data) +{ + for (u32 i = 0; i < strlen(data); i++) + serial_put(data[i]); +} diff --git a/src/inc/boot.h b/src/inc/boot.h new file mode 100644 index 0000000..30ddfb7 --- /dev/null +++ b/src/inc/boot.h @@ -0,0 +1,16 @@ +// MIT License, Copyright (c) 2020 Marvin Borner +// This file specifies the structs passed by the bootloader + +#include <def.h> +#include <vesa.h> + +struct vid_info { + u32 mode; + struct vbe *info; +}; + +struct mem_info { + u64 base; + u64 len; + u64 type; +}; diff --git a/src/inc/cpu.h b/src/inc/cpu.h new file mode 100644 index 0000000..ad83896 --- /dev/null +++ b/src/inc/cpu.h @@ -0,0 +1,16 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#ifndef CPU_H +#define CPU_H + +#include <def.h> + +u8 inb(u16 port); +u16 inw(u16 port); +u32 inl(u16 port); + +void outb(u16 port, u8 data); +void outw(u16 port, u16 data); +void outl(u16 port, u32 data); + +#endif diff --git a/src/inc/serial.h b/src/inc/serial.h new file mode 100644 index 0000000..6511952 --- /dev/null +++ b/src/inc/serial.h @@ -0,0 +1,9 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#ifndef SERIAL_H +#define SERIAL_H + +void serial_install(); +void serial_print(const char *data); + +#endif diff --git a/src/inc/vesa.h b/src/inc/vesa.h index e2ac4e5..661ab16 100644 --- a/src/inc/vesa.h +++ b/src/inc/vesa.h @@ -1,3 +1,5 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + #ifndef VBE_H #define VBE_H @@ -41,11 +43,6 @@ struct vbe { u8 reserved1[206]; }; -struct vid_info { - u32 mode; - struct vbe *info; -}; - struct vbe *vbe; void vesa_clear(const u32 color[3]); diff --git a/src/lib/def.h b/src/lib/inc/def.h index dc3cc55..69b43e3 100644 --- a/src/lib/def.h +++ b/src/lib/inc/def.h @@ -1,3 +1,5 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + #ifndef DEF_H #define DEF_H diff --git a/src/lib/inc/string.h b/src/lib/inc/string.h new file mode 100644 index 0000000..c97fada --- /dev/null +++ b/src/lib/inc/string.h @@ -0,0 +1,10 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#ifndef STRING_H +#define STRING_H + +#include <def.h> + +u32 strlen(const char *str); + +#endif diff --git a/src/lib/string.c b/src/lib/string.c new file mode 100644 index 0000000..1b7a2b8 --- /dev/null +++ b/src/lib/string.c @@ -0,0 +1,11 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#include <def.h> + +u32 strlen(const char *str) +{ + u32 len = 0; + while (str[len]) + len++; + return len; +} @@ -1,14 +1,21 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#include <boot.h> #include <def.h> +#include <serial.h> #include <vesa.h> -void main(u32 *mem_info, struct vid_info *vid_info) +void main(struct mem_info *mem_info, struct vid_info *vid_info) { - mem_info++; // TODO: Use the mmap! + mem_info++; // TODO: Use the mmap (or remove)! vbe = vid_info->info; u32 terminal_background[3] = { 0x1d, 0x1f, 0x24 }; vesa_clear(terminal_background); + serial_install(); + serial_print("hello\n"); + while (1) { }; } |