Initial import

This commit is contained in:
Jozef Nagy 2025-01-20 21:52:47 +01:00
commit 94aad4b8e1
Signed by untrusted user who does not match committer: crz
GPG key ID: 459A4811CEAC7068
77 changed files with 4414 additions and 0 deletions

135
kernel/Makefile Normal file
View file

@ -0,0 +1,135 @@
###################################################################################
## Module Name: Makefile ##
## Project: AurixOS ##
## ##
## Copyright (c) 2024 Jozef Nagy ##
## ##
## This source is subject to the MIT License. ##
## See License.txt in the root of this repository. ##
## All other rights reserved. ##
## ##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ##
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ##
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ##
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ##
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ##
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ##
## SOFTWARE. ##
###################################################################################
.DEFAULT_GOAL := all
INCLUDE_DIRS := include
BUILD_DIR ?= build
SYSROOT_DIR ?= sysroot
KERNEL_FILE := $(BUILD_DIR)/axkrnl
INCLUDE_DIRS := include \
include/arch/$(ARCH) \
include/platform/$(PLATFORM)
DEFINES := __$(ARCH)__
KERNEL_AS := $(ARCH)-elf-gcc
KERNEL_CC := $(ARCH)-elf-gcc
KERNEL_LD := $(ARCH)-elf-ld
KERNEL_OBJCOPY := $(ARCH)-elf-objcopy
KERNEL_ASFLAGS := $(foreach d, $(INCLUDE_DIRS), -I$d) \
$(foreach d, $(DEFINES), -D$d)
KERNEL_CFLAGS := $(foreach d, $(INCLUDE_DIRS), -I$d) \
$(foreach d, $(DEFINES), -D$d) \
-D__$(ARCH) \
-std=c99 \
-ffreestanding \
-fno-omit-frame-pointer \
-fno-stack-protector \
-fno-stack-check \
-fno-pie \
-MMD \
-MP
KERNEL_LDFLAGS := -Tarch/$(ARCH)/linker.ld \
-nostdlib \
-static \
-no-pie
ifeq ($(DEBUG),yes)
KERNEL_CFLAGS += -g3
else
KERNEL_CFLAGS += -O2
endif
KERNEL_CFILES := $(shell find . -type d \( -name arch -o -name platform \) -prune -name '*.c')
KERNEL_ASFILES := $(shell find . -type d \( -name arch -o -name platform \) -prune -name '*.S')
KERNEL_ARCH_CFILES := $(shell find arch/$(ARCH) -name '*.c')
KERNEL_ARCH_ASFILES := $(shell find arch/$(ARCH) -name '*.S')
KERNEL_PLATFORM_CFILES := $(shell find platform/$(PLATFORM) -name '*.c')
KERNEL_PLATFORM_ASFILES := $(shell find platform/$(PLATFORM) -name '*.S')
KERNEL_OBJ := $(KERNEL_CFILES:%.c=$(BUILD_DIR)/kernel/%.c.o) \
$(KERNEL_ASFILES:%.S=$(BUILD_DIR)/kernel/%.S.o) \
$(KERNEL_ARCH_CFILES:arch/$(ARCH)/%.c=$(BUILD_DIR)/kernel/arch/%.c.o) \
$(KERNEL_ARCH_ASFILES:arch/$(ARCH)/%.S=$(BUILD_DIR)/kernel/arch/%.S.o) \
$(KERNEL_PLATFORM_CFILES:platform/$(PLATFORM)/%.c=$(BUILD_DIR)/kernel/platform/%.c.o) \
$(KERNEL_PLATFORM_ASFILES:platform/$(PLATFORM)/%.S=$(BUILD_DIR)/kernel/platform/%.S.o)
-include arch/$(ARCH)/config.mk
-include $(wildcard $(BUILD_DIR)/kernel/*.d)
$(KERNEL_FILE): $(KERNEL_OBJ)
@mkdir -p $(@D)
@printf " LD\t$(notdir $@)\n"
@$(KERNEL_LD) $(KERNEL_LDFLAGS) $^ -o $@
ifeq ($(DEBUG),yes)
@printf " OBJCOPY axkrnl.sym\n"
@$(KERNEL_OBJCOPY) --only-keep-debug $@ $(BUILD_DIR)/axkrnl.sym
@$(KERNEL_OBJCOPY) --strip-debug --strip-unneeded $@
endif
$(BUILD_DIR)/kernel/%.c.o: %.c
@mkdir -p $(@D)
@printf " CC\t$<\n"
@$(KERNEL_CC) $(KERNEL_CFLAGS) -c $< -o $@
$(BUILD_DIR)/kernel/arch/%.c.o: arch/$(ARCH)/%.c
@mkdir -p $(@D)
@printf " CC\t$<\n"
@$(KERNEL_CC) $(KERNEL_CFLAGS) -c $< -o $@
$(BUILD_DIR)/kernel/arch/%.S.o: arch/$(ARCH)/%.S
@mkdir -p $(@D)
@printf " AS\t$<\n"
@$(KERNEL_AS) $(KERNEL_ASFLAGS) -c $< -o $@
$(BUILD_DIR)/kernel/platform/%.c.o: platform/$(PLATFORM)/%.c
@mkdir -p $(@D)
@printf " CC\t$<\n"
@$(KERNEL_CC) $(KERNEL_CFLAGS) -c $< -o $@
$(BUILD_DIR)/kernel/platform/%.S.o: platform/$(PLATFORM)/%.S
@mkdir -p $(@D)
@printf " AS\t$<\n"
@$(KERNEL_AS) $(KERNEL_ASFLAGS) -c $< -o $@
.PHONY: all
all: kernel
.PHONY: kernel
kernel: $(KERNEL_FILE)
.PHONY: install
install: install-kernel
.PHONY: install-kernel
install-kernel: kernel
@mkdir -p $(SYSROOT_DIR)/System
@printf " INSTALL\t/System/$(notdir $(KERNEL_FILE))\n"
@cp $(KERNEL_FILE) $(SYSROOT_DIR)/System
.PHONY: clean
clean:
@rm -rf $(BUILD_DIR) $(SYSROOT_DIR)

View file

@ -0,0 +1,23 @@
###################################################################################
## Module Name: config.mk ##
## Project: AurixOS ##
## ##
## Copyright (c) 2024-2025 Jozef Nagy ##
## ##
## This source is subject to the MIT License. ##
## See License.txt in the root of this repository. ##
## All other rights reserved. ##
## ##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ##
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ##
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ##
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ##
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ##
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ##
## SOFTWARE. ##
###################################################################################
KERNEL_CFLAGS +=
KERNEL_LDFLAGS += -nostdlib \
--no-dynamic-linker

View file

@ -0,0 +1,60 @@
/*********************************************************************************/
/* Module Name: linker.ld */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
/* This is just a copied linker from the bootloader. */
/* Not cool. But it's good enough... for now. */
SECTIONS
{
. = 0x80000;
.text : {
*(.text .text.*)
*(.gnu.linkonce.t*)
}
.rodata : {
*(.rodata .rodata.*)
*(.gnu.linkonce.r*)
}
PROVIDE(_data = .);
.data : {
*(.data .data.*)
*(.gnu.linkonce.d*)
}
.bss (NOLOAD) : {
. = ALIGN(16);
__bss_start = .;
*(.bss .bss.*)
*(COMMON)
__bss_end = .;
}
_end = .;
/DISCARD/ : {
*(.comment)
*(.gnu*)
*(.note*)
*(.eh_frame*)
}
}
/*__bss_size = (__bss_end - __bss_start) >> 3;*/

View file

@ -0,0 +1,33 @@
###################################################################################
## Module Name: config.mk ##
## Project: AurixOS ##
## ##
## Copyright (c) 2024-2025 Jozef Nagy ##
## ##
## This source is subject to the MIT License. ##
## See License.txt in the root of this repository. ##
## All other rights reserved. ##
## ##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ##
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ##
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ##
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ##
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ##
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ##
## SOFTWARE. ##
###################################################################################
KERNEL_CFLAGS += -m64 \
-march=x86-64 \
-mabi=sysv \
-mno-red-zone \
-mno-80387 \
-mno-mmx \
-mno-sse \
-mno-sse2
KERNEL_LDFLAGS += -nostdlib \
--no-dynamic-linker \
-z max-page-size=0x1000 \
-z text \
-melf_x86_64

View file

@ -0,0 +1,78 @@
/*********************************************************************************/
/* Module Name: linker.ld */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
OUTPUT_FORMAT(elf64-x86-64)
OUTPUT_ARCH(i386:x86-64)
ENTRY(_start)
PHDRS
{
text PT_LOAD FLAGS((1 << 0) | (1 << 2));
rodata PT_LOAD FLAGS(1 << 2);
data PT_LOAD FLAGS((1 << 1) | (1 << 2));
dynamic PT_DYNAMIC FLAGS((1 << 1) | (1 << 2));
}
SECTIONS
{
/* AxBoot remaps this to 0xffffffff80000000 for us */
. = 0x1000;
_linker_start_text = .;
.text : {
*(.text .text.*)
} :text
_linker_end_text = .;
. = ALIGN(CONSTANT(MAXPAGESIZE));
_linker_start_rodata = .;
.rodata : {
*(.rodata .rodata.*)
} :rodata
_linker_end_rodata = .;
. = ALIGN(CONSTANT(MAXPAGESIZE));
_linker_start_data = .;
.data : {
*(.data .data.*)
} :data
.dynamic : {
*(.dynamic)
} :data :dynamic
.bss : {
*(COMMON)
*(.bss .bss.*)
} :data
_linker_end_data = .;
/DISCARD/ : {
*(.eh_frame)
*(.note .note.*)
}
}

View file

@ -0,0 +1,23 @@
/*********************************************************************************/
/* Module Name: cpu.h */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#ifndef _ARCH_CPU_CPU_H
#define _ARCH_CPU_CPU_H
#endif /* _ARCH_CPU_CPU_H */

View file

@ -0,0 +1,116 @@
/*********************************************************************************/
/* Module Name: cpu.h */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#ifndef _ARCH_CPU_CPU_H
#define _ARCH_CPU_CPU_H
#include <stdint.h>
////
// Utilities
///
static inline void cpu_disable_interrupts(void)
{
__asm__ volatile("cli" ::: "memory");
}
static inline uint64_t read_cr0()
{
uint64_t val;
__asm__ volatile("mov %%cr0, %0"
: "=r"(val));
return val;
}
static inline uint64_t read_cr2()
{
uint64_t val;
__asm__ volatile("mov %%cr2, %0"
: "=r"(val));
return val;
}
static inline uint64_t read_cr3()
{
uint64_t val;
__asm__ volatile("mov %%cr3, %0"
: "=r"(val));
return val;
}
static inline uint64_t read_cr4()
{
uint64_t val;
__asm__ volatile("mov %%cr4, %0"
: "=r"(val));
return val;
}
static inline uint64_t read_cr8()
{
uint64_t val;
__asm__ volatile("mov %%cr8, %0"
: "=r"(val));
return val;
}
static inline void write_cr0(uint64_t val)
{
__asm__ volatile("mov %0, %%cr0"
:: "r"(val));
}
static inline void write_cr2(uint64_t val)
{
__asm__ volatile("mov %0, %%cr2"
:: "r"(val));
}
static inline void write_cr3(uint64_t val)
{
__asm__ volatile("mov %0, %%cr3"
:: "r"(val) : "memory");
}
static inline void write_cr4(uint64_t val)
{
__asm__ volatile("mov %0, %%cr4"
:: "r"(val));
}
static inline void write_cr8(uint64_t val)
{
__asm__ volatile("mov %0, %%cr8"
:: "r"(val));
}
static inline uint8_t inb(uint16_t port)
{
uint8_t ret;
__asm__ volatile("inb %w1, %b0" : "=a"(ret) : "Nd"(port) : "memory");
return ret;
}
static inline void outb(uint16_t port, uint8_t val)
{
__asm__ volatile("outb %b0, %w1" :: "a"(val), "Nd"(port) : "memory");
}
#endif /* _ARCH_CPU_CPU_H */

View file

@ -0,0 +1,30 @@
/*********************************************************************************/
/* Module Name: uart.h */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#ifndef _DEBUG_SERIAL_H
#define _DEBUG_SERIAL_H
#include <platform/debug/uart.h>
void serial_init(void);
void serial_send(char c);
void serial_sendstr(char *s);
#endif /* _DEBUG_SERIAL_H */

View file

@ -0,0 +1,32 @@
/*********************************************************************************/
/* Module Name: serial.h */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#ifndef _MACHINE_DEBUG_SERIAL_H
#define _MACHINE_DEBUG_SERIAL_H
#define COM1 0x3f8
#define COM2 0x2f8
#define COM3 0x3e8
#define COM4 0x2e8
#define COM5 0x5f8
#define COM6 0x4f8
#define COM7 0x5e8
#define COM8 0x4e8
#endif /* _MACHINE_DEBUG_SERIAL_H */

View file

@ -0,0 +1,23 @@
/*********************************************************************************/
/* Module Name: serial.h */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#ifndef _MACHINE_DEBUG_SERIAL_H
#define _MACHINE_DEBUG_SERIAL_H
#endif /* _MACHINE_DEBUG_SERIAL_H */

34
kernel/kinit.c Normal file
View file

@ -0,0 +1,34 @@
/*********************************************************************************/
/* Module Name: kinit.c */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#include <debug/uart.h>
void _start(void)
{
serial_init();
serial_sendstr("Hello from AurixOS!\n");
for (;;) {
#ifdef __x86_64__
__asm__ volatile("cli;hlt");
#elif __aarch64__
__asm__ volatile("wfe");
#endif
}
}

View file

@ -0,0 +1,63 @@
/*********************************************************************************/
/* Module Name: uart.c */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#include <arch/cpu/cpu.h>
#include <debug/uart.h>
#include <stdint.h>
static uint8_t is_tx_empty(void)
{
return inb(COM1 + 5) & 0x20;
}
static uint8_t received(void)
{
return inb(COM1 + 5) & 1;
}
void serial_init(void)
{
// TODO: Initialize all COM ports
outb(COM1 + 1, 0x00);
outb(COM1 + 3, 0x80);
outb(COM1, 0x03);
outb(COM1 + 1, 0x00);
outb(COM1 + 3, 0x03);
outb(COM1 + 2, 0xC7);
outb(COM1 + 4, 0x0B);
outb(COM1 + 4, 0x0F);
}
void serial_send(char c)
{
while (is_tx_empty() == 0);
outb(COM1, c);
}
void serial_sendstr(char *s)
{
while (*s != '\0') {
if (*s == '\r') {
s++;
continue;
}
serial_send(*s++);
}
}

View file

@ -0,0 +1,34 @@
/*********************************************************************************/
/* Module Name: uart.c */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
#include <debug/uart.h>
#include <stdint.h>
void serial_init(void)
{
}
void serial_send(char c)
{
}
void serial_sendstr(char *s)
{
}