aboutsummaryrefslogtreecommitdiff
path: root/src/c
diff options
context:
space:
mode:
Diffstat (limited to 'src/c')
-rw-r--r--src/c/cursor.c27
-rw-r--r--src/c/kernel.c2
2 files changed, 29 insertions, 0 deletions
diff --git a/src/c/cursor.c b/src/c/cursor.c
new file mode 100644
index 0000000..328b424
--- /dev/null
+++ b/src/c/cursor.c
@@ -0,0 +1,27 @@
+#include<source/cursor.h>
+#include<asm.h>
+
+void enable_cursor(uint32_t cursor_start, uint32_t cursor_end)
+{
+ ioport_out(0x3D4, 0x0A);
+ ioport_out(0x3D5, (ioport_in(0x3D5) & 0xC0) | cursor_start);
+
+ ioport_out(0x3D4, 0x0B);
+ ioport_out(0x3D5, (ioport_in(0x3D5) & 0xE0) | cursor_end);
+}
+
+void disable_cursor()
+{
+ ioport_out(0x3D4, 0x0A);
+ ioport_out(0x3D5, 0x20);
+}
+
+uint16_t get_cursor_position(void)
+{
+ uint16_t pos = 0;
+ ioport_out(0x3D4, 0x0F);
+ pos |= (uint16_t)ioport_in(0x3D5);
+ ioport_out(0x3D4, 0x0E);
+ pos |= (uint16_t)(ioport_in(0x3D5) << 8);
+ return pos;
+}
diff --git a/src/c/kernel.c b/src/c/kernel.c
index 9692b32..5851f49 100644
--- a/src/c/kernel.c
+++ b/src/c/kernel.c
@@ -6,6 +6,7 @@
#include<source/heap.h>
#include<source/vga.h>
#include<source/tty.h>
+#include<source/cursor.h>
void kernel_main(void)
{
@@ -18,6 +19,7 @@ void kernel_main(void)
terminal_initialize();
prompt();
+ disable_cursor();
while(1) __asm__("hlt\n\t");
}