diff --git a/framebuffer.c b/framebuffer.c index 84c9370..bedd7c7 100644 --- a/framebuffer.c +++ b/framebuffer.c @@ -3,15 +3,15 @@ void fb_write_cell(unsigned int i, char c, unsigned char fg, unsigned char bg) { - char *fb = (char *) FB_ADDRESS; + char *fb = (char*) 0xB8000; // adresse du framebuffer *(fb + i) = c; - *(fb + i + 1) = ((bg & 0x0F) << 4) | (fg & 0x0F); + *(fb + i + 1) = (fg & 0x0F) | ((bg & 0x0F) << 4); // little endian ?? } void fb_move_cursor(unsigned short pos) { - outb(FB_ADDRESS_PORT, FB_HIGH_BYTE_COMMAND); + outb(FB_COMMAND_PORT, FB_HIGH_BYTE_COMMAND); outb(FB_DATA_PORT, (pos >> 8) & 0x00FF); - outb(FB_ADDRESS_PORT, FB_LOW_BYTE_COMMAND); + outb(FB_COMMAND_PORT, FB_HIGH_BYTE_COMMAND); outb(FB_DATA_PORT, pos & 0x00FF); } diff --git a/framebuffer.h b/framebuffer.h index 88f8308..fc29e8a 100644 --- a/framebuffer.h +++ b/framebuffer.h @@ -1,87 +1,28 @@ -/** @file framebuffer.h - * Fichier d'en-tête pour le framebuffer VGA. - * - * Références: - * - ports utilisés : - * https://wiki.osdev.org/VGA_Hardware#Port_0x3C4.2C_0x3CE.2C_0x3D4 - * - ports utilisés, registres, couleurs, explications sur les adresses - * mémoires pour communiquer avec le framebuffer VGA : - * http://www.brokenthorn.com/Resources/OSDev10.html - * - explications sur les registres et sous-registres accessibles via les - * ports : http://www.osdever.net/FreeVGA/vga/vgareg.htm#indexed - * - commandes possibles : http://www.osdever.net/FreeVGA/vga/crtcreg.htm - * - encodage du caractère pour le framebuffer : - * https://devse.wiki/x86_64/p%C3%A9riph%C3%A9riques/framebuffer.html - */ +/** @file framebuffer.h */ #ifndef FRAMEBUFFER_H #define FRAMEBUFFER_H /** - * @def FB_ADDRESS - * L'adresse mémoire du mode texte couleur du VGA. + * @def FB_COMMAND_PORT + * Le port pour pouvoir envoyer des instructions au curseur du framebuffer */ -#define FB_ADDRESS 0x000B8000 - -/** - * @def FB_ADDRESS_PORT - * Le port pour pouvoir indiquer le sous-registre que l'on souhaite modifier - * dans le framebuffer VGA. Il s'agit du registre d'adresses. - */ -#define FB_ADDRESS_PORT 0x3D4 - +#define FB_COMMAND_PORT 0x3D4 /** * @def FB_DATA_PORT - * Le port pour pouvoir indiquer des données à écrire dans un sous-registre du - * framebuffer VGA. Il s'agit du registre de données. + * Le port pour pouvoir envoyer des instructions au curseur du framebuffer */ #define FB_DATA_PORT 0x3D5 -/** - * @def FB_HIGH_BYTE_COMMAND - * Le sous-registre à modifier pour mettre à jour les premiers bits (15-8) du - * registre indiquant la position du curseur. - * - * Plus d'information : http://www.osdever.net/FreeVGA/vga/crtcreg.htm#0E - */ -#define FB_HIGH_BYTE_COMMAND 0x0E +#define FB_HIGH_BYTE_COMMAND 14 +#define FB_LOW_BYTE_COMMAND 15 -/** - * @def FB_LOW_BYTE_COMMAND - * Le sous-registre à modifier pour mettre à jour les derniers bits (7-0) du - * registre indiquant la position du curseur. - * - * Plus d'information : http://www.osdever.net/FreeVGA/vga/crtcreg.htm#0F - */ -#define FB_LOW_BYTE_COMMAND 0x0F - -#define FB_BLACK 0x00 -#define FB_BLUE 0x01 -#define FB_GREEN 0x02 -#define FB_CYAN 0x03 -#define FB_RED 0x04 -#define FB_MAGENTA 0x05 -#define FB_BROWN 0x06 -#define FB_L_GREY 0x07 -#define FB_D_GREY 0x08 -#define FB_L_BLUE 0x09 -#define FB_L_GREEN 0x0A -#define FB_L_CYAN 0x0B -#define FB_L_RED 0x0C -#define FB_L_MAGENRA 0x0D -#define FB_YELLOW 0x0E -#define FB_WHITE 0x0F +#define FB_WHITE 0x0F +#define FB_BLACK 0x00 /** * permet d'écrire dans un emplacement du framebuffer * - * Il va écrire dans l'emplacement i et i+1 du framebuffer le caractère c suivi - * d'un byte coupé en 2 : 4 bits pour la couleur du texte et 4 pour celle du - * fond. - * - * Structure du mot mit en mémoire où X = bit pour le caractère, Y la couleur - * du texte et Z couleur du fond : (0) XXXXXXXX YYYYZZZZ (15) - * * @param i l'emplacement où il faut écrire * @param c le caractère * @param fg la couleur du texte