/** @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 */ #ifndef FRAMEBUFFER_H #define FRAMEBUFFER_H /** * @def FB_ADDRESS * L'adresse mémoire du mode texte couleur du VGA. */ #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 0x03D4 /** * @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. */ #define FB_DATA_PORT 0x03D5 /** * @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 /** * @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 /** * 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 * @param bg la couleur du fond du texte */ void fb_write_cell(unsigned int i, char c, unsigned char fg, unsigned char bg); /** * permet de déplacer le curseur du framebuffer * * @param pos la position où déplacer le curseur */ void fb_move_cursor(unsigned short pos); #endif