49 lines
730 B
C
49 lines
730 B
C
#include <stdint.h>
|
|
|
|
#define COM1_BASE_PORT 0x3F8
|
|
|
|
static inline uint8_t
|
|
inb(uint16_t port)
|
|
{
|
|
uint8_t data;
|
|
__asm__ ("inb %%dx, %%al" : "=a"(data) : "d"(port));
|
|
return data;
|
|
}
|
|
|
|
static inline void
|
|
outb(uint16_t port, uint8_t data)
|
|
{
|
|
__asm__ ("outb %%al, %%dx" :: "a"(data), "d"(port));
|
|
}
|
|
|
|
void serial_write_char(char c)
|
|
{
|
|
while (1) {
|
|
int line_status = inb(COM1_BASE_PORT + 5);
|
|
if (line_status & 0x20) {
|
|
break;
|
|
}
|
|
}
|
|
outb(COM1_BASE_PORT, c);
|
|
}
|
|
|
|
void serial_write(const char *msg)
|
|
{
|
|
for (const char *c = msg; *c; c++) {
|
|
outb(0xE9, *c);
|
|
//serial_write_char(*c);
|
|
}
|
|
}
|
|
|
|
extern void writechar();
|
|
|
|
void
|
|
main()
|
|
{
|
|
serial_write("init\r\n");
|
|
writechar();
|
|
serial_write("foo\r\n");
|
|
for (;;) {
|
|
//__asm__ ("hlt" :);
|
|
}
|
|
}
|