
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
40 lines
824 B
C
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);
|
|
}
|