66 lines
1001 B
C
66 lines
1001 B
C
#include "io.h"
|
|
#include "serial.h"
|
|
|
|
int init_serial()
|
|
{
|
|
outb(PORT+1, 0x00);
|
|
outb(PORT+3, 0x80);
|
|
outb(PORT+0, 0x03);
|
|
outb(PORT+1, 0x00);
|
|
|
|
outb(PORT+3, 0x03);
|
|
outb(PORT+2, 0xC7);
|
|
outb(PORT+4, 0x0B);
|
|
outb(PORT+4, 0x1E);
|
|
outb(PORT+0, 0xAE);
|
|
|
|
if (inb(PORT+0) != 0xAE) {
|
|
return 1;
|
|
}
|
|
|
|
outb(PORT+4, 0x0F);
|
|
return 0;
|
|
}
|
|
|
|
int is_transmit_empty()
|
|
{
|
|
return inb(PORT+5) & 0x20;
|
|
}
|
|
|
|
void write_serial(const char a)
|
|
{
|
|
while (is_transmit_empty() == 0);
|
|
outb(PORT, a);
|
|
}
|
|
|
|
void serial_puts(const char* str)
|
|
{
|
|
unsigned int i = 0;
|
|
write_serial(str[0]); // Transmit first byte 2 times
|
|
while (*str++)
|
|
{
|
|
write_serial(str[i]);
|
|
}
|
|
}
|
|
|
|
void log(const char* str, const int errlevel)
|
|
{
|
|
switch (errlevel)
|
|
{
|
|
case 0:
|
|
serial_puts("[ERROR] ");
|
|
break;
|
|
case 1:
|
|
serial_puts("[WARNING] ");
|
|
break;
|
|
case 2:
|
|
serial_puts("[INFO] ");
|
|
break;
|
|
case 3:
|
|
serial_puts("[DEBUG] ");
|
|
break;
|
|
}
|
|
serial_puts(str);
|
|
serial_puts("\n");
|
|
}
|