Brett Weiland f90c075d50 renamed: kernel/include/acpi.h -> include/acpi.h
renamed:    kernel/include/libc.h -> include/libc.h
	renamed:    kernel/include/paging.h -> include/paging.h
	renamed:    kernel/include/printf.h -> include/printf.h
	renamed:    kernel/include/serial.h -> include/serial.h
	renamed:    kernel/include/video.h -> include/video.h
	new file:   indigo_os
	renamed:    kernel/libs/acpi.c -> kernel/acpi.c
	renamed:    kernel/libs/drivers/serial.c -> kernel/drivers/serial.c
	renamed:    kernel/libs/drivers/video.c -> kernel/drivers/video.c
	renamed:    kernel/libs/libc.c -> kernel/libc.c
	renamed:    kernel/libs/page.c -> kernel/page.c
	renamed:    kernel/libs/printf.c -> kernel/printf.c
	renamed:    kernel/libs/printf.h -> kernel/printf.h
	modified:   makefile
2021-03-24 15:42:20 -05:00

40 lines
824 B
C

#include <stdint.h>
#include <serial.h>
static inline void outb(uint16_t port, uint8_t value) {
asm volatile(
"outb %0, %1" :: "a"(value), "Nd"(port)
);
}
static inline uint8_t inb(uint16_t port) {
uint8_t ret;
asm volatile(
"inb %1, %0" : "=a"(ret) : "Nd"(port)
);
return(ret);
}
int init_serial(uint16_t port) {
outb(port + 1, 0x00);
outb(port + 3, 0x80);
outb(port + 0, 0x06);
outb(port + 1, 0x00);
outb(port + 3, 0x03);
outb(port + 2, 0xc7);
outb(port + 4, 0x0b);
outb(port + 4, 0x1e);
outb(port + 0, 0xae); // test char
if(inb(port + 0) != 0xae)
return 1;
outb(port + 4, 0x0f); // dissable interupts
return 0;
}
void _putchar_serial(uint16_t port, char msg) {
while(!(inb(port + 5) & 0x20)); //wait for transmit to be done
outb(port, msg);
}