From 987d6c6e5e931f349a3f48b890a2ab9ee0c430b4 Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Wed, 29 Jun 2022 17:23:50 +0200 Subject: disabled cursor --- Makefile | 2 +- src/c/cursor.c | 27 +++++++++++++++++++++++++++ src/c/kernel.c | 2 ++ src/include/asm.h | 4 ++-- src/include/source/cursor.h | 10 ++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/c/cursor.c create mode 100644 src/include/source/cursor.h 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 +#include + +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 #include #include +#include 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 + +void enable_cursor(uint32_t cursor_start, uint32_t cursor_end); +void disable_cursor(void); +uint16_t get_cursor_position(void); + +#endif -- cgit v1.2.3