diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | src/c/cursor.c | 27 | ||||
| -rw-r--r-- | src/c/kernel.c | 2 | ||||
| -rw-r--r-- | src/include/asm.h | 4 | ||||
| -rw-r--r-- | src/include/source/cursor.h | 10 |
5 files changed, 42 insertions, 3 deletions
@@ -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 |
