Commit 146a06f0 authored by Mathieu Maret's avatar Mathieu Maret

wip: add blinking cursor

parent 9b46b60b
......@@ -29,6 +29,7 @@ void kmain(unsigned long magic, unsigned long addr)
{
unsigned long upper_mem = 0;
VGASetup(BLACK, GREEN);
cursorEnable(14, 15);
printf("Setting up Interruptions\n");
gdtSetup();
......
......@@ -34,7 +34,7 @@ void printInt(int integer)
if (integer < 0) {
printChar('-');
}
if (integer == 0){
if (integer == 0) {
num[i++] = 0;
}
while (integer != 0) {
......@@ -57,7 +57,7 @@ void printIntDetails(int integer, uint color, uint bgColor, int startX, int star
if (integer < 0) {
printCharDetails('-', color, bgColor, x++, startY);
}
if (integer == 0){
if (integer == 0) {
num[i++] = 0;
}
while (integer != 0) {
......@@ -111,7 +111,7 @@ void vprintf(const char *format, va_list ap)
}
case 's': {
char *str = va_arg(ap, char *);
if(!str)
if (!str)
str = "[NULL STR]";
printString(str);
break;
......@@ -130,14 +130,14 @@ void vprintf(const char *format, va_list ap)
}
}
void printf(const char *format, ...){
void printf(const char *format, ...)
{
va_list ap;
va_start(ap, format);
vprintf(format, ap);
va_end(ap);
}
void printString(const char *str)
{
while (*str) {
......@@ -154,22 +154,16 @@ void printChar(const char str)
vgaScrollUp();
line--;
}
}
else if(str == '\r')
{
} else if (str == '\r') {
col = 0;
}
else if(str == '\b')
{
} else if (str == '\b') {
col--;
if (col < 0) {
col = VGA_WIDTH - 1;
line--;
}
printCharDetails(' ', vgaColor, vgaBgColor, col, line);
}
else
{
} else {
printCharDetails(str, vgaColor, vgaBgColor, col++, line);
if (col == VGA_WIDTH) {
col = 0;
......@@ -180,6 +174,7 @@ void printChar(const char str)
line--;
}
}
cursorMove(col - 1, line);
}
void printStringDetails(const char *str, uint color, uint bgColor, int startX, int startY)
......@@ -193,3 +188,28 @@ void printStringDetails(const char *str, uint color, uint bgColor, int startX, i
i++;
}
}
void cursorEnable(uint8_t cursor_start, uint8_t cursor_end)
{
outb(0x3D4, 0x0A);
outb(0x3D5, (inb(0x3D5) & 0xC0) | cursor_start);
outb(0x3D4, 0x0B);
outb(0x3D5, (inb(0x3D5) & 0xE0) | cursor_end);
}
void cursorDisable(void)
{
outb(0x3D4, 0x0A);
outb(0x3D5, 0x20);
}
void cursorMove(int x, int y)
{
uint16_t pos = y * VGA_WIDTH + x;
outb(0x3D4, 0x0F);
outb(0x3D5, (uint8_t)(pos & 0xFF));
outb(0x3D4, 0x0E);
outb(0x3D5, (uint8_t)((pos >> 8) & 0xFF));
}
......@@ -27,3 +27,6 @@ void printStringDetails(const char *str, uint color, uint bgColor, int startX, i
void printString(const char *str);
void printChar(const char str);
void vgaScrollUp(void);
void cursorEnable(uint8_t cursor_start, uint8_t cursor_end);
void cursorDisable(void);
void cursorMove(int x, int y);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment