Sending data (debug printing) to serial port
This commit is contained in:
parent
d05ddfeab4
commit
034a870ac7
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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(;;);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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