screen: implement cursor positioning
This commit is contained in:
@@ -39,5 +39,6 @@ void terminal_putentryat(char c, uint8_t color, size_t x, size_t y);
|
|||||||
void terminal_putchar(char c);
|
void terminal_putchar(char c);
|
||||||
void terminal_write(const char* data, size_t size);
|
void terminal_write(const char* data, size_t size);
|
||||||
void terminal_writestring(const char* data);
|
void terminal_writestring(const char* data);
|
||||||
|
void update_cursor(int x, int y);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// screen.c
|
// screen.c
|
||||||
#include "../include/screen.h"
|
#include "../include/screen.h"
|
||||||
#include "../include/string.h"
|
#include "../include/string.h"
|
||||||
|
#include "../include/utils.h"
|
||||||
|
|
||||||
static size_t terminal_row;
|
static size_t terminal_row;
|
||||||
static size_t terminal_column;
|
static size_t terminal_column;
|
||||||
@@ -83,6 +84,7 @@ void terminal_putchar(char c)
|
|||||||
if (c == 'H') {
|
if (c == 'H') {
|
||||||
terminal_row = 0;
|
terminal_row = 0;
|
||||||
terminal_column = 0;
|
terminal_column = 0;
|
||||||
|
update_cursor(0, 0);
|
||||||
}
|
}
|
||||||
terminal_state = STATE_NORMAL;
|
terminal_state = STATE_NORMAL;
|
||||||
return;
|
return;
|
||||||
@@ -109,6 +111,7 @@ void terminal_putchar(char c)
|
|||||||
if (terminal_row >= VGA_HEIGHT) {
|
if (terminal_row >= VGA_HEIGHT) {
|
||||||
terminal_scroll();
|
terminal_scroll();
|
||||||
}
|
}
|
||||||
|
update_cursor(terminal_column, terminal_row);
|
||||||
}
|
}
|
||||||
|
|
||||||
void terminal_write(const char* data, size_t size)
|
void terminal_write(const char* data, size_t size)
|
||||||
@@ -121,3 +124,13 @@ void terminal_writestring(const char* data)
|
|||||||
{
|
{
|
||||||
terminal_write(data, strlen(data));
|
terminal_write(data, strlen(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_cursor(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));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user