Skip to content

Commit e0529c9

Browse files
committed
* Implemented serial IO
* Fixed some typos * Updated Makefile * Deleted object files
1 parent cf61bdb commit e0529c9

File tree

11 files changed

+122
-3
lines changed

11 files changed

+122
-3
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
*.elf
22
*.iso
33
.vscode
4-
.vscode/*
4+
.vscode/*
5+
**/*.o
6+
src/kernel/kernel.o

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ ISOFILE=$(PROJECT).iso
3232
OBJECTS= $(SRCDIR)/boot/boot.o \
3333
$(SRCDIR)/drivers/io/ports.o \
3434
$(SRCDIR)/common/system.o \
35+
$(SRCDIR)/drivers/io/serial.o \
3536
$(SRCDIR)/kernel/kernel.o
3637

3738
all: kernel iso

docs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
A new rewrite of SectorOS_RE2.
44

5-
The kernel is currently v0.23.03.1ALP
5+
The kernel is currently v0.23.03.1ALPR
66

77
## Build
88

docs/changelog.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,11 @@
55
* Added link.ld
66
* Added system.h
77
* Added system.c
8-
* Implemented port IO
8+
* Implemented reboot
9+
* Implemented port IO
10+
11+
26-03-2023: 08:48 PM IST v0.23.03.1ALPR
12+
* Implemented serial IO
13+
* Fixed some typos
14+
* Updated Makefile
15+
* Deleted object files

src/boot/boot.o

-804 Bytes
Binary file not shown.

src/common/system.o

-616 Bytes
Binary file not shown.

src/drivers/io/ports.o

-804 Bytes
Binary file not shown.

src/drivers/io/serial.c

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#include "serial.h"
2+
3+
serialio_t serial;
4+
5+
#define PORT serial.port
6+
7+
int init_serial(uint16_t port, int skip_test)
8+
{
9+
serial.port = port;
10+
serial.type = SERIALIO_COMMUNICATION;
11+
serial.skip_test = skip_test;
12+
13+
14+
outb(serial.port + 1, 0x00);
15+
outb(serial.port + 3, 0x80);
16+
outb(serial.port + 0, 0x03);
17+
outb(serial.port + 1, 0x00);
18+
outb(serial.port + 3, 0x03);
19+
outb(serial.port + 2, 0xC7);
20+
outb(serial.port + 4, 0x0B);
21+
22+
if(skip_test != 1)
23+
{
24+
outb(serial.port + 4, 0x1E);
25+
outb(serial.port + 0, 0xAE);
26+
if(inb(serial.port + 0) != 0xAE)
27+
{
28+
return;
29+
}
30+
}
31+
32+
outb(serial.port + 4, 0x0F);
33+
}
34+
35+
int serial_received()
36+
{
37+
return inb(serial.port + 5) & 1;
38+
}
39+
40+
char read_serial()
41+
{
42+
while(serial_received() == 0)
43+
44+
return inb(serial.port);
45+
}
46+
47+
int is_transmit_empty()
48+
{
49+
return inb(serial.port + 5) & 0x20;
50+
}
51+
52+
void write_serial(char val)
53+
{
54+
while(is_transmit_empty() == 0);
55+
outb(serial.port, val);
56+
}
57+
58+
void serial_putc(char c)
59+
{
60+
if(c == '\n')
61+
{
62+
write_serial('\r\n');
63+
return;
64+
}
65+
write_serial(c);
66+
}
67+
68+
void serial_puts(char* str)
69+
{
70+
while(*str != 0)
71+
{
72+
serial_putc(*str);
73+
str++;
74+
}
75+
}

src/include/serial.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef __SERIAL_H__
2+
#define __SERIAL_H__
3+
4+
#include "system.h"
5+
#include "ports.h"
6+
7+
#define COM1 0x3F8
8+
#define COM2 0x2F8
9+
#define COM3 0x3E8
10+
#define COM4 0x2E8
11+
12+
#define SERIALIO_COMMUNICATION 0
13+
14+
typedef struct serialio
15+
{
16+
uint32_t type;
17+
uint16_t port;
18+
int skip_test;
19+
}serialio_t;
20+
21+
int init_serial(uint16_t port, int skip_test);
22+
void serial_putc(char c);
23+
void serial_puts(char* str);
24+
25+
char read_serial();
26+
27+
#endif /*__SERIAL_H__*/

src/kernel/kernel.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
#include "system.h"
22
#include "multiboot.h"
3+
#include "serial.h"
34

45
void kernelmain(const multiboot_info_t* info, uint32_t multiboot_magic)
56
{
7+
init_serial(COM1, 0);
68
if(multiboot_magic != 0x2BADB002)
79
{
10+
serial_puts("multiboot bootloader magic is invalid\n");
811
return;
912
}
13+
serial_puts("multiboot bootloader magic is valid...\n");
14+
serial_puts("Kernel version is:");
15+
serial_puts(KERNEL_VERSION);
16+
serial_putc('\n');
1017
reboot();
1118
}

0 commit comments

Comments
 (0)