43 lines
726 B
C
43 lines
726 B
C
#include <stdint.h>
|
|
#include "hal/hal.h"
|
|
#include "kprintf.h"
|
|
|
|
// https://wiki.osdev.org/Serial_Ports
|
|
|
|
#define PORT 0x3f8
|
|
|
|
void serial_init(void) {
|
|
io_out8(PORT+1, 0x00);
|
|
io_out8(PORT+3, 0x80);
|
|
io_out8(PORT+0, 0x03);
|
|
io_out8(PORT+1, 0x00);
|
|
io_out8(PORT+3, 0x03);
|
|
io_out8(PORT+2, 0xC7);
|
|
io_out8(PORT+4, 0x0B);
|
|
io_out8(PORT+4, 0x1E);
|
|
io_out8(PORT+0, 0xAE);
|
|
|
|
if (io_in8(PORT+0) != 0xAE) {
|
|
ERR("serial", "serial is faulty!\n");
|
|
return;
|
|
}
|
|
|
|
io_out8(PORT+4, 0x0F);
|
|
}
|
|
|
|
int serial_recvready(void) {
|
|
return io_in8(PORT+5) & 1;
|
|
}
|
|
|
|
uint8_t serial_recvb(void) {
|
|
return io_in8(PORT);
|
|
}
|
|
|
|
int serial_sendready(void) {
|
|
return io_in8(PORT+5) & 0x20;
|
|
}
|
|
|
|
void serial_sendb(uint8_t b) {
|
|
io_out8(PORT, b);
|
|
}
|