Sending data (debug printing) to serial port

This commit is contained in:
Thomas Lovén 2017-12-01 22:50:51 +01:00
parent d05ddfeab4
commit 034a870ac7
6 changed files with 58 additions and 4 deletions

View File

@ -1,11 +1,10 @@
#include <stddef.h> #include <stddef.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdint.h> #include <stdint.h>
#include <serial.h>
// TODO: Temporary declarations // TODO: Temporary declarations
void vga_write(char c); void vga_write(char c);
void serial_write(int port, char c);
#define PORT_COM1 0
void num2str(char *buf, uint64_t num, uint64_t base) void num2str(char *buf, uint64_t num, uint64_t base)

View File

@ -20,11 +20,11 @@ void vga_write(char c)
static int i = 0; static int i = 0;
vga_recv[i++] = c; vga_recv[i++] = c;
} }
void serial_write(int port, char c) void serial_write(uint16_t port, uint8_t c)
{ {
(void)port; (void)port;
static int i = 0; static int i = 0;
serial_recv[i++] = c; serial_recv[i++] = (char)c;
} }
TEST(putch_sends_character_to_vga) TEST(putch_sends_character_to_vga)

View File

@ -1,4 +1,6 @@
#include <memory.h> #include <memory.h>
#include <serial.h>
#include <debug.h>
void clear_screen() void clear_screen()
{ {
@ -17,10 +19,20 @@ void print_string(char *str)
} }
} }
void vga_write(char c)
{
// TODO: DUMMY
(void)c;
}
void kmain() void kmain()
{ {
clear_screen(); clear_screen();
print_string("Hello from c, world!"); print_string("Hello from c, world!");
serial_init(PORT_COM1);
debug_printf("Hello from debug printing function!\n");
debug_printf("A number:%d\n", 12345);
for(;;); for(;;);
} }

View File

@ -0,0 +1,19 @@
#include <serial.h>
#include <ports.h>
void serial_init(uint16_t port)
{
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);
}
void serial_write(uint16_t port, uint8_t c)
{
while(!(inb(port + 5)&0x20));
outb(port, c);
}

View File

@ -0,0 +1,17 @@
#pragma once
#include <stdint.h>
static __inline void _outb(uint16_t port, uint8_t value)
{
asm volatile("outb %1, %0" : : "dN" (port), "a" (value));
}
static __inline uint8_t _inb(uint16_t port)
{
uint8_t ret;
asm volatile("inb %1, %0" : "=a" (ret) : "dN" (port));
return ret;
}
#define outb _outb
#define inb _inb

View File

@ -0,0 +1,7 @@
#pragma once
#include <stdint.h>
#define PORT_COM1 0x3F8
void serial_init(uint16_t port);
void serial_write(uint16_t port, uint8_t c);