Sending data (debug printing) to serial port
This commit is contained in:
parent
d05ddfeab4
commit
034a870ac7
@ -1,11 +1,10 @@
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <serial.h>
|
||||
|
||||
// TODO: Temporary declarations
|
||||
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)
|
||||
|
@ -20,11 +20,11 @@ void vga_write(char c)
|
||||
static int i = 0;
|
||||
vga_recv[i++] = c;
|
||||
}
|
||||
void serial_write(int port, char c)
|
||||
void serial_write(uint16_t port, uint8_t c)
|
||||
{
|
||||
(void)port;
|
||||
static int i = 0;
|
||||
serial_recv[i++] = c;
|
||||
serial_recv[i++] = (char)c;
|
||||
}
|
||||
|
||||
TEST(putch_sends_character_to_vga)
|
||||
|
@ -1,4 +1,6 @@
|
||||
#include <memory.h>
|
||||
#include <serial.h>
|
||||
#include <debug.h>
|
||||
|
||||
void clear_screen()
|
||||
{
|
||||
@ -17,10 +19,20 @@ void print_string(char *str)
|
||||
}
|
||||
}
|
||||
|
||||
void vga_write(char c)
|
||||
{
|
||||
// TODO: DUMMY
|
||||
(void)c;
|
||||
}
|
||||
|
||||
void kmain()
|
||||
{
|
||||
clear_screen();
|
||||
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(;;);
|
||||
}
|
||||
|
||||
|
19
src/kernel/drivers/serial.c
Normal file
19
src/kernel/drivers/serial.c
Normal 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);
|
||||
}
|
17
src/kernel/include/ports.h
Normal file
17
src/kernel/include/ports.h
Normal 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
|
7
src/kernel/include/serial.h
Normal file
7
src/kernel/include/serial.h
Normal 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);
|
Loading…
x
Reference in New Issue
Block a user