réplica de
https://github.com/Arnau478/quark.git
synced 2024-11-23 12:58:07 +01:00
VGA set_cursor() and get_cursor()
This commit is contained in:
pare
541d7924b0
commit
1816cefb47
S'han modificat 3 arxius amb 22 adicions i 0 eliminacions
|
@ -1,4 +1,5 @@
|
||||||
#include "vga.h"
|
#include "vga.h"
|
||||||
|
#include "../arch/i686/io.h"
|
||||||
|
|
||||||
void set_char(int x, int y, char c){
|
void set_char(int x, int y, char c){
|
||||||
VGA_MEMORY[(x+y*VGA_WIDTH)*2] = c;
|
VGA_MEMORY[(x+y*VGA_WIDTH)*2] = c;
|
||||||
|
@ -7,3 +8,18 @@ void set_char(int x, int y, char c){
|
||||||
void set_color(int x, int y, uint8_t color){
|
void set_color(int x, int y, uint8_t color){
|
||||||
VGA_MEMORY[(x+y*VGA_WIDTH)*2+1] = color;
|
VGA_MEMORY[(x+y*VGA_WIDTH)*2+1] = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_cursor(int offset){
|
||||||
|
i686_outb(VGA_PORT_CTRL, 14);
|
||||||
|
i686_outb(VGA_PORT_DATA, (uint8_t)(offset >> 8));
|
||||||
|
i686_outb(VGA_PORT_CTRL, 15);
|
||||||
|
i686_outb(VGA_PORT_DATA, (uint8_t)(offset & 0xff));
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_cursor(){
|
||||||
|
i686_outb(VGA_PORT_CTRL, 14);
|
||||||
|
int offset = i686_inb(VGA_PORT_DATA) << 8; // High byte
|
||||||
|
i686_outb(VGA_PORT_CTRL, 15);
|
||||||
|
offset += i686_inb(VGA_PORT_DATA); // Low byte
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
|
@ -41,5 +41,10 @@
|
||||||
#define VGA_WIDTH 80
|
#define VGA_WIDTH 80
|
||||||
#define VGA_HEIGHT 25
|
#define VGA_HEIGHT 25
|
||||||
|
|
||||||
|
#define VGA_PORT_CTRL 0x3D4
|
||||||
|
#define VGA_PORT_DATA 0x3D5
|
||||||
|
|
||||||
void set_char(int x, int y, char c);
|
void set_char(int x, int y, char c);
|
||||||
void set_color(int x, int y, uint8_t color);
|
void set_color(int x, int y, uint8_t color);
|
||||||
|
void set_cursor(int offset);
|
||||||
|
int get_cursor();
|
||||||
|
|
|
@ -5,5 +5,6 @@ void __attribute__((cdecl)) kmain(uint64_t magic, uint64_t addr){
|
||||||
// Print a light cyan 'X' over green on the top left corner
|
// Print a light cyan 'X' over green on the top left corner
|
||||||
set_char(0, 0, 'X');
|
set_char(0, 0, 'X');
|
||||||
set_color(0, 0, VGA_COLOR_BG_GREEN | VGA_COLOR_FG_LIGHT_CYAN);
|
set_color(0, 0, VGA_COLOR_BG_GREEN | VGA_COLOR_FG_LIGHT_CYAN);
|
||||||
|
set_cursor(1);
|
||||||
for(;;); // Halt here
|
for(;;); // Halt here
|
||||||
}
|
}
|
||||||
|
|
Loading…
Referencia en una nova incidència