aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/c/cursor.c27
-rw-r--r--src/c/kernel.c2
-rw-r--r--src/include/asm.h4
-rw-r--r--src/include/source/cursor.h10
5 files changed, 42 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 67f0d8c..c11ff8b 100644
--- a/Makefile
+++ b/Makefile
@@ -56,7 +56,7 @@ export AS_OBJECTS=$(patsubst %,$(AS_OBJECT_DIR)/%,$(AS_OBJ))
## C OBJECTS
C_OBJ=gdt.o heap.o idt.o kernel.o keyboard.o keymap.o stdio.o string.o tty.o \
vga.o irq_handler.o stack_protector.o timer.o paging.o shell/uptime.o \
-shell/neofetch.o shell/game.o
+shell/neofetch.o shell/game.o cursor.o
export C_OBJECTS=$(patsubst %,$(C_OBJECT_DIR)/%,$(C_OBJ))
## ALL OBJECTS IN ORDER
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");
}
diff --git a/src/include/asm.h b/src/include/asm.h
index ee15f00..e8261d5 100644
--- a/src/include/asm.h
+++ b/src/include/asm.h
@@ -9,8 +9,8 @@
#define PIC2_DATA_PORT 0xA1
-extern uint8_t ioport_in(uint8_t port);
-extern void ioport_out(uint8_t port, int data);
+extern uint8_t ioport_in(uint32_t port);
+extern void ioport_out(uint32_t port, uint32_t data);
#endif
diff --git a/src/include/source/cursor.h b/src/include/source/cursor.h
new file mode 100644
index 0000000..db38d63
--- /dev/null
+++ b/src/include/source/cursor.h
@@ -0,0 +1,10 @@
+#ifndef SOURCE_CURSOR_H
+#define SOURCE_CURSOR_H
+
+#include<types.h>
+
+void enable_cursor(uint32_t cursor_start, uint32_t cursor_end);
+void disable_cursor(void);
+uint16_t get_cursor_position(void);
+
+#endif